Name: series-workflowjvlxx Phase: Running StartedAt: 2026-07-09 11:03:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlxx[0] Phase: Running StartedAt: 2026-07-09 11:03:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlxx[0].run-triage Phase: Running StartedAt: 2026-07-09 11:03:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlxx[0].run-triage(0) Phase: Running StartedAt: 2026-07-09 11:03:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08030ddb87b4c6c6a2c03c82731b5e188f02f5b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_ONSEMI", "S2500_MACPHY", "OA_TC6", "NCN26000_PHY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "08030ddb87b4c6c6a2c03c82731b5e188f02f5b9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_ONSEMI", "S2500_MACPHY", "OA_TC6", "NCN26000_PHY" ], "series_id": "1b5803e8-2fd9-402b-8acd-bfa5b7d49747" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "s2500_probe", "s2500_open", "s2500_ioctl", "s2500_hwtstamp_set", "s2500_set_multicast_mode", "s2500_ptp_adjtime", "oa_tc6_hwtstamp_set", "oa_tc6_tstamp_ioctl", "oa_tc6_ptp_register", "ncn26000_c45_plca_set_cfg" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA5IDExOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfT05TRU1JJiMzNDssCiAgICAmIzM0O1MyNTAwX01BQ1BIWSYjMzQ7LAogICAgJiMzNDtPQV9UQzYmIzM0OywKICAgICYjMzQ7TkNOMjYwMDBfUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7czI1MDBfcHJvYmUmIzM0OywKICAgICYjMzQ7czI1MDBfb3BlbiYjMzQ7LAogICAgJiMzNDtzMjUwMF9pb2N0bCYjMzQ7LAogICAgJiMzNDtzMjUwMF9od3RzdGFtcF9zZXQmIzM0OywKICAgICYjMzQ7czI1MDBfc2V0X211bHRpY2FzdF9tb2RlJiMzNDssCiAgICAmIzM0O3MyNTAwX3B0cF9hZGp0aW1lJiMzNDssCiAgICAmIzM0O29hX3RjNl9od3RzdGFtcF9zZXQmIzM0OywKICAgICYjMzQ7b2FfdGM2X3RzdGFtcF9pb2N0bCYjMzQ7LAogICAgJiMzNDtvYV90YzZfcHRwX3JlZ2lzdGVyJiMzNDssCiAgICAmIzM0O25jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmcmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTUEktYmFzZWQgZXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgb25zZW1pIFMyNTAwIE1BQ1BIWSwgYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgT0EgVEM2IGZyYW1ld29yaywgYW5kIHVwZGF0ZXMgdGhlIE5DTjI2MDAwIFBIWSBkcml2ZXIuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBQSFkgZHJpdmVycyB0aGF0IGNhbiBiZSBpbnRlcmFjdGVkIHdpdGggdmlhIGV0aHRvb2wsIG5ldGxpbmssIGFuZCBpb2N0bHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDkgMTE6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYmQ1NTVjNzJkYTM2MzFjYTAzMWU5NDY1ZGQ1YjI4YzhkYmM3OGRiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgOSAxMToxODo0MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L29ubm4sczI1MDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvb25ubixzMjUwMC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjExZWRmMTA1MDhkOWYzXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L29ubm4sczI1MDAueWFtbFxuQEAgLTAsMCAmIzQzOzEsNjcgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXG4mIzQzOyVZQU1MIDEuMlxuJiM0MzstLS1cbiYjNDM7JGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvb25ubixzMjUwMC55YW1sI1xuJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbiYjNDM7XG4mIzQzO3RpdGxlOiBvbnNlbWkgUzI1MDAgMTBCQVNFLVQxUyBNQUNQSFkgRXRoZXJuZXQgQ29udHJvbGxlcnNcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gUGllcmdpb3JnaW8gQmVydXRvIFx1MDAzY3BpZXIuYmVydXRvQG9uc2VtaS5jb21cdTAwM2VcbiYjNDM7ICAtIFNlbHZhIFJhamFnb3BhbCBcdTAwM2NTZWx2YW1hbmkuUmFqYWdvcGFsQG9uc2VtaS5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIFRoZSBTMjUwMCBjb21iaW5lcyBhIE1lZGlhIEFjY2VzcyBDb250cm9sbGVyIChNQUMpIGFuZCBhblxuJiM0MzsgIEV0aGVybmV0IFBIWSB0byBlbmFibGUgMTBCQVNF4oCRVDFTIG5ldHdvcmtzLiBUaGUgRXRoZXJuZXQgTWVkaWEgQWNjZXNzXG4mIzQzOyAgQ29udHJvbGxlciAoTUFDKSBtb2R1bGUgaW1wbGVtZW50cyBhIDEwIE1icHMgaGFsZiBkdXBsZXggRXRoZXJuZXQgTUFDLFxuJiM0MzsgIGNvbXBhdGlibGUgd2l0aCB0aGUgSUVFRSA4MDIuMyBzdGFuZGFyZCBhbmQgYSAxMEJBU0UtVDFTIHBoeXNpY2FsIGxheWVyXG4mIzQzOyAgdHJhbnNjZWl2ZXIgaW50ZWdyYXRlZCBpbnRvIHRoZSBTMjUwMC4gVGhlIGNvbW11bmljYXRpb24gYmV0d2VlblxuJiM0MzsgIHRoZSBob3N0IGFuZCB0aGUgTUFDLVBIWSBpcyBzcGVjaWZpZWQgaW4gdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeFxuJiM0MzsgIE1BQ1BIWSBTZXJpYWwgSW50ZXJmYWNlIChUQzYpLlxuJiM0MztcbiYjNDM7YWxsT2Y6XG4mIzQzOyAgLSAkcmVmOiAvc2NoZW1hcy9uZXQvZXRoZXJuZXQtY29udHJvbGxlci55YW1sI1xuJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvc3BpL3NwaS1wZXJpcGhlcmFsLXByb3BzLnlhbWwjXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBjb25zdDogb25ubixzMjUwMFxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICBpbnRlcnJ1cHRzOlxuJiM0MzsgICAgZGVzY3JpcHRpb246XG4mIzQzOyAgICAgIEludGVycnVwdCBmcm9tIE1BQy1QSFkgYXNzZXJ0ZWQgaW4gdGhlIGV2ZW50IG9mIFJlY2VpdmUgQ2h1bmtzXG4mIzQzOyAgICAgIEF2YWlsYWJsZSwgVHJhbnNtaXQgQ2h1bmsgQ3JlZGl0cyBBdmFpbGFibGUgYW5kIEV4dGVuZGVkIFN0YXR1c1xuJiM0MzsgICAgICBFdmVudC5cbiYjNDM7ICAgIG1heEl0ZW1zOiAxXG4mIzQzO1xuJiM0MzsgIHNwaS1tYXgtZnJlcXVlbmN5OlxuJiM0MzsgICAgbWF4aW11bTogMjUwMDAwMDBcbiYjNDM7XG4mIzQzO3JlcXVpcmVkOlxuJiM0MzsgIC0gY29tcGF0aWJsZVxuJiM0MzsgIC0gcmVnXG4mIzQzOyAgLSBpbnRlcnJ1cHRzXG4mIzQzOyAgLSBzcGktbWF4LWZyZXF1ZW5jeVxuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaFx1MDAzZVxuJiM0MzsgICAgc3BpIHtcbiYjNDM7ICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4mIzQzO1xuJiM0MzsgICAgICBldGhlcm5ldEAwIHtcbiYjNDM7ICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7b25ubixzMjUwMFwmIzM0OztcbiYjNDM7ICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgIHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuJiM0MzsgICAgICAgIHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNmV0aDBfcGluc1x1MDAzZTtcbiYjNDM7ICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gXHUwMDNjXHUwMDI2Z3Bpb1x1MDAzZTtcbiYjNDM7ICAgICAgICBpbnRlcnJ1cHRzID0gXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXHUwMDNlO1xuJiM0MzsgICAgICAgIHNwaS1tYXgtZnJlcXVlbmN5ID0gXHUwMDNjMTUwMDAwMDBcdTAwM2U7XG4mIzQzOyAgICAgIH07XG4mIzQzOyAgICB9O1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdFxuaW5kZXggZmUyYWFiZGU5MjNhNTcuLjMyNWQyOTlkMWE3ZGMyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3RcbkBAIC0xNTMsNiAmIzQzOzE1MywxMCBAQCBPUEVOIEFsbGlhbmNlIFRDNiBGcmFtZXdvcmtcbiAtIEZvcndhcmRzIHRoZSByZWNlaXZlZCBFdGhlcm5ldCBmcmFtZSBmcm9tIDEwQmFzZS1UMXggTUFDLVBIWSB0byBuL3dcbiAgIHN1YnN5c3RlbS5cbiBcbiYjNDM7LSBJZiBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlIGFuZCBlbmFibGVkLCB1cGRhdGVzIGhhcmR3YXJlIHRpbWVzdGFtcFxuJiM0MzsgIGluIHNrYiwgd2hlbiBpbmRpY2F0ZWQgYnkgb25lIG9mIHRoZSB0aHJlZSB0aW1lc3RhbXAgY2FwdHVyZSByZWdpc3RlcnNcbiYjNDM7ICB0aHJvdWdoIFRTQyBmaWVsZHMgb2YgdGhlIGhlYWRlci5cbiYjNDM7XG4gRGF0YSBUcmFuc2FjdGlvblxuIH5+fn5+fn5+fn5+fn5+fn5cbiBcbkBAIC00OTUsMyAmIzQzOzQ5OSw3OSBAQCB0aGUgTUFDLVBIWS5cbiBaZXJvIGFsaWduIHJlY2VpdmUgZnJhbWUgZmVhdHVyZSBjYW4gYmUgZW5hYmxlZCB0byBhbGlnbiBhbGwgcmVjZWl2ZSBldGhlcm5ldFxuIGZyYW1lcyBkYXRhIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW55IHJlY2VpdmUgZGF0YSBjaHVuayBwYXlsb2FkIHdpdGggYVxuIHN0YXJ0IHdvcmQgb2Zmc2V0IChTV08pIG9mIHplcm8uXG4mIzQzO1xuJiM0MzsuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl9wdHBfcmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvKTtcbiYjNDM7XG4mIzQzO1JlZ2lzdGVycyB0aGUgUFRQIGhhcmR3YXJlIGNsb2NrIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGggdGhlIGtlcm5lbC5cbiYjNDM7VGhpcyBBUEkgc2ltcGx5IHJlZ2lzdGVycy4gSW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpZWxkcyBpbiB0aGVcbiYjNDM7cHRwX2Nsb2NrX2luZm8gc3RydWN0dXJlIGFyZSBsZWZ0IHRvIHRoZSB2ZW5kb3IgYXMgcHJvZ3JhbW1pbmcgaGFyZHdhcmVcbiYjNDM7dGltZXIgaXMgZXhwZWN0ZWQgdG8gYmUgdmVuZG9yIGRlcGVuZGVudC4gVGhlIGZpZWxkcyBtYXhfYWRqLCBvd25lcixcbiYjNDM7YW5kIGFsbCB0aGUgZnVuY3Rpb25zIGZvciB0aGUgY2xvY2sgb3BlcmF0aW9ucywgbGlrZSBhZGpmaW5lLCBnZXR0aW1leDY0LFxuJiM0MztzZXR0aW1lNjQsIGFkanRpbWUgYXJlIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkIGluIHRoZSBzdHJ1Y3R1cmUgYmVmb3JlXG4mIzQzO2NhbGxpbmcgdGhlIHJlZ2lzdGVyaW5nIHRoZSBoYXJkd2FyZSBjbG9jay5cbiYjNDM7XG4mIzQzOy4uIGM6ZnVuY3Rpb246OiB2b2lkIG9hX3RjNl9wdHBfdW5yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xuJiM0MztcbiYjNDM7VW5yZWdpc3RlcnMgdGhlIFBUUCBoYXJkd2FyZSBjbG9jayByZWxhdGVkIGNhbGxiYWNrcy5cbiYjNDM7XG4mIzQzOy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X2lvY3RsKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IGlmcmVxICpycSwgXFxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNtZCk7XG4mIzQzO1xuJiM0Mztpb2N0bCBpbnRlcmZhY2UgdG8gaGFuZGxlIGhhcmR3YXJlIHRpbWVzdGFtcCBhbmQgUEhZIHJlbGF0ZWQgY29tbWFuZHMuXG4mIzQzO1xuJiM0MzsuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl9nZXRfdHNfaW5mbyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKTtcbiYjNDM7XG4mIzQzO1Byb3ZpZGVzIHRpbWVzdGFtcCByZWxhdGVkIHNldHRpbmdzIHRoYXQgYXJlIHN1cHBvcnRlZCB0byBldGh0b29sLlxuJiM0MztcbiYjNDM7Li4gYzpmdW5jdGlvbjo6IHZvaWQgb2FfdGM2X2h3dHN0YW1wX2dldChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG4mIzQzO1xuJiM0MztSZXR1cm5zIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uLiBQYXJ0IG9mIG5ldF9kZXZpY2Vfb3BzIGNhbGxiYWNrcy5cbiYjNDM7XG4mIzQzOy4uIGM6ZnVuY3Rpb246OiB2b2lkIG9hX3RjNl9nZXRfdHNfc3RhdHMoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICp0c19zdGF0cyk7XG4mIzQzO1xuJiM0MztQcm92aWRlcyBoYXJkd2FyZSB0aW1lc3RhbXAgcmVsYXRlZCB0cmFmZmljIHN0YXRpc3RpY3MgZm9yIGV0aHRvb2wuXG4mIzQzO1xuJiM0MzsuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl9od3RzdGFtcF9zZXQoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuJiM0MztcbiYjNDM7SGVscGVyIHRvIHNldCBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlndXJhdGlvbi4gUGFydCBvZiBuZXRfZGV2aWNlX29wc1xuJiM0MztjYWxsYmFja3MuXG4mIzQzO1xuJiM0MzsuLiBjOmZ1bmN0aW9uOjogdm9pZCBvYV90YzZfc2V0X3ZlbmQxX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIGludCBtbXMpO1xuJiM0MztcbiYjNDM7SGVscGVyIHRvIG1hcCBNRElPX01NRF9WRU5EMSBjb21tYW5kIHRvIHZlbmRvciBzcGVjaWZpYyBNZW1vcnkgTWFwIFNlbGVjdFxuJiM0MzsoTU1TKSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBvZmZlcnMgZmxleGliaWxpdHkgZm9yIHZlbmRvcnMgdGhhdCBtYXkgaGF2ZVxuJiM0Mzt1c2VkIGFueSBNTVMgdmFsdWUgYmV0d2VlbiAxMCBhbmQgMTUgYXMgYWxsb3dlZCBieSB0aGUgc3BlY2lmaWNhdGlvbi5cbiYjNDM7TURJT19NTURfVkVORDIgaXMgYWxyZWFkeSBtYXBwZWQgdG8gTU1TNCBpbiB0aGUgT0EgVEM2IGZyYW1lIHdvcmsgY29kZS5cbiYjNDM7XG4mIzQzOy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1MTYgbW1zLCBcXFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpO1xuJiM0MztcbiYjNDM7V3JpdGluZyBtdWx0aXBsZSBjb25zZWN1dGl2ZSByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBAYWRkcmVzcyBmb3IgdGhlXG4mIzQzO2dpdmVuIEBtbXMgbWVtb3J5IG1hcCBzZWxlY3RvciBpbiB0aGUgTUFDLVBIWS4gTWF4aW11bSBvZiAxMjggY29uc2VjdXRpdmVcbiYjNDM7cmVnaXN0ZXJzIGNhbiBiZSB3cml0dGVuIHN0YXJ0aW5nIGF0IEBhZGRyZXNzLlxuJiM0MztcbiYjNDM7Li4gYzpmdW5jdGlvbjo6IGludCBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1MTYgbW1zLCBcXFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZhbHVlKTtcbiYjNDM7XG4mIzQzO1dyaXRlIGEgc2luZ2xlIHJlZ2lzdGVyIGFkZHJlc3NlZCBieSBAYWRkcmVzcyBhbmQgQG1tcyBpbiB0aGUgTUFDLVBIWS5cbiYjNDM7XG4mIzQzOy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTE2IG1tcywgXFxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpO1xuJiM0MztcbiYjNDM7UmVhZGluZyBtdWx0aXBsZSBjb25zZWN1dGl2ZSByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBAYWRkcmVzcyBmb3IgdGhlXG4mIzQzO2dpdmVuIEBtbXMgbWVtb3J5IG1hcCBzZWxlY3RvciB2YWx1ZSwgaW4gdGhlIE1BQy1QSFkuIE1heGltdW0gb2YgMTI4XG4mIzQzO2NvbnNlY3V0aXZlIHJlZ2lzdGVycyBjYW4gYmUgcmVhZCBzdGFydGluZyBhdCBAYWRkcmVzcy5cbiYjNDM7XG4mIzQzOy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHUxNiBtbXMsIFxcXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqdmFsdWUpO1xuJiM0MztcbiYjNDM7UmVhZCBhIHNpbmdsZSByZWdpc3RlciBhZGRyZXNzZWQgYnkgQGFkZHJlc3MgYW5kIEBtbXMgaW4gdGhlIE1BQy1QSFkuXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xuaW5kZXggNTJmMWE1NWVjYTk5YmYuLjk1OGI5ZjYxZTM2NDE4IDEwMDY0NFxuLS0tIGEvTUFJTlRBSU5FUlNcbiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTXG5AQCAtMjAxODIsMTIgJiM0MzsyMDE4MiwyMCBAQCBTOlx0TWFpbnRhaW5lZFxuIEY6XHRhcmNoL21pcHMvYm9vdC9kdHMvcmFsaW5rL29tZWdhMnAuZHRzXG4gXG4gT05TRU1JIEVUSEVSTkVUIFBIWSBEUklWRVJTXG4tTTpcdFBpZXJnaW9yZ2lvIEJlcnV0byBcdTAwM2NwaWVyZ2lvcmdpby5iZXJ1dG9AZ21haWwuY29tXHUwMDNlXG4mIzQzO006XHRQaWVyZ2lvcmdpbyBCZXJ1dG8gXHUwMDNjcGllci5iZXJ1dG9Ab25zZW1pLmNvbVx1MDAzZVxuJiM0MztNOlx0U2VsdmEgUmFqYWdvcGFsIFx1MDAzY3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbVx1MDAzZVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdFN1cHBvcnRlZFxuIFc6XHRodHRwOi8vd3d3Lm9uc2VtaS5jb21cbiBGOlx0ZHJpdmVycy9uZXQvcGh5L25jbipcbiBcbiYjNDM7T05TRU1JIFMyNTAwIDEwQkFTRS1UMVMgTUFDUEhZIEVUSEVSTkVUIERSSVZFUlxuJiM0MztNOlx0U2VsdmEgUmFqYWdvcGFsIFx1MDAzY3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbVx1MDAzZVxuJiM0MztMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuJiM0MztTOlx0U3VwcG9ydGVkXG4mIzQzO0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L29ubm4sczI1MDAueWFtbFxuJiM0MztGOlx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwXypcbiYjNDM7XG4gT1AtVEVFIERSSVZFUlxuIE06XHRKZW5zIFdpa2xhbmRlciBcdTAwM2NqZW5zLndpa2xhbmRlckBsaW5hcm8ub3JnXHUwMDNlXG4gTDpcdG9wLXRlZUBsaXN0cy50cnVzdGVkZmlybXdhcmUub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycylcbkBAIC0yMDIwOSwxMCAmIzQzOzIwMjE3LDExIEBAIEY6XHRkcml2ZXJzL3J0Yy9ydGMtb3B0ZWUuY1xuIFxuIE9QRU4gQUxMSUFOQ0UgMTBCQVNFLVQxUyBNQUNQSFkgU0VSSUFMIElOVEVSRkFDRSBGUkFNRVdPUktcbiBNOlx0UGFydGhpYmFuIFZlZXJhc29vcmFuIFx1MDAzY3BhcnRoaWJhbi52ZWVyYXNvb3JhbkBtaWNyb2NoaXAuY29tXHUwMDNlXG4mIzQzO006XHRTZWx2YSBSYWphZ29wYWwgXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXHUwMDNlICh0aW1lc3RhbXAgc3VwcG9ydClcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdFxuLUY6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xuJiM0MztGOlx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNipcbiBGOlx0aW5jbHVkZS9saW51eC9vYV90YzYuaFxuIFxuIE9QRU4gRklSTVdBUkUgQU5EIEZMQVRURU5FRCBERVZJQ0UgVFJFRVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG5pbmRleCA3OGM3OWFkN2JiYTU1My4uMjc0MDJhNTkyYjI5NGQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXG5AQCAtMTM0LDcgJiM0MzsxMzQsOSBAQCBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9LY29uZmlnXCYjMzQ7XG4gc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L254cC9LY29uZmlnXCYjMzQ7XG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvS2NvbmZpZ1wmIzM0O1xuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9va2ktc2VtaS9LY29uZmlnXCYjMzQ7XG4mIzQzO3NvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvS2NvbmZpZ1wmIzM0O1xuIFxuIGNvbmZpZyBFVEhPQ1xuIFx0dHJpc3RhdGUgXCYjMzQ7T3BlbkNvcmVzIDEwLzEwMCBNYnBzIEV0aGVybmV0IE1BQyBzdXBwb3J0XCYjMzQ7XG5AQCAtMTQ2LDE3ICYjNDM7MTQ4LDYgQEAgY29uZmlnIEVUSE9DXG4gXHRoZWxwXG4gXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBPcGVuQ29yZXMgMTAvMTAwIE1icHMgRXRoZXJuZXQgTUFDLlxuIFxuLWNvbmZpZyBPQV9UQzZcbi1cdHRyaXN0YXRlIFwmIzM0O09QRU4gQWxsaWFuY2UgVEM2IDEwQkFTRS1UMXggTUFDLVBIWSBzdXBwb3J0XCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBTUElcbi1cdHNlbGVjdCBQSFlMSUJcbi1cdGhlbHBcbi1cdCAgVGhpcyBsaWJyYXJ5IGltcGxlbWVudHMgT1BFTiBBbGxpYW5jZSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZXG4tXHQgIFNlcmlhbCBJbnRlcmZhY2UgcHJvdG9jb2wgZm9yIHN1cHBvcnRpbmcgMTBCQVNFLVQxeCBNQUMtUEhZcy5cbi1cbi1cdCAgVG8ga25vdyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgcmVmZXIgZG9jdW1lbnRhdGlvbiBpblxuLVx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdFx1MDAzZS5cbi1cbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcGFzZW1pL0tjb25maWdcJiMzNDtcbiBzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZ1wmIzM0O1xuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZ1wmIzM0O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbmluZGV4IGJiYTU1ZDlhZjM4NzcwLi43N2IxMWQ1YTdhYmYxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuQEAgLTcxLDYgJiM0Mzs3MSw3IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX05FVFJPTk9NRSkgJiM0Mzs9IG5ldHJvbm9tZS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9OSSkgJiM0Mzs9IG5pL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX05WSURJQSkgJiM0Mzs9IG52aWRpYS9cbiBvYmotJChDT05GSUdfTFBDX0VORVQpICYjNDM7PSBueHAvXG4mIzQzO29iai0kKENPTkZJR19PQV9UQzYpICYjNDM7PSBvYV90YzYvXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfT0tJKSAmIzQzOz0gb2tpLXNlbWkvXG4gb2JqLSQoQ09ORklHX0VUSE9DKSAmIzQzOz0gZXRob2Mub1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BBU0VNSSkgJiM0Mzs9IHBhc2VtaS9cbkBAIC0xMDQsNCAmIzQzOzEwNSwzIEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJTElOWCkgJiM0Mzs9IHhpbGlueC9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT00pICYjNDM7PSB4aXJjb20vXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfU1lOT1BTWVMpICYjNDM7PSBzeW5vcHN5cy9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9QRU5TQU5ETykgJiM0Mzs9IHBlbnNhbmRvL1xuLW9iai0kKENPTkZJR19PQV9UQzYpICYjNDM7PSBvYV90YzYub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguY1xuaW5kZXggMDI3N2Q5NzM3MzY5YWQuLjNiNTU1ZWU2OTgwNDEwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmNcbkBAIC0xMywyNyAmIzQzOzEzLDI3IEBAXG4gI2RlZmluZSBEUlZfTkFNRVx0XHRcdFwmIzM0O2xhbjg2NTBcJiMzNDtcbiBcbiAvKiBNQUMgTmV0d29yayBDb250cm9sIFJlZ2lzdGVyICovXG4tI2RlZmluZSBMQU44NjVYX1JFR19NQUNfTkVUX0NUTFx0XHQweDAwMDEwMDAwXG4mIzQzOyNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX05FVF9DVExcdFx0MHgwXG4gI2RlZmluZSBNQUNfTkVUX0NUTF9UWEVOXHRcdEJJVCgzKSAvKiBUcmFuc21pdCBFbmFibGUgKi9cbiAjZGVmaW5lIE1BQ19ORVRfQ1RMX1JYRU5cdFx0QklUKDIpIC8qIFJlY2VpdmUgRW5hYmxlICovXG4gXG4gLyogTUFDIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWcgKi9cbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19ORVRfQ0ZHXHRcdDB4MDAwMTAwMDFcbiYjNDM7I2RlZmluZSBMQU44NjVYX1JFR19NQUNfTkVUX0NGR1x0XHQweDFcbiAjZGVmaW5lIE1BQ19ORVRfQ0ZHX1BST01JU0NVT1VTX01PREVcdEJJVCg0KVxuICNkZWZpbmUgTUFDX05FVF9DRkdfTVVMVElDQVNUX01PREVcdEJJVCg2KVxuICNkZWZpbmUgTUFDX05FVF9DRkdfVU5JQ0FTVF9NT0RFXHRCSVQoNylcbiBcbiAvKiBNQUMgSGFzaCBSZWdpc3RlciBCb3R0b20gKi9cbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19MX0hBU0hcdFx0MHgwMDAxMDAyMFxuJiM0MzsjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19MX0hBU0hcdFx0MHgyMFxuIC8qIE1BQyBIYXNoIFJlZ2lzdGVyIFRvcCAqL1xuLSNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0hfSEFTSFx0XHQweDAwMDEwMDIxXG4mIzQzOyNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0hfSEFTSFx0XHQweDIxXG4gLyogTUFDIFNwZWNpZmljIEFkZHIgMSBCb3R0b20gUmVnICovXG4tI2RlZmluZSBMQU44NjVYX1JFR19NQUNfTF9TQUREUjFcdDB4MDAwMTAwMjJcbiYjNDM7I2RlZmluZSBMQU44NjVYX1JFR19NQUNfTF9TQUREUjFcdDB4MjJcbiAvKiBNQUMgU3BlY2lmaWMgQWRkciAxIFRvcCBSZWcgKi9cbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19IX1NBRERSMVx0MHgwMDAxMDAyM1xuJiM0MzsjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19IX1NBRERSMVx0MHgyM1xuIFxuIC8qIE1BQyBUU1UgVGltZXIgSW5jcmVtZW50IFJlZ2lzdGVyICovXG4tI2RlZmluZSBMQU44NjVYX1JFR19NQUNfVFNVX1RJTUVSX0lOQ1JcdFx0MHgwMDAxMDA3N1xuJiM0MzsjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19UU1VfVElNRVJfSU5DUlx0XHQweDc3XG4gI2RlZmluZSBNQUNfVFNVX1RJTUVSX0lOQ1JfQ09VTlRfTkFOT1NFQ09ORFNcdDB4MDAyOFxuIFxuIHN0cnVjdCBsYW44NjV4X3ByaXYge1xuQEAgLTQ5LDcgJiM0Mzs0OSw4IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfaHdfbWFjYWRkcl9sb3dfYnl0ZXMoc3RydWN0IG9hX3RjNiAqdGM2LCBjb25zdCB1OCAqbWFjKVxuIFxuIFx0cmVndmFsID0gKG1hY1szXSBcdTAwM2NcdTAwM2MgMjQpIHwgKG1hY1syXSBcdTAwM2NcdTAwM2MgMTYpIHwgKG1hY1sxXSBcdTAwM2NcdTAwM2MgOCkgfCBtYWNbMF07XG4gXG4tXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgTEFOODY1WF9SRUdfTUFDX0xfU0FERFIxLCByZWd2YWwpO1xuJiM0MztcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHRjNiwgTEFOODY1WF9SRUdfTUFDX0xfU0FERFIxLFxuJiM0MztcdFx0XHRcdFx0IE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCByZWd2YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGxhbjg2NXhfc2V0X2h3X21hY2FkZHIoc3RydWN0IGxhbjg2NXhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hYylcbkBAIC02NSw4ICYjNDM7NjYsOCBAQCBzdGF0aWMgaW50IGxhbjg2NXhfc2V0X2h3X21hY2FkZHIoc3RydWN0IGxhbjg2NXhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hYylcbiBcbiBcdC8qIFByZXBhcmUgYW5kIGNvbmZpZ3VyZSBNQUMgYWRkcmVzcyBoaWdoIGJ5dGVzICovXG4gXHRyZWd2YWwgPSAobWFjWzVdIFx1MDAzY1x1MDAzYyA4KSB8IG1hY1s0XTtcbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfU0FERFIxLFxuLVx0XHRcdFx0ICAgIHJlZ3ZhbCk7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfU0FERFIxLFxuJiM0MztcdFx0XHRcdFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIHJlZ3ZhbCk7XG4gXHRpZiAoIXJldClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTQ2LDE0ICYjNDM7MTQ3LDE2IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfc3BlY2lmaWNfbXVsdGljYXN0X2FkZHIoc3RydWN0IGxhbjg2NXhfcHJpdiAqcHJpdilcbiBcdH1cbiBcbiBcdC8qIEVuYWJsaW5nIHNwZWNpZmljIG11bHRpY2FzdCBhZGRyZXNzZXMgKi9cbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCwgaGFzaF9oaSk7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCxcbiYjNDM7XHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCBoYXNoX2hpKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZW5ldGRldiwgXCYjMzQ7RmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNoaDogJWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCwgaGFzaF9sbyk7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCxcbiYjNDM7XHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCBoYXNoX2xvKTtcbiBcdGlmIChyZXQpXG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZXRkZXYsIFwmIzM0O0ZhaWxlZCB0byB3cml0ZSByZWdfaGFzaGw6ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHJldCk7XG5AQCAtMTY2LDE2ICYjNDM7MTY5LDE2IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfYWxsX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpXG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogRW5hYmxpbmcgYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMgKi9cbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCxcbi1cdFx0XHRcdCAgICAweGZmZmZmZmZmKTtcbiYjNDM7XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfSF9IQVNILFxuJiM0MztcdFx0XHRcdFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIDB4ZmZmZmZmZmYpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlbmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgcmVnX2hhc2hoOiAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICByZXQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTF9IQVNILFxuLVx0XHRcdFx0ICAgIDB4ZmZmZmZmZmYpO1xuJiM0MztcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19MX0hBU0gsXG4mIzQzO1x0XHRcdFx0XHRPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgMHhmZmZmZmZmZik7XG4gXHRpZiAocmV0KVxuIFx0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlbmV0ZGV2LCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgcmVnX2hhc2hsOiAlZFxcblwmIzM0OyxcbiBcdFx0XHQgICByZXQpO1xuQEAgLTE4NywxNCAmIzQzOzE5MCwxNiBAQCBzdGF0aWMgaW50IGxhbjg2NXhfY2xlYXJfYWxsX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCwgMCk7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCxcbiYjNDM7XHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCAwKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZW5ldGRldiwgXCYjMzQ7RmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNoaDogJWRcXG5cJiMzNDssXG4gXHRcdFx0ICAgcmV0KTtcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCwgMCk7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCxcbiYjNDM7XHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZXRkZXYsIFwmIzM0O0ZhaWxlZCB0byB3cml0ZSByZWdfaGFzaGw6ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHJldCk7XG5AQCAtMjM1LDcgJiM0MzsyNDAsOCBAQCBzdGF0aWMgdm9pZCBsYW44NjV4X211bHRpY2FzdF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRpZiAobGFuODY1eF9jbGVhcl9hbGxfbXVsdGljYXN0X2FkZHIocHJpdikpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuLVx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NGRywgcmVndmFsKTtcbiYjNDM7XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NGRyxcbiYjNDM7XHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCByZWd2YWwpO1xuIFx0aWYgKHJldClcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZW5ldGRldiwgXCYjMzQ7RmFpbGVkIHRvIGVuYWJsZSBwcm9taXNjdW91cy9tdWx0aWNhc3Qvbm9ybWFsIG1vZGU6ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdCAgIHJldCk7XG5AQCAtMjYwLDEyICYjNDM7MjY2LDE0IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9od19kaXNhYmxlKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIHJlZ3ZhbDtcbiBcbi1cdGlmIChvYV90YzZfcmVhZF9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsIFx1MDAyNnJlZ3ZhbCkpXG4mIzQzO1x0aWYgKG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsXG4mIzQzO1x0XHRcdFx0ICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgXHUwMDI2cmVndmFsKSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRyZWd2YWwgXHUwMDI2PSB+KE1BQ19ORVRfQ1RMX1RYRU4gfCBNQUNfTkVUX0NUTF9SWEVOKTtcbiBcbi1cdGlmIChvYV90YzZfd3JpdGVfcmVnaXN0ZXIocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLCByZWd2YWwpKVxuJiM0MztcdGlmIChvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NUTCxcbiYjNDM7XHRcdFx0XHQgICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgcmVndmFsKSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yOTEsMTIgJiM0MzsyOTksMTQgQEAgc3RhdGljIGludCBsYW44NjV4X2h3X2VuYWJsZShzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2KVxuIHtcbiBcdHUzMiByZWd2YWw7XG4gXG4tXHRpZiAob2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLCBcdTAwMjZyZWd2YWwpKVxuJiM0MztcdGlmIChvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLFxuJiM0MztcdFx0XHRcdCAgICAgT0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIFx1MDAyNnJlZ3ZhbCkpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0cmVndmFsIHw9IE1BQ19ORVRfQ1RMX1RYRU4gfCBNQUNfTkVUX0NUTF9SWEVOO1xuIFxuLVx0aWYgKG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsIHJlZ3ZhbCkpXG4mIzQzO1x0aWYgKG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLFxuJiM0MztcdFx0XHRcdCAgICAgIE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCByZWd2YWwpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTM1OSw4ICYjNDM7MzY5LDkgQEAgc3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4gXHQgKiBzdGFtcGluZyBhdCB0aGUgZW5kIG9mIHRoZSBTdGFydCBvZiBGcmFtZSBEZWxpbWl0ZXIgKFNGRCkgYW5kIHNldCB0aGVcbiBcdCAqIFRpbWVyIEluY3JlbWVudCByZWcgdG8gNDAgbnMgdG8gYmUgdXNlZCBhcyBhIDI1IE1IeiBpbnRlcm5hbCBjbG9jay5cbiBcdCAqL1xuLVx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfVFNVX1RJTUVSX0lOQ1IsXG4tXHRcdFx0XHQgICAgTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTKTtcbiYjNDM7XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfVFNVX1RJTUVSX0lOQ1IsXG4mIzQzO1x0XHRcdFx0XHRPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSxcbiYjNDM7XHRcdFx0XHRcdE1BQ19UU1VfVElNRVJfSU5DUl9DT1VOVF9OQU5PU0VDT05EUyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2c3BpLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIGNvbmZpZyBUU1UgVGltZXIgSW5jciByZWc6ICVkXFxuXCYjMzQ7LFxuIFx0XHRcdHJldCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvS2NvbmZpZ1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NzM0NWYzNDVmYjlmMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L0tjb25maWdcbkBAIC0wLDAgJiM0MzsxLDE2IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjXG4mIzQzOyMgT0EgVEM2IDEwQkFTRS1UMXggTUFDLVBIWSBjb25maWd1cmF0aW9uXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NvbmZpZyBPQV9UQzZcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtPUEVOIEFsbGlhbmNlIFRDNiAxMEJBU0UtVDF4IE1BQy1QSFkgc3VwcG9ydFwmIzM0O1xuJiM0MztcdGRlcGVuZHMgb24gU1BJXG4mIzQzO1x0c2VsZWN0IFBIWUxJQlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIE9QRU4gQWxsaWFuY2UgVEM2IDEwQkFTRS1UMXggTUFDLVBIWVxuJiM0MztcdCAgU2VyaWFsIEludGVyZmFjZSBwcm90b2NvbCBmb3Igc3VwcG9ydGluZyAxMEJBU0UtVDF4IE1BQy1QSFlzLlxuJiM0MztcbiYjNDM7XHQgIFRvIGtub3cgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHJlZmVyIGRvY3VtZW50YXRpb24gaW5cbiYjNDM7XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0XHUwMDNlLlxuJiM0MztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTY0ZjY2OGVmYzJkM2Fcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9NYWtlZmlsZVxuQEAgLTAsMCAmIzQzOzEsNyBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIE1ha2VmaWxlIGZvciBPQSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZXG4mIzQzOyNcbiYjNDM7XG4mIzQzO29iai0kKENPTkZJR19PQV9UQzYpIDo9IG9hX3RjNl9tb2Qub1xuJiM0MztvYV90YzZfbW9kLW9ianMgOj0gb2FfdGM2Lm8gb2FfdGM2X3B0cC5vIG9hX3RjNl90c3RhbXAub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNi5jXG5zaW1pbGFyaXR5IGluZGV4IDc5JVxucmVuYW1lIGZyb20gZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmNcbnJlbmFtZSB0byBkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2LmNcbmluZGV4IDA3MjdkNTMzNDVhMzNiLi5kNGU5NDcyNGY2NDkxMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2LmNcbkBAIC0xMiwxNDkgJiM0MzsxMiwxNSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2FfdGM2LmhcdTAwM2VcbiBcbi0vKiBPUEVOIEFsbGlhbmNlIFRDNiByZWdpc3RlcnMgKi9cbi0vKiBTdGFuZGFyZCBDYXBhYmlsaXRpZXMgUmVnaXN0ZXIgKi9cbi0jZGVmaW5lIE9BX1RDNl9SRUdfU1REQ0FQXHRcdFx0MHgwMDAyXG4tI2RlZmluZSBTVERDQVBfRElSRUNUX1BIWV9SRUdfQUNDRVNTXHRcdEJJVCg4KVxuLVxuLS8qIFJlc2V0IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqL1xuLSNkZWZpbmUgT0FfVEM2X1JFR19SRVNFVFx0XHRcdDB4MDAwM1xuLSNkZWZpbmUgUkVTRVRfU1dSRVNFVFx0XHRcdFx0QklUKDApXHQvKiBTb2Z0d2FyZSBSZXNldCAqL1xuLVxuLS8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIzAgKi9cbi0jZGVmaW5lIE9BX1RDNl9SRUdfQ09ORklHMFx0XHRcdDB4MDAwNFxuLSNkZWZpbmUgQ09ORklHMF9TWU5DXHRcdFx0XHRCSVQoMTUpXG4tI2RlZmluZSBDT05GSUcwX1pBUkZFX0VOQUJMRVx0XHRcdEJJVCgxMilcbi1cbi0vKiBTdGF0dXMgUmVnaXN0ZXIgIzAgKi9cbi0jZGVmaW5lIE9BX1RDNl9SRUdfU1RBVFVTMFx0XHRcdDB4MDAwOFxuLSNkZWZpbmUgU1RBVFVTMF9SRVNFVENcdFx0XHRcdEJJVCg2KVx0LyogUmVzZXQgQ29tcGxldGUgKi9cbi0jZGVmaW5lIFNUQVRVUzBfSEVBREVSX0VSUk9SXHRcdFx0QklUKDUpXG4tI2RlZmluZSBTVEFUVVMwX0xPU1NfT0ZfRlJBTUVfRVJST1JcdFx0QklUKDQpXG4tI2RlZmluZSBTVEFUVVMwX1JYX0JVRkZFUl9PVkVSRkxPV19FUlJPUlx0QklUKDMpXG4tI2RlZmluZSBTVEFUVVMwX1RYX1BST1RPQ09MX0VSUk9SXHRcdEJJVCgwKVxuLVxuLS8qIEJ1ZmZlciBTdGF0dXMgUmVnaXN0ZXIgKi9cbi0jZGVmaW5lIE9BX1RDNl9SRUdfQlVGRkVSX1NUQVRVU1x0XHQweDAwMEJcbi0jZGVmaW5lIEJVRkZFUl9TVEFUVVNfVFhfQ1JFRElUU19BVkFJTEFCTEVcdEdFTk1BU0soMTUsIDgpXG4tI2RlZmluZSBCVUZGRVJfU1RBVFVTX1JYX0NIVU5LU19BVkFJTEFCTEVcdEdFTk1BU0soNywgMClcbi1cbi0vKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAjMCAqL1xuLSNkZWZpbmUgT0FfVEM2X1JFR19JTlRfTUFTSzBcdFx0XHQweDAwMENcbi0jZGVmaW5lIElOVF9NQVNLMF9IRUFERVJfRVJSX01BU0tcdFx0QklUKDUpXG4tI2RlZmluZSBJTlRfTUFTSzBfTE9TU19PRl9GUkFNRV9FUlJfTUFTS1x0QklUKDQpXG4tI2RlZmluZSBJTlRfTUFTSzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUl9NQVNLXHRCSVQoMylcbi0jZGVmaW5lIElOVF9NQVNLMF9UWF9QUk9UT0NPTF9FUlJfTUFTS1x0XHRCSVQoMClcbi0jZGVmaW5lIElOVF9NQVNLMF9BTExfSU5URVJSVVBUUyAgICAgICAgICAgICAgICAoR0VOTUFTSyg1LCAwKSB8IFxcXG4tXHRcdFx0XHRcdFx0IEdFTk1BU0soMTIsIDcpKVxuLVxuLS8qIFBIWSBDbGF1c2UgMjIgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyBhbmQgbWFzayAqL1xuLSNkZWZpbmUgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfQkFTRVx0XHQweEZGMDBcbi0jZGVmaW5lIE9BX1RDNl9QSFlfU1REX1JFR19BRERSX01BU0tcdFx0MHgxRlxuLVxuLS8qIENvbnRyb2wgY29tbWFuZCBoZWFkZXIgKi9cbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9EQVRBX05PVF9DVFJMXHRCSVQoMzEpXG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfV1JJVEVfTk9UX1JFQURcdEJJVCgyOSlcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9NRU1fTUFQX1NFTEVDVE9SXHRHRU5NQVNLKDI3LCAyNClcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9BRERSXHRcdFx0R0VOTUFTSygyMywgOClcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9MRU5HVEhcdFx0R0VOTUFTSyg3LCAxKVxuLSNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1BBUklUWVx0XHRCSVQoMClcbi1cbi0vKiBEYXRhIGhlYWRlciAqL1xuLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0RBVEFfTk9UX0NUUkxcdEJJVCgzMSlcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9EQVRBX1ZBTElEXHRcdEJJVCgyMSlcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9TVEFSVF9WQUxJRFx0XHRCSVQoMjApXG4tI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfV09SRF9PRkZTRVRcdEdFTk1BU0soMTksIDE2KVxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0VORF9WQUxJRFx0XHRCSVQoMTQpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfRU5EX0JZVEVfT0ZGU0VUXHRHRU5NQVNLKDEzLCA4KVxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1BBUklUWVx0XHRCSVQoMClcbi1cbi0vKiBEYXRhIGZvb3RlciAqL1xuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VYVEVOREVEX1NUU1x0XHRCSVQoMzEpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfUlhEX0hFQURFUl9CQURcdEJJVCgzMClcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9DT05GSUdfU1lOQ1x0XHRCSVQoMjkpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfUlhfQ0hVTktTXHRcdEdFTk1BU0soMjgsIDI0KVxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0RBVEFfVkFMSURcdFx0QklUKDIxKVxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1ZBTElEXHRcdEJJVCgyMClcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9TVEFSVF9XT1JEX09GRlNFVFx0R0VOTUFTSygxOSwgMTYpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfRU5EX1ZBTElEXHRcdEJJVCgxNClcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfQllURV9PRkZTRVRcdEdFTk1BU0soMTMsIDgpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfVFhfQ1JFRElUU1x0XHRHRU5NQVNLKDUsIDEpXG4tXG4tLyogUEhZIOKAkyBDbGF1c2UgNDUgcmVnaXN0ZXJzIG1lbW9yeSBtYXAgc2VsZWN0b3IgKE1NUykgYXMgcGVyIHRhYmxlIDYgaW4gdGhlXG4tICogT1BFTiBBbGxpYW5jZSBzcGVjaWZpY2F0aW9uLlxuLSAqL1xuLSNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUENTX01NUzJcdFx0XHQyXHQvKiBNTUQgMyAqL1xuLSNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE1BX1BNRF9NTVMzXHRcdDNcdC8qIE1NRCAxICovXG4tI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzRcdFx0NFx0LyogTU1EIDMxICovXG4tI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9BVVRPX05FR19NTVM1XHRcdDVcdC8qIE1NRCA3ICovXG4tI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QT1dFUl9VTklUX01NUzZcdFx0Nlx0LyogTU1EIDEzICovXG4tXG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfU0laRVx0XHRcdDRcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFXHRcdDRcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0lHTk9SRURfU0laRVx0XHQ0XG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9NQVhfUkVHSVNURVJTXHRcdDEyOFxuLSNkZWZpbmUgT0FfVEM2X0NUUkxfU1BJX0JVRl9TSVpFXHRcdChPQV9UQzZfQ1RSTF9IRUFERVJfU0laRSAmIzQzO1xcXG4tXHRcdFx0XHRcdFx0KE9BX1RDNl9DVFJMX01BWF9SRUdJU1RFUlMgKlxcXG4tXHRcdFx0XHRcdFx0T0FfVEM2X0NUUkxfUkVHX1ZBTFVFX1NJWkUpICYjNDM7XFxcbi1cdFx0XHRcdFx0XHRPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkUpXG4tI2RlZmluZSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFXHRcdDY0XG4tI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU0laRVx0XHRcdDRcbi0jZGVmaW5lIE9BX1RDNl9DSFVOS19TSVpFXHRcdFx0KE9BX1RDNl9EQVRBX0hFQURFUl9TSVpFICYjNDM7XFxcbi1cdFx0XHRcdFx0XHRPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFKVxuLSNkZWZpbmUgT0FfVEM2X01BWF9UWF9DSFVOS1NcdFx0XHQ0OFxuLSNkZWZpbmUgT0FfVEM2X1NQSV9EQVRBX0JVRl9TSVpFXHRcdChPQV9UQzZfTUFYX1RYX0NIVU5LUyAqXFxcbi1cdFx0XHRcdFx0XHRPQV9UQzZfQ0hVTktfU0laRSlcbi0jZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfREVMQVlcdFx0MTAwMFxuLSNkZWZpbmUgU1RBVFVTMF9SRVNFVENfUE9MTF9USU1FT1VUXHRcdDEwMDAwMDBcbi1cbi0vKiBJbnRlcm5hbCBzdHJ1Y3R1cmUgZm9yIE1BQy1QSFkgZHJpdmVycyAqL1xuLXN0cnVjdCBvYV90YzYge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4tXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpb2J1cztcbi1cdHN0cnVjdCBzcGlfZGV2aWNlICpzcGk7XG4tXHRzdHJ1Y3QgbXV0ZXggc3BpX2N0cmxfbG9jazsgLyogUHJvdGVjdHMgc3BpIGNvbnRyb2wgdHJhbnNmZXIgKi9cbi1cdHNwaW5sb2NrX3QgdHhfc2tiX2xvY2s7IC8qIFByb3RlY3RzIHR4IHNrYiBoYW5kbGluZyAqL1xuLVx0dm9pZCAqc3BpX2N0cmxfdHhfYnVmO1xuLVx0dm9pZCAqc3BpX2N0cmxfcnhfYnVmO1xuLVx0dm9pZCAqc3BpX2RhdGFfdHhfYnVmO1xuLVx0dm9pZCAqc3BpX2RhdGFfcnhfYnVmO1xuLVx0c3RydWN0IHNrX2J1ZmYgKm9uZ29pbmdfdHhfc2tiO1xuLVx0c3RydWN0IHNrX2J1ZmYgKndhaXRpbmdfdHhfc2tiO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjtcbi1cdHUxNiB0eF9za2Jfb2Zmc2V0O1xuLVx0dTE2IHNwaV9kYXRhX3R4X2J1Zl9vZmZzZXQ7XG4tXHR1MTYgdHhfY3JlZGl0cztcbi1cdHU4IHJ4X2NodW5rc19hdmFpbGFibGU7XG4tXHRib29sIHJ4X2J1Zl9vdmVyZmxvdztcbi1cdGJvb2wgaW50X2ZsYWc7XG4tXHRib29sIGRpc2FibGVfdHJhZmZpYztcbi19O1xuLVxuLWVudW0gb2FfdGM2X2hlYWRlcl90eXBlIHtcbi1cdE9BX1RDNl9DVFJMX0hFQURFUixcbi1cdE9BX1RDNl9EQVRBX0hFQURFUixcbi19O1xuLVxuLWVudW0gb2FfdGM2X3JlZ2lzdGVyX29wIHtcbi1cdE9BX1RDNl9DVFJMX1JFR19SRUFEID0gMCxcbi1cdE9BX1RDNl9DVFJMX1JFR19XUklURSA9IDEsXG4tfTtcbi1cbi1lbnVtIG9hX3RjNl9kYXRhX3ZhbGlkX2luZm8ge1xuLVx0T0FfVEM2X0RBVEFfSU5WQUxJRCxcbi1cdE9BX1RDNl9EQVRBX1ZBTElELFxuLX07XG4mIzQzOyNpbmNsdWRlIFwmIzM0O29hX3RjNl9zdGRfZGVmLmhcJiMzNDtcbiBcbi1lbnVtIG9hX3RjNl9kYXRhX3N0YXJ0X3ZhbGlkX2luZm8ge1xuLVx0T0FfVEM2X0RBVEFfU1RBUlRfSU5WQUxJRCxcbi1cdE9BX1RDNl9EQVRBX1NUQVJUX1ZBTElELFxuJiM0MztzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcngge1xuJiM0MztcdGJvb2wgcnRzYTtcbiYjNDM7XHRib29sIHJ0c3A7XG4gfTtcbiBcbi1lbnVtIG9hX3RjNl9kYXRhX2VuZF92YWxpZF9pbmZvIHtcbi1cdE9BX1RDNl9EQVRBX0VORF9JTlZBTElELFxuLVx0T0FfVEM2X0RBVEFfRU5EX1ZBTElELFxuJiM0MztzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fdHgge1xuJiM0MztcdHU4IHRzYztcbiB9O1xuIFxuIHN0YXRpYyBpbnQgb2FfdGM2X3NwaV90cmFuc2ZlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsXG5AQCAtMTkxLDYgJiM0Mzs1NywxNjggQEAgc3RhdGljIGludCBvYV90YzZfZ2V0X3Bhcml0eSh1MzIgcClcbiBcdHJldHVybiAhKChwIFx1MDAzZVx1MDAzZSAyOCkgXHUwMDI2IDEpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBvYV90YzZfdHNfaW5mb190eCAqb2FfdGM2X3RzaW5mb190eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fdHggKikoc2tiLVx1MDAzZWNiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBvYV90YzZfdHNfaW5mb19yeCAqb2FfdGM2X3RzaW5mb19yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcnggKikoc2tiLVx1MDAzZWNiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgb2FfdGM2X2RlZmVyX2Zvcl9od3RzdGFtcChzdHJ1Y3Qgb2FfdGM2ICp0YzYsXG4mIzQzO1x0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiYjNDM7e1xuJiM0MztcdGlmICghdGM2LVx1MDAzZWh3X3RzdGFtcF9lbmFibGVkKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmICghc2tiIHx8IChza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgXHUwMDI2IFNLQlRYX0hXX1RTVEFNUCkgPT0gMClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpZiAodGM2LVx1MDAzZXRzX2NvbmZpZy50eF90eXBlICE9IEhXVFNUQU1QX1RYX09OKSB7XG4mIzQzO1x0XHR0YzYtXHUwMDNldHhfaHd0c3RhbXBfbG9zdCYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRza2Jfc2hpbmZvKHNrYiktXHUwMDNldHhfZmxhZ3MgfD0gU0tCVFhfSU5fUFJPR1JFU1M7XG4mIzQzO1x0dTggcmV0ID0gdGM2LVx1MDAzZXR4X3RzX2lkeCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgPT0gT0FfVEM2X1RUU0NDX1JFR19JRClcbiYjNDM7XHRcdHRjNi1cdTAwM2V0eF90c19pZHggPSBPQV9UQzZfVFRTQ0FfUkVHX0lEO1xuJiM0MztcdG9hX3RjNl90c2luZm9fdHgoc2tiKS1cdTAwM2V0c2MgPSByZXQ7XG4mIzQzO1xuJiM0MztcdGxpc3RfYWRkX3RhaWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QsIFx1MDAyNnRjNi1cdTAwM2V0eF90c19za2JfcSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZGVmZXJyZWRfc2tiKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggdHNjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHRzdGFtcDtcbiYjNDM7XHRzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fdHggKnNraTtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqdG1wO1xuJiM0MztcdGJvb2wgZm91bmQgPSBmYWxzZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0LyogU2l6ZSBvZiBkYXRhIG11c3QgbWF0Y2ggT0FfVEM2X1RTVEFNUF9TWiAqL1xuJiM0MztcdHUzMiBkYXRhWzJdO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2tiLCB0bXAsIFx1MDAyNnRjNi1cdTAwM2V0eF90c19za2JfcSwgbGlzdCkge1xuJiM0MztcdFx0c2tpID0gb2FfdGM2X3RzaW5mb190eChza2IpO1xuJiM0MztcdFx0aWYgKHNraS1cdTAwM2V0c2MgIT0gdHNjKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdGlmIChmb3VuZCkge1xuJiM0MztcdFx0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgXCYjMzQ7TXVsdGlwbGUgc2ticy4gdHNjID0gJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0XHQgICAgIHRzYyk7XG4mIzQzO1x0XHRcdHRjNi1cdTAwM2V0eF9od3RzdGFtcF9lcnImIzQzOyYjNDM7O1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Zm91bmQgPSB0cnVlO1xuJiM0MztcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuJiM0MztcbiYjNDM7XHRcdC8qIFJldHJpZXZlIHRoZSB0aW1lc3RhbXBpbmcgaW5mbyAqL1xuJiM0MztcdFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJzKHRjNixcbiYjNDM7XHRcdFx0XHRcdCAgICBPQV9UQzZfUkVHX1RUU0NBX0hJR0ggJiM0MztcbiYjNDM7XHRcdFx0XHRcdCAgICAyICogKHRzYyAtIDEpLCBcdTAwMjZkYXRhWzBdLCAyKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIXJldCkge1xuJiM0MztcdFx0XHR0c3RhbXAuaHd0c3RhbXAgPSBrdGltZV9zZXQoZGF0YVswXSwgZGF0YVsxXSk7XG4mIzQzO1x0XHRcdHNrYl90c3RhbXBfdHgoc2tiLCBcdTAwMjZ0c3RhbXApO1xuJiM0MztcdFx0XHR0YzYtXHUwMDNldHhfaHd0c3RhbXBfcGt0cyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZXZlbnRzX2hhbmRsZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHQvKiBDaGVjayBUWCB0aW1lc3RhbXBpbmcgKi9cbiYjNDM7XHRpZiAodmFsIFx1MDAyNiBTVEFUVVMwX1RUU0NBQSlcbiYjNDM7XHRcdG9hX3RjNl9wcm9jZXNzX2RlZmVycmVkX3NrYih0YzYsIE9BX1RDNl9UVFNDQV9SRUdfSUQpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAyNiBTVEFUVVMwX1RUU0NBQilcbiYjNDM7XHRcdG9hX3RjNl9wcm9jZXNzX2RlZmVycmVkX3NrYih0YzYsIE9BX1RDNl9UVFNDQl9SRUdfSUQpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAyNiBTVEFUVVMwX1RUU0NBQylcbiYjNDM7XHRcdG9hX3RjNl9wcm9jZXNzX2RlZmVycmVkX3NrYih0YzYsIE9BX1RDNl9UVFNDQ19SRUdfSUQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfdXBkYXRlX3RzX2luX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGM2LVx1MDAzZXJ4X3NrYjtcbiYjNDM7XHRzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcnggKnNraTtcbiYjNDM7XHRfX2JlMzIgdHNfdmFsWzJdO1xuJiM0MztcdHUzMiB0c1syXTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0YzYtXHUwMDNlaHdfdHN0YW1wX2VuYWJsZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0c2tpID0gb2FfdGM2X3RzaW5mb19yeChza2IpO1xuJiM0MztcdGlmICghc2tpLVx1MDAzZXJ0c2EpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG1lbWNweShcdTAwMjZ0c192YWxbMF0sIHNrYi1cdTAwM2VkYXRhLCA0KTtcbiYjNDM7XHRtZW1jcHkoXHUwMDI2dHNfdmFsWzFdLCAodTMyICopc2tiLVx1MDAzZWRhdGEgJiM0MzsgMSwgNCk7XG4mIzQzO1xuJiM0MztcdHRzWzBdID0gYmUzMl90b19jcHUodHNfdmFsWzBdKTtcbiYjNDM7XHR0c1sxXSA9IGJlMzJfdG9fY3B1KHRzX3ZhbFsxXSk7XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIHBhcml0eSAqL1xuJiM0MztcdGlmICgob2FfdGM2X2dldF9wYXJpdHkodHNbMF0pIF4gb2FfdGM2X2dldF9wYXJpdHkodHNbMV0pKSA9PVxuJiM0MztcdCAgICAhc2tpLVx1MDAzZXJ0c3ApIHtcbiYjNDM7XHRcdHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHdfdHM7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVwb3J0IHRpbWVzdGFtcCB0byB0aGUgdXBwZXIgbGF5ZXJzICovXG4mIzQzO1x0XHRod190cyA9IHNrYl9od3RzdGFtcHMoc2tiKTtcbiYjNDM7XHRcdG1lbXNldChod190cywgMCwgc2l6ZW9mKCpod190cykpO1xuJiM0MztcdFx0aHdfdHMtXHUwMDNlaHd0c3RhbXAgPSBrdGltZV9zZXQodHNbMF0sIHRzWzFdKTtcbiYjNDM7XHR9XG4mIzQzO1x0c2tiX3B1bGwoc2tiLCBzaXplb2YodHMpKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBvYV90YzZfdXBkYXRlX3N0YW5kYXJkX2NhcGFiaWxpdHkoc3RydWN0IG9hX3RjNiAqdGM2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJlZ3ZhbCA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NURENBUCwgXHUwMDI2cmVndmFsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmVndmFsIFx1MDAyNiBTVERDQVBfRlJBTUVfVElNRVNUQU1QX0NBUEFCSUxJVFkpXG4mIzQzO1x0XHR0YzYtXHUwMDNlaHdfdHN0YW1wX3N1cHBvcnRlZCA9IHRydWU7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBvYV90YzZfaW9jdGwgLSBnZW5lcmljIGlvY3RsIGludGVyZmFjZSBmb3IgTUFDLVBIWSBkcml2ZXJzLlxuJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuJiM0MzsgKiBAcnE6IHJlcXVlc3QgZnJvbSBzb2NrZXQgaW50ZXJmYWNlXG4mIzQzOyAqIEBjbWQ6IHZhbHVlIHRvIHNldC9nZXQgdGltZXN0YW1wIGNvbmZpZ3VyYXRpb25cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cbiYjNDM7ICovXG4mIzQzO2ludCBvYV90YzZfaW9jdGwoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKHRjNi1cdTAwM2VuZXRkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChjbWQgPT0gU0lPQ1NIV1RTVEFNUCB8fCBjbWQgPT0gU0lPQ0dIV1RTVEFNUClcbiYjNDM7XHRcdHJldHVybiBvYV90YzZfdHN0YW1wX2lvY3RsKHRjNiwgcnEsIGNtZCk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmV0dXJuIHBoeV9kb19pb2N0bF9ydW5uaW5nKHRjNi1cdTAwM2VuZXRkZXYsIHJxLCBjbWQpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9pb2N0bCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogb2FfdGM2X3NldF92ZW5kMV9tbXMgLSBBZGQgdmVuZG9yIHNwZWNpZmljIE1ESU9fTU1EIHRvIE9BIFRDNiBNTVNcbiYjNDM7ICogbWFwcGVyIHZhbHVlLlxuJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuJiM0MzsgKiBAbW1zOiB2ZW5kb3IgZGVmaW5lZCBNTVMgdmFsdWUgZm9yIFZFTkQxIG1kaW8gZGV2aWNlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBvYV90YzZfc2V0X3ZlbmQxX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIGludCBtbXMpXG4mIzQzO3tcbiYjNDM7XHR0YzYtXHUwMDNldmVuZDFfbW1zID0gbW1zO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zZXRfdmVuZDFfbW1zKTtcbiYjNDM7XG4gc3RhdGljIF9fYmUzMiBvYV90YzZfcHJlcGFyZV9jdHJsX2hlYWRlcih1MzIgYWRkciwgdTggbGVuZ3RoLFxuIFx0XHRcdFx0XHQgZW51bSBvYV90YzZfcmVnaXN0ZXJfb3AgcmVnX29wKVxuIHtcbkBAIC0zNTUsNiAmIzQzOzM4Myw4MyBAQCBpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgYWRkcmVzcywgdTMyICp2YWx1ZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3JlYWRfcmVnaXN0ZXIpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyAtIGZ1bmN0aW9uIGZvciByZWFkaW5nIG11bHRpcGxlIGNvbnNlY3V0aXZlXG4mIzQzOyAqIHJlZ2lzdGVycyBmb3IgdGhlIGdpdmVuIGFkZHJlc3MsIG1lbW9yeSBtYXAgc2VsZWN0b3IgcGFpci5cbiYjNDM7ICogQHRjNjogb2FfdGM2IHN0cnVjdC5cbiYjNDM7ICogQGFkZHJlc3M6IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHRvIGJlIHJlYWQgaW4gdGhlIE1BQy1QSFkuXG4mIzQzOyAqIEBtbXM6IE1lbW9yeSBtYXAgc2VsZWN0b3IgZm9yIHRoZSByZWdpc3RlcnMgdG8gYmUgcmVhZC5cbiYjNDM7ICogQHZhbHVlOiB2YWx1ZXMgdG8gYmUgcmVhZCBmcm9tIHRoZSBzdGFydGluZyByZWdpc3RlciBhZGRyZXNzIEBhZGRyZXNzLlxuJiM0MzsgKiBAbGVuZ3RoOiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIHRvIGJlIHJlYWQgZnJvbSBAYWRkcmVzcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cbiYjNDM7ICovXG4mIzQzO2ludCBvYV90YzZfcmVhZF9yZWdpc3RlcnNfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsXG4mIzQzO1x0XHRcdCAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbW1zX2FkZHIgPSAodTMyKW1tcyBcdTAwM2NcdTAwM2MgMTYgfCAodTMyKWFkZHJlc3M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvYV90YzZfcmVhZF9yZWdpc3RlcnModGM2LCBtbXNfYWRkciwgdmFsdWUsIGxlbmd0aCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zIC0gZnVuY3Rpb24gZm9yIHJlYWRpbmcgYSBNQUMtUEhZIHJlZ2lzdGVyXG4mIzQzOyAqIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgbWVtb3J5IG1hcCBzZWxlY3RvciBwYWlyLlxuJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuJiM0MzsgKiBAYWRkcmVzczogcmVnaXN0ZXIgYWRkcmVzcyBvZiB0aGUgTUFDLVBIWSB0byBiZSByZWFkLlxuJiM0MzsgKiBAbW1zOiBNZW1vcnkgTWFwIFNlbGVjdG9yIGZvciB0aGUgZ2l2ZW4gYWRkcmVzc1xuJiM0MzsgKiBAdmFsdWU6IHZhbHVlIHJlYWQgZnJvbSB0aGUgQGFkZHJlc3MgcmVnaXN0ZXIgYWRkcmVzcyBvZiB0aGUgTUFDLVBIWS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cbiYjNDM7ICovXG4mIzQzO2ludCBvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgYWRkcmVzcywgdTE2IG1tcyxcbiYjNDM7XHRcdFx0ICAgICB1MzIgKnZhbHVlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXModGM2LCBhZGRyZXNzLCBtbXMsIHZhbHVlLCAxKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zIC0gZnVuY3Rpb24gZm9yIHdyaXRpbmcgbXVsdGlwbGUgY29uc2VjdXRpdmVcbiYjNDM7ICogcmVnaXN0ZXJzIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgbWVtb3J5IG1hcCBzZWxlY3RvciBwYWlyLlxuJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuJiM0MzsgKiBAYWRkcmVzczogYWRkcmVzcyBvZiB0aGUgZmlyc3QgcmVnaXN0ZXIgdG8gYmUgd3JpdHRlbiBpbiB0aGUgTUFDLVBIWS5cbiYjNDM7ICogQG1tczogbWVtb3J5IG1hcCBTZWxlY3RvciBmb3IgdGhlIGdpdmVuIHJlZ2lzdGVyLlxuJiM0MzsgKiBAdmFsdWU6IHZhbHVlcyB0byBiZSB3cml0dGVuIGZyb20gdGhlIHN0YXJ0aW5nIHJlZ2lzdGVyIGFkZHJlc3MgQGFkZHJlc3MuXG4mIzQzOyAqIEBsZW5ndGg6IG51bWJlciBvZiBjb25zZWN1dGl2ZSByZWdpc3RlcnMgdG8gYmUgd3JpdHRlbiBmcm9tIEBhZGRyZXNzLlxuJiM0MzsgKlxuJiM0MzsgKiBNYXhpbXVtIG9mIDEyOCBjb25zZWN1dGl2ZSByZWdpc3RlcnMgY2FuIGJlIHdyaXR0ZW4gc3RhcnRpbmcgYXQgQGFkZHJlc3MuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXG4mIzQzOyAqL1xuJiM0MztpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgYWRkcmVzcywgdTE2IG1tcyxcbiYjNDM7XHRcdFx0ICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbW1zX2FkZHIgPSAodTMyKW1tcyBcdTAwM2NcdTAwM2MgMTYgfCAodTMyKWFkZHJlc3M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJzKHRjNiwgbW1zX2FkZHIsIHZhbHVlLCBsZW5ndGgpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zIC0gZnVuY3Rpb24gZm9yIHdyaXRpbmcgYSBNQUMtUEhZIHJlZ2lzdGVyXG4mIzQzOyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbWVtb3J5IG1hcCBzZWxlY3Rvci5cbiYjNDM7ICogQHRjNjogb2FfdGM2IHN0cnVjdC5cbiYjNDM7ICogQGFkZHJlc3M6IHJlZ2lzdGVyIGFkZHJlc3Mgb2YgdGhlIE1BQy1QSFkgdG8gYmUgd3JpdHRlbi5cbiYjNDM7ICogQG1tczogbWVtb3J5IG1hcCBzZWxlY3RvciBmb3IgdGhlIGdpdmVuIHJlZ2lzdGVyLlxuJiM0MzsgKiBAdmFsdWU6IHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIEBhZGRyZXNzIHJlZ2lzdGVyIGFkZHJlc3Mgb2ZcbiYjNDM7ICogdGhlIE1BQy1QSFkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXG4mIzQzOyAqL1xuJiM0MztpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxuJiM0MztcdFx0XHQgICAgICB1MzIgdmFsdWUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXModGM2LCBhZGRyZXNzLCBtbXMsIFx1MDAyNnZhbHVlLCAxKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKTtcbiYjNDM7XG4gLyoqXG4gICogb2FfdGM2X3dyaXRlX3JlZ2lzdGVycyAtIGZ1bmN0aW9uIGZvciB3cml0aW5nIG11bHRpcGxlIGNvbnNlY3V0aXZlIHJlZ2lzdGVycy5cbiAgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuQEAgLTQ0NCw3ICYjNDM7NTQ5LDcgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IHJlZ251bSxcbiBcdFx0XHRcdCAgICAgdmFsKTtcbiB9XG4gXG4tc3RhdGljIGludCBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKGludCBkZXZudW0pXG4mIzQzO3N0YXRpYyBpbnQgb2FfdGM2X2dldF9waHlfYzQ1X21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIGludCBkZXZudW0pXG4ge1xuIFx0c3dpdGNoIChkZXZudW0pIHtcbiBcdGNhc2UgTURJT19NTURfUENTOlxuQEAgLTQ1Nyw2ICYjNDM7NTYyLDggQEAgc3RhdGljIGludCBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKGludCBkZXZudW0pXG4gXHRcdHJldHVybiBPQV9UQzZfUEhZX0M0NV9BVVRPX05FR19NTVM1O1xuIFx0Y2FzZSBNRElPX01NRF9QT1dFUl9VTklUOlxuIFx0XHRyZXR1cm4gT0FfVEM2X1BIWV9DNDVfUE9XRVJfVU5JVF9NTVM2O1xuJiM0MztcdGNhc2UgTURJT19NTURfVkVORDE6XG4mIzQzO1x0XHRyZXR1cm4gdGM2LVx1MDAzZXZlbmQxX21tcztcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcdH1cbkBAIC00NjYsMTQgJiM0Mzs1NzMsMTQgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c19yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldm51bSxcbiBcdFx0XHRcdCAgIGludCByZWdudW0pXG4ge1xuIFx0c3RydWN0IG9hX3RjNiAqdGM2ID0gYnVzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IG1tcywgcmV0O1xuIFx0dTMyIHJlZ3ZhbDtcbi1cdGludCByZXQ7XG4gXG4tXHRyZXQgPSBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKGRldm51bSk7XG4tXHRpZiAocmV0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdG1tcyA9IG9hX3RjNl9nZXRfcGh5X2M0NV9tbXModGM2LCBkZXZudW0pO1xuJiM0MztcdGlmIChtbXMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gbW1zO1xuIFxuLVx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCAocmV0IFx1MDAzY1x1MDAzYyAxNikgfCByZWdudW0sIFx1MDAyNnJlZ3ZhbCk7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHRjNiwgKHUxNilyZWdudW0sICh1MTYpbW1zLCBcdTAwMjZyZWd2YWwpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC00ODQsMTMgJiM0Mzs1OTEsMTMgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZudW0sXG4gXHRcdFx0XHQgICAgaW50IHJlZ251bSwgdTE2IHZhbClcbiB7XG4gXHRzdHJ1Y3Qgb2FfdGM2ICp0YzYgPSBidXMtXHUwMDNlcHJpdjtcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IG1tcztcbiBcbi1cdHJldCA9IG9hX3RjNl9nZXRfcGh5X2M0NV9tbXMoZGV2bnVtKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0bW1zID0gb2FfdGM2X2dldF9waHlfYzQ1X21tcyh0YzYsIGRldm51bSk7XG4mIzQzO1x0aWYgKG1tcyBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBtbXM7XG4gXG4tXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgKHJldCBcdTAwM2NcdTAwM2MgMTYpIHwgcmVnbnVtLCB2YWwpO1xuJiM0MztcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHRjNiwgKHUxNilyZWdudW0sICh1MTYpbW1zLCB2YWwpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG9hX3RjNl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNilcbkBAIC03MTQsNiAmIzQzOzgyMSw5IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoKHZhbHVlIFx1MDAyNiBTVEFUVVMwX1RUU0NBX01BU0spICE9IDApXG4mIzQzO1x0XHRvYV90YzZfZXZlbnRzX2hhbmRsZSh0YzYsIHZhbHVlIFx1MDAyNiBTVEFUVVMwX1RUU0NBX01BU0spO1xuJiM0MztcbiBcdC8qIENsZWFyIHRoZSBlcnJvciBpbnRlcnJ1cHRzIHN0YXR1cyAqL1xuIFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19TVEFUVVMwLCB2YWx1ZSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNzk2LDYgJiM0Mzs5MDYsNyBAQCBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHQgICAgdGM2LVx1MDAzZXJ4X3NrYi1cdTAwM2VsZW4gXHUwMDNlIEVUSF9GQ1NfTEVOKVxuIFx0XHRza2JfdHJpbSh0YzYtXHUwMDNlcnhfc2tiLCB0YzYtXHUwMDNlcnhfc2tiLVx1MDAzZWxlbiAtIEVUSF9GQ1NfTEVOKTtcbiBcbiYjNDM7XHRvYV90YzZfdXBkYXRlX3RzX2luX3J4X3NrYih0YzYpO1xuIFx0dGM2LVx1MDAzZXJ4X3NrYi1cdTAwM2Vwcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHRjNi1cdTAwM2VyeF9za2IsIHRjNi1cdTAwM2VuZXRkZXYpO1xuIFx0dGM2LVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9wYWNrZXRzJiM0MzsmIzQzOztcbiBcdHRjNi1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfYnl0ZXMgJiM0Mzs9IHRjNi1cdTAwM2VyeF9za2ItXHUwMDNlbGVuO1xuQEAgLTgxMCwyNCAmIzQzOzkyMSwyOSBAQCBzdGF0aWMgdm9pZCBvYV90YzZfdXBkYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1OCBsZW5ndGgpXG4gXHRtZW1jcHkoc2tiX3B1dCh0YzYtXHUwMDNlcnhfc2tiLCBsZW5ndGgpLCBwYXlsb2FkLCBsZW5ndGgpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuJiM0MztzdGF0aWMgaW50IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgZm9vdGVyKVxuIHtcbiYjNDM7XHRzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcnggKnNraTtcbiYjNDM7XG4gXHR0YzYtXHUwMDNlcnhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbih0YzYtXHUwMDNlbmV0ZGV2LCB0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZW10dSAmIzQzO1xuLVx0XHRcdFx0XHRcdEVUSF9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOKTtcbiYjNDM7XHRcdFx0XHRcdFx0RVRIX0hMRU4gJiM0MzsgRVRIX0ZDU19MRU4gJiM0MzsgT0FfVEM2X1RTVEFNUF9TWik7XG4gXHRpZiAoIXRjNi1cdTAwM2VyeF9za2IpIHtcbiBcdFx0dGM2LVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9kcm9wcGVkJiM0MzsmIzQzOztcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4mIzQzO1x0c2tpID0gb2FfdGM2X3RzaW5mb19yeCh0YzYtXHUwMDNlcnhfc2tiKTtcbiYjNDM7XHRza2ktXHUwMDNlcnRzYSA9IEZJRUxEX0dFVChPQV9UQzZfREFUQV9GT09URVJfUlRTQV9WQUxJRCwgZm9vdGVyKTtcbiYjNDM7XHRza2ktXHUwMDNlcnRzcCA9IEZJRUxEX0dFVChPQV9UQzZfREFUQV9GT09URVJfUlRTUF9WQUxJRCwgZm9vdGVyKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX2NvbXBsZXRlX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsXG4tXHRcdFx0XHRcdCB1MTYgc2l6ZSlcbiYjNDM7XHRcdFx0XHRcdCB1MTYgc2l6ZSwgdTMyIGZvb3RlcilcbiB7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cmV0ID0gb2FfdGM2X2FsbG9jYXRlX3J4X3NrYih0YzYpO1xuJiM0MztcdHJldCA9IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2IodGM2LCBmb290ZXIpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC04MzgsMTEgJiM0Mzs5NTQsMTEgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19jb21wbGV0ZV9yeF9mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTE2IHNpemUpXG4mIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTE2IHNpemUsIHUzMiBmb290ZXIpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2IodGM2KTtcbiYjNDM7XHRyZXQgPSBvYV90YzZfYWxsb2NhdGVfcnhfc2tiKHRjNiwgZm9vdGVyKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtODg3LDcgJiM0MzsxMDAzLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHRcdHNpemUgPSBlbmRfYnl0ZV9vZmZzZXQgJiM0MzsgMSAtIHN0YXJ0X2J5dGVfb2Zmc2V0O1xuIFx0XHRyZXR1cm4gb2FfdGM2X3ByY3NfY29tcGxldGVfcnhfZnJhbWUodGM2LFxuIFx0XHRcdFx0XHRcdCAgICAgXHUwMDI2ZGF0YVtzdGFydF9ieXRlX29mZnNldF0sXG4tXHRcdFx0XHRcdFx0ICAgICBzaXplKTtcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICBzaXplLCBmb290ZXIpO1xuIFx0fVxuIFxuIFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmx5IHJ4IGZyYW1lIHN0YXJ0ICovXG5AQCAtODk1LDcgJiM0MzsxMDExLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHRcdHNpemUgPSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFIC0gc3RhcnRfYnl0ZV9vZmZzZXQ7XG4gXHRcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydCh0YzYsXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZkYXRhW3N0YXJ0X2J5dGVfb2Zmc2V0XSxcbi1cdFx0XHRcdFx0XHQgIHNpemUpO1xuJiM0MztcdFx0XHRcdFx0XHQgIHNpemUsIGZvb3Rlcik7XG4gXHR9XG4gXG4gXHQvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIG9ubHkgcnggZnJhbWUgZW5kICovXG5AQCAtOTIwLDcgJiM0MzsxMDM2LDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHRcdHNpemUgPSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFIC0gc3RhcnRfYnl0ZV9vZmZzZXQ7XG4gXHRcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydCh0YzYsXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZkYXRhW3N0YXJ0X2J5dGVfb2Zmc2V0XSxcbi1cdFx0XHRcdFx0XHQgIHNpemUpO1xuJiM0MztcdFx0XHRcdFx0XHQgIHNpemUsIGZvb3Rlcik7XG4gXHR9XG4gXG4gXHQvKiBQcm9jZXNzIHRoZSBjaHVuayB3aXRoIG9uZ29pbmcgcnggZnJhbWUgZGF0YSAqL1xuQEAgLTk3NCwxMyAmIzQzOzEwOTAsMTUgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgbGVuZ3RoKVxuIH1cbiBcbiBzdGF0aWMgX19iZTMyIG9hX3RjNl9wcmVwYXJlX2RhdGFfaGVhZGVyKGJvb2wgZGF0YV92YWxpZCwgYm9vbCBzdGFydF92YWxpZCxcbi1cdFx0XHRcdFx0IGJvb2wgZW5kX3ZhbGlkLCB1OCBlbmRfYnl0ZV9vZmZzZXQpXG4mIzQzO1x0XHRcdFx0XHQgYm9vbCBlbmRfdmFsaWQsIHU4IGVuZF9ieXRlX29mZnNldCxcbiYjNDM7XHRcdFx0XHRcdCB1OCB0c2MpXG4ge1xuIFx0dTMyIGhlYWRlciA9IEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX0RBVEFfTk9UX0NUUkwsXG4gXHRcdFx0XHRPQV9UQzZfREFUQV9IRUFERVIpIHxcbiBcdFx0ICAgICBGSUVMRF9QUkVQKE9BX1RDNl9EQVRBX0hFQURFUl9EQVRBX1ZBTElELCBkYXRhX3ZhbGlkKSB8XG4gXHRcdCAgICAgRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfVkFMSUQsIHN0YXJ0X3ZhbGlkKSB8XG4gXHRcdCAgICAgRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfRU5EX1ZBTElELCBlbmRfdmFsaWQpIHxcbiYjNDM7XHRcdCAgICAgRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfVFNDX09GRlNFVCwgdHNjKSB8XG4gXHRcdCAgICAgRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfRU5EX0JZVEVfT0ZGU0VULFxuIFx0XHRcdFx0ZW5kX2J5dGVfb2Zmc2V0KTtcbiBcbkBAIC05OTksNiAmIzQzOzExMTcsNyBAQCBzdGF0aWMgdm9pZCBvYV90YzZfYWRkX3R4X3NrYl90b19zcGlfYnVmKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdGVudW0gb2FfdGM2X2RhdGFfc3RhcnRfdmFsaWRfaW5mbyBzdGFydF92YWxpZDtcbiBcdHU4IGVuZF9ieXRlX29mZnNldCA9IDA7XG4gXHR1MTYgbGVuZ3RoX3RvX2NvcHk7XG4mIzQzO1x0dTggdHNjID0gMDtcbiBcbiBcdC8qIEluaXRpYWwgdmFsdWUgaXMgYXNzaWduZWQgaGVyZSB0byBhdm9pZCBtb3JlIHRoYW4gODAgY2hhcmFjdGVycyBpblxuIFx0ICogdGhlIGRlY2xhcmF0aW9uIHBsYWNlLlxuQEAgLTEwMDgsOCAmIzQzOzExMjcsMTAgQEAgc3RhdGljIHZvaWQgb2FfdGM2X2FkZF90eF9za2JfdG9fc3BpX2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHQvKiBTZXQgc3RhcnQgdmFsaWQgaWYgdGhlIGN1cnJlbnQgdHggY2h1bmsgY29udGFpbnMgdGhlIHN0YXJ0IG9mIHRoZSB0eFxuIFx0ICogZXRoZXJuZXQgZnJhbWUuXG4gXHQgKi9cbi1cdGlmICghdGM2LVx1MDAzZXR4X3NrYl9vZmZzZXQpXG4mIzQzO1x0aWYgKCF0YzYtXHUwMDNldHhfc2tiX29mZnNldCkge1xuIFx0XHRzdGFydF92YWxpZCA9IE9BX1RDNl9EQVRBX1NUQVJUX1ZBTElEO1xuJiM0MztcdFx0dHNjID0gb2FfdGM2X3RzaW5mb190eCh0YzYtXHUwMDNlb25nb2luZ190eF9za2IpLVx1MDAzZXRzYztcbiYjNDM7XHR9XG4gXG4gXHQvKiBJZiB0aGUgcmVtYWluaW5nIHR4IHNrYiBsZW5ndGggaXMgbW9yZSB0aGFuIHRoZSBjaHVuayBwYXlsb2FkIHNpemUgb2ZcbiBcdCAqIDY0IGJ5dGVzIHRoZW4gY29weSBvbmx5IDY0IGJ5dGVzIGFuZCBsZWF2ZSB0aGUgb25nb2luZyB0eCBza2IgZm9yXG5AQCAtMTAzMCwxMiAmIzQzOzExNTEsMTggQEAgc3RhdGljIHZvaWQgb2FfdGM2X2FkZF90eF9za2JfdG9fc3BpX2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHRcdHRjNi1cdTAwM2V0eF9za2Jfb2Zmc2V0ID0gMDtcbiBcdFx0dGM2LVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyAmIzQzOz0gdGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiLVx1MDAzZWxlbjtcbiBcdFx0dGM2LVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOztcbi1cdFx0a2ZyZWVfc2tiKHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYik7XG4mIzQzO1xuJiM0MztcdFx0LyogRnJlZSB0aGUgb25lcyB0aGF0IGFyZSBub3Qgc2F2ZWQgZm9yIGxhdGVyIHByb2Nlc3NpbmcsXG4mIzQzO1x0XHQgKiBsaWtlIHRpbWVzdGFtcGluZy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKCEoc2tiX3NoaW5mbyh0YzYtXHUwMDNlb25nb2luZ190eF9za2IpLVx1MDAzZXR4X2ZsYWdzIFx1MDAyNlxuJiM0MztcdFx0ICAgIFNLQlRYX0lOX1BST0dSRVNTKSlcbiYjNDM7XHRcdFx0a2ZyZWVfc2tiKHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYik7XG4gXHRcdHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYiA9IE5VTEw7XG4gXHR9XG4gXG4gXHQqdHhfYnVmID0gb2FfdGM2X3ByZXBhcmVfZGF0YV9oZWFkZXIoT0FfVEM2X0RBVEFfVkFMSUQsIHN0YXJ0X3ZhbGlkLFxuLVx0XHRcdFx0XHQgICAgIGVuZF92YWxpZCwgZW5kX2J5dGVfb2Zmc2V0KTtcbiYjNDM7XHRcdFx0XHRcdCAgICAgZW5kX3ZhbGlkLCBlbmRfYnl0ZV9vZmZzZXQsIHRzYyk7XG4gXHR0YzYtXHUwMDNlc3BpX2RhdGFfdHhfYnVmX29mZnNldCAmIzQzOz0gT0FfVEM2X0NIVU5LX1NJWkU7XG4gfVxuIFxuQEAgLTEwNTMsNiAmIzQzOzExODAsOCBAQCBzdGF0aWMgdTE2IG9hX3RjNl9wcmVwYXJlX3NwaV90eF9idWZfZm9yX3R4X3NrYnMoc3RydWN0IG9hX3RjNiAqdGM2KVxuIFx0XHRcdHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYiA9IHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYjtcbiBcdFx0XHR0YzYtXHUwMDNld2FpdGluZ190eF9za2IgPSBOVUxMO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1x0XHRcdG9hX3RjNl9kZWZlcl9mb3JfaHd0c3RhbXAodGM2LFxuJiM0MztcdFx0XHRcdFx0XHQgIHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYik7XG4gXHRcdH1cbiBcdFx0aWYgKCF0YzYtXHUwMDNlb25nb2luZ190eF9za2IpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMTA2OSw3ICYjNDM7MTE5OCw3IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9hZGRfZW1wdHlfY2h1bmtzX3RvX3NwaV9idWYoc3RydWN0IG9hX3RjNiAqdGM2LFxuIFxuIFx0aGVhZGVyID0gb2FfdGM2X3ByZXBhcmVfZGF0YV9oZWFkZXIoT0FfVEM2X0RBVEFfSU5WQUxJRCxcbiBcdFx0XHRcdFx0ICAgIE9BX1RDNl9EQVRBX1NUQVJUX0lOVkFMSUQsXG4tXHRcdFx0XHRcdCAgICBPQV9UQzZfREFUQV9FTkRfSU5WQUxJRCwgMCk7XG4mIzQzO1x0XHRcdFx0XHQgICAgT0FfVEM2X0RBVEFfRU5EX0lOVkFMSUQsIDAsIGZhbHNlKTtcbiBcbiBcdHdoaWxlIChuZWVkZWRfZW1wdHlfY2h1bmtzLS0pIHtcbiBcdFx0X19iZTMyICp0eF9idWYgPSB0YzYtXHUwMDNlc3BpX2RhdGFfdHhfYnVmICYjNDM7XG5AQCAtMTI2MSw2ICYjNDM7MTM5MCw3IEBAIG5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcdH1cbiBcbiYjNDM7XHRvYV90YzZfdHNpbmZvX3R4KHNrYiktXHUwMDNldHNjID0gMDtcbiBcdHNwaW5fbG9ja19iaChcdTAwMjZ0YzYtXHUwMDNldHhfc2tiX2xvY2spO1xuIFx0dGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiID0gc2tiO1xuIFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbkBAIC0xMjk0LDYgJiM0MzsxNDI0LDkgQEAgc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXHUwMDI2c3BpLVx1MDAzZWRldik7XG4gXHRtdXRleF9pbml0KFx1MDAyNnRjNi1cdTAwM2VzcGlfY3RybF9sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4mIzQzO1x0dGM2LVx1MDAzZXZlbmQxX21tcyA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdHRjNi1cdTAwM2V0eF90c19pZHggPSBPQV9UQzZfVFRTQ0FfUkVHX0lEO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRjNi1cdTAwM2V0eF90c19za2JfcSk7XG4gXG4gXHQvKiBTZXQgdGhlIFNQSSBjb250cm9sbGVyIHRvIHB1bXAgYXQgcmVhbHRpbWUgcHJpb3JpdHkgKi9cbiBcdHRjNi1cdTAwM2VzcGktXHUwMDNlcnQgPSB0cnVlO1xuQEAgLTEzNTksNiAmIzQzOzE0OTIsMTIgQEAgc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFx0Z290byBwaHlfZXhpdDtcbiBcdH1cbiBcbiYjNDM7XHRyZXQgPSBvYV90YzZfdXBkYXRlX3N0YW5kYXJkX2NhcGFiaWxpdHkodGM2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBjYXBhYmlsaXR5XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gcGh5X2V4aXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxLFxuIFx0XHRcdFx0XHRvYV90YzZfbWFjcGh5X2lzcixcbiBcdFx0XHRcdFx0b2FfdGM2X21hY3BoeV90aHJlYWRlZF9pcnEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfcHRwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMGNkZTU1NDVlZTI3YTBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfcHRwLmNcbkBAIC0wLDAgJiM0MzsxLDcwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU3VwcG9ydCBmb3IgaGFyZHdhcmUgdGltZXN0YW1waW5nIGZlYXR1cmUgZm9yIE9QRU4gQWxsaWFuY2VcbiYjNDM7ICogMTBCQVNF4oCRVDF4IE1BQ+KAkVBIWSBTZXJpYWwgSW50ZXJmYWNlIGZyYW1ld29ya1xuJiM0MzsgKlxuJiM0MzsgKiBBdXRob3I6IFNlbHZhIFJhamFnb3BhbCBcdTAwM2NzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb21cdTAwM2VcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ocnRpbWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxZG9tYWluLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaS9zcGkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vYV90YzYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRfdHN0YW1wLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGltZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O29hX3RjNl9zdGRfZGVmLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBvYV90YzZfcHRwX3JlZ2lzdGVyIC0gUmVnaXN0ZXJzIGNsb2NrIHJlbGF0ZWQgY2FsbGJhY2tzXG4mIzQzOyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXG4mIzQzOyAqIEBpbmZvOiBEZXNjcmliZXMgYSBQVFAgaGFyZHdhcmUgY2xvY2tcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFZlbmRvcnMgYXJlIGV4cGVjdGVkIHRvIHNldCB0aGUgaGFyZHdhcmUgdGltZXN0YW1wXG4mIzQzOyAqIHJlbGF0ZWQgY2FsbGJhY2tzIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXG4mIzQzOyAqXG4mIzQzOyAqL1xuJiM0MztpbnQgb2FfdGM2X3B0cF9yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdC8qIE5vdCBzdXBwb3J0aW5nIGhhcmR3YXJlIHRpbWVzdGFtcCBpc24mIzM5O3QgYW4gZXJyb3IgKi9cbiYjNDM7XHRpZiAoIXRjNi1cdTAwM2Vod190c3RhbXBfc3VwcG9ydGVkKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGluZm8tXHUwMDNlbmFtZSwgc2l6ZW9mKGluZm8tXHUwMDNlbmFtZSksIFwmIzM0OyVzXCYjMzQ7LFxuJiM0MztcdFx0IFwmIzM0O09BIFRDNiBQVFAgY2xvY2tcJiMzNDspO1xuJiM0MztcdHRjNi1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoaW5mbywgXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYpO1xuJiM0MztcdGlmIChJU19FUlIodGM2LVx1MDAzZXB0cF9jbG9jaykpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwmIzM0O1JlZ2lzdHJhdGlvbiBvZiAlcyBmYWlsZWRcJiMzNDssXG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlbmFtZSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XHR9XG4mIzQzO1x0ZGV2X2luZm8oXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwmIzM0OyVzIHJlZ2lzdGVyZWQuIGluZGV4ICVkXCYjMzQ7LCBpbmZvLVx1MDAzZW5hbWUsXG4mIzQzO1x0XHQgcHRwX2Nsb2NrX2luZGV4KHRjNi1cdTAwM2VwdHBfY2xvY2spKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfcHRwX3JlZ2lzdGVyKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBvYV90YzZfcHRwX3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVycyBjbG9jayByZWxhdGVkIGNhbGxiYWNrc1xuJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuJiM0MzsgKi9cbiYjNDM7dm9pZCBvYV90YzZfcHRwX3VucmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHRjNi1cdTAwM2VwdHBfY2xvY2spXG4mIzQzO1x0XHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih0YzYtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfcHRwX3VucmVnaXN0ZXIpO1xuJiM0MztcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O09QRU4gQWxsaWFuY2UgMTBCQVNF4oCRVDF4IE1BQ+KAkVBIWSBTZXJpYWwgSW50ZXJmYWNlIExpYlwmIzM0Oyk7XG4mIzQzO01PRFVMRV9BVVRIT1IoXCYjMzQ7U2VsdmEgUmFqYWdvcGFsIFx1MDAzY3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbVx1MDAzZVwmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9zdGRfZGVmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2X3N0ZF9kZWYuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNzgxNTAzYmU3ZjU2MlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9zdGRfZGVmLmhcbkBAIC0wLDAgJiM0MzsxLDE5MSBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7ICovXG4mIzQzOy8qXG4mIzQzOyAqIFJlZ2lzdGVyIGFuZCBkcml2ZXIgcmVsYXRlZCBkZWZpbml0aW9ucyB0byBzdXBwb3J0XG4mIzQzOyAqIE9QRU4gQWxsaWFuY2UgMTBCQVNF4oCRVDF4IE1BQ+KAkVBIWSBTZXJpYWwgSW50ZXJmYWNlIGZyYW1ld29yay5cbiYjNDM7ICpcbiYjNDM7ICogQXV0aG9yOiBTZWx2YSBSYWphZ29wYWwgXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2lmbmRlZiBPQV9UQzZfU1REX0RFRl9IXG4mIzQzOyNkZWZpbmUgT0FfVEM2X1NURF9ERUZfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldF90c3RhbXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGkvc3BpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93YWl0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiYjNDM7XG4mIzQzOy8qIE9QRU4gQWxsaWFuY2UgVEM2IHJlZ2lzdGVycyAqL1xuJiM0MzsvKiBTdGFuZGFyZCBDYXBhYmlsaXRpZXMgUmVnaXN0ZXIgKi9cbiYjNDM7I2RlZmluZSBPQV9UQzZfUkVHX1NURENBUFx0XHRcdDB4MDAwMlxuJiM0MzsjZGVmaW5lIFNURENBUF9ESVJFQ1RfUEhZX1JFR19BQ0NFU1NcdFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgU1REQ0FQX0ZSQU1FX1RJTUVTVEFNUF9DQVBBQklMSVRZXHRCSVQoNilcbiYjNDM7XG4mIzQzOy8qIFJlc2V0IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqL1xuJiM0MzsjZGVmaW5lIE9BX1RDNl9SRUdfUkVTRVRcdFx0XHQweDAwMDNcbiYjNDM7I2RlZmluZSBSRVNFVF9TV1JFU0VUXHRcdFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOy8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIzAgKi9cbiYjNDM7I2RlZmluZSBPQV9UQzZfUkVHX0NPTkZJRzBcdFx0XHQweDAwMDRcbiYjNDM7I2RlZmluZSBDT05GSUcwX1NZTkNcdFx0XHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSBDT05GSUcwX1pBUkZFX0VOQUJMRVx0XHRcdEJJVCgxMilcbiYjNDM7I2RlZmluZSBDT05GSUcwX0ZUU0VfRU5BQkxFXHRcdFx0QklUKDcpXG4mIzQzOyNkZWZpbmUgQ09ORklHMF9GVFNTXzY0QklUX1RTVEFNUFx0XHRCSVQoNilcbiYjNDM7XG4mIzQzOy8qIFN0YXR1cyBSZWdpc3RlciAjMCAqL1xuJiM0MzsjZGVmaW5lIE9BX1RDNl9SRUdfU1RBVFVTMFx0XHRcdDB4MDAwOFxuJiM0MzsjZGVmaW5lIFNUQVRVUzBfVFRTQ0FDXHRcdFx0XHRCSVQoMTApXG4mIzQzOyNkZWZpbmUgU1RBVFVTMF9UVFNDQUJcdFx0XHRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lIFNUQVRVUzBfVFRTQ0FBXHRcdFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSBTVEFUVVMwX1RUU0NBX01BU0tcdFx0R0VOTUFTSygxMCwgOClcbiYjNDM7I2RlZmluZSBTVEFUVVMwX1JFU0VUQ1x0XHRcdFx0QklUKDYpXG4mIzQzOyNkZWZpbmUgU1RBVFVTMF9IRUFERVJfRVJST1JcdFx0XHRCSVQoNSlcbiYjNDM7I2RlZmluZSBTVEFUVVMwX0xPU1NfT0ZfRlJBTUVfRVJST1JcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgU1RBVFVTMF9SWF9CVUZGRVJfT1ZFUkZMT1dfRVJST1JcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIFNUQVRVUzBfVFhfUFJPVE9DT0xfRVJST1JcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKiBCdWZmZXIgU3RhdHVzIFJlZ2lzdGVyICovXG4mIzQzOyNkZWZpbmUgT0FfVEM2X1JFR19CVUZGRVJfU1RBVFVTXHRcdDB4MDAwQlxuJiM0MzsjZGVmaW5lIEJVRkZFUl9TVEFUVVNfVFhfQ1JFRElUU19BVkFJTEFCTEVcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgQlVGRkVSX1NUQVRVU19SWF9DSFVOS1NfQVZBSUxBQkxFXHRHRU5NQVNLKDcsIDApXG4mIzQzO1xuJiM0MzsvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAjMCAqL1xuJiM0MzsjZGVmaW5lIE9BX1RDNl9SRUdfSU5UX01BU0swXHRcdFx0MHgwMDBDXG4mIzQzOyNkZWZpbmUgSU5UX01BU0swX1RUU0NBX01BU0tcdFx0XHRHRU5NQVNLKDEwLCA4KVxuJiM0MzsjZGVmaW5lIElOVF9NQVNLMF9IRUFERVJfRVJSX01BU0tcdFx0QklUKDUpXG4mIzQzOyNkZWZpbmUgSU5UX01BU0swX0xPU1NfT0ZfRlJBTUVfRVJSX01BU0tcdEJJVCg0KVxuJiM0MzsjZGVmaW5lIElOVF9NQVNLMF9SWF9CVUZGRVJfT1ZFUkZMT1dfRVJSX01BU0tcdEJJVCgzKVxuJiM0MzsjZGVmaW5lIElOVF9NQVNLMF9UWF9QUk9UT0NPTF9FUlJfTUFTS1x0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFNcdFx0KEdFTk1BU0soNSwgMCkgfCBcXFxuJiM0MztcdFx0XHRcdFx0XHQgR0VOTUFTSygxMiwgNykpXG4mIzQzO1xuJiM0MzsvKiBQSFkgQ2xhdXNlIDIyIHJlZ2lzdGVycyBiYXNlIGFkZHJlc3MgYW5kIG1hc2sgKi9cbiYjNDM7I2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFXHRcdDB4RkYwMFxuJiM0MzsjZGVmaW5lIE9BX1RDNl9QSFlfU1REX1JFR19BRERSX01BU0tcdFx0MHgxRlxuJiM0MztcbiYjNDM7LyogVHggdGltZXN0YW1wIGNhcHR1cmUgcmVnaXN0ZXIgQSAoaGlnaCkgKi9cbiYjNDM7I2RlZmluZSBPQV9UQzZfUkVHX1RUU0NBX0hJR0hcdFx0XHQoMHgxMClcbiYjNDM7XG4mIzQzOy8qIENvbnRyb2wgY29tbWFuZCBoZWFkZXIgKi9cbiYjNDM7I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfREFUQV9OT1RfQ1RSTFx0QklUKDMxKVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9XUklURV9OT1RfUkVBRFx0QklUKDI5KVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9NRU1fTUFQX1NFTEVDVE9SXHRHRU5NQVNLKDI3LCAyNClcbiYjNDM7I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfQUREUlx0XHRcdEdFTk1BU0soMjMsIDgpXG4mIzQzOyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0xFTkdUSFx0XHRHRU5NQVNLKDcsIDEpXG4mIzQzOyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1BBUklUWVx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOy8qIERhdGEgaGVhZGVyICovXG4mIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0RBVEFfTk9UX0NUUkxcdEJJVCgzMSlcbiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRFx0XHRCSVQoMjEpXG4mIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1ZBTElEXHRcdEJJVCgyMClcbiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfV09SRF9PRkZTRVRcdEdFTk1BU0soMTksIDE2KVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9FTkRfVkFMSURcdFx0QklUKDE0KVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9FTkRfQllURV9PRkZTRVRcdEdFTk1BU0soMTMsIDgpXG4mIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1RTQ19PRkZTRVRcdFx0R0VOTUFTSyg3LCA2KVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9QQVJJVFlcdFx0QklUKDApXG4mIzQzO1xuJiM0MzsvKiBEYXRhIGZvb3RlciAqL1xuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFNcdFx0QklUKDMxKVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SWERfSEVBREVSX0JBRFx0QklUKDMwKVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9DT05GSUdfU1lOQ1x0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JYX0NIVU5LU1x0XHRHRU5NQVNLKDI4LCAyNClcbiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfREFUQV9WQUxJRFx0XHRCSVQoMjEpXG4mIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1ZBTElEXHRcdEJJVCgyMClcbiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfU1RBUlRfV09SRF9PRkZTRVRcdEdFTk1BU0soMTksIDE2KVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfVkFMSURcdFx0QklUKDE0KVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SVFNBX1ZBTElEXHRcdEJJVCg3KVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SVFNQX1ZBTElEXHRcdEJJVCg2KVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfQllURV9PRkZTRVRcdEdFTk1BU0soMTMsIDgpXG4mIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1RYX0NSRURJVFNcdFx0R0VOTUFTSyg1LCAxKVxuJiM0MztcbiYjNDM7I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfU0laRVx0XHRcdDRcbiYjNDM7I2RlZmluZSBPQV9UQzZfQ1RSTF9SRUdfVkFMVUVfU0laRVx0XHQ0XG4mIzQzOyNkZWZpbmUgT0FfVEM2X0NUUkxfSUdOT1JFRF9TSVpFXHRcdDRcbiYjNDM7I2RlZmluZSBPQV9UQzZfQ1RSTF9NQVhfUkVHSVNURVJTXHRcdDEyOFxuJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX1NQSV9CVUZfU0laRVx0XHQoT0FfVEM2X0NUUkxfSEVBREVSX1NJWkUgJiM0MztcXFxuJiM0MztcdFx0XHRcdFx0XHQoT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSUyAqXFxcbiYjNDM7XHRcdFx0XHRcdFx0T0FfVEM2X0NUUkxfUkVHX1ZBTFVFX1NJWkUpICYjNDM7XFxcbiYjNDM7XHRcdFx0XHRcdFx0T0FfVEM2X0NUUkxfSUdOT1JFRF9TSVpFKVxuJiM0MzsjZGVmaW5lIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkVcdFx0NjRcbiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU0laRVx0XHRcdDRcbiYjNDM7I2RlZmluZSBPQV9UQzZfQ0hVTktfU0laRVx0XHRcdChPQV9UQzZfREFUQV9IRUFERVJfU0laRSAmIzQzO1xcXG4mIzQzO1x0XHRcdFx0XHRcdE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpXG4mIzQzOyNkZWZpbmUgT0FfVEM2X01BWF9UWF9DSFVOS1NcdFx0XHQ0OFxuJiM0MzsjZGVmaW5lIE9BX1RDNl9TUElfREFUQV9CVUZfU0laRVx0XHQoT0FfVEM2X01BWF9UWF9DSFVOS1MgKlxcXG4mIzQzO1x0XHRcdFx0XHRcdE9BX1RDNl9DSFVOS19TSVpFKVxuJiM0MzsjZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfREVMQVlcdFx0MTAwMFxuJiM0MzsjZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfVElNRU9VVFx0XHQxMDAwMDAwXG4mIzQzO1xuJiM0MzsjZGVmaW5lIE9BX1RDNl9UU1RBTVBfU1pcdFx0XHQ4XG4mIzQzO1xuJiM0MzsjZGVmaW5lIE9BX1RDNl9UVFNDQV9SRUdfSURcdFx0XHQxXG4mIzQzOyNkZWZpbmUgT0FfVEM2X1RUU0NCX1JFR19JRFx0XHRcdDJcbiYjNDM7I2RlZmluZSBPQV9UQzZfVFRTQ0NfUkVHX0lEXHRcdFx0M1xuJiM0MztcbiYjNDM7LyogSW50ZXJuYWwgc3RydWN0dXJlIGZvciBNQUMtUEhZIGRyaXZlcnMgKi9cbiYjNDM7c3RydWN0IG9hX3RjNiB7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiYjNDM7XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICptZGlvYnVzO1xuJiM0MztcdHN0cnVjdCBzcGlfZGV2aWNlICpzcGk7XG4mIzQzO1x0c3RydWN0IG11dGV4IHNwaV9jdHJsX2xvY2s7IC8qIFByb3RlY3RzIHNwaSBjb250cm9sIHRyYW5zZmVyICovXG4mIzQzO1x0c3BpbmxvY2tfdCB0eF9za2JfbG9jazsgLyogUHJvdGVjdHMgdHggc2tiIGhhbmRsaW5nICovXG4mIzQzO1x0dm9pZCAqc3BpX2N0cmxfdHhfYnVmO1xuJiM0MztcdHZvaWQgKnNwaV9jdHJsX3J4X2J1ZjtcbiYjNDM7XHR2b2lkICpzcGlfZGF0YV90eF9idWY7XG4mIzQzO1x0dm9pZCAqc3BpX2RhdGFfcnhfYnVmO1xuJiM0MztcdHN0cnVjdCBza19idWZmICpvbmdvaW5nX3R4X3NrYjtcbiYjNDM7XHRzdHJ1Y3Qgc2tfYnVmZiAqd2FpdGluZ190eF9za2I7XG4mIzQzO1x0c3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjtcbiYjNDM7XHR1MTYgdHhfc2tiX29mZnNldDtcbiYjNDM7XHR1MTYgc3BpX2RhdGFfdHhfYnVmX29mZnNldDtcbiYjNDM7XHR1MTYgdHhfY3JlZGl0cztcbiYjNDM7XHR1OCByeF9jaHVua3NfYXZhaWxhYmxlO1xuJiM0MztcdGJvb2wgcnhfYnVmX292ZXJmbG93O1xuJiM0MztcdGJvb2wgaW50X2ZsYWc7XG4mIzQzO1x0Ym9vbCBkaXNhYmxlX3RyYWZmaWM7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9ja19pbmZvIHB0cF9jbG9ja19pbmZvO1xuJiM0MztcdHN0cnVjdCBod3RzdGFtcF9jb25maWcgdHNfY29uZmlnO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgdHhfdHNfc2tiX3E7XG4mIzQzO1x0c3RydWN0IHB0cF9jbG9jayAqcHRwX2Nsb2NrO1xuJiM0MztcdGJvb2wgaHdfdHN0YW1wX3N1cHBvcnRlZDtcbiYjNDM7XHRib29sIGh3X3RzdGFtcF9lbmFibGVkO1xuJiM0MztcdHUzMiB0eF9od3RzdGFtcF9wa3RzO1xuJiM0MztcdHUzMiB0eF9od3RzdGFtcF9sb3N0O1xuJiM0MztcdHUzMiB0eF9od3RzdGFtcF9lcnI7XG4mIzQzO1x0aW50IHZlbmQxX21tcztcbiYjNDM7XHR1OCB0eF90c19pZHg7XG4mIzQzO307XG4mIzQzO1xuJiM0MztlbnVtIG9hX3RjNl9oZWFkZXJfdHlwZSB7XG4mIzQzO1x0T0FfVEM2X0NUUkxfSEVBREVSLFxuJiM0MztcdE9BX1RDNl9EQVRBX0hFQURFUixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gb2FfdGM2X3JlZ2lzdGVyX29wIHtcbiYjNDM7XHRPQV9UQzZfQ1RSTF9SRUdfUkVBRCA9IDAsXG4mIzQzO1x0T0FfVEM2X0NUUkxfUkVHX1dSSVRFID0gMSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gb2FfdGM2X2RhdGFfdmFsaWRfaW5mbyB7XG4mIzQzO1x0T0FfVEM2X0RBVEFfSU5WQUxJRCxcbiYjNDM7XHRPQV9UQzZfREFUQV9WQUxJRCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gb2FfdGM2X2RhdGFfc3RhcnRfdmFsaWRfaW5mbyB7XG4mIzQzO1x0T0FfVEM2X0RBVEFfU1RBUlRfSU5WQUxJRCxcbiYjNDM7XHRPQV9UQzZfREFUQV9TVEFSVF9WQUxJRCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2VudW0gb2FfdGM2X2RhdGFfZW5kX3ZhbGlkX2luZm8ge1xuJiM0MztcdE9BX1RDNl9EQVRBX0VORF9JTlZBTElELFxuJiM0MztcdE9BX1RDNl9EQVRBX0VORF9WQUxJRCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO2ludCBvYV90YzZfdHN0YW1wX2lvY3RsKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7XG4mIzQzO1xuJiM0MzsjZW5kaWYgLyogT0FfVEM2X1NURF9ERUZfSCAqL1xuJiM0MztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2X3RzdGFtcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl90c3RhbXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODBmMWE0OTE2YTNlMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl90c3RhbXAuY1xuQEAgLTAsMCAmIzQzOzEsMjA1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MztcbiYjNDM7LypcbiYjNDM7ICogT1BFTiBBbGxpYW5jZSAxMEJBU0XigJFUMXggTUFD4oCRUEhZIFNlcmlhbCBJbnRlcmZhY2UgZnJhbWV3b3JrXG4mIzQzOyAqXG4mIzQzOyAqIEF1dGhvcjogU2VsdmEgUmFqYWdvcGFsIFx1MDAzY3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbVx1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW9wb2xsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29hX3RjNi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtvYV90YzZfc3RkX2RlZi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG9hX3RjNl9zZXRfaHd0c3RhbXBfc2V0dGluZ3Moc3RydWN0IG9hX3RjNiAqdGM2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGNmZzAsIGlycW0sIHN0YXR1czA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0NPTkZJRzAsIFx1MDAyNmNmZzApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWFkIENGRzAgcmVnaXN0ZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfSU5UX01BU0swLCBcdTAwMjZpcnFtKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVhZCBJUlFNIHJlZ2lzdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogSGFyZHdhcmUgdGltZXN0YW1wIGZlYXR1cmUgc3VwcG9ydHMgNjQtYml0IHRpbWVzdGFtcCBvbmx5ICovXG4mIzQzO1x0aWYgKHRjNi1cdTAwM2V0c19jb25maWcudHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTiB8fFxuJiM0MztcdCAgICB0YzYtXHUwMDNldHNfY29uZmlnLnJ4X2ZpbHRlciA9PSBIV1RTVEFNUF9GSUxURVJfQUxMKVxuJiM0MztcdFx0Y2ZnMCB8PSAoQ09ORklHMF9GVFNFX0VOQUJMRSB8XG4mIzQzO1x0XHRcdCBDT05GSUcwX0ZUU1NfNjRCSVRfVFNUQU1QKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRjZmcwIFx1MDAyNj0gfkNPTkZJRzBfRlRTRV9FTkFCTEU7XG4mIzQzO1xuJiM0MztcdGlmICh0YzYtXHUwMDNldHNfY29uZmlnLnR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT04pXG4mIzQzO1x0XHRpcnFtIFx1MDAyNj0gfklOVF9NQVNLMF9UVFNDQV9NQVNLO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGlycW0gfD0gSU5UX01BU0swX1RUU0NBX01BU0s7XG4mIzQzO1xuJiM0MztcdC8qIENsZWFyIHRpbWVzdGFtcCByZWxhdGVkIElSUXMgKi9cbiYjNDM7XHRzdGF0dXMwID0gU1RBVFVTMF9UVFNDQV9NQVNLO1xuJiM0MztcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1RBVFVTMCwgc3RhdHVzMCk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIFNUQVRVUzAgcmVnaXN0ZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0lOVF9NQVNLMCwgaXJxbSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIHdyaXRlIElSUU0gcmVnaXN0ZXJcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0NPTkZJRzAsIGNmZzApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byB3cml0ZSBDRkcwIHJlZ2lzdGVyXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoY2ZnMCBcdTAwMjYgQ09ORklHMF9GVFNFX0VOQUJMRSlcbiYjNDM7XHRcdHRjNi1cdTAwM2Vod190c3RhbXBfZW5hYmxlZCA9IHRydWU7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dGM2LVx1MDAzZWh3X3RzdGFtcF9lbmFibGVkID0gZmFsc2U7XG4mIzQzO291dDpcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogb2FfdGM2X2h3dHN0YW1wX2dldCAtIGdldHMgaGFyZHdhcmUgdGltZXN0YW1wIGNvbmZpZ1xuJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuJiM0MzsgKiBAY2ZnOiBrZXJuZWwgY29weSBvZiBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlnXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG9hX3RjNl9od3RzdGFtcF9nZXQoc3RydWN0IG9hX3RjNiAqdGM2LFxuJiM0MztcdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZylcbiYjNDM7e1xuJiM0MztcdGh3dHN0YW1wX2NvbmZpZ190b19rZXJuZWwoY2ZnLCBcdTAwMjZ0YzYtXHUwMDNldHNfY29uZmlnKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaHd0c3RhbXBfZ2V0KTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBvYV90YzZfaHd0c3RhbXBfc2V0IC0gc2V0cyBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlnXG4mIzQzOyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXG4mIzQzOyAqIEBjZmc6IGtlcm5lbCBjb3B5IG9mIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWdcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cbiYjNDM7ICovXG4mIzQzO2ludCBvYV90YzZfaHd0c3RhbXBfc2V0KHN0cnVjdCBvYV90YzYgKnRjNixcbiYjNDM7XHRcdFx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZylcbiYjNDM7e1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh0YzYtXHUwMDNlbmV0ZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRjNi1cdTAwM2Vod190c3RhbXBfc3VwcG9ydGVkKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGNmZy1cdTAwM2V0eF90eXBlKSB7XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoY2ZnLVx1MDAzZXJ4X2ZpbHRlcikge1xuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX05PTkU6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfQUxMOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1NPTUU6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X0VWRU5UOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9ERUxBWV9SRVE6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X0VWRU5UOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX0VWRU5UOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVE6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0VWRU5UOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DOlxuJiM0MztcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4mIzQzO1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTlRQX0FMTDpcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVSQU5HRTtcbiYjNDM7XHR9XG4mIzQzO1x0aHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsKFx1MDAyNnRjNi1cdTAwM2V0c19jb25maWcsIGNmZyk7XG4mIzQzO1xuJiM0MztcdC8qIFN1cHBvcnRzIHRpbWVzdGFtcGluZyBhbGwgdHJhZmZpYyAqL1xuJiM0MztcdGlmIChjZmctXHUwMDNlcnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxuJiM0MztcdFx0dGM2LVx1MDAzZXRzX2NvbmZpZy5yeF9maWx0ZXIgPSBIV1RTVEFNUF9GSUxURVJfQUxMO1xuJiM0MztcdHJldHVybiBvYV90YzZfc2V0X2h3dHN0YW1wX3NldHRpbmdzKHRjNik7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2h3dHN0YW1wX3NldCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogb2FfdGM2X2dldF90c19zdGF0cyAtIFByb3ZpZGVzIHRpbWVzdGFtcGluZyBzdGF0c1xuJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuJiM0MzsgKiBAc3RhdHM6IGV0aHRvb2wgZGF0YSBzdHJ1Y3R1cmUgdG8gZmlsbCBpblxuJiM0MzsgKi9cbiYjNDM7dm9pZCBvYV90YzZfZ2V0X3RzX3N0YXRzKHN0cnVjdCBvYV90YzYgKnRjNixcbiYjNDM7XHRcdFx0IHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICpzdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0YXRzLVx1MDAzZXBrdHMgPSB0YzYtXHUwMDNldHhfaHd0c3RhbXBfcGt0cztcbiYjNDM7XHRzdGF0cy1cdTAwM2VlcnIgPSB0YzYtXHUwMDNldHhfaHd0c3RhbXBfZXJyO1xuJiM0MztcdHN0YXRzLVx1MDAzZWxvc3QgPSB0YzYtXHUwMDNldHhfaHd0c3RhbXBfbG9zdDtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfZ2V0X3RzX3N0YXRzKTtcbiYjNDM7XG4mIzQzO2ludCBvYV90YzZfdHN0YW1wX2lvY3RsKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIGtjZmc7XG4mIzQzO1x0c3RydWN0IGh3dHN0YW1wX2NvbmZpZyB0c2NmZztcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0YzYtXHUwMDNlaHdfdHN0YW1wX3N1cHBvcnRlZClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNtZCA9PSBTSU9DU0hXVFNUQU1QKSB7XG4mIzQzO1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dHNjZmcsIHJxLVx1MDAzZWlmcl9kYXRhLFxuJiM0MztcdFx0XHRcdCAgIHNpemVvZih0c2NmZykpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodHNjZmcuZmxhZ3MpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0aHd0c3RhbXBfY29uZmlnX3RvX2tlcm5lbChcdTAwMjZrY2ZnLCBcdTAwMjZ0c2NmZyk7XG4mIzQzO1x0XHRyZXQgPSBvYV90YzZfaHd0c3RhbXBfc2V0KHRjNiwgXHUwMDI2a2NmZyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoY29weV90b191c2VyKHJxLVx1MDAzZWlmcl9kYXRhLCBcdTAwMjZ0YzYtXHUwMDNldHNfY29uZmlnLFxuJiM0MztcdFx0XHQgc2l6ZW9mKHRjNi1cdTAwM2V0c19jb25maWcpKSlcbiYjNDM7XHRcdHJldCA9IC1FRkFVTFQ7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIG9hX3RjNl9nZXRfdHNfaW5mbyAtIFByb3ZpZGVzIHRpbWVzdGFtcCBpbmZvIGZvciBldGh0b29sXG4mIzQzOyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXG4mIzQzOyAqIEBpbmZvOiBldGh0b29sIHRpbWVzdGFtcGluZyBpbmZvIHN0cnVjdHVyZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvdGhlcndpc2UgZmFpbGVkLlxuJiM0MzsgKi9cbiYjNDM7aW50IG9hX3RjNl9nZXRfdHNfaW5mbyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXRjNi1cdTAwM2VwdHBfY2xvY2spXG4mIzQzO1x0XHRyZXR1cm4gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyh0YzYtXHUwMDNlbmV0ZGV2LCBpbmZvKTtcbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgPSBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSB8XG4mIzQzO1x0XHRcdFx0U09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8XG4mIzQzO1x0XHRcdFx0U09GX1RJTUVTVEFNUElOR19SWF9IQVJEV0FSRTtcbiYjNDM7XHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleCh0YzYtXHUwMDNlcHRwX2Nsb2NrKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXR4X3R5cGVzID0gQklUKEhXVFNUQU1QX1RYX09OKTtcbiYjNDM7XHRpbmZvLVx1MDAzZXJ4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX0FMTCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2dldF90c19pbmZvKTtcbiYjNDM7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBMaWJcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O1NlbHZhIFJhamFnb3BhbCBcdTAwM2NzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb21cdTAwM2VcJiMzNDspO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOGQ3MjE5NDE1MWVhNzlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9LY29uZmlnXG5AQCAtMCwwICYjNDM7MSwyMSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7I1xuJiM0MzsjIG9uc2VtaSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4mIzQzOyNcbiYjNDM7XG4mIzQzO2NvbmZpZyBORVRfVkVORE9SX09OU0VNSVxuJiM0MztcdGJvb2wgXCYjMzQ7b25zZW1pIG5ldHdvcmsgZGV2aWNlc1wmIzM0O1xuJiM0MztcdGhlbHBcbiYjNDM7XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiYjNDM7XG4mIzQzO1x0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJiMzOTt0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbiYjNDM7XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiYjNDM7XHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgb25zZW1pIGV0aGVybmV0IGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91XG4mIzQzO1x0ICB3aWxsIGJlIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4mIzQzO1xuJiM0MztpZiBORVRfVkVORE9SX09OU0VNSVxuJiM0MztcbiYjNDM7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9LY29uZmlnXCYjMzQ7XG4mIzQzO1xuJiM0MztlbmRpZiAjIE5FVF9WRU5ET1JfT05TRU1JXG4mIzQzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mM2Q0ZWIxNTQzMTNjNlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSw3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjXG4mIzQzOyMgTWFrZWZpbGUgZm9yIHRoZSBvbnNlbWkgbmV0d29yayBkZXZpY2UgZHJpdmVycy5cbiYjNDM7I1xuJiM0MztcbiYjNDM7b2JqLSQoQ09ORklHX1MyNTAwX01BQ1BIWSkgJiM0Mzs9IHMyNTAwL1xuJiM0MztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0MWZiYWYxYjY0MTg3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvS2NvbmZpZ1xuQEAgLTAsMCAmIzQzOzEsMTkgQEBcbiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNcbiYjNDM7IyBvbnNlbWkgUzI1MDAgRHJpdmVyIFN1cHBvcnRcbiYjNDM7I1xuJiM0MztcbiYjNDM7Y29uZmlnIFMyNTAwX01BQ1BIWVxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1MyNTAwIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRkZXBlbmRzIG9uIFNQSVxuJiM0MztcdGltcGx5IE5FVF9TRUxGVEVTVFNcbiYjNDM7XHRzZWxlY3QgTkNOMjYwMDBfUEhZXG4mIzQzO1x0c2VsZWN0IE9BX1RDNlxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIFN1cHBvcnQgZm9yIHRoZSBvbnNlbWkgVFMyNTAwIE1BQ1BIWSBFdGhlcm5ldCBjaGlwLlxuJiM0MztcdCAgSXQgd29ya3MgdW5kZXIgdGhlIGZyYW1ld29yayB0aGF0IGNvbmZvcm0gdG8gT1BFTiBBbGxpYW5jZVxuJiM0MztcdCAgMTBCQVNFLVQxeCBTZXJpYWwgSW50ZXJmYWNlIHNwZWNpZmljYXRpb24uXG4mIzQzO1xuJiM0MztcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlXG4mIzQzO1x0ICBjYWxsZWQgczI1MDAuXG4mIzQzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42MWVjNzA1Y2RmOWYxYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL01ha2VmaWxlXG5AQCAtMCwwICYjNDM7MSw3IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjXG4mIzQzOyMgTWFrZWZpbGUgZm9yIHRoZSBvbnNlbWkgbmV0d29yayBkZXZpY2UgZHJpdmVycy5cbiYjNDM7I1xuJiM0MztvYmotJChDT05GSUdfUzI1MDBfTUFDUEhZKSA6PSBzMjUwMC5vXG4mIzQzO3MyNTAwLW9ianMgOj0gczI1MDBfbWFpbi5vIHMyNTAwX2V0aHRvb2wubyBzMjUwMF9wdHAub1xuJiM0MztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX2V0aHRvb2wuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wYjdlZjQ5MGQ3Y2FjM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX2V0aHRvb2wuY1xuQEAgLTAsMCAmIzQzOzEsMzYwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAyMDI2IFNlbWljb25kdWN0b3IgQ29tcG9uZW50cyBJbmR1c3RyaWVzLCBMTEMgKFwmIzM0O29uc2VtaVwmIzM0OykuXG4mIzQzOyAqIG9uc2VtaSYjMzk7cyBTMjUwMCAxMEJBU0UtVDFTIE1BQy1QSFkgZHJpdmVyXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRodG9vbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9zZWxmdGVzdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7czI1MDBfaHdfZGVmLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUzI1MDBfTlVNX1JFR1NcdFx0XHQzOFxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR0RVTVBfTEVOXHRcdChzaXplb2YodTMyKSAqIChTMjUwMF9OVU1fUkVHUyAqIDIpKVxuJiM0MztcbiYjNDM7I2RlZmluZSBTMjUwMF9OVU1fTUFDX1NUQVRTXHRcdDIxXG4mIzQzOyNkZWZpbmUgUzI1MDBfTlVNX1JNT05fU1RBVFNcdFx0MTJcbiYjNDM7XG4mIzQzO3N0cnVjdCBzMjUwMF9yZWdfbWFwIHtcbiYjNDM7XHR1MTYgcmVnO1xuJiM0MztcdHUxNiBtbXM7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHMyNTAwX3JlZ19tYXAgczI1MDBfcmVnX21hcFtTMjUwMF9OVU1fUkVHU10gPSB7XG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfT05JUFZFUiwgICAgICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19UV0VBS1MxLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX1BMQ0FFWFQsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfUE1BVFVORTAsICAgICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19QTUFUVU5FMSwgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX1QxU1dVUFRVTkUsICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfSERELCAgICAgICAgICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19EQ1FfVE9JRCwgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX0RDUV9TUUksICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfRENRX1NRSV9QTFVTLCBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19IRERfVFVORTEsICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMiwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfSEREX1RVTkUzLCAgICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19XU19TVEFUVVNfMCwgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMCwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfV1NfU1RBVFVTXzEsICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19XU19DVFJMXzEsICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX01JSU1JUlFFLCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19NSUlNSVJRUywgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfRElPQ0ZHMCwgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX0NISVBJRCwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19UV0VBS1MyLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfTUFDSUQwLCAgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX01BQ0lEMSwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19OVk1fSEVBTFRILCAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfUFRQX1NFQywgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX1BUUE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19QVFBfU0VUU0VDLCAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfU0VUTlNFQywgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX1BUUF9BREosICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19DTVBDVEwsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfQ01QU0VDLCAgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX0NNUE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19DTVBQRVIsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfQ0FQQ1RMLCAgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxuJiM0MztcdHsgUzI1MDBfUkVHX1ZTX0NBUFNFQywgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbiYjNDM7XHR7IFMyNTAwX1JFR19WU19DQVBOU0VDLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXG4mIzQzO1x0eyBTMjUwMF9SRUdfVlNfQkNOQ05ULCAgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSBzMjUwMF9zdGF0X2lkeCB7XG4mIzQzO1x0UzI1MDBfTVNUT0NURUNUU1RYX0lEWCA9IDAsXG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTVFhPS19JRFgsXG4mIzQzO1x0UzI1MDBfTVNUQkNBU1RUWE9LX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RNQ0FTVFRYT0tfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1RYNjRfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1RYNjVfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1RYMTI4X0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RGUkFNRVNUWDI1Nl9JRFgsXG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTVFg1MTJfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1RYMTAyNF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNUVFhVTkRFRkxPV19JRFgsXG4mIzQzO1x0UzI1MDBfTVNUU0lOR0xFQ09MX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RNVUxUSUNPTF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNURVhDRVNTQ09MX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RERUZFUlJFRFRYX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RDUlNFUlJfSURYLFxuJiM0MztcdFMyNTAwX01TVE9DVEVDVFNSWF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTUlhPS19JRFgsXG4mIzQzO1x0UzI1MDBfTVNUQkNBU1RSWE9LX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RNQ0FTVFJYT0tfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1JYNjRfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1JYNjVfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1JYMTI4X0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RGUkFNRVNSWDI1Nl9JRFgsXG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTUlg1MTJfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1JYMTAyNF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNUUlVOVFNFUlJfSURYLFxuJiM0MztcdFMyNTAwX01TVFJYVE9PTE9OR19JRFgsXG4mIzQzO1x0UzI1MDBfTVNURkNTRVJSU19JRFgsXG4mIzQzO1x0UzI1MDBfTVNUU1lNQk9MRVJSU19JRFgsXG4mIzQzO1x0UzI1MDBfTVNUQUxJR05FUlJTX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RSWE9WRVJGTE9XX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RSWERST1BQRURfSURYLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgczI1MDBfbWFjX3N0YXRfc3RyaW5nc1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7XG4mIzQzO1x0XCYjMzQ7dHhfYnl0ZXNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7dHhfZnJhbWVzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3R4X2Jyb2FkY2FzdF9mcmFtZXNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7dHhfbXVsdGljYXN0X2ZyYW1lc1wmIzM0OyxcbiYjNDM7XHRcJiMzNDt0eF91bmRlcmZsb3dfZXJyb3JzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3R4X3NpbmdsZV9jb2xsaXNpb25zXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3R4X211bHRpcGxlX2NvbGxpc2lvbnNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7dHhfZXhjZXNzaXZlX2NvbGxpc2lvbnNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7dHhfZGVmZXJyZWRfZnJhbWVzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3R4X2NhcnJpZXJfc2Vuc2VfZXJyb3JzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3J4X2J5dGVzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3J4X2ZyYW1lc1wmIzM0OyxcbiYjNDM7XHRcJiMzNDtyeF9icm9hZGNhc3RfZnJhbWVzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3J4X211bHRpY2FzdF9mcmFtZXNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7cnhfcnVudHNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7cnhfb3ZlcnNpemVfZnJhbWVzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3J4X2NyY19lcnJvcnNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7cnhfc3ltYm9sX2Vycm9yc1wmIzM0OyxcbiYjNDM7XHRcJiMzNDtyeF9hbGlnbm1lbnRfZXJyb3JzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O3J4X2J1c3lfZHJvcHNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7cnhfbWlzbWF0Y2hfZHJvcHNcJiMzNDssXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgdTggczI1MDBfbWFjX3N0YXRfbWFwW1MyNTAwX05VTV9NQUNfU1RBVFNdID0ge1xuJiM0MztcdFMyNTAwX01TVE9DVEVDVFNUWF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTVFhPS19JRFgsXG4mIzQzO1x0UzI1MDBfTVNUQkNBU1RUWE9LX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RNQ0FTVFRYT0tfSURYLFxuJiM0MztcdFMyNTAwX01TVFRYVU5ERUZMT1dfSURYLFxuJiM0MztcdFMyNTAwX01TVFNJTkdMRUNPTF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNUTVVMVElDT0xfSURYLFxuJiM0MztcdFMyNTAwX01TVEVYQ0VTU0NPTF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNUREVGRVJSRURUWF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNUQ1JTRVJSX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RPQ1RFQ1RTUlhfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1JYT0tfSURYLFxuJiM0MztcdFMyNTAwX01TVEJDQVNUUlhPS19JRFgsXG4mIzQzO1x0UzI1MDBfTVNUTUNBU1RSWE9LX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RSVU5UU0VSUl9JRFgsXG4mIzQzO1x0UzI1MDBfTVNUUlhUT09MT05HX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RGQ1NFUlJTX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RTWU1CT0xFUlJTX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RBTElHTkVSUlNfSURYLFxuJiM0MztcdFMyNTAwX01TVFJYT1ZFUkZMT1dfSURYLFxuJiM0MztcdFMyNTAwX01TVFJYRFJPUFBFRF9JRFgsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3QgdTggczI1MDBfcm1vbl9zdGF0X21hcFtTMjUwMF9OVU1fUk1PTl9TVEFUU10gPSB7XG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTVFg2NF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTVFg2NV9JRFgsXG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTVFgxMjhfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1RYMjU2X0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RGUkFNRVNUWDUxMl9JRFgsXG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTVFgxMDI0X0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RGUkFNRVNSWDY0X0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RGUkFNRVNSWDY1X0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RGUkFNRVNSWDEyOF9JRFgsXG4mIzQzO1x0UzI1MDBfTVNURlJBTUVTUlgyNTZfSURYLFxuJiM0MztcdFMyNTAwX01TVEZSQU1FU1JYNTEyX0lEWCxcbiYjNDM7XHRTMjUwMF9NU1RGUkFNRVNSWDEwMjRfSURYLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBzMjUwMF9ybW9uX2hpc3RfcmFuZ2VzW10gPSB7XG4mIzQzO1x0eyA2NCwgNjQgfSxcbiYjNDM7XHR7IDY1LCAxMjcgfSxcbiYjNDM7XHR7IDEyOCwgMjU1IH0sXG4mIzQzO1x0eyAyNTYsIDUxMSB9LFxuJiM0MztcdHsgNTEyLCAxMDIzIH0sXG4mIzQzO1x0eyAxMDI0LCAyMDAwIH0sXG4mIzQzO1x0eyB9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2RlZmluZSBTMjUwMF9NQUNfU1RBVFNfTEVOIEFSUkFZX1NJWkUoczI1MDBfbWFjX3N0YXRfc3RyaW5ncylcbiYjNDM7c3RhdGljX2Fzc2VydChTMjUwMF9NQUNfU1RBVFNfTEVOID09IFMyNTAwX05VTV9NQUNfU1RBVFMpO1xuJiM0MztzdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUoczI1MDBfbWFjX3N0YXRfbWFwKSA9PSBTMjUwMF9OVU1fTUFDX1NUQVRTKTtcbiYjNDM7c3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKHMyNTAwX3Jtb25fc3RhdF9tYXApID09IFMyNTAwX05VTV9STU9OX1NUQVRTKTtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgU1RBVF9SRUdfT0ZGU0VUKHgpICgoUzI1MDBfUkVHX01BQ19TVCMjeCkgLSBcXFxuJiM0MztcdFx0XHQgICBTMjUwMF9SRUdfTUFDX0ZJUlNUX1NUQVQpXG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzMjUwMF91cGRhdGVfc3RhdHMoc3RydWN0IHMyNTAwX2luZm8gKnByaXYpXG4mIzQzO3tcbiYjNDM7XHR1NjQgKmRhdGEgPSBwcml2LVx1MDAzZXN0YXRzX2RhdGE7XG4mIzQzO1x0dTMyICpyZWdzLCAqcnB0cjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZWdzID0ga21hbGxvY19hcnJheShTMjUwMF9OVU1fU1RBVF9SRUdTLCBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFyZWdzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3RlcnNfbW1zKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1RYTCxcbiYjNDM7XHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCByZWdzLFxuJiM0MztcdFx0XHRcdFx0UzI1MDBfTlVNX1NUQVRfUkVHUyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRycHRyID0gcmVncztcbiYjNDM7XG4mIzQzO1x0LyogVFggYnl0ZXMgaXMgYSA2NC1iaXQgcmVnaXN0ZXIgdGhhdCBzcGFucyBvdmVyIHR3byAzMi1iaXQgcmVnc1xuJiM0MztcdCAqIG5vdGU6IEhXIGRvZXMgYXV0by1mcmVlemUgd2hlbiByZWFkaW5nIExTQiBhbmQgdW4tZnJlZXplIG9uIE1TQlxuJiM0MztcdCAqL1xuJiM0MztcdCooZGF0YSYjNDM7JiM0MzspICYjNDM7PSAoKHU2NCkqcnB0cikgfCAoKCh1NjQpKihycHRyICYjNDM7IDEpKSBcdTAwM2NcdTAwM2MgMzIpO1xuJiM0MztcbiYjNDM7XHQvKiBydW4gdW50aWwgdGhlIG5leHQgNjQtYml0IHJlZ2lzdGVyICovXG4mIzQzO1x0Zm9yIChycHRyICYjNDM7PSAyOyAocnB0ciAtIHJlZ3MpIFx1MDAzYyBTVEFUX1JFR19PRkZTRVQoT0NURUNUU1JYTCk7ICYjNDM7JiM0MztycHRyKVxuJiM0MztcdFx0KihkYXRhJiM0MzsmIzQzOykgJiM0Mzs9ICpycHRyO1xuJiM0MztcbiYjNDM7XHQvKiBSWCBieXRlcyBpcyBhIDY0LWJpdCByZWdpc3RlciB0aGF0IHNwYW5zIG92ZXIgdHdvIDMyLWJpdCByZWdzXG4mIzQzO1x0ICogbm90ZTogSFcgZG9lcyBhdXRvLWZyZWV6ZSB3aGVuIHJlYWRpbmcgTFNCIGFuZCB1bi1mcmVlemUgb24gTVNCXG4mIzQzO1x0ICovXG4mIzQzO1x0KihkYXRhJiM0MzsmIzQzOykgJiM0Mzs9ICgodTY0KSpycHRyKSB8ICgoKHU2NCkqKHJwdHIgJiM0MzsgMSkpIFx1MDAzY1x1MDAzYyAzMik7XG4mIzQzO1xuJiM0MztcdGZvciAocnB0ciAmIzQzOz0gMjsgKHJwdHIgLSByZWdzKSBcdTAwM2MgUzI1MDBfTlVNX1NUQVRfUkVHUzsgJiM0MzsmIzQzO3JwdHIpXG4mIzQzO1x0XHQqKGRhdGEmIzQzOyYjNDM7KSAmIzQzOz0gKnJwdHI7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZShyZWdzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgczI1MDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJzY3B5KGluZm8tXHUwMDNlZHJpdmVyLCBEUlZfTkFNRSwgc2l6ZW9mKGluZm8tXHUwMDNlZHJpdmVyKSk7XG4mIzQzO1x0c3Ryc2NweShpbmZvLVx1MDAzZWJ1c19pbmZvLCBkZXZfbmFtZShcdTAwMjZuZGV2LVx1MDAzZWRldiksXG4mIzQzO1x0XHRzaXplb2YoaW5mby1cdTAwM2VidXNfaW5mbykpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgc3NldClcbiYjNDM7e1xuJiM0MztcdHN3aXRjaCAoc3NldCkge1xuJiM0MztcdGNhc2UgRVRIX1NTX1NUQVRTOlxuJiM0MztcdFx0cmV0dXJuIFMyNTAwX01BQ19TVEFUU19MRU47XG4mIzQzO1x0Y2FzZSBFVEhfU1NfVEVTVDpcbiYjNDM7XHRcdHJldHVybiBuZXRfc2VsZnRlc3RfZ2V0X2NvdW50KCk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHMyNTAwX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LFxuJiM0MztcdFx0XHQgICAgICB1OCAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChzdHJpbmdzZXQpIHtcbiYjNDM7XHRjYXNlIEVUSF9TU19TVEFUUzpcbiYjNDM7XHRcdG1lbWNweShidWYsIHMyNTAwX21hY19zdGF0X3N0cmluZ3MsXG4mIzQzO1x0XHQgICAgICAgUzI1MDBfTUFDX1NUQVRTX0xFTiAqIEVUSF9HU1RSSU5HX0xFTik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEVUSF9TU19URVNUOlxuJiM0MztcdFx0bmV0X3NlbGZ0ZXN0X2dldF9zdHJpbmdzKGJ1Zik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHMyNTAwX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdHMyNTAwX3VwZGF0ZV9zdGF0cyhwcml2KTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBTMjUwMF9OVU1fTUFDX1NUQVRTOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGRhdGFbaV0gPSBwcml2LVx1MDAzZXN0YXRzX2RhdGFbczI1MDBfbWFjX3N0YXRfbWFwW2ldXTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgczI1MDBfcm1vbl9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuJiM0MztcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSAqKnJhbmdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1x0dTggb2Zmc2V0O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRzMjUwMF91cGRhdGVfc3RhdHMocHJpdik7XG4mIzQzO1xuJiM0MztcdG1lbXNldChybW9uX3N0YXRzLCAwLCBzaXplb2YoKnJtb25fc3RhdHMpKTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZXNyYyA9IEVUSFRPT0xfTUFDX1NUQVRTX1NSQ19BR0dSRUdBVEU7XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2V1bmRlcnNpemVfcGt0cyA9IHByaXYtXHUwMDNlc3RhdHNfZGF0YVtTMjUwMF9NU1RSVU5UU0VSUl9JRFhdO1xuJiM0MztcdHJtb25fc3RhdHMtXHUwMDNlb3ZlcnNpemVfcGt0cyA9IHByaXYtXHUwMDNlc3RhdHNfZGF0YVtTMjUwMF9NU1RSWFRPT0xPTkdfSURYXTtcbiYjNDM7XHRybW9uX3N0YXRzLVx1MDAzZWZyYWdtZW50cyA9IHByaXYtXHUwMDNlc3RhdHNfZGF0YVtTMjUwMF9NU1RGQ1NFUlJTX0lEWF07XG4mIzQzO1x0cm1vbl9zdGF0cy1cdTAwM2VqYWJiZXJzID0gcHJpdi1cdTAwM2VzdGF0c19kYXRhW1MyNTAwX01TVEFMSUdORVJSU19JRFhdO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0b2Zmc2V0ID0gczI1MDBfcm1vbl9zdGF0X21hcFtpXTtcbiYjNDM7XHRcdHJtb25fc3RhdHMtXHUwMDNlaGlzdF90eFtpXSA9IHByaXYtXHUwMDNlc3RhdHNfZGF0YVtvZmZzZXRdO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgNjsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdG9mZnNldCA9IHMyNTAwX3Jtb25fc3RhdF9tYXBbaSAmIzQzOyA2XTtcbiYjNDM7XHRcdHJtb25fc3RhdHMtXHUwMDNlaGlzdFtpXSA9IHByaXYtXHUwMDNlc3RhdHNfZGF0YVtvZmZzZXRdO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0KnJhbmdlcyA9IHMyNTAwX3Jtb25faGlzdF9yYW5nZXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgczI1MDBfZ2V0X3RzX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdCAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKnRzX2luZm8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2FfdGM2X2dldF90c19pbmZvKHByaXYtXHUwMDNldGM2LCB0c19pbmZvKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzMjUwMF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBTMjUwMF9SRUdEVU1QX0xFTjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgczI1MDBfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHUzMiAqcGJ1ZmYgPSAodTMyICopcDtcbiYjNDM7XHR1MTYgcmVnLCBtbXM7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0cmVncy1cdTAwM2V2ZXJzaW9uID0gMDtcbiYjNDM7XHRtZW1zZXQocCwgMCwgUzI1MDBfUkVHRFVNUF9MRU4pO1xuJiM0MztcbiYjNDM7XHRpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFMyNTAwX05VTV9SRUdTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dmFsID0gMDtcbiYjNDM7XHRcdHJlZyA9IHMyNTAwX3JlZ19tYXBbaV0ucmVnO1xuJiM0MztcdFx0bW1zID0gczI1MDBfcmVnX21hcFtpXS5tbXM7XG4mIzQzO1x0XHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIHJlZywgbW1zLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdCpwYnVmZiYjNDM7JiM0MzsgPSBjcHVfdG9fYmUzMigoKHUzMiltbXMgXHUwMDNjXHUwMDNjIDE2KSB8IHJlZyk7XG4mIzQzO1x0XHQqcGJ1ZmYmIzQzOyYjNDM7ID0gY3B1X3RvX2JlMzIodmFsKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHMyNTAwX2dldF90c19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICp0c19zdGF0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdG9hX3RjNl9nZXRfdHNfc3RhdHMocHJpdi1cdTAwM2V0YzYsIHRzX3N0YXRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHMyNTAwX2V0aHRvb2xfb3BzID0ge1xuJiM0MztcdC5nZXRfZHJ2aW5mbyA9IHMyNTAwX2dldF9kcnZpbmZvLFxuJiM0MztcdC5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4mIzQzO1x0LmdldF9saW5rX2tzZXR0aW5ncyA9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbiYjNDM7XHQuc2V0X2xpbmtfa3NldHRpbmdzID0gcGh5X2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfdHNfc3RhdHMgPSBzMjUwMF9nZXRfdHNfc3RhdHMsXG4mIzQzO1x0LmdldF9zc2V0X2NvdW50ID0gczI1MDBfZ2V0X3NzZXRfY291bnQsXG4mIzQzO1x0LmdldF9zdHJpbmdzID0gczI1MDBfZ2V0X3N0cmluZ3MsXG4mIzQzO1x0LmdldF9ldGh0b29sX3N0YXRzID0gczI1MDBfZ2V0X2V0aHRvb2xfc3RhdHMsXG4mIzQzO1x0LmdldF9ybW9uX3N0YXRzID0gczI1MDBfcm1vbl9zdGF0cyxcbiYjNDM7XHQuZ2V0X3RzX2luZm8gPSBzMjUwMF9nZXRfdHNfaW5mbyxcbiYjNDM7XHQuZ2V0X3JlZ3NfbGVuID0gczI1MDBfZ2V0X3JlZ3NfbGVuLFxuJiM0MztcdC5nZXRfcmVncyA9IHMyNTAwX2dldF9yZWdzLFxuJiM0MztcdC5zZWxmX3Rlc3QgPSBuZXRfc2VsZnRlc3QsXG4mIzQzO307XG4mIzQzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9od19kZWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9od19kZWYuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZDljMGIzYWQzOWJjYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX2h3X2RlZi5oXG5AQCAtMCwwICYjNDM7MSwyMjMgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cbiYjNDM7LypcbiYjNDM7ICogQ29weXJpZ2h0IDIwMjYgU2VtaWNvbmR1Y3RvciBDb21wb25lbnRzIEluZHVzdHJpZXMsIExMQyAoXCYjMzQ7b25zZW1pXCYjMzQ7KS5cbiYjNDM7ICogb25zZW1pJiMzOTtzIFMyNTAwIDEwQkFTRS1UMVMgTUFDLVBIWSBkcml2ZXJcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIFMyNTAwX0hXX0RFRl9IXG4mIzQzOyNkZWZpbmUgUzI1MDBfSFdfREVGX0hcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2hydGltZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFkb21haW4uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvc3BpL3NwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L29hX3RjNi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldF90c3RhbXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aW1lLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBEUlZfTkFNRVx0XHRcdFwmIzM0O3MyNTAwXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFMyNTAwX05fTUNBU1RfRklMVEVSU1x0XHQzXG4mIzQzO1xuJiM0MzsvKiBTUEkgT0lEIGFuZCBtb2RlbCByZWdpc3RlciAqL1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19TUElfUEhZSURcdFx0MHgxXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9QSFlJRF9PVUlfU0hJRlRcdDEwXG4mIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLXHRHRU5NQVNLKDMxLCBTMjUwMF9TUElfUEhZSURfT1VJX1NISUZUKVxuJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSzBcdEdFTk1BU0soMjEsIDE2KVxuJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSzFcdEdFTk1BU0soMTUsIDgpXG4mIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMlx0R0VOTUFTSyg3LCAwKVxuJiM0MzsvKiBTUEkgY29uZmlndXJhdGlvbiByZWdpc3RlciAjMCAqL1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19TUElfQ0ZHMFx0XHQweDRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUzI1MDBfU1BJX0NGRzBfU1lOQ19CSVRcdFx0QklUKDE1KVxuJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9DRkcwX1RYQ1RIUkVTSF9TSElGVFx0MTBcbiYjNDM7I2RlZmluZSBTMjUwMF9TUElfQ0ZHMF9SWENURV9CSVRcdEJJVCg4KVxuJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9DRkcwX0ZUU1NfNjRfQklUXHRCSVQoNilcbiYjNDM7I2RlZmluZSBTMjUwMF9TUElfQ0ZHMF9DUFNfU0hJRlRcdDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUzI1MDBfVFhDVEhSRVNIXzhcdFx0MHgyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFMyNTAwX0NQU182NFx0XHRcdDB4NlxuJiM0MztcbiYjNDM7LyogU1BJIHN0YXR1cyByZWdpc3RlciAjMCAqL1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19TUElfU1QwXHRcdDB4OFxuJiM0MztcbiYjNDM7I2RlZmluZSBTMjUwMF9TUElfU1QwX0NEUEVfQklUXHRcdEJJVCgxMilcbiYjNDM7I2RlZmluZSBTMjUwMF9TUElfU1QwX1RYRkNTRV9CSVRcdEJJVCgxMSlcbiYjNDM7I2RlZmluZSBTMjUwMF9TUElfU1QwX1RUU0NBQ19CSVRcdEJJVCgxMClcbiYjNDM7I2RlZmluZSBTMjUwMF9TUElfU1QwX1RUU0NBQl9CSVRcdEJJVCg5KVxuJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFRTQ0FBX0JJVFx0QklUKDgpXG4mIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9SRVNFVENfQklUXHRCSVQoNilcbiYjNDM7I2RlZmluZSBTMjUwMF9TUElfU1QwX0hEUkVfQklUXHRcdEJJVCg1KVxuJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9TVDBfTE9GRV9CSVRcdFx0QklUKDQpXG4mIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9SWEJPRV9CSVRcdFx0QklUKDMpXG4mIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9UWEJVRV9CSVRcdFx0QklUKDIpXG4mIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9UWEJPRV9CSVRcdFx0QklUKDEpXG4mIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9UWFBFX0JJVFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOy8qIFNQSSBJUlEgZW5hYmxlIHJlZ2lzdGVyICMwICh1c2UgdGhlIFMyNTAwX1NQSV9TVDBfKl9CSVQgY29uc3RhbnRzKSAqL1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19TUElfSVJRTTBcdFx0MHhjXG4mIzQzO1xuJiM0MzsvKiBTUEkgYnVmZmVyIHN0YXR1cyByZWdpc3RlciAqL1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19TUElfQlVGU1RcdFx0MHhiXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfQ1RSTFx0XHQweDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgUzI1MDBfTUFDX0NUUkxfTUNTRl9CSVRcdFx0QklUKDE4KVxuJiM0MzsjZGVmaW5lIFMyNTAwX01BQ19DVFJMX0FEUkZfQklUXHRcdEJJVCgxNilcbiYjNDM7I2RlZmluZSBTMjUwMF9NQUNfQ1RSTF9GQ1NBX0JJVFx0XHRCSVQoOClcbiYjNDM7I2RlZmluZSBTMjUwMF9NQUNfQ1RSTF9UWEVOX0JJVFx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBTMjUwMF9NQUNfQ1RSTF9SWEVOX0JJVFx0XHRCSVQoMClcbiYjNDM7XG4mIzQzOy8qIE1BQyBhZGRyZXNzIGZpbHRlciByZWdpc3RlcnMgKi9cbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX0FERFJGSUxUTChuKVx0KDE2ICYjNDM7IDIgKiAobikpXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19BRERSRklMVEgobilcdCgxNyAmIzQzOyAyICogKG4pKVxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfQUREUk1BU0tMKG4pXHQoMzIgJiM0MzsgMiAqIChuKSlcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLSChuKVx0KDMzICYjNDM7IDIgKiAobikpXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFMyNTAwX01BQ19BRERSRklMVF9FTl9CSVRcdEJJVCgzMSlcbiYjNDM7XG4mIzQzOy8qIE1BQyBzdGF0aXN0aWMgcmVnaXN0ZXJzICovXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVE9DVEVDVFNUWExcdDQ4XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVE9DVEVDVFNUWEhcdDQ5XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYT0tcdDUwXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEJDQVNUVFhPS1x0NTFcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUTUNBU1RUWE9LXHQ1MlxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWDY0XHQ1M1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWDY1XHQ1NFxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWDEyOFx0NTVcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTVFgyNTZcdDU2XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYNTEyXHQ1N1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWDEwMjRcdDU4XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFRYVU5ERUZMT1dcdDU5XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFNJTkdMRUNPTFx0NjBcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUTVVMVElDT0xcdDYxXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEVYQ0VTU0NPTFx0NjJcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUREVGRVJSRURUWFx0NjNcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUQ1JTRVJSXHRcdDY0XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVE9DVEVDVFNSWExcdDY1XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVE9DVEVDVFNSWEhcdDY2XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1JYT0tcdDY3XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEJDQVNUUlhPS1x0NjhcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUTUNBU1RSWE9LXHQ2OVxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDY0XHQ3MFxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDY1XHQ3MVxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDEyOFx0NzJcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTUlgyNTZcdDczXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1JYNTEyXHQ3NFxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDEwMjRcdDc1XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFJVTlRTRVJSXHQ3NlxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RSWFRPT0xPTkdcdDc3XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZDU0VSUlNcdFx0NzhcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUU1lNQk9MRVJSU1x0NzlcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUQUxJR05FUlJTXHQ4MFxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RSWE9WRVJGTE9XXHQ4MVxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RSWERST1BQRURcdDgyXG4mIzQzO1xuJiM0MzsvKiBGaXJzdC9sYXN0IHN0YXRpc3RpYyByZWdpc3RlciBmb3Igc2VxdWVudGlhbCBhY2Nlc3MgKi9cbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX0ZJUlNUX1NUQVRcdFMyNTAwX1JFR19NQUNfU1RPQ1RFQ1RTVFhMXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19MQVNUX1NUQVRcdFx0UzI1MDBfUkVHX01BQ19TVFJYRFJPUFBFRFxuJiM0MztcbiYjNDM7I2RlZmluZSBTMjUwMF9OVU1fU1RBVF9SRUdTIFxcXG4mIzQzO1x0KFMyNTAwX1JFR19NQUNfTEFTVF9TVEFUIC0gUzI1MDBfUkVHX01BQ19GSVJTVF9TVEFUICYjNDM7IDEpXG4mIzQzOyNkZWZpbmUgUzI1MDBfTlVNX1NUQVRfVkFSU1x0XHQoUzI1MDBfTlVNX1NUQVRfUkVHUyAtIDIpXG4mIzQzO1xuJiM0MzsvKiBWZW5kb3Igc3BlY2lmaWMgTU1TNCByZWdpc3RlcnMgKi9cbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfT05JUFZFUlx0XHQweDgwMDBcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfVFdFQUtTMVx0XHQweDgwMDFcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfUExDQUVYVFx0XHQweDgwMDJcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfUE1BVFVORTBcdFx0MHg4MDAzXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1BNQVRVTkUxXHRcdDB4ODAwNFxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19UMVNXVVBUVU5FXHRcdDB4ODAwN1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19IRERcdFx0MHhDQzAxXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0RDUV9UT0lEXHRcdDB4Q0MwMlxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19EQ1FfU1FJXHRcdDB4Q0MwM1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19EQ1FfU1FJX1BMVVNcdDB4Q0MwNFxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19IRERfVFVORTFcdFx0MHhDRDAwXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMlx0XHQweENEMDFcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfSEREX1RVTkUzXHRcdDB4Q0QwMlxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19XU19TVEFUVVNfMFx0MHhEMDAwXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMFx0XHQweEQwMDFcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfV1NfU1RBVFVTXzFcdDB4RDEwMFxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19XU19DVFJMXzFcdFx0MHhEMTAxXG4mIzQzO1xuJiM0MzsvKiBWZW5kb3Igc3BlY2lmaWMgTU1TMTIgcmVnaXN0ZXJzICovXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX01JSU1JUlFFXHRcdDB4MTBcbiYjNDM7XG4mIzQzOy8qIE1JSU0gSVJRIHN0YXR1cyByZWdpc3RlciAqL1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19NSUlNSVJRU1x0XHQweDExXG4mIzQzOyNkZWZpbmUgTUlJTV9JUlFfU1RBVFVTX1JTVFNfU0hJRlRcdDE1XG4mIzQzOyNkZWZpbmUgTUlJTV9JUlFfU1RBVFVTX1JTVFNcdFx0QklUKE1JSU1fSVJRX1NUQVRVU19SU1RTX1NISUZUKVxuJiM0MztcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfRElPQ0ZHMFx0XHQweDEyXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19DSElQSURcdFx0MHgxMDAwXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1RXRUFLUzJcdFx0MHgxMDAxXG4mIzQzO1xuJiM0MzsvKiBQZXJtYW5lbnQgTUFDIGFkZHJlc3MgcmVnaXN0ZXIgKi9cbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfTUFDSUQwXHRcdDB4MTAwMlxuJiM0MzsjZGVmaW5lIFMyNTAwX1ZTX01BQ0lEMF9CWVRFNF9NQVNLXHRHRU5NQVNLKDE1LCA4KVxuJiM0MzsjZGVmaW5lIFMyNTAwX1ZTX01BQ0lEMF9CWVRFNV9NQVNLXHRHRU5NQVNLKDcsIDApXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19NQUNJRDFcdFx0MHgxMDAzXG4mIzQzOyNkZWZpbmUgUzI1MDBfVlNfTUFDSUQxX0JZVEUzX01BU0tcdEdFTk1BU0soNywgMClcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfTlZNX0hFQUxUSFx0XHQweDEwMDVcbiYjNDM7XG4mIzQzOy8qIFBUUCByZWdpc3RlcnMgKi9cbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfUFRQX1NFQ1x0XHQweDEwMTBcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfUFRQX1NFVFNFQ1x0XHQweDEwMTJcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfUFRQX0FESlx0XHQweDEwMTRcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfUFRQTlNFQ1x0XHQweDEwMTFcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfU0VUTlNFQ1x0XHQweDEwMTNcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfQ01QQ1RMXHRcdDB4MTAxNVxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19DTVBTRUNcdFx0MHgxMDE2XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NNUE5TRUNcdFx0MHgxMDE3XG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NNUFBFUlx0XHQweDEwMThcbiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfQ0FQQ1RMXHRcdDB4MTAxOVxuJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19DQVBTRUNcdFx0MHgxMDFBXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NBUE5TRUNcdFx0MHgxMDFCXG4mIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0JDTkNOVFx0XHQweDEwMUNcbiYjNDM7XG4mIzQzOy8qIHByb3RvdHlwZXMgLyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqL1xuJiM0MztleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHMyNTAwX2V0aHRvb2xfb3BzO1xuJiM0MztcbiYjNDM7c3RydWN0IHMyNTAwX2luZm8ge1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiYjNDM7XG4mIzQzO1x0LyogVG8gaGF2ZSBhdG9taWMgc2V0X3J4X21vZGUgb3BlcmF0aW9uICovXG4mIzQzO1x0c3BpbmxvY2tfdCBsb2NrO1xuJiM0MztcbiYjNDM7XHQvKiBUbyBoYXZlIGF0b21pYyBvcGVyYXRpb24gd2hlbiB0aW1lIGlzIGFkanVzdGVkICovXG4mIzQzO1x0c3RydWN0IG11dGV4IHB0cF9hZGpfbG9jaztcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDtcbiYjNDM7XG4mIzQzO1x0LyogZ2xvYmFsIHN0YXRlIHZhcmlhYmxlcyAqL1xuJiM0MztcdGJvb2wgZXZlbnRfcGVuZGluZztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgbmRldl9mbGFncztcbiYjNDM7XHRib29sIHJ4X2ZsYWdzX3VwZDtcbiYjNDM7XG4mIzQzO1x0c2lnbmVkIGxvbmcgcG9sbF9qaWZmO1xuJiM0MztcbiYjNDM7XHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpO1xuJiM0MztcbiYjNDM7XHQvKiBzdGF0aXN0aWMgY291bnRlcnMgdmFyaWFibGVzICovXG4mIzQzO1x0dTY0IHN0YXRzX2RhdGFbUzI1MDBfTlVNX1NUQVRfVkFSU107XG4mIzQzO1xuJiM0MztcdC8qIFBUUCByZWxhdGVkIHZhcmlhYmxlcyAqL1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfY2xvY2tfaW5mbztcbiYjNDM7XHR2b2lkICp0YzY7XG4mIzQzO307XG4mIzQzO1xuJiM0MztpbnQgczI1MDBfcHRwX3JlZ2lzdGVyKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBTMjUwMF9IV19ERUZfSCAqL1xuJiM0MztcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX21haW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZDgxYjQ0ZjhjNzZjMlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX21haW4uY1xuQEAgLTAsMCAmIzQzOzEsNjQ5IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAyMDI2IFNlbWljb25kdWN0b3IgQ29tcG9uZW50cyBJbmR1c3RyaWVzLCBMTEMgKFwmIzM0O29uc2VtaVwmIzM0OykuXG4mIzQzOyAqIG9uc2VtaSYjMzk7cyBTMjUwMCAxMEJBU0UtVDFTIE1BQy1QSFkgZHJpdmVyXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycWNoaXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRyZXYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9waHkuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7czI1MDBfaHdfZGVmLmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIFMyNTAwIGZ1bmN0aW9ucyBcdTAwMjYgZGVmaW5pdGlvbnMgKi9cbiYjNDM7XG4mIzQzOyNkZWZpbmUgUzI1MDBfU1RBVFVTMF9NQVNLXHQoUzI1MDBfU1BJX1NUMF9DRFBFX0JJVCB8IFxcXG4mIzQzO1x0XHRcdFx0UzI1MDBfU1BJX1NUMF9UWEZDU0VfQklUIHwgXFxcbiYjNDM7XHRcdFx0XHRTMjUwMF9TUElfU1QwX1RUU0NBQ19CSVQgfCBcXFxuJiM0MztcdFx0XHRcdFMyNTAwX1NQSV9TVDBfVFRTQ0FCX0JJVCB8IFxcXG4mIzQzO1x0XHRcdFx0UzI1MDBfU1BJX1NUMF9UVFNDQUFfQklUIHwgXFxcbiYjNDM7XHRcdFx0XHRTMjUwMF9TUElfU1QwX1JFU0VUQ19CSVQgfCBcXFxuJiM0MztcdFx0XHRcdFMyNTAwX1NQSV9TVDBfSERSRV9CSVQgfCBcXFxuJiM0MztcdFx0XHRcdFMyNTAwX1NQSV9TVDBfTE9GRV9CSVQgfCBcXFxuJiM0MztcdFx0XHRcdFMyNTAwX1NQSV9TVDBfUlhCT0VfQklUIHwgXFxcbiYjNDM7XHRcdFx0XHRTMjUwMF9TUElfU1QwX1RYQlVFX0JJVCB8IFxcXG4mIzQzO1x0XHRcdFx0UzI1MDBfU1BJX1NUMF9UWEJPRV9CSVQgfCBcXFxuJiM0MztcdFx0XHRcdFMyNTAwX1NQSV9TVDBfVFhQRV9CSVQpXG4mIzQzO1xuJiM0MzsvKiBJbml0aWFsaXplcyB0aGUgbmV0IGRldmljZSBNQUMgYWRkcmVzcyBieSByZWFkaW5nIHRoZSBVSUQgc3RvcmVkXG4mIzQzOyAqIGludG8gdGhlIGRldmljZSBpbnRlcm5hbCBub24tdm9sYXRpbGUgbWVtb3J5LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBzMjUwMF9yZWFkX21hY19mcm9tX252bWVtKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG1tcyA9IE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyO1xuJiM0MztcdHU4IGFkZHJbRVRIX0FMRU5dO1xuJiM0MztcdHUzMiBtYWMxID0gMDtcbiYjNDM7XHR1MzIgbWFjMCA9IDA7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIFMyNTAwX1JFR19WU19NQUNJRDEsXG4mIzQzO1x0XHRcdFx0ICAgICAgIG1tcywgXHUwMDI2bWFjMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgUzI1MDBfUkVHX1ZTX01BQ0lEMCxcbiYjNDM7XHRcdFx0XHQgICAgICAgbW1zLCBcdTAwMjZtYWMwKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0LyogUHJlLXByb2R1Y3Rpb24gcGFydHMgbWF5IGhhdmUgMCAqL1xuJiM0MztcdGlmIChtYWMwID09IDAgXHUwMDI2XHUwMDI2IG1hYzEgPT0gMClcbiYjNDM7XHRcdHJldHVybiAtRU5YSU87XG4mIzQzO1xuJiM0MztcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfU1BJX1BIWUlELFxuJiM0MztcdFx0XHRcdCAgIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHZhbCA9ICh2YWwgXHUwMDI2IFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSykgXHUwMDNlXHUwMDNlXG4mIzQzO1x0ICAgICAgIFMyNTAwX1NQSV9QSFlJRF9PVUlfU0hJRlQ7XG4mIzQzO1xuJiM0MztcdC8qIE1hcHBpbmcgZm9yIGJpdHMgZnJvbSBQSFkgSUQgcmVnaXN0ZXIgdG8gT1VJIGFzIGdpdmUgYmVsb3cuXG4mIzQzO1x0ICogLSBQSFktSURbMTA6MTddIHByb3ZpZGVzIE9VSVsxNjoyM11cbiYjNDM7XHQgKiAtIFBIWS1JRFsxODoyNV0gcHJvdmlkZXMgT1VJWzg6MTVdXG4mIzQzO1x0ICogLSBQSFktSURbMjY6MzFdIHByb3ZpZGVzIE9VSVsyOjddXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBIYXJkd2FyZSBwcmVzZW50cyBPVUkgc3VjaCBhIHdheSB0aGF0IHRoaXMgcmVxdWlyZXMgbm90IGp1c3RcbiYjNDM7XHQgKiBieXRlIGxldmVsIHN3YXAsIGJpdCBsZXZlbCBzd2FwIGlzIG5lZWRlZCBhcyB3ZWxsLlxuJiM0MztcdCAqL1xuJiM0MztcdGFkZHJbMF0gPSBiaXRyZXY4KEZJRUxEX0dFVChTMjUwMF9TUElfUEhZSURfT1VJX01BU0swLCB2YWwpKTtcbiYjNDM7XHRhZGRyWzFdID0gYml0cmV2OChGSUVMRF9HRVQoUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMSwgdmFsKSk7XG4mIzQzO1x0YWRkclsyXSA9IGJpdHJldjgoRklFTERfR0VUKFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSzIsIHZhbCkpO1xuJiM0MztcbiYjNDM7XHRhZGRyWzNdID0gRklFTERfR0VUKFMyNTAwX1ZTX01BQ0lEMV9CWVRFM19NQVNLLCBtYWMxKTtcbiYjNDM7XHRhZGRyWzRdID0gRklFTERfR0VUKFMyNTAwX1ZTX01BQ0lEMF9CWVRFNF9NQVNLLCBtYWMwKTtcbiYjNDM7XHRhZGRyWzVdID0gRklFTERfR0VUKFMyNTAwX1ZTX01BQ0lEMF9CWVRFNV9NQVNLLCBtYWMwKTtcbiYjNDM7XG4mIzQzO1x0X19kZXZfYWRkcl9zZXQocHJpdi1cdTAwM2VuZGV2LCBhZGRyLCBFVEhfQUxFTik7XG4mIzQzO1x0cHJpdi1cdTAwM2VuZGV2LVx1MDAzZWFkZHJfYXNzaWduX3R5cGUgPSBORVRfQUREUl9QRVJNO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFdyaXRlcyBNQUMgYWRkcmVzcyB0byBtYWNwaHkgcmVnaXN0ZXJzICovXG4mIzQzO3N0YXRpYyBpbnQgczI1MDBfc2V0X21hY19maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGNvbnN0IHU4ICptYWMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHUxNiBtbXMgPSBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMTtcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIFNldCB1bmljYXN0IGFkZHJlc3MgZmlsdGVyICovXG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbiYjNDM7XHRcdFx0XHRcdFMyNTAwX1JFR19NQUNfQUREUk1BU0tMKDApLFxuJiM0MztcdFx0XHRcdFx0bW1zLCAweGZmZmZmZmZmKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbiYjNDM7XHRcdFx0XHRcdFMyNTAwX1JFR19NQUNfQUREUk1BU0tIKDApLFxuJiM0MztcdFx0XHRcdFx0bW1zLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSBnZXRfdW5hbGlnbmVkX2JlMzIoXHUwMDI2bWFjWzJdKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbiYjNDM7XHRcdFx0XHRcdFMyNTAwX1JFR19NQUNfQUREUkZJTFRMKDApLFxuJiM0MztcdFx0XHRcdFx0bW1zLCB2YWwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2YWwgPSBTMjUwMF9NQUNfQUREUkZJTFRfRU5fQklUIHwgZ2V0X3VuYWxpZ25lZF9iZTE2KG1hYyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LFxuJiM0MztcdFx0XHRcdFx0IFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKDApLFxuJiM0MztcdFx0XHRcdFx0IG1tcywgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgaW5fYml0cywgYm9vbCBjbHIpXG4mIzQzO3tcbiYjNDM7XHR1MTYgbW1zID0gT0FfVEM2X1BIWV9DNDVfTUFDX01NUzE7XG4mIzQzO1x0dTMyIHJlZyA9IFMyNTAwX1JFR19NQUNfQ1RSTDtcbiYjNDM7XHR1MzIgcnZhbCA9IDA7XG4mIzQzO1x0dTMyIHd2YWwgPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgcmVnLCBtbXMsIFx1MDAyNnJ2YWwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY2xyKVxuJiM0MztcdFx0d3ZhbCA9IHJ2YWwgXHUwMDI2IH5pbl9iaXRzO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHd2YWwgPSBydmFsIHwgaW5fYml0cztcbiYjNDM7XHRpZiAocnZhbCAhPSB3dmFsKVxuJiM0MztcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgcmVnLFxuJiM0MztcdFx0XHRcdFx0XHRtbXMsIHd2YWwpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgczI1MDBfaW5pdChzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogQ29uZmlndXJlIE1BQy1QSFkmIzM5O3MgYmVoYXZpb3IgKi9cbiYjNDM7XHR2YWwgPSBTMjUwMF9TUElfQ0ZHMF9TWU5DX0JJVCB8IFMyNTAwX1NQSV9DRkcwX1JYQ1RFX0JJVCB8XG4mIzQzO1x0ICAgICAgKFMyNTAwX1RYQ1RIUkVTSF84IFx1MDAzY1x1MDAzYyBTMjUwMF9TUElfQ0ZHMF9UWENUSFJFU0hfU0hJRlQpIHxcbiYjNDM7XHQgICAgICAoUzI1MDBfQ1BTXzY0IFx1MDAzY1x1MDAzYyBTMjUwMF9TUElfQ0ZHMF9DUFNfU0hJRlQpIHxcbiYjNDM7XHQgICAgICBTMjUwMF9TUElfQ0ZHMF9GVFNTXzY0X0JJVDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfU1BJX0NGRzAsIHZhbCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHZhbCA9ICh1MzIpfihTMjUwMF9TUElfU1QwX1JFU0VUQ19CSVQgfFxuJiM0MztcdFx0ICAgICBTMjUwMF9TUElfU1QwX0hEUkVfQklUIHwgUzI1MDBfU1BJX1NUMF9MT0ZFX0JJVCB8XG4mIzQzO1x0XHQgICAgIFMyNTAwX1NQSV9TVDBfUlhCT0VfQklUIHwgUzI1MDBfU1BJX1NUMF9UWEJPRV9CSVQgfFxuJiM0MztcdFx0ICAgICBTMjUwMF9TUElfU1QwX1RYUEVfQklUKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfU1BJX0lSUU0wLCB2YWwpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHQvKiBQcm9ncmFtIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW50byB0aGUgZGV2aWNlICovXG4mIzQzO1x0cmV0ID0gczI1MDBfc2V0X21hY19maWx0ZXIocHJpdi1cdTAwM2VuZGV2LCBwcml2LVx1MDAzZW5kZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcbiYjNDM7XHR2YWwgPSBTMjUwMF9NQUNfQ1RSTF9BRFJGX0JJVCB8IFMyNTAwX01BQ19DVFJMX0ZDU0FfQklUO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gczI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdiwgdmFsLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHMyNTAwX3NodXRkb3duKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHZhbCA9IFMyNTAwX01BQ19DVFJMX1RYRU5fQklUIHwgUzI1MDBfTUFDX0NUUkxfUlhFTl9CSVQ7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwcml2LVx1MDAzZW5kZXY7XG4mIzQzO1xuJiM0MztcdG5ldGlmX3N0b3BfcXVldWUobmRldik7XG4mIzQzO1x0cGh5X3N0b3AobmRldi1cdTAwM2VwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhwcml2LCB2YWwsIHRydWUpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX3NldF9wcm9taXNjdW91c19tb2RlKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2LFxuJiM0MztcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCByeF9mbGFncylcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWwgPSBTMjUwMF9NQUNfQ1RSTF9BRFJGX0JJVDtcbiYjNDM7XHRib29sIGNsciA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAocnhfZmxhZ3MgXHUwMDI2IElGRl9QUk9NSVNDKVxuJiM0MztcdFx0Y2xyID0gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gczI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdiwgdmFsLCBjbHIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZShzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IHJ4X2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IG1tcyA9IE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxO1xuJiM0MztcdGludCBpLCByZXQgPSAwO1xuJiM0MztcdHUxNiBhZGRyO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1xuJiM0MztcdGlmICgocnhfZmxhZ3MgXHUwMDI2IElGRl9BTExNVUxUSSkgfHxcbiYjNDM7XHQgICAgKG5ldGRldl9tY19jb3VudChwcml2LVx1MDAzZW5kZXYpIFx1MDAzZSBTMjUwMF9OX01DQVNUX0ZJTFRFUlMpKSB7XG4mIzQzO1x0XHQvKiBEaXNhYmxlIG11bHRpY2FzdCBmaWx0ZXIgKi9cbiYjNDM7XHRcdHJldCA9IHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsXG4mIzQzO1x0XHRcdFx0XHRcdCBTMjUwMF9NQUNfQ1RSTF9NQ1NGX0JJVCxcbiYjNDM7XHRcdFx0XHRcdFx0IHRydWUpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBBY2NlcHQgYWxsIG11bHRpY2FzdHMgKi9cbiYjNDM7XHRcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLTCgxKTtcbiYjNDM7XHRcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIGFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdG1tcywgMCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLSCgxKTtcbiYjNDM7XHRcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIGFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdG1tcywgMHgxMDApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEwoMSk7XG4mIzQzO1x0XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBhZGRyLFxuJiM0MztcdFx0XHRcdFx0XHRtbXMsIDApO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHR2YWwgPSBTMjUwMF9NQUNfQUREUkZJTFRfRU5fQklUIHwgMHgwMDAwMDEwMDtcbiYjNDM7XHRcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJGSUxUSCgxKTtcbiYjNDM7XHRcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIGFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdG1tcywgdmFsKTtcbiYjNDM7XHR9IGVsc2UgaWYgKG5ldGRldl9tY19jb3VudChwcml2LVx1MDAzZW5kZXYpID09IDApIHtcbiYjNDM7XHRcdC8qIEVuYWJsZSBtdWx0aWNhc3QgZmlsdGVyICovXG4mIzQzO1x0XHRyZXQgPSBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhwcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgUzI1MDBfTUFDX0NUUkxfTUNTRl9CSVQsXG4mIzQzO1x0XHRcdFx0XHRcdCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIERpc2FibGUgZmlsdGVycyAqL1xuJiM0MztcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2M9IFMyNTAwX05fTUNBU1RfRklMVEVSUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0YWRkciA9IFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKGkpO1xuJiM0MztcdFx0XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LFxuJiM0MztcdFx0XHRcdFx0XHRcdGFkZHIsIG1tcywgMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0c3RydWN0IG5ldGRldl9od19hZGRyICpoYTtcbiYjNDM7XHRcdHUzMiBhZGRyaCwgYWRkcmw7XG4mIzQzO1xuJiM0MztcdFx0LyogRGlzYWJsZSBtdWx0aWNhc3QgZmlsdGVyICovXG4mIzQzO1x0XHRyZXQgPSBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhwcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgUzI1MDBfTUFDX0NUUkxfTUNTRl9CSVQsXG4mIzQzO1x0XHRcdFx0XHRcdCB0cnVlKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0LyogRGlzYWJsZSBmaWx0ZXJzICovXG4mIzQzO1x0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gUzI1MDBfTl9NQ0FTVF9GSUxURVJTOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEgoaSk7XG4mIzQzO1x0XHRcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0YWRkciwgbW1zLCAwKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGkgPSAxO1xuJiM0MztcdFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIHByaXYtXHUwMDNlbmRldikge1xuJiM0MztcdFx0XHRpZiAoaSBcdTAwM2UgUzI1MDBfTl9NQ0FTVF9GSUxURVJTKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRcdFx0YWRkcmggPSBTMjUwMF9NQUNfQUREUkZJTFRfRU5fQklUIHxcbiYjNDM7XHRcdFx0XHQgZ2V0X3VuYWxpZ25lZF9iZTE2KGhhLVx1MDAzZWFkZHIpO1xuJiM0MztcdFx0XHRhZGRybCA9IGdldF91bmFsaWduZWRfYmUzMihcdTAwMjZoYS1cdTAwM2VhZGRyWzJdKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJGSUxUSChpKTtcbiYjNDM7XHRcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbiYjNDM7XHRcdFx0XHRcdFx0XHRhZGRyLCBtbXMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0YWRkcmgpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0XHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEwoaSk7XG4mIzQzO1x0XHRcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0YWRkciwgbW1zLFxuJiM0MztcdFx0XHRcdFx0XHRcdGFkZHJsKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdFx0YWRkciA9IFMyNTAwX1JFR19NQUNfQUREUk1BU0tMKGkpO1xuJiM0MztcdFx0XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LFxuJiM0MztcdFx0XHRcdFx0XHRcdGFkZHIsIG1tcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQweGZmZmZmZmZmKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdFx0YWRkciA9IFMyNTAwX1JFR19NQUNfQUREUk1BU0tIKGkpO1xuJiM0MztcdFx0XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LFxuJiM0MztcdFx0XHRcdFx0XHRcdGFkZHIsIG1tcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQweGZmZmYpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdGkmIzQzOyYjNDM7O1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEZWZlcnJlZCBmdW5jdGlvbiBmb3IgYXBwbHlpbmcgUlggbW9kZSBmbGFncyBpbiBub24tYXRvbWljIGNvbnRleHQgKi9cbiYjNDM7c3RhdGljIGludCBzMjUwMF9yeF9tb2RlX3VwZGF0ZShzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCByeF9mbGFncztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyeF9mbGFncyA9IHByaXYtXHUwMDNlbmRldl9mbGFncztcbiYjNDM7XHRwcml2LVx1MDAzZXJ4X2ZsYWdzX3VwZCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzMjUwMF9zZXRfcHJvbWlzY3VvdXNfbW9kZShwcml2LCByeF9mbGFncyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBzMjUwMF9zZXRfbXVsdGljYXN0X21vZGUocHJpdiwgcnhfZmxhZ3MpO1xuJiM0MztvdXQ6XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgczI1MDBfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnByaXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXJ4X2ZsYWdzX3VwZCA9IHRydWU7XG4mIzQzO1x0cHJpdi1cdTAwM2VuZGV2X2ZsYWdzID0gbmRldi1cdTAwM2VmbGFncztcbiYjNDM7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNldGhyZWFkKVxuJiM0MztcdFx0d2FrZV91cF9wcm9jZXNzKHByaXYtXHUwMDNldGhyZWFkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzMjUwMF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xuJiM0MztcbiYjNDM7XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cdTAwM2VzYV9kYXRhKSlcbiYjNDM7XHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiYjNDM7XG4mIzQzO1x0ZXRoX2h3X2FkZHJfc2V0KG5kZXYsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4mIzQzO1x0cmV0dXJuIHMyNTAwX3NldF9tYWNfZmlsdGVyKG5kZXYsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBuZXRkZXZfdHhfdCBzMjUwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9hX3RjNl9zdGFydF94bWl0KHByaXYtXHUwMDNldGM2LCBza2IpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLFxuJiM0MztcdFx0ICAgICAgIGludCBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gb2FfdGM2X2lvY3RsKHByaXYtXHUwMDNldGM2LCBycSwgY21kKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgczI1MDBfcHJvY2Vzc19ldmVudHMoc3RydWN0IHMyNTAwX2luZm8gKnByaXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2VldmVudF9wZW5kaW5nKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZWV2ZW50X3BlbmRpbmcgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi1cdTAwM2V0YzYsIFMyNTAwX1JFR19TUElfU1QwLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcJiMzNDtFcnJvciByZWFkaW5nIFNUMCByZWdpc3RlclwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX3RocmVhZF9mdW4odm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gZGF0YTtcbiYjNDM7XHRib29sIHVwZGF0ZV9yeF9tb2RlID0gZmFsc2U7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRzaWduZWQgbG9uZyB0b3V0O1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHR0b3V0ID0gcHJpdi1cdTAwM2Vwb2xsX2ppZmY7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdGlmICh1cGRhdGVfcnhfbW9kZSkge1xuJiM0MztcdFx0XHRyZXQgPSBzMjUwMF9yeF9tb2RlX3VwZGF0ZShwcml2KTtcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbiYjNDM7XHRcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlc3BpLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byBzZXQgbmV3IFJYIG1vZGVcJiMzNDspO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRvdXQgPT0gMCkge1xuJiM0MztcdFx0XHR0b3V0ID0gcHJpdi1cdTAwM2Vwb2xsX2ppZmY7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBGb3JjZSBjaGVja2luZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovXG4mIzQzO1x0XHRcdHByaXYtXHUwMDNlZXZlbnRfcGVuZGluZyA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0czI1MDBfcHJvY2Vzc19ldmVudHMocHJpdik7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4mIzQzO1xuJiM0MztcdFx0dXBkYXRlX3J4X21vZGUgPSBwcml2LVx1MDAzZXJ4X2ZsYWdzX3VwZDtcbiYjNDM7XHRcdHJldCA9IHVwZGF0ZV9yeF9tb2RlO1xuJiM0MztcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFyZXQpXG4mIzQzO1x0XHRcdHRvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRvdXQpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuJiM0MztcdH0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1xuJiM0MztcdGRldl9kYmcoXHUwMDI2bmRldi1cdTAwM2VkZXYsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtzMjUwMF9vcGVuXCYjMzQ7KTtcbiYjNDM7XHRwaHlfc3RhcnQocHJpdi1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4oczI1MDBfdGhyZWFkX2Z1biwgcHJpdixcbiYjNDM7XHRcdFx0XHQgICBEUlZfTkFNRSBcJiMzNDsvJXM6JWRcJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgZGV2X25hbWUoXHUwMDI2cHJpdi1cdTAwM2VzcGktXHUwMDNlZGV2KSxcbiYjNDM7XHRcdFx0XHQgICBzcGlfZ2V0X2NoaXBzZWxlY3QocHJpdi1cdTAwM2VzcGksIDApKTtcbiYjNDM7XG4mIzQzO1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXRocmVhZCkpIHtcbiYjNDM7XHRcdHJldCA9IFBUUl9FUlIocHJpdi1cdTAwM2V0aHJlYWQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR2YWwgPSBTMjUwMF9NQUNfQ1RSTF9UWEVOX0JJVCB8IFMyNTAwX01BQ19DVFJMX1JYRU5fQklUO1xuJiM0MztcdFx0cmV0ID0gczI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdiwgdmFsLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0bmV0aWZfc3RhcnRfcXVldWUocHJpdi1cdTAwM2VuZGV2KTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBzMjUwMF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0ZGV2X2RiZyhcdTAwMjZuZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXNcJiMzNDssIFwmIzM0O3MyNTAwX3N0b3BcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRzMjUwMF9zaHV0ZG93bihwcml2KTtcbiYjNDM7XG4mIzQzO1x0a3RocmVhZF9zdG9wKHByaXYtXHUwMDNldGhyZWFkKTtcbiYjNDM7XHRwcml2LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX2h3dHN0YW1wX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmtfY2ZnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0b2FfdGM2X2h3dHN0YW1wX2dldChwcml2LVx1MDAzZXRjNiwga19jZmcpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyxcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9hX3RjNl9od3RzdGFtcF9zZXQocHJpdi1cdTAwM2V0YzYsIGNmZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgczI1MDBfbmV0ZGV2X29wcyA9IHtcbiYjNDM7XHQubmRvX29wZW4gICAgICAgICAgICA9IHMyNTAwX29wZW4sXG4mIzQzO1x0Lm5kb19zdG9wICAgICAgICAgICAgPSBzMjUwMF9zdG9wLFxuJiM0MztcdC5uZG9fc3RhcnRfeG1pdCAgICAgID0gczI1MDBfc3RhcnRfeG1pdCxcbiYjNDM7XHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IHMyNTAwX3NldF9tYWNfYWRkcmVzcyxcbiYjNDM7XHQubmRvX3NldF9yeF9tb2RlICAgICA9IHMyNTAwX3NldF9yeF9tb2RlLFxuJiM0MztcdC5uZG9fZXRoX2lvY3RsICAgICAgID0gczI1MDBfaW9jdGwsXG4mIzQzO1x0Lm5kb19od3RzdGFtcF9nZXQgICAgPSBzMjUwMF9od3RzdGFtcF9nZXQsXG4mIzQzO1x0Lm5kb19od3RzdGFtcF9zZXQgICAgPSBzMjUwMF9od3RzdGFtcF9zZXQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzcGktXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuJiM0MztcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2O1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNwaS1cdTAwM2VpcnEgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0bmRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoZGV2LCBzaXplb2Yoc3RydWN0IHMyNTAwX2luZm8pKTtcbiYjNDM7XHRpZiAoIW5kZXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuJiM0MztcdHByaXYtXHUwMDNlbmRldiA9IG5kZXY7XG4mIzQzO1x0cHJpdi1cdTAwM2VzcGkgPSBzcGk7XG4mIzQzO1x0cHJpdi1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1xuJiM0MztcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldik7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9ja19pbml0KFx1MDAyNnByaXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXB0cF9hZGpfbG9jayk7XG4mIzQzO1x0bmRldi1cdTAwM2VpcnEgPSBzcGktXHUwMDNlaXJxO1xuJiM0MztcbiYjNDM7XHRzcGktXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBwcml2O1xuJiM0MztcdHNwaV9zZXRfZHJ2ZGF0YShzcGksIHByaXYpO1xuJiM0MztcbiYjNDM7XHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZzMjUwMF9uZXRkZXZfb3BzO1xuJiM0MztcdG5kZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZzMjUwMF9ldGh0b29sX29wcztcbiYjNDM7XHRuZGV2LVx1MDAzZWlmX3BvcnQgPSBJRl9QT1JUXzEwQkFTRVQ7XG4mIzQzO1x0bmRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDtcbiYjNDM7XHRuZGV2LVx1MDAzZWh3X2ZlYXR1cmVzID0gTkVUSUZfRl9SWEFMTDtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vwb2xsX2ppZmYgPSBIWiAqIDU7IC8qIFBvbGwgaW50ZXJ2YWwgKi9cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V0YzYgPSBvYV90YzZfaW5pdChzcGksIG5kZXYpO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2V0YzYpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2c3BpLVx1MDAzZWRldiwgXCYjMzQ7T0EgVEM2IGluaXQgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcdH1cbiYjNDM7XHRvYV90YzZfc2V0X3ZlbmQxX21tcyhwcml2LVx1MDAzZXRjNiwgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIpO1xuJiM0MztcbiYjNDM7XHQvKiBDbGVhciBSU1RTLCBpZiBzZXQgKi9cbiYjNDM7XHRvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIFMyNTAwX1JFR19WU19NSUlNSVJRUyxcbiYjNDM7XHRcdFx0XHQgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIsIFx1MDAyNnZhbCk7XG4mIzQzO1x0dmFsIFx1MDAyNj0gTUlJTV9JUlFfU1RBVFVTX1JTVFM7XG4mIzQzO1x0aWYgKHZhbCAhPSAwKVxuJiM0MztcdFx0b2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbiYjNDM7XHRcdFx0XHRcdCAgUzI1MDBfUkVHX1ZTX01JSU1JUlFTLFxuJiM0MztcdFx0XHRcdFx0ICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMixcbiYjNDM7XHRcdFx0XHRcdCAgTUlJTV9JUlFfU1RBVFVTX1JTVFMpO1xuJiM0MztcbiYjNDM7XHQvKiBBY2tub3dsZWRnZSBhbGwgSVJRIHN0YXR1cyBiaXRzICovXG4mIzQzO1x0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi1cdTAwM2V0YzYsIFMyNTAwX1JFR19TUElfU1QwLCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmICghcmV0KSB7XG4mIzQzO1x0XHR1MzIgbWFzayA9IFMyNTAwX1NUQVRVUzBfTUFTSztcbiYjNDM7XG4mIzQzO1x0XHR2YWwgXHUwMDI2PSBtYXNrO1xuJiM0MztcdFx0b2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfU1BJX1NUMCwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldmljZV9nZXRfZXRoZGV2X2FkZHJlc3MocHJpdi1cdTAwM2VkZXYsIG5kZXYpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXQgPSBzMjUwMF9yZWFkX21hY19mcm9tX252bWVtKHByaXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRldGhfaHdfYWRkcl9yYW5kb20obmRldik7XG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZzcGktXHUwMDNlZGV2LCBcJiMzNDtVc2luZyByYW5kb20gTUFDIGFkZHJlc3MgJXBNXCYjMzQ7LFxuJiM0MztcdFx0XHQgbmRldi1cdTAwM2VkZXZfYWRkcik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBzMjUwMF9pbml0KHByaXYpO1xuJiM0MztcdGlmICh1bmxpa2VseShyZXQpKSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnNwaS1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBzMjUwMF9pbml0IHRoZSBkZXZpY2VcJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnJfcmVnX3JlYWQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBDb25maWd1cmUgUFRQIGlmIHRoZSBtb2RlbCBzdXBwb3J0cyBpdCAqL1xuJiM0MztcdHJldCA9IHMyNTAwX3B0cF9yZWdpc3Rlcihwcml2KTtcbiYjNDM7XHRpZiAodW5saWtlbHkocmV0KSlcbiYjNDM7XHRcdGdvdG8gZXJyX3JlZ19yZWFkO1xuJiM0MztcbiYjNDM7XHRyZXQgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZzcGktXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVnaXN0ZXIgbmV0ZGV2XFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdFx0Z290byBlcnJfcmVnX3JlYWQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3JlZ19yZWFkOlxuJiM0MztcdGRldl9lcnIoXHUwMDI2c3BpLVx1MDAzZWRldiwgXCYjMzQ7Y291bGQgbm90IGluaXRpYWxpemUgbWFjcGh5XCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBzMjUwMF9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gc3BpLVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuJiM0MztcbiYjNDM7XHRkZXZfZGJnKFx1MDAyNnByaXYtXHUwMDNlbmRldi1cdTAwM2VkZXYsIFwmIzM0OyVzXCYjMzQ7LCBcJiMzNDtzMjUwMF9yZW1vdmVcJiMzNDspO1xuJiM0MztcbiYjNDM7XHRvYV90YzZfcHRwX3VucmVnaXN0ZXIocHJpdi1cdTAwM2V0YzYpO1xuJiM0MztcdHVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtXHUwMDNlbmRldik7XG4mIzQzO1x0b2FfdGM2X2V4aXQocHJpdi1cdTAwM2V0YzYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzMjUwMF9vZl9tYXRjaFtdID0ge1xuJiM0MztcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDtvbm5uLHMyNTAwXCYjMzQ7IH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHMyNTAwX29mX21hdGNoKTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBzMjUwMF9pZHNbXSA9IHtcbiYjNDM7XHR7IFwmIzM0O3MyNTAwXCYjMzQ7IH0sXG4mIzQzO1x0eyB9XG4mIzQzO307XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCBzMjUwMF9pZHMpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBzcGlfZHJpdmVyIHMyNTAwX2RyaXZlciA9IHtcbiYjNDM7XHQuZHJpdmVyID0ge1xuJiM0MztcdFx0Lm5hbWUgPSBEUlZfTkFNRSxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IHMyNTAwX29mX21hdGNoLFxuJiM0MztcdH0sXG4mIzQzO1x0LnByb2JlID0gczI1MDBfcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IHMyNTAwX3JlbW92ZSxcbiYjNDM7XHQuaWRfdGFibGUgPSBzMjUwMF9pZHMsXG4mIzQzO307XG4mIzQzO21vZHVsZV9zcGlfZHJpdmVyKHMyNTAwX2RyaXZlcik7XG4mIzQzO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O1BpZXJnaW9yZ2lvIEJlcnV0byBcdTAwM2NwaWVyLmJlcnV0b0BvbnNlbWkuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtTZWx2YSBSYWphZ29wYWwgXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O29uc2VtaSBNQUNQSFkgZXRoZXJuZXQgZHJpdmVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfcHRwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2RhNjYwY2I1YjE5MGFcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9wdHAuY1xuQEAgLTAsMCAmIzQzOzEsMjUwIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIENvcHlyaWdodCAyMDI2IFNlbWljb25kdWN0b3IgQ29tcG9uZW50cyBJbmR1c3RyaWVzLCBMTEMgKFwmIzM0O29uc2VtaVwmIzM0OykuXG4mIzQzOyAqIG9uc2VtaSYjMzk7cyBTMjUwMCAxMEJBU0UtVDFTIE1BQy1QSFkgZHJpdmVyXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7czI1MDBfaHdfZGVmLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgczI1MDBfcHRwX2dldF90aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4mIzQzO1x0XHRcdFx0c3RydWN0IHRpbWVzcGVjNjQgKnRzLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqcHRwX3N0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHMyNTAwX2luZm8sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcHRwX2Nsb2NrX2luZm8pO1xuJiM0MztcdHUzMiBkYXRhWzJdO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhwdHBfc3RzKTtcbiYjNDM7XHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3RlcnNfbW1zKHByaXYtXHUwMDNldGM2LFxuJiM0MztcdFx0XHRcdFx0UzI1MDBfUkVHX1ZTX1BUUF9TRUMsXG4mIzQzO1x0XHRcdFx0XHRPQV9UQzZfUEhZX0M0NV9WU19NTVMxMixcbiYjNDM7XHRcdFx0XHRcdFx1MDAyNmRhdGFbMF0sIDIpO1xuJiM0MztcdHB0cF9yZWFkX3N5c3RlbV9wb3N0dHMocHRwX3N0cyk7XG4mIzQzO1xuJiM0MztcdGlmICghcmV0KSB7XG4mIzQzO1x0XHR0cy1cdTAwM2V0dl9zZWMgPSBkYXRhWzBdO1xuJiM0MztcdFx0dHMtXHUwMDNldHZfbnNlYyA9IGRhdGFbMV07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX3B0cF9zZXRfdGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCB0aW1lc3BlYzY0ICp0cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHMyNTAwX2luZm8sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgcHRwX2Nsb2NrX2luZm8pO1xuJiM0MztcdHUzMiBkYXRhWzJdO1xuJiM0MztcbiYjNDM7XHRpZiAodHMtXHUwMDNldHZfc2VjIFx1MDAzZT0gKDFVTEwgXHUwMDNjXHUwMDNjIDMyKSlcbiYjNDM7XHRcdHJldHVybiAtRVJBTkdFO1xuJiM0MztcbiYjNDM7XHRkYXRhWzBdID0gKHUzMil0cy1cdTAwM2V0dl9zZWM7XG4mIzQzO1x0LyogYml0IDMxID0gZXhlY3V0ZSBzZXQgY29tbWFuZCAqL1xuJiM0MztcdGRhdGFbMV0gPSB0cy1cdTAwM2V0dl9uc2VjIHwgQklUKDMxKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKHByaXYtXHUwMDNldGM2LFxuJiM0MztcdFx0XHRcdFx0ICBTMjUwMF9SRUdfVlNfUFRQX1NFVFNFQyxcbiYjNDM7XHRcdFx0XHRcdCAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIsXG4mIzQzO1x0XHRcdFx0XHQgIFx1MDAyNmRhdGFbMF0sIDIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCBzMjUwMF9pbmZvLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHB0cF9jbG9ja19pbmZvKTtcbiYjNDM7XHR1MzIgc2lnbl9iaXQgPSAwO1xuJiM0MztcdGxvbmcgYWRqO1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0dTY0IHBwbTtcbiYjNDM7XG4mIzQzO1x0aWYgKHNjYWxlZF9wcG0gXHUwMDNjIDApIHtcbiYjNDM7XHRcdC8qIHNwbGl0IHNpZ24gLyBtb2QgKi9cbiYjNDM7XHRcdHNpZ25fYml0ID0gMVUgXHUwMDNjXHUwMDNjIDMxO1xuJiM0MztcdFx0c2NhbGVkX3BwbSA9IH5zY2FsZWRfcHBtICYjNDM7IDE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENvbnZlcnQgdW5zaWduZWQgc2NhbGVkX3BwbSB0byBhdHRvLXNlY29uZHMgcGVyIGNsb2NrIGN5Y2xlcy5cbiYjNDM7XHQgKiBUaGUgc2NhbGVkX3BwbSBmb3JtYXQgaXMgUXguMTYgLS1cdTAwM2UgMSBsc2IgPSAxLzY1NTM2IHBwbS5cbiYjNDM7XHQgKiBUaGUgY2xvY2sgcGVyaW9kIG9mIHRoZSBTMjUwMCBpcyA4bnMgKDEyNSBNSHopLCBzbyAxIGxzYiBvZlxuJiM0MztcdCAqIGFkaiByZWdpc3RlciBMU0IgaXMgMSBhdHRvLXNlYyAvIDhucyA9IDAuMDAwMTI1IHBwbS5cbiYjNDM7XHQgKiBSZXByZXNlbnRlZCBpbiBReC4xNiBmb3JtYXQsIHRoaXMgaXMgMC4wMDAxMjUgKiAyXjE2ID0gOCguMTkyKVxuJiM0MztcdCAqIFRvIGNvbnZlcnQgc2NhbGVkX3BwbSBpbnRvIGEgcmVnaXN0ZXIgdmFsdWUgd2UgbmVlZCB0byBkaXZpZGVcbiYjNDM7XHQgKiBpdCBieSB0aGUgTFNCIHZhbHVlLCBoZW5jZSBhZGogPSAoc2NhbGVkX3BwbSAqIDEwMDApIC8gODE5MiB0b1xuJiM0MztcdCAqIG1pbmltaXplIHRoZSBwcmVjaXNpb24gbG9zcyBkdWUgdG8gdGhlIGludGVnZXIgYXJpdGhtZXRpYy5cbiYjNDM7XHQgKiBUaGF0IGZ1cnRoZXIgcmVkdWNlcyB0byAoc2NhbGVkX3BwbSAqIDEyNSkgLyAxMDI0LlxuJiM0MztcdCAqL1xuJiM0MztcdHBwbSA9ICh1NjQpc2NhbGVkX3BwbSAqIDEyNTtcbiYjNDM7XHRkb19kaXYocHBtLCAxMDI0KTtcbiYjNDM7XHRhZGogPSAobG9uZylwcG07XG4mIzQzO1xuJiM0MztcdC8qIGNoZWNrIG92ZXJmbG93ICovXG4mIzQzO1x0aWYgKGFkaiBcdTAwM2U9ICgxTCBcdTAwM2NcdTAwM2MgMjgpKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1xuJiM0MztcdHZhbCA9ICh1MzIpYWRqIHwgc2lnbl9iaXQ7XG4mIzQzO1x0cmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIFMyNTAwX1JFR19WU19QVFBfQURKLFxuJiM0MztcdFx0XHRcdFx0IE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX3VzZV9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCB0aW1lc3BlYzY0IG5vdywgczY0IHJlbSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCBzdHM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgZGVsdGFfdHM7XG4mIzQzO1x0c3RydWN0IHRpbWVzcGVjNjQgdGFyZ2V0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG1lbXNldChcdTAwMjZzdHMsIDAsIHNpemVvZihzdHMpKTtcbiYjNDM7XHRyZXQgPSBwdHAtXHUwMDNlZ2V0dGltZXg2NChwdHAsIFx1MDAyNm5vdywgXHUwMDI2c3RzKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmVtIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0ZGVsdGFfdHMgPSBuc190b190aW1lc3BlYzY0KHJlbSk7XG4mIzQzO1x0XHR0YXJnZXQgPSB0aW1lc3BlYzY0X2FkZChub3csIGRlbHRhX3RzKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0ZGVsdGFfdHMgPSBuc190b190aW1lc3BlYzY0KC1yZW0pO1xuJiM0MztcdFx0dGFyZ2V0ID0gdGltZXNwZWM2NF9zdWIobm93LCBkZWx0YV90cyk7XG4mIzQzO1x0fVxuJiM0MztcdGlmICh0YXJnZXQudHZfc2VjIFx1MDAzYyAwIHx8XG4mIzQzO1x0ICAgIHRhcmdldC50dl9zZWMgXHUwMDNlPSAoMVVMTCBcdTAwM2NcdTAwM2MgMzIpKVxuJiM0MztcdFx0cmV0dXJuIC1FUkFOR0U7XG4mIzQzO1x0cmV0dXJuIHB0cC1cdTAwM2VzZXR0aW1lNjQocHRwLCBcdTAwMjZ0YXJnZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHMyNTAwX3B0cF9hZGp0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBzNjQgZGVsdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCBzMjUwMF9pbmZvLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHB0cF9jbG9ja19pbmZvKTtcbiYjNDM7XHRzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgc3RzO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IHRhcmdldDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcGVyaW9kX21zO1xuJiM0MztcdHN0cnVjdCB0aW1lc3BlYzY0IG5vdztcbiYjNDM7XHRzNjQgc2NhbGVkX3BwbSwgcmVtO1xuJiM0MztcdGludCBtYXhfaXRlcnMgPSAzO1xuJiM0MztcdHM2NCB0YXJnZXRfbnM7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0czY0IG5vd19ucztcbiYjNDM7XHRzNjQgbnVtO1xuJiM0MztcdHM2NCBkZW47XG4mIzQzO1xuJiM0MztcdGlmICghcHRwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIE5vdGhpbmcgdG8gZG8gKi9cbiYjNDM7XHRpZiAoZGVsdGEgPT0gMClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2Fkal9sb2NrKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVFI7XG4mIzQzO1xuJiM0MztcdC8qIFRyeSB0byBzbGV3IHRoZSBjbG9jayB1c2luZyBhZGpmaW5lIGZvciBiZXR0ZXIgYWNjdXJhY3kuXG4mIzQzO1x0ICogRm9yIGxhcmdlIGFkanVzdG1lbnRzIGZhbGwgYmFjayB0byBzZXR0aW5nIHRpbWUgZGlyZWN0bHkuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVtID0gZGVsdGE7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChyZW0gIT0gMCBcdTAwMjZcdTAwMjYgbWF4X2l0ZXJzLS0pIHtcbiYjNDM7XHRcdHM2NCBhYnNfZGVsdGEgPSByZW0gXHUwMDNlIDAgPyByZW0gOiAtcmVtO1xuJiM0MztcbiYjNDM7XHRcdC8qIElmIHRoZSBhZGp1c3RtZW50IGlzIHZlcnkgbGFyZ2UsIG1vcmUgdGhhbiAxIHNlY29uZCxcbiYjNDM7XHRcdCAqIHVzZSBzZXR0aW1lIHRvIGF2b2lkIHZlcnkgbG9uZyBzbGV3aW5nIHBlcmlvZHMgb3JcbiYjNDM7XHRcdCAqIGV4Y2Vzc2l2ZSBmcmVxdWVuY3kgb2Zmc2V0cy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGFic19kZWx0YSBcdTAwM2UgMTAwMDAwMDAwMExMKSB7XG4mIzQzO1x0XHRcdHJldCA9IHMyNTAwX3VzZV9zZXR0aW1lKHB0cCwgbm93LCByZW0pO1xuJiM0MztcdFx0XHRyZW0gPSAwO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBDaG9vc2UgYSBzbGV3aW5nIHBlcmlvZCBkZXBlbmRpbmcgb24gbWFnbml0dWRlICovXG4mIzQzO1x0XHRpZiAoYWJzX2RlbHRhIFx1MDAzYz0gMTAwMDAwMExMKSAvKiBcdTAwM2M9IDFtcyAqL1xuJiM0MztcdFx0XHRwZXJpb2RfbXMgPSAxMDAwOyAvKiAxIHMgKi9cbiYjNDM7XHRcdGVsc2UgaWYgKGFic19kZWx0YSBcdTAwM2M9IDEwMDAwMDAwMExMKSAvKiBcdTAwM2M9IDEwMG1zICovXG4mIzQzO1x0XHRcdHBlcmlvZF9tcyA9IDEwMDAwOyAvKiAxMCBzICovXG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBlcmlvZF9tcyA9IDYwMDAwOyAvKiA2MCBzICovXG4mIzQzO1xuJiM0MztcdFx0LyogQ29tcHV0ZSBjdXJyZW50IHRpbWUgYW5kIGZpeGVkIHRhcmdldCBmb3IgdGhpc1xuJiM0MztcdFx0ICogaXRlcmF0aW9uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG1lbXNldChcdTAwMjZzdHMsIDAsIHNpemVvZihzdHMpKTtcbiYjNDM7XHRcdHJldCA9IHB0cC1cdTAwM2VnZXR0aW1leDY0KHB0cCwgXHUwMDI2bm93LCBcdTAwMjZzdHMpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJlbSBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdHRhcmdldCA9IHRpbWVzcGVjNjRfYWRkKG5vdyxcbiYjNDM7XHRcdFx0XHRcdFx0bnNfdG9fdGltZXNwZWM2NChyZW0pKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0dGFyZ2V0ID0gdGltZXNwZWM2NF9zdWIobm93LFxuJiM0MztcdFx0XHRcdFx0XHRuc190b190aW1lc3BlYzY0KC1yZW0pKTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBDb21wdXRlIHNjYWxlZF9wcG0gKFF4LjE2KS4gc2NhbGVkX3BwbSA9IHBwbSAqIDJeMTZcbiYjNDM7XHRcdCAqIHBwbSA9IChkZWx0YV9zZWNvbmRzIC8gcGVyaW9kX3NlY29uZHMpICogMWU2XG4mIzQzO1x0XHQgKiA9XHUwMDNlIHNjYWxlZF9wcG0gPSBkZWx0YV9ucyAqIDY1NTM2IC8gKHBlcmlvZF9tcyAqIDEwMDApXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdG51bSA9IHJlbSAqIDY1NTM2TEw7XG4mIzQzO1x0XHRkZW4gPSAoczY0KXBlcmlvZF9tcyAqIDEwMDBMTDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBJbnRlZ2VyIGRpdmlzaW9uIHJvdW5kcyB0b3dhcmQgemVybzsga2VlcCBzaWduIGluXG4mIzQzO1x0XHQgKiBudW1lcmF0b3JcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0c2NhbGVkX3BwbSA9IGRpdl9zNjQobnVtLCBkZW4pO1xuJiM0MztcbiYjNDM7XHRcdC8qIEFwcGx5IGZyZXF1ZW5jeSBhZGp1c3RtZW50ICovXG4mIzQzO1x0XHRyZXQgPSBwdHAtXHUwMDNlYWRqZmluZShwdHAsIChsb25nKXNjYWxlZF9wcG0pO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogU2xlZXAgZm9yIHRoZSBzbGV3IHBlcmlvZCAoaW50ZXJydXB0aWJsZSkuIElmXG4mIzQzO1x0XHQgKiBpbnRlcnJ1cHRlZCwgY2xlYXIgdGhlIGFkamZpbmUgYW5kIHJldHVybiAtRUlOVFIuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChtc2xlZXBfaW50ZXJydXB0aWJsZShwZXJpb2RfbXMpKSB7XG4mIzQzO1x0XHRcdC8qIENsZWFyIGFkamZpbmUgKi9cbiYjNDM7XHRcdFx0cHRwLVx1MDAzZWFkamZpbmUocHRwLCAwKTtcbiYjNDM7XHRcdFx0cmV0ID0gLUVJTlRSO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBDbGVhciBhZGpmaW5lIGFuZCBtZWFzdXJlIHJlbWFpbmluZyBvZmZzZXQgKi9cbiYjNDM7XHRcdHB0cC1cdTAwM2VhZGpmaW5lKHB0cCwgMCk7XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KFx1MDAyNnN0cywgMCwgc2l6ZW9mKHN0cykpO1xuJiM0MztcdFx0cmV0ID0gcHRwLVx1MDAzZWdldHRpbWV4NjQocHRwLCBcdTAwMjZub3csIFx1MDAyNnN0cyk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHQvKiByZW1haW5pbmcgPSB0YXJnZXQgLSBub3cgKGluIG5zKSAqL1xuJiM0MztcdFx0dGFyZ2V0X25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZ0YXJnZXQpO1xuJiM0MztcdFx0bm93X25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZub3cpO1xuJiM0MztcdFx0cmVtID0gdGFyZ2V0X25zIC0gbm93X25zO1xuJiM0MztcbiYjNDM7XHRcdC8qIElmIHJlbWFpbmluZyBpcyBzbWFsbCAoXHUwMDNjIDF1cyksIGZpbmlzaCAqL1xuJiM0MztcdFx0aWYgKHJlbSBcdTAwM2UgLTEwMDAgXHUwMDI2XHUwMDI2IHJlbSBcdTAwM2MgMTAwMClcbiYjNDM7XHRcdFx0cmVtID0gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXB0cF9hZGpfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHMyNTAwX3B0cF9yZWdpc3RlcihzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyA9IFx1MDAyNnByaXYtXHUwMDNlcHRwX2Nsb2NrX2luZm87XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aW5mby1cdTAwM2VtYXhfYWRqID0gMTAwMDAwMDAwO1xuJiM0MztcdGluZm8tXHUwMDNlb3duZXIgPSBUSElTX01PRFVMRTtcbiYjNDM7XHRpbmZvLVx1MDAzZWFkamZpbmUgPSBzMjUwMF9wdHBfYWRqZmluZTtcbiYjNDM7XHRpbmZvLVx1MDAzZWdldHRpbWV4NjQgPSBzMjUwMF9wdHBfZ2V0X3RpbWU2NDtcbiYjNDM7XHRpbmZvLVx1MDAzZXNldHRpbWU2NCA9IHMyNTAwX3B0cF9zZXRfdGltZTY0O1xuJiM0MztcdGluZm8tXHUwMDNlYWRqdGltZSA9IHMyNTAwX3B0cF9hZGp0aW1lO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBvYV90YzZfcHRwX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBpbmZvKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwmIzM0O1BUUCByZWdpc3RyYXRpb24gZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMgYi9kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jXG5pbmRleCA4ODI1NWU5MmI0Y2RiZC4uMDFlYTJlOGRkMjUzYmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jXG5AQCAtOTkxLDE1ICYjNDM7OTkxLDYgQEAgc3RhdGljIHZvaWQgZHA4Mzg2N19saW5rX2NoYW5nZV9ub3RpZnkoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGludCBkcDgzODY3X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpXG4te1xuLVx0aWYgKGVuYWJsZSBcdTAwMjZcdTAwMjYgc3BlZWQpXG4tXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi1cbi1cdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0ssXG4tXHRcdFx0ICBlbmFibGUgPyBCTUNSX0xPT1BCQUNLIDogMCk7XG4tfVxuLVxuIHN0YXRpYyBpbnRcbiBkcDgzODY3X2xlZF9icmlnaHRuZXNzX3NldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuIFx0XHRcdCAgIHU4IGluZGV4LCBlbnVtIGxlZF9icmlnaHRuZXNzIGJyaWdodG5lc3MpXG5AQCAtMTIwNCw3ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY3X2RyaXZlcltdID0ge1xuIFx0XHQucmVzdW1lXHRcdD0gZHA4Mzg2N19yZXN1bWUsXG4gXG4gXHRcdC5saW5rX2NoYW5nZV9ub3RpZnkgPSBkcDgzODY3X2xpbmtfY2hhbmdlX25vdGlmeSxcbi1cdFx0LnNldF9sb29wYmFja1x0PSBkcDgzODY3X2xvb3BiYWNrLFxuJiM0MztcdFx0LnNldF9sb29wYmFja1x0PSBnZW5waHlfbG9vcGJhY2tfZml4ZWRfc3BlZWQsXG4gXG4gXHRcdC5sZWRfYnJpZ2h0bmVzc19zZXQgPSBkcDgzODY3X2xlZF9icmlnaHRuZXNzX3NldCxcbiBcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSBkcDgzODY3X2xlZF9od19pc19zdXBwb3J0ZWQsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYyBiL2RyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDFzLmNcbmluZGV4IGU2MDFkNTZiMjUwN2Y5Li4wYzRkYzcwNjQxZDhiMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDFzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDFzLmNcbkBAIC01MDYsMzQgJiM0Mzs1MDYsNiBAQCBzdGF0aWMgaW50IGxhbjg2eHhfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKiBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXggY29tcGxpYW5jZSBNQUMtUEhZcyB3aWxsIGhhdmUgYm90aCBDMjIgYW5kXG4tICogQzQ1IHJlZ2lzdGVycyBzcGFjZS4gSWYgdGhlIFBIWSBpcyBkaXNjb3ZlcmVkIHZpYSBDMjIgYnVzIHByb3RvY29sIGl0IGFzc3VtZXNcbi0gKiBpdCB1c2VzIEMyMiBwcm90b2NvbCBhbmQgYWx3YXlzIHVzZXMgQzIyIHJlZ2lzdGVycyBpbmRpcmVjdCBhY2Nlc3MgdG8gYWNjZXNzXG4tICogQzQ1IHJlZ2lzdGVycy4gVGhpcyBpcyBiZWNhdXNlLCB3ZSBkb24mIzM5O3QgaGF2ZSBhIGNsZWFuIHNlcGFyYXRpb24gYmV0d2VlblxuLSAqIEMyMi9DNDUgcmVnaXN0ZXIgc3BhY2UgYW5kIEMyMi9DNDUgTURJTyBidXMgcHJvdG9jb2xzLiBSZXN1bHRpbmcsIFBIWSBDNDVcbi0gKiByZWdpc3RlcnMgZGlyZWN0IGFjY2VzcyBjYW4mIzM5O3QgYmUgdXNlZCB3aGljaCBjYW4gc2F2ZSBtdWx0aXBsZSBTUEkgYnVzIGFjY2Vzcy5cbi0gKiBUbyBzdXBwb3J0IHRoaXMgZmVhdHVyZSwgc2V0IC5yZWFkX21tZC8ud3JpdGVfbW1kIGluIHRoZSBQSFkgZHJpdmVyIHRvIGNhbGxcbi0gKiAucmVhZF9jNDUvLndyaXRlX2M0NSBpbiB0aGUgT1BFTiBBbGxpYW5jZSBmcmFtZXdvcmtcbi0gKiBkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xuLSAqL1xuLXN0YXRpYyBpbnQgbGFuODY1eF9waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSxcbi1cdFx0XHRcdHUxNiByZWdudW0pXG4te1xuLVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbi1cdGludCBhZGRyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbi1cbi1cdHJldHVybiBfX21kaW9idXNfYzQ1X3JlYWQoYnVzLCBhZGRyLCBkZXZudW0sIHJlZ251bSk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgbGFuODY1eF9waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sXG4tXHRcdFx0XHQgdTE2IHJlZ251bSwgdTE2IHZhbClcbi17XG4tXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuLVx0aW50IGFkZHIgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuLVxuLVx0cmV0dXJuIF9fbWRpb2J1c19jNDVfd3JpdGUoYnVzLCBhZGRyLCBkZXZudW0sIHJlZ251bSwgdmFsKTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1pY3JvY2hpcF90MXNfZHJpdmVyW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfTEFOODY3WF9SRVZCMSksXG5AQCAtNTg0LDggJiM0Mzs1NTYsOCBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWljcm9jaGlwX3Qxc19kcml2ZXJbXSA9IHtcbiBcdFx0LmZlYXR1cmVzICAgICAgICAgICA9IFBIWV9CQVNJQ19UMVNfUDJNUF9GRUFUVVJFUyxcbiBcdFx0LmNvbmZpZ19pbml0ICAgICAgICA9IGxhbjg2NXhfcmV2Yl9jb25maWdfaW5pdCxcbiBcdFx0LnJlYWRfc3RhdHVzICAgICAgICA9IGxhbjg2eHhfcmVhZF9zdGF0dXMsXG4tXHRcdC5yZWFkX21tZCAgICAgICAgICAgPSBsYW44NjV4X3BoeV9yZWFkX21tZCxcbi1cdFx0LndyaXRlX21tZCAgICAgICAgICA9IGxhbjg2NXhfcGh5X3dyaXRlX21tZCxcbiYjNDM7XHRcdC5yZWFkX21tZCAgICAgICAgICAgPSBnZW5waHlfcGh5X3JlYWRfbW1kLFxuJiM0MztcdFx0LndyaXRlX21tZCAgICAgICAgICA9IGdlbnBoeV9waHlfd3JpdGVfbW1kLFxuIFx0XHQuZ2V0X3BsY2FfY2ZnXHQgICAgPSBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyxcbiBcdFx0LnNldF9wbGNhX2NmZ1x0ICAgID0gbGFuODZ4eF9wbGNhX3NldF9jZmcsXG4gXHRcdC5nZXRfcGxjYV9zdGF0dXMgICAgPSBnZW5waHlfYzQ1X3BsY2FfZ2V0X3N0YXR1cyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbmNuMjYwMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jXG5pbmRleCBjYWJkZDgzYzYxNGYwZC4uYWZhZmE4MWRjMjJiODIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbmNuMjYwMDAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L25jbjI2MDAwLmNcbkBAIC0yLDcgJiM0MzsyLDcgQEBcbiAvKlxuICAqICBEcml2ZXIgZm9yIHRoZSBvbnNlbWkgMTBCQVNFLVQxUyBOQ04yNjAwMCBQSFlzIGZhbWlseS5cbiAgKlxuLSAqIENvcHlyaWdodCAyMDIyIG9uc2VtaVxuJiM0MzsgKiBDb3B5cmlnaHQgMjAyNiBvbnNlbWlcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbkBAIC0xNCw2ICYjNDM7MTQsNyBAQFxuIFxuICNpbmNsdWRlIFwmIzM0O21kaW8tb3Blbi1hbGxpYW5jZS5oXCYjMzQ7XG4gXG4mIzQzOyNkZWZpbmUgUEhZX0lEX1MyNTAwXHRcdFx0MHgxODBGRjQxMVxuICNkZWZpbmUgUEhZX0lEX05DTjI2MDAwXHRcdFx0MHgxODBGRjVBMVxuIFxuICNkZWZpbmUgTkNOMjYwMDBfUkVHX0lSUV9DVEwgICAgICAgICAgICAxNlxuQEAgLTM1LDE1ICYjNDM7MzYsMjQgQEBcbiBcbiAjZGVmaW5lIFRPX1RNUl9ERUZBVUxUXHRcdFx0MzJcbiBcbiYjNDM7I2RlZmluZSBOQ04yNjAwMF9SRUdfUEhZQ0ZHMVx0XHQweDgwMDFcbiYjNDM7I2RlZmluZSBOQ04yNjAwMF9QSFlDRkcxX0VOSVx0XHRCSVQoNylcbiYjNDM7I2RlZmluZSBOQ04yNjAwMF9QSFlDRkcxX0VOSV9NQVNLXHRCSVQoNylcbiYjNDM7XG4gc3RhdGljIGludCBuY24yNjAwMF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4gXHQvKiBIVyBidWcgd29ya2Fyb3VuZDogdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIFBMQ0EgVE9fVElNRVIgc2hvdWxkIGJlXG4gXHQgKiAzMiwgd2hlcmUgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBOQ04yNjAwMCByZXBvcnRzIDI0LiBUaGlzIHdpbGwgYmVcbiBcdCAqIGZpeGVkIGluIGZ1dHVyZSBQSFkgdmVyc2lvbnMuIEZvciB0aGUgdGltZSBiZWluZywgd2UgZm9yY2UgdGhlXG4gXHQgKiBjb3JyZWN0IGRlZmF1bHQgaGVyZS5cbiBcdCAqL1xuLVx0cmV0dXJuIHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTURJT19PQVRDMTRfUExDQV9UT1RNUixcbi1cdFx0XHQgICAgIFRPX1RNUl9ERUZBVUxUKTtcbiYjNDM7XHRpZiAocGh5X2lkX2NvbXBhcmVfbW9kZWwocGh5ZGV2LVx1MDAzZWRydi1cdTAwM2VwaHlfaWQsIFBIWV9JRF9OQ04yNjAwMCkpXG4mIzQzO1x0XHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXG4mIzQzO1x0XHRcdFx0ICAgIE1ESU9fT0FUQzE0X1BMQ0FfVE9UTVIsXG4mIzQzO1x0XHRcdFx0ICAgIFRPX1RNUl9ERUZBVUxUKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IG5jbjI2MDAwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG5AQCAtMTAwLDYgJiM0MzsxMTAsMjQgQEAgc3RhdGljIGludCBuY24yNjAwMF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MzsvKiBJbnRlcmNlcHQgUExDQSBlbmFibGUvZGlzYWJsZSByZXF1ZXN0IHRvXG4mIzQzOyAqIHNldCB0aGUgcHJvcHJpZXRhcnksIEVOSSBtb2RlIGFjY29yZGluZ2x5XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IG5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHBoeWRldiwgcGxjYV9jZmcpO1xuJiM0MztcdHUxNiBlbmlfY2ZnID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCB8fCBwbGNhX2NmZy1cdTAwM2VlbmFibGVkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0ZW5pX2NmZyA9IChwbGNhX2NmZy1cdTAwM2VlbmFibGVkKSA/IE5DTjI2MDAwX1BIWUNGRzFfRU5JIDogMDtcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbiYjNDM7XHRcdFx0ICAgICAgTkNOMjYwMDBfUkVHX1BIWUNGRzEsXG4mIzQzO1x0XHRcdCAgICAgIE5DTjI2MDAwX1BIWUNGRzFfRU5JX01BU0ssIGVuaV9jZmcpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpcnFyZXR1cm5fdCBuY24yNjAwMF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0aW50IHJldDtcbkBAIC0xMTcsOCAmIzQzOzE0NSw4IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBuY24yNjAwMF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXG4gc3RhdGljIGludCBuY24yNjAwMF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQ7XG4gXHR1MTYgaXJxZTtcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0aWYgKHBoeWRldi1cdTAwM2VpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkge1xuIFx0XHQvLyBhY2tub3dsZWRnZSBJUlFzXG5AQCAtMTQxLDYgJiM0MzsxNjksMjcgQEAgc3RhdGljIGludCBuY24yNjAwMF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbmNuMjYwMDBfZHJpdmVyW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9TMjUwMCksXG4mIzQzO1x0XHQubmFtZSAgICAgICAgICAgICAgICAgID0gXCYjMzQ7UzI1MDBcJiMzNDssXG4mIzQzO1x0XHQuZmVhdHVyZXMgICAgICAgICAgICAgID0gUEhZX0JBU0lDX1QxU19QMk1QX0ZFQVRVUkVTLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0ICAgICAgICAgICA9IG5jbjI2MDAwX2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LmNvbmZpZ19pbnRyICAgICAgICAgICA9IG5jbjI2MDAwX2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnICAgICAgICAgICA9IG5jbjI2MDAwX2NvbmZpZ19hbmVnLFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzICAgICAgICAgICA9IG5jbjI2MDAwX3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHQgICAgICA9IG5jbjI2MDAwX2hhbmRsZV9pbnRlcnJ1cHQsXG4mIzQzO1x0XHQuc2V0X2xvb3BiYWNrICAgICAgICAgID0gZ2VucGh5X2xvb3BiYWNrX2ZpeGVkX3NwZWVkLFxuJiM0MztcdFx0LnNldF9wbGNhX2NmZyAgICAgICAgICA9IG5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmcsXG4mIzQzO1x0XHQuZ2V0X3BsY2FfY2ZnICAgICAgICAgID0gZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcsXG4mIzQzO1x0XHQuZ2V0X3BsY2Ffc3RhdHVzICAgICAgID0gZ2VucGh5X2M0NV9wbGNhX2dldF9zdGF0dXMsXG4mIzQzO1x0XHQuc29mdF9yZXNldCAgICAgICAgICAgID0gZ2VucGh5X3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuZ2V0X3NxaSAgICAgICAgICAgICAgID0gZ2VucGh5X2M0NV9vYXRjMTRfZ2V0X3NxaSxcbiYjNDM7XHRcdC5nZXRfc3FpX21heCAgICAgICAgICAgPSBnZW5waHlfYzQ1X29hdGMxNF9nZXRfc3FpX21heCxcbiYjNDM7XHRcdC5yZWFkX21tZCAgICAgICAgICAgICAgPSBnZW5waHlfcGh5X3JlYWRfbW1kLFxuJiM0MztcdFx0LndyaXRlX21tZCAgICAgICAgICAgICA9IGdlbnBoeV9waHlfd3JpdGVfbW1kLFxuJiM0MztcdFx0LmNhYmxlX3Rlc3RfZ2V0X3N0YXR1cyA9IGdlbnBoeV9jNDVfb2F0YzE0X2NhYmxlX3Rlc3RfZ2V0X3N0YXR1cyxcbiYjNDM7XHRcdC5jYWJsZV90ZXN0X3N0YXJ0ICAgICAgPSBnZW5waHlfYzQ1X29hdGMxNF9jYWJsZV90ZXN0X3N0YXJ0LFxuJiM0MztcdH0sXG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfTkNOMjYwMDApLFxuIFx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7TkNOMjYwMDBcJiMzNDssXG5AQCAtMTUxLDcgJiM0MzsyMDAsNyBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbmNuMjYwMDBfZHJpdmVyW10gPSB7XG4gXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IG5jbjI2MDAwX3JlYWRfc3RhdHVzLFxuIFx0XHQuaGFuZGxlX2ludGVycnVwdCAgICAgICA9IG5jbjI2MDAwX2hhbmRsZV9pbnRlcnJ1cHQsXG4gXHRcdC5nZXRfcGxjYV9jZmdcdFx0PSBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyxcbi1cdFx0LnNldF9wbGNhX2NmZ1x0XHQ9IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnLFxuJiM0MztcdFx0LnNldF9wbGNhX2NmZ1x0XHQ9IG5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmcsXG4gXHRcdC5nZXRfcGxjYV9zdGF0dXNcdD0gZ2VucGh5X2M0NV9wbGNhX2dldF9zdGF0dXMsXG4gXHRcdC5zb2Z0X3Jlc2V0ICAgICAgICAgICAgID0gZ2VucGh5X3NvZnRfcmVzZXQsXG4gXHR9LFxuQEAgLTE2MSwxMSAmIzQzOzIxMCwxMyBAQCBtb2R1bGVfcGh5X2RyaXZlcihuY24yNjAwMF9kcml2ZXIpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbmNuMjYwMDBfdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfTkNOMjYwMDApIH0sXG4mIzQzO1x0eyBQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX1MyNTAwKSB9LFxuIFx0eyB9XG4gfTtcbiBcbiBNT0RVTEVfREVWSUNFX1RBQkxFKG1kaW8sIG5jbjI2MDAwX3RibCk7XG4gXG4tTU9EVUxFX0FVVEhPUihcJiMzNDtQaWVyZ2lvcmdpbyBCZXJ1dG9cJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O1BpZXJnaW9yZ2lvIEJlcnV0byBcdTAwM2NwaWVyLmJlcnV0b0BvbnNlbWkuY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0FVVEhPUihcJiMzNDtTZWx2YSBSYWphZ29wYWwgXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXHUwMDNlXCYjMzQ7KTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7b25zZW1pIDEwQkFTRS1UMVMgUEhZIGRyaXZlclwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7RHVhbCBCU0QvR1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMDYxNTIyODQ1OWVmNDIuLjExZmQyMDRlZWExNmE0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTI3ODcsNiAmIzQzOzI3ODcsODEgQEAgaW50IGdlbnBoeV93cml0ZV9tbWRfdW5zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoZGV2LCBpbnQgZGV2bnVtLFxuIH1cbiBFWFBPUlRfU1lNQk9MKGdlbnBoeV93cml0ZV9tbWRfdW5zdXBwb3J0ZWQpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X3BoeV9yZWFkX21tZCAtIEhlbHBlciBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyIHdpdGhvdXQgbG9ja1xuJiM0MzsgKiBmcm9tIHRoZSBnaXZlbiBNTUQgYW5kIFBIWS5cbiYjNDM7ICogQHBoeWRldjogVGhlIHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqIEBkZXZudW06IFRoZSBNTUQgdG8gcmVhZCBmcm9tXG4mIzQzOyAqIEByZWdudW06IFRoZSByZWdpc3RlciBvbiB0aGUgTU1EIHRvIHJlYWRcbiYjNDM7ICpcbiYjNDM7ICogRGVzY3JpcHRpb246IFBIWXMgY2FuIGhhdmUgYm90aCBDMjIgYW5kIEM0NSByZWdpc3RlcnMgc3BhY2UuIE9uY2UgUEhZXG4mIzQzOyAqIGlzIGRpc2NvdmVyZWQgdmlhIEMyMiBidXMgcHJvdG9jb2wsIGl0IHVzZXMgQzIyIGluZGlyZWN0IGFjY2VzcyB0b1xuJiM0MzsgKiBhY2Nlc3MgQzQ1IHJlZ2lzdGVycy4gU29tZSBQSFlzLCBsaWtlIDEwQmFzZS1UMVMgUEhZcyBkZWZpbmVkIGJ5IE9QRU5cbiYjNDM7ICogQWxsaWFuY2UgMTBCQVNF4oCRVDF4LCBzdXBwb3J0IG9ubHkgZGlyZWN0IGFjY2Vzcy5cbiYjNDM7ICpcbiYjNDM7ICogSWYgUEhZIGluZGljYXRlcyBDNDUgc3VwcG9ydCB0aHJvdWdoIERUUyBlbnRyeSwgaXQgYXZvaWQgQzIyIEFQSXNcbiYjNDM7ICogZW50aXJlbHkgYW5kIHRoZXJlZm9yZSBnZW5lcmljIE1ESU8gcmVnaXN0ZXJzIGFyZSBpbmFjY2Vzc2libGUuXG4mIzQzOyAqXG4mIzQzOyAqIE1ESU8gYnVzIGlzbiYjMzk7dCBsb2NrZWQgaGVyZSBiZWNhdXNlIHdoZW4gY2FsbGVkIHRocm91Z2ggcmVhZF9tbWRcbiYjNDM7ICogY2FsbGJhY2sgb2YgcGh5X2RyaXZlciwgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGxvY2sgdGhlIGJ1cyBhc1xuJiM0MzsgKiBpbXBsZW1lbnRlZCBpbiBwaHlfcmVhZF9tbWQuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IFJlZ2lzdGVyIHZhbHVlIGlmIHN1Y2Nlc3NmdWwsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBnZW5waHlfcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sXG4mIzQzO1x0XHRcdHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuJiM0MztcdGludCBhZGRyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXR1cm4gX19tZGlvYnVzX2M0NV9yZWFkKGJ1cywgYWRkciwgZGV2bnVtLCByZWdudW0pO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZ2VucGh5X3BoeV9yZWFkX21tZCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X3BoeV93cml0ZV9tbWQgLSBIZWxwZXIgZm9yIHdyaXRpbmcgYSByZWdpc3RlciB3aXRob3V0IGxvY2tcbiYjNDM7ICogdG8gdGhlIGdpdmVuIE1NRCBhbmQgUEhZLlxuJiM0MzsgKiBAcGh5ZGV2OiBUaGUgcGh5X2RldmljZSBzdHJ1Y3RcbiYjNDM7ICogQGRldm51bTogVGhlIE1NRCB0byB3cml0ZSB0b1xuJiM0MzsgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byB3cml0ZVxuJiM0MzsgKiBAdmFsOiAgICBWYWx1ZSB0byB3cml0ZVxuJiM0MzsgKlxuJiM0MzsgKiBEZXNjcmlwdGlvbjogU2ltaWxhciB0byBnZW5waHlfcGh5X3JlYWRfbW1kXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7aW50IGdlbnBoeV9waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sXG4mIzQzO1x0XHRcdCB1MTYgcmVnbnVtLCB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbiYjNDM7XHRpbnQgYWRkciA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0dXJuIF9fbWRpb2J1c19jNDVfd3JpdGUoYnVzLCBhZGRyLCBkZXZudW0sIHJlZ251bSwgdmFsKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MKGdlbnBoeV9waHlfd3JpdGVfbW1kKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBnZW5waHlfbG9vcGJhY2tfZml4ZWRfc3BlZWQgLSBIZWxwZXIgdG8gbW9kaWZ5IHRoZSBQSFkgbG9vcGJhY2sgbW9kZVxuJiM0MzsgKiB3aXRob3V0IGFmZmVjdGluZyBhbnkgb3RoZXIgc2V0dGluZ3MuXG4mIzQzOyAqIEBwaHlkZXY6IFRoZSBwaHlfZGV2aWNlIHN0cnVjdFxuJiM0MzsgKiBAZW5hYmxlOiBGbGFnIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBQSFkgbGV2ZWwgbG9vcGJhY2suXG4mIzQzOyAqIEBzcGVlZDogU3BlZWQgc2V0dGluZy4gTm90IGV4cGVjdGVkIHRvIGJlIHNldC4gRXJyb3IgaWYgaXQgaXMgc2V0LlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIGlmIHN1Y2Nlc3NmdWwsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbiYjNDM7ICovXG4mIzQzO2ludCBnZW5waHlfbG9vcGJhY2tfZml4ZWRfc3BlZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsXG4mIzQzO1x0XHRcdFx0aW50IHNwZWVkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGVuYWJsZSBcdTAwMjZcdTAwMjYgc3BlZWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0ssXG4mIzQzO1x0XHRcdCAgZW5hYmxlID8gQk1DUl9MT09QQkFDSyA6IDApO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0woZ2VucGh5X2xvb3BiYWNrX2ZpeGVkX3NwZWVkKTtcbiYjNDM7XG4gaW50IGdlbnBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cmV0dXJuIHBoeV9zZXRfYml0cyhwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29hX3RjNi5oIGIvaW5jbHVkZS9saW51eC9vYV90YzYuaFxuaW5kZXggMTVmNThlM2M1NmM3NDAuLjE3YWMzZTA3NTFlMTIyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9vYV90YzYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9vYV90YzYuaFxuQEAgLTcsOCAmIzQzOzcsMjMgQEBcbiAgKiBBdXRob3I6IFBhcnRoaWJhbiBWZWVyYXNvb3JhbiBcdTAwM2NwYXJ0aGliYW4udmVlcmFzb29yYW5AbWljcm9jaGlwLmNvbVx1MDAzZVxuICAqL1xuIFxuJiM0MzsjaWZuZGVmIF9MSU5VWF9PQV9UQzZfSFxuJiM0MzsjZGVmaW5lIF9MSU5VWF9PQV9UQzZfSFxuJiM0MztcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3BpL3NwaS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuJiM0MztcbiYjNDM7LyogUEhZIOKAkyBDbGF1c2UgNDUgcmVnaXN0ZXJzIG1lbW9yeSBtYXAgc2VsZWN0b3IgKE1NUykgYXMgcGVyIHRhYmxlIDYgaW5cbiYjNDM7ICogdGhlIE9QRU4gQWxsaWFuY2Ugc3BlY2lmaWNhdGlvbi5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfTUFDX01NUzFcdFx0XHQxXHQvKiBObyBNTUQgKi9cbiYjNDM7I2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QQ1NfTU1TMlx0XHRcdDJcdC8qIE1NRCAzICovXG4mIzQzOyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE1BX1BNRF9NTVMzXHRcdDNcdC8qIE1NRCAxICovXG4mIzQzOyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0XHRcdDRcdC8qIE1NRCAzMSAqL1xuJiM0MzsjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X0FVVE9fTkVHX01NUzVcdFx0NVx0LyogTU1EIDcgKi9cbiYjNDM7I2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QT1dFUl9VTklUX01NUzZcdFx0Nlx0LyogTU1EIDEzICovXG4mIzQzOyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTJcdFx0XHQxMlx0LyogZm9yIHZlbmRvcnMgKi9cbiBcbiBzdHJ1Y3Qgb2FfdGM2O1xuIFxuQEAgLTIyLDMgJiM0MzszNywyNCBAQCBpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJzKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGFkZHJlc3MsIHUzMiB2YWx1ZVtdLFxuIFx0XHRcdCAgdTggbGVuZ3RoKTtcbiBuZXRkZXZfdHhfdCBvYV90YzZfc3RhcnRfeG1pdChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBvYV90YzZfemVyb19hbGlnbl9yZWNlaXZlX2ZyYW1lX2VuYWJsZShzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xuJiM0MztpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgYWRkcmVzcywgdTE2IG1tcyxcbiYjNDM7XHRcdFx0ICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpO1xuJiM0MztpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxuJiM0MztcdFx0XHQgICAgICB1MzIgdmFsdWUpO1xuJiM0MztpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxuJiM0MztcdFx0XHQgICAgICB1MzIgdmFsdWVbXSwgdTggbGVuZ3RoKTtcbiYjNDM7aW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxuJiM0MztcdFx0XHQgICAgIHUzMiAqdmFsdWUpO1xuJiM0MztpbnQgb2FfdGM2X3B0cF9yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyk7XG4mIzQzO2ludCBvYV90YzZfaW9jdGwoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTtcbiYjNDM7aW50IG9hX3RjNl9nZXRfdHNfaW5mbyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsXG4mIzQzO1x0XHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pO1xuJiM0Mzt2b2lkIG9hX3RjNl9od3RzdGFtcF9nZXQoc3RydWN0IG9hX3RjNiAqdGM2LFxuJiM0MztcdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XG4mIzQzO3ZvaWQgb2FfdGM2X2dldF90c19zdGF0cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsXG4mIzQzO1x0XHRcdCBzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqc3RhdHMpO1xuJiM0MztpbnQgb2FfdGM2X2h3dHN0YW1wX3NldChzdHJ1Y3Qgb2FfdGM2ICp0YzYsXG4mIzQzO1x0XHRcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpO1xuJiM0Mzt2b2lkIG9hX3RjNl9zZXRfdmVuZDFfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgaW50IG1tcyk7XG4mIzQzO3ZvaWQgb2FfdGM2X3B0cF91bnJlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNik7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfT0FfVEM2X0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggMTk5YTdhYWEzNDFiZmQuLjYxYmNkNzFhMzE0MzI0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHkuaFxuQEAgLTIzMDEsNiAmIzQzOzIzMDEsMTIgQEAgaW50IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZhZCxcbiBcdFx0XHRcdHUxNiByZWdudW0pO1xuIGludCBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaGRldiwgaW50IGRldm51bSxcbiBcdFx0XHRcdCB1MTYgcmVnbnVtLCB1MTYgdmFsKTtcbiYjNDM7aW50IGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSxcbiYjNDM7XHRcdFx0XHRpbnQgc3BlZWQpO1xuJiM0MztpbnQgZ2VucGh5X3BoeV93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSxcbiYjNDM7XHRcdFx0IHUxNiByZWdudW0sIHUxNiB2YWwpO1xuJiM0MztpbnQgZ2VucGh5X3BoeV9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2bnVtLFxuJiM0MztcdFx0XHR1MTYgcmVnbnVtKTtcbiBcbiAvKiBDbGF1c2UgMzcgKi9cbiBpbnQgZ2VucGh5X2MzN19jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOSAxMToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX09OU0VNSSYjMzQ7LAogICAgJiMzNDtTMjUwMF9NQUNQSFkmIzM0OywKICAgICYjMzQ7T0FfVEM2JiMzNDssCiAgICAmIzM0O05DTjI2MDAwX1BIWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MyNTAwX3Byb2JlJiMzNDssCiAgICAmIzM0O3MyNTAwX29wZW4mIzM0OywKICAgICYjMzQ7czI1MDBfaW9jdGwmIzM0OywKICAgICYjMzQ7czI1MDBfaHd0c3RhbXBfc2V0JiMzNDssCiAgICAmIzM0O3MyNTAwX3NldF9tdWx0aWNhc3RfbW9kZSYjMzQ7LAogICAgJiMzNDtzMjUwMF9wdHBfYWRqdGltZSYjMzQ7LAogICAgJiMzNDtvYV90YzZfaHd0c3RhbXBfc2V0JiMzNDssCiAgICAmIzM0O29hX3RjNl90c3RhbXBfaW9jdGwmIzM0OywKICAgICYjMzQ7b2FfdGM2X3B0cF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtuY24yNjAwMF9jNDVfcGxjYV9zZXRfY2ZnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1BJLWJhc2VkIGV0aGVybmV0IGRyaXZlciBmb3IgdGhlIG9uc2VtaSBTMjUwMCBNQUNQSFksIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIE9BIFRDNiBmcmFtZXdvcmssIGFuZCB1cGRhdGVzIHRoZSBOQ04yNjAwMCBQSFkgZHJpdmVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgUEhZIGRyaXZlcnMgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIHZpYSBldGh0b29sLCBuZXRsaW5rLCBhbmQgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYmQ1NTVjNzJkYTM2MzFjYTAzMWU5NDY1ZGQ1YjI4YzhkYmM3OGRiCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBKdWwgOSAxMToxODo0MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvb25ubixzMjUwMC55YW1sIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9vbm5uLHMyNTAwLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjExZWRmMTA1MDhkOWYzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9vbm5uLHMyNTAwLnlhbWwKQEAgLTAsMCAmIzQzOzEsNjcgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9vbm5uLHMyNTAwLnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IG9uc2VtaSBTMjUwMCAxMEJBU0UtVDFTIE1BQ1BIWSBFdGhlcm5ldCBDb250cm9sbGVycwomIzQzOwomIzQzO21haW50YWluZXJzOgomIzQzOyAgLSBQaWVyZ2lvcmdpbyBCZXJ1dG8gJmx0O3BpZXIuYmVydXRvQG9uc2VtaS5jb20mZ3Q7CiYjNDM7ICAtIFNlbHZhIFJhamFnb3BhbCAmbHQ7U2VsdmFtYW5pLlJhamFnb3BhbEBvbnNlbWkuY29tJmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOgomIzQzOyAgVGhlIFMyNTAwIGNvbWJpbmVzIGEgTWVkaWEgQWNjZXNzIENvbnRyb2xsZXIgKE1BQykgYW5kIGFuCiYjNDM7ICBFdGhlcm5ldCBQSFkgdG8gZW5hYmxlIDEwQkFTReKAkVQxUyBuZXR3b3Jrcy4gVGhlIEV0aGVybmV0IE1lZGlhIEFjY2VzcwomIzQzOyAgQ29udHJvbGxlciAoTUFDKSBtb2R1bGUgaW1wbGVtZW50cyBhIDEwIE1icHMgaGFsZiBkdXBsZXggRXRoZXJuZXQgTUFDLAomIzQzOyAgY29tcGF0aWJsZSB3aXRoIHRoZSBJRUVFIDgwMi4zIHN0YW5kYXJkIGFuZCBhIDEwQkFTRS1UMVMgcGh5c2ljYWwgbGF5ZXIKJiM0MzsgIHRyYW5zY2VpdmVyIGludGVncmF0ZWQgaW50byB0aGUgUzI1MDAuIFRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4KJiM0MzsgIHRoZSBob3N0IGFuZCB0aGUgTUFDLVBIWSBpcyBzcGVjaWZpZWQgaW4gdGhlIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeAomIzQzOyAgTUFDUEhZIFNlcmlhbCBJbnRlcmZhY2UgKFRDNikuCiYjNDM7CiYjNDM7YWxsT2Y6CiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjCiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL3NwaS9zcGktcGVyaXBoZXJhbC1wcm9wcy55YW1sIwomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBjb25zdDogb25ubixzMjUwMAomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgaW50ZXJydXB0czoKJiM0MzsgICAgZGVzY3JpcHRpb246CiYjNDM7ICAgICAgSW50ZXJydXB0IGZyb20gTUFDLVBIWSBhc3NlcnRlZCBpbiB0aGUgZXZlbnQgb2YgUmVjZWl2ZSBDaHVua3MKJiM0MzsgICAgICBBdmFpbGFibGUsIFRyYW5zbWl0IENodW5rIENyZWRpdHMgQXZhaWxhYmxlIGFuZCBFeHRlbmRlZCBTdGF0dXMKJiM0MzsgICAgICBFdmVudC4KJiM0MzsgICAgbWF4SXRlbXM6IDEKJiM0MzsKJiM0MzsgIHNwaS1tYXgtZnJlcXVlbmN5OgomIzQzOyAgICBtYXhpbXVtOiAyNTAwMDAwMAomIzQzOwomIzQzO3JlcXVpcmVkOgomIzQzOyAgLSBjb21wYXRpYmxlCiYjNDM7ICAtIHJlZwomIzQzOyAgLSBpbnRlcnJ1cHRzCiYjNDM7ICAtIHNwaS1tYXgtZnJlcXVlbmN5CiYjNDM7CiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZQomIzQzOwomIzQzO2V4YW1wbGVzOgomIzQzOyAgLSB8CiYjNDM7ICAgICNpbmNsdWRlICZsdDtkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaCZndDsKJiM0MzsgICAgc3BpIHsKJiM0MzsgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICBldGhlcm5ldEAwIHsKJiM0MzsgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O29ubm4sczI1MDAmIzM0OzsKJiM0MzsgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgIHBpbmN0cmwtbmFtZXMgPSAmIzM0O2RlZmF1bHQmIzM0OzsKJiM0MzsgICAgICAgIHBpbmN0cmwtMCA9ICZsdDsmYW1wO2V0aDBfcGlucyZndDs7CiYjNDM7ICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gJmx0OyZhbXA7Z3BpbyZndDs7CiYjNDM7ICAgICAgICBpbnRlcnJ1cHRzID0gJmx0OzI1IElSUV9UWVBFX0VER0VfRkFMTElORyZndDs7CiYjNDM7ICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9ICZsdDsxNTAwMDAwMCZndDs7CiYjNDM7ICAgICAgfTsKJiM0MzsgICAgfTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdAppbmRleCBmZTJhYWJkZTkyM2E1Ny4uMzI1ZDI5OWQxYTdkYzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QKQEAgLTE1Myw2ICYjNDM7MTUzLDEwIEBAIE9QRU4gQWxsaWFuY2UgVEM2IEZyYW1ld29yawogLSBGb3J3YXJkcyB0aGUgcmVjZWl2ZWQgRXRoZXJuZXQgZnJhbWUgZnJvbSAxMEJhc2UtVDF4IE1BQy1QSFkgdG8gbi93CiAgIHN1YnN5c3RlbS4KIAomIzQzOy0gSWYgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgZW5hYmxlZCwgdXBkYXRlcyBoYXJkd2FyZSB0aW1lc3RhbXAKJiM0MzsgIGluIHNrYiwgd2hlbiBpbmRpY2F0ZWQgYnkgb25lIG9mIHRoZSB0aHJlZSB0aW1lc3RhbXAgY2FwdHVyZSByZWdpc3RlcnMKJiM0MzsgIHRocm91Z2ggVFNDIGZpZWxkcyBvZiB0aGUgaGVhZGVyLgomIzQzOwogRGF0YSBUcmFuc2FjdGlvbgogfn5+fn5+fn5+fn5+fn5+fgogCkBAIC00OTUsMyAmIzQzOzQ5OSw3OSBAQCB0aGUgTUFDLVBIWS4KIFplcm8gYWxpZ24gcmVjZWl2ZSBmcmFtZSBmZWF0dXJlIGNhbiBiZSBlbmFibGVkIHRvIGFsaWduIGFsbCByZWNlaXZlIGV0aGVybmV0CiBmcmFtZXMgZGF0YSB0byBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFueSByZWNlaXZlIGRhdGEgY2h1bmsgcGF5bG9hZCB3aXRoIGEKIHN0YXJ0IHdvcmQgb2Zmc2V0IChTV08pIG9mIHplcm8uCiYjNDM7CiYjNDM7Li4gYzpmdW5jdGlvbjo6IGludCBvYV90YzZfcHRwX3JlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgXAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pOwomIzQzOwomIzQzO1JlZ2lzdGVycyB0aGUgUFRQIGhhcmR3YXJlIGNsb2NrIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGggdGhlIGtlcm5lbC4KJiM0MztUaGlzIEFQSSBzaW1wbHkgcmVnaXN0ZXJzLiBJbml0aWFsaXphdGlvbiBvZiB0aGUgZmllbGRzIGluIHRoZQomIzQzO3B0cF9jbG9ja19pbmZvIHN0cnVjdHVyZSBhcmUgbGVmdCB0byB0aGUgdmVuZG9yIGFzIHByb2dyYW1taW5nIGhhcmR3YXJlCiYjNDM7dGltZXIgaXMgZXhwZWN0ZWQgdG8gYmUgdmVuZG9yIGRlcGVuZGVudC4gVGhlIGZpZWxkcyBtYXhfYWRqLCBvd25lciwKJiM0MzthbmQgYWxsIHRoZSBmdW5jdGlvbnMgZm9yIHRoZSBjbG9jayBvcGVyYXRpb25zLCBsaWtlIGFkamZpbmUsIGdldHRpbWV4NjQsCiYjNDM7c2V0dGltZTY0LCBhZGp0aW1lIGFyZSBleHBlY3RlZCB0byBiZSBpbml0aWFsaXplZCBpbiB0aGUgc3RydWN0dXJlIGJlZm9yZQomIzQzO2NhbGxpbmcgdGhlIHJlZ2lzdGVyaW5nIHRoZSBoYXJkd2FyZSBjbG9jay4KJiM0MzsKJiM0MzsuLiBjOmZ1bmN0aW9uOjogdm9pZCBvYV90YzZfcHRwX3VucmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2KTsKJiM0MzsKJiM0MztVbnJlZ2lzdGVycyB0aGUgUFRQIGhhcmR3YXJlIGNsb2NrIHJlbGF0ZWQgY2FsbGJhY2tzLgomIzQzOwomIzQzOy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X2lvY3RsKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IGlmcmVxICpycSwgXAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbWQpOwomIzQzOwomIzQzO2lvY3RsIGludGVyZmFjZSB0byBoYW5kbGUgaGFyZHdhcmUgdGltZXN0YW1wIGFuZCBQSFkgcmVsYXRlZCBjb21tYW5kcy4KJiM0MzsKJiM0MzsuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl9nZXRfdHNfaW5mbyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7CiYjNDM7CiYjNDM7UHJvdmlkZXMgdGltZXN0YW1wIHJlbGF0ZWQgc2V0dGluZ3MgdGhhdCBhcmUgc3VwcG9ydGVkIHRvIGV0aHRvb2wuCiYjNDM7CiYjNDM7Li4gYzpmdW5jdGlvbjo6IHZvaWQgb2FfdGM2X2h3dHN0YW1wX2dldChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpOwomIzQzOwomIzQzO1JldHVybnMgaGFyZHdhcmUgdGltZXN0YW1wIGNvbmZpZ3VyYXRpb24uIFBhcnQgb2YgbmV0X2RldmljZV9vcHMgY2FsbGJhY2tzLgomIzQzOwomIzQzOy4uIGM6ZnVuY3Rpb246OiB2b2lkIG9hX3RjNl9nZXRfdHNfc3RhdHMoc3RydWN0IG9hX3RjNiAqdGM2LCBcCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpOwomIzQzOwomIzQzO1Byb3ZpZGVzIGhhcmR3YXJlIHRpbWVzdGFtcCByZWxhdGVkIHRyYWZmaWMgc3RhdGlzdGljcyBmb3IgZXRodG9vbC4KJiM0MzsKJiM0MzsuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl9od3RzdGFtcF9zZXQoc3RydWN0IG9hX3RjNiAqdGM2LCBcCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTsKJiM0MzsKJiM0MztIZWxwZXIgdG8gc2V0IGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uLiBQYXJ0IG9mIG5ldF9kZXZpY2Vfb3BzCiYjNDM7Y2FsbGJhY2tzLgomIzQzOwomIzQzOy4uIGM6ZnVuY3Rpb246OiB2b2lkIG9hX3RjNl9zZXRfdmVuZDFfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgaW50IG1tcyk7CiYjNDM7CiYjNDM7SGVscGVyIHRvIG1hcCBNRElPX01NRF9WRU5EMSBjb21tYW5kIHRvIHZlbmRvciBzcGVjaWZpYyBNZW1vcnkgTWFwIFNlbGVjdAomIzQzOyhNTVMpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIG9mZmVycyBmbGV4aWJpbGl0eSBmb3IgdmVuZG9ycyB0aGF0IG1heSBoYXZlCiYjNDM7dXNlZCBhbnkgTU1TIHZhbHVlIGJldHdlZW4gMTAgYW5kIDE1IGFzIGFsbG93ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uCiYjNDM7TURJT19NTURfVkVORDIgaXMgYWxyZWFkeSBtYXBwZWQgdG8gTU1TNCBpbiB0aGUgT0EgVEM2IGZyYW1lIHdvcmsgY29kZS4KJiM0MzsKJiM0MzsuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgXAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHUxNiBtbXMsIFwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpOwomIzQzOwomIzQzO1dyaXRpbmcgbXVsdGlwbGUgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gQGFkZHJlc3MgZm9yIHRoZQomIzQzO2dpdmVuIEBtbXMgbWVtb3J5IG1hcCBzZWxlY3RvciBpbiB0aGUgTUFDLVBIWS4gTWF4aW11bSBvZiAxMjggY29uc2VjdXRpdmUKJiM0MztyZWdpc3RlcnMgY2FuIGJlIHdyaXR0ZW4gc3RhcnRpbmcgYXQgQGFkZHJlc3MuCiYjNDM7CiYjNDM7Li4gYzpmdW5jdGlvbjo6IGludCBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgXAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTE2IG1tcywgXAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgdmFsdWUpOwomIzQzOwomIzQzO1dyaXRlIGEgc2luZ2xlIHJlZ2lzdGVyIGFkZHJlc3NlZCBieSBAYWRkcmVzcyBhbmQgQG1tcyBpbiB0aGUgTUFDLVBIWS4KJiM0MzsKJiM0MzsuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBcCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1MTYgbW1zLCBcCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpOwomIzQzOwomIzQzO1JlYWRpbmcgbXVsdGlwbGUgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gQGFkZHJlc3MgZm9yIHRoZQomIzQzO2dpdmVuIEBtbXMgbWVtb3J5IG1hcCBzZWxlY3RvciB2YWx1ZSwgaW4gdGhlIE1BQy1QSFkuIE1heGltdW0gb2YgMTI4CiYjNDM7Y29uc2VjdXRpdmUgcmVnaXN0ZXJzIGNhbiBiZSByZWFkIHN0YXJ0aW5nIGF0IEBhZGRyZXNzLgomIzQzOwomIzQzOy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgXAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1MTYgbW1zLCBcCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICp2YWx1ZSk7CiYjNDM7CiYjNDM7UmVhZCBhIHNpbmdsZSByZWdpc3RlciBhZGRyZXNzZWQgYnkgQGFkZHJlc3MgYW5kIEBtbXMgaW4gdGhlIE1BQy1QSFkuCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IDUyZjFhNTVlY2E5OWJmLi45NThiOWY2MWUzNjQxOCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIwMTgyLDEyICYjNDM7MjAxODIsMjAgQEAgUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9taXBzL2Jvb3QvZHRzL3JhbGluay9vbWVnYTJwLmR0cwogCiBPTlNFTUkgRVRIRVJORVQgUEhZIERSSVZFUlMKLU06CVBpZXJnaW9yZ2lvIEJlcnV0byAmbHQ7cGllcmdpb3JnaW8uYmVydXRvQGdtYWlsLmNvbSZndDsKJiM0MztNOglQaWVyZ2lvcmdpbyBCZXJ1dG8gJmx0O3BpZXIuYmVydXRvQG9uc2VtaS5jb20mZ3Q7CiYjNDM7TToJU2VsdmEgUmFqYWdvcGFsICZsdDtzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb20mZ3Q7CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIFc6CWh0dHA6Ly93d3cub25zZW1pLmNvbQogRjoJZHJpdmVycy9uZXQvcGh5L25jbioKIAomIzQzO09OU0VNSSBTMjUwMCAxMEJBU0UtVDFTIE1BQ1BIWSBFVEhFUk5FVCBEUklWRVIKJiM0MztNOglTZWx2YSBSYWphZ29wYWwgJmx0O3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbSZndDsKJiM0MztMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiYjNDM7UzoJU3VwcG9ydGVkCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9vbm5uLHMyNTAwLnlhbWwKJiM0MztGOglkcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfKgomIzQzOwogT1AtVEVFIERSSVZFUgogTToJSmVucyBXaWtsYW5kZXIgJmx0O2plbnMud2lrbGFuZGVyQGxpbmFyby5vcmcmZ3Q7CiBMOglvcC10ZWVAbGlzdHMudHJ1c3RlZGZpcm13YXJlLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC0yMDIwOSwxMCAmIzQzOzIwMjE3LDExIEBAIEY6CWRyaXZlcnMvcnRjL3J0Yy1vcHRlZS5jCiAKIE9QRU4gQUxMSUFOQ0UgMTBCQVNFLVQxUyBNQUNQSFkgU0VSSUFMIElOVEVSRkFDRSBGUkFNRVdPUksKIE06CVBhcnRoaWJhbiBWZWVyYXNvb3JhbiAmbHQ7cGFydGhpYmFuLnZlZXJhc29vcmFuQG1pY3JvY2hpcC5jb20mZ3Q7CiYjNDM7TToJU2VsdmEgUmFqYWdvcGFsICZsdDtzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb20mZ3Q7ICh0aW1lc3RhbXAgc3VwcG9ydCkKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdAotRjoJZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMKJiM0MztGOglkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2KgogRjoJaW5jbHVkZS9saW51eC9vYV90YzYuaAogCiBPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnCmluZGV4IDc4Yzc5YWQ3YmJhNTUzLi4yNzQwMmE1OTJiMjk0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnCkBAIC0xMzQsNyAmIzQzOzEzNCw5IEBAIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L25ldHJvbm9tZS9LY29uZmlnJiMzNDsKIHNvdXJjZSAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0LzgzOTAvS2NvbmZpZyYjMzQ7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvS2NvbmZpZyYjMzQ7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9ueHAvS2NvbmZpZyYjMzQ7CiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvb2tpLXNlbWkvS2NvbmZpZyYjMzQ7CiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL0tjb25maWcmIzM0OwogCiBjb25maWcgRVRIT0MKIAl0cmlzdGF0ZSAmIzM0O09wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMgc3VwcG9ydCYjMzQ7CkBAIC0xNDYsMTcgJiM0MzsxNDgsNiBAQCBjb25maWcgRVRIT0MKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgT3BlbkNvcmVzIDEwLzEwMCBNYnBzIEV0aGVybmV0IE1BQy4KIAotY29uZmlnIE9BX1RDNgotCXRyaXN0YXRlICYjMzQ7T1BFTiBBbGxpYW5jZSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZIHN1cHBvcnQmIzM0OyBpZiBDT01QSUxFX1RFU1QKLQlkZXBlbmRzIG9uIFNQSQotCXNlbGVjdCBQSFlMSUIKLQloZWxwCi0JICBUaGlzIGxpYnJhcnkgaW1wbGVtZW50cyBPUEVOIEFsbGlhbmNlIFRDNiAxMEJBU0UtVDF4IE1BQy1QSFkKLQkgIFNlcmlhbCBJbnRlcmZhY2UgcHJvdG9jb2wgZm9yIHN1cHBvcnRpbmcgMTBCQVNFLVQxeCBNQUMtUEhZcy4KLQotCSAgVG8ga25vdyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgcmVmZXIgZG9jdW1lbnRhdGlvbiBpbgotCSAgJmx0O2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0Jmd0Oy4KLQogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcGFzZW1pL0tjb25maWcmIzM0Owogc291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZyYjMzQ7CiBzb3VyY2UgJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvS2NvbmZpZyYjMzQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlCmluZGV4IGJiYTU1ZDlhZjM4NzcwLi43N2IxMWQ1YTdhYmYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGUKQEAgLTcxLDYgJiM0Mzs3MSw3IEBAIG9iai0kKENPTkZJR19ORVRfVkVORE9SX05FVFJPTk9NRSkgJiM0Mzs9IG5ldHJvbm9tZS8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX05JKSAmIzQzOz0gbmkvCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9OVklESUEpICYjNDM7PSBudmlkaWEvCiBvYmotJChDT05GSUdfTFBDX0VORVQpICYjNDM7PSBueHAvCiYjNDM7b2JqLSQoQ09ORklHX09BX1RDNikgJiM0Mzs9IG9hX3RjNi8KIG9iai0kKENPTkZJR19ORVRfVkVORE9SX09LSSkgJiM0Mzs9IG9raS1zZW1pLwogb2JqLSQoQ09ORklHX0VUSE9DKSAmIzQzOz0gZXRob2Mubwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEFTRU1JKSAmIzQzOz0gcGFzZW1pLwpAQCAtMTA0LDQgJiM0MzsxMDUsMyBAQCBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSUxJTlgpICYjNDM7PSB4aWxpbngvCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT00pICYjNDM7PSB4aXJjb20vCiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgJiM0Mzs9IHN5bm9wc3lzLwogb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICYjNDM7PSBwZW5zYW5kby8KLW9iai0kKENPTkZJR19PQV9UQzYpICYjNDM7PSBvYV90YzYubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jCmluZGV4IDAyNzdkOTczNzM2OWFkLi4zYjU1NWVlNjk4MDQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguYwpAQCAtMTMsMjcgJiM0MzsxMywyNyBAQAogI2RlZmluZSBEUlZfTkFNRQkJCSYjMzQ7bGFuODY1MCYjMzQ7CiAKIC8qIE1BQyBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwJCTB4MDAwMTAwMDAKJiM0MzsjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMCQkweDAKICNkZWZpbmUgTUFDX05FVF9DVExfVFhFTgkJQklUKDMpIC8qIFRyYW5zbWl0IEVuYWJsZSAqLwogI2RlZmluZSBNQUNfTkVUX0NUTF9SWEVOCQlCSVQoMikgLyogUmVjZWl2ZSBFbmFibGUgKi8KIAogLyogTUFDIE5ldHdvcmsgQ29uZmlndXJhdGlvbiBSZWcgKi8KLSNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX05FVF9DRkcJCTB4MDAwMTAwMDEKJiM0MzsjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19ORVRfQ0ZHCQkweDEKICNkZWZpbmUgTUFDX05FVF9DRkdfUFJPTUlTQ1VPVVNfTU9ERQlCSVQoNCkKICNkZWZpbmUgTUFDX05FVF9DRkdfTVVMVElDQVNUX01PREUJQklUKDYpCiAjZGVmaW5lIE1BQ19ORVRfQ0ZHX1VOSUNBU1RfTU9ERQlCSVQoNykKIAogLyogTUFDIEhhc2ggUmVnaXN0ZXIgQm90dG9tICovCi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19MX0hBU0gJCTB4MDAwMTAwMjAKJiM0MzsjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19MX0hBU0gJCTB4MjAKIC8qIE1BQyBIYXNoIFJlZ2lzdGVyIFRvcCAqLwotI2RlZmluZSBMQU44NjVYX1JFR19NQUNfSF9IQVNICQkweDAwMDEwMDIxCiYjNDM7I2RlZmluZSBMQU44NjVYX1JFR19NQUNfSF9IQVNICQkweDIxCiAvKiBNQUMgU3BlY2lmaWMgQWRkciAxIEJvdHRvbSBSZWcgKi8KLSNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0xfU0FERFIxCTB4MDAwMTAwMjIKJiM0MzsjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19MX1NBRERSMQkweDIyCiAvKiBNQUMgU3BlY2lmaWMgQWRkciAxIFRvcCBSZWcgKi8KLSNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0hfU0FERFIxCTB4MDAwMTAwMjMKJiM0MzsjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19IX1NBRERSMQkweDIzCiAKIC8qIE1BQyBUU1UgVGltZXIgSW5jcmVtZW50IFJlZ2lzdGVyICovCi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19UU1VfVElNRVJfSU5DUgkJMHgwMDAxMDA3NwomIzQzOyNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX1RTVV9USU1FUl9JTkNSCQkweDc3CiAjZGVmaW5lIE1BQ19UU1VfVElNRVJfSU5DUl9DT1VOVF9OQU5PU0VDT05EUwkweDAwMjgKIAogc3RydWN0IGxhbjg2NXhfcHJpdiB7CkBAIC00OSw3ICYjNDM7NDksOCBAQCBzdGF0aWMgaW50IGxhbjg2NXhfc2V0X2h3X21hY2FkZHJfbG93X2J5dGVzKHN0cnVjdCBvYV90YzYgKnRjNiwgY29uc3QgdTggKm1hYykKIAogCXJlZ3ZhbCA9IChtYWNbM10gJmx0OyZsdDsgMjQpIHwgKG1hY1syXSAmbHQ7Jmx0OyAxNikgfCAobWFjWzFdICZsdDsmbHQ7IDgpIHwgbWFjWzBdOwogCi0JcmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIExBTjg2NVhfUkVHX01BQ19MX1NBRERSMSwgcmVndmFsKTsKJiM0MzsJcmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXModGM2LCBMQU44NjVYX1JFR19NQUNfTF9TQUREUjEsCiYjNDM7CQkJCQkgT0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIHJlZ3ZhbCk7CiB9CiAKIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfaHdfbWFjYWRkcihzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2LCBjb25zdCB1OCAqbWFjKQpAQCAtNjUsOCAmIzQzOzY2LDggQEAgc3RhdGljIGludCBsYW44NjV4X3NldF9od19tYWNhZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYsIGNvbnN0IHU4ICptYWMpCiAKIAkvKiBQcmVwYXJlIGFuZCBjb25maWd1cmUgTUFDIGFkZHJlc3MgaGlnaCBieXRlcyAqLwogCXJlZ3ZhbCA9IChtYWNbNV0gJmx0OyZsdDsgOCkgfCBtYWNbNF07Ci0JcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX0hfU0FERFIxLAotCQkJCSAgICByZWd2YWwpOwomIzQzOwlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX0hfU0FERFIxLAomIzQzOwkJCQkJT0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIHJlZ3ZhbCk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCkBAIC0xNDYsMTQgJiM0MzsxNDcsMTYgQEAgc3RhdGljIGludCBsYW44NjV4X3NldF9zcGVjaWZpY19tdWx0aWNhc3RfYWRkcihzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2KQogCX0KIAogCS8qIEVuYWJsaW5nIHNwZWNpZmljIG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KLQlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIocHJpdi0mZ3Q7dGM2LCBMQU44NjVYX1JFR19NQUNfSF9IQVNILCBoYXNoX2hpKTsKJiM0MzsJcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19IX0hBU0gsCiYjNDM7CQkJCQlPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgaGFzaF9oaSk7CiAJaWYgKHJldCkgewogCQluZXRkZXZfZXJyKHByaXYtJmd0O25ldGRldiwgJiMzNDtGYWlsZWQgdG8gd3JpdGUgcmVnX2hhc2hoOiAlZFxuJiMzNDssCiAJCQkgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19MX0hBU0gsIGhhc2hfbG8pOwomIzQzOwlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCwKJiM0MzsJCQkJCU9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCBoYXNoX2xvKTsKIAlpZiAocmV0KQogCQluZXRkZXZfZXJyKHByaXYtJmd0O25ldGRldiwgJiMzNDtGYWlsZWQgdG8gd3JpdGUgcmVnX2hhc2hsOiAlZFxuJiMzNDssCiAJCQkgICByZXQpOwpAQCAtMTY2LDE2ICYjNDM7MTY5LDE2IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfYWxsX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpCiAJaW50IHJldDsKIAogCS8qIEVuYWJsaW5nIGFsbCBtdWx0aWNhc3QgYWRkcmVzc2VzICovCi0JcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCwKLQkJCQkgICAgMHhmZmZmZmZmZik7CiYjNDM7CXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCBMQU44NjVYX1JFR19NQUNfSF9IQVNILAomIzQzOwkJCQkJT0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIDB4ZmZmZmZmZmYpOwogCWlmIChyZXQpIHsKIAkJbmV0ZGV2X2Vycihwcml2LSZndDtuZXRkZXYsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNoaDogJWRcbiYjMzQ7LAogCQkJICAgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIocHJpdi0mZ3Q7dGM2LCBMQU44NjVYX1JFR19NQUNfTF9IQVNILAotCQkJCSAgICAweGZmZmZmZmZmKTsKJiM0MzsJcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19MX0hBU0gsCiYjNDM7CQkJCQlPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgMHhmZmZmZmZmZik7CiAJaWYgKHJldCkKIAkJbmV0ZGV2X2Vycihwcml2LSZndDtuZXRkZXYsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNobDogJWRcbiYjMzQ7LAogCQkJICAgcmV0KTsKQEAgLTE4NywxNCAmIzQzOzE5MCwxNiBAQCBzdGF0aWMgaW50IGxhbjg2NXhfY2xlYXJfYWxsX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19IX0hBU0gsIDApOwomIzQzOwlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCwKJiM0MzsJCQkJCU9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCAwKTsKIAlpZiAocmV0KSB7CiAJCW5ldGRldl9lcnIocHJpdi0mZ3Q7bmV0ZGV2LCAmIzM0O0ZhaWxlZCB0byB3cml0ZSByZWdfaGFzaGg6ICVkXG4mIzM0OywKIAkJCSAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCwgMCk7CiYjNDM7CXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCBMQU44NjVYX1JFR19NQUNfTF9IQVNILAomIzQzOwkJCQkJT0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIDApOwogCWlmIChyZXQpCiAJCW5ldGRldl9lcnIocHJpdi0mZ3Q7bmV0ZGV2LCAmIzM0O0ZhaWxlZCB0byB3cml0ZSByZWdfaGFzaGw6ICVkXG4mIzM0OywKIAkJCSAgIHJldCk7CkBAIC0yMzUsNyAmIzQzOzI0MCw4IEBAIHN0YXRpYyB2b2lkIGxhbjg2NXhfbXVsdGljYXN0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAJCWlmIChsYW44NjV4X2NsZWFyX2FsbF9tdWx0aWNhc3RfYWRkcihwcml2KSkKIAkJCXJldHVybjsKIAl9Ci0JcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DRkcsIHJlZ3ZhbCk7CiYjNDM7CXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NGRywKJiM0MzsJCQkJCU9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCByZWd2YWwpOwogCWlmIChyZXQpCiAJCW5ldGRldl9lcnIocHJpdi0mZ3Q7bmV0ZGV2LCAmIzM0O0ZhaWxlZCB0byBlbmFibGUgcHJvbWlzY3VvdXMvbXVsdGljYXN0L25vcm1hbCBtb2RlOiAlZFxuJiMzNDssCiAJCQkgICByZXQpOwpAQCAtMjYwLDEyICYjNDM7MjY2LDE0IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9od19kaXNhYmxlKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpCiB7CiAJdTMyIHJlZ3ZhbDsKIAotCWlmIChvYV90YzZfcmVhZF9yZWdpc3Rlcihwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLCAmYW1wO3JlZ3ZhbCkpCiYjNDM7CWlmIChvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NUTCwKJiM0MzsJCQkJICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgJmFtcDtyZWd2YWwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJlZ3ZhbCAmYW1wOz0gfihNQUNfTkVUX0NUTF9UWEVOIHwgTUFDX05FVF9DVExfUlhFTik7CiAKLQlpZiAob2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsIHJlZ3ZhbCkpCiYjNDM7CWlmIChvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsCiYjNDM7CQkJCSAgICAgIE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCByZWd2YWwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJldHVybiAwOwpAQCAtMjkxLDEyICYjNDM7Mjk5LDE0IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9od19lbmFibGUoc3RydWN0IGxhbjg2NXhfcHJpdiAqcHJpdikKIHsKIAl1MzIgcmVndmFsOwogCi0JaWYgKG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHByaXYtJmd0O3RjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsICZhbXA7cmVndmFsKSkKJiM0MzsJaWYgKG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLAomIzQzOwkJCQkgICAgIE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCAmYW1wO3JlZ3ZhbCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcmVndmFsIHw9IE1BQ19ORVRfQ1RMX1RYRU4gfCBNQUNfTkVUX0NUTF9SWEVOOwogCi0JaWYgKG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLCByZWd2YWwpKQomIzQzOwlpZiAob2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLAomIzQzOwkJCQkgICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgcmVndmFsKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyZXR1cm4gMDsKQEAgLTM1OSw4ICYjNDM7MzY5LDkgQEAgc3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiAJICogc3RhbXBpbmcgYXQgdGhlIGVuZCBvZiB0aGUgU3RhcnQgb2YgRnJhbWUgRGVsaW1pdGVyIChTRkQpIGFuZCBzZXQgdGhlCiAJICogVGltZXIgSW5jcmVtZW50IHJlZyB0byA0MCBucyB0byBiZSB1c2VkIGFzIGEgMjUgTUh6IGludGVybmFsIGNsb2NrLgogCSAqLwotCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19UU1VfVElNRVJfSU5DUiwKLQkJCQkgICAgTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTKTsKJiM0MzsJcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsIExBTjg2NVhfUkVHX01BQ19UU1VfVElNRVJfSU5DUiwKJiM0MzsJCQkJCU9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLAomIzQzOwkJCQkJTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoJmFtcDtzcGktJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gY29uZmlnIFRTVSBUaW1lciBJbmNyIHJlZzogJWRcbiYjMzQ7LAogCQkJcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjk3MzQ1ZjM0NWZiOWYyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTYgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBPQSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZIGNvbmZpZ3VyYXRpb24KJiM0MzsjCiYjNDM7CiYjNDM7Y29uZmlnIE9BX1RDNgomIzQzOwl0cmlzdGF0ZSAmIzM0O09QRU4gQWxsaWFuY2UgVEM2IDEwQkFTRS1UMXggTUFDLVBIWSBzdXBwb3J0JiMzNDsKJiM0MzsJZGVwZW5kcyBvbiBTUEkKJiM0MzsJc2VsZWN0IFBIWUxJQgomIzQzOwloZWxwCiYjNDM7CSAgVGhpcyBsaWJyYXJ5IGltcGxlbWVudHMgT1BFTiBBbGxpYW5jZSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZCiYjNDM7CSAgU2VyaWFsIEludGVyZmFjZSBwcm90b2NvbCBmb3Igc3VwcG9ydGluZyAxMEJBU0UtVDF4IE1BQy1QSFlzLgomIzQzOwomIzQzOwkgIFRvIGtub3cgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHJlZmVyIGRvY3VtZW50YXRpb24gaW4KJiM0MzsJICAmbHQ7ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QmZ3Q7LgomIzQzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NjRmNjY4ZWZjMmQzYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9NYWtlZmlsZQpAQCAtMCwwICYjNDM7MSw3IEBACiYjNDM7IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7IwomIzQzOyMgTWFrZWZpbGUgZm9yIE9BIFRDNiAxMEJBU0UtVDF4IE1BQy1QSFkKJiM0MzsjCiYjNDM7CiYjNDM7b2JqLSQoQ09ORklHX09BX1RDNikgOj0gb2FfdGM2X21vZC5vCiYjNDM7b2FfdGM2X21vZC1vYmpzIDo9IG9hX3RjNi5vIG9hX3RjNl9wdHAubyBvYV90YzZfdHN0YW1wLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNi5jCnNpbWlsYXJpdHkgaW5kZXggNzklCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2LmMKaW5kZXggMDcyN2Q1MzM0NWEzM2IuLmQ0ZTk0NzI0ZjY0OTEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2LmMKQEAgLTEyLDE0OSAmIzQzOzEyLDE1IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvb2FfdGM2LmgmZ3Q7CiAKLS8qIE9QRU4gQWxsaWFuY2UgVEM2IHJlZ2lzdGVycyAqLwotLyogU3RhbmRhcmQgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE9BX1RDNl9SRUdfU1REQ0FQCQkJMHgwMDAyCi0jZGVmaW5lIFNURENBUF9ESVJFQ1RfUEhZX1JFR19BQ0NFU1MJCUJJVCg4KQotCi0vKiBSZXNldCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgT0FfVEM2X1JFR19SRVNFVAkJCTB4MDAwMwotI2RlZmluZSBSRVNFVF9TV1JFU0VUCQkJCUJJVCgwKQkvKiBTb2Z0d2FyZSBSZXNldCAqLwotCi0vKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICMwICovCi0jZGVmaW5lIE9BX1RDNl9SRUdfQ09ORklHMAkJCTB4MDAwNAotI2RlZmluZSBDT05GSUcwX1NZTkMJCQkJQklUKDE1KQotI2RlZmluZSBDT05GSUcwX1pBUkZFX0VOQUJMRQkJCUJJVCgxMikKLQotLyogU3RhdHVzIFJlZ2lzdGVyICMwICovCi0jZGVmaW5lIE9BX1RDNl9SRUdfU1RBVFVTMAkJCTB4MDAwOAotI2RlZmluZSBTVEFUVVMwX1JFU0VUQwkJCQlCSVQoNikJLyogUmVzZXQgQ29tcGxldGUgKi8KLSNkZWZpbmUgU1RBVFVTMF9IRUFERVJfRVJST1IJCQlCSVQoNSkKLSNkZWZpbmUgU1RBVFVTMF9MT1NTX09GX0ZSQU1FX0VSUk9SCQlCSVQoNCkKLSNkZWZpbmUgU1RBVFVTMF9SWF9CVUZGRVJfT1ZFUkZMT1dfRVJST1IJQklUKDMpCi0jZGVmaW5lIFNUQVRVUzBfVFhfUFJPVE9DT0xfRVJST1IJCUJJVCgwKQotCi0vKiBCdWZmZXIgU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIE9BX1RDNl9SRUdfQlVGRkVSX1NUQVRVUwkJMHgwMDBCCi0jZGVmaW5lIEJVRkZFUl9TVEFUVVNfVFhfQ1JFRElUU19BVkFJTEFCTEUJR0VOTUFTSygxNSwgOCkKLSNkZWZpbmUgQlVGRkVSX1NUQVRVU19SWF9DSFVOS1NfQVZBSUxBQkxFCUdFTk1BU0soNywgMCkKLQotLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgIzAgKi8KLSNkZWZpbmUgT0FfVEM2X1JFR19JTlRfTUFTSzAJCQkweDAwMEMKLSNkZWZpbmUgSU5UX01BU0swX0hFQURFUl9FUlJfTUFTSwkJQklUKDUpCi0jZGVmaW5lIElOVF9NQVNLMF9MT1NTX09GX0ZSQU1FX0VSUl9NQVNLCUJJVCg0KQotI2RlZmluZSBJTlRfTUFTSzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUl9NQVNLCUJJVCgzKQotI2RlZmluZSBJTlRfTUFTSzBfVFhfUFJPVE9DT0xfRVJSX01BU0sJCUJJVCgwKQotI2RlZmluZSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFMgICAgICAgICAgICAgICAgKEdFTk1BU0soNSwgMCkgfCBcCi0JCQkJCQkgR0VOTUFTSygxMiwgNykpCi0KLS8qIFBIWSBDbGF1c2UgMjIgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyBhbmQgbWFzayAqLwotI2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFCQkweEZGMDAKLSNkZWZpbmUgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfTUFTSwkJMHgxRgotCi0vKiBDb250cm9sIGNvbW1hbmQgaGVhZGVyICovCi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9EQVRBX05PVF9DVFJMCUJJVCgzMSkKLSNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1dSSVRFX05PVF9SRUFECUJJVCgyOSkKLSNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX01FTV9NQVBfU0VMRUNUT1IJR0VOTUFTSygyNywgMjQpCi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9BRERSCQkJR0VOTUFTSygyMywgOCkKLSNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0xFTkdUSAkJR0VOTUFTSyg3LCAxKQotI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfUEFSSVRZCQlCSVQoMCkKLQotLyogRGF0YSBoZWFkZXIgKi8KLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0RBVEFfTk9UX0NUUkwJQklUKDMxKQotI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRAkJQklUKDIxKQotI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfVkFMSUQJCUJJVCgyMCkKLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1dPUkRfT0ZGU0VUCUdFTk1BU0soMTksIDE2KQotI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfRU5EX1ZBTElECQlCSVQoMTQpCi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9FTkRfQllURV9PRkZTRVQJR0VOTUFTSygxMywgOCkKLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1BBUklUWQkJQklUKDApCi0KLS8qIERhdGEgZm9vdGVyICovCi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFMJCUJJVCgzMSkKLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JYRF9IRUFERVJfQkFECUJJVCgzMCkKLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0NPTkZJR19TWU5DCQlCSVQoMjkpCi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SWF9DSFVOS1MJCUdFTk1BU0soMjgsIDI0KQotI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfREFUQV9WQUxJRAkJQklUKDIxKQotI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfU1RBUlRfVkFMSUQJCUJJVCgyMCkKLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1dPUkRfT0ZGU0VUCUdFTk1BU0soMTksIDE2KQotI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfRU5EX1ZBTElECQlCSVQoMTQpCi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfQllURV9PRkZTRVQJR0VOTUFTSygxMywgOCkKLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1RYX0NSRURJVFMJCUdFTk1BU0soNSwgMSkKLQotLyogUEhZIOKAkyBDbGF1c2UgNDUgcmVnaXN0ZXJzIG1lbW9yeSBtYXAgc2VsZWN0b3IgKE1NUykgYXMgcGVyIHRhYmxlIDYgaW4gdGhlCi0gKiBPUEVOIEFsbGlhbmNlIHNwZWNpZmljYXRpb24uCi0gKi8KLSNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUENTX01NUzIJCQkyCS8qIE1NRCAzICovCi0jZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1BNQV9QTURfTU1TMwkJMwkvKiBNTUQgMSAqLwotI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQJCTQJLyogTU1EIDMxICovCi0jZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X0FVVE9fTkVHX01NUzUJCTUJLyogTU1EIDcgKi8KLSNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE9XRVJfVU5JVF9NTVM2CQk2CS8qIE1NRCAxMyAqLwotCi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9TSVpFCQkJNAotI2RlZmluZSBPQV9UQzZfQ1RSTF9SRUdfVkFMVUVfU0laRQkJNAotI2RlZmluZSBPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkUJCTQKLSNkZWZpbmUgT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSUwkJMTI4Ci0jZGVmaW5lIE9BX1RDNl9DVFJMX1NQSV9CVUZfU0laRQkJKE9BX1RDNl9DVFJMX0hFQURFUl9TSVpFICYjNDM7XAotCQkJCQkJKE9BX1RDNl9DVFJMX01BWF9SRUdJU1RFUlMgKlwKLQkJCQkJCU9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFKSAmIzQzO1wKLQkJCQkJCU9BX1RDNl9DVFJMX0lHTk9SRURfU0laRSkKLSNkZWZpbmUgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRQkJNjQKLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NJWkUJCQk0Ci0jZGVmaW5lIE9BX1RDNl9DSFVOS19TSVpFCQkJKE9BX1RDNl9EQVRBX0hFQURFUl9TSVpFICYjNDM7XAotCQkJCQkJT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSkKLSNkZWZpbmUgT0FfVEM2X01BWF9UWF9DSFVOS1MJCQk0OAotI2RlZmluZSBPQV9UQzZfU1BJX0RBVEFfQlVGX1NJWkUJCShPQV9UQzZfTUFYX1RYX0NIVU5LUyAqXAotCQkJCQkJT0FfVEM2X0NIVU5LX1NJWkUpCi0jZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfREVMQVkJCTEwMDAKLSNkZWZpbmUgU1RBVFVTMF9SRVNFVENfUE9MTF9USU1FT1VUCQkxMDAwMDAwCi0KLS8qIEludGVybmFsIHN0cnVjdHVyZSBmb3IgTUFDLVBIWSBkcml2ZXJzICovCi1zdHJ1Y3Qgb2FfdGM2IHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7Ci0Jc3RydWN0IG1paV9idXMgKm1kaW9idXM7Ci0Jc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKLQlzdHJ1Y3QgbXV0ZXggc3BpX2N0cmxfbG9jazsgLyogUHJvdGVjdHMgc3BpIGNvbnRyb2wgdHJhbnNmZXIgKi8KLQlzcGlubG9ja190IHR4X3NrYl9sb2NrOyAvKiBQcm90ZWN0cyB0eCBza2IgaGFuZGxpbmcgKi8KLQl2b2lkICpzcGlfY3RybF90eF9idWY7Ci0Jdm9pZCAqc3BpX2N0cmxfcnhfYnVmOwotCXZvaWQgKnNwaV9kYXRhX3R4X2J1ZjsKLQl2b2lkICpzcGlfZGF0YV9yeF9idWY7Ci0Jc3RydWN0IHNrX2J1ZmYgKm9uZ29pbmdfdHhfc2tiOwotCXN0cnVjdCBza19idWZmICp3YWl0aW5nX3R4X3NrYjsKLQlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiOwotCXUxNiB0eF9za2Jfb2Zmc2V0OwotCXUxNiBzcGlfZGF0YV90eF9idWZfb2Zmc2V0OwotCXUxNiB0eF9jcmVkaXRzOwotCXU4IHJ4X2NodW5rc19hdmFpbGFibGU7Ci0JYm9vbCByeF9idWZfb3ZlcmZsb3c7Ci0JYm9vbCBpbnRfZmxhZzsKLQlib29sIGRpc2FibGVfdHJhZmZpYzsKLX07Ci0KLWVudW0gb2FfdGM2X2hlYWRlcl90eXBlIHsKLQlPQV9UQzZfQ1RSTF9IRUFERVIsCi0JT0FfVEM2X0RBVEFfSEVBREVSLAotfTsKLQotZW51bSBvYV90YzZfcmVnaXN0ZXJfb3AgewotCU9BX1RDNl9DVFJMX1JFR19SRUFEID0gMCwKLQlPQV9UQzZfQ1RSTF9SRUdfV1JJVEUgPSAxLAotfTsKLQotZW51bSBvYV90YzZfZGF0YV92YWxpZF9pbmZvIHsKLQlPQV9UQzZfREFUQV9JTlZBTElELAotCU9BX1RDNl9EQVRBX1ZBTElELAotfTsKJiM0MzsjaW5jbHVkZSAmIzM0O29hX3RjNl9zdGRfZGVmLmgmIzM0OwogCi1lbnVtIG9hX3RjNl9kYXRhX3N0YXJ0X3ZhbGlkX2luZm8gewotCU9BX1RDNl9EQVRBX1NUQVJUX0lOVkFMSUQsCi0JT0FfVEM2X0RBVEFfU1RBUlRfVkFMSUQsCiYjNDM7c3RydWN0IG9hX3RjNl90c19pbmZvX3J4IHsKJiM0MzsJYm9vbCBydHNhOwomIzQzOwlib29sIHJ0c3A7CiB9OwogCi1lbnVtIG9hX3RjNl9kYXRhX2VuZF92YWxpZF9pbmZvIHsKLQlPQV9UQzZfREFUQV9FTkRfSU5WQUxJRCwKLQlPQV9UQzZfREFUQV9FTkRfVkFMSUQsCiYjNDM7c3RydWN0IG9hX3RjNl90c19pbmZvX3R4IHsKJiM0MzsJdTggdHNjOwogfTsKIAogc3RhdGljIGludCBvYV90YzZfc3BpX3RyYW5zZmVyKHN0cnVjdCBvYV90YzYgKnRjNiwKQEAgLTE5MSw2ICYjNDM7NTcsMTY4IEBAIHN0YXRpYyBpbnQgb2FfdGM2X2dldF9wYXJpdHkodTMyIHApCiAJcmV0dXJuICEoKHAgJmd0OyZndDsgMjgpICZhbXA7IDEpOwogfQogCiYjNDM7c3RhdGljIHN0cnVjdCBvYV90YzZfdHNfaW5mb190eCAqb2FfdGM2X3RzaW5mb190eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fdHggKikoc2tiLSZndDtjYik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcnggKm9hX3RjNl90c2luZm9fcngoc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CXJldHVybiAoc3RydWN0IG9hX3RjNl90c19pbmZvX3J4ICopKHNrYi0mZ3Q7Y2IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZGVmZXJfZm9yX2h3dHN0YW1wKHN0cnVjdCBvYV90YzYgKnRjNiwKJiM0MzsJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKJiM0Mzt7CiYjNDM7CWlmICghdGM2LSZndDtod190c3RhbXBfZW5hYmxlZCkKJiM0MzsJCXJldHVybjsKJiM0MzsJaWYgKCFza2IgfHwgKHNrYl9zaGluZm8oc2tiKS0mZ3Q7dHhfZmxhZ3MgJmFtcDsgU0tCVFhfSFdfVFNUQU1QKSA9PSAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAodGM2LSZndDt0c19jb25maWcudHhfdHlwZSAhPSBIV1RTVEFNUF9UWF9PTikgewomIzQzOwkJdGM2LSZndDt0eF9od3RzdGFtcF9sb3N0JiM0MzsmIzQzOzsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlza2Jfc2hpbmZvKHNrYiktJmd0O3R4X2ZsYWdzIHw9IFNLQlRYX0lOX1BST0dSRVNTOwomIzQzOwl1OCByZXQgPSB0YzYtJmd0O3R4X3RzX2lkeCYjNDM7JiM0Mzs7CiYjNDM7CiYjNDM7CWlmIChyZXQgPT0gT0FfVEM2X1RUU0NDX1JFR19JRCkKJiM0MzsJCXRjNi0mZ3Q7dHhfdHNfaWR4ID0gT0FfVEM2X1RUU0NBX1JFR19JRDsKJiM0MzsJb2FfdGM2X3RzaW5mb190eChza2IpLSZndDt0c2MgPSByZXQ7CiYjNDM7CiYjNDM7CWxpc3RfYWRkX3RhaWwoJmFtcDtza2ItJmd0O2xpc3QsICZhbXA7dGM2LSZndDt0eF90c19za2JfcSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZGVmZXJyZWRfc2tiKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggdHNjKQomIzQzO3sKJiM0MzsJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHRzdGFtcDsKJiM0MzsJc3RydWN0IG9hX3RjNl90c19pbmZvX3R4ICpza2k7CiYjNDM7CXN0cnVjdCBza19idWZmICpza2IsICp0bXA7CiYjNDM7CWJvb2wgZm91bmQgPSBmYWxzZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CS8qIFNpemUgb2YgZGF0YSBtdXN0IG1hdGNoIE9BX1RDNl9UU1RBTVBfU1ogKi8KJiM0MzsJdTMyIGRhdGFbMl07CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShza2IsIHRtcCwgJmFtcDt0YzYtJmd0O3R4X3RzX3NrYl9xLCBsaXN0KSB7CiYjNDM7CQlza2kgPSBvYV90YzZfdHNpbmZvX3R4KHNrYik7CiYjNDM7CQlpZiAoc2tpLSZndDt0c2MgIT0gdHNjKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKGZvdW5kKSB7CiYjNDM7CQkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoJmFtcDt0YzYtJmd0O3NwaS0mZ3Q7ZGV2LAomIzQzOwkJCQkJICAgICAmIzM0O011bHRpcGxlIHNrYnMuIHRzYyA9ICVkXG4mIzM0OywKJiM0MzsJCQkJCSAgICAgdHNjKTsKJiM0MzsJCQl0YzYtJmd0O3R4X2h3dHN0YW1wX2VyciYjNDM7JiM0Mzs7CiYjNDM7CQl9CiYjNDM7CQlmb3VuZCA9IHRydWU7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO3NrYi0mZ3Q7bGlzdCk7CiYjNDM7CiYjNDM7CQkvKiBSZXRyaWV2ZSB0aGUgdGltZXN0YW1waW5nIGluZm8gKi8KJiM0MzsJCXJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVycyh0YzYsCiYjNDM7CQkJCQkgICAgT0FfVEM2X1JFR19UVFNDQV9ISUdIICYjNDM7CiYjNDM7CQkJCQkgICAgMiAqICh0c2MgLSAxKSwgJmFtcDtkYXRhWzBdLCAyKTsKJiM0MzsKJiM0MzsJCWlmICghcmV0KSB7CiYjNDM7CQkJdHN0YW1wLmh3dHN0YW1wID0ga3RpbWVfc2V0KGRhdGFbMF0sIGRhdGFbMV0pOwomIzQzOwkJCXNrYl90c3RhbXBfdHgoc2tiLCAmYW1wO3RzdGFtcCk7CiYjNDM7CQkJdGM2LSZndDt0eF9od3RzdGFtcF9wa3RzJiM0MzsmIzQzOzsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWRldl9rZnJlZV9za2Ioc2tiKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBvYV90YzZfZXZlbnRzX2hhbmRsZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiB2YWwpCiYjNDM7ewomIzQzOwkvKiBDaGVjayBUWCB0aW1lc3RhbXBpbmcgKi8KJiM0MzsJaWYgKHZhbCAmYW1wOyBTVEFUVVMwX1RUU0NBQSkKJiM0MzsJCW9hX3RjNl9wcm9jZXNzX2RlZmVycmVkX3NrYih0YzYsIE9BX1RDNl9UVFNDQV9SRUdfSUQpOwomIzQzOwomIzQzOwlpZiAodmFsICZhbXA7IFNUQVRVUzBfVFRTQ0FCKQomIzQzOwkJb2FfdGM2X3Byb2Nlc3NfZGVmZXJyZWRfc2tiKHRjNiwgT0FfVEM2X1RUU0NCX1JFR19JRCk7CiYjNDM7CiYjNDM7CWlmICh2YWwgJmFtcDsgU1RBVFVTMF9UVFNDQUMpCiYjNDM7CQlvYV90YzZfcHJvY2Vzc19kZWZlcnJlZF9za2IodGM2LCBPQV9UQzZfVFRTQ0NfUkVHX0lEKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgb2FfdGM2X3VwZGF0ZV90c19pbl9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KQomIzQzO3sKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRjNi0mZ3Q7cnhfc2tiOwomIzQzOwlzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcnggKnNraTsKJiM0MzsJX19iZTMyIHRzX3ZhbFsyXTsKJiM0MzsJdTMyIHRzWzJdOwomIzQzOwomIzQzOwlpZiAoIXRjNi0mZ3Q7aHdfdHN0YW1wX2VuYWJsZWQpCiYjNDM7CQlyZXR1cm47CiYjNDM7CXNraSA9IG9hX3RjNl90c2luZm9fcngoc2tiKTsKJiM0MzsJaWYgKCFza2ktJmd0O3J0c2EpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1lbWNweSgmYW1wO3RzX3ZhbFswXSwgc2tiLSZndDtkYXRhLCA0KTsKJiM0MzsJbWVtY3B5KCZhbXA7dHNfdmFsWzFdLCAodTMyICopc2tiLSZndDtkYXRhICYjNDM7IDEsIDQpOwomIzQzOwomIzQzOwl0c1swXSA9IGJlMzJfdG9fY3B1KHRzX3ZhbFswXSk7CiYjNDM7CXRzWzFdID0gYmUzMl90b19jcHUodHNfdmFsWzFdKTsKJiM0MzsKJiM0MzsJLyogQ2hlY2sgcGFyaXR5ICovCiYjNDM7CWlmICgob2FfdGM2X2dldF9wYXJpdHkodHNbMF0pIF4gb2FfdGM2X2dldF9wYXJpdHkodHNbMV0pKSA9PQomIzQzOwkgICAgIXNraS0mZ3Q7cnRzcCkgewomIzQzOwkJc3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzICpod190czsKJiM0MzsKJiM0MzsJCS8qIFJlcG9ydCB0aW1lc3RhbXAgdG8gdGhlIHVwcGVyIGxheWVycyAqLwomIzQzOwkJaHdfdHMgPSBza2JfaHd0c3RhbXBzKHNrYik7CiYjNDM7CQltZW1zZXQoaHdfdHMsIDAsIHNpemVvZigqaHdfdHMpKTsKJiM0MzsJCWh3X3RzLSZndDtod3RzdGFtcCA9IGt0aW1lX3NldCh0c1swXSwgdHNbMV0pOwomIzQzOwl9CiYjNDM7CXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHRzKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3VwZGF0ZV9zdGFuZGFyZF9jYXBhYmlsaXR5KHN0cnVjdCBvYV90YzYgKnRjNikKJiM0Mzt7CiYjNDM7CXUzMiByZWd2YWwgPSAwOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1REQ0FQLCAmYW1wO3JlZ3ZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVndmFsICZhbXA7IFNURENBUF9GUkFNRV9USU1FU1RBTVBfQ0FQQUJJTElUWSkKJiM0MzsJCXRjNi0mZ3Q7aHdfdHN0YW1wX3N1cHBvcnRlZCA9IHRydWU7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBvYV90YzZfaW9jdGwgLSBnZW5lcmljIGlvY3RsIGludGVyZmFjZSBmb3IgTUFDLVBIWSBkcml2ZXJzLgomIzQzOyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuCiYjNDM7ICogQHJxOiByZXF1ZXN0IGZyb20gc29ja2V0IGludGVyZmFjZQomIzQzOyAqIEBjbWQ6IHZhbHVlIHRvIHNldC9nZXQgdGltZXN0YW1wIGNvbmZpZ3VyYXRpb24KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuCiYjNDM7ICovCiYjNDM7aW50IG9hX3RjNl9pb2N0bChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiYjNDM7ewomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcodGM2LSZndDtuZXRkZXYpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChjbWQgPT0gU0lPQ1NIV1RTVEFNUCB8fCBjbWQgPT0gU0lPQ0dIV1RTVEFNUCkKJiM0MzsJCXJldHVybiBvYV90YzZfdHN0YW1wX2lvY3RsKHRjNiwgcnEsIGNtZCk7CiYjNDM7CWVsc2UKJiM0MzsJCXJldHVybiBwaHlfZG9faW9jdGxfcnVubmluZyh0YzYtJmd0O25ldGRldiwgcnEsIGNtZCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9pb2N0bCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogb2FfdGM2X3NldF92ZW5kMV9tbXMgLSBBZGQgdmVuZG9yIHNwZWNpZmljIE1ESU9fTU1EIHRvIE9BIFRDNiBNTVMKJiM0MzsgKiBtYXBwZXIgdmFsdWUuCiYjNDM7ICogQHRjNjogb2FfdGM2IHN0cnVjdC4KJiM0MzsgKiBAbW1zOiB2ZW5kb3IgZGVmaW5lZCBNTVMgdmFsdWUgZm9yIFZFTkQxIG1kaW8gZGV2aWNlLgomIzQzOyAqLwomIzQzO3ZvaWQgb2FfdGM2X3NldF92ZW5kMV9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBpbnQgbW1zKQomIzQzO3sKJiM0MzsJdGM2LSZndDt2ZW5kMV9tbXMgPSBtbXM7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9zZXRfdmVuZDFfbW1zKTsKJiM0MzsKIHN0YXRpYyBfX2JlMzIgb2FfdGM2X3ByZXBhcmVfY3RybF9oZWFkZXIodTMyIGFkZHIsIHU4IGxlbmd0aCwKIAkJCQkJIGVudW0gb2FfdGM2X3JlZ2lzdGVyX29wIHJlZ19vcCkKIHsKQEAgLTM1NSw2ICYjNDM7MzgzLDgzIEBAIGludCBvYV90YzZfcmVhZF9yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBhZGRyZXNzLCB1MzIgKnZhbHVlKQogfQogRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3JlYWRfcmVnaXN0ZXIpOwogCiYjNDM7LyoqCiYjNDM7ICogb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyAtIGZ1bmN0aW9uIGZvciByZWFkaW5nIG11bHRpcGxlIGNvbnNlY3V0aXZlCiYjNDM7ICogcmVnaXN0ZXJzIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgbWVtb3J5IG1hcCBzZWxlY3RvciBwYWlyLgomIzQzOyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuCiYjNDM7ICogQGFkZHJlc3M6IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHRvIGJlIHJlYWQgaW4gdGhlIE1BQy1QSFkuCiYjNDM7ICogQG1tczogTWVtb3J5IG1hcCBzZWxlY3RvciBmb3IgdGhlIHJlZ2lzdGVycyB0byBiZSByZWFkLgomIzQzOyAqIEB2YWx1ZTogdmFsdWVzIHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RhcnRpbmcgcmVnaXN0ZXIgYWRkcmVzcyBAYWRkcmVzcy4KJiM0MzsgKiBAbGVuZ3RoOiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIHRvIGJlIHJlYWQgZnJvbSBAYWRkcmVzcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuCiYjNDM7ICovCiYjNDM7aW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgYWRkcmVzcywgdTE2IG1tcywKJiM0MzsJCQkgICAgICB1MzIgdmFsdWVbXSwgdTggbGVuZ3RoKQomIzQzO3sKJiM0MzsJdTMyIG1tc19hZGRyID0gKHUzMiltbXMgJmx0OyZsdDsgMTYgfCAodTMyKWFkZHJlc3M7CiYjNDM7CiYjNDM7CXJldHVybiBvYV90YzZfcmVhZF9yZWdpc3RlcnModGM2LCBtbXNfYWRkciwgdmFsdWUsIGxlbmd0aCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXMpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyAtIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgTUFDLVBIWSByZWdpc3RlcgomIzQzOyAqIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgbWVtb3J5IG1hcCBzZWxlY3RvciBwYWlyLgomIzQzOyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuCiYjNDM7ICogQGFkZHJlc3M6IHJlZ2lzdGVyIGFkZHJlc3Mgb2YgdGhlIE1BQy1QSFkgdG8gYmUgcmVhZC4KJiM0MzsgKiBAbW1zOiBNZW1vcnkgTWFwIFNlbGVjdG9yIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcwomIzQzOyAqIEB2YWx1ZTogdmFsdWUgcmVhZCBmcm9tIHRoZSBAYWRkcmVzcyByZWdpc3RlciBhZGRyZXNzIG9mIHRoZSBNQUMtUEhZLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC4KJiM0MzsgKi8KJiM0MztpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsCiYjNDM7CQkJICAgICB1MzIgKnZhbHVlKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXModGM2LCBhZGRyZXNzLCBtbXMsIHZhbHVlLCAxKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJzX21tcyAtIGZ1bmN0aW9uIGZvciB3cml0aW5nIG11bHRpcGxlIGNvbnNlY3V0aXZlCiYjNDM7ICogcmVnaXN0ZXJzIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgbWVtb3J5IG1hcCBzZWxlY3RvciBwYWlyLgomIzQzOyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuCiYjNDM7ICogQGFkZHJlc3M6IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIE1BQy1QSFkuCiYjNDM7ICogQG1tczogbWVtb3J5IG1hcCBTZWxlY3RvciBmb3IgdGhlIGdpdmVuIHJlZ2lzdGVyLgomIzQzOyAqIEB2YWx1ZTogdmFsdWVzIHRvIGJlIHdyaXR0ZW4gZnJvbSB0aGUgc3RhcnRpbmcgcmVnaXN0ZXIgYWRkcmVzcyBAYWRkcmVzcy4KJiM0MzsgKiBAbGVuZ3RoOiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIHRvIGJlIHdyaXR0ZW4gZnJvbSBAYWRkcmVzcy4KJiM0MzsgKgomIzQzOyAqIE1heGltdW0gb2YgMTI4IGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBjYW4gYmUgd3JpdHRlbiBzdGFydGluZyBhdCBAYWRkcmVzcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuCiYjNDM7ICovCiYjNDM7aW50IG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsCiYjNDM7CQkJICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpCiYjNDM7ewomIzQzOwl1MzIgbW1zX2FkZHIgPSAodTMyKW1tcyAmbHQ7Jmx0OyAxNiB8ICh1MzIpYWRkcmVzczsKJiM0MzsKJiM0MzsJcmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3RlcnModGM2LCBtbXNfYWRkciwgdmFsdWUsIGxlbmd0aCk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zIC0gZnVuY3Rpb24gZm9yIHdyaXRpbmcgYSBNQUMtUEhZIHJlZ2lzdGVyCiYjNDM7ICogYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBtZW1vcnkgbWFwIHNlbGVjdG9yLgomIzQzOyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuCiYjNDM7ICogQGFkZHJlc3M6IHJlZ2lzdGVyIGFkZHJlc3Mgb2YgdGhlIE1BQy1QSFkgdG8gYmUgd3JpdHRlbi4KJiM0MzsgKiBAbW1zOiBtZW1vcnkgbWFwIHNlbGVjdG9yIGZvciB0aGUgZ2l2ZW4gcmVnaXN0ZXIuCiYjNDM7ICogQHZhbHVlOiB2YWx1ZSB0byBiZSB3cml0dGVuIGluIHRoZSBAYWRkcmVzcyByZWdpc3RlciBhZGRyZXNzIG9mCiYjNDM7ICogdGhlIE1BQy1QSFkuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvdGhlcndpc2UgZmFpbGVkLgomIzQzOyAqLwomIzQzO2ludCBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsCiYjNDM7CQkJICAgICAgdTMyIHZhbHVlKQomIzQzO3sKJiM0MzsJcmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKHRjNiwgYWRkcmVzcywgbW1zLCAmYW1wO3ZhbHVlLCAxKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyk7CiYjNDM7CiAvKioKICAqIG9hX3RjNl93cml0ZV9yZWdpc3RlcnMgLSBmdW5jdGlvbiBmb3Igd3JpdGluZyBtdWx0aXBsZSBjb25zZWN1dGl2ZSByZWdpc3RlcnMuCiAgKiBAdGM2OiBvYV90YzYgc3RydWN0LgpAQCAtNDQ0LDcgJiM0Mzs1NDksNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9tZGlvYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLAogCQkJCSAgICAgdmFsKTsKIH0KIAotc3RhdGljIGludCBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKGludCBkZXZudW0pCiYjNDM7c3RhdGljIGludCBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgaW50IGRldm51bSkKIHsKIAlzd2l0Y2ggKGRldm51bSkgewogCWNhc2UgTURJT19NTURfUENTOgpAQCAtNDU3LDYgJiM0Mzs1NjIsOCBAQCBzdGF0aWMgaW50IG9hX3RjNl9nZXRfcGh5X2M0NV9tbXMoaW50IGRldm51bSkKIAkJcmV0dXJuIE9BX1RDNl9QSFlfQzQ1X0FVVE9fTkVHX01NUzU7CiAJY2FzZSBNRElPX01NRF9QT1dFUl9VTklUOgogCQlyZXR1cm4gT0FfVEM2X1BIWV9DNDVfUE9XRVJfVU5JVF9NTVM2OwomIzQzOwljYXNlIE1ESU9fTU1EX1ZFTkQxOgomIzQzOwkJcmV0dXJuIHRjNi0mZ3Q7dmVuZDFfbW1zOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC00NjYsMTQgJiM0Mzs1NzMsMTQgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c19yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldm51bSwKIAkJCQkgICBpbnQgcmVnbnVtKQogewogCXN0cnVjdCBvYV90YzYgKnRjNiA9IGJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IG1tcywgcmV0OwogCXUzMiByZWd2YWw7Ci0JaW50IHJldDsKIAotCXJldCA9IG9hX3RjNl9nZXRfcGh5X2M0NV9tbXMoZGV2bnVtKTsKLQlpZiAocmV0ICZsdDsgMCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJbW1zID0gb2FfdGM2X2dldF9waHlfYzQ1X21tcyh0YzYsIGRldm51bSk7CiYjNDM7CWlmIChtbXMgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG1tczsKIAotCXJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHRjNiwgKHJldCAmbHQ7Jmx0OyAxNikgfCByZWdudW0sICZhbXA7cmVndmFsKTsKJiM0MzsJcmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHRjNiwgKHUxNilyZWdudW0sICh1MTYpbW1zLCAmYW1wO3JlZ3ZhbCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDg0LDEzICYjNDM7NTkxLDEzIEBAIHN0YXRpYyBpbnQgb2FfdGM2X21kaW9idXNfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2bnVtLAogCQkJCSAgICBpbnQgcmVnbnVtLCB1MTYgdmFsKQogewogCXN0cnVjdCBvYV90YzYgKnRjNiA9IGJ1cy0mZ3Q7cHJpdjsKLQlpbnQgcmV0OwomIzQzOwlpbnQgbW1zOwogCi0JcmV0ID0gb2FfdGM2X2dldF9waHlfYzQ1X21tcyhkZXZudW0pOwotCWlmIChyZXQgJmx0OyAwKQotCQlyZXR1cm4gcmV0OwomIzQzOwltbXMgPSBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKHRjNiwgZGV2bnVtKTsKJiM0MzsJaWYgKG1tcyAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gbW1zOwogCi0JcmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIChyZXQgJmx0OyZsdDsgMTYpIHwgcmVnbnVtLCB2YWwpOwomIzQzOwlyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyh0YzYsICh1MTYpcmVnbnVtLCAodTE2KW1tcywgdmFsKTsKIH0KIAogc3RhdGljIGludCBvYV90YzZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCkBAIC03MTQsNiAmIzQzOzgyMSw5IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNikKIAkJcmV0dXJuIHJldDsKIAl9CiAKJiM0MzsJaWYgKCh2YWx1ZSAmYW1wOyBTVEFUVVMwX1RUU0NBX01BU0spICE9IDApCiYjNDM7CQlvYV90YzZfZXZlbnRzX2hhbmRsZSh0YzYsIHZhbHVlICZhbXA7IFNUQVRVUzBfVFRTQ0FfTUFTSyk7CiYjNDM7CiAJLyogQ2xlYXIgdGhlIGVycm9yIGludGVycnVwdHMgc3RhdHVzICovCiAJcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19TVEFUVVMwLCB2YWx1ZSk7CiAJaWYgKHJldCkgewpAQCAtNzk2LDYgJiM0Mzs5MDYsNyBAQCBzdGF0aWMgdm9pZCBvYV90YzZfc3VibWl0X3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiAJICAgIHRjNi0mZ3Q7cnhfc2tiLSZndDtsZW4gJmd0OyBFVEhfRkNTX0xFTikKIAkJc2tiX3RyaW0odGM2LSZndDtyeF9za2IsIHRjNi0mZ3Q7cnhfc2tiLSZndDtsZW4gLSBFVEhfRkNTX0xFTik7CiAKJiM0MzsJb2FfdGM2X3VwZGF0ZV90c19pbl9yeF9za2IodGM2KTsKIAl0YzYtJmd0O3J4X3NrYi0mZ3Q7cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyh0YzYtJmd0O3J4X3NrYiwgdGM2LSZndDtuZXRkZXYpOwogCXRjNi0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy5yeF9wYWNrZXRzJiM0MzsmIzQzOzsKIAl0YzYtJmd0O25ldGRldi0mZ3Q7c3RhdHMucnhfYnl0ZXMgJiM0Mzs9IHRjNi0mZ3Q7cnhfc2tiLSZndDtsZW47CkBAIC04MTAsMjQgJiM0Mzs5MjEsMjkgQEAgc3RhdGljIHZvaWQgb2FfdGM2X3VwZGF0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTggbGVuZ3RoKQogCW1lbWNweShza2JfcHV0KHRjNi0mZ3Q7cnhfc2tiLCBsZW5ndGgpLCBwYXlsb2FkLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW50IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KQomIzQzO3N0YXRpYyBpbnQgb2FfdGM2X2FsbG9jYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpCiB7CiYjNDM7CXN0cnVjdCBvYV90YzZfdHNfaW5mb19yeCAqc2tpOwomIzQzOwogCXRjNi0mZ3Q7cnhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbih0YzYtJmd0O25ldGRldiwgdGM2LSZndDtuZXRkZXYtJmd0O210dSAmIzQzOwotCQkJCQkJRVRIX0hMRU4gJiM0MzsgRVRIX0ZDU19MRU4pOwomIzQzOwkJCQkJCUVUSF9ITEVOICYjNDM7IEVUSF9GQ1NfTEVOICYjNDM7IE9BX1RDNl9UU1RBTVBfU1opOwogCWlmICghdGM2LSZndDtyeF9za2IpIHsKIAkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnJ4X2Ryb3BwZWQmIzQzOyYjNDM7OwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKJiM0MzsJc2tpID0gb2FfdGM2X3RzaW5mb19yeCh0YzYtJmd0O3J4X3NrYik7CiYjNDM7CXNraS0mZ3Q7cnRzYSA9IEZJRUxEX0dFVChPQV9UQzZfREFUQV9GT09URVJfUlRTQV9WQUxJRCwgZm9vdGVyKTsKJiM0MzsJc2tpLSZndDtydHNwID0gRklFTERfR0VUKE9BX1RDNl9EQVRBX0ZPT1RFUl9SVFNQX1ZBTElELCBmb290ZXIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX2NvbXBsZXRlX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsCi0JCQkJCSB1MTYgc2l6ZSkKJiM0MzsJCQkJCSB1MTYgc2l6ZSwgdTMyIGZvb3RlcikKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gb2FfdGM2X2FsbG9jYXRlX3J4X3NrYih0YzYpOwomIzQzOwlyZXQgPSBvYV90YzZfYWxsb2NhdGVfcnhfc2tiKHRjNiwgZm9vdGVyKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC04MzgsMTEgJiM0Mzs5NTQsMTEgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19jb21wbGV0ZV9yeF9mcmFtZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX3N0YXJ0KHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKQomIzQzO3N0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTE2IHNpemUsIHUzMiBmb290ZXIpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2IodGM2KTsKJiM0MzsJcmV0ID0gb2FfdGM2X2FsbG9jYXRlX3J4X3NrYih0YzYsIGZvb3Rlcik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtODg3LDcgJiM0MzsxMDAzLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsCiAJCXNpemUgPSBlbmRfYnl0ZV9vZmZzZXQgJiM0MzsgMSAtIHN0YXJ0X2J5dGVfb2Zmc2V0OwogCQlyZXR1cm4gb2FfdGM2X3ByY3NfY29tcGxldGVfcnhfZnJhbWUodGM2LAogCQkJCQkJICAgICAmYW1wO2RhdGFbc3RhcnRfYnl0ZV9vZmZzZXRdLAotCQkJCQkJICAgICBzaXplKTsKJiM0MzsJCQkJCQkgICAgIHNpemUsIGZvb3Rlcik7CiAJfQogCiAJLyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmx5IHJ4IGZyYW1lIHN0YXJ0ICovCkBAIC04OTUsNyAmIzQzOzEwMTEsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSwKIAkJc2l6ZSA9IE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUgLSBzdGFydF9ieXRlX29mZnNldDsKIAkJcmV0dXJuIG9hX3RjNl9wcmNzX3J4X2ZyYW1lX3N0YXJ0KHRjNiwKIAkJCQkJCSAgJmFtcDtkYXRhW3N0YXJ0X2J5dGVfb2Zmc2V0XSwKLQkJCQkJCSAgc2l6ZSk7CiYjNDM7CQkJCQkJICBzaXplLCBmb290ZXIpOwogCX0KIAogCS8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25seSByeCBmcmFtZSBlbmQgKi8KQEAgLTkyMCw3ICYjNDM7MTAzNiw3IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfcnhfY2h1bmtfcGF5bG9hZChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpkYXRhLAogCQlzaXplID0gT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSAtIHN0YXJ0X2J5dGVfb2Zmc2V0OwogCQlyZXR1cm4gb2FfdGM2X3ByY3NfcnhfZnJhbWVfc3RhcnQodGM2LAogCQkJCQkJICAmYW1wO2RhdGFbc3RhcnRfYnl0ZV9vZmZzZXRdLAotCQkJCQkJICBzaXplKTsKJiM0MzsJCQkJCQkgIHNpemUsIGZvb3Rlcik7CiAJfQogCiAJLyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmdvaW5nIHJ4IGZyYW1lIGRhdGEgKi8KQEAgLTk3NCwxMyAmIzQzOzEwOTAsMTUgQEAgc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19zcGlfZGF0YV9yeF9idWYoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgbGVuZ3RoKQogfQogCiBzdGF0aWMgX19iZTMyIG9hX3RjNl9wcmVwYXJlX2RhdGFfaGVhZGVyKGJvb2wgZGF0YV92YWxpZCwgYm9vbCBzdGFydF92YWxpZCwKLQkJCQkJIGJvb2wgZW5kX3ZhbGlkLCB1OCBlbmRfYnl0ZV9vZmZzZXQpCiYjNDM7CQkJCQkgYm9vbCBlbmRfdmFsaWQsIHU4IGVuZF9ieXRlX29mZnNldCwKJiM0MzsJCQkJCSB1OCB0c2MpCiB7CiAJdTMyIGhlYWRlciA9IEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX0RBVEFfTk9UX0NUUkwsCiAJCQkJT0FfVEM2X0RBVEFfSEVBREVSKSB8CiAJCSAgICAgRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRCwgZGF0YV92YWxpZCkgfAogCQkgICAgIEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1ZBTElELCBzdGFydF92YWxpZCkgfAogCQkgICAgIEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX0VORF9WQUxJRCwgZW5kX3ZhbGlkKSB8CiYjNDM7CQkgICAgIEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX1RTQ19PRkZTRVQsIHRzYykgfAogCQkgICAgIEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX0VORF9CWVRFX09GRlNFVCwKIAkJCQllbmRfYnl0ZV9vZmZzZXQpOwogCkBAIC05OTksNiAmIzQzOzExMTcsNyBAQCBzdGF0aWMgdm9pZCBvYV90YzZfYWRkX3R4X3NrYl90b19zcGlfYnVmKHN0cnVjdCBvYV90YzYgKnRjNikKIAllbnVtIG9hX3RjNl9kYXRhX3N0YXJ0X3ZhbGlkX2luZm8gc3RhcnRfdmFsaWQ7CiAJdTggZW5kX2J5dGVfb2Zmc2V0ID0gMDsKIAl1MTYgbGVuZ3RoX3RvX2NvcHk7CiYjNDM7CXU4IHRzYyA9IDA7CiAKIAkvKiBJbml0aWFsIHZhbHVlIGlzIGFzc2lnbmVkIGhlcmUgdG8gYXZvaWQgbW9yZSB0aGFuIDgwIGNoYXJhY3RlcnMgaW4KIAkgKiB0aGUgZGVjbGFyYXRpb24gcGxhY2UuCkBAIC0xMDA4LDggJiM0MzsxMTI3LDEwIEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9hZGRfdHhfc2tiX3RvX3NwaV9idWYoc3RydWN0IG9hX3RjNiAqdGM2KQogCS8qIFNldCBzdGFydCB2YWxpZCBpZiB0aGUgY3VycmVudCB0eCBjaHVuayBjb250YWlucyB0aGUgc3RhcnQgb2YgdGhlIHR4CiAJICogZXRoZXJuZXQgZnJhbWUuCiAJICovCi0JaWYgKCF0YzYtJmd0O3R4X3NrYl9vZmZzZXQpCiYjNDM7CWlmICghdGM2LSZndDt0eF9za2Jfb2Zmc2V0KSB7CiAJCXN0YXJ0X3ZhbGlkID0gT0FfVEM2X0RBVEFfU1RBUlRfVkFMSUQ7CiYjNDM7CQl0c2MgPSBvYV90YzZfdHNpbmZvX3R4KHRjNi0mZ3Q7b25nb2luZ190eF9za2IpLSZndDt0c2M7CiYjNDM7CX0KIAogCS8qIElmIHRoZSByZW1haW5pbmcgdHggc2tiIGxlbmd0aCBpcyBtb3JlIHRoYW4gdGhlIGNodW5rIHBheWxvYWQgc2l6ZSBvZgogCSAqIDY0IGJ5dGVzIHRoZW4gY29weSBvbmx5IDY0IGJ5dGVzIGFuZCBsZWF2ZSB0aGUgb25nb2luZyB0eCBza2IgZm9yCkBAIC0xMDMwLDEyICYjNDM7MTE1MSwxOCBAQCBzdGF0aWMgdm9pZCBvYV90YzZfYWRkX3R4X3NrYl90b19zcGlfYnVmKHN0cnVjdCBvYV90YzYgKnRjNikKIAkJdGM2LSZndDt0eF9za2Jfb2Zmc2V0ID0gMDsKIAkJdGM2LSZndDtuZXRkZXYtJmd0O3N0YXRzLnR4X2J5dGVzICYjNDM7PSB0YzYtJmd0O29uZ29pbmdfdHhfc2tiLSZndDtsZW47CiAJCXRjNi0mZ3Q7bmV0ZGV2LSZndDtzdGF0cy50eF9wYWNrZXRzJiM0MzsmIzQzOzsKLQkJa2ZyZWVfc2tiKHRjNi0mZ3Q7b25nb2luZ190eF9za2IpOwomIzQzOwomIzQzOwkJLyogRnJlZSB0aGUgb25lcyB0aGF0IGFyZSBub3Qgc2F2ZWQgZm9yIGxhdGVyIHByb2Nlc3NpbmcsCiYjNDM7CQkgKiBsaWtlIHRpbWVzdGFtcGluZy4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCEoc2tiX3NoaW5mbyh0YzYtJmd0O29uZ29pbmdfdHhfc2tiKS0mZ3Q7dHhfZmxhZ3MgJmFtcDsKJiM0MzsJCSAgICBTS0JUWF9JTl9QUk9HUkVTUykpCiYjNDM7CQkJa2ZyZWVfc2tiKHRjNi0mZ3Q7b25nb2luZ190eF9za2IpOwogCQl0YzYtJmd0O29uZ29pbmdfdHhfc2tiID0gTlVMTDsKIAl9CiAKIAkqdHhfYnVmID0gb2FfdGM2X3ByZXBhcmVfZGF0YV9oZWFkZXIoT0FfVEM2X0RBVEFfVkFMSUQsIHN0YXJ0X3ZhbGlkLAotCQkJCQkgICAgIGVuZF92YWxpZCwgZW5kX2J5dGVfb2Zmc2V0KTsKJiM0MzsJCQkJCSAgICAgZW5kX3ZhbGlkLCBlbmRfYnl0ZV9vZmZzZXQsIHRzYyk7CiAJdGM2LSZndDtzcGlfZGF0YV90eF9idWZfb2Zmc2V0ICYjNDM7PSBPQV9UQzZfQ0hVTktfU0laRTsKIH0KIApAQCAtMTA1Myw2ICYjNDM7MTE4MCw4IEBAIHN0YXRpYyB1MTYgb2FfdGM2X3ByZXBhcmVfc3BpX3R4X2J1Zl9mb3JfdHhfc2ticyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpCiAJCQl0YzYtJmd0O29uZ29pbmdfdHhfc2tiID0gdGM2LSZndDt3YWl0aW5nX3R4X3NrYjsKIAkJCXRjNi0mZ3Q7d2FpdGluZ190eF9za2IgPSBOVUxMOwogCQkJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsJCQlvYV90YzZfZGVmZXJfZm9yX2h3dHN0YW1wKHRjNiwKJiM0MzsJCQkJCQkgIHRjNi0mZ3Q7b25nb2luZ190eF9za2IpOwogCQl9CiAJCWlmICghdGM2LSZndDtvbmdvaW5nX3R4X3NrYikKIAkJCWJyZWFrOwpAQCAtMTA2OSw3ICYjNDM7MTE5OCw3IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9hZGRfZW1wdHlfY2h1bmtzX3RvX3NwaV9idWYoc3RydWN0IG9hX3RjNiAqdGM2LAogCiAJaGVhZGVyID0gb2FfdGM2X3ByZXBhcmVfZGF0YV9oZWFkZXIoT0FfVEM2X0RBVEFfSU5WQUxJRCwKIAkJCQkJICAgIE9BX1RDNl9EQVRBX1NUQVJUX0lOVkFMSUQsCi0JCQkJCSAgICBPQV9UQzZfREFUQV9FTkRfSU5WQUxJRCwgMCk7CiYjNDM7CQkJCQkgICAgT0FfVEM2X0RBVEFfRU5EX0lOVkFMSUQsIDAsIGZhbHNlKTsKIAogCXdoaWxlIChuZWVkZWRfZW1wdHlfY2h1bmtzLS0pIHsKIAkJX19iZTMyICp0eF9idWYgPSB0YzYtJmd0O3NwaV9kYXRhX3R4X2J1ZiAmIzQzOwpAQCAtMTI2MSw2ICYjNDM7MTM5MCw3IEBAIG5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CiAKJiM0MzsJb2FfdGM2X3RzaW5mb190eChza2IpLSZndDt0c2MgPSAwOwogCXNwaW5fbG9ja19iaCgmYW1wO3RjNi0mZ3Q7dHhfc2tiX2xvY2spOwogCXRjNi0mZ3Q7d2FpdGluZ190eF9za2IgPSBza2I7CiAJc3Bpbl91bmxvY2tfYmgoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKQEAgLTEyOTQsNiAmIzQzOzE0MjQsOSBAQCBzdHJ1Y3Qgb2FfdGM2ICpvYV90YzZfaW5pdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmFtcDtzcGktJmd0O2Rldik7CiAJbXV0ZXhfaW5pdCgmYW1wO3RjNi0mZ3Q7c3BpX2N0cmxfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFtcDt0YzYtJmd0O3R4X3NrYl9sb2NrKTsKJiM0MzsJdGM2LSZndDt2ZW5kMV9tbXMgPSAtRU9QTk9UU1VQUDsKJiM0MzsJdGM2LSZndDt0eF90c19pZHggPSBPQV9UQzZfVFRTQ0FfUkVHX0lEOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO3RjNi0mZ3Q7dHhfdHNfc2tiX3EpOwogCiAJLyogU2V0IHRoZSBTUEkgY29udHJvbGxlciB0byBwdW1wIGF0IHJlYWx0aW1lIHByaW9yaXR5ICovCiAJdGM2LSZndDtzcGktJmd0O3J0ID0gdHJ1ZTsKQEAgLTEzNTksNiAmIzQzOzE0OTIsMTIgQEAgc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIAkJZ290byBwaHlfZXhpdDsKIAl9CiAKJiM0MzsJcmV0ID0gb2FfdGM2X3VwZGF0ZV9zdGFuZGFyZF9jYXBhYmlsaXR5KHRjNik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDt0YzYtJmd0O3NwaS0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZWFkIGNhcGFiaWxpdHlcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gcGh5X2V4aXQ7CiYjNDM7CX0KJiM0MzsKIAlyZXQgPSBkZXZtX3JlcXVlc3RfdGhyZWFkZWRfaXJxKCZhbXA7dGM2LSZndDtzcGktJmd0O2RldiwgdGM2LSZndDtzcGktJmd0O2lycSwKIAkJCQkJb2FfdGM2X21hY3BoeV9pc3IsCiAJCQkJCW9hX3RjNl9tYWNwaHlfdGhyZWFkZWRfaXJxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfcHRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBjZGU1NTQ1ZWUyN2EwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9wdHAuYwpAQCAtMCwwICYjNDM7MSw3MCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsKJiM0MzsvKgomIzQzOyAqIFN1cHBvcnQgZm9yIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBmZWF0dXJlIGZvciBPUEVOIEFsbGlhbmNlCiYjNDM7ICogMTBCQVNF4oCRVDF4IE1BQ+KAkVBIWSBTZXJpYWwgSW50ZXJmYWNlIGZyYW1ld29yawomIzQzOyAqCiYjNDM7ICogQXV0aG9yOiBTZWx2YSBSYWphZ29wYWwgJmx0O3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbSZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHJ0aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxZG9tYWluLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zcGkvc3BpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29hX3RjNi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRfdHN0YW1wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O29hX3RjNl9zdGRfZGVmLmgmIzM0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG9hX3RjNl9wdHBfcmVnaXN0ZXIgLSBSZWdpc3RlcnMgY2xvY2sgcmVsYXRlZCBjYWxsYmFja3MKJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LgomIzQzOyAqIEBpbmZvOiBEZXNjcmliZXMgYSBQVFAgaGFyZHdhcmUgY2xvY2sKJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOiBWZW5kb3JzIGFyZSBleHBlY3RlZCB0byBzZXQgdGhlIGhhcmR3YXJlIHRpbWVzdGFtcAomIzQzOyAqIHJlbGF0ZWQgY2FsbGJhY2tzIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvdGhlcndpc2UgZmFpbGVkLgomIzQzOyAqCiYjNDM7ICovCiYjNDM7aW50IG9hX3RjNl9wdHBfcmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwkvKiBOb3Qgc3VwcG9ydGluZyBoYXJkd2FyZSB0aW1lc3RhbXAgaXNuJiMzOTt0IGFuIGVycm9yICovCiYjNDM7CWlmICghdGM2LSZndDtod190c3RhbXBfc3VwcG9ydGVkKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXNucHJpbnRmKGluZm8tJmd0O25hbWUsIHNpemVvZihpbmZvLSZndDtuYW1lKSwgJiMzNDslcyYjMzQ7LAomIzQzOwkJICYjMzQ7T0EgVEM2IFBUUCBjbG9jayYjMzQ7KTsKJiM0MzsJdGM2LSZndDtwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoaW5mbywgJmFtcDt0YzYtJmd0O3NwaS0mZ3Q7ZGV2KTsKJiM0MzsJaWYgKElTX0VSUih0YzYtJmd0O3B0cF9jbG9jaykpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDt0YzYtJmd0O3NwaS0mZ3Q7ZGV2LCAmIzM0O1JlZ2lzdHJhdGlvbiBvZiAlcyBmYWlsZWQmIzM0OywKJiM0MzsJCQlpbmZvLSZndDtuYW1lKTsKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwl9CiYjNDM7CWRldl9pbmZvKCZhbXA7dGM2LSZndDtzcGktJmd0O2RldiwgJiMzNDslcyByZWdpc3RlcmVkLiBpbmRleCAlZCYjMzQ7LCBpbmZvLSZndDtuYW1lLAomIzQzOwkJIHB0cF9jbG9ja19pbmRleCh0YzYtJmd0O3B0cF9jbG9jaykpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3B0cF9yZWdpc3Rlcik7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogb2FfdGM2X3B0cF91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlcnMgY2xvY2sgcmVsYXRlZCBjYWxsYmFja3MKJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LgomIzQzOyAqLwomIzQzO3ZvaWQgb2FfdGM2X3B0cF91bnJlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNikKJiM0Mzt7CiYjNDM7CWlmICh0YzYtJmd0O3B0cF9jbG9jaykKJiM0MzsJCXB0cF9jbG9ja191bnJlZ2lzdGVyKHRjNi0mZ3Q7cHRwX2Nsb2NrKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3B0cF91bnJlZ2lzdGVyKTsKJiM0MzsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBMaWImIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O1NlbHZhIFJhamFnb3BhbCAmbHQ7c2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfc3RkX2RlZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9zdGRfZGVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjM3ODE1MDNiZTdmNTYyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9zdGRfZGVmLmgKQEAgLTAsMCAmIzQzOzEsMTkxIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOyAqLwomIzQzOy8qCiYjNDM7ICogUmVnaXN0ZXIgYW5kIGRyaXZlciByZWxhdGVkIGRlZmluaXRpb25zIHRvIHN1cHBvcnQKJiM0MzsgKiBPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBmcmFtZXdvcmsuCiYjNDM7ICoKJiM0MzsgKiBBdXRob3I6IFNlbHZhIFJhamFnb3BhbCAmbHQ7c2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgT0FfVEM2X1NURF9ERUZfSAomIzQzOyNkZWZpbmUgT0FfVEM2X1NURF9ERUZfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L25ldF90c3RhbXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbmV0ZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NwaS9zcGkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2tidWZmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dhaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiYjNDM7CiYjNDM7LyogT1BFTiBBbGxpYW5jZSBUQzYgcmVnaXN0ZXJzICovCiYjNDM7LyogU3RhbmRhcmQgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBPQV9UQzZfUkVHX1NURENBUAkJCTB4MDAwMgomIzQzOyNkZWZpbmUgU1REQ0FQX0RJUkVDVF9QSFlfUkVHX0FDQ0VTUwkJQklUKDgpCiYjNDM7I2RlZmluZSBTVERDQVBfRlJBTUVfVElNRVNUQU1QX0NBUEFCSUxJVFkJQklUKDYpCiYjNDM7CiYjNDM7LyogUmVzZXQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBPQV9UQzZfUkVHX1JFU0VUCQkJMHgwMDAzCiYjNDM7I2RlZmluZSBSRVNFVF9TV1JFU0VUCQkJCUJJVCgwKQomIzQzOwomIzQzOy8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIzAgKi8KJiM0MzsjZGVmaW5lIE9BX1RDNl9SRUdfQ09ORklHMAkJCTB4MDAwNAomIzQzOyNkZWZpbmUgQ09ORklHMF9TWU5DCQkJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIENPTkZJRzBfWkFSRkVfRU5BQkxFCQkJQklUKDEyKQomIzQzOyNkZWZpbmUgQ09ORklHMF9GVFNFX0VOQUJMRQkJCUJJVCg3KQomIzQzOyNkZWZpbmUgQ09ORklHMF9GVFNTXzY0QklUX1RTVEFNUAkJQklUKDYpCiYjNDM7CiYjNDM7LyogU3RhdHVzIFJlZ2lzdGVyICMwICovCiYjNDM7I2RlZmluZSBPQV9UQzZfUkVHX1NUQVRVUzAJCQkweDAwMDgKJiM0MzsjZGVmaW5lIFNUQVRVUzBfVFRTQ0FDCQkJCUJJVCgxMCkKJiM0MzsjZGVmaW5lIFNUQVRVUzBfVFRTQ0FCCQkJCUJJVCg5KQomIzQzOyNkZWZpbmUgU1RBVFVTMF9UVFNDQUEJCQkJQklUKDgpCiYjNDM7I2RlZmluZSBTVEFUVVMwX1RUU0NBX01BU0sJCUdFTk1BU0soMTAsIDgpCiYjNDM7I2RlZmluZSBTVEFUVVMwX1JFU0VUQwkJCQlCSVQoNikKJiM0MzsjZGVmaW5lIFNUQVRVUzBfSEVBREVSX0VSUk9SCQkJQklUKDUpCiYjNDM7I2RlZmluZSBTVEFUVVMwX0xPU1NfT0ZfRlJBTUVfRVJST1IJCUJJVCg0KQomIzQzOyNkZWZpbmUgU1RBVFVTMF9SWF9CVUZGRVJfT1ZFUkZMT1dfRVJST1IJQklUKDMpCiYjNDM7I2RlZmluZSBTVEFUVVMwX1RYX1BST1RPQ09MX0VSUk9SCQlCSVQoMCkKJiM0MzsKJiM0MzsvKiBCdWZmZXIgU3RhdHVzIFJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBPQV9UQzZfUkVHX0JVRkZFUl9TVEFUVVMJCTB4MDAwQgomIzQzOyNkZWZpbmUgQlVGRkVSX1NUQVRVU19UWF9DUkVESVRTX0FWQUlMQUJMRQlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgQlVGRkVSX1NUQVRVU19SWF9DSFVOS1NfQVZBSUxBQkxFCUdFTk1BU0soNywgMCkKJiM0MzsKJiM0MzsvKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAjMCAqLwomIzQzOyNkZWZpbmUgT0FfVEM2X1JFR19JTlRfTUFTSzAJCQkweDAwMEMKJiM0MzsjZGVmaW5lIElOVF9NQVNLMF9UVFNDQV9NQVNLCQkJR0VOTUFTSygxMCwgOCkKJiM0MzsjZGVmaW5lIElOVF9NQVNLMF9IRUFERVJfRVJSX01BU0sJCUJJVCg1KQomIzQzOyNkZWZpbmUgSU5UX01BU0swX0xPU1NfT0ZfRlJBTUVfRVJSX01BU0sJQklUKDQpCiYjNDM7I2RlZmluZSBJTlRfTUFTSzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUl9NQVNLCUJJVCgzKQomIzQzOyNkZWZpbmUgSU5UX01BU0swX1RYX1BST1RPQ09MX0VSUl9NQVNLCQlCSVQoMCkKJiM0MzsjZGVmaW5lIElOVF9NQVNLMF9BTExfSU5URVJSVVBUUwkJKEdFTk1BU0soNSwgMCkgfCBcCiYjNDM7CQkJCQkJIEdFTk1BU0soMTIsIDcpKQomIzQzOwomIzQzOy8qIFBIWSBDbGF1c2UgMjIgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyBhbmQgbWFzayAqLwomIzQzOyNkZWZpbmUgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfQkFTRQkJMHhGRjAwCiYjNDM7I2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9NQVNLCQkweDFGCiYjNDM7CiYjNDM7LyogVHggdGltZXN0YW1wIGNhcHR1cmUgcmVnaXN0ZXIgQSAoaGlnaCkgKi8KJiM0MzsjZGVmaW5lIE9BX1RDNl9SRUdfVFRTQ0FfSElHSAkJCSgweDEwKQomIzQzOwomIzQzOy8qIENvbnRyb2wgY29tbWFuZCBoZWFkZXIgKi8KJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9EQVRBX05PVF9DVFJMCUJJVCgzMSkKJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9XUklURV9OT1RfUkVBRAlCSVQoMjkpCiYjNDM7I2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfTUVNX01BUF9TRUxFQ1RPUglHRU5NQVNLKDI3LCAyNCkKJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9BRERSCQkJR0VOTUFTSygyMywgOCkKJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9MRU5HVEgJCUdFTk1BU0soNywgMSkKJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9QQVJJVFkJCUJJVCgwKQomIzQzOwomIzQzOy8qIERhdGEgaGVhZGVyICovCiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9OT1RfQ1RSTAlCSVQoMzEpCiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRAkJQklUKDIxKQomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1ZBTElECQlCSVQoMjApCiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfV09SRF9PRkZTRVQJR0VOTUFTSygxOSwgMTYpCiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfRU5EX1ZBTElECQlCSVQoMTQpCiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfRU5EX0JZVEVfT0ZGU0VUCUdFTk1BU0soMTMsIDgpCiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfVFNDX09GRlNFVAkJR0VOTUFTSyg3LCA2KQomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1BBUklUWQkJQklUKDApCiYjNDM7CiYjNDM7LyogRGF0YSBmb290ZXIgKi8KJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFMJCUJJVCgzMSkKJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SWERfSEVBREVSX0JBRAlCSVQoMzApCiYjNDM7I2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfQ09ORklHX1NZTkMJCUJJVCgyOSkKJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SWF9DSFVOS1MJCUdFTk1BU0soMjgsIDI0KQomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0RBVEFfVkFMSUQJCUJJVCgyMSkKJiM0MzsjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9TVEFSVF9WQUxJRAkJQklUKDIwKQomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1dPUkRfT0ZGU0VUCUdFTk1BU0soMTksIDE2KQomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VORF9WQUxJRAkJQklUKDE0KQomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JUU0FfVkFMSUQJCUJJVCg3KQomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JUU1BfVkFMSUQJCUJJVCg2KQomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VORF9CWVRFX09GRlNFVAlHRU5NQVNLKDEzLCA4KQomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1RYX0NSRURJVFMJCUdFTk1BU0soNSwgMSkKJiM0MzsKJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9TSVpFCQkJNAomIzQzOyNkZWZpbmUgT0FfVEM2X0NUUkxfUkVHX1ZBTFVFX1NJWkUJCTQKJiM0MzsjZGVmaW5lIE9BX1RDNl9DVFJMX0lHTk9SRURfU0laRQkJNAomIzQzOyNkZWZpbmUgT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSUwkJMTI4CiYjNDM7I2RlZmluZSBPQV9UQzZfQ1RSTF9TUElfQlVGX1NJWkUJCShPQV9UQzZfQ1RSTF9IRUFERVJfU0laRSAmIzQzO1wKJiM0MzsJCQkJCQkoT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSUyAqXAomIzQzOwkJCQkJCU9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFKSAmIzQzO1wKJiM0MzsJCQkJCQlPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkUpCiYjNDM7I2RlZmluZSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFCQk2NAomIzQzOyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NJWkUJCQk0CiYjNDM7I2RlZmluZSBPQV9UQzZfQ0hVTktfU0laRQkJCShPQV9UQzZfREFUQV9IRUFERVJfU0laRSAmIzQzO1wKJiM0MzsJCQkJCQlPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFKQomIzQzOyNkZWZpbmUgT0FfVEM2X01BWF9UWF9DSFVOS1MJCQk0OAomIzQzOyNkZWZpbmUgT0FfVEM2X1NQSV9EQVRBX0JVRl9TSVpFCQkoT0FfVEM2X01BWF9UWF9DSFVOS1MgKlwKJiM0MzsJCQkJCQlPQV9UQzZfQ0hVTktfU0laRSkKJiM0MzsjZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfREVMQVkJCTEwMDAKJiM0MzsjZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfVElNRU9VVAkJMTAwMDAwMAomIzQzOwomIzQzOyNkZWZpbmUgT0FfVEM2X1RTVEFNUF9TWgkJCTgKJiM0MzsKJiM0MzsjZGVmaW5lIE9BX1RDNl9UVFNDQV9SRUdfSUQJCQkxCiYjNDM7I2RlZmluZSBPQV9UQzZfVFRTQ0JfUkVHX0lECQkJMgomIzQzOyNkZWZpbmUgT0FfVEM2X1RUU0NDX1JFR19JRAkJCTMKJiM0MzsKJiM0MzsvKiBJbnRlcm5hbCBzdHJ1Y3R1cmUgZm9yIE1BQy1QSFkgZHJpdmVycyAqLwomIzQzO3N0cnVjdCBvYV90YzYgewomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwomIzQzOwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqbWRpb2J1czsKJiM0MzsJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKJiM0MzsJc3RydWN0IG11dGV4IHNwaV9jdHJsX2xvY2s7IC8qIFByb3RlY3RzIHNwaSBjb250cm9sIHRyYW5zZmVyICovCiYjNDM7CXNwaW5sb2NrX3QgdHhfc2tiX2xvY2s7IC8qIFByb3RlY3RzIHR4IHNrYiBoYW5kbGluZyAqLwomIzQzOwl2b2lkICpzcGlfY3RybF90eF9idWY7CiYjNDM7CXZvaWQgKnNwaV9jdHJsX3J4X2J1ZjsKJiM0MzsJdm9pZCAqc3BpX2RhdGFfdHhfYnVmOwomIzQzOwl2b2lkICpzcGlfZGF0YV9yeF9idWY7CiYjNDM7CXN0cnVjdCBza19idWZmICpvbmdvaW5nX3R4X3NrYjsKJiM0MzsJc3RydWN0IHNrX2J1ZmYgKndhaXRpbmdfdHhfc2tiOwomIzQzOwlzdHJ1Y3Qgc2tfYnVmZiAqcnhfc2tiOwomIzQzOwl1MTYgdHhfc2tiX29mZnNldDsKJiM0MzsJdTE2IHNwaV9kYXRhX3R4X2J1Zl9vZmZzZXQ7CiYjNDM7CXUxNiB0eF9jcmVkaXRzOwomIzQzOwl1OCByeF9jaHVua3NfYXZhaWxhYmxlOwomIzQzOwlib29sIHJ4X2J1Zl9vdmVyZmxvdzsKJiM0MzsJYm9vbCBpbnRfZmxhZzsKJiM0MzsJYm9vbCBkaXNhYmxlX3RyYWZmaWM7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2tfaW5mbyBwdHBfY2xvY2tfaW5mbzsKJiM0MzsJc3RydWN0IGh3dHN0YW1wX2NvbmZpZyB0c19jb25maWc7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgdHhfdHNfc2tiX3E7CiYjNDM7CXN0cnVjdCBwdHBfY2xvY2sgKnB0cF9jbG9jazsKJiM0MzsJYm9vbCBod190c3RhbXBfc3VwcG9ydGVkOwomIzQzOwlib29sIGh3X3RzdGFtcF9lbmFibGVkOwomIzQzOwl1MzIgdHhfaHd0c3RhbXBfcGt0czsKJiM0MzsJdTMyIHR4X2h3dHN0YW1wX2xvc3Q7CiYjNDM7CXUzMiB0eF9od3RzdGFtcF9lcnI7CiYjNDM7CWludCB2ZW5kMV9tbXM7CiYjNDM7CXU4IHR4X3RzX2lkeDsKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gb2FfdGM2X2hlYWRlcl90eXBlIHsKJiM0MzsJT0FfVEM2X0NUUkxfSEVBREVSLAomIzQzOwlPQV9UQzZfREFUQV9IRUFERVIsCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIG9hX3RjNl9yZWdpc3Rlcl9vcCB7CiYjNDM7CU9BX1RDNl9DVFJMX1JFR19SRUFEID0gMCwKJiM0MzsJT0FfVEM2X0NUUkxfUkVHX1dSSVRFID0gMSwKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0gb2FfdGM2X2RhdGFfdmFsaWRfaW5mbyB7CiYjNDM7CU9BX1RDNl9EQVRBX0lOVkFMSUQsCiYjNDM7CU9BX1RDNl9EQVRBX1ZBTElELAomIzQzO307CiYjNDM7CiYjNDM7ZW51bSBvYV90YzZfZGF0YV9zdGFydF92YWxpZF9pbmZvIHsKJiM0MzsJT0FfVEM2X0RBVEFfU1RBUlRfSU5WQUxJRCwKJiM0MzsJT0FfVEM2X0RBVEFfU1RBUlRfVkFMSUQsCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIG9hX3RjNl9kYXRhX2VuZF92YWxpZF9pbmZvIHsKJiM0MzsJT0FfVEM2X0RBVEFfRU5EX0lOVkFMSUQsCiYjNDM7CU9BX1RDNl9EQVRBX0VORF9WQUxJRCwKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBvYV90YzZfdHN0YW1wX2lvY3RsKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiYjNDM7CiYjNDM7I2VuZGlmIC8qIE9BX1RDNl9TVERfREVGX0ggKi8KJiM0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfdHN0YW1wLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2X3RzdGFtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODBmMWE0OTE2YTNlMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfdHN0YW1wLmMKQEAgLTAsMCAmIzQzOzEsMjA1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzOwomIzQzOy8qCiYjNDM7ICogT1BFTiBBbGxpYW5jZSAxMEJBU0XigJFUMXggTUFD4oCRUEhZIFNlcmlhbCBJbnRlcmZhY2UgZnJhbWV3b3JrCiYjNDM7ICoKJiM0MzsgKiBBdXRob3I6IFNlbHZhIFJhamFnb3BhbCAmbHQ7c2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaXRmaWVsZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pb3BvbGwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2FfdGM2LmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtvYV90YzZfc3RkX2RlZi5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IG9hX3RjNl9zZXRfaHd0c3RhbXBfc2V0dGluZ3Moc3RydWN0IG9hX3RjNiAqdGM2KQomIzQzO3sKJiM0MzsJdTMyIGNmZzAsIGlycW0sIHN0YXR1czA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19DT05GSUcwLCAmYW1wO2NmZzApOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7dGM2LSZndDtzcGktJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVhZCBDRkcwIHJlZ2lzdGVyXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfSU5UX01BU0swLCAmYW1wO2lycW0pOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7dGM2LSZndDtzcGktJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gcmVhZCBJUlFNIHJlZ2lzdGVyXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBIYXJkd2FyZSB0aW1lc3RhbXAgZmVhdHVyZSBzdXBwb3J0cyA2NC1iaXQgdGltZXN0YW1wIG9ubHkgKi8KJiM0MzsJaWYgKHRjNi0mZ3Q7dHNfY29uZmlnLnR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT04gfHwKJiM0MzsJICAgIHRjNi0mZ3Q7dHNfY29uZmlnLnJ4X2ZpbHRlciA9PSBIV1RTVEFNUF9GSUxURVJfQUxMKQomIzQzOwkJY2ZnMCB8PSAoQ09ORklHMF9GVFNFX0VOQUJMRSB8CiYjNDM7CQkJIENPTkZJRzBfRlRTU182NEJJVF9UU1RBTVApOwomIzQzOwllbHNlCiYjNDM7CQljZmcwICZhbXA7PSB+Q09ORklHMF9GVFNFX0VOQUJMRTsKJiM0MzsKJiM0MzsJaWYgKHRjNi0mZ3Q7dHNfY29uZmlnLnR4X3R5cGUgPT0gSFdUU1RBTVBfVFhfT04pCiYjNDM7CQlpcnFtICZhbXA7PSB+SU5UX01BU0swX1RUU0NBX01BU0s7CiYjNDM7CWVsc2UKJiM0MzsJCWlycW0gfD0gSU5UX01BU0swX1RUU0NBX01BU0s7CiYjNDM7CiYjNDM7CS8qIENsZWFyIHRpbWVzdGFtcCByZWxhdGVkIElSUXMgKi8KJiM0MzsJc3RhdHVzMCA9IFNUQVRVUzBfVFRTQ0FfTUFTSzsKJiM0MzsJcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19TVEFUVVMwLCBzdGF0dXMwKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3RjNi0mZ3Q7c3BpLSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHdyaXRlIFNUQVRVUzAgcmVnaXN0ZXJcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfSU5UX01BU0swLCBpcnFtKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3RjNi0mZ3Q7c3BpLSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHdyaXRlIElSUU0gcmVnaXN0ZXJcbiYjMzQ7KTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfQ09ORklHMCwgY2ZnMCk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDt0YzYtJmd0O3NwaS0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byB3cml0ZSBDRkcwIHJlZ2lzdGVyXG4mIzM0Oyk7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwlpZiAoY2ZnMCAmYW1wOyBDT05GSUcwX0ZUU0VfRU5BQkxFKQomIzQzOwkJdGM2LSZndDtod190c3RhbXBfZW5hYmxlZCA9IHRydWU7CiYjNDM7CWVsc2UKJiM0MzsJCXRjNi0mZ3Q7aHdfdHN0YW1wX2VuYWJsZWQgPSBmYWxzZTsKJiM0MztvdXQ6CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIG9hX3RjNl9od3RzdGFtcF9nZXQgLSBnZXRzIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWcKJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LgomIzQzOyAqIEBjZmc6IGtlcm5lbCBjb3B5IG9mIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWcKJiM0MzsgKi8KJiM0Mzt2b2lkIG9hX3RjNl9od3RzdGFtcF9nZXQoc3RydWN0IG9hX3RjNiAqdGM2LAomIzQzOwkJCSBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKQomIzQzO3sKJiM0MzsJaHd0c3RhbXBfY29uZmlnX3RvX2tlcm5lbChjZmcsICZhbXA7dGM2LSZndDt0c19jb25maWcpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaHd0c3RhbXBfZ2V0KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBvYV90YzZfaHd0c3RhbXBfc2V0IC0gc2V0cyBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlnCiYjNDM7ICogQHRjNjogb2FfdGM2IHN0cnVjdC4KJiM0MzsgKiBAY2ZnOiBrZXJuZWwgY29weSBvZiBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlnCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvdGhlcndpc2UgZmFpbGVkLgomIzQzOyAqLwomIzQzO2ludCBvYV90YzZfaHd0c3RhbXBfc2V0KHN0cnVjdCBvYV90YzYgKnRjNiwKJiM0MzsJCQlzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKQomIzQzO3sKJiM0MzsJaWYgKCFuZXRpZl9ydW5uaW5nKHRjNi0mZ3Q7bmV0ZGV2KSkKJiM0MzsJCXJldHVybiAtRUlPOwomIzQzOwomIzQzOwlpZiAoIXRjNi0mZ3Q7aHdfdHN0YW1wX3N1cHBvcnRlZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJc3dpdGNoIChjZmctJmd0O3R4X3R5cGUpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9UWF9PRkY6CiYjNDM7CWNhc2UgSFdUU1RBTVBfVFhfT046CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoY2ZnLSZndDtyeF9maWx0ZXIpIHsKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORToKJiM0MzsJY2FzZSBIV1RTVEFNUF9GSUxURVJfQUxMOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9TT01FOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9TWU5DOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQ6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9TWU5DOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9TWU5DOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6CiYjNDM7CWNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9TWU5DOgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfREVMQVlfUkVROgomIzQzOwljYXNlIEhXVFNUQU1QX0ZJTFRFUl9OVFBfQUxMOgomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsJfQomIzQzOwlod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWwoJmFtcDt0YzYtJmd0O3RzX2NvbmZpZywgY2ZnKTsKJiM0MzsKJiM0MzsJLyogU3VwcG9ydHMgdGltZXN0YW1waW5nIGFsbCB0cmFmZmljICovCiYjNDM7CWlmIChjZmctJmd0O3J4X2ZpbHRlciAhPSBIV1RTVEFNUF9GSUxURVJfTk9ORSkKJiM0MzsJCXRjNi0mZ3Q7dHNfY29uZmlnLnJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7CiYjNDM7CXJldHVybiBvYV90YzZfc2V0X2h3dHN0YW1wX3NldHRpbmdzKHRjNik7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9od3RzdGFtcF9zZXQpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIG9hX3RjNl9nZXRfdHNfc3RhdHMgLSBQcm92aWRlcyB0aW1lc3RhbXBpbmcgc3RhdHMKJiM0MzsgKiBAdGM2OiBvYV90YzYgc3RydWN0LgomIzQzOyAqIEBzdGF0czogZXRodG9vbCBkYXRhIHN0cnVjdHVyZSB0byBmaWxsIGluCiYjNDM7ICovCiYjNDM7dm9pZCBvYV90YzZfZ2V0X3RzX3N0YXRzKHN0cnVjdCBvYV90YzYgKnRjNiwKJiM0MzsJCQkgc3RydWN0IGV0aHRvb2xfdHNfc3RhdHMgKnN0YXRzKQomIzQzO3sKJiM0MzsJc3RhdHMtJmd0O3BrdHMgPSB0YzYtJmd0O3R4X2h3dHN0YW1wX3BrdHM7CiYjNDM7CXN0YXRzLSZndDtlcnIgPSB0YzYtJmd0O3R4X2h3dHN0YW1wX2VycjsKJiM0MzsJc3RhdHMtJmd0O2xvc3QgPSB0YzYtJmd0O3R4X2h3dHN0YW1wX2xvc3Q7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9nZXRfdHNfc3RhdHMpOwomIzQzOwomIzQzO2ludCBvYV90YzZfdHN0YW1wX2lvY3RsKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIGtjZmc7CiYjNDM7CXN0cnVjdCBod3RzdGFtcF9jb25maWcgdHNjZmc7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlpZiAoIXRjNi0mZ3Q7aHdfdHN0YW1wX3N1cHBvcnRlZCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKGNtZCA9PSBTSU9DU0hXVFNUQU1QKSB7CiYjNDM7CQlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDt0c2NmZywgcnEtJmd0O2lmcl9kYXRhLAomIzQzOwkJCQkgICBzaXplb2YodHNjZmcpKSkKJiM0MzsJCQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJCWlmICh0c2NmZy5mbGFncykKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWh3dHN0YW1wX2NvbmZpZ190b19rZXJuZWwoJmFtcDtrY2ZnLCAmYW1wO3RzY2ZnKTsKJiM0MzsJCXJldCA9IG9hX3RjNl9od3RzdGFtcF9zZXQodGM2LCAmYW1wO2tjZmcpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CWlmIChjb3B5X3RvX3VzZXIocnEtJmd0O2lmcl9kYXRhLCAmYW1wO3RjNi0mZ3Q7dHNfY29uZmlnLAomIzQzOwkJCSBzaXplb2YodGM2LSZndDt0c19jb25maWcpKSkKJiM0MzsJCXJldCA9IC1FRkFVTFQ7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIG9hX3RjNl9nZXRfdHNfaW5mbyAtIFByb3ZpZGVzIHRpbWVzdGFtcCBpbmZvIGZvciBldGh0b29sCiYjNDM7ICogQHRjNjogb2FfdGM2IHN0cnVjdC4KJiM0MzsgKiBAaW5mbzogZXRodG9vbCB0aW1lc3RhbXBpbmcgaW5mbyBzdHJ1Y3R1cmUKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuCiYjNDM7ICovCiYjNDM7aW50IG9hX3RjNl9nZXRfdHNfaW5mbyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsCiYjNDM7CQkgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pCiYjNDM7ewomIzQzOwlpZiAoIXRjNi0mZ3Q7cHRwX2Nsb2NrKQomIzQzOwkJcmV0dXJuIGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8odGM2LSZndDtuZXRkZXYsIGluZm8pOwomIzQzOwomIzQzOwlpbmZvLSZndDtzb190aW1lc3RhbXBpbmcgPSBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSB8CiYjNDM7CQkJCVNPRl9USU1FU1RBTVBJTkdfVFhfSEFSRFdBUkUgfAomIzQzOwkJCQlTT0ZfVElNRVNUQU1QSU5HX1JYX0hBUkRXQVJFOwomIzQzOwlpbmZvLSZndDtwaGNfaW5kZXggPSBwdHBfY2xvY2tfaW5kZXgodGM2LSZndDtwdHBfY2xvY2spOwomIzQzOwlpbmZvLSZndDt0eF90eXBlcyA9IEJJVChIV1RTVEFNUF9UWF9PTik7CiYjNDM7CWluZm8tJmd0O3J4X2ZpbHRlcnMgPSBCSVQoSFdUU1RBTVBfRklMVEVSX0FMTCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfZ2V0X3RzX2luZm8pOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O09QRU4gQWxsaWFuY2UgMTBCQVNF4oCRVDF4IE1BQ+KAkVBIWSBTZXJpYWwgSW50ZXJmYWNlIExpYiYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7U2VsdmEgUmFqYWdvcGFsICZsdDtzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb20mZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOGQ3MjE5NDE1MWVhNzkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvS2NvbmZpZwpAQCAtMCwwICYjNDM7MSwyMSBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIG9uc2VtaSBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uCiYjNDM7IwomIzQzOwomIzQzO2NvbmZpZyBORVRfVkVORE9SX09OU0VNSQomIzQzOwlib29sICYjMzQ7b25zZW1pIG5ldHdvcmsgZGV2aWNlcyYjMzQ7CiYjNDM7CWhlbHAKJiM0MzsJICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuCiYjNDM7CiYjNDM7CSAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlCiYjNDM7CSAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbAomIzQzOwkgIHRoZSBxdWVzdGlvbnMgYWJvdXQgb25zZW1pIGV0aGVybmV0IGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91CiYjNDM7CSAgd2lsbCBiZSBhc2tlZCBmb3IgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLgomIzQzOwomIzQzO2lmIE5FVF9WRU5ET1JfT05TRU1JCiYjNDM7CiYjNDM7c291cmNlICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL0tjb25maWcmIzM0OwomIzQzOwomIzQzO2VuZGlmICMgTkVUX1ZFTkRPUl9PTlNFTUkKJiM0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZjNkNGViMTU0MzEzYzYKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIE1ha2VmaWxlIGZvciB0aGUgb25zZW1pIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuCiYjNDM7IwomIzQzOwomIzQzO29iai0kKENPTkZJR19TMjUwMF9NQUNQSFkpICYjNDM7PSBzMjUwMC8KJiM0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0MWZiYWYxYjY0MTg3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL0tjb25maWcKQEAgLTAsMCAmIzQzOzEsMTkgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKJiM0MzsjCiYjNDM7IyBvbnNlbWkgUzI1MDAgRHJpdmVyIFN1cHBvcnQKJiM0MzsjCiYjNDM7CiYjNDM7Y29uZmlnIFMyNTAwX01BQ1BIWQomIzQzOwl0cmlzdGF0ZSAmIzM0O1MyNTAwIHN1cHBvcnQmIzM0OwomIzQzOwlkZXBlbmRzIG9uIFNQSQomIzQzOwlpbXBseSBORVRfU0VMRlRFU1RTCiYjNDM7CXNlbGVjdCBOQ04yNjAwMF9QSFkKJiM0MzsJc2VsZWN0IE9BX1RDNgomIzQzOwloZWxwCiYjNDM7CSAgU3VwcG9ydCBmb3IgdGhlIG9uc2VtaSBUUzI1MDAgTUFDUEhZIEV0aGVybmV0IGNoaXAuCiYjNDM7CSAgSXQgd29ya3MgdW5kZXIgdGhlIGZyYW1ld29yayB0aGF0IGNvbmZvcm0gdG8gT1BFTiBBbGxpYW5jZQomIzQzOwkgIDEwQkFTRS1UMXggU2VyaWFsIEludGVyZmFjZSBzcGVjaWZpY2F0aW9uLgomIzQzOwomIzQzOwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZQomIzQzOwkgIGNhbGxlZCBzMjUwMC4KJiM0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNjFlYzcwNWNkZjlmMWIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvTWFrZWZpbGUKQEAgLTAsMCAmIzQzOzEsNyBAQAomIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQomIzQzOyMKJiM0MzsjIE1ha2VmaWxlIGZvciB0aGUgb25zZW1pIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuCiYjNDM7IwomIzQzO29iai0kKENPTkZJR19TMjUwMF9NQUNQSFkpIDo9IHMyNTAwLm8KJiM0MztzMjUwMC1vYmpzIDo9IHMyNTAwX21haW4ubyBzMjUwMF9ldGh0b29sLm8gczI1MDBfcHRwLm8KJiM0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfZXRodG9vbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wYjdlZjQ5MGQ3Y2FjMwotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9ldGh0b29sLmMKQEAgLTAsMCAmIzQzOzEsMzYwIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAyMDI2IFNlbWljb25kdWN0b3IgQ29tcG9uZW50cyBJbmR1c3RyaWVzLCBMTEMgKCYjMzQ7b25zZW1pJiMzNDspLgomIzQzOyAqIG9uc2VtaSYjMzk7cyBTMjUwMCAxMEJBU0UtVDFTIE1BQy1QSFkgZHJpdmVyCiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2V0aHRvb2wuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L3NlbGZ0ZXN0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3MyNTAwX2h3X2RlZi5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX05VTV9SRUdTCQkJMzgKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR0RVTVBfTEVOCQkoc2l6ZW9mKHUzMikgKiAoUzI1MDBfTlVNX1JFR1MgKiAyKSkKJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX05VTV9NQUNfU1RBVFMJCTIxCiYjNDM7I2RlZmluZSBTMjUwMF9OVU1fUk1PTl9TVEFUUwkJMTIKJiM0MzsKJiM0MztzdHJ1Y3QgczI1MDBfcmVnX21hcCB7CiYjNDM7CXUxNiByZWc7CiYjNDM7CXUxNiBtbXM7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHMyNTAwX3JlZ19tYXAgczI1MDBfcmVnX21hcFtTMjUwMF9OVU1fUkVHU10gPSB7CiYjNDM7CXsgUzI1MDBfUkVHX1ZTX09OSVBWRVIsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1RXRUFLUzEsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1BMQ0FFWFQsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1BNQVRVTkUwLCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1BNQVRVTkUxLCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1QxU1dVUFRVTkUsICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0hERCwgICAgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0RDUV9UT0lELCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0RDUV9TUUksICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0RDUV9TUUlfUExVUywgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMSwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMiwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMywgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1dTX1NUQVRVU18wLCAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMCwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1dTX1NUQVRVU18xLCAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMSwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX01JSU1JUlFFLCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSwKJiM0MzsJeyBTMjUwMF9SRUdfVlNfTUlJTUlSUVMsICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LAomIzQzOwl7IFMyNTAwX1JFR19WU19ESU9DRkcwLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0NISVBJRCwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSwKJiM0MzsJeyBTMjUwMF9SRUdfVlNfVFdFQUtTMiwgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LAomIzQzOwl7IFMyNTAwX1JFR19WU19NQUNJRDAsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX01BQ0lEMSwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSwKJiM0MzsJeyBTMjUwMF9SRUdfVlNfTlZNX0hFQUxUSCwgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LAomIzQzOwl7IFMyNTAwX1JFR19WU19QVFBfU0VDLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1BUUE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSwKJiM0MzsJeyBTMjUwMF9SRUdfVlNfUFRQX1NFVFNFQywgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LAomIzQzOwl7IFMyNTAwX1JFR19WU19TRVROU0VDLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX1BUUF9BREosICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSwKJiM0MzsJeyBTMjUwMF9SRUdfVlNfQ01QQ1RMLCAgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LAomIzQzOwl7IFMyNTAwX1JFR19WU19DTVBTRUMsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0NNUE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSwKJiM0MzsJeyBTMjUwMF9SRUdfVlNfQ01QUEVSLCAgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LAomIzQzOwl7IFMyNTAwX1JFR19WU19DQVBDVEwsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sCiYjNDM7CXsgUzI1MDBfUkVHX1ZTX0NBUFNFQywgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSwKJiM0MzsJeyBTMjUwMF9SRUdfVlNfQ0FQTlNFQywgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LAomIzQzOwl7IFMyNTAwX1JFR19WU19CQ05DTlQsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sCiYjNDM7fTsKJiM0MzsKJiM0MztlbnVtIHMyNTAwX3N0YXRfaWR4IHsKJiM0MzsJUzI1MDBfTVNUT0NURUNUU1RYX0lEWCA9IDAsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1RYT0tfSURYLAomIzQzOwlTMjUwMF9NU1RCQ0FTVFRYT0tfSURYLAomIzQzOwlTMjUwMF9NU1RNQ0FTVFRYT0tfSURYLAomIzQzOwlTMjUwMF9NU1RGUkFNRVNUWDY0X0lEWCwKJiM0MzsJUzI1MDBfTVNURlJBTUVTVFg2NV9JRFgsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1RYMTI4X0lEWCwKJiM0MzsJUzI1MDBfTVNURlJBTUVTVFgyNTZfSURYLAomIzQzOwlTMjUwMF9NU1RGUkFNRVNUWDUxMl9JRFgsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1RYMTAyNF9JRFgsCiYjNDM7CVMyNTAwX01TVFRYVU5ERUZMT1dfSURYLAomIzQzOwlTMjUwMF9NU1RTSU5HTEVDT0xfSURYLAomIzQzOwlTMjUwMF9NU1RNVUxUSUNPTF9JRFgsCiYjNDM7CVMyNTAwX01TVEVYQ0VTU0NPTF9JRFgsCiYjNDM7CVMyNTAwX01TVERFRkVSUkVEVFhfSURYLAomIzQzOwlTMjUwMF9NU1RDUlNFUlJfSURYLAomIzQzOwlTMjUwMF9NU1RPQ1RFQ1RTUlhfSURYLAomIzQzOwlTMjUwMF9NU1RGUkFNRVNSWE9LX0lEWCwKJiM0MzsJUzI1MDBfTVNUQkNBU1RSWE9LX0lEWCwKJiM0MzsJUzI1MDBfTVNUTUNBU1RSWE9LX0lEWCwKJiM0MzsJUzI1MDBfTVNURlJBTUVTUlg2NF9JRFgsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1JYNjVfSURYLAomIzQzOwlTMjUwMF9NU1RGUkFNRVNSWDEyOF9JRFgsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1JYMjU2X0lEWCwKJiM0MzsJUzI1MDBfTVNURlJBTUVTUlg1MTJfSURYLAomIzQzOwlTMjUwMF9NU1RGUkFNRVNSWDEwMjRfSURYLAomIzQzOwlTMjUwMF9NU1RSVU5UU0VSUl9JRFgsCiYjNDM7CVMyNTAwX01TVFJYVE9PTE9OR19JRFgsCiYjNDM7CVMyNTAwX01TVEZDU0VSUlNfSURYLAomIzQzOwlTMjUwMF9NU1RTWU1CT0xFUlJTX0lEWCwKJiM0MzsJUzI1MDBfTVNUQUxJR05FUlJTX0lEWCwKJiM0MzsJUzI1MDBfTVNUUlhPVkVSRkxPV19JRFgsCiYjNDM7CVMyNTAwX01TVFJYRFJPUFBFRF9JRFgsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3QgY2hhciBzMjUwMF9tYWNfc3RhdF9zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKJiM0MzsJJiMzNDt0eF9ieXRlcyYjMzQ7LAomIzQzOwkmIzM0O3R4X2ZyYW1lcyYjMzQ7LAomIzQzOwkmIzM0O3R4X2Jyb2FkY2FzdF9mcmFtZXMmIzM0OywKJiM0MzsJJiMzNDt0eF9tdWx0aWNhc3RfZnJhbWVzJiMzNDssCiYjNDM7CSYjMzQ7dHhfdW5kZXJmbG93X2Vycm9ycyYjMzQ7LAomIzQzOwkmIzM0O3R4X3NpbmdsZV9jb2xsaXNpb25zJiMzNDssCiYjNDM7CSYjMzQ7dHhfbXVsdGlwbGVfY29sbGlzaW9ucyYjMzQ7LAomIzQzOwkmIzM0O3R4X2V4Y2Vzc2l2ZV9jb2xsaXNpb25zJiMzNDssCiYjNDM7CSYjMzQ7dHhfZGVmZXJyZWRfZnJhbWVzJiMzNDssCiYjNDM7CSYjMzQ7dHhfY2Fycmllcl9zZW5zZV9lcnJvcnMmIzM0OywKJiM0MzsJJiMzNDtyeF9ieXRlcyYjMzQ7LAomIzQzOwkmIzM0O3J4X2ZyYW1lcyYjMzQ7LAomIzQzOwkmIzM0O3J4X2Jyb2FkY2FzdF9mcmFtZXMmIzM0OywKJiM0MzsJJiMzNDtyeF9tdWx0aWNhc3RfZnJhbWVzJiMzNDssCiYjNDM7CSYjMzQ7cnhfcnVudHMmIzM0OywKJiM0MzsJJiMzNDtyeF9vdmVyc2l6ZV9mcmFtZXMmIzM0OywKJiM0MzsJJiMzNDtyeF9jcmNfZXJyb3JzJiMzNDssCiYjNDM7CSYjMzQ7cnhfc3ltYm9sX2Vycm9ycyYjMzQ7LAomIzQzOwkmIzM0O3J4X2FsaWdubWVudF9lcnJvcnMmIzM0OywKJiM0MzsJJiMzNDtyeF9idXN5X2Ryb3BzJiMzNDssCiYjNDM7CSYjMzQ7cnhfbWlzbWF0Y2hfZHJvcHMmIzM0OywKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCB1OCBzMjUwMF9tYWNfc3RhdF9tYXBbUzI1MDBfTlVNX01BQ19TVEFUU10gPSB7CiYjNDM7CVMyNTAwX01TVE9DVEVDVFNUWF9JRFgsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1RYT0tfSURYLAomIzQzOwlTMjUwMF9NU1RCQ0FTVFRYT0tfSURYLAomIzQzOwlTMjUwMF9NU1RNQ0FTVFRYT0tfSURYLAomIzQzOwlTMjUwMF9NU1RUWFVOREVGTE9XX0lEWCwKJiM0MzsJUzI1MDBfTVNUU0lOR0xFQ09MX0lEWCwKJiM0MzsJUzI1MDBfTVNUTVVMVElDT0xfSURYLAomIzQzOwlTMjUwMF9NU1RFWENFU1NDT0xfSURYLAomIzQzOwlTMjUwMF9NU1RERUZFUlJFRFRYX0lEWCwKJiM0MzsJUzI1MDBfTVNUQ1JTRVJSX0lEWCwKJiM0MzsJUzI1MDBfTVNUT0NURUNUU1JYX0lEWCwKJiM0MzsJUzI1MDBfTVNURlJBTUVTUlhPS19JRFgsCiYjNDM7CVMyNTAwX01TVEJDQVNUUlhPS19JRFgsCiYjNDM7CVMyNTAwX01TVE1DQVNUUlhPS19JRFgsCiYjNDM7CVMyNTAwX01TVFJVTlRTRVJSX0lEWCwKJiM0MzsJUzI1MDBfTVNUUlhUT09MT05HX0lEWCwKJiM0MzsJUzI1MDBfTVNURkNTRVJSU19JRFgsCiYjNDM7CVMyNTAwX01TVFNZTUJPTEVSUlNfSURYLAomIzQzOwlTMjUwMF9NU1RBTElHTkVSUlNfSURYLAomIzQzOwlTMjUwMF9NU1RSWE9WRVJGTE9XX0lEWCwKJiM0MzsJUzI1MDBfTVNUUlhEUk9QUEVEX0lEWCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCB1OCBzMjUwMF9ybW9uX3N0YXRfbWFwW1MyNTAwX05VTV9STU9OX1NUQVRTXSA9IHsKJiM0MzsJUzI1MDBfTVNURlJBTUVTVFg2NF9JRFgsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1RYNjVfSURYLAomIzQzOwlTMjUwMF9NU1RGUkFNRVNUWDEyOF9JRFgsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1RYMjU2X0lEWCwKJiM0MzsJUzI1MDBfTVNURlJBTUVTVFg1MTJfSURYLAomIzQzOwlTMjUwMF9NU1RGUkFNRVNUWDEwMjRfSURYLAomIzQzOwlTMjUwMF9NU1RGUkFNRVNSWDY0X0lEWCwKJiM0MzsJUzI1MDBfTVNURlJBTUVTUlg2NV9JRFgsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1JYMTI4X0lEWCwKJiM0MzsJUzI1MDBfTVNURlJBTUVTUlgyNTZfSURYLAomIzQzOwlTMjUwMF9NU1RGUkFNRVNSWDUxMl9JRFgsCiYjNDM7CVMyNTAwX01TVEZSQU1FU1JYMTAyNF9JRFgsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHMyNTAwX3Jtb25faGlzdF9yYW5nZXNbXSA9IHsKJiM0MzsJeyA2NCwgNjQgfSwKJiM0MzsJeyA2NSwgMTI3IH0sCiYjNDM7CXsgMTI4LCAyNTUgfSwKJiM0MzsJeyAyNTYsIDUxMSB9LAomIzQzOwl7IDUxMiwgMTAyMyB9LAomIzQzOwl7IDEwMjQsIDIwMDAgfSwKJiM0MzsJeyB9LAomIzQzO307CiYjNDM7CiYjNDM7I2RlZmluZSBTMjUwMF9NQUNfU1RBVFNfTEVOIEFSUkFZX1NJWkUoczI1MDBfbWFjX3N0YXRfc3RyaW5ncykKJiM0MztzdGF0aWNfYXNzZXJ0KFMyNTAwX01BQ19TVEFUU19MRU4gPT0gUzI1MDBfTlVNX01BQ19TVEFUUyk7CiYjNDM7c3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKHMyNTAwX21hY19zdGF0X21hcCkgPT0gUzI1MDBfTlVNX01BQ19TVEFUUyk7CiYjNDM7c3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKHMyNTAwX3Jtb25fc3RhdF9tYXApID09IFMyNTAwX05VTV9STU9OX1NUQVRTKTsKJiM0MzsKJiM0MzsjZGVmaW5lIFNUQVRfUkVHX09GRlNFVCh4KSAoKFMyNTAwX1JFR19NQUNfU1QjI3gpIC0gXAomIzQzOwkJCSAgIFMyNTAwX1JFR19NQUNfRklSU1RfU1RBVCkKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzMjUwMF91cGRhdGVfc3RhdHMoc3RydWN0IHMyNTAwX2luZm8gKnByaXYpCiYjNDM7ewomIzQzOwl1NjQgKmRhdGEgPSBwcml2LSZndDtzdGF0c19kYXRhOwomIzQzOwl1MzIgKnJlZ3MsICpycHRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZWdzID0ga21hbGxvY19hcnJheShTMjUwMF9OVU1fU1RBVF9SRUdTLCBzaXplb2YodTMyKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcmVncykKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJcmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyhwcml2LSZndDt0YzYsIFMyNTAwX1JFR19NQUNfU1RPQ1RFQ1RTVFhMLAomIzQzOwkJCQkJT0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIHJlZ3MsCiYjNDM7CQkJCQlTMjUwMF9OVU1fU1RBVF9SRUdTKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlycHRyID0gcmVnczsKJiM0MzsKJiM0MzsJLyogVFggYnl0ZXMgaXMgYSA2NC1iaXQgcmVnaXN0ZXIgdGhhdCBzcGFucyBvdmVyIHR3byAzMi1iaXQgcmVncwomIzQzOwkgKiBub3RlOiBIVyBkb2VzIGF1dG8tZnJlZXplIHdoZW4gcmVhZGluZyBMU0IgYW5kIHVuLWZyZWV6ZSBvbiBNU0IKJiM0MzsJICovCiYjNDM7CSooZGF0YSYjNDM7JiM0MzspICYjNDM7PSAoKHU2NCkqcnB0cikgfCAoKCh1NjQpKihycHRyICYjNDM7IDEpKSAmbHQ7Jmx0OyAzMik7CiYjNDM7CiYjNDM7CS8qIHJ1biB1bnRpbCB0aGUgbmV4dCA2NC1iaXQgcmVnaXN0ZXIgKi8KJiM0MzsJZm9yIChycHRyICYjNDM7PSAyOyAocnB0ciAtIHJlZ3MpICZsdDsgU1RBVF9SRUdfT0ZGU0VUKE9DVEVDVFNSWEwpOyAmIzQzOyYjNDM7cnB0cikKJiM0MzsJCSooZGF0YSYjNDM7JiM0MzspICYjNDM7PSAqcnB0cjsKJiM0MzsKJiM0MzsJLyogUlggYnl0ZXMgaXMgYSA2NC1iaXQgcmVnaXN0ZXIgdGhhdCBzcGFucyBvdmVyIHR3byAzMi1iaXQgcmVncwomIzQzOwkgKiBub3RlOiBIVyBkb2VzIGF1dG8tZnJlZXplIHdoZW4gcmVhZGluZyBMU0IgYW5kIHVuLWZyZWV6ZSBvbiBNU0IKJiM0MzsJICovCiYjNDM7CSooZGF0YSYjNDM7JiM0MzspICYjNDM7PSAoKHU2NCkqcnB0cikgfCAoKCh1NjQpKihycHRyICYjNDM7IDEpKSAmbHQ7Jmx0OyAzMik7CiYjNDM7CiYjNDM7CWZvciAocnB0ciAmIzQzOz0gMjsgKHJwdHIgLSByZWdzKSAmbHQ7IFMyNTAwX05VTV9TVEFUX1JFR1M7ICYjNDM7JiM0MztycHRyKQomIzQzOwkJKihkYXRhJiM0MzsmIzQzOykgJiM0Mzs9ICpycHRyOwomIzQzO291dDoKJiM0MzsJa2ZyZWUocmVncyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHMyNTAwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiYjNDM7ewomIzQzOwlzdHJzY3B5KGluZm8tJmd0O2RyaXZlciwgRFJWX05BTUUsIHNpemVvZihpbmZvLSZndDtkcml2ZXIpKTsKJiM0MzsJc3Ryc2NweShpbmZvLSZndDtidXNfaW5mbywgZGV2X25hbWUoJmFtcDtuZGV2LSZndDtkZXYpLAomIzQzOwkJc2l6ZW9mKGluZm8tJmd0O2J1c19pbmZvKSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgczI1MDBfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBzc2V0KQomIzQzO3sKJiM0MzsJc3dpdGNoIChzc2V0KSB7CiYjNDM7CWNhc2UgRVRIX1NTX1NUQVRTOgomIzQzOwkJcmV0dXJuIFMyNTAwX01BQ19TVEFUU19MRU47CiYjNDM7CWNhc2UgRVRIX1NTX1RFU1Q6CiYjNDM7CQlyZXR1cm4gbmV0X3NlbGZ0ZXN0X2dldF9jb3VudCgpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHMyNTAwX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgc3RyaW5nc2V0LAomIzQzOwkJCSAgICAgIHU4ICpidWYpCiYjNDM7ewomIzQzOwlzd2l0Y2ggKHN0cmluZ3NldCkgewomIzQzOwljYXNlIEVUSF9TU19TVEFUUzoKJiM0MzsJCW1lbWNweShidWYsIHMyNTAwX21hY19zdGF0X3N0cmluZ3MsCiYjNDM7CQkgICAgICAgUzI1MDBfTUFDX1NUQVRTX0xFTiAqIEVUSF9HU1RSSU5HX0xFTik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBFVEhfU1NfVEVTVDoKJiM0MzsJCW5ldF9zZWxmdGVzdF9nZXRfc3RyaW5ncyhidWYpOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgczI1MDBfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJCSAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlzMjUwMF91cGRhdGVfc3RhdHMocHJpdik7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBTMjUwMF9OVU1fTUFDX1NUQVRTOyBpJiM0MzsmIzQzOykKJiM0MzsJCWRhdGFbaV0gPSBwcml2LSZndDtzdGF0c19kYXRhW3MyNTAwX21hY19zdGF0X21hcFtpXV07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHMyNTAwX3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKQomIzQzO3sKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJdTggb2Zmc2V0OwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJczI1MDBfdXBkYXRlX3N0YXRzKHByaXYpOwomIzQzOwomIzQzOwltZW1zZXQocm1vbl9zdGF0cywgMCwgc2l6ZW9mKCpybW9uX3N0YXRzKSk7CiYjNDM7CXJtb25fc3RhdHMtJmd0O3NyYyA9IEVUSFRPT0xfTUFDX1NUQVRTX1NSQ19BR0dSRUdBVEU7CiYjNDM7CXJtb25fc3RhdHMtJmd0O3VuZGVyc2l6ZV9wa3RzID0gcHJpdi0mZ3Q7c3RhdHNfZGF0YVtTMjUwMF9NU1RSVU5UU0VSUl9JRFhdOwomIzQzOwlybW9uX3N0YXRzLSZndDtvdmVyc2l6ZV9wa3RzID0gcHJpdi0mZ3Q7c3RhdHNfZGF0YVtTMjUwMF9NU1RSWFRPT0xPTkdfSURYXTsKJiM0MzsJcm1vbl9zdGF0cy0mZ3Q7ZnJhZ21lbnRzID0gcHJpdi0mZ3Q7c3RhdHNfZGF0YVtTMjUwMF9NU1RGQ1NFUlJTX0lEWF07CiYjNDM7CXJtb25fc3RhdHMtJmd0O2phYmJlcnMgPSBwcml2LSZndDtzdGF0c19kYXRhW1MyNTAwX01TVEFMSUdORVJSU19JRFhdOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgNjsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCW9mZnNldCA9IHMyNTAwX3Jtb25fc3RhdF9tYXBbaV07CiYjNDM7CQlybW9uX3N0YXRzLSZndDtoaXN0X3R4W2ldID0gcHJpdi0mZ3Q7c3RhdHNfZGF0YVtvZmZzZXRdOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyA2OyBpJiM0MzsmIzQzOykgewomIzQzOwkJb2Zmc2V0ID0gczI1MDBfcm1vbl9zdGF0X21hcFtpICYjNDM7IDZdOwomIzQzOwkJcm1vbl9zdGF0cy0mZ3Q7aGlzdFtpXSA9IHByaXYtJmd0O3N0YXRzX2RhdGFbb2Zmc2V0XTsKJiM0MzsJfQomIzQzOwomIzQzOwkqcmFuZ2VzID0gczI1MDBfcm1vbl9oaXN0X3JhbmdlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzMjUwMF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0c19pbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9hX3RjNl9nZXRfdHNfaW5mbyhwcml2LSZndDt0YzYsIHRzX2luZm8pOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHMyNTAwX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIFMyNTAwX1JFR0RVTVBfTEVOOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzMjUwMF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkgICBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLCB2b2lkICpwKQomIzQzO3sKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJdTMyICpwYnVmZiA9ICh1MzIgKilwOwomIzQzOwl1MTYgcmVnLCBtbXM7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJcmVncy0mZ3Q7dmVyc2lvbiA9IDA7CiYjNDM7CW1lbXNldChwLCAwLCBTMjUwMF9SRUdEVU1QX0xFTik7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyhuZGV2KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFMyNTAwX05VTV9SRUdTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJdmFsID0gMDsKJiM0MzsJCXJlZyA9IHMyNTAwX3JlZ19tYXBbaV0ucmVnOwomIzQzOwkJbW1zID0gczI1MDBfcmVnX21hcFtpXS5tbXM7CiYjNDM7CQlyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCByZWcsIG1tcywKJiM0MzsJCQkJCSAgICAgICAmYW1wO3ZhbCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJKnBidWZmJiM0MzsmIzQzOyA9IGNwdV90b19iZTMyKCgodTMyKW1tcyAmbHQ7Jmx0OyAxNikgfCByZWcpOwomIzQzOwkJKnBidWZmJiM0MzsmIzQzOyA9IGNwdV90b19iZTMyKHZhbCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgczI1MDBfZ2V0X3RzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlvYV90YzZfZ2V0X3RzX3N0YXRzKHByaXYtJmd0O3RjNiwgdHNfc3RhdHMpOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgczI1MDBfZXRodG9vbF9vcHMgPSB7CiYjNDM7CS5nZXRfZHJ2aW5mbyA9IHMyNTAwX2dldF9kcnZpbmZvLAomIzQzOwkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAomIzQzOwkuZ2V0X2xpbmtfa3NldHRpbmdzID0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLAomIzQzOwkuc2V0X2xpbmtfa3NldHRpbmdzID0gcGh5X2V0aHRvb2xfc2V0X2xpbmtfa3NldHRpbmdzLAomIzQzOwkuZ2V0X3RzX3N0YXRzID0gczI1MDBfZ2V0X3RzX3N0YXRzLAomIzQzOwkuZ2V0X3NzZXRfY291bnQgPSBzMjUwMF9nZXRfc3NldF9jb3VudCwKJiM0MzsJLmdldF9zdHJpbmdzID0gczI1MDBfZ2V0X3N0cmluZ3MsCiYjNDM7CS5nZXRfZXRodG9vbF9zdGF0cyA9IHMyNTAwX2dldF9ldGh0b29sX3N0YXRzLAomIzQzOwkuZ2V0X3Jtb25fc3RhdHMgPSBzMjUwMF9ybW9uX3N0YXRzLAomIzQzOwkuZ2V0X3RzX2luZm8gPSBzMjUwMF9nZXRfdHNfaW5mbywKJiM0MzsJLmdldF9yZWdzX2xlbiA9IHMyNTAwX2dldF9yZWdzX2xlbiwKJiM0MzsJLmdldF9yZWdzID0gczI1MDBfZ2V0X3JlZ3MsCiYjNDM7CS5zZWxmX3Rlc3QgPSBuZXRfc2VsZnRlc3QsCiYjNDM7fTsKJiM0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9od19kZWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9od19kZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMmQ5YzBiM2FkMzliY2IKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfaHdfZGVmLmgKQEAgLTAsMCAmIzQzOzEsMjIzIEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KJiM0MzsvKgomIzQzOyAqIENvcHlyaWdodCAyMDI2IFNlbWljb25kdWN0b3IgQ29tcG9uZW50cyBJbmR1c3RyaWVzLCBMTEMgKCYjMzQ7b25zZW1pJiMzNDspLgomIzQzOyAqIG9uc2VtaSYjMzk7cyBTMjUwMCAxMEJBU0UtVDFTIE1BQy1QSFkgZHJpdmVyCiYjNDM7ICovCiYjNDM7CiYjNDM7I2lmbmRlZiBTMjUwMF9IV19ERUZfSAomIzQzOyNkZWZpbmUgUzI1MDBfSFdfREVGX0gKJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHJ0aW1lci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxZG9tYWluLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5bGluay5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zcGkvc3BpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L29hX3RjNi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRfdHN0YW1wLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgva3RpbWUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXJybm8uaCZndDsKJiM0MzsKJiM0MzsjZGVmaW5lIERSVl9OQU1FCQkJJiMzNDtzMjUwMCYjMzQ7CiYjNDM7CiYjNDM7I2RlZmluZSBTMjUwMF9OX01DQVNUX0ZJTFRFUlMJCTMKJiM0MzsKJiM0MzsvKiBTUEkgT0lEIGFuZCBtb2RlbCByZWdpc3RlciAqLwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1NQSV9QSFlJRAkJMHgxCiYjNDM7CiYjNDM7I2RlZmluZSBTMjUwMF9TUElfUEhZSURfT1VJX1NISUZUCTEwCiYjNDM7I2RlZmluZSBTMjUwMF9TUElfUEhZSURfT1VJX01BU0sJR0VOTUFTSygzMSwgUzI1MDBfU1BJX1BIWUlEX09VSV9TSElGVCkKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSzAJR0VOTUFTSygyMSwgMTYpCiYjNDM7I2RlZmluZSBTMjUwMF9TUElfUEhZSURfT1VJX01BU0sxCUdFTk1BU0soMTUsIDgpCiYjNDM7I2RlZmluZSBTMjUwMF9TUElfUEhZSURfT1VJX01BU0syCUdFTk1BU0soNywgMCkKJiM0MzsvKiBTUEkgY29uZmlndXJhdGlvbiByZWdpc3RlciAjMCAqLwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1NQSV9DRkcwCQkweDQKJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9DRkcwX1NZTkNfQklUCQlCSVQoMTUpCiYjNDM7I2RlZmluZSBTMjUwMF9TUElfQ0ZHMF9UWENUSFJFU0hfU0hJRlQJMTAKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9DRkcwX1JYQ1RFX0JJVAlCSVQoOCkKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9DRkcwX0ZUU1NfNjRfQklUCUJJVCg2KQomIzQzOyNkZWZpbmUgUzI1MDBfU1BJX0NGRzBfQ1BTX1NISUZUCTAKJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX1RYQ1RIUkVTSF84CQkweDIKJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX0NQU182NAkJCTB4NgomIzQzOwomIzQzOy8qIFNQSSBzdGF0dXMgcmVnaXN0ZXIgIzAgKi8KJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19TUElfU1QwCQkweDgKJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9TVDBfQ0RQRV9CSVQJCUJJVCgxMikKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFhGQ1NFX0JJVAlCSVQoMTEpCiYjNDM7I2RlZmluZSBTMjUwMF9TUElfU1QwX1RUU0NBQ19CSVQJQklUKDEwKQomIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9UVFNDQUJfQklUCUJJVCg5KQomIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9UVFNDQUFfQklUCUJJVCg4KQomIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9SRVNFVENfQklUCUJJVCg2KQomIzQzOyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9IRFJFX0JJVAkJQklUKDUpCiYjNDM7I2RlZmluZSBTMjUwMF9TUElfU1QwX0xPRkVfQklUCQlCSVQoNCkKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9TVDBfUlhCT0VfQklUCQlCSVQoMykKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFhCVUVfQklUCQlCSVQoMikKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFhCT0VfQklUCQlCSVQoMSkKJiM0MzsjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFhQRV9CSVQJCUJJVCgwKQomIzQzOwomIzQzOy8qIFNQSSBJUlEgZW5hYmxlIHJlZ2lzdGVyICMwICh1c2UgdGhlIFMyNTAwX1NQSV9TVDBfKl9CSVQgY29uc3RhbnRzKSAqLwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1NQSV9JUlFNMAkJMHhjCiYjNDM7CiYjNDM7LyogU1BJIGJ1ZmZlciBzdGF0dXMgcmVnaXN0ZXIgKi8KJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19TUElfQlVGU1QJCTB4YgomIzQzOwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19DVFJMCQkweDAKJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX01BQ19DVFJMX01DU0ZfQklUCQlCSVQoMTgpCiYjNDM7I2RlZmluZSBTMjUwMF9NQUNfQ1RSTF9BRFJGX0JJVAkJQklUKDE2KQomIzQzOyNkZWZpbmUgUzI1MDBfTUFDX0NUUkxfRkNTQV9CSVQJCUJJVCg4KQomIzQzOyNkZWZpbmUgUzI1MDBfTUFDX0NUUkxfVFhFTl9CSVQJCUJJVCgxKQomIzQzOyNkZWZpbmUgUzI1MDBfTUFDX0NUUkxfUlhFTl9CSVQJCUJJVCgwKQomIzQzOwomIzQzOy8qIE1BQyBhZGRyZXNzIGZpbHRlciByZWdpc3RlcnMgKi8KJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfQUREUkZJTFRMKG4pCSgxNiAmIzQzOyAyICogKG4pKQomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19BRERSRklMVEgobikJKDE3ICYjNDM7IDIgKiAobikpCiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLTChuKQkoMzIgJiM0MzsgMiAqIChuKSkKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfQUREUk1BU0tIKG4pCSgzMyAmIzQzOyAyICogKG4pKQomIzQzOwomIzQzOyNkZWZpbmUgUzI1MDBfTUFDX0FERFJGSUxUX0VOX0JJVAlCSVQoMzEpCiYjNDM7CiYjNDM7LyogTUFDIHN0YXRpc3RpYyByZWdpc3RlcnMgKi8KJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RPQ1RFQ1RTVFhMCTQ4CiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1RYSAk0OQomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYT0sJNTAKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RCQ0FTVFRYT0sJNTEKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RNQ0FTVFRYT0sJNTIKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWDY0CTUzCiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTVFg2NQk1NAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYMTI4CTU1CiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTVFgyNTYJNTYKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWDUxMgk1NwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYMTAyNAk1OAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFRYVU5ERUZMT1cJNTkKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RTSU5HTEVDT0wJNjAKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RNVUxUSUNPTAk2MQomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEVYQ0VTU0NPTAk2MgomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVERFRkVSUkVEVFgJNjMKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RDUlNFUlIJCTY0CiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1JYTAk2NQomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVE9DVEVDVFNSWEgJNjYKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWE9LCTY3CiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUQkNBU1RSWE9LCTY4CiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUTUNBU1RSWE9LCTY5CiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTUlg2NAk3MAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1JYNjUJNzEKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDEyOAk3MgomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1JYMjU2CTczCiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTUlg1MTIJNzQKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDEwMjQJNzUKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RSVU5UU0VSUgk3NgomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFJYVE9PTE9ORwk3NwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZDU0VSUlMJCTc4CiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUU1lNQk9MRVJSUwk3OQomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEFMSUdORVJSUwk4MAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFJYT1ZFUkZMT1cJODEKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RSWERST1BQRUQJODIKJiM0MzsKJiM0MzsvKiBGaXJzdC9sYXN0IHN0YXRpc3RpYyByZWdpc3RlciBmb3Igc2VxdWVudGlhbCBhY2Nlc3MgKi8KJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19NQUNfRklSU1RfU1RBVAlTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1RYTAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX01BQ19MQVNUX1NUQVQJCVMyNTAwX1JFR19NQUNfU1RSWERST1BQRUQKJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX05VTV9TVEFUX1JFR1MgXAomIzQzOwkoUzI1MDBfUkVHX01BQ19MQVNUX1NUQVQgLSBTMjUwMF9SRUdfTUFDX0ZJUlNUX1NUQVQgJiM0MzsgMSkKJiM0MzsjZGVmaW5lIFMyNTAwX05VTV9TVEFUX1ZBUlMJCShTMjUwMF9OVU1fU1RBVF9SRUdTIC0gMikKJiM0MzsKJiM0MzsvKiBWZW5kb3Igc3BlY2lmaWMgTU1TNCByZWdpc3RlcnMgKi8KJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19PTklQVkVSCQkweDgwMDAKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19UV0VBS1MxCQkweDgwMDEKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19QTENBRVhUCQkweDgwMDIKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19QTUFUVU5FMAkJMHg4MDAzCiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfUE1BVFVORTEJCTB4ODAwNAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1QxU1dVUFRVTkUJCTB4ODAwNwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0hERAkJMHhDQzAxCiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfRENRX1RPSUQJCTB4Q0MwMgomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0RDUV9TUUkJCTB4Q0MwMwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0RDUV9TUUlfUExVUwkweENDMDQKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19IRERfVFVORTEJCTB4Q0QwMAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMgkJMHhDRDAxCiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfSEREX1RVTkUzCQkweENEMDIKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19XU19TVEFUVVNfMAkweEQwMDAKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19XU19DVFJMXzAJCTB4RDAwMQomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1dTX1NUQVRVU18xCTB4RDEwMAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMQkJMHhEMTAxCiYjNDM7CiYjNDM7LyogVmVuZG9yIHNwZWNpZmljIE1NUzEyIHJlZ2lzdGVycyAqLwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX01JSU1JUlFFCQkweDEwCiYjNDM7CiYjNDM7LyogTUlJTSBJUlEgc3RhdHVzIHJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfTUlJTUlSUVMJCTB4MTEKJiM0MzsjZGVmaW5lIE1JSU1fSVJRX1NUQVRVU19SU1RTX1NISUZUCTE1CiYjNDM7I2RlZmluZSBNSUlNX0lSUV9TVEFUVVNfUlNUUwkJQklUKE1JSU1fSVJRX1NUQVRVU19SU1RTX1NISUZUKQomIzQzOwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0RJT0NGRzAJCTB4MTIKJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19DSElQSUQJCTB4MTAwMAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1RXRUFLUzIJCTB4MTAwMQomIzQzOwomIzQzOy8qIFBlcm1hbmVudCBNQUMgYWRkcmVzcyByZWdpc3RlciAqLwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX01BQ0lEMAkJMHgxMDAyCiYjNDM7I2RlZmluZSBTMjUwMF9WU19NQUNJRDBfQllURTRfTUFTSwlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgUzI1MDBfVlNfTUFDSUQwX0JZVEU1X01BU0sJR0VOTUFTSyg3LCAwKQomIzQzOwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX01BQ0lEMQkJMHgxMDAzCiYjNDM7I2RlZmluZSBTMjUwMF9WU19NQUNJRDFfQllURTNfTUFTSwlHRU5NQVNLKDcsIDApCiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfTlZNX0hFQUxUSAkJMHgxMDA1CiYjNDM7CiYjNDM7LyogUFRQIHJlZ2lzdGVycyAqLwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1BUUF9TRUMJCTB4MTAxMAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1BUUF9TRVRTRUMJCTB4MTAxMgomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1BUUF9BREoJCTB4MTAxNAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1BUUE5TRUMJCTB4MTAxMQomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1NFVE5TRUMJCTB4MTAxMwomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NNUENUTAkJMHgxMDE1CiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfQ01QU0VDCQkweDEwMTYKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19DTVBOU0VDCQkweDEwMTcKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19DTVBQRVIJCTB4MTAxOAomIzQzOyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NBUENUTAkJMHgxMDE5CiYjNDM7I2RlZmluZSBTMjUwMF9SRUdfVlNfQ0FQU0VDCQkweDEwMUEKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19DQVBOU0VDCQkweDEwMUIKJiM0MzsjZGVmaW5lIFMyNTAwX1JFR19WU19CQ05DTlQJCTB4MTAxQwomIzQzOwomIzQzOy8qIHByb3RvdHlwZXMgLyBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLwomIzQzO2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgczI1MDBfZXRodG9vbF9vcHM7CiYjNDM7CiYjNDM7c3RydWN0IHMyNTAwX2luZm8gewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7CXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2OwomIzQzOwomIzQzOwkvKiBUbyBoYXZlIGF0b21pYyBzZXRfcnhfbW9kZSBvcGVyYXRpb24gKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwomIzQzOwomIzQzOwkvKiBUbyBoYXZlIGF0b21pYyBvcGVyYXRpb24gd2hlbiB0aW1lIGlzIGFkanVzdGVkICovCiYjNDM7CXN0cnVjdCBtdXRleCBwdHBfYWRqX2xvY2s7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwomIzQzOwomIzQzOwkvKiBnbG9iYWwgc3RhdGUgdmFyaWFibGVzICovCiYjNDM7CWJvb2wgZXZlbnRfcGVuZGluZzsKJiM0MzsJdW5zaWduZWQgaW50IG5kZXZfZmxhZ3M7CiYjNDM7CWJvb2wgcnhfZmxhZ3NfdXBkOwomIzQzOwomIzQzOwlzaWduZWQgbG9uZyBwb2xsX2ppZmY7CiYjNDM7CiYjNDM7CXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CiYjNDM7CiYjNDM7CS8qIHN0YXRpc3RpYyBjb3VudGVycyB2YXJpYWJsZXMgKi8KJiM0MzsJdTY0IHN0YXRzX2RhdGFbUzI1MDBfTlVNX1NUQVRfVkFSU107CiYjNDM7CiYjNDM7CS8qIFBUUCByZWxhdGVkIHZhcmlhYmxlcyAqLwomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX2Nsb2NrX2luZm87CiYjNDM7CXZvaWQgKnRjNjsKJiM0Mzt9OwomIzQzOwomIzQzO2ludCBzMjUwMF9wdHBfcmVnaXN0ZXIoc3RydWN0IHMyNTAwX2luZm8gKnByaXYpOwomIzQzOwomIzQzOyNlbmRpZiAvKiBTMjUwMF9IV19ERUZfSCAqLwomIzQzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJkODFiNDRmOGM3NmMyCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX21haW4uYwpAQCAtMCwwICYjNDM7MSw2NDkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IDIwMjYgU2VtaWNvbmR1Y3RvciBDb21wb25lbnRzIEluZHVzdHJpZXMsIExMQyAoJiMzNDtvbnNlbWkmIzM0OykuCiYjNDM7ICogb25zZW1pJiMzOTtzIFMyNTAwIDEwQkFTRS1UMVMgTUFDLVBIWSBkcml2ZXIKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZXRoZXJkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxY2hpcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGxhdGZvcm1fZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpdHJldi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9waHkuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3MyNTAwX2h3X2RlZi5oJiMzNDsKJiM0MzsKJiM0MzsvKiBTMjUwMCBmdW5jdGlvbnMgJmFtcDsgZGVmaW5pdGlvbnMgKi8KJiM0MzsKJiM0MzsjZGVmaW5lIFMyNTAwX1NUQVRVUzBfTUFTSwkoUzI1MDBfU1BJX1NUMF9DRFBFX0JJVCB8IFwKJiM0MzsJCQkJUzI1MDBfU1BJX1NUMF9UWEZDU0VfQklUIHwgXAomIzQzOwkJCQlTMjUwMF9TUElfU1QwX1RUU0NBQ19CSVQgfCBcCiYjNDM7CQkJCVMyNTAwX1NQSV9TVDBfVFRTQ0FCX0JJVCB8IFwKJiM0MzsJCQkJUzI1MDBfU1BJX1NUMF9UVFNDQUFfQklUIHwgXAomIzQzOwkJCQlTMjUwMF9TUElfU1QwX1JFU0VUQ19CSVQgfCBcCiYjNDM7CQkJCVMyNTAwX1NQSV9TVDBfSERSRV9CSVQgfCBcCiYjNDM7CQkJCVMyNTAwX1NQSV9TVDBfTE9GRV9CSVQgfCBcCiYjNDM7CQkJCVMyNTAwX1NQSV9TVDBfUlhCT0VfQklUIHwgXAomIzQzOwkJCQlTMjUwMF9TUElfU1QwX1RYQlVFX0JJVCB8IFwKJiM0MzsJCQkJUzI1MDBfU1BJX1NUMF9UWEJPRV9CSVQgfCBcCiYjNDM7CQkJCVMyNTAwX1NQSV9TVDBfVFhQRV9CSVQpCiYjNDM7CiYjNDM7LyogSW5pdGlhbGl6ZXMgdGhlIG5ldCBkZXZpY2UgTUFDIGFkZHJlc3MgYnkgcmVhZGluZyB0aGUgVUlEIHN0b3JlZAomIzQzOyAqIGludG8gdGhlIGRldmljZSBpbnRlcm5hbCBub24tdm9sYXRpbGUgbWVtb3J5LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgczI1MDBfcmVhZF9tYWNfZnJvbV9udm1lbShzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdikKJiM0Mzt7CiYjNDM7CXUxNiBtbXMgPSBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMjsKJiM0MzsJdTggYWRkcltFVEhfQUxFTl07CiYjNDM7CXUzMiBtYWMxID0gMDsKJiM0MzsJdTMyIG1hYzAgPSAwOwomIzQzOwl1MzIgdmFsOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCBTMjUwMF9SRUdfVlNfTUFDSUQxLAomIzQzOwkJCQkgICAgICAgbW1zLCAmYW1wO21hYzEpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwgUzI1MDBfUkVHX1ZTX01BQ0lEMCwKJiM0MzsJCQkJICAgICAgIG1tcywgJmFtcDttYWMwKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CS8qIFByZS1wcm9kdWN0aW9uIHBhcnRzIG1heSBoYXZlIDAgKi8KJiM0MzsJaWYgKG1hYzAgPT0gMCAmYW1wOyZhbXA7IG1hYzEgPT0gMCkKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CiYjNDM7CXJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHByaXYtJmd0O3RjNiwgUzI1MDBfUkVHX1NQSV9QSFlJRCwKJiM0MzsJCQkJICAgJmFtcDt2YWwpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJdmFsID0gKHZhbCAmYW1wOyBTMjUwMF9TUElfUEhZSURfT1VJX01BU0spICZndDsmZ3Q7CiYjNDM7CSAgICAgICBTMjUwMF9TUElfUEhZSURfT1VJX1NISUZUOwomIzQzOwomIzQzOwkvKiBNYXBwaW5nIGZvciBiaXRzIGZyb20gUEhZIElEIHJlZ2lzdGVyIHRvIE9VSSBhcyBnaXZlIGJlbG93LgomIzQzOwkgKiAtIFBIWS1JRFsxMDoxN10gcHJvdmlkZXMgT1VJWzE2OjIzXQomIzQzOwkgKiAtIFBIWS1JRFsxODoyNV0gcHJvdmlkZXMgT1VJWzg6MTVdCiYjNDM7CSAqIC0gUEhZLUlEWzI2OjMxXSBwcm92aWRlcyBPVUlbMjo3XQomIzQzOwkgKgomIzQzOwkgKiBIYXJkd2FyZSBwcmVzZW50cyBPVUkgc3VjaCBhIHdheSB0aGF0IHRoaXMgcmVxdWlyZXMgbm90IGp1c3QKJiM0MzsJICogYnl0ZSBsZXZlbCBzd2FwLCBiaXQgbGV2ZWwgc3dhcCBpcyBuZWVkZWQgYXMgd2VsbC4KJiM0MzsJICovCiYjNDM7CWFkZHJbMF0gPSBiaXRyZXY4KEZJRUxEX0dFVChTMjUwMF9TUElfUEhZSURfT1VJX01BU0swLCB2YWwpKTsKJiM0MzsJYWRkclsxXSA9IGJpdHJldjgoRklFTERfR0VUKFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSzEsIHZhbCkpOwomIzQzOwlhZGRyWzJdID0gYml0cmV2OChGSUVMRF9HRVQoUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMiwgdmFsKSk7CiYjNDM7CiYjNDM7CWFkZHJbM10gPSBGSUVMRF9HRVQoUzI1MDBfVlNfTUFDSUQxX0JZVEUzX01BU0ssIG1hYzEpOwomIzQzOwlhZGRyWzRdID0gRklFTERfR0VUKFMyNTAwX1ZTX01BQ0lEMF9CWVRFNF9NQVNLLCBtYWMwKTsKJiM0MzsJYWRkcls1XSA9IEZJRUxEX0dFVChTMjUwMF9WU19NQUNJRDBfQllURTVfTUFTSywgbWFjMCk7CiYjNDM7CiYjNDM7CV9fZGV2X2FkZHJfc2V0KHByaXYtJmd0O25kZXYsIGFkZHIsIEVUSF9BTEVOKTsKJiM0MzsJcHJpdi0mZ3Q7bmRldi0mZ3Q7YWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1BFUk07CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIFdyaXRlcyBNQUMgYWRkcmVzcyB0byBtYWNwaHkgcmVnaXN0ZXJzICovCiYjNDM7c3RhdGljIGludCBzMjUwMF9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgY29uc3QgdTggKm1hYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXUxNiBtbXMgPSBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMTsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogU2V0IHVuaWNhc3QgYWRkcmVzcyBmaWx0ZXIgKi8KJiM0MzsJcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsCiYjNDM7CQkJCQlTMjUwMF9SRUdfTUFDX0FERFJNQVNLTCgwKSwKJiM0MzsJCQkJCW1tcywgMHhmZmZmZmZmZik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwKJiM0MzsJCQkJCVMyNTAwX1JFR19NQUNfQUREUk1BU0tIKDApLAomIzQzOwkJCQkJbW1zLCAweGZmZmYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJdmFsID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZhbXA7bWFjWzJdKTsKJiM0MzsKJiM0MzsJcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsCiYjNDM7CQkJCQlTMjUwMF9SRUdfTUFDX0FERFJGSUxUTCgwKSwKJiM0MzsJCQkJCW1tcywgdmFsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXZhbCA9IFMyNTAwX01BQ19BRERSRklMVF9FTl9CSVQgfCBnZXRfdW5hbGlnbmVkX2JlMTYobWFjKTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LAomIzQzOwkJCQkJIFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKDApLAomIzQzOwkJCQkJIG1tcywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiwKJiM0MzsJCQkJICAgICAgdTMyIGluX2JpdHMsIGJvb2wgY2xyKQomIzQzO3sKJiM0MzsJdTE2IG1tcyA9IE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxOwomIzQzOwl1MzIgcmVnID0gUzI1MDBfUkVHX01BQ19DVFJMOwomIzQzOwl1MzIgcnZhbCA9IDA7CiYjNDM7CXUzMiB3dmFsID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwgcmVnLCBtbXMsICZhbXA7cnZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoY2xyKQomIzQzOwkJd3ZhbCA9IHJ2YWwgJmFtcDsgfmluX2JpdHM7CiYjNDM7CWVsc2UKJiM0MzsJCXd2YWwgPSBydmFsIHwgaW5fYml0czsKJiM0MzsJaWYgKHJ2YWwgIT0gd3ZhbCkKJiM0MzsJCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCByZWcsCiYjNDM7CQkJCQkJbW1zLCB3dmFsKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzMjUwMF9pbml0KHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIE1BQy1QSFkmIzM5O3MgYmVoYXZpb3IgKi8KJiM0MzsJdmFsID0gUzI1MDBfU1BJX0NGRzBfU1lOQ19CSVQgfCBTMjUwMF9TUElfQ0ZHMF9SWENURV9CSVQgfAomIzQzOwkgICAgICAoUzI1MDBfVFhDVEhSRVNIXzggJmx0OyZsdDsgUzI1MDBfU1BJX0NGRzBfVFhDVEhSRVNIX1NISUZUKSB8CiYjNDM7CSAgICAgIChTMjUwMF9DUFNfNjQgJmx0OyZsdDsgUzI1MDBfU1BJX0NGRzBfQ1BTX1NISUZUKSB8CiYjNDM7CSAgICAgIFMyNTAwX1NQSV9DRkcwX0ZUU1NfNjRfQklUOwomIzQzOwomIzQzOwlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIocHJpdi0mZ3Q7dGM2LCBTMjUwMF9SRUdfU1BJX0NGRzAsIHZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwl2YWwgPSAodTMyKX4oUzI1MDBfU1BJX1NUMF9SRVNFVENfQklUIHwKJiM0MzsJCSAgICAgUzI1MDBfU1BJX1NUMF9IRFJFX0JJVCB8IFMyNTAwX1NQSV9TVDBfTE9GRV9CSVQgfAomIzQzOwkJICAgICBTMjUwMF9TUElfU1QwX1JYQk9FX0JJVCB8IFMyNTAwX1NQSV9TVDBfVFhCT0VfQklUIHwKJiM0MzsJCSAgICAgUzI1MDBfU1BJX1NUMF9UWFBFX0JJVCk7CiYjNDM7CiYjNDM7CXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LSZndDt0YzYsIFMyNTAwX1JFR19TUElfSVJRTTAsIHZhbCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBQcm9ncmFtIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW50byB0aGUgZGV2aWNlICovCiYjNDM7CXJldCA9IHMyNTAwX3NldF9tYWNfZmlsdGVyKHByaXYtJmd0O25kZXYsIHByaXYtJmd0O25kZXYtJmd0O2Rldl9hZGRyKTsKJiM0MzsKJiM0MzsJdmFsID0gUzI1MDBfTUFDX0NUUkxfQURSRl9CSVQgfCBTMjUwMF9NQUNfQ1RSTF9GQ1NBX0JJVDsKJiM0MzsKJiM0MzsJcmV0dXJuIHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsIHZhbCwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzMjUwMF9zaHV0ZG93bihzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdikKJiM0Mzt7CiYjNDM7CXUzMiB2YWwgPSBTMjUwMF9NQUNfQ1RSTF9UWEVOX0JJVCB8IFMyNTAwX01BQ19DVFJMX1JYRU5fQklUOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHByaXYtJmd0O25kZXY7CiYjNDM7CiYjNDM7CW5ldGlmX3N0b3BfcXVldWUobmRldik7CiYjNDM7CXBoeV9zdG9wKG5kZXYtJmd0O3BoeWRldik7CiYjNDM7CiYjNDM7CXMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsIHZhbCwgdHJ1ZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgczI1MDBfc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IHMyNTAwX2luZm8gKnByaXYsCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGludCByeF9mbGFncykKJiM0Mzt7CiYjNDM7CXUzMiB2YWwgPSBTMjUwMF9NQUNfQ1RSTF9BRFJGX0JJVDsKJiM0MzsJYm9vbCBjbHIgPSBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHJ4X2ZsYWdzICZhbXA7IElGRl9QUk9NSVNDKQomIzQzOwkJY2xyID0gdHJ1ZTsKJiM0MzsJcmV0dXJuIHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsIHZhbCwgY2xyKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzMjUwMF9zZXRfbXVsdGljYXN0X21vZGUoc3RydWN0IHMyNTAwX2luZm8gKnByaXYsCiYjNDM7CQkJCSAgICB1bnNpZ25lZCBpbnQgcnhfZmxhZ3MpCiYjNDM7ewomIzQzOwl1MTYgbW1zID0gT0FfVEM2X1BIWV9DNDVfTUFDX01NUzE7CiYjNDM7CWludCBpLCByZXQgPSAwOwomIzQzOwl1MTYgYWRkcjsKJiM0MzsJdTMyIHZhbDsKJiM0MzsKJiM0MzsJaWYgKChyeF9mbGFncyAmYW1wOyBJRkZfQUxMTVVMVEkpIHx8CiYjNDM7CSAgICAobmV0ZGV2X21jX2NvdW50KHByaXYtJmd0O25kZXYpICZndDsgUzI1MDBfTl9NQ0FTVF9GSUxURVJTKSkgewomIzQzOwkJLyogRGlzYWJsZSBtdWx0aWNhc3QgZmlsdGVyICovCiYjNDM7CQlyZXQgPSBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhwcml2LAomIzQzOwkJCQkJCSBTMjUwMF9NQUNfQ1RSTF9NQ1NGX0JJVCwKJiM0MzsJCQkJCQkgdHJ1ZSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBBY2NlcHQgYWxsIG11bHRpY2FzdHMgKi8KJiM0MzsJCWFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLTCgxKTsKJiM0MzsJCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCBhZGRyLAomIzQzOwkJCQkJCW1tcywgMCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSTUFTS0goMSk7CiYjNDM7CQlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwgYWRkciwKJiM0MzsJCQkJCQltbXMsIDB4MTAwKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCWFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJGSUxUTCgxKTsKJiM0MzsJCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCBhZGRyLAomIzQzOwkJCQkJCW1tcywgMCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQl2YWwgPSBTMjUwMF9NQUNfQUREUkZJTFRfRU5fQklUIHwgMHgwMDAwMDEwMDsKJiM0MzsJCWFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJGSUxUSCgxKTsKJiM0MzsJCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LCBhZGRyLAomIzQzOwkJCQkJCW1tcywgdmFsKTsKJiM0MzsJfSBlbHNlIGlmIChuZXRkZXZfbWNfY291bnQocHJpdi0mZ3Q7bmRldikgPT0gMCkgewomIzQzOwkJLyogRW5hYmxlIG11bHRpY2FzdCBmaWx0ZXIgKi8KJiM0MzsJCXJldCA9IHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsCiYjNDM7CQkJCQkJIFMyNTAwX01BQ19DVFJMX01DU0ZfQklULAomIzQzOwkJCQkJCSBmYWxzZSk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBEaXNhYmxlIGZpbHRlcnMgKi8KJiM0MzsJCWZvciAoaSA9IDE7IGkgJmx0Oz0gUzI1MDBfTl9NQ0FTVF9GSUxURVJTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJGSUxUSChpKTsKJiM0MzsJCQlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwKJiM0MzsJCQkJCQkJYWRkciwgbW1zLCAwKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9IGVsc2UgewomIzQzOwkJc3RydWN0IG5ldGRldl9od19hZGRyICpoYTsKJiM0MzsJCXUzMiBhZGRyaCwgYWRkcmw7CiYjNDM7CiYjNDM7CQkvKiBEaXNhYmxlIG11bHRpY2FzdCBmaWx0ZXIgKi8KJiM0MzsJCXJldCA9IHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsCiYjNDM7CQkJCQkJIFMyNTAwX01BQ19DVFJMX01DU0ZfQklULAomIzQzOwkJCQkJCSB0cnVlKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIERpc2FibGUgZmlsdGVycyAqLwomIzQzOwkJZm9yIChpID0gMTsgaSAmbHQ7PSBTMjUwMF9OX01DQVNUX0ZJTFRFUlM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJYWRkciA9IFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKGkpOwomIzQzOwkJCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LAomIzQzOwkJCQkJCQlhZGRyLCBtbXMsIDApOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlpID0gMTsKJiM0MzsJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBwcml2LSZndDtuZGV2KSB7CiYjNDM7CQkJaWYgKGkgJmd0OyBTMjUwMF9OX01DQVNUX0ZJTFRFUlMpCiYjNDM7CQkJCWJyZWFrOwomIzQzOwomIzQzOwkJCWFkZHJoID0gUzI1MDBfTUFDX0FERFJGSUxUX0VOX0JJVCB8CiYjNDM7CQkJCSBnZXRfdW5hbGlnbmVkX2JlMTYoaGEtJmd0O2FkZHIpOwomIzQzOwkJCWFkZHJsID0gZ2V0X3VuYWxpZ25lZF9iZTMyKCZhbXA7aGEtJmd0O2FkZHJbMl0pOwomIzQzOwomIzQzOwkJCWFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJGSUxUSChpKTsKJiM0MzsJCQlyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtJmd0O3RjNiwKJiM0MzsJCQkJCQkJYWRkciwgbW1zLAomIzQzOwkJCQkJCQlhZGRyaCk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCQlhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEwoaSk7CiYjNDM7CQkJcmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsCiYjNDM7CQkJCQkJCWFkZHIsIG1tcywKJiM0MzsJCQkJCQkJYWRkcmwpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkJYWRkciA9IFMyNTAwX1JFR19NQUNfQUREUk1BU0tMKGkpOwomIzQzOwkJCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LAomIzQzOwkJCQkJCQlhZGRyLCBtbXMsCiYjNDM7CQkJCQkJCTB4ZmZmZmZmZmYpOwomIzQzOwkJCWlmIChyZXQpCiYjNDM7CQkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkJYWRkciA9IFMyNTAwX1JFR19NQUNfQUREUk1BU0tIKGkpOwomIzQzOwkJCXJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LAomIzQzOwkJCQkJCQlhZGRyLCBtbXMsCiYjNDM7CQkJCQkJCTB4ZmZmZik7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCQlpJiM0MzsmIzQzOzsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKiBEZWZlcnJlZCBmdW5jdGlvbiBmb3IgYXBwbHlpbmcgUlggbW9kZSBmbGFncyBpbiBub24tYXRvbWljIGNvbnRleHQgKi8KJiM0MztzdGF0aWMgaW50IHMyNTAwX3J4X21vZGVfdXBkYXRlKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHJ4X2ZsYWdzOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ByaXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcnhfZmxhZ3MgPSBwcml2LSZndDtuZGV2X2ZsYWdzOwomIzQzOwlwcml2LSZndDtyeF9mbGFnc191cGQgPSBmYWxzZTsKJiM0MzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0ID0gczI1MDBfc2V0X3Byb21pc2N1b3VzX21vZGUocHJpdiwgcnhfZmxhZ3MpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXJldCA9IHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZShwcml2LCByeF9mbGFncyk7CiYjNDM7b3V0OgomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzMjUwMF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7cHJpdi0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwlwcml2LSZndDtyeF9mbGFnc191cGQgPSB0cnVlOwomIzQzOwlwcml2LSZndDtuZGV2X2ZsYWdzID0gbmRldi0mZ3Q7ZmxhZ3M7CiYjNDM7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtwcml2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDt0aHJlYWQpCiYjNDM7CQl3YWtlX3VwX3Byb2Nlc3MocHJpdi0mZ3Q7dGhyZWFkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzMjUwMF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnApCiYjNDM7ewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwomIzQzOwomIzQzOwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0mZ3Q7c2FfZGF0YSkpCiYjNDM7CQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CiYjNDM7CiYjNDM7CWV0aF9od19hZGRyX3NldChuZGV2LCBhZGRyLSZndDtzYV9kYXRhKTsKJiM0MzsJcmV0dXJuIHMyNTAwX3NldF9tYWNfZmlsdGVyKG5kZXYsIGFkZHItJmd0O3NhX2RhdGEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgbmV0ZGV2X3R4X3QgczI1MDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gb2FfdGM2X3N0YXJ0X3htaXQocHJpdi0mZ3Q7dGM2LCBza2IpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHMyNTAwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLAomIzQzOwkJICAgICAgIGludCBjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gb2FfdGM2X2lvY3RsKHByaXYtJmd0O3RjNiwgcnEsIGNtZCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHMyNTAwX3Byb2Nlc3NfZXZlbnRzKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCFwcml2LSZndDtldmVudF9wZW5kaW5nKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlwcml2LSZndDtldmVudF9wZW5kaW5nID0gZmFsc2U7CiYjNDM7CiYjNDM7CXJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHByaXYtJmd0O3RjNiwgUzI1MDBfUkVHX1NQSV9TVDAsICZhbXA7dmFsKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O3NwaS0mZ3Q7ZGV2LCAmIzM0O0Vycm9yIHJlYWRpbmcgU1QwIHJlZ2lzdGVyJiMzNDspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgczI1MDBfdGhyZWFkX2Z1bih2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBkYXRhOwomIzQzOwlib29sIHVwZGF0ZV9yeF9tb2RlID0gZmFsc2U7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CXNpZ25lZCBsb25nIHRvdXQ7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwl0b3V0ID0gcHJpdi0mZ3Q7cG9sbF9qaWZmOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlpZiAodXBkYXRlX3J4X21vZGUpIHsKJiM0MzsJCQlyZXQgPSBzMjUwMF9yeF9tb2RlX3VwZGF0ZShwcml2KTsKJiM0MzsJCQlpZiAodW5saWtlbHkocmV0KSkgewomIzQzOwkJCQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7c3BpLSZndDtkZXYsCiYjNDM7CQkJCQkmIzM0O0ZhaWxlZCB0byBzZXQgbmV3IFJYIG1vZGUmIzM0Oyk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICh0b3V0ID09IDApIHsKJiM0MzsJCQl0b3V0ID0gcHJpdi0mZ3Q7cG9sbF9qaWZmOwomIzQzOwomIzQzOwkJCS8qIEZvcmNlIGNoZWNraW5nIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKi8KJiM0MzsJCQlwcml2LSZndDtldmVudF9wZW5kaW5nID0gdHJ1ZTsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXMyNTAwX3Byb2Nlc3NfZXZlbnRzKHByaXYpOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtwcml2LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiYjNDM7CiYjNDM7CQl1cGRhdGVfcnhfbW9kZSA9IHByaXYtJmd0O3J4X2ZsYWdzX3VwZDsKJiM0MzsJCXJldCA9IHVwZGF0ZV9yeF9tb2RlOwomIzQzOwomIzQzOwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3ByaXYtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXRvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRvdXQpOwomIzQzOwkJZWxzZQomIzQzOwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiYjNDM7CX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzMjUwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CiYjNDM7CWRldl9kYmcoJmFtcDtuZGV2LSZndDtkZXYsICYjMzQ7JXMmIzM0OywgJiMzNDtzMjUwMF9vcGVuJiMzNDspOwomIzQzOwlwaHlfc3RhcnQocHJpdi0mZ3Q7bmRldi0mZ3Q7cGh5ZGV2KTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dGhyZWFkID0ga3RocmVhZF9ydW4oczI1MDBfdGhyZWFkX2Z1biwgcHJpdiwKJiM0MzsJCQkJICAgRFJWX05BTUUgJiMzNDsvJXM6JWQmIzM0OywKJiM0MzsJCQkJICAgZGV2X25hbWUoJmFtcDtwcml2LSZndDtzcGktJmd0O2RldiksCiYjNDM7CQkJCSAgIHNwaV9nZXRfY2hpcHNlbGVjdChwcml2LSZndDtzcGksIDApKTsKJiM0MzsKJiM0MzsJaWYgKElTX0VSUihwcml2LSZndDt0aHJlYWQpKSB7CiYjNDM7CQlyZXQgPSBQVFJfRVJSKHByaXYtJmd0O3RocmVhZCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl2YWwgPSBTMjUwMF9NQUNfQ1RSTF9UWEVOX0JJVCB8IFMyNTAwX01BQ19DVFJMX1JYRU5fQklUOwomIzQzOwkJcmV0ID0gczI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdiwgdmFsLCBmYWxzZSk7CiYjNDM7CiYjNDM7CQluZXRpZl9zdGFydF9xdWV1ZShwcml2LSZndDtuZGV2KTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHMyNTAwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlkZXZfZGJnKCZhbXA7bmRldi0mZ3Q7ZGV2LCAmIzM0OyVzJiMzNDssICYjMzQ7czI1MDBfc3RvcCYjMzQ7KTsKJiM0MzsKJiM0MzsJczI1MDBfc2h1dGRvd24ocHJpdik7CiYjNDM7CiYjNDM7CWt0aHJlYWRfc3RvcChwcml2LSZndDt0aHJlYWQpOwomIzQzOwlwcml2LSZndDt0aHJlYWQgPSBOVUxMOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzMjUwMF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmtfY2ZnKQomIzQzO3sKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJb2FfdGM2X2h3dHN0YW1wX2dldChwcml2LSZndDt0YzYsIGtfY2ZnKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgczI1MDBfaHd0c3RhbXBfc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAomIzQzOwkJCSAgICAgIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcsCiYjNDM7CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIG9hX3RjNl9od3RzdGFtcF9zZXQocHJpdi0mZ3Q7dGM2LCBjZmcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHMyNTAwX25ldGRldl9vcHMgPSB7CiYjNDM7CS5uZG9fb3BlbiAgICAgICAgICAgID0gczI1MDBfb3BlbiwKJiM0MzsJLm5kb19zdG9wICAgICAgICAgICAgPSBzMjUwMF9zdG9wLAomIzQzOwkubmRvX3N0YXJ0X3htaXQgICAgICA9IHMyNTAwX3N0YXJ0X3htaXQsCiYjNDM7CS5uZG9fc2V0X21hY19hZGRyZXNzID0gczI1MDBfc2V0X21hY19hZGRyZXNzLAomIzQzOwkubmRvX3NldF9yeF9tb2RlICAgICA9IHMyNTAwX3NldF9yeF9tb2RlLAomIzQzOwkubmRvX2V0aF9pb2N0bCAgICAgICA9IHMyNTAwX2lvY3RsLAomIzQzOwkubmRvX2h3dHN0YW1wX2dldCAgICA9IHMyNTAwX2h3dHN0YW1wX2dldCwKJiM0MzsJLm5kb19od3RzdGFtcF9zZXQgICAgPSBzMjUwMF9od3RzdGFtcF9zZXQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHMyNTAwX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3NwaS0mZ3Q7ZGV2OwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXY7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChzcGktJmd0O2lycSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJbmRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoZGV2LCBzaXplb2Yoc3RydWN0IHMyNTAwX2luZm8pKTsKJiM0MzsJaWYgKCFuZGV2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJcHJpdi0mZ3Q7bmRldiA9IG5kZXY7CiYjNDM7CXByaXYtJmd0O3NwaSA9IHNwaTsKJiM0MzsJcHJpdi0mZ3Q7ZGV2ID0gZGV2OwomIzQzOwomIzQzOwlTRVRfTkVUREVWX0RFVihuZGV2LCBkZXYpOwomIzQzOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3ByaXYtJmd0O2xvY2spOwomIzQzOwltdXRleF9pbml0KCZhbXA7cHJpdi0mZ3Q7cHRwX2Fkal9sb2NrKTsKJiM0MzsJbmRldi0mZ3Q7aXJxID0gc3BpLSZndDtpcnE7CiYjNDM7CiYjNDM7CXNwaS0mZ3Q7ZGV2LnBsYXRmb3JtX2RhdGEgPSBwcml2OwomIzQzOwlzcGlfc2V0X2RydmRhdGEoc3BpLCBwcml2KTsKJiM0MzsKJiM0MzsJbmRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7czI1MDBfbmV0ZGV2X29wczsKJiM0MzsJbmRldi0mZ3Q7ZXRodG9vbF9vcHMgPSAmYW1wO3MyNTAwX2V0aHRvb2xfb3BzOwomIzQzOwluZGV2LSZndDtpZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUOwomIzQzOwluZGV2LSZndDtwcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDsKJiM0MzsJbmRldi0mZ3Q7aHdfZmVhdHVyZXMgPSBORVRJRl9GX1JYQUxMOwomIzQzOwomIzQzOwlwcml2LSZndDtwb2xsX2ppZmYgPSBIWiAqIDU7IC8qIFBvbGwgaW50ZXJ2YWwgKi8KJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dGM2ID0gb2FfdGM2X2luaXQoc3BpLCBuZGV2KTsKJiM0MzsJaWYgKCFwcml2LSZndDt0YzYpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtzcGktJmd0O2RldiwgJiMzNDtPQSBUQzYgaW5pdCBmYWlsZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwlvYV90YzZfc2V0X3ZlbmQxX21tcyhwcml2LSZndDt0YzYsIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyKTsKJiM0MzsKJiM0MzsJLyogQ2xlYXIgUlNUUywgaWYgc2V0ICovCiYjNDM7CW9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsIFMyNTAwX1JFR19WU19NSUlNSVJRUywKJiM0MzsJCQkJIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyLCAmYW1wO3ZhbCk7CiYjNDM7CXZhbCAmYW1wOz0gTUlJTV9JUlFfU1RBVFVTX1JTVFM7CiYjNDM7CWlmICh2YWwgIT0gMCkKJiM0MzsJCW9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi0mZ3Q7dGM2LAomIzQzOwkJCQkJICBTMjUwMF9SRUdfVlNfTUlJTUlSUVMsCiYjNDM7CQkJCQkgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyLAomIzQzOwkJCQkJICBNSUlNX0lSUV9TVEFUVVNfUlNUUyk7CiYjNDM7CiYjNDM7CS8qIEFja25vd2xlZGdlIGFsbCBJUlEgc3RhdHVzIGJpdHMgKi8KJiM0MzsJcmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi0mZ3Q7dGM2LCBTMjUwMF9SRUdfU1BJX1NUMCwgJmFtcDt2YWwpOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJdTMyIG1hc2sgPSBTMjUwMF9TVEFUVVMwX01BU0s7CiYjNDM7CiYjNDM7CQl2YWwgJmFtcDs9IG1hc2s7CiYjNDM7CQlvYV90YzZfd3JpdGVfcmVnaXN0ZXIocHJpdi0mZ3Q7dGM2LCBTMjUwMF9SRUdfU1BJX1NUMCwgdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSBkZXZpY2VfZ2V0X2V0aGRldl9hZGRyZXNzKHByaXYtJmd0O2RldiwgbmRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXQgPSBzMjUwMF9yZWFkX21hY19mcm9tX252bWVtKHByaXYpOwomIzQzOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlldGhfaHdfYWRkcl9yYW5kb20obmRldik7CiYjNDM7CQlkZXZfd2FybigmYW1wO3NwaS0mZ3Q7ZGV2LCAmIzM0O1VzaW5nIHJhbmRvbSBNQUMgYWRkcmVzcyAlcE0mIzM0OywKJiM0MzsJCQkgbmRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHMyNTAwX2luaXQocHJpdik7CiYjNDM7CWlmICh1bmxpa2VseShyZXQpKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7c3BpLSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHMyNTAwX2luaXQgdGhlIGRldmljZSYjMzQ7KTsKJiM0MzsJCWdvdG8gZXJyX3JlZ19yZWFkOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBQVFAgaWYgdGhlIG1vZGVsIHN1cHBvcnRzIGl0ICovCiYjNDM7CXJldCA9IHMyNTAwX3B0cF9yZWdpc3Rlcihwcml2KTsKJiM0MzsJaWYgKHVubGlrZWx5KHJldCkpCiYjNDM7CQlnb3RvIGVycl9yZWdfcmVhZDsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7c3BpLSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIHJlZ2lzdGVyIG5ldGRldlxuJiMzNDspOwomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsKJiM0MzsJCWdvdG8gZXJyX3JlZ19yZWFkOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9yZWdfcmVhZDoKJiM0MzsJZGV2X2VycigmYW1wO3NwaS0mZ3Q7ZGV2LCAmIzM0O2NvdWxkIG5vdCBpbml0aWFsaXplIG1hY3BoeSYjMzQ7KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgczI1MDBfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IHNwaS0mZ3Q7ZGV2LnBsYXRmb3JtX2RhdGE7CiYjNDM7CiYjNDM7CWRldl9kYmcoJmFtcDtwcml2LSZndDtuZGV2LSZndDtkZXYsICYjMzQ7JXMmIzM0OywgJiMzNDtzMjUwMF9yZW1vdmUmIzM0Oyk7CiYjNDM7CiYjNDM7CW9hX3RjNl9wdHBfdW5yZWdpc3Rlcihwcml2LSZndDt0YzYpOwomIzQzOwl1bnJlZ2lzdGVyX25ldGRldihwcml2LSZndDtuZGV2KTsKJiM0MzsJb2FfdGM2X2V4aXQocHJpdi0mZ3Q7dGM2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgczI1MDBfb2ZfbWF0Y2hbXSA9IHsKJiM0MzsJeyAuY29tcGF0aWJsZSA9ICYjMzQ7b25ubixzMjUwMCYjMzQ7IH0sCiYjNDM7CXsgfQomIzQzO307CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgczI1MDBfb2ZfbWF0Y2gpOwomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBzMjUwMF9pZHNbXSA9IHsKJiM0MzsJeyAmIzM0O3MyNTAwJiMzNDsgfSwKJiM0MzsJeyB9CiYjNDM7fTsKJiM0MztNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgczI1MDBfaWRzKTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgczI1MDBfZHJpdmVyID0gewomIzQzOwkuZHJpdmVyID0gewomIzQzOwkJLm5hbWUgPSBEUlZfTkFNRSwKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IHMyNTAwX29mX21hdGNoLAomIzQzOwl9LAomIzQzOwkucHJvYmUgPSBzMjUwMF9wcm9iZSwKJiM0MzsJLnJlbW92ZSA9IHMyNTAwX3JlbW92ZSwKJiM0MzsJLmlkX3RhYmxlID0gczI1MDBfaWRzLAomIzQzO307CiYjNDM7bW9kdWxlX3NwaV9kcml2ZXIoczI1MDBfZHJpdmVyKTsKJiM0MzsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7UGllcmdpb3JnaW8gQmVydXRvICZsdDtwaWVyLmJlcnV0b0BvbnNlbWkuY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7U2VsdmEgUmFqYWdvcGFsICZsdDtzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb20mZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O29uc2VtaSBNQUNQSFkgZXRoZXJuZXQgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX3B0cC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX3B0cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi43ZGE2NjBjYjViMTkwYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9wdHAuYwpAQCAtMCwwICYjNDM7MSwyNTAgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgomIzQzOy8qCiYjNDM7ICogQ29weXJpZ2h0IDIwMjYgU2VtaWNvbmR1Y3RvciBDb21wb25lbnRzIEluZHVzdHJpZXMsIExMQyAoJiMzNDtvbnNlbWkmIzM0OykuCiYjNDM7ICogb25zZW1pJiMzOTtzIFMyNTAwIDEwQkFTRS1UMVMgTUFDLVBIWSBkcml2ZXIKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3MyNTAwX2h3X2RlZi5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHMyNTAwX3B0cF9nZXRfdGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCQlzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsCiYjNDM7CQkJCXN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqcHRwX3N0cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHMyNTAwX2luZm8sCiYjNDM7CQkJCQkgICAgICAgcHRwX2Nsb2NrX2luZm8pOwomIzQzOwl1MzIgZGF0YVsyXTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcHRwX3JlYWRfc3lzdGVtX3ByZXRzKHB0cF9zdHMpOwomIzQzOwlyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3RlcnNfbW1zKHByaXYtJmd0O3RjNiwKJiM0MzsJCQkJCVMyNTAwX1JFR19WU19QVFBfU0VDLAomIzQzOwkJCQkJT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIsCiYjNDM7CQkJCQkmYW1wO2RhdGFbMF0sIDIpOwomIzQzOwlwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHB0cF9zdHMpOwomIzQzOwomIzQzOwlpZiAoIXJldCkgewomIzQzOwkJdHMtJmd0O3R2X3NlYyA9IGRhdGFbMF07CiYjNDM7CQl0cy0mZ3Q7dHZfbnNlYyA9IGRhdGFbMV07CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzMjUwMF9wdHBfc2V0X3RpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwKJiM0MzsJCQkJY29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKQomIzQzO3sKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3QgczI1MDBfaW5mbywKJiM0MzsJCQkJCSAgICAgICBwdHBfY2xvY2tfaW5mbyk7CiYjNDM7CXUzMiBkYXRhWzJdOwomIzQzOwomIzQzOwlpZiAodHMtJmd0O3R2X3NlYyAmZ3Q7PSAoMVVMTCAmbHQ7Jmx0OyAzMikpCiYjNDM7CQlyZXR1cm4gLUVSQU5HRTsKJiM0MzsKJiM0MzsJZGF0YVswXSA9ICh1MzIpdHMtJmd0O3R2X3NlYzsKJiM0MzsJLyogYml0IDMxID0gZXhlY3V0ZSBzZXQgY29tbWFuZCAqLwomIzQzOwlkYXRhWzFdID0gdHMtJmd0O3R2X25zZWMgfCBCSVQoMzEpOwomIzQzOwomIzQzOwlyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXMocHJpdi0mZ3Q7dGM2LAomIzQzOwkJCQkJICBTMjUwMF9SRUdfVlNfUFRQX1NFVFNFQywKJiM0MzsJCQkJCSAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIsCiYjNDM7CQkJCQkgICZhbXA7ZGF0YVswXSwgMik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgczI1MDBfcHRwX2FkamZpbmUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIGxvbmcgc2NhbGVkX3BwbSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHMyNTAwX2luZm8sCiYjNDM7CQkJCQkgICAgICAgcHRwX2Nsb2NrX2luZm8pOwomIzQzOwl1MzIgc2lnbl9iaXQgPSAwOwomIzQzOwlsb25nIGFkajsKJiM0MzsJdTMyIHZhbDsKJiM0MzsJdTY0IHBwbTsKJiM0MzsKJiM0MzsJaWYgKHNjYWxlZF9wcG0gJmx0OyAwKSB7CiYjNDM7CQkvKiBzcGxpdCBzaWduIC8gbW9kICovCiYjNDM7CQlzaWduX2JpdCA9IDFVICZsdDsmbHQ7IDMxOwomIzQzOwkJc2NhbGVkX3BwbSA9IH5zY2FsZWRfcHBtICYjNDM7IDE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogQ29udmVydCB1bnNpZ25lZCBzY2FsZWRfcHBtIHRvIGF0dG8tc2Vjb25kcyBwZXIgY2xvY2sgY3ljbGVzLgomIzQzOwkgKiBUaGUgc2NhbGVkX3BwbSBmb3JtYXQgaXMgUXguMTYgLS0mZ3Q7IDEgbHNiID0gMS82NTUzNiBwcG0uCiYjNDM7CSAqIFRoZSBjbG9jayBwZXJpb2Qgb2YgdGhlIFMyNTAwIGlzIDhucyAoMTI1IE1IeiksIHNvIDEgbHNiIG9mCiYjNDM7CSAqIGFkaiByZWdpc3RlciBMU0IgaXMgMSBhdHRvLXNlYyAvIDhucyA9IDAuMDAwMTI1IHBwbS4KJiM0MzsJICogUmVwcmVzZW50ZWQgaW4gUXguMTYgZm9ybWF0LCB0aGlzIGlzIDAuMDAwMTI1ICogMl4xNiA9IDgoLjE5MikKJiM0MzsJICogVG8gY29udmVydCBzY2FsZWRfcHBtIGludG8gYSByZWdpc3RlciB2YWx1ZSB3ZSBuZWVkIHRvIGRpdmlkZQomIzQzOwkgKiBpdCBieSB0aGUgTFNCIHZhbHVlLCBoZW5jZSBhZGogPSAoc2NhbGVkX3BwbSAqIDEwMDApIC8gODE5MiB0bwomIzQzOwkgKiBtaW5pbWl6ZSB0aGUgcHJlY2lzaW9uIGxvc3MgZHVlIHRvIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMuCiYjNDM7CSAqIFRoYXQgZnVydGhlciByZWR1Y2VzIHRvIChzY2FsZWRfcHBtICogMTI1KSAvIDEwMjQuCiYjNDM7CSAqLwomIzQzOwlwcG0gPSAodTY0KXNjYWxlZF9wcG0gKiAxMjU7CiYjNDM7CWRvX2RpdihwcG0sIDEwMjQpOwomIzQzOwlhZGogPSAobG9uZylwcG07CiYjNDM7CiYjNDM7CS8qIGNoZWNrIG92ZXJmbG93ICovCiYjNDM7CWlmIChhZGogJmd0Oz0gKDFMICZsdDsmbHQ7IDI4KSkKJiM0MzsJCXJldHVybiAtRVJBTkdFOwomIzQzOwomIzQzOwl2YWwgPSAodTMyKWFkaiB8IHNpZ25fYml0OwomIzQzOwlyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LSZndDt0YzYsIFMyNTAwX1JFR19WU19QVFBfQURKLAomIzQzOwkJCQkJIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHMyNTAwX3VzZV9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLAomIzQzOwkJCSAgICAgc3RydWN0IHRpbWVzcGVjNjQgbm93LCBzNjQgcmVtKQomIzQzO3sKJiM0MzsJc3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wIHN0czsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgZGVsdGFfdHM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRhcmdldDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbWVtc2V0KCZhbXA7c3RzLCAwLCBzaXplb2Yoc3RzKSk7CiYjNDM7CXJldCA9IHB0cC0mZ3Q7Z2V0dGltZXg2NChwdHAsICZhbXA7bm93LCAmYW1wO3N0cyk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlpZiAocmVtICZndDs9IDApIHsKJiM0MzsJCWRlbHRhX3RzID0gbnNfdG9fdGltZXNwZWM2NChyZW0pOwomIzQzOwkJdGFyZ2V0ID0gdGltZXNwZWM2NF9hZGQobm93LCBkZWx0YV90cyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlkZWx0YV90cyA9IG5zX3RvX3RpbWVzcGVjNjQoLXJlbSk7CiYjNDM7CQl0YXJnZXQgPSB0aW1lc3BlYzY0X3N1Yihub3csIGRlbHRhX3RzKTsKJiM0MzsJfQomIzQzOwlpZiAodGFyZ2V0LnR2X3NlYyAmbHQ7IDAgfHwKJiM0MzsJICAgIHRhcmdldC50dl9zZWMgJmd0Oz0gKDFVTEwgJmx0OyZsdDsgMzIpKQomIzQzOwkJcmV0dXJuIC1FUkFOR0U7CiYjNDM7CXJldHVybiBwdHAtJmd0O3NldHRpbWU2NChwdHAsICZhbXA7dGFyZ2V0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBzMjUwMF9wdHBfYWRqdGltZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgczY0IGRlbHRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3QgczI1MDBfaW5mbywKJiM0MzsJCQkJCSAgICAgICBwdHBfY2xvY2tfaW5mbyk7CiYjNDM7CXN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCBzdHM7CiYjNDM7CXN0cnVjdCB0aW1lc3BlYzY0IHRhcmdldDsKJiM0MzsJdW5zaWduZWQgaW50IHBlcmlvZF9tczsKJiM0MzsJc3RydWN0IHRpbWVzcGVjNjQgbm93OwomIzQzOwlzNjQgc2NhbGVkX3BwbSwgcmVtOwomIzQzOwlpbnQgbWF4X2l0ZXJzID0gMzsKJiM0MzsJczY0IHRhcmdldF9uczsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CXM2NCBub3dfbnM7CiYjNDM7CXM2NCBudW07CiYjNDM7CXM2NCBkZW47CiYjNDM7CiYjNDM7CWlmICghcHRwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qIE5vdGhpbmcgdG8gZG8gKi8KJiM0MzsJaWYgKGRlbHRhID09IDApCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYW1wO3ByaXYtJmd0O3B0cF9hZGpfbG9jaykpCiYjNDM7CQlyZXR1cm4gLUVJTlRSOwomIzQzOwomIzQzOwkvKiBUcnkgdG8gc2xldyB0aGUgY2xvY2sgdXNpbmcgYWRqZmluZSBmb3IgYmV0dGVyIGFjY3VyYWN5LgomIzQzOwkgKiBGb3IgbGFyZ2UgYWRqdXN0bWVudHMgZmFsbCBiYWNrIHRvIHNldHRpbmcgdGltZSBkaXJlY3RseS4KJiM0MzsJICovCiYjNDM7CXJlbSA9IGRlbHRhOwomIzQzOwomIzQzOwl3aGlsZSAocmVtICE9IDAgJmFtcDsmYW1wOyBtYXhfaXRlcnMtLSkgewomIzQzOwkJczY0IGFic19kZWx0YSA9IHJlbSAmZ3Q7IDAgPyByZW0gOiAtcmVtOwomIzQzOwomIzQzOwkJLyogSWYgdGhlIGFkanVzdG1lbnQgaXMgdmVyeSBsYXJnZSwgbW9yZSB0aGFuIDEgc2Vjb25kLAomIzQzOwkJICogdXNlIHNldHRpbWUgdG8gYXZvaWQgdmVyeSBsb25nIHNsZXdpbmcgcGVyaW9kcyBvcgomIzQzOwkJICogZXhjZXNzaXZlIGZyZXF1ZW5jeSBvZmZzZXRzLgomIzQzOwkJICovCiYjNDM7CQlpZiAoYWJzX2RlbHRhICZndDsgMTAwMDAwMDAwMExMKSB7CiYjNDM7CQkJcmV0ID0gczI1MDBfdXNlX3NldHRpbWUocHRwLCBub3csIHJlbSk7CiYjNDM7CQkJcmVtID0gMDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIENob29zZSBhIHNsZXdpbmcgcGVyaW9kIGRlcGVuZGluZyBvbiBtYWduaXR1ZGUgKi8KJiM0MzsJCWlmIChhYnNfZGVsdGEgJmx0Oz0gMTAwMDAwMExMKSAvKiAmbHQ7PSAxbXMgKi8KJiM0MzsJCQlwZXJpb2RfbXMgPSAxMDAwOyAvKiAxIHMgKi8KJiM0MzsJCWVsc2UgaWYgKGFic19kZWx0YSAmbHQ7PSAxMDAwMDAwMDBMTCkgLyogJmx0Oz0gMTAwbXMgKi8KJiM0MzsJCQlwZXJpb2RfbXMgPSAxMDAwMDsgLyogMTAgcyAqLwomIzQzOwkJZWxzZQomIzQzOwkJCXBlcmlvZF9tcyA9IDYwMDAwOyAvKiA2MCBzICovCiYjNDM7CiYjNDM7CQkvKiBDb21wdXRlIGN1cnJlbnQgdGltZSBhbmQgZml4ZWQgdGFyZ2V0IGZvciB0aGlzCiYjNDM7CQkgKiBpdGVyYXRpb24KJiM0MzsJCSAqLwomIzQzOwkJbWVtc2V0KCZhbXA7c3RzLCAwLCBzaXplb2Yoc3RzKSk7CiYjNDM7CQlyZXQgPSBwdHAtJmd0O2dldHRpbWV4NjQocHRwLCAmYW1wO25vdywgJmFtcDtzdHMpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCWlmIChyZW0gJmd0Oz0gMCkKJiM0MzsJCQl0YXJnZXQgPSB0aW1lc3BlYzY0X2FkZChub3csCiYjNDM7CQkJCQkJbnNfdG9fdGltZXNwZWM2NChyZW0pKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl0YXJnZXQgPSB0aW1lc3BlYzY0X3N1Yihub3csCiYjNDM7CQkJCQkJbnNfdG9fdGltZXNwZWM2NCgtcmVtKSk7CiYjNDM7CiYjNDM7CQkvKiBDb21wdXRlIHNjYWxlZF9wcG0gKFF4LjE2KS4gc2NhbGVkX3BwbSA9IHBwbSAqIDJeMTYKJiM0MzsJCSAqIHBwbSA9IChkZWx0YV9zZWNvbmRzIC8gcGVyaW9kX3NlY29uZHMpICogMWU2CiYjNDM7CQkgKiA9Jmd0OyBzY2FsZWRfcHBtID0gZGVsdGFfbnMgKiA2NTUzNiAvIChwZXJpb2RfbXMgKiAxMDAwKQomIzQzOwkJICovCiYjNDM7CQludW0gPSByZW0gKiA2NTUzNkxMOwomIzQzOwkJZGVuID0gKHM2NClwZXJpb2RfbXMgKiAxMDAwTEw7CiYjNDM7CiYjNDM7CQkvKiBJbnRlZ2VyIGRpdmlzaW9uIHJvdW5kcyB0b3dhcmQgemVybzsga2VlcCBzaWduIGluCiYjNDM7CQkgKiBudW1lcmF0b3IKJiM0MzsJCSAqLwomIzQzOwkJc2NhbGVkX3BwbSA9IGRpdl9zNjQobnVtLCBkZW4pOwomIzQzOwomIzQzOwkJLyogQXBwbHkgZnJlcXVlbmN5IGFkanVzdG1lbnQgKi8KJiM0MzsJCXJldCA9IHB0cC0mZ3Q7YWRqZmluZShwdHAsIChsb25nKXNjYWxlZF9wcG0pOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIFNsZWVwIGZvciB0aGUgc2xldyBwZXJpb2QgKGludGVycnVwdGlibGUpLiBJZgomIzQzOwkJICogaW50ZXJydXB0ZWQsIGNsZWFyIHRoZSBhZGpmaW5lIGFuZCByZXR1cm4gLUVJTlRSLgomIzQzOwkJICovCiYjNDM7CQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUocGVyaW9kX21zKSkgewomIzQzOwkJCS8qIENsZWFyIGFkamZpbmUgKi8KJiM0MzsJCQlwdHAtJmd0O2FkamZpbmUocHRwLCAwKTsKJiM0MzsJCQlyZXQgPSAtRUlOVFI7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBDbGVhciBhZGpmaW5lIGFuZCBtZWFzdXJlIHJlbWFpbmluZyBvZmZzZXQgKi8KJiM0MzsJCXB0cC0mZ3Q7YWRqZmluZShwdHAsIDApOwomIzQzOwomIzQzOwkJbWVtc2V0KCZhbXA7c3RzLCAwLCBzaXplb2Yoc3RzKSk7CiYjNDM7CQlyZXQgPSBwdHAtJmd0O2dldHRpbWV4NjQocHRwLCAmYW1wO25vdywgJmFtcDtzdHMpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlicmVhazsKJiM0MzsKJiM0MzsJCS8qIHJlbWFpbmluZyA9IHRhcmdldCAtIG5vdyAoaW4gbnMpICovCiYjNDM7CQl0YXJnZXRfbnMgPSB0aW1lc3BlYzY0X3RvX25zKCZhbXA7dGFyZ2V0KTsKJiM0MzsJCW5vd19ucyA9IHRpbWVzcGVjNjRfdG9fbnMoJmFtcDtub3cpOwomIzQzOwkJcmVtID0gdGFyZ2V0X25zIC0gbm93X25zOwomIzQzOwomIzQzOwkJLyogSWYgcmVtYWluaW5nIGlzIHNtYWxsICgmbHQ7IDF1cyksIGZpbmlzaCAqLwomIzQzOwkJaWYgKHJlbSAmZ3Q7IC0xMDAwICZhbXA7JmFtcDsgcmVtICZsdDsgMTAwMCkKJiM0MzsJCQlyZW0gPSAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3B0cF9hZGpfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBzMjUwMF9wdHBfcmVnaXN0ZXIoc3RydWN0IHMyNTAwX2luZm8gKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gPSAmYW1wO3ByaXYtJmd0O3B0cF9jbG9ja19pbmZvOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpbmZvLSZndDttYXhfYWRqID0gMTAwMDAwMDAwOwomIzQzOwlpbmZvLSZndDtvd25lciA9IFRISVNfTU9EVUxFOwomIzQzOwlpbmZvLSZndDthZGpmaW5lID0gczI1MDBfcHRwX2FkamZpbmU7CiYjNDM7CWluZm8tJmd0O2dldHRpbWV4NjQgPSBzMjUwMF9wdHBfZ2V0X3RpbWU2NDsKJiM0MzsJaW5mby0mZ3Q7c2V0dGltZTY0ID0gczI1MDBfcHRwX3NldF90aW1lNjQ7CiYjNDM7CWluZm8tJmd0O2FkanRpbWUgPSBzMjUwMF9wdHBfYWRqdGltZTsKJiM0MzsKJiM0MzsJcmV0ID0gb2FfdGM2X3B0cF9yZWdpc3Rlcihwcml2LSZndDt0YzYsIGluZm8pOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O3NwaS0mZ3Q7ZGV2LCAmIzM0O1BUUCByZWdpc3RyYXRpb24gZmFpbGVkJiMzNDspOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmMgYi9kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jCmluZGV4IDg4MjU1ZTkyYjRjZGJkLi4wMWVhMmU4ZGQyNTNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jCkBAIC05OTEsMTUgJiM0Mzs5OTEsNiBAQCBzdGF0aWMgdm9pZCBkcDgzODY3X2xpbmtfY2hhbmdlX25vdGlmeShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCX0KIH0KIAotc3RhdGljIGludCBkcDgzODY3X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpCi17Ci0JaWYgKGVuYWJsZSAmYW1wOyZhbXA7IHNwZWVkKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLAotCQkJICBlbmFibGUgPyBCTUNSX0xPT1BCQUNLIDogMCk7Ci19Ci0KIHN0YXRpYyBpbnQKIGRwODM4NjdfbGVkX2JyaWdodG5lc3Nfc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiAJCQkgICB1OCBpbmRleCwgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQpAQCAtMTIwNCw3ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY3X2RyaXZlcltdID0gewogCQkucmVzdW1lCQk9IGRwODM4NjdfcmVzdW1lLAogCiAJCS5saW5rX2NoYW5nZV9ub3RpZnkgPSBkcDgzODY3X2xpbmtfY2hhbmdlX25vdGlmeSwKLQkJLnNldF9sb29wYmFjawk9IGRwODM4NjdfbG9vcGJhY2ssCiYjNDM7CQkuc2V0X2xvb3BiYWNrCT0gZ2VucGh5X2xvb3BiYWNrX2ZpeGVkX3NwZWVkLAogCiAJCS5sZWRfYnJpZ2h0bmVzc19zZXQgPSBkcDgzODY3X2xlZF9icmlnaHRuZXNzX3NldCwKIAkJLmxlZF9od19pc19zdXBwb3J0ZWQgPSBkcDgzODY3X2xlZF9od19pc19zdXBwb3J0ZWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jIGIvZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYwppbmRleCBlNjAxZDU2YjI1MDdmOS4uMGM0ZGM3MDY0MWQ4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9taWNyb2NoaXBfdDFzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuYwpAQCAtNTA2LDM0ICYjNDM7NTA2LDYgQEAgc3RhdGljIGludCBsYW44Nnh4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiAJcmV0dXJuIDA7CiB9CiAKLS8qIE9QRU4gQWxsaWFuY2UgMTBCQVNFLVQxeCBjb21wbGlhbmNlIE1BQy1QSFlzIHdpbGwgaGF2ZSBib3RoIEMyMiBhbmQKLSAqIEM0NSByZWdpc3RlcnMgc3BhY2UuIElmIHRoZSBQSFkgaXMgZGlzY292ZXJlZCB2aWEgQzIyIGJ1cyBwcm90b2NvbCBpdCBhc3N1bWVzCi0gKiBpdCB1c2VzIEMyMiBwcm90b2NvbCBhbmQgYWx3YXlzIHVzZXMgQzIyIHJlZ2lzdGVycyBpbmRpcmVjdCBhY2Nlc3MgdG8gYWNjZXNzCi0gKiBDNDUgcmVnaXN0ZXJzLiBUaGlzIGlzIGJlY2F1c2UsIHdlIGRvbiYjMzk7dCBoYXZlIGEgY2xlYW4gc2VwYXJhdGlvbiBiZXR3ZWVuCi0gKiBDMjIvQzQ1IHJlZ2lzdGVyIHNwYWNlIGFuZCBDMjIvQzQ1IE1ESU8gYnVzIHByb3RvY29scy4gUmVzdWx0aW5nLCBQSFkgQzQ1Ci0gKiByZWdpc3RlcnMgZGlyZWN0IGFjY2VzcyBjYW4mIzM5O3QgYmUgdXNlZCB3aGljaCBjYW4gc2F2ZSBtdWx0aXBsZSBTUEkgYnVzIGFjY2Vzcy4KLSAqIFRvIHN1cHBvcnQgdGhpcyBmZWF0dXJlLCBzZXQgLnJlYWRfbW1kLy53cml0ZV9tbWQgaW4gdGhlIFBIWSBkcml2ZXIgdG8gY2FsbAotICogLnJlYWRfYzQ1Ly53cml0ZV9jNDUgaW4gdGhlIE9QRU4gQWxsaWFuY2UgZnJhbWV3b3JrCi0gKiBkcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYwotICovCi1zdGF0aWMgaW50IGxhbjg2NXhfcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sCi0JCQkJdTE2IHJlZ251bSkKLXsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKLQlpbnQgYWRkciA9IHBoeWRldi0mZ3Q7bWRpby5hZGRyOwotCi0JcmV0dXJuIF9fbWRpb2J1c19jNDVfcmVhZChidXMsIGFkZHIsIGRldm51bSwgcmVnbnVtKTsKLX0KLQotc3RhdGljIGludCBsYW44NjV4X3BoeV93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSwKLQkJCQkgdTE2IHJlZ251bSwgdTE2IHZhbCkKLXsKLQlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKLQlpbnQgYWRkciA9IHBoeWRldi0mZ3Q7bWRpby5hZGRyOwotCi0JcmV0dXJuIF9fbWRpb2J1c19jNDVfd3JpdGUoYnVzLCBhZGRyLCBkZXZudW0sIHJlZ251bSwgdmFsKTsKLX0KLQogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1pY3JvY2hpcF90MXNfZHJpdmVyW10gPSB7CiAJewogCQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX0xBTjg2N1hfUkVWQjEpLApAQCAtNTg0LDggJiM0Mzs1NTYsOCBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWljcm9jaGlwX3Qxc19kcml2ZXJbXSA9IHsKIAkJLmZlYXR1cmVzICAgICAgICAgICA9IFBIWV9CQVNJQ19UMVNfUDJNUF9GRUFUVVJFUywKIAkJLmNvbmZpZ19pbml0ICAgICAgICA9IGxhbjg2NXhfcmV2Yl9jb25maWdfaW5pdCwKIAkJLnJlYWRfc3RhdHVzICAgICAgICA9IGxhbjg2eHhfcmVhZF9zdGF0dXMsCi0JCS5yZWFkX21tZCAgICAgICAgICAgPSBsYW44NjV4X3BoeV9yZWFkX21tZCwKLQkJLndyaXRlX21tZCAgICAgICAgICA9IGxhbjg2NXhfcGh5X3dyaXRlX21tZCwKJiM0MzsJCS5yZWFkX21tZCAgICAgICAgICAgPSBnZW5waHlfcGh5X3JlYWRfbW1kLAomIzQzOwkJLndyaXRlX21tZCAgICAgICAgICA9IGdlbnBoeV9waHlfd3JpdGVfbW1kLAogCQkuZ2V0X3BsY2FfY2ZnCSAgICA9IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnLAogCQkuc2V0X3BsY2FfY2ZnCSAgICA9IGxhbjg2eHhfcGxjYV9zZXRfY2ZnLAogCQkuZ2V0X3BsY2Ffc3RhdHVzICAgID0gZ2VucGh5X2M0NV9wbGNhX2dldF9zdGF0dXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbmNuMjYwMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jCmluZGV4IGNhYmRkODNjNjE0ZjBkLi5hZmFmYTgxZGMyMmI4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L25jbjI2MDAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L25jbjI2MDAwLmMKQEAgLTIsNyAmIzQzOzIsNyBAQAogLyoKICAqICBEcml2ZXIgZm9yIHRoZSBvbnNlbWkgMTBCQVNFLVQxUyBOQ04yNjAwMCBQSFlzIGZhbWlseS4KICAqCi0gKiBDb3B5cmlnaHQgMjAyMiBvbnNlbWkKJiM0MzsgKiBDb3B5cmlnaHQgMjAyNiBvbnNlbWkKICAqLwogI2luY2x1ZGUgJmx0O2xpbnV4L2tlcm5lbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogCiAjaW5jbHVkZSAmIzM0O21kaW8tb3Blbi1hbGxpYW5jZS5oJiMzNDsKIAomIzQzOyNkZWZpbmUgUEhZX0lEX1MyNTAwCQkJMHgxODBGRjQxMQogI2RlZmluZSBQSFlfSURfTkNOMjYwMDAJCQkweDE4MEZGNUExCiAKICNkZWZpbmUgTkNOMjYwMDBfUkVHX0lSUV9DVEwgICAgICAgICAgICAxNgpAQCAtMzUsMTUgJiM0MzszNiwyNCBAQAogCiAjZGVmaW5lIFRPX1RNUl9ERUZBVUxUCQkJMzIKIAomIzQzOyNkZWZpbmUgTkNOMjYwMDBfUkVHX1BIWUNGRzEJCTB4ODAwMQomIzQzOyNkZWZpbmUgTkNOMjYwMDBfUEhZQ0ZHMV9FTkkJCUJJVCg3KQomIzQzOyNkZWZpbmUgTkNOMjYwMDBfUEhZQ0ZHMV9FTklfTUFTSwlCSVQoNykKJiM0MzsKIHN0YXRpYyBpbnQgbmNuMjYwMDBfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiAJLyogSFcgYnVnIHdvcmthcm91bmQ6IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBQTENBIFRPX1RJTUVSIHNob3VsZCBiZQogCSAqIDMyLCB3aGVyZSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIE5DTjI2MDAwIHJlcG9ydHMgMjQuIFRoaXMgd2lsbCBiZQogCSAqIGZpeGVkIGluIGZ1dHVyZSBQSFkgdmVyc2lvbnMuIEZvciB0aGUgdGltZSBiZWluZywgd2UgZm9yY2UgdGhlCiAJICogY29ycmVjdCBkZWZhdWx0IGhlcmUuCiAJICovCi0JcmV0dXJuIHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTURJT19PQVRDMTRfUExDQV9UT1RNUiwKLQkJCSAgICAgVE9fVE1SX0RFRkFVTFQpOwomIzQzOwlpZiAocGh5X2lkX2NvbXBhcmVfbW9kZWwocGh5ZGV2LSZndDtkcnYtJmd0O3BoeV9pZCwgUEhZX0lEX05DTjI2MDAwKSkKJiM0MzsJCXJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwKJiM0MzsJCQkJICAgIE1ESU9fT0FUQzE0X1BMQ0FfVE9UTVIsCiYjNDM7CQkJCSAgICBUT19UTVJfREVGQVVMVCk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbmNuMjYwMDBfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKQEAgLTEwMCw2ICYjNDM7MTEwLDI0IEBAIHN0YXRpYyBpbnQgbmNuMjYwMDBfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4gMDsKIH0KIAomIzQzOy8qIEludGVyY2VwdCBQTENBIGVuYWJsZS9kaXNhYmxlIHJlcXVlc3QgdG8KJiM0MzsgKiBzZXQgdGhlIHByb3ByaWV0YXJ5LCBFTkkgbW9kZSBhY2NvcmRpbmdseQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgbmNuMjYwMDBfYzQ1X3BsY2Ffc2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKQomIzQzO3sKJiM0MzsJaW50IHJldCA9IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHBoeWRldiwgcGxjYV9jZmcpOwomIzQzOwl1MTYgZW5pX2NmZyA9IDA7CiYjNDM7CiYjNDM7CWlmIChyZXQgfHwgcGxjYV9jZmctJmd0O2VuYWJsZWQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJZW5pX2NmZyA9IChwbGNhX2NmZy0mZ3Q7ZW5hYmxlZCkgPyBOQ04yNjAwMF9QSFlDRkcxX0VOSSA6IDA7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLAomIzQzOwkJCSAgICAgIE5DTjI2MDAwX1JFR19QSFlDRkcxLAomIzQzOwkJCSAgICAgIE5DTjI2MDAwX1BIWUNGRzFfRU5JX01BU0ssIGVuaV9jZmcpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpcnFyZXR1cm5fdCBuY24yNjAwMF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiAJaW50IHJldDsKQEAgLTExNyw4ICYjNDM7MTQ1LDggQEAgc3RhdGljIGlycXJldHVybl90IG5jbjI2MDAwX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAogc3RhdGljIGludCBuY24yNjAwMF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCWludCByZXQ7CiAJdTE2IGlycWU7CiYjNDM7CWludCByZXQ7CiAKIAlpZiAocGh5ZGV2LSZndDtpbnRlcnJ1cHRzID09IFBIWV9JTlRFUlJVUFRfRU5BQkxFRCkgewogCQkvLyBhY2tub3dsZWRnZSBJUlFzCkBAIC0xNDEsNiAmIzQzOzE2OSwyNyBAQCBzdGF0aWMgaW50IG5jbjI2MDAwX2NvbmZpZ19pbnRyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBuY24yNjAwMF9kcml2ZXJbXSA9IHsKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9TMjUwMCksCiYjNDM7CQkubmFtZSAgICAgICAgICAgICAgICAgID0gJiMzNDtTMjUwMCYjMzQ7LAomIzQzOwkJLmZlYXR1cmVzICAgICAgICAgICAgICA9IFBIWV9CQVNJQ19UMVNfUDJNUF9GRUFUVVJFUywKJiM0MzsJCS5jb25maWdfaW5pdCAgICAgICAgICAgPSBuY24yNjAwMF9jb25maWdfaW5pdCwKJiM0MzsJCS5jb25maWdfaW50ciAgICAgICAgICAgPSBuY24yNjAwMF9jb25maWdfaW50ciwKJiM0MzsJCS5jb25maWdfYW5lZyAgICAgICAgICAgPSBuY24yNjAwMF9jb25maWdfYW5lZywKJiM0MzsJCS5yZWFkX3N0YXR1cyAgICAgICAgICAgPSBuY24yNjAwMF9yZWFkX3N0YXR1cywKJiM0MzsJCS5oYW5kbGVfaW50ZXJydXB0ICAgICAgPSBuY24yNjAwMF9oYW5kbGVfaW50ZXJydXB0LAomIzQzOwkJLnNldF9sb29wYmFjayAgICAgICAgICA9IGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZCwKJiM0MzsJCS5zZXRfcGxjYV9jZmcgICAgICAgICAgPSBuY24yNjAwMF9jNDVfcGxjYV9zZXRfY2ZnLAomIzQzOwkJLmdldF9wbGNhX2NmZyAgICAgICAgICA9IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnLAomIzQzOwkJLmdldF9wbGNhX3N0YXR1cyAgICAgICA9IGdlbnBoeV9jNDVfcGxjYV9nZXRfc3RhdHVzLAomIzQzOwkJLnNvZnRfcmVzZXQgICAgICAgICAgICA9IGdlbnBoeV9zb2Z0X3Jlc2V0LAomIzQzOwkJLmdldF9zcWkgICAgICAgICAgICAgICA9IGdlbnBoeV9jNDVfb2F0YzE0X2dldF9zcWksCiYjNDM7CQkuZ2V0X3NxaV9tYXggICAgICAgICAgID0gZ2VucGh5X2M0NV9vYXRjMTRfZ2V0X3NxaV9tYXgsCiYjNDM7CQkucmVhZF9tbWQgICAgICAgICAgICAgID0gZ2VucGh5X3BoeV9yZWFkX21tZCwKJiM0MzsJCS53cml0ZV9tbWQgICAgICAgICAgICAgPSBnZW5waHlfcGh5X3dyaXRlX21tZCwKJiM0MzsJCS5jYWJsZV90ZXN0X2dldF9zdGF0dXMgPSBnZW5waHlfYzQ1X29hdGMxNF9jYWJsZV90ZXN0X2dldF9zdGF0dXMsCiYjNDM7CQkuY2FibGVfdGVzdF9zdGFydCAgICAgID0gZ2VucGh5X2M0NV9vYXRjMTRfY2FibGVfdGVzdF9zdGFydCwKJiM0MzsJfSwKIAl7CiAJCVBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfTkNOMjYwMDApLAogCQkubmFtZQkJCT0gJiMzNDtOQ04yNjAwMCYjMzQ7LApAQCAtMTUxLDcgJiM0MzsyMDAsNyBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbmNuMjYwMDBfZHJpdmVyW10gPSB7CiAJCS5yZWFkX3N0YXR1cwkJPSBuY24yNjAwMF9yZWFkX3N0YXR1cywKIAkJLmhhbmRsZV9pbnRlcnJ1cHQgICAgICAgPSBuY24yNjAwMF9oYW5kbGVfaW50ZXJydXB0LAogCQkuZ2V0X3BsY2FfY2ZnCQk9IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnLAotCQkuc2V0X3BsY2FfY2ZnCQk9IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnLAomIzQzOwkJLnNldF9wbGNhX2NmZwkJPSBuY24yNjAwMF9jNDVfcGxjYV9zZXRfY2ZnLAogCQkuZ2V0X3BsY2Ffc3RhdHVzCT0gZ2VucGh5X2M0NV9wbGNhX2dldF9zdGF0dXMsCiAJCS5zb2Z0X3Jlc2V0ICAgICAgICAgICAgID0gZ2VucGh5X3NvZnRfcmVzZXQsCiAJfSwKQEAgLTE2MSwxMSAmIzQzOzIxMCwxMyBAQCBtb2R1bGVfcGh5X2RyaXZlcihuY24yNjAwMF9kcml2ZXIpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG5jbjI2MDAwX3RibFtdID0gewogCXsgUEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9OQ04yNjAwMCkgfSwKJiM0MzsJeyBQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX1MyNTAwKSB9LAogCXsgfQogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBuY24yNjAwMF90YmwpOwogCi1NT0RVTEVfQVVUSE9SKCYjMzQ7UGllcmdpb3JnaW8gQmVydXRvJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtQaWVyZ2lvcmdpbyBCZXJ1dG8gJmx0O3BpZXIuYmVydXRvQG9uc2VtaS5jb20mZ3Q7JiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtTZWx2YSBSYWphZ29wYWwgJmx0O3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbSZndDsmIzM0Oyk7CiBNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtvbnNlbWkgMTBCQVNFLVQxUyBQSFkgZHJpdmVyJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtEdWFsIEJTRC9HUEwmIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCAwNjE1MjI4NDU5ZWY0Mi4uMTFmZDIwNGVlYTE2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwpAQCAtMjc4Nyw2ICYjNDM7Mjc4Nyw4MSBAQCBpbnQgZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZudW0sCiB9CiBFWFBPUlRfU1lNQk9MKGdlbnBoeV93cml0ZV9tbWRfdW5zdXBwb3J0ZWQpOwogCiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X3BoeV9yZWFkX21tZCAtIEhlbHBlciBmb3IgcmVhZGluZyBhIHJlZ2lzdGVyIHdpdGhvdXQgbG9jawomIzQzOyAqIGZyb20gdGhlIGdpdmVuIE1NRCBhbmQgUEhZLgomIzQzOyAqIEBwaHlkZXY6IFRoZSBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqIEBkZXZudW06IFRoZSBNTUQgdG8gcmVhZCBmcm9tCiYjNDM7ICogQHJlZ251bTogVGhlIHJlZ2lzdGVyIG9uIHRoZSBNTUQgdG8gcmVhZAomIzQzOyAqCiYjNDM7ICogRGVzY3JpcHRpb246IFBIWXMgY2FuIGhhdmUgYm90aCBDMjIgYW5kIEM0NSByZWdpc3RlcnMgc3BhY2UuIE9uY2UgUEhZCiYjNDM7ICogaXMgZGlzY292ZXJlZCB2aWEgQzIyIGJ1cyBwcm90b2NvbCwgaXQgdXNlcyBDMjIgaW5kaXJlY3QgYWNjZXNzIHRvCiYjNDM7ICogYWNjZXNzIEM0NSByZWdpc3RlcnMuIFNvbWUgUEhZcywgbGlrZSAxMEJhc2UtVDFTIFBIWXMgZGVmaW5lZCBieSBPUEVOCiYjNDM7ICogQWxsaWFuY2UgMTBCQVNF4oCRVDF4LCBzdXBwb3J0IG9ubHkgZGlyZWN0IGFjY2Vzcy4KJiM0MzsgKgomIzQzOyAqIElmIFBIWSBpbmRpY2F0ZXMgQzQ1IHN1cHBvcnQgdGhyb3VnaCBEVFMgZW50cnksIGl0IGF2b2lkIEMyMiBBUElzCiYjNDM7ICogZW50aXJlbHkgYW5kIHRoZXJlZm9yZSBnZW5lcmljIE1ESU8gcmVnaXN0ZXJzIGFyZSBpbmFjY2Vzc2libGUuCiYjNDM7ICoKJiM0MzsgKiBNRElPIGJ1cyBpc24mIzM5O3QgbG9ja2VkIGhlcmUgYmVjYXVzZSB3aGVuIGNhbGxlZCB0aHJvdWdoIHJlYWRfbW1kCiYjNDM7ICogY2FsbGJhY2sgb2YgcGh5X2RyaXZlciwgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGxvY2sgdGhlIGJ1cyBhcwomIzQzOyAqIGltcGxlbWVudGVkIGluIHBoeV9yZWFkX21tZC4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IFJlZ2lzdGVyIHZhbHVlIGlmIHN1Y2Nlc3NmdWwsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KJiM0MzsgKi8KJiM0MztpbnQgZ2VucGh5X3BoeV9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2bnVtLAomIzQzOwkJCXUxNiByZWdudW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsJaW50IGFkZHIgPSBwaHlkZXYtJmd0O21kaW8uYWRkcjsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0dXJuIF9fbWRpb2J1c19jNDVfcmVhZChidXMsIGFkZHIsIGRldm51bSwgcmVnbnVtKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChnZW5waHlfcGh5X3JlYWRfbW1kKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBnZW5waHlfcGh5X3dyaXRlX21tZCAtIEhlbHBlciBmb3Igd3JpdGluZyBhIHJlZ2lzdGVyIHdpdGhvdXQgbG9jawomIzQzOyAqIHRvIHRoZSBnaXZlbiBNTUQgYW5kIFBIWS4KJiM0MzsgKiBAcGh5ZGV2OiBUaGUgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKiBAZGV2bnVtOiBUaGUgTU1EIHRvIHdyaXRlIHRvCiYjNDM7ICogQHJlZ251bTogVGhlIHJlZ2lzdGVyIG9uIHRoZSBNTUQgdG8gd3JpdGUKJiM0MzsgKiBAdmFsOiAgICBWYWx1ZSB0byB3cml0ZQomIzQzOyAqCiYjNDM7ICogRGVzY3JpcHRpb246IFNpbWlsYXIgdG8gZ2VucGh5X3BoeV9yZWFkX21tZAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBpZiBzdWNjZXNzZnVsLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGdlbnBoeV9waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sCiYjNDM7CQkJIHUxNiByZWdudW0sIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsJaW50IGFkZHIgPSBwaHlkZXYtJmd0O21kaW8uYWRkcjsKJiM0MzsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0dXJuIF9fbWRpb2J1c19jNDVfd3JpdGUoYnVzLCBhZGRyLCBkZXZudW0sIHJlZ251bSwgdmFsKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChnZW5waHlfcGh5X3dyaXRlX21tZCk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2xvb3BiYWNrX2ZpeGVkX3NwZWVkIC0gSGVscGVyIHRvIG1vZGlmeSB0aGUgUEhZIGxvb3BiYWNrIG1vZGUKJiM0MzsgKiB3aXRob3V0IGFmZmVjdGluZyBhbnkgb3RoZXIgc2V0dGluZ3MuCiYjNDM7ICogQHBoeWRldjogVGhlIHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICogQGVuYWJsZTogRmxhZyB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgUEhZIGxldmVsIGxvb3BiYWNrLgomIzQzOyAqIEBzcGVlZDogU3BlZWQgc2V0dGluZy4gTm90IGV4cGVjdGVkIHRvIGJlIHNldC4gRXJyb3IgaWYgaXQgaXMgc2V0LgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBpZiBzdWNjZXNzZnVsLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCiYjNDM7ICovCiYjNDM7aW50IGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwKJiM0MzsJCQkJaW50IHNwZWVkKQomIzQzO3sKJiM0MzsJaWYgKGVuYWJsZSAmYW1wOyZhbXA7IHNwZWVkKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLAomIzQzOwkJCSAgZW5hYmxlID8gQk1DUl9MT09QQkFDSyA6IDApOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZCk7CiYjNDM7CiBpbnQgZ2VucGh5X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIHsKIAlyZXR1cm4gcGh5X3NldF9iaXRzKHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vYV90YzYuaCBiL2luY2x1ZGUvbGludXgvb2FfdGM2LmgKaW5kZXggMTVmNThlM2M1NmM3NDAuLjE3YWMzZTA3NTFlMTIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L29hX3RjNi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvb2FfdGM2LmgKQEAgLTcsOCAmIzQzOzcsMjMgQEAKICAqIEF1dGhvcjogUGFydGhpYmFuIFZlZXJhc29vcmFuICZsdDtwYXJ0aGliYW4udmVlcmFzb29yYW5AbWljcm9jaGlwLmNvbSZndDsKICAqLwogCiYjNDM7I2lmbmRlZiBfTElOVVhfT0FfVEM2X0gKJiM0MzsjZGVmaW5lIF9MSU5VWF9PQV9UQzZfSAomIzQzOwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3BpL3NwaS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wdHBfY2xvY2tfa2VybmVsLmgmZ3Q7CiYjNDM7CiYjNDM7LyogUEhZIOKAkyBDbGF1c2UgNDUgcmVnaXN0ZXJzIG1lbW9yeSBtYXAgc2VsZWN0b3IgKE1NUykgYXMgcGVyIHRhYmxlIDYgaW4KJiM0MzsgKiB0aGUgT1BFTiBBbGxpYW5jZSBzcGVjaWZpY2F0aW9uLgomIzQzOyAqLwomIzQzOyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfTUFDX01NUzEJCQkxCS8qIE5vIE1NRCAqLwomIzQzOyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUENTX01NUzIJCQkyCS8qIE1NRCAzICovCiYjNDM7I2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QTUFfUE1EX01NUzMJCTMJLyogTU1EIDEgKi8KJiM0MzsjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNAkJNAkvKiBNTUQgMzEgKi8KJiM0MzsjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X0FVVE9fTkVHX01NUzUJCTUJLyogTU1EIDcgKi8KJiM0MzsjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1BPV0VSX1VOSVRfTU1TNgkJNgkvKiBNTUQgMTMgKi8KJiM0MzsjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyCQkJMTIJLyogZm9yIHZlbmRvcnMgKi8KIAogc3RydWN0IG9hX3RjNjsKIApAQCAtMjIsMyAmIzQzOzM3LDI0IEBAIGludCBvYV90YzZfcmVhZF9yZWdpc3RlcnMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgYWRkcmVzcywgdTMyIHZhbHVlW10sCiAJCQkgIHU4IGxlbmd0aCk7CiBuZXRkZXZfdHhfdCBvYV90YzZfc3RhcnRfeG1pdChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IG9hX3RjNl96ZXJvX2FsaWduX3JlY2VpdmVfZnJhbWVfZW5hYmxlKHN0cnVjdCBvYV90YzYgKnRjNik7CiYjNDM7aW50IG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsCiYjNDM7CQkJICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpOwomIzQzO2ludCBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsCiYjNDM7CQkJICAgICAgdTMyIHZhbHVlKTsKJiM0MztpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLAomIzQzOwkJCSAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpOwomIzQzO2ludCBvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgYWRkcmVzcywgdTE2IG1tcywKJiM0MzsJCQkgICAgIHUzMiAqdmFsdWUpOwomIzQzO2ludCBvYV90YzZfcHRwX3JlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvKTsKJiM0MztpbnQgb2FfdGM2X2lvY3RsKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7CiYjNDM7aW50IG9hX3RjNl9nZXRfdHNfaW5mbyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsCiYjNDM7CQkgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3RzX2luZm8gKmluZm8pOwomIzQzO3ZvaWQgb2FfdGM2X2h3dHN0YW1wX2dldChzdHJ1Y3Qgb2FfdGM2ICp0YzYsCiYjNDM7CQkJIHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpOwomIzQzO3ZvaWQgb2FfdGM2X2dldF90c19zdGF0cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsCiYjNDM7CQkJIHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICpzdGF0cyk7CiYjNDM7aW50IG9hX3RjNl9od3RzdGFtcF9zZXQoc3RydWN0IG9hX3RjNiAqdGM2LAomIzQzOwkJCXN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpOwomIzQzO3ZvaWQgb2FfdGM2X3NldF92ZW5kMV9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBpbnQgbW1zKTsKJiM0Mzt2b2lkIG9hX3RjNl9wdHBfdW5yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpOwomIzQzOyNlbmRpZiAvKiBfTElOVVhfT0FfVEM2X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5LmggYi9pbmNsdWRlL2xpbnV4L3BoeS5oCmluZGV4IDE5OWE3YWFhMzQxYmZkLi42MWJjZDcxYTMxNDMyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0yMzAxLDYgJiM0MzsyMzAxLDEyIEBAIGludCBnZW5waHlfcmVhZF9tbWRfdW5zdXBwb3J0ZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoZGV2LCBpbnQgZGV2YWQsCiAJCQkJdTE2IHJlZ251bSk7CiBpbnQgZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZudW0sCiAJCQkJIHUxNiByZWdudW0sIHUxNiB2YWwpOwomIzQzO2ludCBnZW5waHlfbG9vcGJhY2tfZml4ZWRfc3BlZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUsCiYjNDM7CQkJCWludCBzcGVlZCk7CiYjNDM7aW50IGdlbnBoeV9waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sCiYjNDM7CQkJIHUxNiByZWdudW0sIHUxNiB2YWwpOwomIzQzO2ludCBnZW5waHlfcGh5X3JlYWRfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sCiYjNDM7CQkJdTE2IHJlZ251bSk7CiAKIC8qIENsYXVzZSAzNyAqLwogaW50IGdlbnBoeV9jMzdfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyNTM5CgkJCQkJCQlvdXRwdXQ6IDI3NQoJCQkJCQkJdGhvdWdodHM6IDI1NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBBbmFseXNpczogT25zZW1pIFMyNTAwIDEwQkFTRS1UMVMgTUFDUEhZIERyaXZlcioqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIHNlcmllcyBoZXJlIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgT25zZW1pIFMyNTAwIE1BQ1BIWSBldGhlcm5ldCBjb250cm9sbGVyLiBUaGlzIGFsc28gdG91Y2hlcyB0aGUgT0EgVEM2IGZyYW1ld29yayBmb3IgaGFyZHdhcmUgdGltZXN0YW1waW5nIGFuZCBzb21lIE1NUyBmdW5jdGlvbnMuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYW4gU1BJLWJhc2VkIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGFjdHVhbGx5IGZ1enogdGhpcyBlZmZlY3RpdmVseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyYjMzQ7LgoKRmlyc3QsIGxldCYjMzk7cyBlc3RhYmxpc2ggdGhlIGNvbnRleHQuIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIFNQSSwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIHF1ZXN0aW9ucyBhYm91dCByZWFjaGFiaWxpdHkuIFNQSSBkZXZpY2VzICpjYW4qIGJlIGluc3RhbnRpYXRlZCB1c2luZyBkZXZpY2UgdHJlZSBvciBzeXNmcywgb3Igd2l0aCB0b29scyBsaWtlIGBzcGktbW9ja2Agb3IgYHNwaWRldmAsIGJ1dCB3aWxsIHN5emthbGxlciBldmVuIGJlIGFibGUgdG8gZ2V0IHRvIHRoZSBkcml2ZXIgcHJvYmU/IFN5emthbGxlciB1c3VhbGx5IGZ1enplcyBuZXR3b3JrIGRldmljZXMgdmlhIG5ldGxpbmsgKGxpa2UgdmV0aCwgdHVuLCBldGMuKSBvciBieSB0YXJnZXRpbmcgdGhlIFNQSSBob3N0IGNvbnRyb2xsZXIgZGlyZWN0bHkuIEl0IGhhcyBzb21lIGxpbWl0ZWQgU1BJIHN1cHBvcnQgdmlhIGBzcGlkZXZgLCBidXQgbm90IGZvciBhcmJpdHJhcnkgZGV2aWNlcyAobGlrZSB0aGlzIG9uZSkuIEl0IG1pZ2h0IHdvcmsgaWYgd2UgY2FuIGVhc2lseSBpbnN0YW50aWF0ZSBhbiBTUEkgZGV2aWNlIHVzaW5nIGBzeXpfc3BpX3NldHVwYCBvciBhIGRldmljZSB0cmVlIG92ZXJsYXksIGJ1dCB0aGF0JiMzOTtzIG5vdCBhIHN0YW5kYXJkLCBhbmQgY3VycmVudCBzeXprYWxsZXIgc3VwcG9ydCBpcyBsaW1pdGVkIHRvIHNvbWUgc2VsZWN0IFNQSSBkZXZpY2VzLgoKVGhlIHJlYWwgcXVlc3Rpb24gaXM6IElzIHRoaXMgZHJpdmVyIHdvcnRoIGZ1enppbmc/IFllcywgaXQmIzM5O3MgYSBuZXR3b3JrIGRyaXZlciBhbmQgYSBQSFkgZHJpdmVyLCB3aGljaCBhcmUgaGlnaC12YWx1ZSB0YXJnZXRzLiBUaGlzIGFkZHMgYFMyNTAwX01BQ1BIWWAsIG1vZGlmaWVzIGBPQV9UQzZgLCBhbmQgc2VsZWN0cyBgTkNOMjYwMDBfUEhZYC4gRW5hYmxpbmcgYWxsIG9mIHRoZXNlLCBhbG9uZyB3aXRoIGBORVRfVkVORE9SX09OU0VNSWAsIGlzIGNyaXRpY2FsLgoKTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIGtleSBmdW5jdGlvbnMgYXJlOiBgczI1MDBfcHJvYmVgLCBgczI1MDBfb3BlbmAsIGBzMjUwMF9zdG9wYCwgYHMyNTAwX3NldF9tYWNfYWRkcmVzc2AsIGBzMjUwMF9zZXRfcnhfbW9kZWAsIGBzMjUwMF9pb2N0bGAsIGBzMjUwMF9od3RzdGFtcF9nZXRgLCBgczI1MDBfaHd0c3RhbXBfc2V0YCwgYHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZWAsIGBvYV90YzZfaW9jdGxgLCBhbmQgYG9hX3RjNl9od3RzdGFtcF9zZXRgLCBgb2FfdGM2X3RzdGFtcF9pb2N0bGAsIGBvYV90YzZfcHRwX3JlZ2lzdGVyYCwgcGx1cyBzb21lIFBUUCBmdW5jdGlvbnMuCgpCdXQgdGhlIHByb2JlIGlzIHdoYXQmIzM5O3MgcmVhbGx5IGltcG9ydGFudC4gQ2FuIHdlIGdldCBpdCB0byBmaXJlPyBTeXprYWxsZXIgaGFzIG5vIHN0YW5kYXJkIHdheSB0byBpbmplY3QgYXJiaXRyYXJ5IFNQSSBkZXZpY2VzIHVubGVzcyBpdCYjMzk7cyB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzaW1pbGFyLCB3aGljaCBpcyBub3QgYW4gdXBzdHJlYW0gc3RhbmRhcmQuIFdlJiMzOTtyZSBydW5uaW5nIGluIFFFTVUsIHdoaWNoICpjb3VsZCogc3VwcG9ydCBhdHRhY2hpbmcgU1BJIGRldmljZXMsIGJ1dCBpdCYjMzk7cyBub3QgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyByZWFjaGFibGUuCgpUaGUga2V5IGhlcmUgaXMgdGhhdCwgd2hpbGUgdGhpcyBpcyBhbiBTUEkgZHJpdmVyLCBpdCBtb2RpZmllcyB0aGUgYG9hX3RjNmAgbGlicmFyeS4gVGhpcyBpcyB1c2VkIGJ5IG90aGVyIFNQSSBkcml2ZXJzIGxpa2UgYGxhbjg2NXguY2AsIHRoaXMgd2lsbCBsaWtlbHkgbWFrZSBpdCB3b3J0aCBmdXp6aW5nISBJdCBhbHNvIGFkZHMgdGhlIGBOQ04yNjAwMF9QSFlgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFBIWSBkcml2ZXIsIGFuZCBjYW4gYmUgdGVzdGVkIHVzaW5nIGBtZGlvYCBvciBgZXRodG9vbGAgd2l0aCBhIG5ldCBkZXZpY2UuIFRoZXJlZm9yZSwgYHMyNTAwX3Byb2JlYCwgYHMyNTAwX29wZW5gLCBgczI1MDBfaW9jdGxgLCBgczI1MDBfaHd0c3RhbXBfc2V0YCwgYHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZWAsIGBzMjUwMF9wdHBfYWRqdGltZWAsIGBvYV90YzZfaHd0c3RhbXBfc2V0YCwgYG9hX3RjNl90c3RhbXBfaW9jdGxgLCBgb2FfdGM2X3B0cF9yZWdpc3RlcmAsIGFuZCAgYG5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmdgIGxvb2sgdmVyeSBpbXBvcnRhbnQuCgpNeSBkZWNpc2lvbiBoZXJlIGlzIHRvIGNsYXNzaWZ5IHRoaXMgYXMgV29ydGhGdXp6aW5nPXRydWUuIExldCB0aGUgZnV6emVyIHdvcmsgaXRzIG1hZ2ljLiBXZSBqdXN0IG5lZWQgdG8gbWFrZSBzdXJlIHRvIGNvbmZpZ3VyZSB0aG9zZSBzeW1ib2xzIGNvcnJlY3RseSwgYWxvbmcgd2l0aCBgTkVUX1ZFTkRPUl9PTlNFTUlgLCBgUzI1MDBfTUFDUEhZYCwgYE9BX1RDNmAsIGBOQ04yNjAwMF9QSFlgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA5IDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX09OU0VNSSYjMzQ7LAogICAgJiMzNDtTMjUwMF9NQUNQSFkmIzM0OywKICAgICYjMzQ7T0FfVEM2JiMzNDssCiAgICAmIzM0O05DTjI2MDAwX1BIWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MyNTAwX3Byb2JlJiMzNDssCiAgICAmIzM0O3MyNTAwX29wZW4mIzM0OywKICAgICYjMzQ7czI1MDBfaW9jdGwmIzM0OywKICAgICYjMzQ7czI1MDBfaHd0c3RhbXBfc2V0JiMzNDssCiAgICAmIzM0O3MyNTAwX3NldF9tdWx0aWNhc3RfbW9kZSYjMzQ7LAogICAgJiMzNDtzMjUwMF9wdHBfYWRqdGltZSYjMzQ7LAogICAgJiMzNDtvYV90YzZfaHd0c3RhbXBfc2V0JiMzNDssCiAgICAmIzM0O29hX3RjNl90c3RhbXBfaW9jdGwmIzM0OywKICAgICYjMzQ7b2FfdGM2X3B0cF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtuY24yNjAwMF9jNDVfcGxjYV9zZXRfY2ZnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1BJLWJhc2VkIGV0aGVybmV0IGRyaXZlciBmb3IgdGhlIG9uc2VtaSBTMjUwMCBNQUNQSFksIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIE9BIFRDNiBmcmFtZXdvcmssIGFuZCB1cGRhdGVzIHRoZSBOQ04yNjAwMCBQSFkgZHJpdmVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgUEhZIGRyaXZlcnMgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIHZpYSBldGh0b29sLCBuZXRsaW5rLCBhbmQgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVRfVkVORE9SX09OU0VNSSYjMzQ7LAogICAgJiMzNDtTMjUwMF9NQUNQSFkmIzM0OywKICAgICYjMzQ7T0FfVEM2JiMzNDssCiAgICAmIzM0O05DTjI2MDAwX1BIWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3MyNTAwX3Byb2JlJiMzNDssCiAgICAmIzM0O3MyNTAwX29wZW4mIzM0OywKICAgICYjMzQ7czI1MDBfaW9jdGwmIzM0OywKICAgICYjMzQ7czI1MDBfaHd0c3RhbXBfc2V0JiMzNDssCiAgICAmIzM0O3MyNTAwX3NldF9tdWx0aWNhc3RfbW9kZSYjMzQ7LAogICAgJiMzNDtzMjUwMF9wdHBfYWRqdGltZSYjMzQ7LAogICAgJiMzNDtvYV90YzZfaHd0c3RhbXBfc2V0JiMzNDssCiAgICAmIzM0O29hX3RjNl90c3RhbXBfaW9jdGwmIzM0OywKICAgICYjMzQ7b2FfdGM2X3B0cF9yZWdpc3RlciYjMzQ7LAogICAgJiMzNDtuY24yNjAwMF9jNDVfcGxjYV9zZXRfY2ZnJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1BJLWJhc2VkIGV0aGVybmV0IGRyaXZlciBmb3IgdGhlIG9uc2VtaSBTMjUwMCBNQUNQSFksIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIE9BIFRDNiBmcmFtZXdvcmssIGFuZCB1cGRhdGVzIHRoZSBOQ04yNjAwMCBQSFkgZHJpdmVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgUEhZIGRyaXZlcnMgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIHZpYSBldGh0b29sLCBuZXRsaW5rLCBhbmQgaW9jdGxzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTg6NDQuNDU2MDQ0NDUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAwMDAxMzQyOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9PTlNFTUlcIixcbiAgICBcIlMyNTAwX01BQ1BIWVwiLFxuICAgIFwiT0FfVEM2XCIsXG4gICAgXCJOQ04yNjAwMF9QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzMjUwMF9wcm9iZVwiLFxuICAgIFwiczI1MDBfb3BlblwiLFxuICAgIFwiczI1MDBfaW9jdGxcIixcbiAgICBcInMyNTAwX2h3dHN0YW1wX3NldFwiLFxuICAgIFwiczI1MDBfc2V0X211bHRpY2FzdF9tb2RlXCIsXG4gICAgXCJzMjUwMF9wdHBfYWRqdGltZVwiLFxuICAgIFwib2FfdGM2X2h3dHN0YW1wX3NldFwiLFxuICAgIFwib2FfdGM2X3RzdGFtcF9pb2N0bFwiLFxuICAgIFwib2FfdGM2X3B0cF9yZWdpc3RlclwiLFxuICAgIFwibmNuMjYwMDBfYzQ1X3BsY2Ffc2V0X2NmZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1BJLWJhc2VkIGV0aGVybmV0IGRyaXZlciBmb3IgdGhlIG9uc2VtaSBTMjUwMCBNQUNQSFksIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIE9BIFRDNiBmcmFtZXdvcmssIGFuZCB1cGRhdGVzIHRoZSBOQ04yNjAwMCBQSFkgZHJpdmVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgUEhZIGRyaXZlcnMgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIHZpYSBldGh0b29sLCBuZXRsaW5rLCBhbmQgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMToxODo0NC40NTYwNTE0MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMjAzMjIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRiZDU1NWM3MmRhMzYzMWNhMDMxZTk0NjVkZDViMjhjOGRiYzc4ZGJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgOSAxMToxODo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L29ubm4sczI1MDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvb25ubixzMjUwMC55YW1sXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMTFlZGYxMDUwOGQ5ZjNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9vbm5uLHMyNTAwLnlhbWxcXG5AQCAtMCwwICsxLDY3IEBAXFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxcbislWUFNTCAxLjJcXG4rLS0tXFxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L29ubm4sczI1MDAueWFtbCNcXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXFxuK1xcbit0aXRsZTogb25zZW1pIFMyNTAwIDEwQkFTRS1UMVMgTUFDUEhZIEV0aGVybmV0IENvbnRyb2xsZXJzXFxuK1xcbittYWludGFpbmVyczpcXG4rICAtIFBpZXJnaW9yZ2lvIEJlcnV0byBcXHUwMDNjcGllci5iZXJ1dG9Ab25zZW1pLmNvbVxcdTAwM2VcXG4rICAtIFNlbHZhIFJhamFnb3BhbCBcXHUwMDNjU2VsdmFtYW5pLlJhamFnb3BhbEBvbnNlbWkuY29tXFx1MDAzZVxcbitcXG4rZGVzY3JpcHRpb246XFxuKyAgVGhlIFMyNTAwIGNvbWJpbmVzIGEgTWVkaWEgQWNjZXNzIENvbnRyb2xsZXIgKE1BQykgYW5kIGFuXFxuKyAgRXRoZXJuZXQgUEhZIHRvIGVuYWJsZSAxMEJBU0XigJFUMVMgbmV0d29ya3MuIFRoZSBFdGhlcm5ldCBNZWRpYSBBY2Nlc3NcXG4rICBDb250cm9sbGVyIChNQUMpIG1vZHVsZSBpbXBsZW1lbnRzIGEgMTAgTWJwcyBoYWxmIGR1cGxleCBFdGhlcm5ldCBNQUMsXFxuKyAgY29tcGF0aWJsZSB3aXRoIHRoZSBJRUVFIDgwMi4zIHN0YW5kYXJkIGFuZCBhIDEwQkFTRS1UMVMgcGh5c2ljYWwgbGF5ZXJcXG4rICB0cmFuc2NlaXZlciBpbnRlZ3JhdGVkIGludG8gdGhlIFMyNTAwLiBUaGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuXFxuKyAgdGhlIGhvc3QgYW5kIHRoZSBNQUMtUEhZIGlzIHNwZWNpZmllZCBpbiB0aGUgT1BFTiBBbGxpYW5jZSAxMEJBU0UtVDF4XFxuKyAgTUFDUEhZIFNlcmlhbCBJbnRlcmZhY2UgKFRDNikuXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9zcGkvc3BpLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcXG4rXFxuK3Byb3BlcnRpZXM6XFxuKyAgY29tcGF0aWJsZTpcXG4rICAgIGNvbnN0OiBvbm5uLHMyNTAwXFxuK1xcbisgIHJlZzpcXG4rICAgIG1heEl0ZW1zOiAxXFxuK1xcbisgIGludGVycnVwdHM6XFxuKyAgICBkZXNjcmlwdGlvbjpcXG4rICAgICAgSW50ZXJydXB0IGZyb20gTUFDLVBIWSBhc3NlcnRlZCBpbiB0aGUgZXZlbnQgb2YgUmVjZWl2ZSBDaHVua3NcXG4rICAgICAgQXZhaWxhYmxlLCBUcmFuc21pdCBDaHVuayBDcmVkaXRzIEF2YWlsYWJsZSBhbmQgRXh0ZW5kZWQgU3RhdHVzXFxuKyAgICAgIEV2ZW50LlxcbisgICAgbWF4SXRlbXM6IDFcXG4rXFxuKyAgc3BpLW1heC1mcmVxdWVuY3k6XFxuKyAgICBtYXhpbXVtOiAyNTAwMDAwMFxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSByZWdcXG4rICAtIGludGVycnVwdHNcXG4rICAtIHNwaS1tYXgtZnJlcXVlbmN5XFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaFxcdTAwM2VcXG4rICAgIHNwaSB7XFxuKyAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAjc2l6ZS1jZWxscyA9IFxcdTAwM2MwXFx1MDAzZTtcXG4rXFxuKyAgICAgIGV0aGVybmV0QDAge1xcbisgICAgICAgIGNvbXBhdGlibGUgPSBcXFwib25ubixzMjUwMFxcXCI7XFxuKyAgICAgICAgcmVnID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgIHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuKyAgICAgICAgcGluY3RybC0wID0gXFx1MDAzY1xcdTAwMjZldGgwX3BpbnNcXHUwMDNlO1xcbisgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSBcXHUwMDNjXFx1MDAyNmdwaW9cXHUwMDNlO1xcbisgICAgICAgIGludGVycnVwdHMgPSBcXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXFx1MDAzZTtcXG4rICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9IFxcdTAwM2MxNTAwMDAwMFxcdTAwM2U7XFxuKyAgICAgIH07XFxuKyAgICB9O1xcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3RcXG5pbmRleCBmZTJhYWJkZTkyM2E1Ny4uMzI1ZDI5OWQxYTdkYzIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0XFxuQEAgLTE1Myw2ICsxNTMsMTAgQEAgT1BFTiBBbGxpYW5jZSBUQzYgRnJhbWV3b3JrXFxuIC0gRm9yd2FyZHMgdGhlIHJlY2VpdmVkIEV0aGVybmV0IGZyYW1lIGZyb20gMTBCYXNlLVQxeCBNQUMtUEhZIHRvIG4vd1xcbiAgIHN1YnN5c3RlbS5cXG4gXFxuKy0gSWYgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgZW5hYmxlZCwgdXBkYXRlcyBoYXJkd2FyZSB0aW1lc3RhbXBcXG4rICBpbiBza2IsIHdoZW4gaW5kaWNhdGVkIGJ5IG9uZSBvZiB0aGUgdGhyZWUgdGltZXN0YW1wIGNhcHR1cmUgcmVnaXN0ZXJzXFxuKyAgdGhyb3VnaCBUU0MgZmllbGRzIG9mIHRoZSBoZWFkZXIuXFxuK1xcbiBEYXRhIFRyYW5zYWN0aW9uXFxuIH5+fn5+fn5+fn5+fn5+fn5cXG4gXFxuQEAgLTQ5NSwzICs0OTksNzkgQEAgdGhlIE1BQy1QSFkuXFxuIFplcm8gYWxpZ24gcmVjZWl2ZSBmcmFtZSBmZWF0dXJlIGNhbiBiZSBlbmFibGVkIHRvIGFsaWduIGFsbCByZWNlaXZlIGV0aGVybmV0XFxuIGZyYW1lcyBkYXRhIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW55IHJlY2VpdmUgZGF0YSBjaHVuayBwYXlsb2FkIHdpdGggYVxcbiBzdGFydCB3b3JkIG9mZnNldCAoU1dPKSBvZiB6ZXJvLlxcbitcXG4rLi4gYzpmdW5jdGlvbjo6IGludCBvYV90YzZfcHRwX3JlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvKTtcXG4rXFxuK1JlZ2lzdGVycyB0aGUgUFRQIGhhcmR3YXJlIGNsb2NrIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGggdGhlIGtlcm5lbC5cXG4rVGhpcyBBUEkgc2ltcGx5IHJlZ2lzdGVycy4gSW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpZWxkcyBpbiB0aGVcXG4rcHRwX2Nsb2NrX2luZm8gc3RydWN0dXJlIGFyZSBsZWZ0IHRvIHRoZSB2ZW5kb3IgYXMgcHJvZ3JhbW1pbmcgaGFyZHdhcmVcXG4rdGltZXIgaXMgZXhwZWN0ZWQgdG8gYmUgdmVuZG9yIGRlcGVuZGVudC4gVGhlIGZpZWxkcyBtYXhfYWRqLCBvd25lcixcXG4rYW5kIGFsbCB0aGUgZnVuY3Rpb25zIGZvciB0aGUgY2xvY2sgb3BlcmF0aW9ucywgbGlrZSBhZGpmaW5lLCBnZXR0aW1leDY0LFxcbitzZXR0aW1lNjQsIGFkanRpbWUgYXJlIGV4cGVjdGVkIHRvIGJlIGluaXRpYWxpemVkIGluIHRoZSBzdHJ1Y3R1cmUgYmVmb3JlXFxuK2NhbGxpbmcgdGhlIHJlZ2lzdGVyaW5nIHRoZSBoYXJkd2FyZSBjbG9jay5cXG4rXFxuKy4uIGM6ZnVuY3Rpb246OiB2b2lkIG9hX3RjNl9wdHBfdW5yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xcbitcXG4rVW5yZWdpc3RlcnMgdGhlIFBUUCBoYXJkd2FyZSBjbG9jayByZWxhdGVkIGNhbGxiYWNrcy5cXG4rXFxuKy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X2lvY3RsKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IGlmcmVxICpycSwgXFxcXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY21kKTtcXG4rXFxuK2lvY3RsIGludGVyZmFjZSB0byBoYW5kbGUgaGFyZHdhcmUgdGltZXN0YW1wIGFuZCBQSFkgcmVsYXRlZCBjb21tYW5kcy5cXG4rXFxuKy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X2dldF90c19pbmZvKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7XFxuK1xcbitQcm92aWRlcyB0aW1lc3RhbXAgcmVsYXRlZCBzZXR0aW5ncyB0aGF0IGFyZSBzdXBwb3J0ZWQgdG8gZXRodG9vbC5cXG4rXFxuKy4uIGM6ZnVuY3Rpb246OiB2b2lkIG9hX3RjNl9od3RzdGFtcF9nZXQoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxcXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XFxuK1xcbitSZXR1cm5zIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uLiBQYXJ0IG9mIG5ldF9kZXZpY2Vfb3BzIGNhbGxiYWNrcy5cXG4rXFxuKy4uIGM6ZnVuY3Rpb246OiB2b2lkIG9hX3RjNl9nZXRfdHNfc3RhdHMoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxcXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfdHNfc3RhdHMgKnRzX3N0YXRzKTtcXG4rXFxuK1Byb3ZpZGVzIGhhcmR3YXJlIHRpbWVzdGFtcCByZWxhdGVkIHRyYWZmaWMgc3RhdGlzdGljcyBmb3IgZXRodG9vbC5cXG4rXFxuKy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X2h3dHN0YW1wX3NldChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXFxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG4rXFxuK0hlbHBlciB0byBzZXQgaGFyZHdhcmUgdGltZXN0YW1wIGNvbmZpZ3VyYXRpb24uIFBhcnQgb2YgbmV0X2RldmljZV9vcHNcXG4rY2FsbGJhY2tzLlxcbitcXG4rLi4gYzpmdW5jdGlvbjo6IHZvaWQgb2FfdGM2X3NldF92ZW5kMV9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBpbnQgbW1zKTtcXG4rXFxuK0hlbHBlciB0byBtYXAgTURJT19NTURfVkVORDEgY29tbWFuZCB0byB2ZW5kb3Igc3BlY2lmaWMgTWVtb3J5IE1hcCBTZWxlY3RcXG4rKE1NUykgdmFsdWUuIFRoaXMgZnVuY3Rpb24gb2ZmZXJzIGZsZXhpYmlsaXR5IGZvciB2ZW5kb3JzIHRoYXQgbWF5IGhhdmVcXG4rdXNlZCBhbnkgTU1TIHZhbHVlIGJldHdlZW4gMTAgYW5kIDE1IGFzIGFsbG93ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXFxuK01ESU9fTU1EX1ZFTkQyIGlzIGFscmVhZHkgbWFwcGVkIHRvIE1NUzQgaW4gdGhlIE9BIFRDNiBmcmFtZSB3b3JrIGNvZGUuXFxuK1xcbisuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1MTYgbW1zLCBcXFxcXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZhbHVlW10sIHU4IGxlbmd0aCk7XFxuK1xcbitXcml0aW5nIG11bHRpcGxlIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBzdGFydGluZyBmcm9tIEBhZGRyZXNzIGZvciB0aGVcXG4rZ2l2ZW4gQG1tcyBtZW1vcnkgbWFwIHNlbGVjdG9yIGluIHRoZSBNQUMtUEhZLiBNYXhpbXVtIG9mIDEyOCBjb25zZWN1dGl2ZVxcbityZWdpc3RlcnMgY2FuIGJlIHdyaXR0ZW4gc3RhcnRpbmcgYXQgQGFkZHJlc3MuXFxuK1xcbisuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxcXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTE2IG1tcywgXFxcXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZhbHVlKTtcXG4rXFxuK1dyaXRlIGEgc2luZ2xlIHJlZ2lzdGVyIGFkZHJlc3NlZCBieSBAYWRkcmVzcyBhbmQgQG1tcyBpbiB0aGUgTUFDLVBIWS5cXG4rXFxuKy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXFxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1MTYgbW1zLCBcXFxcXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgdmFsdWVbXSwgdTggbGVuZ3RoKTtcXG4rXFxuK1JlYWRpbmcgbXVsdGlwbGUgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gQGFkZHJlc3MgZm9yIHRoZVxcbitnaXZlbiBAbW1zIG1lbW9yeSBtYXAgc2VsZWN0b3IgdmFsdWUsIGluIHRoZSBNQUMtUEhZLiBNYXhpbXVtIG9mIDEyOFxcbitjb25zZWN1dGl2ZSByZWdpc3RlcnMgY2FuIGJlIHJlYWQgc3RhcnRpbmcgYXQgQGFkZHJlc3MuXFxuK1xcbisuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXFxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHUxNiBtbXMsIFxcXFxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyICp2YWx1ZSk7XFxuK1xcbitSZWFkIGEgc2luZ2xlIHJlZ2lzdGVyIGFkZHJlc3NlZCBieSBAYWRkcmVzcyBhbmQgQG1tcyBpbiB0aGUgTUFDLVBIWS5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDUyZjFhNTVlY2E5OWJmLi45NThiOWY2MWUzNjQxOCAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTIwMTgyLDEyICsyMDE4MiwyMCBAQCBTOlxcdE1haW50YWluZWRcXG4gRjpcXHRhcmNoL21pcHMvYm9vdC9kdHMvcmFsaW5rL29tZWdhMnAuZHRzXFxuIFxcbiBPTlNFTUkgRVRIRVJORVQgUEhZIERSSVZFUlNcXG4tTTpcXHRQaWVyZ2lvcmdpbyBCZXJ1dG8gXFx1MDAzY3BpZXJnaW9yZ2lvLmJlcnV0b0BnbWFpbC5jb21cXHUwMDNlXFxuK006XFx0UGllcmdpb3JnaW8gQmVydXRvIFxcdTAwM2NwaWVyLmJlcnV0b0BvbnNlbWkuY29tXFx1MDAzZVxcbitNOlxcdFNlbHZhIFJhamFnb3BhbCBcXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXFx1MDAzZVxcbiBMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4gUzpcXHRTdXBwb3J0ZWRcXG4gVzpcXHRodHRwOi8vd3d3Lm9uc2VtaS5jb21cXG4gRjpcXHRkcml2ZXJzL25ldC9waHkvbmNuKlxcbiBcXG4rT05TRU1JIFMyNTAwIDEwQkFTRS1UMVMgTUFDUEhZIEVUSEVSTkVUIERSSVZFUlxcbitNOlxcdFNlbHZhIFJhamFnb3BhbCBcXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXFx1MDAzZVxcbitMOlxcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcXG4rUzpcXHRTdXBwb3J0ZWRcXG4rRjpcXHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L29ubm4sczI1MDAueWFtbFxcbitGOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF8qXFxuK1xcbiBPUC1URUUgRFJJVkVSXFxuIE06XFx0SmVucyBXaWtsYW5kZXIgXFx1MDAzY2plbnMud2lrbGFuZGVyQGxpbmFyby5vcmdcXHUwMDNlXFxuIEw6XFx0b3AtdGVlQGxpc3RzLnRydXN0ZWRmaXJtd2FyZS5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKVxcbkBAIC0yMDIwOSwxMCArMjAyMTcsMTEgQEAgRjpcXHRkcml2ZXJzL3J0Yy9ydGMtb3B0ZWUuY1xcbiBcXG4gT1BFTiBBTExJQU5DRSAxMEJBU0UtVDFTIE1BQ1BIWSBTRVJJQUwgSU5URVJGQUNFIEZSQU1FV09SS1xcbiBNOlxcdFBhcnRoaWJhbiBWZWVyYXNvb3JhbiBcXHUwMDNjcGFydGhpYmFuLnZlZXJhc29vcmFuQG1pY3JvY2hpcC5jb21cXHUwMDNlXFxuK006XFx0U2VsdmEgUmFqYWdvcGFsIFxcdTAwM2NzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb21cXHUwMDNlICh0aW1lc3RhbXAgc3VwcG9ydClcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdFxcbi1GOlxcdGRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXFxuK0Y6XFx0ZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNipcXG4gRjpcXHRpbmNsdWRlL2xpbnV4L29hX3RjNi5oXFxuIFxcbiBPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcXG5pbmRleCA3OGM3OWFkN2JiYTU1My4uMjc0MDJhNTkyYjI5NGQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWdcXG5AQCAtMTM0LDcgKzEzNCw5IEBAIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbmV0cm9ub21lL0tjb25maWdcXFwiXFxuIHNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L252aWRpYS9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L254cC9LY29uZmlnXFxcIlxcbitzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L29raS1zZW1pL0tjb25maWdcXFwiXFxuK3NvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL0tjb25maWdcXFwiXFxuIFxcbiBjb25maWcgRVRIT0NcXG4gXFx0dHJpc3RhdGUgXFxcIk9wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMgc3VwcG9ydFxcXCJcXG5AQCAtMTQ2LDE3ICsxNDgsNiBAQCBjb25maWcgRVRIT0NcXG4gXFx0aGVscFxcbiBcXHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBPcGVuQ29yZXMgMTAvMTAwIE1icHMgRXRoZXJuZXQgTUFDLlxcbiBcXG4tY29uZmlnIE9BX1RDNlxcbi1cXHR0cmlzdGF0ZSBcXFwiT1BFTiBBbGxpYW5jZSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZIHN1cHBvcnRcXFwiIGlmIENPTVBJTEVfVEVTVFxcbi1cXHRkZXBlbmRzIG9uIFNQSVxcbi1cXHRzZWxlY3QgUEhZTElCXFxuLVxcdGhlbHBcXG4tXFx0ICBUaGlzIGxpYnJhcnkgaW1wbGVtZW50cyBPUEVOIEFsbGlhbmNlIFRDNiAxMEJBU0UtVDF4IE1BQy1QSFlcXG4tXFx0ICBTZXJpYWwgSW50ZXJmYWNlIHByb3RvY29sIGZvciBzdXBwb3J0aW5nIDEwQkFTRS1UMXggTUFDLVBIWXMuXFxuLVxcbi1cXHQgIFRvIGtub3cgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMsIHJlZmVyIGRvY3VtZW50YXRpb24gaW5cXG4tXFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3RcXHUwMDNlLlxcbi1cXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9wYXNlbWkvS2NvbmZpZ1xcXCJcXG4gc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnXFxcIlxcbiBzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dpYy9LY29uZmlnXFxcIlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXFxuaW5kZXggYmJhNTVkOWFmMzg3NzAuLjc3YjExZDVhN2FiZjEzIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcXG5AQCAtNzEsNiArNzEsNyBAQCBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9ORVRST05PTUUpICs9IG5ldHJvbm9tZS9cXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfTkkpICs9IG5pL1xcbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9OVklESUEpICs9IG52aWRpYS9cXG4gb2JqLSQoQ09ORklHX0xQQ19FTkVUKSArPSBueHAvXFxuK29iai0kKENPTkZJR19PQV9UQzYpICs9IG9hX3RjNi9cXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfT0tJKSArPSBva2ktc2VtaS9cXG4gb2JqLSQoQ09ORklHX0VUSE9DKSArPSBldGhvYy5vXFxuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BBU0VNSSkgKz0gcGFzZW1pL1xcbkBAIC0xMDQsNCArMTA1LDMgQEAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfWElMSU5YKSArPSB4aWxpbngvXFxuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1hJUkNPTSkgKz0geGlyY29tL1xcbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXFxuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BFTlNBTkRPKSArPSBwZW5zYW5kby9cXG4tb2JqLSQoQ09ORklHX09BX1RDNikgKz0gb2FfdGM2Lm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jXFxuaW5kZXggMDI3N2Q5NzM3MzY5YWQuLjNiNTU1ZWU2OTgwNDEwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguY1xcbkBAIC0xMywyNyArMTMsMjcgQEBcXG4gI2RlZmluZSBEUlZfTkFNRVxcdFxcdFxcdFxcXCJsYW44NjUwXFxcIlxcbiBcXG4gLyogTUFDIE5ldHdvcmsgQ29udHJvbCBSZWdpc3RlciAqL1xcbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMXFx0XFx0MHgwMDAxMDAwMFxcbisjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMXFx0XFx0MHgwXFxuICNkZWZpbmUgTUFDX05FVF9DVExfVFhFTlxcdFxcdEJJVCgzKSAvKiBUcmFuc21pdCBFbmFibGUgKi9cXG4gI2RlZmluZSBNQUNfTkVUX0NUTF9SWEVOXFx0XFx0QklUKDIpIC8qIFJlY2VpdmUgRW5hYmxlICovXFxuIFxcbiAvKiBNQUMgTmV0d29yayBDb25maWd1cmF0aW9uIFJlZyAqL1xcbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19ORVRfQ0ZHXFx0XFx0MHgwMDAxMDAwMVxcbisjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19ORVRfQ0ZHXFx0XFx0MHgxXFxuICNkZWZpbmUgTUFDX05FVF9DRkdfUFJPTUlTQ1VPVVNfTU9ERVxcdEJJVCg0KVxcbiAjZGVmaW5lIE1BQ19ORVRfQ0ZHX01VTFRJQ0FTVF9NT0RFXFx0QklUKDYpXFxuICNkZWZpbmUgTUFDX05FVF9DRkdfVU5JQ0FTVF9NT0RFXFx0QklUKDcpXFxuIFxcbiAvKiBNQUMgSGFzaCBSZWdpc3RlciBCb3R0b20gKi9cXG4tI2RlZmluZSBMQU44NjVYX1JFR19NQUNfTF9IQVNIXFx0XFx0MHgwMDAxMDAyMFxcbisjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19MX0hBU0hcXHRcXHQweDIwXFxuIC8qIE1BQyBIYXNoIFJlZ2lzdGVyIFRvcCAqL1xcbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19IX0hBU0hcXHRcXHQweDAwMDEwMDIxXFxuKyNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0hfSEFTSFxcdFxcdDB4MjFcXG4gLyogTUFDIFNwZWNpZmljIEFkZHIgMSBCb3R0b20gUmVnICovXFxuLSNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0xfU0FERFIxXFx0MHgwMDAxMDAyMlxcbisjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19MX1NBRERSMVxcdDB4MjJcXG4gLyogTUFDIFNwZWNpZmljIEFkZHIgMSBUb3AgUmVnICovXFxuLSNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0hfU0FERFIxXFx0MHgwMDAxMDAyM1xcbisjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19IX1NBRERSMVxcdDB4MjNcXG4gXFxuIC8qIE1BQyBUU1UgVGltZXIgSW5jcmVtZW50IFJlZ2lzdGVyICovXFxuLSNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX1RTVV9USU1FUl9JTkNSXFx0XFx0MHgwMDAxMDA3N1xcbisjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19UU1VfVElNRVJfSU5DUlxcdFxcdDB4NzdcXG4gI2RlZmluZSBNQUNfVFNVX1RJTUVSX0lOQ1JfQ09VTlRfTkFOT1NFQ09ORFNcXHQweDAwMjhcXG4gXFxuIHN0cnVjdCBsYW44NjV4X3ByaXYge1xcbkBAIC00OSw3ICs0OSw4IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfaHdfbWFjYWRkcl9sb3dfYnl0ZXMoc3RydWN0IG9hX3RjNiAqdGM2LCBjb25zdCB1OCAqbWFjKVxcbiBcXG4gXFx0cmVndmFsID0gKG1hY1szXSBcXHUwMDNjXFx1MDAzYyAyNCkgfCAobWFjWzJdIFxcdTAwM2NcXHUwMDNjIDE2KSB8IChtYWNbMV0gXFx1MDAzY1xcdTAwM2MgOCkgfCBtYWNbMF07XFxuIFxcbi1cXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgTEFOODY1WF9SRUdfTUFDX0xfU0FERFIxLCByZWd2YWwpO1xcbitcXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyh0YzYsIExBTjg2NVhfUkVHX01BQ19MX1NBRERSMSxcXG4rXFx0XFx0XFx0XFx0XFx0IE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCByZWd2YWwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IGxhbjg2NXhfc2V0X2h3X21hY2FkZHIoc3RydWN0IGxhbjg2NXhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hYylcXG5AQCAtNjUsOCArNjYsOCBAQCBzdGF0aWMgaW50IGxhbjg2NXhfc2V0X2h3X21hY2FkZHIoc3RydWN0IGxhbjg2NXhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hYylcXG4gXFxuIFxcdC8qIFByZXBhcmUgYW5kIGNvbmZpZ3VyZSBNQUMgYWRkcmVzcyBoaWdoIGJ5dGVzICovXFxuIFxcdHJlZ3ZhbCA9IChtYWNbNV0gXFx1MDAzY1xcdTAwM2MgOCkgfCBtYWNbNF07XFxuLVxcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVxcdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19IX1NBRERSMSxcXG4tXFx0XFx0XFx0XFx0ICAgIHJlZ3ZhbCk7XFxuK1xcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfSF9TQUREUjEsXFxuK1xcdFxcdFxcdFxcdFxcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCByZWd2YWwpO1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xNDYsMTQgKzE0NywxNiBAQCBzdGF0aWMgaW50IGxhbjg2NXhfc2V0X3NwZWNpZmljX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIEVuYWJsaW5nIHNwZWNpZmljIG11bHRpY2FzdCBhZGRyZXNzZXMgKi9cXG4tXFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCwgaGFzaF9oaSk7XFxuK1xcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfSF9IQVNILFxcbitcXHRcXHRcXHRcXHRcXHRPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgaGFzaF9oaSk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0bmV0ZGV2X2Vycihwcml2LVxcdTAwM2VuZXRkZXYsIFxcXCJGYWlsZWQgdG8gd3JpdGUgcmVnX2hhc2hoOiAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgcmV0KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCwgaGFzaF9sbyk7XFxuK1xcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTF9IQVNILFxcbitcXHRcXHRcXHRcXHRcXHRPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgaGFzaF9sbyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlbmV0ZGV2LCBcXFwiRmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNobDogJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgIHJldCk7XFxuQEAgLTE2NiwxNiArMTY5LDE2IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfYWxsX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpXFxuIFxcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBFbmFibGluZyBhbGwgbXVsdGljYXN0IGFkZHJlc3NlcyAqL1xcbi1cXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfSF9IQVNILFxcbi1cXHRcXHRcXHRcXHQgICAgMHhmZmZmZmZmZik7XFxuK1xcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfSF9IQVNILFxcbitcXHRcXHRcXHRcXHRcXHRPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgMHhmZmZmZmZmZik7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0bmV0ZGV2X2Vycihwcml2LVxcdTAwM2VuZXRkZXYsIFxcXCJGYWlsZWQgdG8gd3JpdGUgcmVnX2hhc2hoOiAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0ICAgcmV0KTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCxcXG4tXFx0XFx0XFx0XFx0ICAgIDB4ZmZmZmZmZmYpO1xcbitcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCxcXG4rXFx0XFx0XFx0XFx0XFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIDB4ZmZmZmZmZmYpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRuZXRkZXZfZXJyKHByaXYtXFx1MDAzZW5ldGRldiwgXFxcIkZhaWxlZCB0byB3cml0ZSByZWdfaGFzaGw6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICByZXQpO1xcbkBAIC0xODcsMTQgKzE5MCwxNiBAQCBzdGF0aWMgaW50IGxhbjg2NXhfY2xlYXJfYWxsX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVxcdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19IX0hBU0gsIDApO1xcbitcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCxcXG4rXFx0XFx0XFx0XFx0XFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIDApO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlbmV0ZGV2LCBcXFwiRmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNoaDogJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCAgIHJldCk7XFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVxcdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19MX0hBU0gsIDApO1xcbitcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0xfSEFTSCxcXG4rXFx0XFx0XFx0XFx0XFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIDApO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRuZXRkZXZfZXJyKHByaXYtXFx1MDAzZW5ldGRldiwgXFxcIkZhaWxlZCB0byB3cml0ZSByZWdfaGFzaGw6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICByZXQpO1xcbkBAIC0yMzUsNyArMjQwLDggQEAgc3RhdGljIHZvaWQgbGFuODY1eF9tdWx0aWNhc3Rfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0XFx0aWYgKGxhbjg2NXhfY2xlYXJfYWxsX211bHRpY2FzdF9hZGRyKHByaXYpKVxcbiBcXHRcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4tXFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DRkcsIHJlZ3ZhbCk7XFxuK1xcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NGRyxcXG4rXFx0XFx0XFx0XFx0XFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIHJlZ3ZhbCk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlbmV0ZGV2LCBcXFwiRmFpbGVkIHRvIGVuYWJsZSBwcm9taXNjdW91cy9tdWx0aWNhc3Qvbm9ybWFsIG1vZGU6ICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHQgICByZXQpO1xcbkBAIC0yNjAsMTIgKzI2NiwxNCBAQCBzdGF0aWMgaW50IGxhbjg2NXhfaHdfZGlzYWJsZShzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2KVxcbiB7XFxuIFxcdHUzMiByZWd2YWw7XFxuIFxcbi1cXHRpZiAob2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NUTCwgXFx1MDAyNnJlZ3ZhbCkpXFxuK1xcdGlmIChvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NUTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgXFx1MDAyNnJlZ3ZhbCkpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0cmVndmFsIFxcdTAwMjY9IH4oTUFDX05FVF9DVExfVFhFTiB8IE1BQ19ORVRfQ1RMX1JYRU4pO1xcbiBcXG4tXFx0aWYgKG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVxcdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLCByZWd2YWwpKVxcbitcXHRpZiAob2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLFxcbitcXHRcXHRcXHRcXHQgICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgcmVndmFsKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMjkxLDEyICsyOTksMTQgQEAgc3RhdGljIGludCBsYW44NjV4X2h3X2VuYWJsZShzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2KVxcbiB7XFxuIFxcdHUzMiByZWd2YWw7XFxuIFxcbi1cXHRpZiAob2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NUTCwgXFx1MDAyNnJlZ3ZhbCkpXFxuK1xcdGlmIChvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NUTCxcXG4rXFx0XFx0XFx0XFx0ICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgXFx1MDAyNnJlZ3ZhbCkpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0cmVndmFsIHw9IE1BQ19ORVRfQ1RMX1RYRU4gfCBNQUNfTkVUX0NUTF9SWEVOO1xcbiBcXG4tXFx0aWYgKG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVxcdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLCByZWd2YWwpKVxcbitcXHRpZiAob2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLFxcbitcXHRcXHRcXHRcXHQgICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgcmVndmFsKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5AQCAtMzU5LDggKzM2OSw5IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbiBcXHQgKiBzdGFtcGluZyBhdCB0aGUgZW5kIG9mIHRoZSBTdGFydCBvZiBGcmFtZSBEZWxpbWl0ZXIgKFNGRCkgYW5kIHNldCB0aGVcXG4gXFx0ICogVGltZXIgSW5jcmVtZW50IHJlZyB0byA0MCBucyB0byBiZSB1c2VkIGFzIGEgMjUgTUh6IGludGVybmFsIGNsb2NrLlxcbiBcXHQgKi9cXG4tXFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX1RTVV9USU1FUl9JTkNSLFxcbi1cXHRcXHRcXHRcXHQgICAgTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTKTtcXG4rXFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19UU1VfVElNRVJfSU5DUixcXG4rXFx0XFx0XFx0XFx0XFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsXFxuK1xcdFxcdFxcdFxcdFxcdE1BQ19UU1VfVElNRVJfSU5DUl9DT1VOVF9OQU5PU0VDT05EUyk7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0ZGV2X2VycihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gY29uZmlnIFRTVSBUaW1lciBJbmNyIHJlZzogJWRcXFxcblxcXCIsXFxuIFxcdFxcdFxcdHJldCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NzM0NWYzNDVmYjlmMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMTYgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBPQSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZIGNvbmZpZ3VyYXRpb25cXG4rI1xcbitcXG4rY29uZmlnIE9BX1RDNlxcbitcXHR0cmlzdGF0ZSBcXFwiT1BFTiBBbGxpYW5jZSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZIHN1cHBvcnRcXFwiXFxuK1xcdGRlcGVuZHMgb24gU1BJXFxuK1xcdHNlbGVjdCBQSFlMSUJcXG4rXFx0aGVscFxcbitcXHQgIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIE9QRU4gQWxsaWFuY2UgVEM2IDEwQkFTRS1UMXggTUFDLVBIWVxcbitcXHQgIFNlcmlhbCBJbnRlcmZhY2UgcHJvdG9jb2wgZm9yIHN1cHBvcnRpbmcgMTBCQVNFLVQxeCBNQUMtUEhZcy5cXG4rXFxuK1xcdCAgVG8ga25vdyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgcmVmZXIgZG9jdW1lbnRhdGlvbiBpblxcbitcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdFxcdTAwM2UuXFxuK1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NjRmNjY4ZWZjMmQzYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBNYWtlZmlsZSBmb3IgT0EgVEM2IDEwQkFTRS1UMXggTUFDLVBIWVxcbisjXFxuK1xcbitvYmotJChDT05GSUdfT0FfVEM2KSA6PSBvYV90YzZfbW9kLm9cXG4rb2FfdGM2X21vZC1vYmpzIDo9IG9hX3RjNi5vIG9hX3RjNl9wdHAubyBvYV90YzZfdHN0YW1wLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2LmNcXG5zaW1pbGFyaXR5IGluZGV4IDc5JVxcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXFxucmVuYW1lIHRvIGRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzYuY1xcbmluZGV4IDA3MjdkNTMzNDVhMzNiLi5kNGU5NDcyNGY2NDkxMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzYuY1xcbkBAIC0xMiwxNDkgKzEyLDE1IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29hX3RjNi5oXFx1MDAzZVxcbiBcXG4tLyogT1BFTiBBbGxpYW5jZSBUQzYgcmVnaXN0ZXJzICovXFxuLS8qIFN0YW5kYXJkIENhcGFiaWxpdGllcyBSZWdpc3RlciAqL1xcbi0jZGVmaW5lIE9BX1RDNl9SRUdfU1REQ0FQXFx0XFx0XFx0MHgwMDAyXFxuLSNkZWZpbmUgU1REQ0FQX0RJUkVDVF9QSFlfUkVHX0FDQ0VTU1xcdFxcdEJJVCg4KVxcbi1cXG4tLyogUmVzZXQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovXFxuLSNkZWZpbmUgT0FfVEM2X1JFR19SRVNFVFxcdFxcdFxcdDB4MDAwM1xcbi0jZGVmaW5lIFJFU0VUX1NXUkVTRVRcXHRcXHRcXHRcXHRCSVQoMClcXHQvKiBTb2Z0d2FyZSBSZXNldCAqL1xcbi1cXG4tLyogQ29uZmlndXJhdGlvbiBSZWdpc3RlciAjMCAqL1xcbi0jZGVmaW5lIE9BX1RDNl9SRUdfQ09ORklHMFxcdFxcdFxcdDB4MDAwNFxcbi0jZGVmaW5lIENPTkZJRzBfU1lOQ1xcdFxcdFxcdFxcdEJJVCgxNSlcXG4tI2RlZmluZSBDT05GSUcwX1pBUkZFX0VOQUJMRVxcdFxcdFxcdEJJVCgxMilcXG4tXFxuLS8qIFN0YXR1cyBSZWdpc3RlciAjMCAqL1xcbi0jZGVmaW5lIE9BX1RDNl9SRUdfU1RBVFVTMFxcdFxcdFxcdDB4MDAwOFxcbi0jZGVmaW5lIFNUQVRVUzBfUkVTRVRDXFx0XFx0XFx0XFx0QklUKDYpXFx0LyogUmVzZXQgQ29tcGxldGUgKi9cXG4tI2RlZmluZSBTVEFUVVMwX0hFQURFUl9FUlJPUlxcdFxcdFxcdEJJVCg1KVxcbi0jZGVmaW5lIFNUQVRVUzBfTE9TU19PRl9GUkFNRV9FUlJPUlxcdFxcdEJJVCg0KVxcbi0jZGVmaW5lIFNUQVRVUzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUk9SXFx0QklUKDMpXFxuLSNkZWZpbmUgU1RBVFVTMF9UWF9QUk9UT0NPTF9FUlJPUlxcdFxcdEJJVCgwKVxcbi1cXG4tLyogQnVmZmVyIFN0YXR1cyBSZWdpc3RlciAqL1xcbi0jZGVmaW5lIE9BX1RDNl9SRUdfQlVGRkVSX1NUQVRVU1xcdFxcdDB4MDAwQlxcbi0jZGVmaW5lIEJVRkZFUl9TVEFUVVNfVFhfQ1JFRElUU19BVkFJTEFCTEVcXHRHRU5NQVNLKDE1LCA4KVxcbi0jZGVmaW5lIEJVRkZFUl9TVEFUVVNfUlhfQ0hVTktTX0FWQUlMQUJMRVxcdEdFTk1BU0soNywgMClcXG4tXFxuLS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICMwICovXFxuLSNkZWZpbmUgT0FfVEM2X1JFR19JTlRfTUFTSzBcXHRcXHRcXHQweDAwMENcXG4tI2RlZmluZSBJTlRfTUFTSzBfSEVBREVSX0VSUl9NQVNLXFx0XFx0QklUKDUpXFxuLSNkZWZpbmUgSU5UX01BU0swX0xPU1NfT0ZfRlJBTUVfRVJSX01BU0tcXHRCSVQoNClcXG4tI2RlZmluZSBJTlRfTUFTSzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUl9NQVNLXFx0QklUKDMpXFxuLSNkZWZpbmUgSU5UX01BU0swX1RYX1BST1RPQ09MX0VSUl9NQVNLXFx0XFx0QklUKDApXFxuLSNkZWZpbmUgSU5UX01BU0swX0FMTF9JTlRFUlJVUFRTICAgICAgICAgICAgICAgIChHRU5NQVNLKDUsIDApIHwgXFxcXFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgR0VOTUFTSygxMiwgNykpXFxuLVxcbi0vKiBQSFkgQ2xhdXNlIDIyIHJlZ2lzdGVycyBiYXNlIGFkZHJlc3MgYW5kIG1hc2sgKi9cXG4tI2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFXFx0XFx0MHhGRjAwXFxuLSNkZWZpbmUgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfTUFTS1xcdFxcdDB4MUZcXG4tXFxuLS8qIENvbnRyb2wgY29tbWFuZCBoZWFkZXIgKi9cXG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfREFUQV9OT1RfQ1RSTFxcdEJJVCgzMSlcXG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfV1JJVEVfTk9UX1JFQURcXHRCSVQoMjkpXFxuLSNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX01FTV9NQVBfU0VMRUNUT1JcXHRHRU5NQVNLKDI3LCAyNClcXG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfQUREUlxcdFxcdFxcdEdFTk1BU0soMjMsIDgpXFxuLSNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0xFTkdUSFxcdFxcdEdFTk1BU0soNywgMSlcXG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfUEFSSVRZXFx0XFx0QklUKDApXFxuLVxcbi0vKiBEYXRhIGhlYWRlciAqL1xcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9EQVRBX05PVF9DVFJMXFx0QklUKDMxKVxcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9EQVRBX1ZBTElEXFx0XFx0QklUKDIxKVxcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9TVEFSVF9WQUxJRFxcdFxcdEJJVCgyMClcXG4tI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfV09SRF9PRkZTRVRcXHRHRU5NQVNLKDE5LCAxNilcXG4tI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfRU5EX1ZBTElEXFx0XFx0QklUKDE0KVxcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9FTkRfQllURV9PRkZTRVRcXHRHRU5NQVNLKDEzLCA4KVxcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9QQVJJVFlcXHRcXHRCSVQoMClcXG4tXFxuLS8qIERhdGEgZm9vdGVyICovXFxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VYVEVOREVEX1NUU1xcdFxcdEJJVCgzMSlcXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfUlhEX0hFQURFUl9CQURcXHRCSVQoMzApXFxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0NPTkZJR19TWU5DXFx0XFx0QklUKDI5KVxcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SWF9DSFVOS1NcXHRcXHRHRU5NQVNLKDI4LCAyNClcXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfREFUQV9WQUxJRFxcdFxcdEJJVCgyMSlcXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfU1RBUlRfVkFMSURcXHRcXHRCSVQoMjApXFxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1dPUkRfT0ZGU0VUXFx0R0VOTUFTSygxOSwgMTYpXFxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VORF9WQUxJRFxcdFxcdEJJVCgxNClcXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfRU5EX0JZVEVfT0ZGU0VUXFx0R0VOTUFTSygxMywgOClcXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfVFhfQ1JFRElUU1xcdFxcdEdFTk1BU0soNSwgMSlcXG4tXFxuLS8qIFBIWSDigJMgQ2xhdXNlIDQ1IHJlZ2lzdGVycyBtZW1vcnkgbWFwIHNlbGVjdG9yIChNTVMpIGFzIHBlciB0YWJsZSA2IGluIHRoZVxcbi0gKiBPUEVOIEFsbGlhbmNlIHNwZWNpZmljYXRpb24uXFxuLSAqL1xcbi0jZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1BDU19NTVMyXFx0XFx0XFx0MlxcdC8qIE1NRCAzICovXFxuLSNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE1BX1BNRF9NTVMzXFx0XFx0M1xcdC8qIE1NRCAxICovXFxuLSNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0XFx0XFx0NFxcdC8qIE1NRCAzMSAqL1xcbi0jZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X0FVVE9fTkVHX01NUzVcXHRcXHQ1XFx0LyogTU1EIDcgKi9cXG4tI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QT1dFUl9VTklUX01NUzZcXHRcXHQ2XFx0LyogTU1EIDEzICovXFxuLVxcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9TSVpFXFx0XFx0XFx0NFxcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFXFx0XFx0NFxcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0lHTk9SRURfU0laRVxcdFxcdDRcXG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9NQVhfUkVHSVNURVJTXFx0XFx0MTI4XFxuLSNkZWZpbmUgT0FfVEM2X0NUUkxfU1BJX0JVRl9TSVpFXFx0XFx0KE9BX1RDNl9DVFJMX0hFQURFUl9TSVpFICtcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdFxcdChPQV9UQzZfQ1RSTF9NQVhfUkVHSVNURVJTICpcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdFxcdE9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFKSArXFxcXFxcbi1cXHRcXHRcXHRcXHRcXHRcXHRPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkUpXFxuLSNkZWZpbmUgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRVxcdFxcdDY0XFxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NJWkVcXHRcXHRcXHQ0XFxuLSNkZWZpbmUgT0FfVEM2X0NIVU5LX1NJWkVcXHRcXHRcXHQoT0FfVEM2X0RBVEFfSEVBREVSX1NJWkUgK1xcXFxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0T0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRSlcXG4tI2RlZmluZSBPQV9UQzZfTUFYX1RYX0NIVU5LU1xcdFxcdFxcdDQ4XFxuLSNkZWZpbmUgT0FfVEM2X1NQSV9EQVRBX0JVRl9TSVpFXFx0XFx0KE9BX1RDNl9NQVhfVFhfQ0hVTktTICpcXFxcXFxuLVxcdFxcdFxcdFxcdFxcdFxcdE9BX1RDNl9DSFVOS19TSVpFKVxcbi0jZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfREVMQVlcXHRcXHQxMDAwXFxuLSNkZWZpbmUgU1RBVFVTMF9SRVNFVENfUE9MTF9USU1FT1VUXFx0XFx0MTAwMDAwMFxcbi1cXG4tLyogSW50ZXJuYWwgc3RydWN0dXJlIGZvciBNQUMtUEhZIGRyaXZlcnMgKi9cXG4tc3RydWN0IG9hX3RjNiB7XFxuLVxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XFxuLVxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuLVxcdHN0cnVjdCBtaWlfYnVzICptZGlvYnVzO1xcbi1cXHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpO1xcbi1cXHRzdHJ1Y3QgbXV0ZXggc3BpX2N0cmxfbG9jazsgLyogUHJvdGVjdHMgc3BpIGNvbnRyb2wgdHJhbnNmZXIgKi9cXG4tXFx0c3BpbmxvY2tfdCB0eF9za2JfbG9jazsgLyogUHJvdGVjdHMgdHggc2tiIGhhbmRsaW5nICovXFxuLVxcdHZvaWQgKnNwaV9jdHJsX3R4X2J1ZjtcXG4tXFx0dm9pZCAqc3BpX2N0cmxfcnhfYnVmO1xcbi1cXHR2b2lkICpzcGlfZGF0YV90eF9idWY7XFxuLVxcdHZvaWQgKnNwaV9kYXRhX3J4X2J1ZjtcXG4tXFx0c3RydWN0IHNrX2J1ZmYgKm9uZ29pbmdfdHhfc2tiO1xcbi1cXHRzdHJ1Y3Qgc2tfYnVmZiAqd2FpdGluZ190eF9za2I7XFxuLVxcdHN0cnVjdCBza19idWZmICpyeF9za2I7XFxuLVxcdHUxNiB0eF9za2Jfb2Zmc2V0O1xcbi1cXHR1MTYgc3BpX2RhdGFfdHhfYnVmX29mZnNldDtcXG4tXFx0dTE2IHR4X2NyZWRpdHM7XFxuLVxcdHU4IHJ4X2NodW5rc19hdmFpbGFibGU7XFxuLVxcdGJvb2wgcnhfYnVmX292ZXJmbG93O1xcbi1cXHRib29sIGludF9mbGFnO1xcbi1cXHRib29sIGRpc2FibGVfdHJhZmZpYztcXG4tfTtcXG4tXFxuLWVudW0gb2FfdGM2X2hlYWRlcl90eXBlIHtcXG4tXFx0T0FfVEM2X0NUUkxfSEVBREVSLFxcbi1cXHRPQV9UQzZfREFUQV9IRUFERVIsXFxuLX07XFxuLVxcbi1lbnVtIG9hX3RjNl9yZWdpc3Rlcl9vcCB7XFxuLVxcdE9BX1RDNl9DVFJMX1JFR19SRUFEID0gMCxcXG4tXFx0T0FfVEM2X0NUUkxfUkVHX1dSSVRFID0gMSxcXG4tfTtcXG4tXFxuLWVudW0gb2FfdGM2X2RhdGFfdmFsaWRfaW5mbyB7XFxuLVxcdE9BX1RDNl9EQVRBX0lOVkFMSUQsXFxuLVxcdE9BX1RDNl9EQVRBX1ZBTElELFxcbi19O1xcbisjaW5jbHVkZSBcXFwib2FfdGM2X3N0ZF9kZWYuaFxcXCJcXG4gXFxuLWVudW0gb2FfdGM2X2RhdGFfc3RhcnRfdmFsaWRfaW5mbyB7XFxuLVxcdE9BX1RDNl9EQVRBX1NUQVJUX0lOVkFMSUQsXFxuLVxcdE9BX1RDNl9EQVRBX1NUQVJUX1ZBTElELFxcbitzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcngge1xcbitcXHRib29sIHJ0c2E7XFxuK1xcdGJvb2wgcnRzcDtcXG4gfTtcXG4gXFxuLWVudW0gb2FfdGM2X2RhdGFfZW5kX3ZhbGlkX2luZm8ge1xcbi1cXHRPQV9UQzZfREFUQV9FTkRfSU5WQUxJRCxcXG4tXFx0T0FfVEM2X0RBVEFfRU5EX1ZBTElELFxcbitzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fdHgge1xcbitcXHR1OCB0c2M7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IG9hX3RjNl9zcGlfdHJhbnNmZXIoc3RydWN0IG9hX3RjNiAqdGM2LFxcbkBAIC0xOTEsNiArNTcsMTY4IEBAIHN0YXRpYyBpbnQgb2FfdGM2X2dldF9wYXJpdHkodTMyIHApXFxuIFxcdHJldHVybiAhKChwIFxcdTAwM2VcXHUwMDNlIDI4KSBcXHUwMDI2IDEpO1xcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IG9hX3RjNl90c19pbmZvX3R4ICpvYV90YzZfdHNpbmZvX3R4KHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0cmV0dXJuIChzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fdHggKikoc2tiLVxcdTAwM2VjYik7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcnggKm9hX3RjNl90c2luZm9fcngoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRyZXR1cm4gKHN0cnVjdCBvYV90YzZfdHNfaW5mb19yeCAqKShza2ItXFx1MDAzZWNiKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgb2FfdGM2X2RlZmVyX2Zvcl9od3RzdGFtcChzdHJ1Y3Qgb2FfdGM2ICp0YzYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuK3tcXG4rXFx0aWYgKCF0YzYtXFx1MDAzZWh3X3RzdGFtcF9lbmFibGVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmICghc2tiIHx8IChza2Jfc2hpbmZvKHNrYiktXFx1MDAzZXR4X2ZsYWdzIFxcdTAwMjYgU0tCVFhfSFdfVFNUQU1QKSA9PSAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmICh0YzYtXFx1MDAzZXRzX2NvbmZpZy50eF90eXBlICE9IEhXVFNUQU1QX1RYX09OKSB7XFxuK1xcdFxcdHRjNi1cXHUwMDNldHhfaHd0c3RhbXBfbG9zdCsrO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHNrYl9zaGluZm8oc2tiKS1cXHUwMDNldHhfZmxhZ3MgfD0gU0tCVFhfSU5fUFJPR1JFU1M7XFxuK1xcdHU4IHJldCA9IHRjNi1cXHUwMDNldHhfdHNfaWR4Kys7XFxuK1xcbitcXHRpZiAocmV0ID09IE9BX1RDNl9UVFNDQ19SRUdfSUQpXFxuK1xcdFxcdHRjNi1cXHUwMDNldHhfdHNfaWR4ID0gT0FfVEM2X1RUU0NBX1JFR19JRDtcXG4rXFx0b2FfdGM2X3RzaW5mb190eChza2IpLVxcdTAwM2V0c2MgPSByZXQ7XFxuK1xcbitcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZza2ItXFx1MDAzZWxpc3QsIFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3RzX3NrYl9xKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19kZWZlcnJlZF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCB0c2MpXFxuK3tcXG4rXFx0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHRzdGFtcDtcXG4rXFx0c3RydWN0IG9hX3RjNl90c19pbmZvX3R4ICpza2k7XFxuK1xcdHN0cnVjdCBza19idWZmICpza2IsICp0bXA7XFxuK1xcdGJvb2wgZm91bmQgPSBmYWxzZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHQvKiBTaXplIG9mIGRhdGEgbXVzdCBtYXRjaCBPQV9UQzZfVFNUQU1QX1NaICovXFxuK1xcdHUzMiBkYXRhWzJdO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNrYiwgdG1wLCBcXHUwMDI2dGM2LVxcdTAwM2V0eF90c19za2JfcSwgbGlzdCkge1xcbitcXHRcXHRza2kgPSBvYV90YzZfdHNpbmZvX3R4KHNrYik7XFxuK1xcdFxcdGlmIChza2ktXFx1MDAzZXRzYyAhPSB0c2MpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoZm91bmQpIHtcXG4rXFx0XFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXFx1MDAyNnRjNi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgXFxcIk11bHRpcGxlIHNrYnMuIHRzYyA9ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHRzYyk7XFxuK1xcdFxcdFxcdHRjNi1cXHUwMDNldHhfaHd0c3RhbXBfZXJyKys7XFxuK1xcdFxcdH1cXG4rXFx0XFx0Zm91bmQgPSB0cnVlO1xcbitcXHRcXHRsaXN0X2RlbChcXHUwMDI2c2tiLVxcdTAwM2VsaXN0KTtcXG4rXFxuK1xcdFxcdC8qIFJldHJpZXZlIHRoZSB0aW1lc3RhbXBpbmcgaW5mbyAqL1xcbitcXHRcXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3RlcnModGM2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgT0FfVEM2X1JFR19UVFNDQV9ISUdIICtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIDIgKiAodHNjIC0gMSksIFxcdTAwMjZkYXRhWzBdLCAyKTtcXG4rXFxuK1xcdFxcdGlmICghcmV0KSB7XFxuK1xcdFxcdFxcdHRzdGFtcC5od3RzdGFtcCA9IGt0aW1lX3NldChkYXRhWzBdLCBkYXRhWzFdKTtcXG4rXFx0XFx0XFx0c2tiX3RzdGFtcF90eChza2IsIFxcdTAwMjZ0c3RhbXApO1xcbitcXHRcXHRcXHR0YzYtXFx1MDAzZXR4X2h3dHN0YW1wX3BrdHMrKztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG9hX3RjNl9ldmVudHNfaGFuZGxlKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIHZhbClcXG4re1xcbitcXHQvKiBDaGVjayBUWCB0aW1lc3RhbXBpbmcgKi9cXG4rXFx0aWYgKHZhbCBcXHUwMDI2IFNUQVRVUzBfVFRTQ0FBKVxcbitcXHRcXHRvYV90YzZfcHJvY2Vzc19kZWZlcnJlZF9za2IodGM2LCBPQV9UQzZfVFRTQ0FfUkVHX0lEKTtcXG4rXFxuK1xcdGlmICh2YWwgXFx1MDAyNiBTVEFUVVMwX1RUU0NBQilcXG4rXFx0XFx0b2FfdGM2X3Byb2Nlc3NfZGVmZXJyZWRfc2tiKHRjNiwgT0FfVEM2X1RUU0NCX1JFR19JRCk7XFxuK1xcbitcXHRpZiAodmFsIFxcdTAwMjYgU1RBVFVTMF9UVFNDQUMpXFxuK1xcdFxcdG9hX3RjNl9wcm9jZXNzX2RlZmVycmVkX3NrYih0YzYsIE9BX1RDNl9UVFNDQ19SRUdfSUQpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBvYV90YzZfdXBkYXRlX3RzX2luX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuK3tcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRjNi1cXHUwMDNlcnhfc2tiO1xcbitcXHRzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcnggKnNraTtcXG4rXFx0X19iZTMyIHRzX3ZhbFsyXTtcXG4rXFx0dTMyIHRzWzJdO1xcbitcXG4rXFx0aWYgKCF0YzYtXFx1MDAzZWh3X3RzdGFtcF9lbmFibGVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdHNraSA9IG9hX3RjNl90c2luZm9fcngoc2tiKTtcXG4rXFx0aWYgKCFza2ktXFx1MDAzZXJ0c2EpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1lbWNweShcXHUwMDI2dHNfdmFsWzBdLCBza2ItXFx1MDAzZWRhdGEsIDQpO1xcbitcXHRtZW1jcHkoXFx1MDAyNnRzX3ZhbFsxXSwgKHUzMiAqKXNrYi1cXHUwMDNlZGF0YSArIDEsIDQpO1xcbitcXG4rXFx0dHNbMF0gPSBiZTMyX3RvX2NwdSh0c192YWxbMF0pO1xcbitcXHR0c1sxXSA9IGJlMzJfdG9fY3B1KHRzX3ZhbFsxXSk7XFxuK1xcbitcXHQvKiBDaGVjayBwYXJpdHkgKi9cXG4rXFx0aWYgKChvYV90YzZfZ2V0X3Bhcml0eSh0c1swXSkgXiBvYV90YzZfZ2V0X3Bhcml0eSh0c1sxXSkpID09XFxuK1xcdCAgICAhc2tpLVxcdTAwM2VydHNwKSB7XFxuK1xcdFxcdHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHdfdHM7XFxuK1xcbitcXHRcXHQvKiBSZXBvcnQgdGltZXN0YW1wIHRvIHRoZSB1cHBlciBsYXllcnMgKi9cXG4rXFx0XFx0aHdfdHMgPSBza2JfaHd0c3RhbXBzKHNrYik7XFxuK1xcdFxcdG1lbXNldChod190cywgMCwgc2l6ZW9mKCpod190cykpO1xcbitcXHRcXHRod190cy1cXHUwMDNlaHd0c3RhbXAgPSBrdGltZV9zZXQodHNbMF0sIHRzWzFdKTtcXG4rXFx0fVxcbitcXHRza2JfcHVsbChza2IsIHNpemVvZih0cykpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG9hX3RjNl91cGRhdGVfc3RhbmRhcmRfY2FwYWJpbGl0eShzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuK3tcXG4rXFx0dTMyIHJlZ3ZhbCA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfU1REQ0FQLCBcXHUwMDI2cmVndmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlZ3ZhbCBcXHUwMDI2IFNURENBUF9GUkFNRV9USU1FU1RBTVBfQ0FQQUJJTElUWSlcXG4rXFx0XFx0dGM2LVxcdTAwM2Vod190c3RhbXBfc3VwcG9ydGVkID0gdHJ1ZTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBvYV90YzZfaW9jdGwgLSBnZW5lcmljIGlvY3RsIGludGVyZmFjZSBmb3IgTUFDLVBIWSBkcml2ZXJzLlxcbisgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxcbisgKiBAcnE6IHJlcXVlc3QgZnJvbSBzb2NrZXQgaW50ZXJmYWNlXFxuKyAqIEBjbWQ6IHZhbHVlIHRvIHNldC9nZXQgdGltZXN0YW1wIGNvbmZpZ3VyYXRpb25cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cXG4rICovXFxuK2ludCBvYV90YzZfaW9jdGwoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKVxcbit7XFxuK1xcdGlmICghbmV0aWZfcnVubmluZyh0YzYtXFx1MDAzZW5ldGRldikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKGNtZCA9PSBTSU9DU0hXVFNUQU1QIHx8IGNtZCA9PSBTSU9DR0hXVFNUQU1QKVxcbitcXHRcXHRyZXR1cm4gb2FfdGM2X3RzdGFtcF9pb2N0bCh0YzYsIHJxLCBjbWQpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldHVybiBwaHlfZG9faW9jdGxfcnVubmluZyh0YzYtXFx1MDAzZW5ldGRldiwgcnEsIGNtZCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2lvY3RsKTtcXG4rXFxuKy8qKlxcbisgKiBvYV90YzZfc2V0X3ZlbmQxX21tcyAtIEFkZCB2ZW5kb3Igc3BlY2lmaWMgTURJT19NTUQgdG8gT0EgVEM2IE1NU1xcbisgKiBtYXBwZXIgdmFsdWUuXFxuKyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXFxuKyAqIEBtbXM6IHZlbmRvciBkZWZpbmVkIE1NUyB2YWx1ZSBmb3IgVkVORDEgbWRpbyBkZXZpY2UuXFxuKyAqL1xcbit2b2lkIG9hX3RjNl9zZXRfdmVuZDFfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgaW50IG1tcylcXG4re1xcbitcXHR0YzYtXFx1MDAzZXZlbmQxX21tcyA9IG1tcztcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfc2V0X3ZlbmQxX21tcyk7XFxuK1xcbiBzdGF0aWMgX19iZTMyIG9hX3RjNl9wcmVwYXJlX2N0cmxfaGVhZGVyKHUzMiBhZGRyLCB1OCBsZW5ndGgsXFxuIFxcdFxcdFxcdFxcdFxcdCBlbnVtIG9hX3RjNl9yZWdpc3Rlcl9vcCByZWdfb3ApXFxuIHtcXG5AQCAtMzU1LDYgKzM4Myw4MyBAQCBpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCB1MzIgYWRkcmVzcywgdTMyICp2YWx1ZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfcmVhZF9yZWdpc3Rlcik7XFxuIFxcbisvKipcXG4rICogb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyAtIGZ1bmN0aW9uIGZvciByZWFkaW5nIG11bHRpcGxlIGNvbnNlY3V0aXZlXFxuKyAqIHJlZ2lzdGVycyBmb3IgdGhlIGdpdmVuIGFkZHJlc3MsIG1lbW9yeSBtYXAgc2VsZWN0b3IgcGFpci5cXG4rICogQHRjNjogb2FfdGM2IHN0cnVjdC5cXG4rICogQGFkZHJlc3M6IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHRvIGJlIHJlYWQgaW4gdGhlIE1BQy1QSFkuXFxuKyAqIEBtbXM6IE1lbW9yeSBtYXAgc2VsZWN0b3IgZm9yIHRoZSByZWdpc3RlcnMgdG8gYmUgcmVhZC5cXG4rICogQHZhbHVlOiB2YWx1ZXMgdG8gYmUgcmVhZCBmcm9tIHRoZSBzdGFydGluZyByZWdpc3RlciBhZGRyZXNzIEBhZGRyZXNzLlxcbisgKiBAbGVuZ3RoOiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIHRvIGJlIHJlYWQgZnJvbSBAYWRkcmVzcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cXG4rICovXFxuK2ludCBvYV90YzZfcmVhZF9yZWdpc3RlcnNfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsXFxuK1xcdFxcdFxcdCAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpXFxuK3tcXG4rXFx0dTMyIG1tc19hZGRyID0gKHUzMiltbXMgXFx1MDAzY1xcdTAwM2MgMTYgfCAodTMyKWFkZHJlc3M7XFxuK1xcbitcXHRyZXR1cm4gb2FfdGM2X3JlYWRfcmVnaXN0ZXJzKHRjNiwgbW1zX2FkZHIsIHZhbHVlLCBsZW5ndGgpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXMpO1xcbitcXG4rLyoqXFxuKyAqIG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyAtIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgTUFDLVBIWSByZWdpc3RlclxcbisgKiBmb3IgdGhlIGdpdmVuIGFkZHJlc3MsIG1lbW9yeSBtYXAgc2VsZWN0b3IgcGFpci5cXG4rICogQHRjNjogb2FfdGM2IHN0cnVjdC5cXG4rICogQGFkZHJlc3M6IHJlZ2lzdGVyIGFkZHJlc3Mgb2YgdGhlIE1BQy1QSFkgdG8gYmUgcmVhZC5cXG4rICogQG1tczogTWVtb3J5IE1hcCBTZWxlY3RvciBmb3IgdGhlIGdpdmVuIGFkZHJlc3NcXG4rICogQHZhbHVlOiB2YWx1ZSByZWFkIGZyb20gdGhlIEBhZGRyZXNzIHJlZ2lzdGVyIGFkZHJlc3Mgb2YgdGhlIE1BQy1QSFkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXFxuKyAqL1xcbitpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsXFxuK1xcdFxcdFxcdCAgICAgdTMyICp2YWx1ZSlcXG4re1xcbitcXHRyZXR1cm4gb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyh0YzYsIGFkZHJlc3MsIG1tcywgdmFsdWUsIDEpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyk7XFxuK1xcbisvKipcXG4rICogb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXMgLSBmdW5jdGlvbiBmb3Igd3JpdGluZyBtdWx0aXBsZSBjb25zZWN1dGl2ZVxcbisgKiByZWdpc3RlcnMgZm9yIHRoZSBnaXZlbiBhZGRyZXNzLCBtZW1vcnkgbWFwIHNlbGVjdG9yIHBhaXIuXFxuKyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXFxuKyAqIEBhZGRyZXNzOiBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB0byBiZSB3cml0dGVuIGluIHRoZSBNQUMtUEhZLlxcbisgKiBAbW1zOiBtZW1vcnkgbWFwIFNlbGVjdG9yIGZvciB0aGUgZ2l2ZW4gcmVnaXN0ZXIuXFxuKyAqIEB2YWx1ZTogdmFsdWVzIHRvIGJlIHdyaXR0ZW4gZnJvbSB0aGUgc3RhcnRpbmcgcmVnaXN0ZXIgYWRkcmVzcyBAYWRkcmVzcy5cXG4rICogQGxlbmd0aDogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyB0byBiZSB3cml0dGVuIGZyb20gQGFkZHJlc3MuXFxuKyAqXFxuKyAqIE1heGltdW0gb2YgMTI4IGNvbnNlY3V0aXZlIHJlZ2lzdGVycyBjYW4gYmUgd3JpdHRlbiBzdGFydGluZyBhdCBAYWRkcmVzcy5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cXG4rICovXFxuK2ludCBvYV90YzZfd3JpdGVfcmVnaXN0ZXJzX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxcbitcXHRcXHRcXHQgICAgICAgdTMyIHZhbHVlW10sIHU4IGxlbmd0aClcXG4re1xcbitcXHR1MzIgbW1zX2FkZHIgPSAodTMyKW1tcyBcXHUwMDNjXFx1MDAzYyAxNiB8ICh1MzIpYWRkcmVzcztcXG4rXFxuK1xcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJzKHRjNiwgbW1zX2FkZHIsIHZhbHVlLCBsZW5ndGgpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKTtcXG4rXFxuKy8qKlxcbisgKiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zIC0gZnVuY3Rpb24gZm9yIHdyaXRpbmcgYSBNQUMtUEhZIHJlZ2lzdGVyXFxuKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbWVtb3J5IG1hcCBzZWxlY3Rvci5cXG4rICogQHRjNjogb2FfdGM2IHN0cnVjdC5cXG4rICogQGFkZHJlc3M6IHJlZ2lzdGVyIGFkZHJlc3Mgb2YgdGhlIE1BQy1QSFkgdG8gYmUgd3JpdHRlbi5cXG4rICogQG1tczogbWVtb3J5IG1hcCBzZWxlY3RvciBmb3IgdGhlIGdpdmVuIHJlZ2lzdGVyLlxcbisgKiBAdmFsdWU6IHZhbHVlIHRvIGJlIHdyaXR0ZW4gaW4gdGhlIEBhZGRyZXNzIHJlZ2lzdGVyIGFkZHJlc3Mgb2ZcXG4rICogdGhlIE1BQy1QSFkuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXFxuKyAqL1xcbitpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxcbitcXHRcXHRcXHQgICAgICB1MzIgdmFsdWUpXFxuK3tcXG4rXFx0cmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKHRjNiwgYWRkcmVzcywgbW1zLCBcXHUwMDI2dmFsdWUsIDEpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMpO1xcbitcXG4gLyoqXFxuICAqIG9hX3RjNl93cml0ZV9yZWdpc3RlcnMgLSBmdW5jdGlvbiBmb3Igd3JpdGluZyBtdWx0aXBsZSBjb25zZWN1dGl2ZSByZWdpc3RlcnMuXFxuICAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXFxuQEAgLTQ0NCw3ICs1NDksNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9tZGlvYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLFxcbiBcXHRcXHRcXHRcXHQgICAgIHZhbCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgb2FfdGM2X2dldF9waHlfYzQ1X21tcyhpbnQgZGV2bnVtKVxcbitzdGF0aWMgaW50IG9hX3RjNl9nZXRfcGh5X2M0NV9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBpbnQgZGV2bnVtKVxcbiB7XFxuIFxcdHN3aXRjaCAoZGV2bnVtKSB7XFxuIFxcdGNhc2UgTURJT19NTURfUENTOlxcbkBAIC00NTcsNiArNTYyLDggQEAgc3RhdGljIGludCBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKGludCBkZXZudW0pXFxuIFxcdFxcdHJldHVybiBPQV9UQzZfUEhZX0M0NV9BVVRPX05FR19NTVM1O1xcbiBcXHRjYXNlIE1ESU9fTU1EX1BPV0VSX1VOSVQ6XFxuIFxcdFxcdHJldHVybiBPQV9UQzZfUEhZX0M0NV9QT1dFUl9VTklUX01NUzY7XFxuK1xcdGNhc2UgTURJT19NTURfVkVORDE6XFxuK1xcdFxcdHJldHVybiB0YzYtXFx1MDAzZXZlbmQxX21tcztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXHR9XFxuQEAgLTQ2NiwxNCArNTczLDE0IEBAIHN0YXRpYyBpbnQgb2FfdGM2X21kaW9idXNfcmVhZF9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZudW0sXFxuIFxcdFxcdFxcdFxcdCAgIGludCByZWdudW0pXFxuIHtcXG4gXFx0c3RydWN0IG9hX3RjNiAqdGM2ID0gYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgbW1zLCByZXQ7XFxuIFxcdHUzMiByZWd2YWw7XFxuLVxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKGRldm51bSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRtbXMgPSBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKHRjNiwgZGV2bnVtKTtcXG4rXFx0aWYgKG1tcyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBtbXM7XFxuIFxcbi1cXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIChyZXQgXFx1MDAzY1xcdTAwM2MgMTYpIHwgcmVnbnVtLCBcXHUwMDI2cmVndmFsKTtcXG4rXFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHRjNiwgKHUxNilyZWdudW0sICh1MTYpbW1zLCBcXHUwMDI2cmVndmFsKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTQ4NCwxMyArNTkxLDEzIEBAIHN0YXRpYyBpbnQgb2FfdGM2X21kaW9idXNfd3JpdGVfYzQ1KHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgZGV2bnVtLFxcbiBcXHRcXHRcXHRcXHQgICAgaW50IHJlZ251bSwgdTE2IHZhbClcXG4ge1xcbiBcXHRzdHJ1Y3Qgb2FfdGM2ICp0YzYgPSBidXMtXFx1MDAzZXByaXY7XFxuLVxcdGludCByZXQ7XFxuK1xcdGludCBtbXM7XFxuIFxcbi1cXHRyZXQgPSBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKGRldm51bSk7XFxuLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRtbXMgPSBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKHRjNiwgZGV2bnVtKTtcXG4rXFx0aWYgKG1tcyBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBtbXM7XFxuIFxcbi1cXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgKHJldCBcXHUwMDNjXFx1MDAzYyAxNikgfCByZWdudW0sIHZhbCk7XFxuK1xcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHRjNiwgKHUxNilyZWdudW0sICh1MTYpbW1zLCB2YWwpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG9hX3RjNl9tZGlvYnVzX3JlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNilcXG5AQCAtNzE0LDYgKzgyMSw5IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKCh2YWx1ZSBcXHUwMDI2IFNUQVRVUzBfVFRTQ0FfTUFTSykgIT0gMClcXG4rXFx0XFx0b2FfdGM2X2V2ZW50c19oYW5kbGUodGM2LCB2YWx1ZSBcXHUwMDI2IFNUQVRVUzBfVFRTQ0FfTUFTSyk7XFxuK1xcbiBcXHQvKiBDbGVhciB0aGUgZXJyb3IgaW50ZXJydXB0cyBzdGF0dXMgKi9cXG4gXFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19TVEFUVVMwLCB2YWx1ZSk7XFxuIFxcdGlmIChyZXQpIHtcXG5AQCAtNzk2LDYgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9zdWJtaXRfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0ICAgIHRjNi1cXHUwMDNlcnhfc2tiLVxcdTAwM2VsZW4gXFx1MDAzZSBFVEhfRkNTX0xFTilcXG4gXFx0XFx0c2tiX3RyaW0odGM2LVxcdTAwM2VyeF9za2IsIHRjNi1cXHUwMDNlcnhfc2tiLVxcdTAwM2VsZW4gLSBFVEhfRkNTX0xFTik7XFxuIFxcbitcXHRvYV90YzZfdXBkYXRlX3RzX2luX3J4X3NrYih0YzYpO1xcbiBcXHR0YzYtXFx1MDAzZXJ4X3NrYi1cXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyh0YzYtXFx1MDAzZXJ4X3NrYiwgdGM2LVxcdTAwM2VuZXRkZXYpO1xcbiBcXHR0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfcGFja2V0cysrO1xcbiBcXHR0YzYtXFx1MDAzZW5ldGRldi1cXHUwMDNlc3RhdHMucnhfYnl0ZXMgKz0gdGM2LVxcdTAwM2VyeF9za2ItXFx1MDAzZWxlbjtcXG5AQCAtODEwLDI0ICs5MjEsMjkgQEAgc3RhdGljIHZvaWQgb2FfdGM2X3VwZGF0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCwgdTggbGVuZ3RoKVxcbiBcXHRtZW1jcHkoc2tiX3B1dCh0YzYtXFx1MDAzZXJ4X3NrYiwgbGVuZ3RoKSwgcGF5bG9hZCwgbGVuZ3RoKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBvYV90YzZfYWxsb2NhdGVfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcXG4rc3RhdGljIGludCBvYV90YzZfYWxsb2NhdGVfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGZvb3RlcilcXG4ge1xcbitcXHRzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fcnggKnNraTtcXG4rXFxuIFxcdHRjNi1cXHUwMDNlcnhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbih0YzYtXFx1MDAzZW5ldGRldiwgdGM2LVxcdTAwM2VuZXRkZXYtXFx1MDAzZW10dSArXFxuLVxcdFxcdFxcdFxcdFxcdFxcdEVUSF9ITEVOICsgRVRIX0ZDU19MRU4pO1xcbitcXHRcXHRcXHRcXHRcXHRcXHRFVEhfSExFTiArIEVUSF9GQ1NfTEVOICsgT0FfVEM2X1RTVEFNUF9TWik7XFxuIFxcdGlmICghdGM2LVxcdTAwM2VyeF9za2IpIHtcXG4gXFx0XFx0dGM2LVxcdTAwM2VuZXRkZXYtXFx1MDAzZXN0YXRzLnJ4X2Ryb3BwZWQrKztcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdH1cXG4gXFxuK1xcdHNraSA9IG9hX3RjNl90c2luZm9fcngodGM2LVxcdTAwM2VyeF9za2IpO1xcbitcXHRza2ktXFx1MDAzZXJ0c2EgPSBGSUVMRF9HRVQoT0FfVEM2X0RBVEFfRk9PVEVSX1JUU0FfVkFMSUQsIGZvb3Rlcik7XFxuK1xcdHNraS1cXHUwMDNlcnRzcCA9IEZJRUxEX0dFVChPQV9UQzZfREFUQV9GT09URVJfUlRTUF9WQUxJRCwgZm9vdGVyKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfY29tcGxldGVfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcXG4tXFx0XFx0XFx0XFx0XFx0IHUxNiBzaXplKVxcbitcXHRcXHRcXHRcXHRcXHQgdTE2IHNpemUsIHUzMiBmb290ZXIpXFxuIHtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHJldCA9IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2IodGM2KTtcXG4rXFx0cmV0ID0gb2FfdGM2X2FsbG9jYXRlX3J4X3NrYih0YzYsIGZvb3Rlcik7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC04MzgsMTEgKzk1NCwxMSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX2NvbXBsZXRlX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX3N0YXJ0KHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplKVxcbitzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX3N0YXJ0KHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplLCB1MzIgZm9vdGVyKVxcbiB7XFxuIFxcdGludCByZXQ7XFxuIFxcbi1cXHRyZXQgPSBvYV90YzZfYWxsb2NhdGVfcnhfc2tiKHRjNik7XFxuK1xcdHJldCA9IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2IodGM2LCBmb290ZXIpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtODg3LDcgKzEwMDMsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcXG4gXFx0XFx0c2l6ZSA9IGVuZF9ieXRlX29mZnNldCArIDEgLSBzdGFydF9ieXRlX29mZnNldDtcXG4gXFx0XFx0cmV0dXJuIG9hX3RjNl9wcmNzX2NvbXBsZXRlX3J4X2ZyYW1lKHRjNixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2ZGF0YVtzdGFydF9ieXRlX29mZnNldF0sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZSwgZm9vdGVyKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmx5IHJ4IGZyYW1lIHN0YXJ0ICovXFxuQEAgLTg5NSw3ICsxMDExLDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXFxuIFxcdFxcdHNpemUgPSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFIC0gc3RhcnRfYnl0ZV9vZmZzZXQ7XFxuIFxcdFxcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydCh0YzYsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmRhdGFbc3RhcnRfYnl0ZV9vZmZzZXRdLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgIHNpemUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHNpemUsIGZvb3Rlcik7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25seSByeCBmcmFtZSBlbmQgKi9cXG5AQCAtOTIwLDcgKzEwMzYsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcXG4gXFx0XFx0c2l6ZSA9IE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUgLSBzdGFydF9ieXRlX29mZnNldDtcXG4gXFx0XFx0cmV0dXJuIG9hX3RjNl9wcmNzX3J4X2ZyYW1lX3N0YXJ0KHRjNixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBcXHUwMDI2ZGF0YVtzdGFydF9ieXRlX29mZnNldF0sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZSk7XFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc2l6ZSwgZm9vdGVyKTtcXG4gXFx0fVxcbiBcXG4gXFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmdvaW5nIHJ4IGZyYW1lIGRhdGEgKi9cXG5AQCAtOTc0LDEzICsxMDkwLDE1IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcXG4gfVxcbiBcXG4gc3RhdGljIF9fYmUzMiBvYV90YzZfcHJlcGFyZV9kYXRhX2hlYWRlcihib29sIGRhdGFfdmFsaWQsIGJvb2wgc3RhcnRfdmFsaWQsXFxuLVxcdFxcdFxcdFxcdFxcdCBib29sIGVuZF92YWxpZCwgdTggZW5kX2J5dGVfb2Zmc2V0KVxcbitcXHRcXHRcXHRcXHRcXHQgYm9vbCBlbmRfdmFsaWQsIHU4IGVuZF9ieXRlX29mZnNldCxcXG4rXFx0XFx0XFx0XFx0XFx0IHU4IHRzYylcXG4ge1xcbiBcXHR1MzIgaGVhZGVyID0gRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfREFUQV9OT1RfQ1RSTCxcXG4gXFx0XFx0XFx0XFx0T0FfVEM2X0RBVEFfSEVBREVSKSB8XFxuIFxcdFxcdCAgICAgRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRCwgZGF0YV92YWxpZCkgfFxcbiBcXHRcXHQgICAgIEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1ZBTElELCBzdGFydF92YWxpZCkgfFxcbiBcXHRcXHQgICAgIEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX0VORF9WQUxJRCwgZW5kX3ZhbGlkKSB8XFxuK1xcdFxcdCAgICAgRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfVFNDX09GRlNFVCwgdHNjKSB8XFxuIFxcdFxcdCAgICAgRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfRU5EX0JZVEVfT0ZGU0VULFxcbiBcXHRcXHRcXHRcXHRlbmRfYnl0ZV9vZmZzZXQpO1xcbiBcXG5AQCAtOTk5LDYgKzExMTcsNyBAQCBzdGF0aWMgdm9pZCBvYV90YzZfYWRkX3R4X3NrYl90b19zcGlfYnVmKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0ZW51bSBvYV90YzZfZGF0YV9zdGFydF92YWxpZF9pbmZvIHN0YXJ0X3ZhbGlkO1xcbiBcXHR1OCBlbmRfYnl0ZV9vZmZzZXQgPSAwO1xcbiBcXHR1MTYgbGVuZ3RoX3RvX2NvcHk7XFxuK1xcdHU4IHRzYyA9IDA7XFxuIFxcbiBcXHQvKiBJbml0aWFsIHZhbHVlIGlzIGFzc2lnbmVkIGhlcmUgdG8gYXZvaWQgbW9yZSB0aGFuIDgwIGNoYXJhY3RlcnMgaW5cXG4gXFx0ICogdGhlIGRlY2xhcmF0aW9uIHBsYWNlLlxcbkBAIC0xMDA4LDggKzExMjcsMTAgQEAgc3RhdGljIHZvaWQgb2FfdGM2X2FkZF90eF9za2JfdG9fc3BpX2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIFxcdC8qIFNldCBzdGFydCB2YWxpZCBpZiB0aGUgY3VycmVudCB0eCBjaHVuayBjb250YWlucyB0aGUgc3RhcnQgb2YgdGhlIHR4XFxuIFxcdCAqIGV0aGVybmV0IGZyYW1lLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCF0YzYtXFx1MDAzZXR4X3NrYl9vZmZzZXQpXFxuK1xcdGlmICghdGM2LVxcdTAwM2V0eF9za2Jfb2Zmc2V0KSB7XFxuIFxcdFxcdHN0YXJ0X3ZhbGlkID0gT0FfVEM2X0RBVEFfU1RBUlRfVkFMSUQ7XFxuK1xcdFxcdHRzYyA9IG9hX3RjNl90c2luZm9fdHgodGM2LVxcdTAwM2VvbmdvaW5nX3R4X3NrYiktXFx1MDAzZXRzYztcXG4rXFx0fVxcbiBcXG4gXFx0LyogSWYgdGhlIHJlbWFpbmluZyB0eCBza2IgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgY2h1bmsgcGF5bG9hZCBzaXplIG9mXFxuIFxcdCAqIDY0IGJ5dGVzIHRoZW4gY29weSBvbmx5IDY0IGJ5dGVzIGFuZCBsZWF2ZSB0aGUgb25nb2luZyB0eCBza2IgZm9yXFxuQEAgLTEwMzAsMTIgKzExNTEsMTggQEAgc3RhdGljIHZvaWQgb2FfdGM2X2FkZF90eF9za2JfdG9fc3BpX2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuIFxcdFxcdHRjNi1cXHUwMDNldHhfc2tiX29mZnNldCA9IDA7XFxuIFxcdFxcdHRjNi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9ieXRlcyArPSB0YzYtXFx1MDAzZW9uZ29pbmdfdHhfc2tiLVxcdTAwM2VsZW47XFxuIFxcdFxcdHRjNi1cXHUwMDNlbmV0ZGV2LVxcdTAwM2VzdGF0cy50eF9wYWNrZXRzKys7XFxuLVxcdFxcdGtmcmVlX3NrYih0YzYtXFx1MDAzZW9uZ29pbmdfdHhfc2tiKTtcXG4rXFxuK1xcdFxcdC8qIEZyZWUgdGhlIG9uZXMgdGhhdCBhcmUgbm90IHNhdmVkIGZvciBsYXRlciBwcm9jZXNzaW5nLFxcbitcXHRcXHQgKiBsaWtlIHRpbWVzdGFtcGluZy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICghKHNrYl9zaGluZm8odGM2LVxcdTAwM2VvbmdvaW5nX3R4X3NrYiktXFx1MDAzZXR4X2ZsYWdzIFxcdTAwMjZcXG4rXFx0XFx0ICAgIFNLQlRYX0lOX1BST0dSRVNTKSlcXG4rXFx0XFx0XFx0a2ZyZWVfc2tiKHRjNi1cXHUwMDNlb25nb2luZ190eF9za2IpO1xcbiBcXHRcXHR0YzYtXFx1MDAzZW9uZ29pbmdfdHhfc2tiID0gTlVMTDtcXG4gXFx0fVxcbiBcXG4gXFx0KnR4X2J1ZiA9IG9hX3RjNl9wcmVwYXJlX2RhdGFfaGVhZGVyKE9BX1RDNl9EQVRBX1ZBTElELCBzdGFydF92YWxpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBlbmRfdmFsaWQsIGVuZF9ieXRlX29mZnNldCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgZW5kX3ZhbGlkLCBlbmRfYnl0ZV9vZmZzZXQsIHRzYyk7XFxuIFxcdHRjNi1cXHUwMDNlc3BpX2RhdGFfdHhfYnVmX29mZnNldCArPSBPQV9UQzZfQ0hVTktfU0laRTtcXG4gfVxcbiBcXG5AQCAtMTA1Myw2ICsxMTgwLDggQEAgc3RhdGljIHUxNiBvYV90YzZfcHJlcGFyZV9zcGlfdHhfYnVmX2Zvcl90eF9za2JzKHN0cnVjdCBvYV90YzYgKnRjNilcXG4gXFx0XFx0XFx0dGM2LVxcdTAwM2VvbmdvaW5nX3R4X3NrYiA9IHRjNi1cXHUwMDNld2FpdGluZ190eF9za2I7XFxuIFxcdFxcdFxcdHRjNi1cXHUwMDNld2FpdGluZ190eF9za2IgPSBOVUxMO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuK1xcdFxcdFxcdG9hX3RjNl9kZWZlcl9mb3JfaHd0c3RhbXAodGM2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIHRjNi1cXHUwMDNlb25nb2luZ190eF9za2IpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmICghdGM2LVxcdTAwM2VvbmdvaW5nX3R4X3NrYilcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTEwNjksNyArMTE5OCw3IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9hZGRfZW1wdHlfY2h1bmtzX3RvX3NwaV9idWYoc3RydWN0IG9hX3RjNiAqdGM2LFxcbiBcXG4gXFx0aGVhZGVyID0gb2FfdGM2X3ByZXBhcmVfZGF0YV9oZWFkZXIoT0FfVEM2X0RBVEFfSU5WQUxJRCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIE9BX1RDNl9EQVRBX1NUQVJUX0lOVkFMSUQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBPQV9UQzZfREFUQV9FTkRfSU5WQUxJRCwgMCk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBPQV9UQzZfREFUQV9FTkRfSU5WQUxJRCwgMCwgZmFsc2UpO1xcbiBcXG4gXFx0d2hpbGUgKG5lZWRlZF9lbXB0eV9jaHVua3MtLSkge1xcbiBcXHRcXHRfX2JlMzIgKnR4X2J1ZiA9IHRjNi1cXHUwMDNlc3BpX2RhdGFfdHhfYnVmICtcXG5AQCAtMTI2MSw2ICsxMzkwLDcgQEAgbmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXHRcXHRyZXR1cm4gTkVUREVWX1RYX09LO1xcbiBcXHR9XFxuIFxcbitcXHRvYV90YzZfdHNpbmZvX3R4KHNrYiktXFx1MDAzZXRzYyA9IDA7XFxuIFxcdHNwaW5fbG9ja19iaChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuIFxcdHRjNi1cXHUwMDNld2FpdGluZ190eF9za2IgPSBza2I7XFxuIFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0YzYtXFx1MDAzZXR4X3NrYl9sb2NrKTtcXG5AQCAtMTI5NCw2ICsxNDI0LDkgQEAgc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcXHUwMDI2c3BpLVxcdTAwM2VkZXYpO1xcbiBcXHRtdXRleF9pbml0KFxcdTAwMjZ0YzYtXFx1MDAzZXNwaV9jdHJsX2xvY2spO1xcbiBcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dGM2LVxcdTAwM2V0eF9za2JfbG9jayk7XFxuK1xcdHRjNi1cXHUwMDNldmVuZDFfbW1zID0gLUVPUE5PVFNVUFA7XFxuK1xcdHRjNi1cXHUwMDNldHhfdHNfaWR4ID0gT0FfVEM2X1RUU0NBX1JFR19JRDtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnRjNi1cXHUwMDNldHhfdHNfc2tiX3EpO1xcbiBcXG4gXFx0LyogU2V0IHRoZSBTUEkgY29udHJvbGxlciB0byBwdW1wIGF0IHJlYWx0aW1lIHByaW9yaXR5ICovXFxuIFxcdHRjNi1cXHUwMDNlc3BpLVxcdTAwM2VydCA9IHRydWU7XFxuQEAgLTEzNTksNiArMTQ5MiwxMiBAQCBzdHJ1Y3Qgb2FfdGM2ICpvYV90YzZfaW5pdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRcXHRnb3RvIHBoeV9leGl0O1xcbiBcXHR9XFxuIFxcbitcXHRyZXQgPSBvYV90YzZfdXBkYXRlX3N0YW5kYXJkX2NhcGFiaWxpdHkodGM2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlYWQgY2FwYWJpbGl0eVxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gcGh5X2V4aXQ7XFxuK1xcdH1cXG4rXFxuIFxcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXFx1MDAyNnRjNi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIHRjNi1cXHUwMDNlc3BpLVxcdTAwM2VpcnEsXFxuIFxcdFxcdFxcdFxcdFxcdG9hX3RjNl9tYWNwaHlfaXNyLFxcbiBcXHRcXHRcXHRcXHRcXHRvYV90YzZfbWFjcGh5X3RocmVhZGVkX2lycSxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfcHRwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wY2RlNTU0NWVlMjdhMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2X3B0cC5jXFxuQEAgLTAsMCArMSw3MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcXG4rLypcXG4rICogU3VwcG9ydCBmb3IgaGFyZHdhcmUgdGltZXN0YW1waW5nIGZlYXR1cmUgZm9yIE9QRU4gQWxsaWFuY2VcXG4rICogMTBCQVNF4oCRVDF4IE1BQ+KAkVBIWSBTZXJpYWwgSW50ZXJmYWNlIGZyYW1ld29ya1xcbisgKlxcbisgKiBBdXRob3I6IFNlbHZhIFJhamFnb3BhbCBcXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ocnRpbWVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycWRvbWFpbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeWxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaS9zcGkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29hX3RjNi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0X3RzdGFtcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGltZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJvYV90YzZfc3RkX2RlZi5oXFxcIlxcbitcXG4rLyoqXFxuKyAqIG9hX3RjNl9wdHBfcmVnaXN0ZXIgLSBSZWdpc3RlcnMgY2xvY2sgcmVsYXRlZCBjYWxsYmFja3NcXG4rICogQHRjNjogb2FfdGM2IHN0cnVjdC5cXG4rICogQGluZm86IERlc2NyaWJlcyBhIFBUUCBoYXJkd2FyZSBjbG9ja1xcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogVmVuZG9ycyBhcmUgZXhwZWN0ZWQgdG8gc2V0IHRoZSBoYXJkd2FyZSB0aW1lc3RhbXBcXG4rICogcmVsYXRlZCBjYWxsYmFja3MgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cXG4rICpcXG4rICovXFxuK2ludCBvYV90YzZfcHRwX3JlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvKVxcbit7XFxuK1xcdC8qIE5vdCBzdXBwb3J0aW5nIGhhcmR3YXJlIHRpbWVzdGFtcCBpc24ndCBhbiBlcnJvciAqL1xcbitcXHRpZiAoIXRjNi1cXHUwMDNlaHdfdHN0YW1wX3N1cHBvcnRlZClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRzbnByaW50ZihpbmZvLVxcdTAwM2VuYW1lLCBzaXplb2YoaW5mby1cXHUwMDNlbmFtZSksIFxcXCIlc1xcXCIsXFxuK1xcdFxcdCBcXFwiT0EgVEM2IFBUUCBjbG9ja1xcXCIpO1xcbitcXHR0YzYtXFx1MDAzZXB0cF9jbG9jayA9IHB0cF9jbG9ja19yZWdpc3RlcihpbmZvLCBcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldik7XFxuK1xcdGlmIChJU19FUlIodGM2LVxcdTAwM2VwdHBfY2xvY2spKSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnRjNi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJSZWdpc3RyYXRpb24gb2YgJXMgZmFpbGVkXFxcIixcXG4rXFx0XFx0XFx0aW5mby1cXHUwMDNlbmFtZSk7XFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHR9XFxuK1xcdGRldl9pbmZvKFxcdTAwMjZ0YzYtXFx1MDAzZXNwaS1cXHUwMDNlZGV2LCBcXFwiJXMgcmVnaXN0ZXJlZC4gaW5kZXggJWRcXFwiLCBpbmZvLVxcdTAwM2VuYW1lLFxcbitcXHRcXHQgcHRwX2Nsb2NrX2luZGV4KHRjNi1cXHUwMDNlcHRwX2Nsb2NrKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9wdHBfcmVnaXN0ZXIpO1xcbitcXG4rLyoqXFxuKyAqIG9hX3RjNl9wdHBfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXJzIGNsb2NrIHJlbGF0ZWQgY2FsbGJhY2tzXFxuKyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXFxuKyAqL1xcbit2b2lkIG9hX3RjNl9wdHBfdW5yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXFxuK3tcXG4rXFx0aWYgKHRjNi1cXHUwMDNlcHRwX2Nsb2NrKVxcbitcXHRcXHRwdHBfY2xvY2tfdW5yZWdpc3Rlcih0YzYtXFx1MDAzZXB0cF9jbG9jayk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3B0cF91bnJlZ2lzdGVyKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiT1BFTiBBbGxpYW5jZSAxMEJBU0XigJFUMXggTUFD4oCRUEhZIFNlcmlhbCBJbnRlcmZhY2UgTGliXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIlNlbHZhIFJhamFnb3BhbCBcXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfc3RkX2RlZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9zdGRfZGVmLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4zNzgxNTAzYmU3ZjU2Mlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2X3N0ZF9kZWYuaFxcbkBAIC0wLDAgKzEsMTkxIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqL1xcbisvKlxcbisgKiBSZWdpc3RlciBhbmQgZHJpdmVyIHJlbGF0ZWQgZGVmaW5pdGlvbnMgdG8gc3VwcG9ydFxcbisgKiBPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBmcmFtZXdvcmsuXFxuKyAqXFxuKyAqIEF1dGhvcjogU2VsdmEgUmFqYWdvcGFsIFxcdTAwM2NzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb21cXHUwMDNlXFxuKyAqL1xcbitcXG4rI2lmbmRlZiBPQV9UQzZfU1REX0RFRl9IXFxuKyNkZWZpbmUgT0FfVEM2X1NURF9ERUZfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldF90c3RhbXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpL3NwaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd2FpdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuK1xcbisvKiBPUEVOIEFsbGlhbmNlIFRDNiByZWdpc3RlcnMgKi9cXG4rLyogU3RhbmRhcmQgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyICovXFxuKyNkZWZpbmUgT0FfVEM2X1JFR19TVERDQVBcXHRcXHRcXHQweDAwMDJcXG4rI2RlZmluZSBTVERDQVBfRElSRUNUX1BIWV9SRUdfQUNDRVNTXFx0XFx0QklUKDgpXFxuKyNkZWZpbmUgU1REQ0FQX0ZSQU1FX1RJTUVTVEFNUF9DQVBBQklMSVRZXFx0QklUKDYpXFxuK1xcbisvKiBSZXNldCBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi9cXG4rI2RlZmluZSBPQV9UQzZfUkVHX1JFU0VUXFx0XFx0XFx0MHgwMDAzXFxuKyNkZWZpbmUgUkVTRVRfU1dSRVNFVFxcdFxcdFxcdFxcdEJJVCgwKVxcbitcXG4rLyogQ29uZmlndXJhdGlvbiBSZWdpc3RlciAjMCAqL1xcbisjZGVmaW5lIE9BX1RDNl9SRUdfQ09ORklHMFxcdFxcdFxcdDB4MDAwNFxcbisjZGVmaW5lIENPTkZJRzBfU1lOQ1xcdFxcdFxcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSBDT05GSUcwX1pBUkZFX0VOQUJMRVxcdFxcdFxcdEJJVCgxMilcXG4rI2RlZmluZSBDT05GSUcwX0ZUU0VfRU5BQkxFXFx0XFx0XFx0QklUKDcpXFxuKyNkZWZpbmUgQ09ORklHMF9GVFNTXzY0QklUX1RTVEFNUFxcdFxcdEJJVCg2KVxcbitcXG4rLyogU3RhdHVzIFJlZ2lzdGVyICMwICovXFxuKyNkZWZpbmUgT0FfVEM2X1JFR19TVEFUVVMwXFx0XFx0XFx0MHgwMDA4XFxuKyNkZWZpbmUgU1RBVFVTMF9UVFNDQUNcXHRcXHRcXHRcXHRCSVQoMTApXFxuKyNkZWZpbmUgU1RBVFVTMF9UVFNDQUJcXHRcXHRcXHRcXHRCSVQoOSlcXG4rI2RlZmluZSBTVEFUVVMwX1RUU0NBQVxcdFxcdFxcdFxcdEJJVCg4KVxcbisjZGVmaW5lIFNUQVRVUzBfVFRTQ0FfTUFTS1xcdFxcdEdFTk1BU0soMTAsIDgpXFxuKyNkZWZpbmUgU1RBVFVTMF9SRVNFVENcXHRcXHRcXHRcXHRCSVQoNilcXG4rI2RlZmluZSBTVEFUVVMwX0hFQURFUl9FUlJPUlxcdFxcdFxcdEJJVCg1KVxcbisjZGVmaW5lIFNUQVRVUzBfTE9TU19PRl9GUkFNRV9FUlJPUlxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFNUQVRVUzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUk9SXFx0QklUKDMpXFxuKyNkZWZpbmUgU1RBVFVTMF9UWF9QUk9UT0NPTF9FUlJPUlxcdFxcdEJJVCgwKVxcbitcXG4rLyogQnVmZmVyIFN0YXR1cyBSZWdpc3RlciAqL1xcbisjZGVmaW5lIE9BX1RDNl9SRUdfQlVGRkVSX1NUQVRVU1xcdFxcdDB4MDAwQlxcbisjZGVmaW5lIEJVRkZFUl9TVEFUVVNfVFhfQ1JFRElUU19BVkFJTEFCTEVcXHRHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIEJVRkZFUl9TVEFUVVNfUlhfQ0hVTktTX0FWQUlMQUJMRVxcdEdFTk1BU0soNywgMClcXG4rXFxuKy8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICMwICovXFxuKyNkZWZpbmUgT0FfVEM2X1JFR19JTlRfTUFTSzBcXHRcXHRcXHQweDAwMENcXG4rI2RlZmluZSBJTlRfTUFTSzBfVFRTQ0FfTUFTS1xcdFxcdFxcdEdFTk1BU0soMTAsIDgpXFxuKyNkZWZpbmUgSU5UX01BU0swX0hFQURFUl9FUlJfTUFTS1xcdFxcdEJJVCg1KVxcbisjZGVmaW5lIElOVF9NQVNLMF9MT1NTX09GX0ZSQU1FX0VSUl9NQVNLXFx0QklUKDQpXFxuKyNkZWZpbmUgSU5UX01BU0swX1JYX0JVRkZFUl9PVkVSRkxPV19FUlJfTUFTS1xcdEJJVCgzKVxcbisjZGVmaW5lIElOVF9NQVNLMF9UWF9QUk9UT0NPTF9FUlJfTUFTS1xcdFxcdEJJVCgwKVxcbisjZGVmaW5lIElOVF9NQVNLMF9BTExfSU5URVJSVVBUU1xcdFxcdChHRU5NQVNLKDUsIDApIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgR0VOTUFTSygxMiwgNykpXFxuK1xcbisvKiBQSFkgQ2xhdXNlIDIyIHJlZ2lzdGVycyBiYXNlIGFkZHJlc3MgYW5kIG1hc2sgKi9cXG4rI2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9CQVNFXFx0XFx0MHhGRjAwXFxuKyNkZWZpbmUgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfTUFTS1xcdFxcdDB4MUZcXG4rXFxuKy8qIFR4IHRpbWVzdGFtcCBjYXB0dXJlIHJlZ2lzdGVyIEEgKGhpZ2gpICovXFxuKyNkZWZpbmUgT0FfVEM2X1JFR19UVFNDQV9ISUdIXFx0XFx0XFx0KDB4MTApXFxuK1xcbisvKiBDb250cm9sIGNvbW1hbmQgaGVhZGVyICovXFxuKyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0RBVEFfTk9UX0NUUkxcXHRCSVQoMzEpXFxuKyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1dSSVRFX05PVF9SRUFEXFx0QklUKDI5KVxcbisjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9NRU1fTUFQX1NFTEVDVE9SXFx0R0VOTUFTSygyNywgMjQpXFxuKyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0FERFJcXHRcXHRcXHRHRU5NQVNLKDIzLCA4KVxcbisjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9MRU5HVEhcXHRcXHRHRU5NQVNLKDcsIDEpXFxuKyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1BBUklUWVxcdFxcdEJJVCgwKVxcbitcXG4rLyogRGF0YSBoZWFkZXIgKi9cXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9OT1RfQ1RSTFxcdEJJVCgzMSlcXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9WQUxJRFxcdFxcdEJJVCgyMSlcXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfVkFMSURcXHRcXHRCSVQoMjApXFxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1dPUkRfT0ZGU0VUXFx0R0VOTUFTSygxOSwgMTYpXFxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0VORF9WQUxJRFxcdFxcdEJJVCgxNClcXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfRU5EX0JZVEVfT0ZGU0VUXFx0R0VOTUFTSygxMywgOClcXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfVFNDX09GRlNFVFxcdFxcdEdFTk1BU0soNywgNilcXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfUEFSSVRZXFx0XFx0QklUKDApXFxuK1xcbisvKiBEYXRhIGZvb3RlciAqL1xcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FWFRFTkRFRF9TVFNcXHRcXHRCSVQoMzEpXFxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JYRF9IRUFERVJfQkFEXFx0QklUKDMwKVxcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9DT05GSUdfU1lOQ1xcdFxcdEJJVCgyOSlcXG4rI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfUlhfQ0hVTktTXFx0XFx0R0VOTUFTSygyOCwgMjQpXFxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0RBVEFfVkFMSURcXHRcXHRCSVQoMjEpXFxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1ZBTElEXFx0XFx0QklUKDIwKVxcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9TVEFSVF9XT1JEX09GRlNFVFxcdEdFTk1BU0soMTksIDE2KVxcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfVkFMSURcXHRcXHRCSVQoMTQpXFxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JUU0FfVkFMSURcXHRcXHRCSVQoNylcXG4rI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfUlRTUF9WQUxJRFxcdFxcdEJJVCg2KVxcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfQllURV9PRkZTRVRcXHRHRU5NQVNLKDEzLCA4KVxcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9UWF9DUkVESVRTXFx0XFx0R0VOTUFTSyg1LCAxKVxcbitcXG4rI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfU0laRVxcdFxcdFxcdDRcXG4rI2RlZmluZSBPQV9UQzZfQ1RSTF9SRUdfVkFMVUVfU0laRVxcdFxcdDRcXG4rI2RlZmluZSBPQV9UQzZfQ1RSTF9JR05PUkVEX1NJWkVcXHRcXHQ0XFxuKyNkZWZpbmUgT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSU1xcdFxcdDEyOFxcbisjZGVmaW5lIE9BX1RDNl9DVFJMX1NQSV9CVUZfU0laRVxcdFxcdChPQV9UQzZfQ1RSTF9IRUFERVJfU0laRSArXFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHQoT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSUyAqXFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRPQV9UQzZfQ1RSTF9SRUdfVkFMVUVfU0laRSkgK1xcXFxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0T0FfVEM2X0NUUkxfSUdOT1JFRF9TSVpFKVxcbisjZGVmaW5lIE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkVcXHRcXHQ2NFxcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9TSVpFXFx0XFx0XFx0NFxcbisjZGVmaW5lIE9BX1RDNl9DSFVOS19TSVpFXFx0XFx0XFx0KE9BX1RDNl9EQVRBX0hFQURFUl9TSVpFICtcXFxcXFxuK1xcdFxcdFxcdFxcdFxcdFxcdE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUpXFxuKyNkZWZpbmUgT0FfVEM2X01BWF9UWF9DSFVOS1NcXHRcXHRcXHQ0OFxcbisjZGVmaW5lIE9BX1RDNl9TUElfREFUQV9CVUZfU0laRVxcdFxcdChPQV9UQzZfTUFYX1RYX0NIVU5LUyAqXFxcXFxcbitcXHRcXHRcXHRcXHRcXHRcXHRPQV9UQzZfQ0hVTktfU0laRSlcXG4rI2RlZmluZSBTVEFUVVMwX1JFU0VUQ19QT0xMX0RFTEFZXFx0XFx0MTAwMFxcbisjZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfVElNRU9VVFxcdFxcdDEwMDAwMDBcXG4rXFxuKyNkZWZpbmUgT0FfVEM2X1RTVEFNUF9TWlxcdFxcdFxcdDhcXG4rXFxuKyNkZWZpbmUgT0FfVEM2X1RUU0NBX1JFR19JRFxcdFxcdFxcdDFcXG4rI2RlZmluZSBPQV9UQzZfVFRTQ0JfUkVHX0lEXFx0XFx0XFx0MlxcbisjZGVmaW5lIE9BX1RDNl9UVFNDQ19SRUdfSURcXHRcXHRcXHQzXFxuK1xcbisvKiBJbnRlcm5hbCBzdHJ1Y3R1cmUgZm9yIE1BQy1QSFkgZHJpdmVycyAqL1xcbitzdHJ1Y3Qgb2FfdGM2IHtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4rXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcXG4rXFx0c3RydWN0IG1paV9idXMgKm1kaW9idXM7XFxuK1xcdHN0cnVjdCBzcGlfZGV2aWNlICpzcGk7XFxuK1xcdHN0cnVjdCBtdXRleCBzcGlfY3RybF9sb2NrOyAvKiBQcm90ZWN0cyBzcGkgY29udHJvbCB0cmFuc2ZlciAqL1xcbitcXHRzcGlubG9ja190IHR4X3NrYl9sb2NrOyAvKiBQcm90ZWN0cyB0eCBza2IgaGFuZGxpbmcgKi9cXG4rXFx0dm9pZCAqc3BpX2N0cmxfdHhfYnVmO1xcbitcXHR2b2lkICpzcGlfY3RybF9yeF9idWY7XFxuK1xcdHZvaWQgKnNwaV9kYXRhX3R4X2J1ZjtcXG4rXFx0dm9pZCAqc3BpX2RhdGFfcnhfYnVmO1xcbitcXHRzdHJ1Y3Qgc2tfYnVmZiAqb25nb2luZ190eF9za2I7XFxuK1xcdHN0cnVjdCBza19idWZmICp3YWl0aW5nX3R4X3NrYjtcXG4rXFx0c3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjtcXG4rXFx0dTE2IHR4X3NrYl9vZmZzZXQ7XFxuK1xcdHUxNiBzcGlfZGF0YV90eF9idWZfb2Zmc2V0O1xcbitcXHR1MTYgdHhfY3JlZGl0cztcXG4rXFx0dTggcnhfY2h1bmtzX2F2YWlsYWJsZTtcXG4rXFx0Ym9vbCByeF9idWZfb3ZlcmZsb3c7XFxuK1xcdGJvb2wgaW50X2ZsYWc7XFxuK1xcdGJvb2wgZGlzYWJsZV90cmFmZmljO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX2Nsb2NrX2luZm87XFxuK1xcdHN0cnVjdCBod3RzdGFtcF9jb25maWcgdHNfY29uZmlnO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHR4X3RzX3NrYl9xO1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XFxuK1xcdGJvb2wgaHdfdHN0YW1wX3N1cHBvcnRlZDtcXG4rXFx0Ym9vbCBod190c3RhbXBfZW5hYmxlZDtcXG4rXFx0dTMyIHR4X2h3dHN0YW1wX3BrdHM7XFxuK1xcdHUzMiB0eF9od3RzdGFtcF9sb3N0O1xcbitcXHR1MzIgdHhfaHd0c3RhbXBfZXJyO1xcbitcXHRpbnQgdmVuZDFfbW1zO1xcbitcXHR1OCB0eF90c19pZHg7XFxuK307XFxuK1xcbitlbnVtIG9hX3RjNl9oZWFkZXJfdHlwZSB7XFxuK1xcdE9BX1RDNl9DVFJMX0hFQURFUixcXG4rXFx0T0FfVEM2X0RBVEFfSEVBREVSLFxcbit9O1xcbitcXG4rZW51bSBvYV90YzZfcmVnaXN0ZXJfb3Age1xcbitcXHRPQV9UQzZfQ1RSTF9SRUdfUkVBRCA9IDAsXFxuK1xcdE9BX1RDNl9DVFJMX1JFR19XUklURSA9IDEsXFxuK307XFxuK1xcbitlbnVtIG9hX3RjNl9kYXRhX3ZhbGlkX2luZm8ge1xcbitcXHRPQV9UQzZfREFUQV9JTlZBTElELFxcbitcXHRPQV9UQzZfREFUQV9WQUxJRCxcXG4rfTtcXG4rXFxuK2VudW0gb2FfdGM2X2RhdGFfc3RhcnRfdmFsaWRfaW5mbyB7XFxuK1xcdE9BX1RDNl9EQVRBX1NUQVJUX0lOVkFMSUQsXFxuK1xcdE9BX1RDNl9EQVRBX1NUQVJUX1ZBTElELFxcbit9O1xcbitcXG4rZW51bSBvYV90YzZfZGF0YV9lbmRfdmFsaWRfaW5mbyB7XFxuK1xcdE9BX1RDNl9EQVRBX0VORF9JTlZBTElELFxcbitcXHRPQV9UQzZfREFUQV9FTkRfVkFMSUQsXFxuK307XFxuK1xcbitpbnQgb2FfdGM2X3RzdGFtcF9pb2N0bChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpO1xcbitcXG4rI2VuZGlmIC8qIE9BX1RDNl9TVERfREVGX0ggKi9cXG4rXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfdHN0YW1wLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2X3RzdGFtcC5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZjgwZjFhNDkxNmEzZTBcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl90c3RhbXAuY1xcbkBAIC0wLDAgKzEsMjA1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbisvKlxcbisgKiBPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBmcmFtZXdvcmtcXG4rICpcXG4rICogQXV0aG9yOiBTZWx2YSBSYWphZ29wYWwgXFx1MDAzY3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbVxcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvcG9sbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vYV90YzYuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJvYV90YzZfc3RkX2RlZi5oXFxcIlxcbitcXG4rc3RhdGljIGludCBvYV90YzZfc2V0X2h3dHN0YW1wX3NldHRpbmdzKHN0cnVjdCBvYV90YzYgKnRjNilcXG4re1xcbitcXHR1MzIgY2ZnMCwgaXJxbSwgc3RhdHVzMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19DT05GSUcwLCBcXHUwMDI2Y2ZnMCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byByZWFkIENGRzAgcmVnaXN0ZXJcXFxcblxcXCIpO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0lOVF9NQVNLMCwgXFx1MDAyNmlycW0pO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnRjNi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gcmVhZCBJUlFNIHJlZ2lzdGVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEhhcmR3YXJlIHRpbWVzdGFtcCBmZWF0dXJlIHN1cHBvcnRzIDY0LWJpdCB0aW1lc3RhbXAgb25seSAqL1xcbitcXHRpZiAodGM2LVxcdTAwM2V0c19jb25maWcudHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTiB8fFxcbitcXHQgICAgdGM2LVxcdTAwM2V0c19jb25maWcucnhfZmlsdGVyID09IEhXVFNUQU1QX0ZJTFRFUl9BTEwpXFxuK1xcdFxcdGNmZzAgfD0gKENPTkZJRzBfRlRTRV9FTkFCTEUgfFxcbitcXHRcXHRcXHQgQ09ORklHMF9GVFNTXzY0QklUX1RTVEFNUCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Y2ZnMCBcXHUwMDI2PSB+Q09ORklHMF9GVFNFX0VOQUJMRTtcXG4rXFxuK1xcdGlmICh0YzYtXFx1MDAzZXRzX2NvbmZpZy50eF90eXBlID09IEhXVFNUQU1QX1RYX09OKVxcbitcXHRcXHRpcnFtIFxcdTAwMjY9IH5JTlRfTUFTSzBfVFRTQ0FfTUFTSztcXG4rXFx0ZWxzZVxcbitcXHRcXHRpcnFtIHw9IElOVF9NQVNLMF9UVFNDQV9NQVNLO1xcbitcXG4rXFx0LyogQ2xlYXIgdGltZXN0YW1wIHJlbGF0ZWQgSVJRcyAqL1xcbitcXHRzdGF0dXMwID0gU1RBVFVTMF9UVFNDQV9NQVNLO1xcbitcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHN0YXR1czApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnRjNi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gd3JpdGUgU1RBVFVTMCByZWdpc3RlclxcXFxuXFxcIik7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0lOVF9NQVNLMCwgaXJxbSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSBJUlFNIHJlZ2lzdGVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfQ09ORklHMCwgY2ZnMCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2dGM2LVxcdTAwM2VzcGktXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byB3cml0ZSBDRkcwIHJlZ2lzdGVyXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFx0aWYgKGNmZzAgXFx1MDAyNiBDT05GSUcwX0ZUU0VfRU5BQkxFKVxcbitcXHRcXHR0YzYtXFx1MDAzZWh3X3RzdGFtcF9lbmFibGVkID0gdHJ1ZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR0YzYtXFx1MDAzZWh3X3RzdGFtcF9lbmFibGVkID0gZmFsc2U7XFxuK291dDpcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIG9hX3RjNl9od3RzdGFtcF9nZXQgLSBnZXRzIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWdcXG4rICogQHRjNjogb2FfdGM2IHN0cnVjdC5cXG4rICogQGNmZzoga2VybmVsIGNvcHkgb2YgaGFyZHdhcmUgdGltZXN0YW1wIGNvbmZpZ1xcbisgKi9cXG4rdm9pZCBvYV90YzZfaHd0c3RhbXBfZ2V0KHN0cnVjdCBvYV90YzYgKnRjNixcXG4rXFx0XFx0XFx0IHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpXFxuK3tcXG4rXFx0aHd0c3RhbXBfY29uZmlnX3RvX2tlcm5lbChjZmcsIFxcdTAwMjZ0YzYtXFx1MDAzZXRzX2NvbmZpZyk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2h3dHN0YW1wX2dldCk7XFxuK1xcbisvKipcXG4rICogb2FfdGM2X2h3dHN0YW1wX3NldCAtIHNldHMgaGFyZHdhcmUgdGltZXN0YW1wIGNvbmZpZ1xcbisgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxcbisgKiBAY2ZnOiBrZXJuZWwgY29weSBvZiBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlnXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXFxuKyAqL1xcbitpbnQgb2FfdGM2X2h3dHN0YW1wX3NldChzdHJ1Y3Qgb2FfdGM2ICp0YzYsXFxuK1xcdFxcdFxcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpXFxuK3tcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHRjNi1cXHUwMDNlbmV0ZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcbitcXHRpZiAoIXRjNi1cXHUwMDNlaHdfdHN0YW1wX3N1cHBvcnRlZClcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0c3dpdGNoIChjZmctXFx1MDAzZXR4X3R5cGUpIHtcXG4rXFx0Y2FzZSBIV1RTVEFNUF9UWF9PRkY6XFxuK1xcdGNhc2UgSFdUU1RBTVBfVFhfT046XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXG4rXFx0c3dpdGNoIChjZmctXFx1MDAzZXJ4X2ZpbHRlcikge1xcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OT05FOlxcbitcXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9BTEw6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1NPTUU6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9FVkVOVDpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YxX0w0X1NZTkM6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9ERUxBWV9SRVE6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9FVkVOVDpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0w0X1NZTkM6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9FVkVOVDpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX0wyX1NZTkM6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVE6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9FVkVOVDpcXG4rXFx0Y2FzZSBIV1RTVEFNUF9GSUxURVJfUFRQX1YyX1NZTkM6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XFxuK1xcdGNhc2UgSFdUU1RBTVBfRklMVEVSX05UUF9BTEw6XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0fVxcbitcXHRod3RzdGFtcF9jb25maWdfZnJvbV9rZXJuZWwoXFx1MDAyNnRjNi1cXHUwMDNldHNfY29uZmlnLCBjZmcpO1xcbitcXG4rXFx0LyogU3VwcG9ydHMgdGltZXN0YW1waW5nIGFsbCB0cmFmZmljICovXFxuK1xcdGlmIChjZmctXFx1MDAzZXJ4X2ZpbHRlciAhPSBIV1RTVEFNUF9GSUxURVJfTk9ORSlcXG4rXFx0XFx0dGM2LVxcdTAwM2V0c19jb25maWcucnhfZmlsdGVyID0gSFdUU1RBTVBfRklMVEVSX0FMTDtcXG4rXFx0cmV0dXJuIG9hX3RjNl9zZXRfaHd0c3RhbXBfc2V0dGluZ3ModGM2KTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaHd0c3RhbXBfc2V0KTtcXG4rXFxuKy8qKlxcbisgKiBvYV90YzZfZ2V0X3RzX3N0YXRzIC0gUHJvdmlkZXMgdGltZXN0YW1waW5nIHN0YXRzXFxuKyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXFxuKyAqIEBzdGF0czogZXRodG9vbCBkYXRhIHN0cnVjdHVyZSB0byBmaWxsIGluXFxuKyAqL1xcbit2b2lkIG9hX3RjNl9nZXRfdHNfc3RhdHMoc3RydWN0IG9hX3RjNiAqdGM2LFxcbitcXHRcXHRcXHQgc3RydWN0IGV0aHRvb2xfdHNfc3RhdHMgKnN0YXRzKVxcbit7XFxuK1xcdHN0YXRzLVxcdTAwM2Vwa3RzID0gdGM2LVxcdTAwM2V0eF9od3RzdGFtcF9wa3RzO1xcbitcXHRzdGF0cy1cXHUwMDNlZXJyID0gdGM2LVxcdTAwM2V0eF9od3RzdGFtcF9lcnI7XFxuK1xcdHN0YXRzLVxcdTAwM2Vsb3N0ID0gdGM2LVxcdTAwM2V0eF9od3RzdGFtcF9sb3N0O1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9nZXRfdHNfc3RhdHMpO1xcbitcXG4raW50IG9hX3RjNl90c3RhbXBfaW9jdGwoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKVxcbit7XFxuK1xcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnIGtjZmc7XFxuK1xcdHN0cnVjdCBod3RzdGFtcF9jb25maWcgdHNjZmc7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0aWYgKCF0YzYtXFx1MDAzZWh3X3RzdGFtcF9zdXBwb3J0ZWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGlmIChjbWQgPT0gU0lPQ1NIV1RTVEFNUCkge1xcbitcXHRcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnRzY2ZnLCBycS1cXHUwMDNlaWZyX2RhdGEsXFxuK1xcdFxcdFxcdFxcdCAgIHNpemVvZih0c2NmZykpKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdFxcdGlmICh0c2NmZy5mbGFncylcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGh3dHN0YW1wX2NvbmZpZ190b19rZXJuZWwoXFx1MDAyNmtjZmcsIFxcdTAwMjZ0c2NmZyk7XFxuK1xcdFxcdHJldCA9IG9hX3RjNl9od3RzdGFtcF9zZXQodGM2LCBcXHUwMDI2a2NmZyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0aWYgKGNvcHlfdG9fdXNlcihycS1cXHUwMDNlaWZyX2RhdGEsIFxcdTAwMjZ0YzYtXFx1MDAzZXRzX2NvbmZpZyxcXG4rXFx0XFx0XFx0IHNpemVvZih0YzYtXFx1MDAzZXRzX2NvbmZpZykpKVxcbitcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogb2FfdGM2X2dldF90c19pbmZvIC0gUHJvdmlkZXMgdGltZXN0YW1wIGluZm8gZm9yIGV0aHRvb2xcXG4rICogQHRjNjogb2FfdGM2IHN0cnVjdC5cXG4rICogQGluZm86IGV0aHRvb2wgdGltZXN0YW1waW5nIGluZm8gc3RydWN0dXJlXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXFxuKyAqL1xcbitpbnQgb2FfdGM2X2dldF90c19pbmZvKHN0cnVjdCBvYV90YzYgKnRjNixcXG4rXFx0XFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKVxcbit7XFxuK1xcdGlmICghdGM2LVxcdTAwM2VwdHBfY2xvY2spXFxuK1xcdFxcdHJldHVybiBldGh0b29sX29wX2dldF90c19pbmZvKHRjNi1cXHUwMDNlbmV0ZGV2LCBpbmZvKTtcXG4rXFxuK1xcdGluZm8tXFx1MDAzZXNvX3RpbWVzdGFtcGluZyA9IFNPRl9USU1FU1RBTVBJTkdfUkFXX0hBUkRXQVJFIHxcXG4rXFx0XFx0XFx0XFx0U09GX1RJTUVTVEFNUElOR19UWF9IQVJEV0FSRSB8XFxuK1xcdFxcdFxcdFxcdFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkU7XFxuK1xcdGluZm8tXFx1MDAzZXBoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleCh0YzYtXFx1MDAzZXB0cF9jbG9jayk7XFxuK1xcdGluZm8tXFx1MDAzZXR4X3R5cGVzID0gQklUKEhXVFNUQU1QX1RYX09OKTtcXG4rXFx0aW5mby1cXHUwMDNlcnhfZmlsdGVycyA9IEJJVChIV1RTVEFNUF9GSUxURVJfQUxMKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X2dldF90c19pbmZvKTtcXG4rXFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiT1BFTiBBbGxpYW5jZSAxMEJBU0XigJFUMXggTUFD4oCRUEhZIFNlcmlhbCBJbnRlcmZhY2UgTGliXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIlNlbHZhIFJhamFnb3BhbCBcXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL0tjb25maWdcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi44ZDcyMTk0MTUxZWE3OVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvS2NvbmZpZ1xcbkBAIC0wLDAgKzEsMjEgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBvbnNlbWkgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbisjXFxuK1xcbitjb25maWcgTkVUX1ZFTkRPUl9PTlNFTUlcXG4rXFx0Ym9vbCBcXFwib25zZW1pIG5ldHdvcmsgZGV2aWNlc1xcXCJcXG4rXFx0aGVscFxcbitcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cXG4rXFxuK1xcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4rXFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuK1xcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBvbnNlbWkgZXRoZXJuZXQgZGV2aWNlcy4gSWYgeW91IHNheSBZLCB5b3VcXG4rXFx0ICB3aWxsIGJlIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXFxuK1xcbitpZiBORVRfVkVORE9SX09OU0VNSVxcbitcXG4rc291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvS2NvbmZpZ1xcXCJcXG4rXFxuK2VuZGlmICMgTkVUX1ZFTkRPUl9PTlNFTUlcXG4rXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9NYWtlZmlsZVxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmYzZDRlYjE1NDMxM2M2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9NYWtlZmlsZVxcbkBAIC0wLDAgKzEsNyBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIE1ha2VmaWxlIGZvciB0aGUgb25zZW1pIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuXFxuKyNcXG4rXFxuK29iai0kKENPTkZJR19TMjUwMF9NQUNQSFkpICs9IHMyNTAwL1xcbitcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvS2NvbmZpZ1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0MWZiYWYxYjY0MTg3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9LY29uZmlnXFxuQEAgLTAsMCArMSwxOSBAQFxcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI1xcbisjIG9uc2VtaSBTMjUwMCBEcml2ZXIgU3VwcG9ydFxcbisjXFxuK1xcbitjb25maWcgUzI1MDBfTUFDUEhZXFxuK1xcdHRyaXN0YXRlIFxcXCJTMjUwMCBzdXBwb3J0XFxcIlxcbitcXHRkZXBlbmRzIG9uIFNQSVxcbitcXHRpbXBseSBORVRfU0VMRlRFU1RTXFxuK1xcdHNlbGVjdCBOQ04yNjAwMF9QSFlcXG4rXFx0c2VsZWN0IE9BX1RDNlxcbitcXHRoZWxwXFxuK1xcdCAgU3VwcG9ydCBmb3IgdGhlIG9uc2VtaSBUUzI1MDAgTUFDUEhZIEV0aGVybmV0IGNoaXAuXFxuK1xcdCAgSXQgd29ya3MgdW5kZXIgdGhlIGZyYW1ld29yayB0aGF0IGNvbmZvcm0gdG8gT1BFTiBBbGxpYW5jZVxcbitcXHQgIDEwQkFTRS1UMXggU2VyaWFsIEludGVyZmFjZSBzcGVjaWZpY2F0aW9uLlxcbitcXG4rXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmVcXG4rXFx0ICBjYWxsZWQgczI1MDAuXFxuK1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvTWFrZWZpbGVcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi42MWVjNzA1Y2RmOWYxYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvTWFrZWZpbGVcXG5AQCAtMCwwICsxLDcgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNcXG4rIyBNYWtlZmlsZSBmb3IgdGhlIG9uc2VtaSBuZXR3b3JrIGRldmljZSBkcml2ZXJzLlxcbisjXFxuK29iai0kKENPTkZJR19TMjUwMF9NQUNQSFkpIDo9IHMyNTAwLm9cXG4rczI1MDAtb2JqcyA6PSBzMjUwMF9tYWluLm8gczI1MDBfZXRodG9vbC5vIHMyNTAwX3B0cC5vXFxuK1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX2V0aHRvb2wuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjBiN2VmNDkwZDdjYWMzXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9ldGh0b29sLmNcXG5AQCAtMCwwICsxLDM2MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgMjAyNiBTZW1pY29uZHVjdG9yIENvbXBvbmVudHMgSW5kdXN0cmllcywgTExDIChcXFwib25zZW1pXFxcIikuXFxuKyAqIG9uc2VtaSdzIFMyNTAwIDEwQkFTRS1UMVMgTUFDLVBIWSBkcml2ZXJcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRodG9vbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3NlbGZ0ZXN0cy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuK1xcbisjaW5jbHVkZSBcXFwiczI1MDBfaHdfZGVmLmhcXFwiXFxuK1xcbisjZGVmaW5lIFMyNTAwX05VTV9SRUdTXFx0XFx0XFx0MzhcXG4rI2RlZmluZSBTMjUwMF9SRUdEVU1QX0xFTlxcdFxcdChzaXplb2YodTMyKSAqIChTMjUwMF9OVU1fUkVHUyAqIDIpKVxcbitcXG4rI2RlZmluZSBTMjUwMF9OVU1fTUFDX1NUQVRTXFx0XFx0MjFcXG4rI2RlZmluZSBTMjUwMF9OVU1fUk1PTl9TVEFUU1xcdFxcdDEyXFxuK1xcbitzdHJ1Y3QgczI1MDBfcmVnX21hcCB7XFxuK1xcdHUxNiByZWc7XFxuK1xcdHUxNiBtbXM7XFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHMyNTAwX3JlZ19tYXAgczI1MDBfcmVnX21hcFtTMjUwMF9OVU1fUkVHU10gPSB7XFxuK1xcdHsgUzI1MDBfUkVHX1ZTX09OSVBWRVIsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1RXRUFLUzEsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1BMQ0FFWFQsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1BNQVRVTkUwLCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1BNQVRVTkUxLCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1QxU1dVUFRVTkUsICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0hERCwgICAgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0RDUV9UT0lELCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0RDUV9TUUksICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0RDUV9TUUlfUExVUywgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMSwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMiwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMywgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1dTX1NUQVRVU18wLCAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMCwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1dTX1NUQVRVU18xLCAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMSwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX01JSU1JUlFFLCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcXG4rXFx0eyBTMjUwMF9SRUdfVlNfTUlJTUlSUVMsICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxcbitcXHR7IFMyNTAwX1JFR19WU19ESU9DRkcwLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0NISVBJRCwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcXG4rXFx0eyBTMjUwMF9SRUdfVlNfVFdFQUtTMiwgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxcbitcXHR7IFMyNTAwX1JFR19WU19NQUNJRDAsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX01BQ0lEMSwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcXG4rXFx0eyBTMjUwMF9SRUdfVlNfTlZNX0hFQUxUSCwgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxcbitcXHR7IFMyNTAwX1JFR19WU19QVFBfU0VDLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1BUUE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcXG4rXFx0eyBTMjUwMF9SRUdfVlNfUFRQX1NFVFNFQywgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxcbitcXHR7IFMyNTAwX1JFR19WU19TRVROU0VDLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX1BUUF9BREosICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcXG4rXFx0eyBTMjUwMF9SRUdfVlNfQ01QQ1RMLCAgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxcbitcXHR7IFMyNTAwX1JFR19WU19DTVBTRUMsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0NNUE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcXG4rXFx0eyBTMjUwMF9SRUdfVlNfQ01QUEVSLCAgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxcbitcXHR7IFMyNTAwX1JFR19WU19DQVBDVEwsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXFxuK1xcdHsgUzI1MDBfUkVHX1ZTX0NBUFNFQywgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcXG4rXFx0eyBTMjUwMF9SRUdfVlNfQ0FQTlNFQywgICAgICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiB9LFxcbitcXHR7IFMyNTAwX1JFR19WU19CQ05DTlQsICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyIH0sXFxuK307XFxuK1xcbitlbnVtIHMyNTAwX3N0YXRfaWR4IHtcXG4rXFx0UzI1MDBfTVNUT0NURUNUU1RYX0lEWCA9IDAsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1RYT0tfSURYLFxcbitcXHRTMjUwMF9NU1RCQ0FTVFRYT0tfSURYLFxcbitcXHRTMjUwMF9NU1RNQ0FTVFRYT0tfSURYLFxcbitcXHRTMjUwMF9NU1RGUkFNRVNUWDY0X0lEWCxcXG4rXFx0UzI1MDBfTVNURlJBTUVTVFg2NV9JRFgsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1RYMTI4X0lEWCxcXG4rXFx0UzI1MDBfTVNURlJBTUVTVFgyNTZfSURYLFxcbitcXHRTMjUwMF9NU1RGUkFNRVNUWDUxMl9JRFgsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1RYMTAyNF9JRFgsXFxuK1xcdFMyNTAwX01TVFRYVU5ERUZMT1dfSURYLFxcbitcXHRTMjUwMF9NU1RTSU5HTEVDT0xfSURYLFxcbitcXHRTMjUwMF9NU1RNVUxUSUNPTF9JRFgsXFxuK1xcdFMyNTAwX01TVEVYQ0VTU0NPTF9JRFgsXFxuK1xcdFMyNTAwX01TVERFRkVSUkVEVFhfSURYLFxcbitcXHRTMjUwMF9NU1RDUlNFUlJfSURYLFxcbitcXHRTMjUwMF9NU1RPQ1RFQ1RTUlhfSURYLFxcbitcXHRTMjUwMF9NU1RGUkFNRVNSWE9LX0lEWCxcXG4rXFx0UzI1MDBfTVNUQkNBU1RSWE9LX0lEWCxcXG4rXFx0UzI1MDBfTVNUTUNBU1RSWE9LX0lEWCxcXG4rXFx0UzI1MDBfTVNURlJBTUVTUlg2NF9JRFgsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1JYNjVfSURYLFxcbitcXHRTMjUwMF9NU1RGUkFNRVNSWDEyOF9JRFgsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1JYMjU2X0lEWCxcXG4rXFx0UzI1MDBfTVNURlJBTUVTUlg1MTJfSURYLFxcbitcXHRTMjUwMF9NU1RGUkFNRVNSWDEwMjRfSURYLFxcbitcXHRTMjUwMF9NU1RSVU5UU0VSUl9JRFgsXFxuK1xcdFMyNTAwX01TVFJYVE9PTE9OR19JRFgsXFxuK1xcdFMyNTAwX01TVEZDU0VSUlNfSURYLFxcbitcXHRTMjUwMF9NU1RTWU1CT0xFUlJTX0lEWCxcXG4rXFx0UzI1MDBfTVNUQUxJR05FUlJTX0lEWCxcXG4rXFx0UzI1MDBfTVNUUlhPVkVSRkxPV19JRFgsXFxuK1xcdFMyNTAwX01TVFJYRFJPUFBFRF9JRFgsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3QgY2hhciBzMjUwMF9tYWNfc3RhdF9zdHJpbmdzW11bRVRIX0dTVFJJTkdfTEVOXSA9IHtcXG4rXFx0XFxcInR4X2J5dGVzXFxcIixcXG4rXFx0XFxcInR4X2ZyYW1lc1xcXCIsXFxuK1xcdFxcXCJ0eF9icm9hZGNhc3RfZnJhbWVzXFxcIixcXG4rXFx0XFxcInR4X211bHRpY2FzdF9mcmFtZXNcXFwiLFxcbitcXHRcXFwidHhfdW5kZXJmbG93X2Vycm9yc1xcXCIsXFxuK1xcdFxcXCJ0eF9zaW5nbGVfY29sbGlzaW9uc1xcXCIsXFxuK1xcdFxcXCJ0eF9tdWx0aXBsZV9jb2xsaXNpb25zXFxcIixcXG4rXFx0XFxcInR4X2V4Y2Vzc2l2ZV9jb2xsaXNpb25zXFxcIixcXG4rXFx0XFxcInR4X2RlZmVycmVkX2ZyYW1lc1xcXCIsXFxuK1xcdFxcXCJ0eF9jYXJyaWVyX3NlbnNlX2Vycm9yc1xcXCIsXFxuK1xcdFxcXCJyeF9ieXRlc1xcXCIsXFxuK1xcdFxcXCJyeF9mcmFtZXNcXFwiLFxcbitcXHRcXFwicnhfYnJvYWRjYXN0X2ZyYW1lc1xcXCIsXFxuK1xcdFxcXCJyeF9tdWx0aWNhc3RfZnJhbWVzXFxcIixcXG4rXFx0XFxcInJ4X3J1bnRzXFxcIixcXG4rXFx0XFxcInJ4X292ZXJzaXplX2ZyYW1lc1xcXCIsXFxuK1xcdFxcXCJyeF9jcmNfZXJyb3JzXFxcIixcXG4rXFx0XFxcInJ4X3N5bWJvbF9lcnJvcnNcXFwiLFxcbitcXHRcXFwicnhfYWxpZ25tZW50X2Vycm9yc1xcXCIsXFxuK1xcdFxcXCJyeF9idXN5X2Ryb3BzXFxcIixcXG4rXFx0XFxcInJ4X21pc21hdGNoX2Ryb3BzXFxcIixcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCB1OCBzMjUwMF9tYWNfc3RhdF9tYXBbUzI1MDBfTlVNX01BQ19TVEFUU10gPSB7XFxuK1xcdFMyNTAwX01TVE9DVEVDVFNUWF9JRFgsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1RYT0tfSURYLFxcbitcXHRTMjUwMF9NU1RCQ0FTVFRYT0tfSURYLFxcbitcXHRTMjUwMF9NU1RNQ0FTVFRYT0tfSURYLFxcbitcXHRTMjUwMF9NU1RUWFVOREVGTE9XX0lEWCxcXG4rXFx0UzI1MDBfTVNUU0lOR0xFQ09MX0lEWCxcXG4rXFx0UzI1MDBfTVNUTVVMVElDT0xfSURYLFxcbitcXHRTMjUwMF9NU1RFWENFU1NDT0xfSURYLFxcbitcXHRTMjUwMF9NU1RERUZFUlJFRFRYX0lEWCxcXG4rXFx0UzI1MDBfTVNUQ1JTRVJSX0lEWCxcXG4rXFx0UzI1MDBfTVNUT0NURUNUU1JYX0lEWCxcXG4rXFx0UzI1MDBfTVNURlJBTUVTUlhPS19JRFgsXFxuK1xcdFMyNTAwX01TVEJDQVNUUlhPS19JRFgsXFxuK1xcdFMyNTAwX01TVE1DQVNUUlhPS19JRFgsXFxuK1xcdFMyNTAwX01TVFJVTlRTRVJSX0lEWCxcXG4rXFx0UzI1MDBfTVNUUlhUT09MT05HX0lEWCxcXG4rXFx0UzI1MDBfTVNURkNTRVJSU19JRFgsXFxuK1xcdFMyNTAwX01TVFNZTUJPTEVSUlNfSURYLFxcbitcXHRTMjUwMF9NU1RBTElHTkVSUlNfSURYLFxcbitcXHRTMjUwMF9NU1RSWE9WRVJGTE9XX0lEWCxcXG4rXFx0UzI1MDBfTVNUUlhEUk9QUEVEX0lEWCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCB1OCBzMjUwMF9ybW9uX3N0YXRfbWFwW1MyNTAwX05VTV9STU9OX1NUQVRTXSA9IHtcXG4rXFx0UzI1MDBfTVNURlJBTUVTVFg2NF9JRFgsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1RYNjVfSURYLFxcbitcXHRTMjUwMF9NU1RGUkFNRVNUWDEyOF9JRFgsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1RYMjU2X0lEWCxcXG4rXFx0UzI1MDBfTVNURlJBTUVTVFg1MTJfSURYLFxcbitcXHRTMjUwMF9NU1RGUkFNRVNUWDEwMjRfSURYLFxcbitcXHRTMjUwMF9NU1RGUkFNRVNSWDY0X0lEWCxcXG4rXFx0UzI1MDBfTVNURlJBTUVTUlg2NV9JRFgsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1JYMTI4X0lEWCxcXG4rXFx0UzI1MDBfTVNURlJBTUVTUlgyNTZfSURYLFxcbitcXHRTMjUwMF9NU1RGUkFNRVNSWDUxMl9JRFgsXFxuK1xcdFMyNTAwX01TVEZSQU1FU1JYMTAyNF9JRFgsXFxuK307XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlIHMyNTAwX3Jtb25faGlzdF9yYW5nZXNbXSA9IHtcXG4rXFx0eyA2NCwgNjQgfSxcXG4rXFx0eyA2NSwgMTI3IH0sXFxuK1xcdHsgMTI4LCAyNTUgfSxcXG4rXFx0eyAyNTYsIDUxMSB9LFxcbitcXHR7IDUxMiwgMTAyMyB9LFxcbitcXHR7IDEwMjQsIDIwMDAgfSxcXG4rXFx0eyB9LFxcbit9O1xcbitcXG4rI2RlZmluZSBTMjUwMF9NQUNfU1RBVFNfTEVOIEFSUkFZX1NJWkUoczI1MDBfbWFjX3N0YXRfc3RyaW5ncylcXG4rc3RhdGljX2Fzc2VydChTMjUwMF9NQUNfU1RBVFNfTEVOID09IFMyNTAwX05VTV9NQUNfU1RBVFMpO1xcbitzdGF0aWNfYXNzZXJ0KEFSUkFZX1NJWkUoczI1MDBfbWFjX3N0YXRfbWFwKSA9PSBTMjUwMF9OVU1fTUFDX1NUQVRTKTtcXG4rc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKHMyNTAwX3Jtb25fc3RhdF9tYXApID09IFMyNTAwX05VTV9STU9OX1NUQVRTKTtcXG4rXFxuKyNkZWZpbmUgU1RBVF9SRUdfT0ZGU0VUKHgpICgoUzI1MDBfUkVHX01BQ19TVCMjeCkgLSBcXFxcXFxuK1xcdFxcdFxcdCAgIFMyNTAwX1JFR19NQUNfRklSU1RfU1RBVClcXG4rXFxuK3N0YXRpYyB2b2lkIHMyNTAwX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdilcXG4re1xcbitcXHR1NjQgKmRhdGEgPSBwcml2LVxcdTAwM2VzdGF0c19kYXRhO1xcbitcXHR1MzIgKnJlZ3MsICpycHRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmVncyA9IGttYWxsb2NfYXJyYXkoUzI1MDBfTlVNX1NUQVRfUkVHUywgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpO1xcbitcXHRpZiAoIXJlZ3MpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXMocHJpdi1cXHUwMDNldGM2LCBTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1RYTCxcXG4rXFx0XFx0XFx0XFx0XFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIHJlZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdFMyNTAwX05VTV9TVEFUX1JFR1MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJwdHIgPSByZWdzO1xcbitcXG4rXFx0LyogVFggYnl0ZXMgaXMgYSA2NC1iaXQgcmVnaXN0ZXIgdGhhdCBzcGFucyBvdmVyIHR3byAzMi1iaXQgcmVnc1xcbitcXHQgKiBub3RlOiBIVyBkb2VzIGF1dG8tZnJlZXplIHdoZW4gcmVhZGluZyBMU0IgYW5kIHVuLWZyZWV6ZSBvbiBNU0JcXG4rXFx0ICovXFxuK1xcdCooZGF0YSsrKSArPSAoKHU2NCkqcnB0cikgfCAoKCh1NjQpKihycHRyICsgMSkpIFxcdTAwM2NcXHUwMDNjIDMyKTtcXG4rXFxuK1xcdC8qIHJ1biB1bnRpbCB0aGUgbmV4dCA2NC1iaXQgcmVnaXN0ZXIgKi9cXG4rXFx0Zm9yIChycHRyICs9IDI7IChycHRyIC0gcmVncykgXFx1MDAzYyBTVEFUX1JFR19PRkZTRVQoT0NURUNUU1JYTCk7ICsrcnB0cilcXG4rXFx0XFx0KihkYXRhKyspICs9ICpycHRyO1xcbitcXG4rXFx0LyogUlggYnl0ZXMgaXMgYSA2NC1iaXQgcmVnaXN0ZXIgdGhhdCBzcGFucyBvdmVyIHR3byAzMi1iaXQgcmVnc1xcbitcXHQgKiBub3RlOiBIVyBkb2VzIGF1dG8tZnJlZXplIHdoZW4gcmVhZGluZyBMU0IgYW5kIHVuLWZyZWV6ZSBvbiBNU0JcXG4rXFx0ICovXFxuK1xcdCooZGF0YSsrKSArPSAoKHU2NCkqcnB0cikgfCAoKCh1NjQpKihycHRyICsgMSkpIFxcdTAwM2NcXHUwMDNjIDMyKTtcXG4rXFxuK1xcdGZvciAocnB0ciArPSAyOyAocnB0ciAtIHJlZ3MpIFxcdTAwM2MgUzI1MDBfTlVNX1NUQVRfUkVHUzsgKytycHRyKVxcbitcXHRcXHQqKGRhdGErKykgKz0gKnJwdHI7XFxuK291dDpcXG4rXFx0a2ZyZWUocmVncyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHMyNTAwX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnNjcHkoaW5mby1cXHUwMDNlZHJpdmVyLCBEUlZfTkFNRSwgc2l6ZW9mKGluZm8tXFx1MDAzZWRyaXZlcikpO1xcbitcXHRzdHJzY3B5KGluZm8tXFx1MDAzZWJ1c19pbmZvLCBkZXZfbmFtZShcXHUwMDI2bmRldi1cXHUwMDNlZGV2KSxcXG4rXFx0XFx0c2l6ZW9mKGluZm8tXFx1MDAzZWJ1c19pbmZvKSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgczI1MDBfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBzc2V0KVxcbit7XFxuK1xcdHN3aXRjaCAoc3NldCkge1xcbitcXHRjYXNlIEVUSF9TU19TVEFUUzpcXG4rXFx0XFx0cmV0dXJuIFMyNTAwX01BQ19TVEFUU19MRU47XFxuK1xcdGNhc2UgRVRIX1NTX1RFU1Q6XFxuK1xcdFxcdHJldHVybiBuZXRfc2VsZnRlc3RfZ2V0X2NvdW50KCk7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzMjUwMF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHN0cmluZ3NldCxcXG4rXFx0XFx0XFx0ICAgICAgdTggKmJ1ZilcXG4re1xcbitcXHRzd2l0Y2ggKHN0cmluZ3NldCkge1xcbitcXHRjYXNlIEVUSF9TU19TVEFUUzpcXG4rXFx0XFx0bWVtY3B5KGJ1ZiwgczI1MDBfbWFjX3N0YXRfc3RyaW5ncyxcXG4rXFx0XFx0ICAgICAgIFMyNTAwX01BQ19TVEFUU19MRU4gKiBFVEhfR1NUUklOR19MRU4pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBFVEhfU1NfVEVTVDpcXG4rXFx0XFx0bmV0X3NlbGZ0ZXN0X2dldF9zdHJpbmdzKGJ1Zik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHMyNTAwX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRzMjUwMF91cGRhdGVfc3RhdHMocHJpdik7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBTMjUwMF9OVU1fTUFDX1NUQVRTOyBpKyspXFxuK1xcdFxcdGRhdGFbaV0gPSBwcml2LVxcdTAwM2VzdGF0c19kYXRhW3MyNTAwX21hY19zdGF0X21hcFtpXV07XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHMyNTAwX3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IGV0aHRvb2xfcm1vbl9zdGF0cyAqcm1vbl9zdGF0cyxcXG4rXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgKipyYW5nZXMpXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0dTggb2Zmc2V0O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdHMyNTAwX3VwZGF0ZV9zdGF0cyhwcml2KTtcXG4rXFxuK1xcdG1lbXNldChybW9uX3N0YXRzLCAwLCBzaXplb2YoKnJtb25fc3RhdHMpKTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlc3JjID0gRVRIVE9PTF9NQUNfU1RBVFNfU1JDX0FHR1JFR0FURTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNldW5kZXJzaXplX3BrdHMgPSBwcml2LVxcdTAwM2VzdGF0c19kYXRhW1MyNTAwX01TVFJVTlRTRVJSX0lEWF07XFxuK1xcdHJtb25fc3RhdHMtXFx1MDAzZW92ZXJzaXplX3BrdHMgPSBwcml2LVxcdTAwM2VzdGF0c19kYXRhW1MyNTAwX01TVFJYVE9PTE9OR19JRFhdO1xcbitcXHRybW9uX3N0YXRzLVxcdTAwM2VmcmFnbWVudHMgPSBwcml2LVxcdTAwM2VzdGF0c19kYXRhW1MyNTAwX01TVEZDU0VSUlNfSURYXTtcXG4rXFx0cm1vbl9zdGF0cy1cXHUwMDNlamFiYmVycyA9IHByaXYtXFx1MDAzZXN0YXRzX2RhdGFbUzI1MDBfTVNUQUxJR05FUlJTX0lEWF07XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgNjsgaSsrKSB7XFxuK1xcdFxcdG9mZnNldCA9IHMyNTAwX3Jtb25fc3RhdF9tYXBbaV07XFxuK1xcdFxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RfdHhbaV0gPSBwcml2LVxcdTAwM2VzdGF0c19kYXRhW29mZnNldF07XFxuK1xcdH1cXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyA2OyBpKyspIHtcXG4rXFx0XFx0b2Zmc2V0ID0gczI1MDBfcm1vbl9zdGF0X21hcFtpICsgNl07XFxuK1xcdFxcdHJtb25fc3RhdHMtXFx1MDAzZWhpc3RbaV0gPSBwcml2LVxcdTAwM2VzdGF0c19kYXRhW29mZnNldF07XFxuK1xcdH1cXG4rXFxuK1xcdCpyYW5nZXMgPSBzMjUwMF9ybW9uX2hpc3RfcmFuZ2VzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHMyNTAwX2dldF90c19pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHQgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0c19pbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRyZXR1cm4gb2FfdGM2X2dldF90c19pbmZvKHByaXYtXFx1MDAzZXRjNiwgdHNfaW5mbyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgczI1MDBfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIFMyNTAwX1JFR0RVTVBfTEVOO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzMjUwMF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcClcXG4re1xcbitcXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXHR1MzIgKnBidWZmID0gKHUzMiAqKXA7XFxuK1xcdHUxNiByZWcsIG1tcztcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0cmVncy1cXHUwMDNldmVyc2lvbiA9IDA7XFxuK1xcdG1lbXNldChwLCAwLCBTMjUwMF9SRUdEVU1QX0xFTik7XFxuK1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBTMjUwMF9OVU1fUkVHUzsgaSsrKSB7XFxuK1xcdFxcdHZhbCA9IDA7XFxuK1xcdFxcdHJlZyA9IHMyNTAwX3JlZ19tYXBbaV0ucmVnO1xcbitcXHRcXHRtbXMgPSBzMjUwMF9yZWdfbWFwW2ldLm1tcztcXG4rXFx0XFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNiwgcmVnLCBtbXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2dmFsKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdCpwYnVmZisrID0gY3B1X3RvX2JlMzIoKCh1MzIpbW1zIFxcdTAwM2NcXHUwMDNjIDE2KSB8IHJlZyk7XFxuK1xcdFxcdCpwYnVmZisrID0gY3B1X3RvX2JlMzIodmFsKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBzMjUwMF9nZXRfdHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdG9hX3RjNl9nZXRfdHNfc3RhdHMocHJpdi1cXHUwMDNldGM2LCB0c19zdGF0cyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzMjUwMF9ldGh0b29sX29wcyA9IHtcXG4rXFx0LmdldF9kcnZpbmZvID0gczI1MDBfZ2V0X2RydmluZm8sXFxuK1xcdC5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXFxuK1xcdC5nZXRfbGlua19rc2V0dGluZ3MgPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXFxuK1xcdC5zZXRfbGlua19rc2V0dGluZ3MgPSBwaHlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MsXFxuK1xcdC5nZXRfdHNfc3RhdHMgPSBzMjUwMF9nZXRfdHNfc3RhdHMsXFxuK1xcdC5nZXRfc3NldF9jb3VudCA9IHMyNTAwX2dldF9zc2V0X2NvdW50LFxcbitcXHQuZ2V0X3N0cmluZ3MgPSBzMjUwMF9nZXRfc3RyaW5ncyxcXG4rXFx0LmdldF9ldGh0b29sX3N0YXRzID0gczI1MDBfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuK1xcdC5nZXRfcm1vbl9zdGF0cyA9IHMyNTAwX3Jtb25fc3RhdHMsXFxuK1xcdC5nZXRfdHNfaW5mbyA9IHMyNTAwX2dldF90c19pbmZvLFxcbitcXHQuZ2V0X3JlZ3NfbGVuID0gczI1MDBfZ2V0X3JlZ3NfbGVuLFxcbitcXHQuZ2V0X3JlZ3MgPSBzMjUwMF9nZXRfcmVncyxcXG4rXFx0LnNlbGZfdGVzdCA9IG5ldF9zZWxmdGVzdCxcXG4rfTtcXG4rXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9od19kZWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9od19kZWYuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJkOWMwYjNhZDM5YmNiXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9od19kZWYuaFxcbkBAIC0wLDAgKzEsMjIzIEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXFxuKy8qXFxuKyAqIENvcHlyaWdodCAyMDI2IFNlbWljb25kdWN0b3IgQ29tcG9uZW50cyBJbmR1c3RyaWVzLCBMTEMgKFxcXCJvbnNlbWlcXFwiKS5cXG4rICogb25zZW1pJ3MgUzI1MDAgMTBCQVNFLVQxUyBNQUMtUEhZIGRyaXZlclxcbisgKi9cXG4rXFxuKyNpZm5kZWYgUzI1MDBfSFdfREVGX0hcXG4rI2RlZmluZSBTMjUwMF9IV19ERUZfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2hydGltZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaXJxZG9tYWluLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldGRldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5bGluay5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpL3NwaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvb2FfdGM2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRfdHN0YW1wLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbXV0ZXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2t0aW1lLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnJuby5oXFx1MDAzZVxcbitcXG4rI2RlZmluZSBEUlZfTkFNRVxcdFxcdFxcdFxcXCJzMjUwMFxcXCJcXG4rXFxuKyNkZWZpbmUgUzI1MDBfTl9NQ0FTVF9GSUxURVJTXFx0XFx0M1xcbitcXG4rLyogU1BJIE9JRCBhbmQgbW9kZWwgcmVnaXN0ZXIgKi9cXG4rI2RlZmluZSBTMjUwMF9SRUdfU1BJX1BIWUlEXFx0XFx0MHgxXFxuK1xcbisjZGVmaW5lIFMyNTAwX1NQSV9QSFlJRF9PVUlfU0hJRlRcXHQxMFxcbisjZGVmaW5lIFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTS1xcdEdFTk1BU0soMzEsIFMyNTAwX1NQSV9QSFlJRF9PVUlfU0hJRlQpXFxuKyNkZWZpbmUgUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMFxcdEdFTk1BU0soMjEsIDE2KVxcbisjZGVmaW5lIFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSzFcXHRHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSzJcXHRHRU5NQVNLKDcsIDApXFxuKy8qIFNQSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICMwICovXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1NQSV9DRkcwXFx0XFx0MHg0XFxuK1xcbisjZGVmaW5lIFMyNTAwX1NQSV9DRkcwX1NZTkNfQklUXFx0XFx0QklUKDE1KVxcbisjZGVmaW5lIFMyNTAwX1NQSV9DRkcwX1RYQ1RIUkVTSF9TSElGVFxcdDEwXFxuKyNkZWZpbmUgUzI1MDBfU1BJX0NGRzBfUlhDVEVfQklUXFx0QklUKDgpXFxuKyNkZWZpbmUgUzI1MDBfU1BJX0NGRzBfRlRTU182NF9CSVRcXHRCSVQoNilcXG4rI2RlZmluZSBTMjUwMF9TUElfQ0ZHMF9DUFNfU0hJRlRcXHQwXFxuK1xcbisjZGVmaW5lIFMyNTAwX1RYQ1RIUkVTSF84XFx0XFx0MHgyXFxuK1xcbisjZGVmaW5lIFMyNTAwX0NQU182NFxcdFxcdFxcdDB4NlxcbitcXG4rLyogU1BJIHN0YXR1cyByZWdpc3RlciAjMCAqL1xcbisjZGVmaW5lIFMyNTAwX1JFR19TUElfU1QwXFx0XFx0MHg4XFxuK1xcbisjZGVmaW5lIFMyNTAwX1NQSV9TVDBfQ0RQRV9CSVRcXHRcXHRCSVQoMTIpXFxuKyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9UWEZDU0VfQklUXFx0QklUKDExKVxcbisjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFRTQ0FDX0JJVFxcdEJJVCgxMClcXG4rI2RlZmluZSBTMjUwMF9TUElfU1QwX1RUU0NBQl9CSVRcXHRCSVQoOSlcXG4rI2RlZmluZSBTMjUwMF9TUElfU1QwX1RUU0NBQV9CSVRcXHRCSVQoOClcXG4rI2RlZmluZSBTMjUwMF9TUElfU1QwX1JFU0VUQ19CSVRcXHRCSVQoNilcXG4rI2RlZmluZSBTMjUwMF9TUElfU1QwX0hEUkVfQklUXFx0XFx0QklUKDUpXFxuKyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9MT0ZFX0JJVFxcdFxcdEJJVCg0KVxcbisjZGVmaW5lIFMyNTAwX1NQSV9TVDBfUlhCT0VfQklUXFx0XFx0QklUKDMpXFxuKyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9UWEJVRV9CSVRcXHRcXHRCSVQoMilcXG4rI2RlZmluZSBTMjUwMF9TUElfU1QwX1RYQk9FX0JJVFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFhQRV9CSVRcXHRcXHRCSVQoMClcXG4rXFxuKy8qIFNQSSBJUlEgZW5hYmxlIHJlZ2lzdGVyICMwICh1c2UgdGhlIFMyNTAwX1NQSV9TVDBfKl9CSVQgY29uc3RhbnRzKSAqL1xcbisjZGVmaW5lIFMyNTAwX1JFR19TUElfSVJRTTBcXHRcXHQweGNcXG4rXFxuKy8qIFNQSSBidWZmZXIgc3RhdHVzIHJlZ2lzdGVyICovXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1NQSV9CVUZTVFxcdFxcdDB4YlxcbitcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX0NUUkxcXHRcXHQweDBcXG4rXFxuKyNkZWZpbmUgUzI1MDBfTUFDX0NUUkxfTUNTRl9CSVRcXHRcXHRCSVQoMTgpXFxuKyNkZWZpbmUgUzI1MDBfTUFDX0NUUkxfQURSRl9CSVRcXHRcXHRCSVQoMTYpXFxuKyNkZWZpbmUgUzI1MDBfTUFDX0NUUkxfRkNTQV9CSVRcXHRcXHRCSVQoOClcXG4rI2RlZmluZSBTMjUwMF9NQUNfQ1RSTF9UWEVOX0JJVFxcdFxcdEJJVCgxKVxcbisjZGVmaW5lIFMyNTAwX01BQ19DVFJMX1JYRU5fQklUXFx0XFx0QklUKDApXFxuK1xcbisvKiBNQUMgYWRkcmVzcyBmaWx0ZXIgcmVnaXN0ZXJzICovXFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19BRERSRklMVEwobilcXHQoMTYgKyAyICogKG4pKVxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKG4pXFx0KDE3ICsgMiAqIChuKSlcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLTChuKVxcdCgzMiArIDIgKiAobikpXFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19BRERSTUFTS0gobilcXHQoMzMgKyAyICogKG4pKVxcbitcXG4rI2RlZmluZSBTMjUwMF9NQUNfQUREUkZJTFRfRU5fQklUXFx0QklUKDMxKVxcbitcXG4rLyogTUFDIHN0YXRpc3RpYyByZWdpc3RlcnMgKi9cXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1RYTFxcdDQ4XFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVE9DVEVDVFNUWEhcXHQ0OVxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWE9LXFx0NTBcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUQkNBU1RUWE9LXFx0NTFcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUTUNBU1RUWE9LXFx0NTJcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTVFg2NFxcdDUzXFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYNjVcXHQ1NFxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWDEyOFxcdDU1XFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYMjU2XFx0NTZcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTVFg1MTJcXHQ1N1xcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWDEwMjRcXHQ1OFxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RUWFVOREVGTE9XXFx0NTlcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUU0lOR0xFQ09MXFx0NjBcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUTVVMVElDT0xcXHQ2MVxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RFWENFU1NDT0xcXHQ2MlxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RERUZFUlJFRFRYXFx0NjNcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUQ1JTRVJSXFx0XFx0NjRcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1JYTFxcdDY1XFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVE9DVEVDVFNSWEhcXHQ2NlxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWE9LXFx0NjdcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUQkNBU1RSWE9LXFx0NjhcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUTUNBU1RSWE9LXFx0NjlcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTUlg2NFxcdDcwXFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1JYNjVcXHQ3MVxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDEyOFxcdDcyXFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1JYMjU2XFx0NzNcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTUlg1MTJcXHQ3NFxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDEwMjRcXHQ3NVxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RSVU5UU0VSUlxcdDc2XFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFJYVE9PTE9OR1xcdDc3XFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZDU0VSUlNcXHRcXHQ3OFxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RTWU1CT0xFUlJTXFx0NzlcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUQUxJR05FUlJTXFx0ODBcXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUUlhPVkVSRkxPV1xcdDgxXFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFJYRFJPUFBFRFxcdDgyXFxuK1xcbisvKiBGaXJzdC9sYXN0IHN0YXRpc3RpYyByZWdpc3RlciBmb3Igc2VxdWVudGlhbCBhY2Nlc3MgKi9cXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX0ZJUlNUX1NUQVRcXHRTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1RYTFxcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfTEFTVF9TVEFUXFx0XFx0UzI1MDBfUkVHX01BQ19TVFJYRFJPUFBFRFxcbitcXG4rI2RlZmluZSBTMjUwMF9OVU1fU1RBVF9SRUdTIFxcXFxcXG4rXFx0KFMyNTAwX1JFR19NQUNfTEFTVF9TVEFUIC0gUzI1MDBfUkVHX01BQ19GSVJTVF9TVEFUICsgMSlcXG4rI2RlZmluZSBTMjUwMF9OVU1fU1RBVF9WQVJTXFx0XFx0KFMyNTAwX05VTV9TVEFUX1JFR1MgLSAyKVxcbitcXG4rLyogVmVuZG9yIHNwZWNpZmljIE1NUzQgcmVnaXN0ZXJzICovXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX09OSVBWRVJcXHRcXHQweDgwMDBcXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfVFdFQUtTMVxcdFxcdDB4ODAwMVxcbisjZGVmaW5lIFMyNTAwX1JFR19WU19QTENBRVhUXFx0XFx0MHg4MDAyXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1BNQVRVTkUwXFx0XFx0MHg4MDAzXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1BNQVRVTkUxXFx0XFx0MHg4MDA0XFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1QxU1dVUFRVTkVcXHRcXHQweDgwMDdcXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfSEREXFx0XFx0MHhDQzAxXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0RDUV9UT0lEXFx0XFx0MHhDQzAyXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0RDUV9TUUlcXHRcXHQweENDMDNcXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfRENRX1NRSV9QTFVTXFx0MHhDQzA0XFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMVxcdFxcdDB4Q0QwMFxcbisjZGVmaW5lIFMyNTAwX1JFR19WU19IRERfVFVORTJcXHRcXHQweENEMDFcXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfSEREX1RVTkUzXFx0XFx0MHhDRDAyXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1dTX1NUQVRVU18wXFx0MHhEMDAwXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMFxcdFxcdDB4RDAwMVxcbisjZGVmaW5lIFMyNTAwX1JFR19WU19XU19TVEFUVVNfMVxcdDB4RDEwMFxcbisjZGVmaW5lIFMyNTAwX1JFR19WU19XU19DVFJMXzFcXHRcXHQweEQxMDFcXG4rXFxuKy8qIFZlbmRvciBzcGVjaWZpYyBNTVMxMiByZWdpc3RlcnMgKi9cXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfTUlJTUlSUUVcXHRcXHQweDEwXFxuK1xcbisvKiBNSUlNIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi9cXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfTUlJTUlSUVNcXHRcXHQweDExXFxuKyNkZWZpbmUgTUlJTV9JUlFfU1RBVFVTX1JTVFNfU0hJRlRcXHQxNVxcbisjZGVmaW5lIE1JSU1fSVJRX1NUQVRVU19SU1RTXFx0XFx0QklUKE1JSU1fSVJRX1NUQVRVU19SU1RTX1NISUZUKVxcbitcXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfRElPQ0ZHMFxcdFxcdDB4MTJcXG4rXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NISVBJRFxcdFxcdDB4MTAwMFxcbisjZGVmaW5lIFMyNTAwX1JFR19WU19UV0VBS1MyXFx0XFx0MHgxMDAxXFxuK1xcbisvKiBQZXJtYW5lbnQgTUFDIGFkZHJlc3MgcmVnaXN0ZXIgKi9cXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfTUFDSUQwXFx0XFx0MHgxMDAyXFxuKyNkZWZpbmUgUzI1MDBfVlNfTUFDSUQwX0JZVEU0X01BU0tcXHRHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIFMyNTAwX1ZTX01BQ0lEMF9CWVRFNV9NQVNLXFx0R0VOTUFTSyg3LCAwKVxcbitcXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfTUFDSUQxXFx0XFx0MHgxMDAzXFxuKyNkZWZpbmUgUzI1MDBfVlNfTUFDSUQxX0JZVEUzX01BU0tcXHRHRU5NQVNLKDcsIDApXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX05WTV9IRUFMVEhcXHRcXHQweDEwMDVcXG4rXFxuKy8qIFBUUCByZWdpc3RlcnMgKi9cXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfUFRQX1NFQ1xcdFxcdDB4MTAxMFxcbisjZGVmaW5lIFMyNTAwX1JFR19WU19QVFBfU0VUU0VDXFx0XFx0MHgxMDEyXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1BUUF9BREpcXHRcXHQweDEwMTRcXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfUFRQTlNFQ1xcdFxcdDB4MTAxMVxcbisjZGVmaW5lIFMyNTAwX1JFR19WU19TRVROU0VDXFx0XFx0MHgxMDEzXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NNUENUTFxcdFxcdDB4MTAxNVxcbisjZGVmaW5lIFMyNTAwX1JFR19WU19DTVBTRUNcXHRcXHQweDEwMTZcXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfQ01QTlNFQ1xcdFxcdDB4MTAxN1xcbisjZGVmaW5lIFMyNTAwX1JFR19WU19DTVBQRVJcXHRcXHQweDEwMThcXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfQ0FQQ1RMXFx0XFx0MHgxMDE5XFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NBUFNFQ1xcdFxcdDB4MTAxQVxcbisjZGVmaW5lIFMyNTAwX1JFR19WU19DQVBOU0VDXFx0XFx0MHgxMDFCXFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0JDTkNOVFxcdFxcdDB4MTAxQ1xcbitcXG4rLyogcHJvdG90eXBlcyAvIGZvcndhcmQgZGVjbGFyYXRpb25zICovXFxuK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgczI1MDBfZXRodG9vbF9vcHM7XFxuK1xcbitzdHJ1Y3QgczI1MDBfaW5mbyB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XFxuK1xcbitcXHQvKiBUbyBoYXZlIGF0b21pYyBzZXRfcnhfbW9kZSBvcGVyYXRpb24gKi9cXG4rXFx0c3BpbmxvY2tfdCBsb2NrO1xcbitcXG4rXFx0LyogVG8gaGF2ZSBhdG9taWMgb3BlcmF0aW9uIHdoZW4gdGltZSBpcyBhZGp1c3RlZCAqL1xcbitcXHRzdHJ1Y3QgbXV0ZXggcHRwX2Fkal9sb2NrO1xcbitcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDtcXG4rXFxuK1xcdC8qIGdsb2JhbCBzdGF0ZSB2YXJpYWJsZXMgKi9cXG4rXFx0Ym9vbCBldmVudF9wZW5kaW5nO1xcbitcXHR1bnNpZ25lZCBpbnQgbmRldl9mbGFncztcXG4rXFx0Ym9vbCByeF9mbGFnc191cGQ7XFxuK1xcbitcXHRzaWduZWQgbG9uZyBwb2xsX2ppZmY7XFxuK1xcbitcXHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpO1xcbitcXG4rXFx0Lyogc3RhdGlzdGljIGNvdW50ZXJzIHZhcmlhYmxlcyAqL1xcbitcXHR1NjQgc3RhdHNfZGF0YVtTMjUwMF9OVU1fU1RBVF9WQVJTXTtcXG4rXFxuK1xcdC8qIFBUUCByZWxhdGVkIHZhcmlhYmxlcyAqL1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX2Nsb2NrX2luZm87XFxuK1xcdHZvaWQgKnRjNjtcXG4rfTtcXG4rXFxuK2ludCBzMjUwMF9wdHBfcmVnaXN0ZXIoc3RydWN0IHMyNTAwX2luZm8gKnByaXYpO1xcbitcXG4rI2VuZGlmIC8qIFMyNTAwX0hXX0RFRl9IICovXFxuK1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX21haW4uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjJkODFiNDRmOGM3NmMyXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9tYWluLmNcXG5AQCAtMCwwICsxLDY0OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgMjAyNiBTZW1pY29uZHVjdG9yIENvbXBvbmVudHMgSW5kdXN0cmllcywgTExDIChcXFwib25zZW1pXFxcIikuXFxuKyAqIG9uc2VtaSdzIFMyNTAwIDEwQkFTRS1UMVMgTUFDLVBIWSBkcml2ZXJcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnFjaGlwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BsYXRmb3JtX2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0cmV2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJzMjUwMF9od19kZWYuaFxcXCJcXG4rXFxuKy8qIFMyNTAwIGZ1bmN0aW9ucyBcXHUwMDI2IGRlZmluaXRpb25zICovXFxuK1xcbisjZGVmaW5lIFMyNTAwX1NUQVRVUzBfTUFTS1xcdChTMjUwMF9TUElfU1QwX0NEUEVfQklUIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRTMjUwMF9TUElfU1QwX1RYRkNTRV9CSVQgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFMyNTAwX1NQSV9TVDBfVFRTQ0FDX0JJVCB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0UzI1MDBfU1BJX1NUMF9UVFNDQUJfQklUIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRTMjUwMF9TUElfU1QwX1RUU0NBQV9CSVQgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFMyNTAwX1NQSV9TVDBfUkVTRVRDX0JJVCB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0UzI1MDBfU1BJX1NUMF9IRFJFX0JJVCB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0UzI1MDBfU1BJX1NUMF9MT0ZFX0JJVCB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0UzI1MDBfU1BJX1NUMF9SWEJPRV9CSVQgfCBcXFxcXFxuK1xcdFxcdFxcdFxcdFMyNTAwX1NQSV9TVDBfVFhCVUVfQklUIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRTMjUwMF9TUElfU1QwX1RYQk9FX0JJVCB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0UzI1MDBfU1BJX1NUMF9UWFBFX0JJVClcXG4rXFxuKy8qIEluaXRpYWxpemVzIHRoZSBuZXQgZGV2aWNlIE1BQyBhZGRyZXNzIGJ5IHJlYWRpbmcgdGhlIFVJRCBzdG9yZWRcXG4rICogaW50byB0aGUgZGV2aWNlIGludGVybmFsIG5vbi12b2xhdGlsZSBtZW1vcnkuXFxuKyAqL1xcbitzdGF0aWMgaW50IHMyNTAwX3JlYWRfbWFjX2Zyb21fbnZtZW0oc3RydWN0IHMyNTAwX2luZm8gKnByaXYpXFxuK3tcXG4rXFx0dTE2IG1tcyA9IE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyO1xcbitcXHR1OCBhZGRyW0VUSF9BTEVOXTtcXG4rXFx0dTMyIG1hYzEgPSAwO1xcbitcXHR1MzIgbWFjMCA9IDA7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBTMjUwMF9SRUdfVlNfTUFDSUQxLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbW1zLCBcXHUwMDI2bWFjMSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBTMjUwMF9SRUdfVlNfTUFDSUQwLFxcbitcXHRcXHRcXHRcXHQgICAgICAgbW1zLCBcXHUwMDI2bWFjMCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBQcmUtcHJvZHVjdGlvbiBwYXJ0cyBtYXkgaGF2ZSAwICovXFxuK1xcdGlmIChtYWMwID09IDAgXFx1MDAyNlxcdTAwMjYgbWFjMSA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVOWElPO1xcbitcXG4rXFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi1cXHUwMDNldGM2LCBTMjUwMF9SRUdfU1BJX1BIWUlELFxcbitcXHRcXHRcXHRcXHQgICBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHZhbCA9ICh2YWwgXFx1MDAyNiBTMjUwMF9TUElfUEhZSURfT1VJX01BU0spIFxcdTAwM2VcXHUwMDNlXFxuK1xcdCAgICAgICBTMjUwMF9TUElfUEhZSURfT1VJX1NISUZUO1xcbitcXG4rXFx0LyogTWFwcGluZyBmb3IgYml0cyBmcm9tIFBIWSBJRCByZWdpc3RlciB0byBPVUkgYXMgZ2l2ZSBiZWxvdy5cXG4rXFx0ICogLSBQSFktSURbMTA6MTddIHByb3ZpZGVzIE9VSVsxNjoyM11cXG4rXFx0ICogLSBQSFktSURbMTg6MjVdIHByb3ZpZGVzIE9VSVs4OjE1XVxcbitcXHQgKiAtIFBIWS1JRFsyNjozMV0gcHJvdmlkZXMgT1VJWzI6N11cXG4rXFx0ICpcXG4rXFx0ICogSGFyZHdhcmUgcHJlc2VudHMgT1VJIHN1Y2ggYSB3YXkgdGhhdCB0aGlzIHJlcXVpcmVzIG5vdCBqdXN0XFxuK1xcdCAqIGJ5dGUgbGV2ZWwgc3dhcCwgYml0IGxldmVsIHN3YXAgaXMgbmVlZGVkIGFzIHdlbGwuXFxuK1xcdCAqL1xcbitcXHRhZGRyWzBdID0gYml0cmV2OChGSUVMRF9HRVQoUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMCwgdmFsKSk7XFxuK1xcdGFkZHJbMV0gPSBiaXRyZXY4KEZJRUxEX0dFVChTMjUwMF9TUElfUEhZSURfT1VJX01BU0sxLCB2YWwpKTtcXG4rXFx0YWRkclsyXSA9IGJpdHJldjgoRklFTERfR0VUKFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSzIsIHZhbCkpO1xcbitcXG4rXFx0YWRkclszXSA9IEZJRUxEX0dFVChTMjUwMF9WU19NQUNJRDFfQllURTNfTUFTSywgbWFjMSk7XFxuK1xcdGFkZHJbNF0gPSBGSUVMRF9HRVQoUzI1MDBfVlNfTUFDSUQwX0JZVEU0X01BU0ssIG1hYzApO1xcbitcXHRhZGRyWzVdID0gRklFTERfR0VUKFMyNTAwX1ZTX01BQ0lEMF9CWVRFNV9NQVNLLCBtYWMwKTtcXG4rXFxuK1xcdF9fZGV2X2FkZHJfc2V0KHByaXYtXFx1MDAzZW5kZXYsIGFkZHIsIEVUSF9BTEVOKTtcXG4rXFx0cHJpdi1cXHUwMDNlbmRldi1cXHUwMDNlYWRkcl9hc3NpZ25fdHlwZSA9IE5FVF9BRERSX1BFUk07XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qIFdyaXRlcyBNQUMgYWRkcmVzcyB0byBtYWNwaHkgcmVnaXN0ZXJzICovXFxuK3N0YXRpYyBpbnQgczI1MDBfc2V0X21hY19maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGNvbnN0IHU4ICptYWMpXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0dTE2IG1tcyA9IE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxO1xcbitcXHR1MzIgdmFsO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogU2V0IHVuaWNhc3QgYWRkcmVzcyBmaWx0ZXIgKi9cXG4rXFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsXFxuK1xcdFxcdFxcdFxcdFxcdFMyNTAwX1JFR19NQUNfQUREUk1BU0tMKDApLFxcbitcXHRcXHRcXHRcXHRcXHRtbXMsIDB4ZmZmZmZmZmYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsXFxuK1xcdFxcdFxcdFxcdFxcdFMyNTAwX1JFR19NQUNfQUREUk1BU0tIKDApLFxcbitcXHRcXHRcXHRcXHRcXHRtbXMsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR2YWwgPSBnZXRfdW5hbGlnbmVkX2JlMzIoXFx1MDAyNm1hY1syXSk7XFxuK1xcbitcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNixcXG4rXFx0XFx0XFx0XFx0XFx0UzI1MDBfUkVHX01BQ19BRERSRklMVEwoMCksXFxuK1xcdFxcdFxcdFxcdFxcdG1tcywgdmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHZhbCA9IFMyNTAwX01BQ19BRERSRklMVF9FTl9CSVQgfCBnZXRfdW5hbGlnbmVkX2JlMTYobWFjKTtcXG4rXFxuK1xcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNixcXG4rXFx0XFx0XFx0XFx0XFx0IFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKDApLFxcbitcXHRcXHRcXHRcXHRcXHQgbW1zLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICAgICB1MzIgaW5fYml0cywgYm9vbCBjbHIpXFxuK3tcXG4rXFx0dTE2IG1tcyA9IE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxO1xcbitcXHR1MzIgcmVnID0gUzI1MDBfUkVHX01BQ19DVFJMO1xcbitcXHR1MzIgcnZhbCA9IDA7XFxuK1xcdHUzMiB3dmFsID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsIHJlZywgbW1zLCBcXHUwMDI2cnZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoY2xyKVxcbitcXHRcXHR3dmFsID0gcnZhbCBcXHUwMDI2IH5pbl9iaXRzO1xcbitcXHRlbHNlXFxuK1xcdFxcdHd2YWwgPSBydmFsIHwgaW5fYml0cztcXG4rXFx0aWYgKHJ2YWwgIT0gd3ZhbClcXG4rXFx0XFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsIHJlZyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bW1zLCB3dmFsKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzMjUwMF9pbml0KHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBDb25maWd1cmUgTUFDLVBIWSdzIGJlaGF2aW9yICovXFxuK1xcdHZhbCA9IFMyNTAwX1NQSV9DRkcwX1NZTkNfQklUIHwgUzI1MDBfU1BJX0NGRzBfUlhDVEVfQklUIHxcXG4rXFx0ICAgICAgKFMyNTAwX1RYQ1RIUkVTSF84IFxcdTAwM2NcXHUwMDNjIFMyNTAwX1NQSV9DRkcwX1RYQ1RIUkVTSF9TSElGVCkgfFxcbitcXHQgICAgICAoUzI1MDBfQ1BTXzY0IFxcdTAwM2NcXHUwMDNjIFMyNTAwX1NQSV9DRkcwX0NQU19TSElGVCkgfFxcbitcXHQgICAgICBTMjUwMF9TUElfQ0ZHMF9GVFNTXzY0X0JJVDtcXG4rXFxuK1xcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVxcdTAwM2V0YzYsIFMyNTAwX1JFR19TUElfQ0ZHMCwgdmFsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHZhbCA9ICh1MzIpfihTMjUwMF9TUElfU1QwX1JFU0VUQ19CSVQgfFxcbitcXHRcXHQgICAgIFMyNTAwX1NQSV9TVDBfSERSRV9CSVQgfCBTMjUwMF9TUElfU1QwX0xPRkVfQklUIHxcXG4rXFx0XFx0ICAgICBTMjUwMF9TUElfU1QwX1JYQk9FX0JJVCB8IFMyNTAwX1NQSV9TVDBfVFhCT0VfQklUIHxcXG4rXFx0XFx0ICAgICBTMjUwMF9TUElfU1QwX1RYUEVfQklUKTtcXG4rXFxuK1xcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVxcdTAwM2V0YzYsIFMyNTAwX1JFR19TUElfSVJRTTAsIHZhbCk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBQcm9ncmFtIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW50byB0aGUgZGV2aWNlICovXFxuK1xcdHJldCA9IHMyNTAwX3NldF9tYWNfZmlsdGVyKHByaXYtXFx1MDAzZW5kZXYsIHByaXYtXFx1MDAzZW5kZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4rXFxuK1xcdHZhbCA9IFMyNTAwX01BQ19DVFJMX0FEUkZfQklUIHwgUzI1MDBfTUFDX0NUUkxfRkNTQV9CSVQ7XFxuK1xcbitcXHRyZXR1cm4gczI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdiwgdmFsLCBmYWxzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHMyNTAwX3NodXRkb3duKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KVxcbit7XFxuK1xcdHUzMiB2YWwgPSBTMjUwMF9NQUNfQ1RSTF9UWEVOX0JJVCB8IFMyNTAwX01BQ19DVFJMX1JYRU5fQklUO1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHByaXYtXFx1MDAzZW5kZXY7XFxuK1xcbitcXHRuZXRpZl9zdG9wX3F1ZXVlKG5kZXYpO1xcbitcXHRwaHlfc3RvcChuZGV2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0czI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdiwgdmFsLCB0cnVlKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzMjUwMF9zZXRfcHJvbWlzY3VvdXNfbW9kZShzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHJ4X2ZsYWdzKVxcbit7XFxuK1xcdHUzMiB2YWwgPSBTMjUwMF9NQUNfQ1RSTF9BRFJGX0JJVDtcXG4rXFx0Ym9vbCBjbHIgPSBmYWxzZTtcXG4rXFxuK1xcdGlmIChyeF9mbGFncyBcXHUwMDI2IElGRl9QUk9NSVNDKVxcbitcXHRcXHRjbHIgPSB0cnVlO1xcbitcXHRyZXR1cm4gczI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdiwgdmFsLCBjbHIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZShzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGludCByeF9mbGFncylcXG4re1xcbitcXHR1MTYgbW1zID0gT0FfVEM2X1BIWV9DNDVfTUFDX01NUzE7XFxuK1xcdGludCBpLCByZXQgPSAwO1xcbitcXHR1MTYgYWRkcjtcXG4rXFx0dTMyIHZhbDtcXG4rXFxuK1xcdGlmICgocnhfZmxhZ3MgXFx1MDAyNiBJRkZfQUxMTVVMVEkpIHx8XFxuK1xcdCAgICAobmV0ZGV2X21jX2NvdW50KHByaXYtXFx1MDAzZW5kZXYpIFxcdTAwM2UgUzI1MDBfTl9NQ0FTVF9GSUxURVJTKSkge1xcbitcXHRcXHQvKiBEaXNhYmxlIG11bHRpY2FzdCBmaWx0ZXIgKi9cXG4rXFx0XFx0cmV0ID0gczI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFMyNTAwX01BQ19DVFJMX01DU0ZfQklULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgdHJ1ZSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBBY2NlcHQgYWxsIG11bHRpY2FzdHMgKi9cXG4rXFx0XFx0YWRkciA9IFMyNTAwX1JFR19NQUNfQUREUk1BU0tMKDEpO1xcbitcXHRcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNiwgYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bW1zLCAwKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLSCgxKTtcXG4rXFx0XFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsIGFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG1tcywgMHgxMDApO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0YWRkciA9IFMyNTAwX1JFR19NQUNfQUREUkZJTFRMKDEpO1xcbitcXHRcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNiwgYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0bW1zLCAwKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdHZhbCA9IFMyNTAwX01BQ19BRERSRklMVF9FTl9CSVQgfCAweDAwMDAwMTAwO1xcbitcXHRcXHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEgoMSk7XFxuK1xcdFxcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBhZGRyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRtbXMsIHZhbCk7XFxuK1xcdH0gZWxzZSBpZiAobmV0ZGV2X21jX2NvdW50KHByaXYtXFx1MDAzZW5kZXYpID09IDApIHtcXG4rXFx0XFx0LyogRW5hYmxlIG11bHRpY2FzdCBmaWx0ZXIgKi9cXG4rXFx0XFx0cmV0ID0gczI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFMyNTAwX01BQ19DVFJMX01DU0ZfQklULFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgZmFsc2UpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogRGlzYWJsZSBmaWx0ZXJzICovXFxuK1xcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gUzI1MDBfTl9NQ0FTVF9GSUxURVJTOyBpKyspIHtcXG4rXFx0XFx0XFx0YWRkciA9IFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKGkpO1xcbitcXHRcXHRcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0YWRkciwgbW1zLCAwKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhO1xcbitcXHRcXHR1MzIgYWRkcmgsIGFkZHJsO1xcbitcXG4rXFx0XFx0LyogRGlzYWJsZSBtdWx0aWNhc3QgZmlsdGVyICovXFxuK1xcdFxcdHJldCA9IHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBTMjUwMF9NQUNfQ1RSTF9NQ1NGX0JJVCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IHRydWUpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0LyogRGlzYWJsZSBmaWx0ZXJzICovXFxuK1xcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYz0gUzI1MDBfTl9NQ0FTVF9GSUxURVJTOyBpKyspIHtcXG4rXFx0XFx0XFx0YWRkciA9IFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKGkpO1xcbitcXHRcXHRcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0YWRkciwgbW1zLCAwKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aSA9IDE7XFxuK1xcdFxcdG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGhhLCBwcml2LVxcdTAwM2VuZGV2KSB7XFxuK1xcdFxcdFxcdGlmIChpIFxcdTAwM2UgUzI1MDBfTl9NQ0FTVF9GSUxURVJTKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdFxcdGFkZHJoID0gUzI1MDBfTUFDX0FERFJGSUxUX0VOX0JJVCB8XFxuK1xcdFxcdFxcdFxcdCBnZXRfdW5hbGlnbmVkX2JlMTYoaGEtXFx1MDAzZWFkZHIpO1xcbitcXHRcXHRcXHRhZGRybCA9IGdldF91bmFsaWduZWRfYmUzMihcXHUwMDI2aGEtXFx1MDAzZWFkZHJbMl0pO1xcbitcXG4rXFx0XFx0XFx0YWRkciA9IFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKGkpO1xcbitcXHRcXHRcXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0YWRkciwgbW1zLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRhZGRyaCk7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRcXHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEwoaSk7XFxuK1xcdFxcdFxcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRhZGRyLCBtbXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGFkZHJsKTtcXG4rXFx0XFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdFxcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLTChpKTtcXG4rXFx0XFx0XFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdGFkZHIsIG1tcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0MHhmZmZmZmZmZik7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRcXHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSTUFTS0goaSk7XFxuK1xcdFxcdFxcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRhZGRyLCBtbXMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdDB4ZmZmZik7XFxuK1xcdFxcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdFxcdGkrKztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qIERlZmVycmVkIGZ1bmN0aW9uIGZvciBhcHBseWluZyBSWCBtb2RlIGZsYWdzIGluIG5vbi1hdG9taWMgY29udGV4dCAqL1xcbitzdGF0aWMgaW50IHMyNTAwX3J4X21vZGVfdXBkYXRlKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCByeF9mbGFncztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRyeF9mbGFncyA9IHByaXYtXFx1MDAzZW5kZXZfZmxhZ3M7XFxuK1xcdHByaXYtXFx1MDAzZXJ4X2ZsYWdzX3VwZCA9IGZhbHNlO1xcbitcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0ID0gczI1MDBfc2V0X3Byb21pc2N1b3VzX21vZGUocHJpdiwgcnhfZmxhZ3MpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHJldCA9IHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZShwcml2LCByeF9mbGFncyk7XFxuK291dDpcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgczI1MDBfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRwcml2LVxcdTAwM2VyeF9mbGFnc191cGQgPSB0cnVlO1xcbitcXHRwcml2LVxcdTAwM2VuZGV2X2ZsYWdzID0gbmRldi1cXHUwMDNlZmxhZ3M7XFxuK1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNldGhyZWFkKVxcbitcXHRcXHR3YWtlX3VwX3Byb2Nlc3MocHJpdi1cXHUwMDNldGhyZWFkKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzMjUwMF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnApXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyICphZGRyID0gcDtcXG4rXFxuK1xcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVxcdTAwM2VzYV9kYXRhKSlcXG4rXFx0XFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xcbitcXG4rXFx0ZXRoX2h3X2FkZHJfc2V0KG5kZXYsIGFkZHItXFx1MDAzZXNhX2RhdGEpO1xcbitcXHRyZXR1cm4gczI1MDBfc2V0X21hY19maWx0ZXIobmRldiwgYWRkci1cXHUwMDNlc2FfZGF0YSk7XFxuK31cXG4rXFxuK3N0YXRpYyBuZXRkZXZfdHhfdCBzMjUwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuK1xcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4re1xcbitcXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbitcXG4rXFx0cmV0dXJuIG9hX3RjNl9zdGFydF94bWl0KHByaXYtXFx1MDAzZXRjNiwgc2tiKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzMjUwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGlmcmVxICpycSxcXG4rXFx0XFx0ICAgICAgIGludCBjbWQpXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdHJldHVybiBvYV90YzZfaW9jdGwocHJpdi1cXHUwMDNldGM2LCBycSwgY21kKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgczI1MDBfcHJvY2Vzc19ldmVudHMoc3RydWN0IHMyNTAwX2luZm8gKnByaXYpXFxuK3tcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlZXZlbnRfcGVuZGluZylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlZXZlbnRfcGVuZGluZyA9IGZhbHNlO1xcbitcXG4rXFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi1cXHUwMDNldGM2LCBTMjUwMF9SRUdfU1BJX1NUMCwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJFcnJvciByZWFkaW5nIFNUMCByZWdpc3RlclxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGludCBzMjUwMF90aHJlYWRfZnVuKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBkYXRhO1xcbitcXHRib29sIHVwZGF0ZV9yeF9tb2RlID0gZmFsc2U7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHNpZ25lZCBsb25nIHRvdXQ7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0dG91dCA9IHByaXYtXFx1MDAzZXBvbGxfamlmZjtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0aWYgKHVwZGF0ZV9yeF9tb2RlKSB7XFxuK1xcdFxcdFxcdHJldCA9IHMyNTAwX3J4X21vZGVfdXBkYXRlKHByaXYpO1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0KSkge1xcbitcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VzcGktXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFxcIkZhaWxlZCB0byBzZXQgbmV3IFJYIG1vZGVcXFwiKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0aWYgKHRvdXQgPT0gMCkge1xcbitcXHRcXHRcXHR0b3V0ID0gcHJpdi1cXHUwMDNlcG9sbF9qaWZmO1xcbitcXG4rXFx0XFx0XFx0LyogRm9yY2UgY2hlY2tpbmcgdGhlIHN0YXR1cyByZWdpc3RlciAqL1xcbitcXHRcXHRcXHRwcml2LVxcdTAwM2VldmVudF9wZW5kaW5nID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0czI1MDBfcHJvY2Vzc19ldmVudHMocHJpdik7XFxuK1xcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2cHJpdi1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XFxuK1xcbitcXHRcXHR1cGRhdGVfcnhfbW9kZSA9IHByaXYtXFx1MDAzZXJ4X2ZsYWdzX3VwZDtcXG4rXFx0XFx0cmV0ID0gdXBkYXRlX3J4X21vZGU7XFxuK1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0dG91dCA9IHNjaGVkdWxlX3RpbWVvdXQodG91dCk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4rXFx0fSB3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHMyNTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdHUzMiB2YWw7XFxuK1xcbitcXHRkZXZfZGJnKFxcdTAwMjZuZGV2LVxcdTAwM2VkZXYsIFxcXCIlc1xcXCIsIFxcXCJzMjUwMF9vcGVuXFxcIik7XFxuK1xcdHBoeV9zdGFydChwcml2LVxcdTAwM2VuZGV2LVxcdTAwM2VwaHlkZXYpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldGhyZWFkID0ga3RocmVhZF9ydW4oczI1MDBfdGhyZWFkX2Z1biwgcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgRFJWX05BTUUgXFxcIi8lczolZFxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIGRldl9uYW1lKFxcdTAwMjZwcml2LVxcdTAwM2VzcGktXFx1MDAzZWRldiksXFxuK1xcdFxcdFxcdFxcdCAgIHNwaV9nZXRfY2hpcHNlbGVjdChwcml2LVxcdTAwM2VzcGksIDApKTtcXG4rXFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNldGhyZWFkKSkge1xcbitcXHRcXHRyZXQgPSBQVFJfRVJSKHByaXYtXFx1MDAzZXRocmVhZCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHZhbCA9IFMyNTAwX01BQ19DVFJMX1RYRU5fQklUIHwgUzI1MDBfTUFDX0NUUkxfUlhFTl9CSVQ7XFxuK1xcdFxcdHJldCA9IHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsIHZhbCwgZmFsc2UpO1xcbitcXG4rXFx0XFx0bmV0aWZfc3RhcnRfcXVldWUocHJpdi1cXHUwMDNlbmRldik7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzMjUwMF9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRkZXZfZGJnKFxcdTAwMjZuZGV2LVxcdTAwM2VkZXYsIFxcXCIlc1xcXCIsIFxcXCJzMjUwMF9zdG9wXFxcIik7XFxuK1xcbitcXHRzMjUwMF9zaHV0ZG93bihwcml2KTtcXG4rXFxuK1xcdGt0aHJlYWRfc3RvcChwcml2LVxcdTAwM2V0aHJlYWQpO1xcbitcXHRwcml2LVxcdTAwM2V0aHJlYWQgPSBOVUxMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgczI1MDBfaHd0c3RhbXBfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqa19jZmcpXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdG9hX3RjNl9od3RzdGFtcF9nZXQocHJpdi1cXHUwMDNldGM2LCBrX2NmZyk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHMyNTAwX2h3dHN0YW1wX3NldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRyZXR1cm4gb2FfdGM2X2h3dHN0YW1wX3NldChwcml2LVxcdTAwM2V0YzYsIGNmZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgczI1MDBfbmV0ZGV2X29wcyA9IHtcXG4rXFx0Lm5kb19vcGVuICAgICAgICAgICAgPSBzMjUwMF9vcGVuLFxcbitcXHQubmRvX3N0b3AgICAgICAgICAgICA9IHMyNTAwX3N0b3AsXFxuK1xcdC5uZG9fc3RhcnRfeG1pdCAgICAgID0gczI1MDBfc3RhcnRfeG1pdCxcXG4rXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3MgPSBzMjUwMF9zZXRfbWFjX2FkZHJlc3MsXFxuK1xcdC5uZG9fc2V0X3J4X21vZGUgICAgID0gczI1MDBfc2V0X3J4X21vZGUsXFxuK1xcdC5uZG9fZXRoX2lvY3RsICAgICAgID0gczI1MDBfaW9jdGwsXFxuK1xcdC5uZG9faHd0c3RhbXBfZ2V0ICAgID0gczI1MDBfaHd0c3RhbXBfZ2V0LFxcbitcXHQubmRvX2h3dHN0YW1wX3NldCAgICA9IHMyNTAwX2h3dHN0YW1wX3NldCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgczI1MDBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2c3BpLVxcdTAwM2VkZXY7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbitcXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdjtcXG4rXFx0dTMyIHZhbDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChzcGktXFx1MDAzZWlycSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0bmRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoZGV2LCBzaXplb2Yoc3RydWN0IHMyNTAwX2luZm8pKTtcXG4rXFx0aWYgKCFuZGV2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0cHJpdi1cXHUwMDNlbmRldiA9IG5kZXY7XFxuK1xcdHByaXYtXFx1MDAzZXNwaSA9IHNwaTtcXG4rXFx0cHJpdi1cXHUwMDNlZGV2ID0gZGV2O1xcbitcXG4rXFx0U0VUX05FVERFVl9ERVYobmRldiwgZGV2KTtcXG4rXFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2Fkal9sb2NrKTtcXG4rXFx0bmRldi1cXHUwMDNlaXJxID0gc3BpLVxcdTAwM2VpcnE7XFxuK1xcbitcXHRzcGktXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gcHJpdjtcXG4rXFx0c3BpX3NldF9kcnZkYXRhKHNwaSwgcHJpdik7XFxuK1xcbitcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnMyNTAwX25ldGRldl9vcHM7XFxuK1xcdG5kZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNnMyNTAwX2V0aHRvb2xfb3BzO1xcbitcXHRuZGV2LVxcdTAwM2VpZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUO1xcbitcXHRuZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDtcXG4rXFx0bmRldi1cXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1JYQUxMO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlcG9sbF9qaWZmID0gSFogKiA1OyAvKiBQb2xsIGludGVydmFsICovXFxuK1xcbitcXHRwcml2LVxcdTAwM2V0YzYgPSBvYV90YzZfaW5pdChzcGksIG5kZXYpO1xcbitcXHRpZiAoIXByaXYtXFx1MDAzZXRjNikge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgXFxcIk9BIFRDNiBpbml0IGZhaWxlZFxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0fVxcbitcXHRvYV90YzZfc2V0X3ZlbmQxX21tcyhwcml2LVxcdTAwM2V0YzYsIE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyKTtcXG4rXFxuK1xcdC8qIENsZWFyIFJTVFMsIGlmIHNldCAqL1xcbitcXHRvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cXHUwMDNldGM2LCBTMjUwMF9SRUdfVlNfTUlJTUlSUVMsXFxuK1xcdFxcdFxcdFxcdCBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiwgXFx1MDAyNnZhbCk7XFxuK1xcdHZhbCBcXHUwMDI2PSBNSUlNX0lSUV9TVEFUVVNfUlNUUztcXG4rXFx0aWYgKHZhbCAhPSAwKVxcbitcXHRcXHRvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXFx1MDAzZXRjNixcXG4rXFx0XFx0XFx0XFx0XFx0ICBTMjUwMF9SRUdfVlNfTUlJTUlSUVMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgTUlJTV9JUlFfU1RBVFVTX1JTVFMpO1xcbitcXG4rXFx0LyogQWNrbm93bGVkZ2UgYWxsIElSUSBzdGF0dXMgYml0cyAqL1xcbitcXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcihwcml2LVxcdTAwM2V0YzYsIFMyNTAwX1JFR19TUElfU1QwLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0dTMyIG1hc2sgPSBTMjUwMF9TVEFUVVMwX01BU0s7XFxuK1xcbitcXHRcXHR2YWwgXFx1MDAyNj0gbWFzaztcXG4rXFx0XFx0b2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXRjNiwgUzI1MDBfUkVHX1NQSV9TVDAsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IGRldmljZV9nZXRfZXRoZGV2X2FkZHJlc3MocHJpdi1cXHUwMDNlZGV2LCBuZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0ID0gczI1MDBfcmVhZF9tYWNfZnJvbV9udm1lbShwcml2KTtcXG4rXFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5kZXYpO1xcbitcXHRcXHRkZXZfd2FybihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIFxcXCJVc2luZyByYW5kb20gTUFDIGFkZHJlc3MgJXBNXFxcIixcXG4rXFx0XFx0XFx0IG5kZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gczI1MDBfaW5pdChwcml2KTtcXG4rXFx0aWYgKHVubGlrZWx5KHJldCkpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2c3BpLVxcdTAwM2VkZXYsIFxcXCJmYWlsZWQgdG8gczI1MDBfaW5pdCB0aGUgZGV2aWNlXFxcIik7XFxuK1xcdFxcdGdvdG8gZXJyX3JlZ19yZWFkO1xcbitcXHR9XFxuK1xcbitcXHQvKiBDb25maWd1cmUgUFRQIGlmIHRoZSBtb2RlbCBzdXBwb3J0cyBpdCAqL1xcbitcXHRyZXQgPSBzMjUwMF9wdHBfcmVnaXN0ZXIocHJpdik7XFxuK1xcdGlmICh1bmxpa2VseShyZXQpKVxcbitcXHRcXHRnb3RvIGVycl9yZWdfcmVhZDtcXG4rXFxuK1xcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byByZWdpc3RlciBuZXRkZXZcXFxcblxcXCIpO1xcbitcXHRcXHRyZXQgPSAtRU5PREVWO1xcbitcXG4rXFx0XFx0Z290byBlcnJfcmVnX3JlYWQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVnX3JlYWQ6XFxuK1xcdGRldl9lcnIoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBcXFwiY291bGQgbm90IGluaXRpYWxpemUgbWFjcGh5XFxcIik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHMyNTAwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxcbit7XFxuK1xcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gc3BpLVxcdTAwM2VkZXYucGxhdGZvcm1fZGF0YTtcXG4rXFxuK1xcdGRldl9kYmcoXFx1MDAyNnByaXYtXFx1MDAzZW5kZXYtXFx1MDAzZWRldiwgXFxcIiVzXFxcIiwgXFxcInMyNTAwX3JlbW92ZVxcXCIpO1xcbitcXG4rXFx0b2FfdGM2X3B0cF91bnJlZ2lzdGVyKHByaXYtXFx1MDAzZXRjNik7XFxuK1xcdHVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtXFx1MDAzZW5kZXYpO1xcbitcXHRvYV90YzZfZXhpdChwcml2LVxcdTAwM2V0YzYpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBzMjUwMF9vZl9tYXRjaFtdID0ge1xcbitcXHR7IC5jb21wYXRpYmxlID0gXFxcIm9ubm4sczI1MDBcXFwiIH0sXFxuK1xcdHsgfVxcbit9O1xcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBzMjUwMF9vZl9tYXRjaCk7XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHNwaV9kZXZpY2VfaWQgczI1MDBfaWRzW10gPSB7XFxuK1xcdHsgXFxcInMyNTAwXFxcIiB9LFxcbitcXHR7IH1cXG4rfTtcXG4rTU9EVUxFX0RFVklDRV9UQUJMRShzcGksIHMyNTAwX2lkcyk7XFxuK1xcbitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgczI1MDBfZHJpdmVyID0ge1xcbitcXHQuZHJpdmVyID0ge1xcbitcXHRcXHQubmFtZSA9IERSVl9OQU1FLFxcbitcXHRcXHQub2ZfbWF0Y2hfdGFibGUgPSBzMjUwMF9vZl9tYXRjaCxcXG4rXFx0fSxcXG4rXFx0LnByb2JlID0gczI1MDBfcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSBzMjUwMF9yZW1vdmUsXFxuK1xcdC5pZF90YWJsZSA9IHMyNTAwX2lkcyxcXG4rfTtcXG4rbW9kdWxlX3NwaV9kcml2ZXIoczI1MDBfZHJpdmVyKTtcXG4rXFxuK01PRFVMRV9BVVRIT1IoXFxcIlBpZXJnaW9yZ2lvIEJlcnV0byBcXHUwMDNjcGllci5iZXJ1dG9Ab25zZW1pLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiU2VsdmEgUmFqYWdvcGFsIFxcdTAwM2NzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb21cXHUwMDNlXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwib25zZW1pIE1BQ1BIWSBldGhlcm5ldCBkcml2ZXJcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfcHRwLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43ZGE2NjBjYjViMTkwYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfcHRwLmNcXG5AQCAtMCwwICsxLDI1MCBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbisvKlxcbisgKiBDb3B5cmlnaHQgMjAyNiBTZW1pY29uZHVjdG9yIENvbXBvbmVudHMgSW5kdXN0cmllcywgTExDIChcXFwib25zZW1pXFxcIikuXFxuKyAqIG9uc2VtaSdzIFMyNTAwIDEwQkFTRS1UMVMgTUFDLVBIWSBkcml2ZXJcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXFwiczI1MDBfaHdfZGVmLmhcXFwiXFxuK1xcbitzdGF0aWMgaW50IHMyNTAwX3B0cF9nZXRfdGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxcbitcXHRcXHRcXHRcXHRzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCAqcHRwX3N0cylcXG4re1xcbitcXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCBzMjUwMF9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcHRwX2Nsb2NrX2luZm8pO1xcbitcXHR1MzIgZGF0YVsyXTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhwdHBfc3RzKTtcXG4rXFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyhwcml2LVxcdTAwM2V0YzYsXFxuK1xcdFxcdFxcdFxcdFxcdFMyNTAwX1JFR19WU19QVFBfU0VDLFxcbitcXHRcXHRcXHRcXHRcXHRPQV9UQzZfUEhZX0M0NV9WU19NTVMxMixcXG4rXFx0XFx0XFx0XFx0XFx0XFx1MDAyNmRhdGFbMF0sIDIpO1xcbitcXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHB0cF9zdHMpO1xcbitcXG4rXFx0aWYgKCFyZXQpIHtcXG4rXFx0XFx0dHMtXFx1MDAzZXR2X3NlYyA9IGRhdGFbMF07XFxuK1xcdFxcdHRzLVxcdTAwM2V0dl9uc2VjID0gZGF0YVsxXTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBzMjUwMF9wdHBfc2V0X3RpbWU2NChzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxcbit7XFxuK1xcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHMyNTAwX2luZm8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBwdHBfY2xvY2tfaW5mbyk7XFxuK1xcdHUzMiBkYXRhWzJdO1xcbitcXG4rXFx0aWYgKHRzLVxcdTAwM2V0dl9zZWMgXFx1MDAzZT0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMzIpKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFxuK1xcdGRhdGFbMF0gPSAodTMyKXRzLVxcdTAwM2V0dl9zZWM7XFxuK1xcdC8qIGJpdCAzMSA9IGV4ZWN1dGUgc2V0IGNvbW1hbmQgKi9cXG4rXFx0ZGF0YVsxXSA9IHRzLVxcdTAwM2V0dl9uc2VjIHwgQklUKDMxKTtcXG4rXFxuK1xcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJzX21tcyhwcml2LVxcdTAwM2V0YzYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgUzI1MDBfUkVHX1ZTX1BUUF9TRVRTRUMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgXFx1MDAyNmRhdGFbMF0sIDIpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHMyNTAwX3B0cF9hZGpmaW5lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLCBsb25nIHNjYWxlZF9wcG0pXFxuK3tcXG4rXFx0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3QgczI1MDBfaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIHB0cF9jbG9ja19pbmZvKTtcXG4rXFx0dTMyIHNpZ25fYml0ID0gMDtcXG4rXFx0bG9uZyBhZGo7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdHU2NCBwcG07XFxuK1xcbitcXHRpZiAoc2NhbGVkX3BwbSBcXHUwMDNjIDApIHtcXG4rXFx0XFx0Lyogc3BsaXQgc2lnbiAvIG1vZCAqL1xcbitcXHRcXHRzaWduX2JpdCA9IDFVIFxcdTAwM2NcXHUwMDNjIDMxO1xcbitcXHRcXHRzY2FsZWRfcHBtID0gfnNjYWxlZF9wcG0gKyAxO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBDb252ZXJ0IHVuc2lnbmVkIHNjYWxlZF9wcG0gdG8gYXR0by1zZWNvbmRzIHBlciBjbG9jayBjeWNsZXMuXFxuK1xcdCAqIFRoZSBzY2FsZWRfcHBtIGZvcm1hdCBpcyBReC4xNiAtLVxcdTAwM2UgMSBsc2IgPSAxLzY1NTM2IHBwbS5cXG4rXFx0ICogVGhlIGNsb2NrIHBlcmlvZCBvZiB0aGUgUzI1MDAgaXMgOG5zICgxMjUgTUh6KSwgc28gMSBsc2Igb2ZcXG4rXFx0ICogYWRqIHJlZ2lzdGVyIExTQiBpcyAxIGF0dG8tc2VjIC8gOG5zID0gMC4wMDAxMjUgcHBtLlxcbitcXHQgKiBSZXByZXNlbnRlZCBpbiBReC4xNiBmb3JtYXQsIHRoaXMgaXMgMC4wMDAxMjUgKiAyXjE2ID0gOCguMTkyKVxcbitcXHQgKiBUbyBjb252ZXJ0IHNjYWxlZF9wcG0gaW50byBhIHJlZ2lzdGVyIHZhbHVlIHdlIG5lZWQgdG8gZGl2aWRlXFxuK1xcdCAqIGl0IGJ5IHRoZSBMU0IgdmFsdWUsIGhlbmNlIGFkaiA9IChzY2FsZWRfcHBtICogMTAwMCkgLyA4MTkyIHRvXFxuK1xcdCAqIG1pbmltaXplIHRoZSBwcmVjaXNpb24gbG9zcyBkdWUgdG8gdGhlIGludGVnZXIgYXJpdGhtZXRpYy5cXG4rXFx0ICogVGhhdCBmdXJ0aGVyIHJlZHVjZXMgdG8gKHNjYWxlZF9wcG0gKiAxMjUpIC8gMTAyNC5cXG4rXFx0ICovXFxuK1xcdHBwbSA9ICh1NjQpc2NhbGVkX3BwbSAqIDEyNTtcXG4rXFx0ZG9fZGl2KHBwbSwgMTAyNCk7XFxuK1xcdGFkaiA9IChsb25nKXBwbTtcXG4rXFxuK1xcdC8qIGNoZWNrIG92ZXJmbG93ICovXFxuK1xcdGlmIChhZGogXFx1MDAzZT0gKDFMIFxcdTAwM2NcXHUwMDNjIDI4KSlcXG4rXFx0XFx0cmV0dXJuIC1FUkFOR0U7XFxuK1xcbitcXHR2YWwgPSAodTMyKWFkaiB8IHNpZ25fYml0O1xcbitcXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVxcdTAwM2V0YzYsIFMyNTAwX1JFR19WU19QVFBfQURKLFxcbitcXHRcXHRcXHRcXHRcXHQgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIsIHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgczI1MDBfdXNlX3NldHRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXFxuK1xcdFxcdFxcdCAgICAgc3RydWN0IHRpbWVzcGVjNjQgbm93LCBzNjQgcmVtKVxcbit7XFxuK1xcdHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCBzdHM7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IGRlbHRhX3RzO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0YXJnZXQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtZW1zZXQoXFx1MDAyNnN0cywgMCwgc2l6ZW9mKHN0cykpO1xcbitcXHRyZXQgPSBwdHAtXFx1MDAzZWdldHRpbWV4NjQocHRwLCBcXHUwMDI2bm93LCBcXHUwMDI2c3RzKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0aWYgKHJlbSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdGRlbHRhX3RzID0gbnNfdG9fdGltZXNwZWM2NChyZW0pO1xcbitcXHRcXHR0YXJnZXQgPSB0aW1lc3BlYzY0X2FkZChub3csIGRlbHRhX3RzKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0ZGVsdGFfdHMgPSBuc190b190aW1lc3BlYzY0KC1yZW0pO1xcbitcXHRcXHR0YXJnZXQgPSB0aW1lc3BlYzY0X3N1Yihub3csIGRlbHRhX3RzKTtcXG4rXFx0fVxcbitcXHRpZiAodGFyZ2V0LnR2X3NlYyBcXHUwMDNjIDAgfHxcXG4rXFx0ICAgIHRhcmdldC50dl9zZWMgXFx1MDAzZT0gKDFVTEwgXFx1MDAzY1xcdTAwM2MgMzIpKVxcbitcXHRcXHRyZXR1cm4gLUVSQU5HRTtcXG4rXFx0cmV0dXJuIHB0cC1cXHUwMDNlc2V0dGltZTY0KHB0cCwgXFx1MDAyNnRhcmdldCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgczI1MDBfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcXG4re1xcbitcXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCBzMjUwMF9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgcHRwX2Nsb2NrX2luZm8pO1xcbitcXHRzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgc3RzO1xcbitcXHRzdHJ1Y3QgdGltZXNwZWM2NCB0YXJnZXQ7XFxuK1xcdHVuc2lnbmVkIGludCBwZXJpb2RfbXM7XFxuK1xcdHN0cnVjdCB0aW1lc3BlYzY0IG5vdztcXG4rXFx0czY0IHNjYWxlZF9wcG0sIHJlbTtcXG4rXFx0aW50IG1heF9pdGVycyA9IDM7XFxuK1xcdHM2NCB0YXJnZXRfbnM7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRzNjQgbm93X25zO1xcbitcXHRzNjQgbnVtO1xcbitcXHRzNjQgZGVuO1xcbitcXG4rXFx0aWYgKCFwdHApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogTm90aGluZyB0byBkbyAqL1xcbitcXHRpZiAoZGVsdGEgPT0gMClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFxcdTAwMjZwcml2LVxcdTAwM2VwdHBfYWRqX2xvY2spKVxcbitcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbitcXG4rXFx0LyogVHJ5IHRvIHNsZXcgdGhlIGNsb2NrIHVzaW5nIGFkamZpbmUgZm9yIGJldHRlciBhY2N1cmFjeS5cXG4rXFx0ICogRm9yIGxhcmdlIGFkanVzdG1lbnRzIGZhbGwgYmFjayB0byBzZXR0aW5nIHRpbWUgZGlyZWN0bHkuXFxuK1xcdCAqL1xcbitcXHRyZW0gPSBkZWx0YTtcXG4rXFxuK1xcdHdoaWxlIChyZW0gIT0gMCBcXHUwMDI2XFx1MDAyNiBtYXhfaXRlcnMtLSkge1xcbitcXHRcXHRzNjQgYWJzX2RlbHRhID0gcmVtIFxcdTAwM2UgMCA/IHJlbSA6IC1yZW07XFxuK1xcbitcXHRcXHQvKiBJZiB0aGUgYWRqdXN0bWVudCBpcyB2ZXJ5IGxhcmdlLCBtb3JlIHRoYW4gMSBzZWNvbmQsXFxuK1xcdFxcdCAqIHVzZSBzZXR0aW1lIHRvIGF2b2lkIHZlcnkgbG9uZyBzbGV3aW5nIHBlcmlvZHMgb3JcXG4rXFx0XFx0ICogZXhjZXNzaXZlIGZyZXF1ZW5jeSBvZmZzZXRzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGFic19kZWx0YSBcXHUwMDNlIDEwMDAwMDAwMDBMTCkge1xcbitcXHRcXHRcXHRyZXQgPSBzMjUwMF91c2Vfc2V0dGltZShwdHAsIG5vdywgcmVtKTtcXG4rXFx0XFx0XFx0cmVtID0gMDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIENob29zZSBhIHNsZXdpbmcgcGVyaW9kIGRlcGVuZGluZyBvbiBtYWduaXR1ZGUgKi9cXG4rXFx0XFx0aWYgKGFic19kZWx0YSBcXHUwMDNjPSAxMDAwMDAwTEwpIC8qIFxcdTAwM2M9IDFtcyAqL1xcbitcXHRcXHRcXHRwZXJpb2RfbXMgPSAxMDAwOyAvKiAxIHMgKi9cXG4rXFx0XFx0ZWxzZSBpZiAoYWJzX2RlbHRhIFxcdTAwM2M9IDEwMDAwMDAwMExMKSAvKiBcXHUwMDNjPSAxMDBtcyAqL1xcbitcXHRcXHRcXHRwZXJpb2RfbXMgPSAxMDAwMDsgLyogMTAgcyAqL1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBlcmlvZF9tcyA9IDYwMDAwOyAvKiA2MCBzICovXFxuK1xcbitcXHRcXHQvKiBDb21wdXRlIGN1cnJlbnQgdGltZSBhbmQgZml4ZWQgdGFyZ2V0IGZvciB0aGlzXFxuK1xcdFxcdCAqIGl0ZXJhdGlvblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bWVtc2V0KFxcdTAwMjZzdHMsIDAsIHNpemVvZihzdHMpKTtcXG4rXFx0XFx0cmV0ID0gcHRwLVxcdTAwM2VnZXR0aW1leDY0KHB0cCwgXFx1MDAyNm5vdywgXFx1MDAyNnN0cyk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKHJlbSBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHR0YXJnZXQgPSB0aW1lc3BlYzY0X2FkZChub3csXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG5zX3RvX3RpbWVzcGVjNjQocmVtKSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0dGFyZ2V0ID0gdGltZXNwZWM2NF9zdWIobm93LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRuc190b190aW1lc3BlYzY0KC1yZW0pKTtcXG4rXFxuK1xcdFxcdC8qIENvbXB1dGUgc2NhbGVkX3BwbSAoUXguMTYpLiBzY2FsZWRfcHBtID0gcHBtICogMl4xNlxcbitcXHRcXHQgKiBwcG0gPSAoZGVsdGFfc2Vjb25kcyAvIHBlcmlvZF9zZWNvbmRzKSAqIDFlNlxcbitcXHRcXHQgKiA9XFx1MDAzZSBzY2FsZWRfcHBtID0gZGVsdGFfbnMgKiA2NTUzNiAvIChwZXJpb2RfbXMgKiAxMDAwKVxcbitcXHRcXHQgKi9cXG4rXFx0XFx0bnVtID0gcmVtICogNjU1MzZMTDtcXG4rXFx0XFx0ZGVuID0gKHM2NClwZXJpb2RfbXMgKiAxMDAwTEw7XFxuK1xcbitcXHRcXHQvKiBJbnRlZ2VyIGRpdmlzaW9uIHJvdW5kcyB0b3dhcmQgemVybzsga2VlcCBzaWduIGluXFxuK1xcdFxcdCAqIG51bWVyYXRvclxcbitcXHRcXHQgKi9cXG4rXFx0XFx0c2NhbGVkX3BwbSA9IGRpdl9zNjQobnVtLCBkZW4pO1xcbitcXG4rXFx0XFx0LyogQXBwbHkgZnJlcXVlbmN5IGFkanVzdG1lbnQgKi9cXG4rXFx0XFx0cmV0ID0gcHRwLVxcdTAwM2VhZGpmaW5lKHB0cCwgKGxvbmcpc2NhbGVkX3BwbSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0LyogU2xlZXAgZm9yIHRoZSBzbGV3IHBlcmlvZCAoaW50ZXJydXB0aWJsZSkuIElmXFxuK1xcdFxcdCAqIGludGVycnVwdGVkLCBjbGVhciB0aGUgYWRqZmluZSBhbmQgcmV0dXJuIC1FSU5UUi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChtc2xlZXBfaW50ZXJydXB0aWJsZShwZXJpb2RfbXMpKSB7XFxuK1xcdFxcdFxcdC8qIENsZWFyIGFkamZpbmUgKi9cXG4rXFx0XFx0XFx0cHRwLVxcdTAwM2VhZGpmaW5lKHB0cCwgMCk7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5UUjtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qIENsZWFyIGFkamZpbmUgYW5kIG1lYXN1cmUgcmVtYWluaW5nIG9mZnNldCAqL1xcbitcXHRcXHRwdHAtXFx1MDAzZWFkamZpbmUocHRwLCAwKTtcXG4rXFxuK1xcdFxcdG1lbXNldChcXHUwMDI2c3RzLCAwLCBzaXplb2Yoc3RzKSk7XFxuK1xcdFxcdHJldCA9IHB0cC1cXHUwMDNlZ2V0dGltZXg2NChwdHAsIFxcdTAwMjZub3csIFxcdTAwMjZzdHMpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIHJlbWFpbmluZyA9IHRhcmdldCAtIG5vdyAoaW4gbnMpICovXFxuK1xcdFxcdHRhcmdldF9ucyA9IHRpbWVzcGVjNjRfdG9fbnMoXFx1MDAyNnRhcmdldCk7XFxuK1xcdFxcdG5vd19ucyA9IHRpbWVzcGVjNjRfdG9fbnMoXFx1MDAyNm5vdyk7XFxuK1xcdFxcdHJlbSA9IHRhcmdldF9ucyAtIG5vd19ucztcXG4rXFxuK1xcdFxcdC8qIElmIHJlbWFpbmluZyBpcyBzbWFsbCAoXFx1MDAzYyAxdXMpLCBmaW5pc2ggKi9cXG4rXFx0XFx0aWYgKHJlbSBcXHUwMDNlIC0xMDAwIFxcdTAwMjZcXHUwMDI2IHJlbSBcXHUwMDNjIDEwMDApXFxuK1xcdFxcdFxcdHJlbSA9IDA7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2Fkal9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IHMyNTAwX3B0cF9yZWdpc3RlcihzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gPSBcXHUwMDI2cHJpdi1cXHUwMDNlcHRwX2Nsb2NrX2luZm87XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpbmZvLVxcdTAwM2VtYXhfYWRqID0gMTAwMDAwMDAwO1xcbitcXHRpbmZvLVxcdTAwM2Vvd25lciA9IFRISVNfTU9EVUxFO1xcbitcXHRpbmZvLVxcdTAwM2VhZGpmaW5lID0gczI1MDBfcHRwX2FkamZpbmU7XFxuK1xcdGluZm8tXFx1MDAzZWdldHRpbWV4NjQgPSBzMjUwMF9wdHBfZ2V0X3RpbWU2NDtcXG4rXFx0aW5mby1cXHUwMDNlc2V0dGltZTY0ID0gczI1MDBfcHRwX3NldF90aW1lNjQ7XFxuK1xcdGluZm8tXFx1MDAzZWFkanRpbWUgPSBzMjUwMF9wdHBfYWRqdGltZTtcXG4rXFxuK1xcdHJldCA9IG9hX3RjNl9wdHBfcmVnaXN0ZXIocHJpdi1cXHUwMDNldGM2LCBpbmZvKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlc3BpLVxcdTAwM2VkZXYsIFxcXCJQVFAgcmVnaXN0cmF0aW9uIGZhaWxlZFxcXCIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jIGIvZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuY1xcbmluZGV4IDg4MjU1ZTkyYjRjZGJkLi4wMWVhMmU4ZGQyNTNiYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvZHA4Mzg2Ny5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuY1xcbkBAIC05OTEsMTUgKzk5MSw2IEBAIHN0YXRpYyB2b2lkIGRwODM4NjdfbGlua19jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdH1cXG4gfVxcbiBcXG4tc3RhdGljIGludCBkcDgzODY3X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpXFxuLXtcXG4tXFx0aWYgKGVuYWJsZSBcXHUwMDI2XFx1MDAyNiBzcGVlZClcXG4tXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi1cXG4tXFx0cmV0dXJuIHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9MT09QQkFDSyxcXG4tXFx0XFx0XFx0ICBlbmFibGUgPyBCTUNSX0xPT1BCQUNLIDogMCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnRcXG4gZHA4Mzg2N19sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4gXFx0XFx0XFx0ICAgdTggaW5kZXgsIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcylcXG5AQCAtMTIwNCw3ICsxMTk1LDcgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIGRwODM4NjdfZHJpdmVyW10gPSB7XFxuIFxcdFxcdC5yZXN1bWVcXHRcXHQ9IGRwODM4NjdfcmVzdW1lLFxcbiBcXG4gXFx0XFx0LmxpbmtfY2hhbmdlX25vdGlmeSA9IGRwODM4NjdfbGlua19jaGFuZ2Vfbm90aWZ5LFxcbi1cXHRcXHQuc2V0X2xvb3BiYWNrXFx0PSBkcDgzODY3X2xvb3BiYWNrLFxcbitcXHRcXHQuc2V0X2xvb3BiYWNrXFx0PSBnZW5waHlfbG9vcGJhY2tfZml4ZWRfc3BlZWQsXFxuIFxcbiBcXHRcXHQubGVkX2JyaWdodG5lc3Nfc2V0ID0gZHA4Mzg2N19sZWRfYnJpZ2h0bmVzc19zZXQsXFxuIFxcdFxcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0gZHA4Mzg2N19sZWRfaHdfaXNfc3VwcG9ydGVkLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jIGIvZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuY1xcbmluZGV4IGU2MDFkNTZiMjUwN2Y5Li4wYzRkYzcwNjQxZDhiMCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuY1xcbkBAIC01MDYsMzQgKzUwNiw2IEBAIHN0YXRpYyBpbnQgbGFuODZ4eF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tLyogT1BFTiBBbGxpYW5jZSAxMEJBU0UtVDF4IGNvbXBsaWFuY2UgTUFDLVBIWXMgd2lsbCBoYXZlIGJvdGggQzIyIGFuZFxcbi0gKiBDNDUgcmVnaXN0ZXJzIHNwYWNlLiBJZiB0aGUgUEhZIGlzIGRpc2NvdmVyZWQgdmlhIEMyMiBidXMgcHJvdG9jb2wgaXQgYXNzdW1lc1xcbi0gKiBpdCB1c2VzIEMyMiBwcm90b2NvbCBhbmQgYWx3YXlzIHVzZXMgQzIyIHJlZ2lzdGVycyBpbmRpcmVjdCBhY2Nlc3MgdG8gYWNjZXNzXFxuLSAqIEM0NSByZWdpc3RlcnMuIFRoaXMgaXMgYmVjYXVzZSwgd2UgZG9uJ3QgaGF2ZSBhIGNsZWFuIHNlcGFyYXRpb24gYmV0d2Vlblxcbi0gKiBDMjIvQzQ1IHJlZ2lzdGVyIHNwYWNlIGFuZCBDMjIvQzQ1IE1ESU8gYnVzIHByb3RvY29scy4gUmVzdWx0aW5nLCBQSFkgQzQ1XFxuLSAqIHJlZ2lzdGVycyBkaXJlY3QgYWNjZXNzIGNhbid0IGJlIHVzZWQgd2hpY2ggY2FuIHNhdmUgbXVsdGlwbGUgU1BJIGJ1cyBhY2Nlc3MuXFxuLSAqIFRvIHN1cHBvcnQgdGhpcyBmZWF0dXJlLCBzZXQgLnJlYWRfbW1kLy53cml0ZV9tbWQgaW4gdGhlIFBIWSBkcml2ZXIgdG8gY2FsbFxcbi0gKiAucmVhZF9jNDUvLndyaXRlX2M0NSBpbiB0aGUgT1BFTiBBbGxpYW5jZSBmcmFtZXdvcmtcXG4tICogZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2LmNcXG4tICovXFxuLXN0YXRpYyBpbnQgbGFuODY1eF9waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSxcXG4tXFx0XFx0XFx0XFx0dTE2IHJlZ251bSlcXG4te1xcbi1cXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cztcXG4tXFx0aW50IGFkZHIgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkcjtcXG4tXFxuLVxcdHJldHVybiBfX21kaW9idXNfYzQ1X3JlYWQoYnVzLCBhZGRyLCBkZXZudW0sIHJlZ251bSk7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgbGFuODY1eF9waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sXFxuLVxcdFxcdFxcdFxcdCB1MTYgcmVnbnVtLCB1MTYgdmFsKVxcbi17XFxuLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbi1cXHRpbnQgYWRkciA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcbi1cXG4tXFx0cmV0dXJuIF9fbWRpb2J1c19jNDVfd3JpdGUoYnVzLCBhZGRyLCBkZXZudW0sIHJlZ251bSwgdmFsKTtcXG4tfVxcbi1cXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1pY3JvY2hpcF90MXNfZHJpdmVyW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9MQU44NjdYX1JFVkIxKSxcXG5AQCAtNTg0LDggKzU1Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtaWNyb2NoaXBfdDFzX2RyaXZlcltdID0ge1xcbiBcXHRcXHQuZmVhdHVyZXMgICAgICAgICAgID0gUEhZX0JBU0lDX1QxU19QMk1QX0ZFQVRVUkVTLFxcbiBcXHRcXHQuY29uZmlnX2luaXQgICAgICAgID0gbGFuODY1eF9yZXZiX2NvbmZpZ19pbml0LFxcbiBcXHRcXHQucmVhZF9zdGF0dXMgICAgICAgID0gbGFuODZ4eF9yZWFkX3N0YXR1cyxcXG4tXFx0XFx0LnJlYWRfbW1kICAgICAgICAgICA9IGxhbjg2NXhfcGh5X3JlYWRfbW1kLFxcbi1cXHRcXHQud3JpdGVfbW1kICAgICAgICAgID0gbGFuODY1eF9waHlfd3JpdGVfbW1kLFxcbitcXHRcXHQucmVhZF9tbWQgICAgICAgICAgID0gZ2VucGh5X3BoeV9yZWFkX21tZCxcXG4rXFx0XFx0LndyaXRlX21tZCAgICAgICAgICA9IGdlbnBoeV9waHlfd3JpdGVfbW1kLFxcbiBcXHRcXHQuZ2V0X3BsY2FfY2ZnXFx0ICAgID0gZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcsXFxuIFxcdFxcdC5zZXRfcGxjYV9jZmdcXHQgICAgPSBsYW44Nnh4X3BsY2Ffc2V0X2NmZyxcXG4gXFx0XFx0LmdldF9wbGNhX3N0YXR1cyAgICA9IGdlbnBoeV9jNDVfcGxjYV9nZXRfc3RhdHVzLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbmNuMjYwMDAuYyBiL2RyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jXFxuaW5kZXggY2FiZGQ4M2M2MTRmMGQuLmFmYWZhODFkYzIyYjgyIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L25jbjI2MDAwLmNcXG5AQCAtMiw3ICsyLDcgQEBcXG4gLypcXG4gICogIERyaXZlciBmb3IgdGhlIG9uc2VtaSAxMEJBU0UtVDFTIE5DTjI2MDAwIFBIWXMgZmFtaWx5LlxcbiAgKlxcbi0gKiBDb3B5cmlnaHQgMjAyMiBvbnNlbWlcXG4rICogQ29weXJpZ2h0IDIwMjYgb25zZW1pXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbkBAIC0xNCw2ICsxNCw3IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwibWRpby1vcGVuLWFsbGlhbmNlLmhcXFwiXFxuIFxcbisjZGVmaW5lIFBIWV9JRF9TMjUwMFxcdFxcdFxcdDB4MTgwRkY0MTFcXG4gI2RlZmluZSBQSFlfSURfTkNOMjYwMDBcXHRcXHRcXHQweDE4MEZGNUExXFxuIFxcbiAjZGVmaW5lIE5DTjI2MDAwX1JFR19JUlFfQ1RMICAgICAgICAgICAgMTZcXG5AQCAtMzUsMTUgKzM2LDI0IEBAXFxuIFxcbiAjZGVmaW5lIFRPX1RNUl9ERUZBVUxUXFx0XFx0XFx0MzJcXG4gXFxuKyNkZWZpbmUgTkNOMjYwMDBfUkVHX1BIWUNGRzFcXHRcXHQweDgwMDFcXG4rI2RlZmluZSBOQ04yNjAwMF9QSFlDRkcxX0VOSVxcdFxcdEJJVCg3KVxcbisjZGVmaW5lIE5DTjI2MDAwX1BIWUNGRzFfRU5JX01BU0tcXHRCSVQoNylcXG4rXFxuIHN0YXRpYyBpbnQgbmNuMjYwMDBfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuIFxcdC8qIEhXIGJ1ZyB3b3JrYXJvdW5kOiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgUExDQSBUT19USU1FUiBzaG91bGQgYmVcXG4gXFx0ICogMzIsIHdoZXJlIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgTkNOMjYwMDAgcmVwb3J0cyAyNC4gVGhpcyB3aWxsIGJlXFxuIFxcdCAqIGZpeGVkIGluIGZ1dHVyZSBQSFkgdmVyc2lvbnMuIEZvciB0aGUgdGltZSBiZWluZywgd2UgZm9yY2UgdGhlXFxuIFxcdCAqIGNvcnJlY3QgZGVmYXVsdCBoZXJlLlxcbiBcXHQgKi9cXG4tXFx0cmV0dXJuIHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMiwgTURJT19PQVRDMTRfUExDQV9UT1RNUixcXG4tXFx0XFx0XFx0ICAgICBUT19UTVJfREVGQVVMVCk7XFxuK1xcdGlmIChwaHlfaWRfY29tcGFyZV9tb2RlbChwaHlkZXYtXFx1MDAzZWRydi1cXHUwMDNlcGh5X2lkLCBQSFlfSURfTkNOMjYwMDApKVxcbitcXHRcXHRyZXQgPSBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsXFxuK1xcdFxcdFxcdFxcdCAgICBNRElPX09BVEMxNF9QTENBX1RPVE1SLFxcbitcXHRcXHRcXHRcXHQgICAgVE9fVE1SX0RFRkFVTFQpO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG5jbjI2MDAwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuQEAgLTEwMCw2ICsxMTAsMjQgQEAgc3RhdGljIGludCBuY24yNjAwMF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogSW50ZXJjZXB0IFBMQ0EgZW5hYmxlL2Rpc2FibGUgcmVxdWVzdCB0b1xcbisgKiBzZXQgdGhlIHByb3ByaWV0YXJ5LCBFTkkgbW9kZSBhY2NvcmRpbmdseVxcbisgKi9cXG4rc3RhdGljIGludCBuY24yNjAwMF9jNDVfcGxjYV9zZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpXFxuK3tcXG4rXFx0aW50IHJldCA9IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHBoeWRldiwgcGxjYV9jZmcpO1xcbitcXHR1MTYgZW5pX2NmZyA9IDA7XFxuK1xcbitcXHRpZiAocmV0IHx8IHBsY2FfY2ZnLVxcdTAwM2VlbmFibGVkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGVuaV9jZmcgPSAocGxjYV9jZmctXFx1MDAzZWVuYWJsZWQpID8gTkNOMjYwMDBfUEhZQ0ZHMV9FTkkgOiAwO1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcXG4rXFx0XFx0XFx0ICAgICAgTkNOMjYwMDBfUkVHX1BIWUNGRzEsXFxuK1xcdFxcdFxcdCAgICAgIE5DTjI2MDAwX1BIWUNGRzFfRU5JX01BU0ssIGVuaV9jZmcpO1xcbit9XFxuK1xcbiBzdGF0aWMgaXJxcmV0dXJuX3QgbmNuMjYwMDBfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdGludCByZXQ7XFxuQEAgLTExNyw4ICsxNDUsOCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgbmNuMjYwMDBfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiBcXG4gc3RhdGljIGludCBuY24yNjAwMF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuLVxcdGludCByZXQ7XFxuIFxcdHUxNiBpcnFlO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcXG4gXFx0XFx0Ly8gYWNrbm93bGVkZ2UgSVJRc1xcbkBAIC0xNDEsNiArMTY5LDI3IEBAIHN0YXRpYyBpbnQgbmNuMjYwMDBfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG5jbjI2MDAwX2RyaXZlcltdID0ge1xcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfUzI1MDApLFxcbitcXHRcXHQubmFtZSAgICAgICAgICAgICAgICAgID0gXFxcIlMyNTAwXFxcIixcXG4rXFx0XFx0LmZlYXR1cmVzICAgICAgICAgICAgICA9IFBIWV9CQVNJQ19UMVNfUDJNUF9GRUFUVVJFUyxcXG4rXFx0XFx0LmNvbmZpZ19pbml0ICAgICAgICAgICA9IG5jbjI2MDAwX2NvbmZpZ19pbml0LFxcbitcXHRcXHQuY29uZmlnX2ludHIgICAgICAgICAgID0gbmNuMjYwMDBfY29uZmlnX2ludHIsXFxuK1xcdFxcdC5jb25maWdfYW5lZyAgICAgICAgICAgPSBuY24yNjAwMF9jb25maWdfYW5lZyxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzICAgICAgICAgICA9IG5jbjI2MDAwX3JlYWRfc3RhdHVzLFxcbitcXHRcXHQuaGFuZGxlX2ludGVycnVwdCAgICAgID0gbmNuMjYwMDBfaGFuZGxlX2ludGVycnVwdCxcXG4rXFx0XFx0LnNldF9sb29wYmFjayAgICAgICAgICA9IGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZCxcXG4rXFx0XFx0LnNldF9wbGNhX2NmZyAgICAgICAgICA9IG5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmcsXFxuK1xcdFxcdC5nZXRfcGxjYV9jZmcgICAgICAgICAgPSBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyxcXG4rXFx0XFx0LmdldF9wbGNhX3N0YXR1cyAgICAgICA9IGdlbnBoeV9jNDVfcGxjYV9nZXRfc3RhdHVzLFxcbitcXHRcXHQuc29mdF9yZXNldCAgICAgICAgICAgID0gZ2VucGh5X3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5nZXRfc3FpICAgICAgICAgICAgICAgPSBnZW5waHlfYzQ1X29hdGMxNF9nZXRfc3FpLFxcbitcXHRcXHQuZ2V0X3NxaV9tYXggICAgICAgICAgID0gZ2VucGh5X2M0NV9vYXRjMTRfZ2V0X3NxaV9tYXgsXFxuK1xcdFxcdC5yZWFkX21tZCAgICAgICAgICAgICAgPSBnZW5waHlfcGh5X3JlYWRfbW1kLFxcbitcXHRcXHQud3JpdGVfbW1kICAgICAgICAgICAgID0gZ2VucGh5X3BoeV93cml0ZV9tbWQsXFxuK1xcdFxcdC5jYWJsZV90ZXN0X2dldF9zdGF0dXMgPSBnZW5waHlfYzQ1X29hdGMxNF9jYWJsZV90ZXN0X2dldF9zdGF0dXMsXFxuK1xcdFxcdC5jYWJsZV90ZXN0X3N0YXJ0ICAgICAgPSBnZW5waHlfYzQ1X29hdGMxNF9jYWJsZV90ZXN0X3N0YXJ0LFxcbitcXHR9LFxcbiBcXHR7XFxuIFxcdFxcdFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfTkNOMjYwMDApLFxcbiBcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIk5DTjI2MDAwXFxcIixcXG5AQCAtMTUxLDcgKzIwMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBuY24yNjAwMF9kcml2ZXJbXSA9IHtcXG4gXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSBuY24yNjAwMF9yZWFkX3N0YXR1cyxcXG4gXFx0XFx0LmhhbmRsZV9pbnRlcnJ1cHQgICAgICAgPSBuY24yNjAwMF9oYW5kbGVfaW50ZXJydXB0LFxcbiBcXHRcXHQuZ2V0X3BsY2FfY2ZnXFx0XFx0PSBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyxcXG4tXFx0XFx0LnNldF9wbGNhX2NmZ1xcdFxcdD0gZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcsXFxuK1xcdFxcdC5zZXRfcGxjYV9jZmdcXHRcXHQ9IG5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmcsXFxuIFxcdFxcdC5nZXRfcGxjYV9zdGF0dXNcXHQ9IGdlbnBoeV9jNDVfcGxjYV9nZXRfc3RhdHVzLFxcbiBcXHRcXHQuc29mdF9yZXNldCAgICAgICAgICAgICA9IGdlbnBoeV9zb2Z0X3Jlc2V0LFxcbiBcXHR9LFxcbkBAIC0xNjEsMTEgKzIxMCwxMyBAQCBtb2R1bGVfcGh5X2RyaXZlcihuY24yNjAwMF9kcml2ZXIpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBuY24yNjAwMF90YmxbXSA9IHtcXG4gXFx0eyBQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX05DTjI2MDAwKSB9LFxcbitcXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfUzI1MDApIH0sXFxuIFxcdHsgfVxcbiB9O1xcbiBcXG4gTU9EVUxFX0RFVklDRV9UQUJMRShtZGlvLCBuY24yNjAwMF90YmwpO1xcbiBcXG4tTU9EVUxFX0FVVEhPUihcXFwiUGllcmdpb3JnaW8gQmVydXRvXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIlBpZXJnaW9yZ2lvIEJlcnV0byBcXHUwMDNjcGllci5iZXJ1dG9Ab25zZW1pLmNvbVxcdTAwM2VcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiU2VsdmEgUmFqYWdvcGFsIFxcdTAwM2NzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb21cXHUwMDNlXFxcIik7XFxuIE1PRFVMRV9ERVNDUklQVElPTihcXFwib25zZW1pIDEwQkFTRS1UMVMgUEhZIGRyaXZlclxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiRHVhbCBCU0QvR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuaW5kZXggMDYxNTIyODQ1OWVmNDIuLjExZmQyMDRlZWExNmE0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuQEAgLTI3ODcsNiArMjc4Nyw4MSBAQCBpbnQgZ2VucGh5X3dyaXRlX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZudW0sXFxuIH1cXG4gRVhQT1JUX1NZTUJPTChnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkKTtcXG4gXFxuKy8qKlxcbisgKiBnZW5waHlfcGh5X3JlYWRfbW1kIC0gSGVscGVyIGZvciByZWFkaW5nIGEgcmVnaXN0ZXIgd2l0aG91dCBsb2NrXFxuKyAqIGZyb20gdGhlIGdpdmVuIE1NRCBhbmQgUEhZLlxcbisgKiBAcGh5ZGV2OiBUaGUgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICogQGRldm51bTogVGhlIE1NRCB0byByZWFkIGZyb21cXG4rICogQHJlZ251bTogVGhlIHJlZ2lzdGVyIG9uIHRoZSBNTUQgdG8gcmVhZFxcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogUEhZcyBjYW4gaGF2ZSBib3RoIEMyMiBhbmQgQzQ1IHJlZ2lzdGVycyBzcGFjZS4gT25jZSBQSFlcXG4rICogaXMgZGlzY292ZXJlZCB2aWEgQzIyIGJ1cyBwcm90b2NvbCwgaXQgdXNlcyBDMjIgaW5kaXJlY3QgYWNjZXNzIHRvXFxuKyAqIGFjY2VzcyBDNDUgcmVnaXN0ZXJzLiBTb21lIFBIWXMsIGxpa2UgMTBCYXNlLVQxUyBQSFlzIGRlZmluZWQgYnkgT1BFTlxcbisgKiBBbGxpYW5jZSAxMEJBU0XigJFUMXgsIHN1cHBvcnQgb25seSBkaXJlY3QgYWNjZXNzLlxcbisgKlxcbisgKiBJZiBQSFkgaW5kaWNhdGVzIEM0NSBzdXBwb3J0IHRocm91Z2ggRFRTIGVudHJ5LCBpdCBhdm9pZCBDMjIgQVBJc1xcbisgKiBlbnRpcmVseSBhbmQgdGhlcmVmb3JlIGdlbmVyaWMgTURJTyByZWdpc3RlcnMgYXJlIGluYWNjZXNzaWJsZS5cXG4rICpcXG4rICogTURJTyBidXMgaXNuJ3QgbG9ja2VkIGhlcmUgYmVjYXVzZSB3aGVuIGNhbGxlZCB0aHJvdWdoIHJlYWRfbW1kXFxuKyAqIGNhbGxiYWNrIG9mIHBoeV9kcml2ZXIsIGNhbGxlciBpcyBleHBlY3RlZCB0byBsb2NrIHRoZSBidXMgYXNcXG4rICogaW1wbGVtZW50ZWQgaW4gcGh5X3JlYWRfbW1kLlxcbisgKlxcbisgKiBSZXR1cm5zOiBSZWdpc3RlciB2YWx1ZSBpZiBzdWNjZXNzZnVsLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXFxuKyAqL1xcbitpbnQgZ2VucGh5X3BoeV9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2bnVtLFxcbitcXHRcXHRcXHR1MTYgcmVnbnVtKVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXHRpbnQgYWRkciA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXR1cm4gX19tZGlvYnVzX2M0NV9yZWFkKGJ1cywgYWRkciwgZGV2bnVtLCByZWdudW0pO1xcbit9XFxuK0VYUE9SVF9TWU1CT0woZ2VucGh5X3BoeV9yZWFkX21tZCk7XFxuK1xcbisvKipcXG4rICogZ2VucGh5X3BoeV93cml0ZV9tbWQgLSBIZWxwZXIgZm9yIHdyaXRpbmcgYSByZWdpc3RlciB3aXRob3V0IGxvY2tcXG4rICogdG8gdGhlIGdpdmVuIE1NRCBhbmQgUEhZLlxcbisgKiBAcGh5ZGV2OiBUaGUgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICogQGRldm51bTogVGhlIE1NRCB0byB3cml0ZSB0b1xcbisgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byB3cml0ZVxcbisgKiBAdmFsOiAgICBWYWx1ZSB0byB3cml0ZVxcbisgKlxcbisgKiBEZXNjcmlwdGlvbjogU2ltaWxhciB0byBnZW5waHlfcGh5X3JlYWRfbW1kXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGdlbnBoeV9waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sXFxuK1xcdFxcdFxcdCB1MTYgcmVnbnVtLCB1MTYgdmFsKVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYnVzO1xcbitcXHRpbnQgYWRkciA9IHBoeWRldi1cXHUwMDNlbWRpby5hZGRyO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXR1cm4gX19tZGlvYnVzX2M0NV93cml0ZShidXMsIGFkZHIsIGRldm51bSwgcmVnbnVtLCB2YWwpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0woZ2VucGh5X3BoeV93cml0ZV9tbWQpO1xcbitcXG4rLyoqXFxuKyAqIGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZCAtIEhlbHBlciB0byBtb2RpZnkgdGhlIFBIWSBsb29wYmFjayBtb2RlXFxuKyAqIHdpdGhvdXQgYWZmZWN0aW5nIGFueSBvdGhlciBzZXR0aW5ncy5cXG4rICogQHBoeWRldjogVGhlIHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqIEBlbmFibGU6IEZsYWcgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIFBIWSBsZXZlbCBsb29wYmFjay5cXG4rICogQHNwZWVkOiBTcGVlZCBzZXR0aW5nLiBOb3QgZXhwZWN0ZWQgdG8gYmUgc2V0LiBFcnJvciBpZiBpdCBpcyBzZXQuXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgaWYgc3VjY2Vzc2Z1bCwgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLlxcbisgKi9cXG4raW50IGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSxcXG4rXFx0XFx0XFx0XFx0aW50IHNwZWVkKVxcbit7XFxuK1xcdGlmIChlbmFibGUgXFx1MDAyNlxcdTAwMjYgc3BlZWQpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0ssXFxuK1xcdFxcdFxcdCAgZW5hYmxlID8gQk1DUl9MT09QQkFDSyA6IDApO1xcbit9XFxuK0VYUE9SVF9TWU1CT0woZ2VucGh5X2xvb3BiYWNrX2ZpeGVkX3NwZWVkKTtcXG4rXFxuIGludCBnZW5waHlfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbiB7XFxuIFxcdHJldHVybiBwaHlfc2V0X2JpdHMocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTik7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2FfdGM2LmggYi9pbmNsdWRlL2xpbnV4L29hX3RjNi5oXFxuaW5kZXggMTVmNThlM2M1NmM3NDAuLjE3YWMzZTA3NTFlMTIyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvb2FfdGM2LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L29hX3RjNi5oXFxuQEAgLTcsOCArNywyMyBAQFxcbiAgKiBBdXRob3I6IFBhcnRoaWJhbiBWZWVyYXNvb3JhbiBcXHUwMDNjcGFydGhpYmFuLnZlZXJhc29vcmFuQG1pY3JvY2hpcC5jb21cXHUwMDNlXFxuICAqL1xcbiBcXG4rI2lmbmRlZiBfTElOVVhfT0FfVEM2X0hcXG4rI2RlZmluZSBfTElOVVhfT0FfVEM2X0hcXG4rXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3BpL3NwaS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXFx1MDAzZVxcbitcXG4rLyogUEhZIOKAkyBDbGF1c2UgNDUgcmVnaXN0ZXJzIG1lbW9yeSBtYXAgc2VsZWN0b3IgKE1NUykgYXMgcGVyIHRhYmxlIDYgaW5cXG4rICogdGhlIE9QRU4gQWxsaWFuY2Ugc3BlY2lmaWNhdGlvbi5cXG4rICovXFxuKyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfTUFDX01NUzFcXHRcXHRcXHQxXFx0LyogTm8gTU1EICovXFxuKyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUENTX01NUzJcXHRcXHRcXHQyXFx0LyogTU1EIDMgKi9cXG4rI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QTUFfUE1EX01NUzNcXHRcXHQzXFx0LyogTU1EIDEgKi9cXG4rI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzRcXHRcXHQ0XFx0LyogTU1EIDMxICovXFxuKyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfQVVUT19ORUdfTU1TNVxcdFxcdDVcXHQvKiBNTUQgNyAqL1xcbisjZGVmaW5lIE9BX1RDNl9QSFlfQzQ1X1BPV0VSX1VOSVRfTU1TNlxcdFxcdDZcXHQvKiBNTUQgMTMgKi9cXG4rI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMlxcdFxcdFxcdDEyXFx0LyogZm9yIHZlbmRvcnMgKi9cXG4gXFxuIHN0cnVjdCBvYV90YzY7XFxuIFxcbkBAIC0yMiwzICszNywyNCBAQCBpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJzKHN0cnVjdCBvYV90YzYgKnRjNiwgdTMyIGFkZHJlc3MsIHUzMiB2YWx1ZVtdLFxcbiBcXHRcXHRcXHQgIHU4IGxlbmd0aCk7XFxuIG5ldGRldl90eF90IG9hX3RjNl9zdGFydF94bWl0KHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuIGludCBvYV90YzZfemVyb19hbGlnbl9yZWNlaXZlX2ZyYW1lX2VuYWJsZShzdHJ1Y3Qgb2FfdGM2ICp0YzYpO1xcbitpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgYWRkcmVzcywgdTE2IG1tcyxcXG4rXFx0XFx0XFx0ICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpO1xcbitpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxcbitcXHRcXHRcXHQgICAgICB1MzIgdmFsdWUpO1xcbitpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxcbitcXHRcXHRcXHQgICAgICB1MzIgdmFsdWVbXSwgdTggbGVuZ3RoKTtcXG4raW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxcbitcXHRcXHRcXHQgICAgIHUzMiAqdmFsdWUpO1xcbitpbnQgb2FfdGM2X3B0cF9yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqaW5mbyk7XFxuK2ludCBvYV90YzZfaW9jdGwoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTtcXG4raW50IG9hX3RjNl9nZXRfdHNfaW5mbyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsXFxuK1xcdFxcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7XFxuK3ZvaWQgb2FfdGM2X2h3dHN0YW1wX2dldChzdHJ1Y3Qgb2FfdGM2ICp0YzYsXFxuK1xcdFxcdFxcdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcXG4rdm9pZCBvYV90YzZfZ2V0X3RzX3N0YXRzKHN0cnVjdCBvYV90YzYgKnRjNixcXG4rXFx0XFx0XFx0IHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICpzdGF0cyk7XFxuK2ludCBvYV90YzZfaHd0c3RhbXBfc2V0KHN0cnVjdCBvYV90YzYgKnRjNixcXG4rXFx0XFx0XFx0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyk7XFxuK3ZvaWQgb2FfdGM2X3NldF92ZW5kMV9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBpbnQgbW1zKTtcXG4rdm9pZCBvYV90YzZfcHRwX3VucmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2KTtcXG4rI2VuZGlmIC8qIF9MSU5VWF9PQV9UQzZfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi42MWJjZDcxYTMxNDMyNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHkuaFxcbkBAIC0yMzAxLDYgKzIzMDEsMTIgQEAgaW50IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZhZCxcXG4gXFx0XFx0XFx0XFx0dTE2IHJlZ251bSk7XFxuIGludCBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaGRldiwgaW50IGRldm51bSxcXG4gXFx0XFx0XFx0XFx0IHUxNiByZWdudW0sIHUxNiB2YWwpO1xcbitpbnQgZ2VucGh5X2xvb3BiYWNrX2ZpeGVkX3NwZWVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLFxcbitcXHRcXHRcXHRcXHRpbnQgc3BlZWQpO1xcbitpbnQgZ2VucGh5X3BoeV93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSxcXG4rXFx0XFx0XFx0IHUxNiByZWdudW0sIHUxNiB2YWwpO1xcbitpbnQgZ2VucGh5X3BoeV9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2bnVtLFxcbitcXHRcXHRcXHR1MTYgcmVnbnVtKTtcXG4gXFxuIC8qIENsYXVzZSAzNyAqL1xcbiBpbnQgZ2VucGh5X2MzN19jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDlUMTE6MTg6NDUuMzU5MjA5NTM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTA5Njk1NjM5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX09OU0VNSVwiLFxuICAgIFwiUzI1MDBfTUFDUEhZXCIsXG4gICAgXCJPQV9UQzZcIixcbiAgICBcIk5DTjI2MDAwX1BIWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInMyNTAwX3Byb2JlXCIsXG4gICAgXCJzMjUwMF9vcGVuXCIsXG4gICAgXCJzMjUwMF9pb2N0bFwiLFxuICAgIFwiczI1MDBfaHd0c3RhbXBfc2V0XCIsXG4gICAgXCJzMjUwMF9zZXRfbXVsdGljYXN0X21vZGVcIixcbiAgICBcInMyNTAwX3B0cF9hZGp0aW1lXCIsXG4gICAgXCJvYV90YzZfaHd0c3RhbXBfc2V0XCIsXG4gICAgXCJvYV90YzZfdHN0YW1wX2lvY3RsXCIsXG4gICAgXCJvYV90YzZfcHRwX3JlZ2lzdGVyXCIsXG4gICAgXCJuY24yNjAwMF9jNDVfcGxjYV9zZXRfY2ZnXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBTUEktYmFzZWQgZXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgb25zZW1pIFMyNTAwIE1BQ1BIWSwgYWRkcyBoYXJkd2FyZSB0aW1lc3RhbXBpbmcgc3VwcG9ydCB0byB0aGUgT0EgVEM2IGZyYW1ld29yaywgYW5kIHVwZGF0ZXMgdGhlIE5DTjI2MDAwIFBIWSBkcml2ZXIuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtIGFuZCBQSFkgZHJpdmVycyB0aGF0IGNhbiBiZSBpbnRlcmFjdGVkIHdpdGggdmlhIGV0aHRvb2wsIG5ldGxpbmssIGFuZCBpb2N0bHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGJkNTU1YzcyZGEzNjMxY2EwMzFlOTQ2NWRkNWIyOGM4ZGJjNzhkYlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDkgMTE6MTg6NDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L29ubm4sczI1MDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvb25ubixzMjUwMC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjExZWRmMTA1MDhkOWYzXG4tLS0gL2Rldi9udWxsXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L29ubm4sczI1MDAueWFtbFxuQEAgLTAsMCArMSw2NyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuKyVZQU1MIDEuMlxuKy0tLVxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L29ubm4sczI1MDAueWFtbCNcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcbitcbit0aXRsZTogb25zZW1pIFMyNTAwIDEwQkFTRS1UMVMgTUFDUEhZIEV0aGVybmV0IENvbnRyb2xsZXJzXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIFBpZXJnaW9yZ2lvIEJlcnV0byBcdTAwM2NwaWVyLmJlcnV0b0BvbnNlbWkuY29tXHUwMDNlXG4rICAtIFNlbHZhIFJhamFnb3BhbCBcdTAwM2NTZWx2YW1hbmkuUmFqYWdvcGFsQG9uc2VtaS5jb21cdTAwM2VcbitcbitkZXNjcmlwdGlvbjpcbisgIFRoZSBTMjUwMCBjb21iaW5lcyBhIE1lZGlhIEFjY2VzcyBDb250cm9sbGVyIChNQUMpIGFuZCBhblxuKyAgRXRoZXJuZXQgUEhZIHRvIGVuYWJsZSAxMEJBU0XigJFUMVMgbmV0d29ya3MuIFRoZSBFdGhlcm5ldCBNZWRpYSBBY2Nlc3NcbisgIENvbnRyb2xsZXIgKE1BQykgbW9kdWxlIGltcGxlbWVudHMgYSAxMCBNYnBzIGhhbGYgZHVwbGV4IEV0aGVybmV0IE1BQyxcbisgIGNvbXBhdGlibGUgd2l0aCB0aGUgSUVFRSA4MDIuMyBzdGFuZGFyZCBhbmQgYSAxMEJBU0UtVDFTIHBoeXNpY2FsIGxheWVyXG4rICB0cmFuc2NlaXZlciBpbnRlZ3JhdGVkIGludG8gdGhlIFMyNTAwLiBUaGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuXG4rICB0aGUgaG9zdCBhbmQgdGhlIE1BQy1QSFkgaXMgc3BlY2lmaWVkIGluIHRoZSBPUEVOIEFsbGlhbmNlIDEwQkFTRS1UMXhcbisgIE1BQ1BIWSBTZXJpYWwgSW50ZXJmYWNlIChUQzYpLlxuK1xuK2FsbE9mOlxuKyAgLSAkcmVmOiAvc2NoZW1hcy9uZXQvZXRoZXJuZXQtY29udHJvbGxlci55YW1sI1xuKyAgLSAkcmVmOiAvc2NoZW1hcy9zcGkvc3BpLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcbitcbitwcm9wZXJ0aWVzOlxuKyAgY29tcGF0aWJsZTpcbisgICAgY29uc3Q6IG9ubm4sczI1MDBcbitcbisgIHJlZzpcbisgICAgbWF4SXRlbXM6IDFcbitcbisgIGludGVycnVwdHM6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEludGVycnVwdCBmcm9tIE1BQy1QSFkgYXNzZXJ0ZWQgaW4gdGhlIGV2ZW50IG9mIFJlY2VpdmUgQ2h1bmtzXG4rICAgICAgQXZhaWxhYmxlLCBUcmFuc21pdCBDaHVuayBDcmVkaXRzIEF2YWlsYWJsZSBhbmQgRXh0ZW5kZWQgU3RhdHVzXG4rICAgICAgRXZlbnQuXG4rICAgIG1heEl0ZW1zOiAxXG4rXG4rICBzcGktbWF4LWZyZXF1ZW5jeTpcbisgICAgbWF4aW11bTogMjUwMDAwMDBcbitcbityZXF1aXJlZDpcbisgIC0gY29tcGF0aWJsZVxuKyAgLSByZWdcbisgIC0gaW50ZXJydXB0c1xuKyAgLSBzcGktbWF4LWZyZXF1ZW5jeVxuK1xuK3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbitcbitleGFtcGxlczpcbisgIC0gfFxuKyAgICAjaW5jbHVkZSBcdTAwM2NkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaFx1MDAzZVxuKyAgICBzcGkge1xuKyAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAjc2l6ZS1jZWxscyA9IFx1MDAzYzBcdTAwM2U7XG4rXG4rICAgICAgZXRoZXJuZXRAMCB7XG4rICAgICAgICBjb21wYXRpYmxlID0gXCJvbm5uLHMyNTAwXCI7XG4rICAgICAgICByZWcgPSBcdTAwM2MwXHUwMDNlO1xuKyAgICAgICAgcGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuKyAgICAgICAgcGluY3RybC0wID0gXHUwMDNjXHUwMDI2ZXRoMF9waW5zXHUwMDNlO1xuKyAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFx1MDAzY1x1MDAyNmdwaW9cdTAwM2U7XG4rICAgICAgICBpbnRlcnJ1cHRzID0gXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXHUwMDNlO1xuKyAgICAgICAgc3BpLW1heC1mcmVxdWVuY3kgPSBcdTAwM2MxNTAwMDAwMFx1MDAzZTtcbisgICAgICB9O1xuKyAgICB9O1xuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdFxuaW5kZXggZmUyYWFiZGU5MjNhNTcuLjMyNWQyOTlkMWE3ZGMyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvb2EtdGM2LWZyYW1ld29yay5yc3RcbkBAIC0xNTMsNiArMTUzLDEwIEBAIE9QRU4gQWxsaWFuY2UgVEM2IEZyYW1ld29ya1xuIC0gRm9yd2FyZHMgdGhlIHJlY2VpdmVkIEV0aGVybmV0IGZyYW1lIGZyb20gMTBCYXNlLVQxeCBNQUMtUEhZIHRvIG4vd1xuICAgc3Vic3lzdGVtLlxuIFxuKy0gSWYgc3VwcG9ydGVkIGJ5IHRoZSBoYXJkd2FyZSBhbmQgZW5hYmxlZCwgdXBkYXRlcyBoYXJkd2FyZSB0aW1lc3RhbXBcbisgIGluIHNrYiwgd2hlbiBpbmRpY2F0ZWQgYnkgb25lIG9mIHRoZSB0aHJlZSB0aW1lc3RhbXAgY2FwdHVyZSByZWdpc3RlcnNcbisgIHRocm91Z2ggVFNDIGZpZWxkcyBvZiB0aGUgaGVhZGVyLlxuK1xuIERhdGEgVHJhbnNhY3Rpb25cbiB+fn5+fn5+fn5+fn5+fn5+XG4gXG5AQCAtNDk1LDMgKzQ5OSw3OSBAQCB0aGUgTUFDLVBIWS5cbiBaZXJvIGFsaWduIHJlY2VpdmUgZnJhbWUgZmVhdHVyZSBjYW4gYmUgZW5hYmxlZCB0byBhbGlnbiBhbGwgcmVjZWl2ZSBldGhlcm5ldFxuIGZyYW1lcyBkYXRhIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgYW55IHJlY2VpdmUgZGF0YSBjaHVuayBwYXlsb2FkIHdpdGggYVxuIHN0YXJ0IHdvcmQgb2Zmc2V0IChTV08pIG9mIHplcm8uXG4rXG4rLi4gYzpmdW5jdGlvbjo6IGludCBvYV90YzZfcHRwX3JlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0cF9jbG9ja19pbmZvICppbmZvKTtcbitcbitSZWdpc3RlcnMgdGhlIFBUUCBoYXJkd2FyZSBjbG9jayByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoIHRoZSBrZXJuZWwuXG4rVGhpcyBBUEkgc2ltcGx5IHJlZ2lzdGVycy4gSW5pdGlhbGl6YXRpb24gb2YgdGhlIGZpZWxkcyBpbiB0aGVcbitwdHBfY2xvY2tfaW5mbyBzdHJ1Y3R1cmUgYXJlIGxlZnQgdG8gdGhlIHZlbmRvciBhcyBwcm9ncmFtbWluZyBoYXJkd2FyZVxuK3RpbWVyIGlzIGV4cGVjdGVkIHRvIGJlIHZlbmRvciBkZXBlbmRlbnQuIFRoZSBmaWVsZHMgbWF4X2Fkaiwgb3duZXIsXG4rYW5kIGFsbCB0aGUgZnVuY3Rpb25zIGZvciB0aGUgY2xvY2sgb3BlcmF0aW9ucywgbGlrZSBhZGpmaW5lLCBnZXR0aW1leDY0LFxuK3NldHRpbWU2NCwgYWRqdGltZSBhcmUgZXhwZWN0ZWQgdG8gYmUgaW5pdGlhbGl6ZWQgaW4gdGhlIHN0cnVjdHVyZSBiZWZvcmVcbitjYWxsaW5nIHRoZSByZWdpc3RlcmluZyB0aGUgaGFyZHdhcmUgY2xvY2suXG4rXG4rLi4gYzpmdW5jdGlvbjo6IHZvaWQgb2FfdGM2X3B0cF91bnJlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNik7XG4rXG4rVW5yZWdpc3RlcnMgdGhlIFBUUCBoYXJkd2FyZSBjbG9jayByZWxhdGVkIGNhbGxiYWNrcy5cbitcbisuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl9pb2N0bChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBpZnJlcSAqcnEsIFxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNtZCk7XG4rXG4raW9jdGwgaW50ZXJmYWNlIHRvIGhhbmRsZSBoYXJkd2FyZSB0aW1lc3RhbXAgYW5kIFBIWSByZWxhdGVkIGNvbW1hbmRzLlxuK1xuKy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X2dldF90c19pbmZvKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbyk7XG4rXG4rUHJvdmlkZXMgdGltZXN0YW1wIHJlbGF0ZWQgc2V0dGluZ3MgdGhhdCBhcmUgc3VwcG9ydGVkIHRvIGV0aHRvb2wuXG4rXG4rLi4gYzpmdW5jdGlvbjo6IHZvaWQgb2FfdGM2X2h3dHN0YW1wX2dldChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbitcbitSZXR1cm5zIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uLiBQYXJ0IG9mIG5ldF9kZXZpY2Vfb3BzIGNhbGxiYWNrcy5cbitcbisuLiBjOmZ1bmN0aW9uOjogdm9pZCBvYV90YzZfZ2V0X3RzX3N0YXRzKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICp0c19zdGF0cyk7XG4rXG4rUHJvdmlkZXMgaGFyZHdhcmUgdGltZXN0YW1wIHJlbGF0ZWQgdHJhZmZpYyBzdGF0aXN0aWNzIGZvciBldGh0b29sLlxuK1xuKy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X2h3dHN0YW1wX3NldChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIFxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbitcbitIZWxwZXIgdG8gc2V0IGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWd1cmF0aW9uLiBQYXJ0IG9mIG5ldF9kZXZpY2Vfb3BzXG4rY2FsbGJhY2tzLlxuK1xuKy4uIGM6ZnVuY3Rpb246OiB2b2lkIG9hX3RjNl9zZXRfdmVuZDFfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgaW50IG1tcyk7XG4rXG4rSGVscGVyIHRvIG1hcCBNRElPX01NRF9WRU5EMSBjb21tYW5kIHRvIHZlbmRvciBzcGVjaWZpYyBNZW1vcnkgTWFwIFNlbGVjdFxuKyhNTVMpIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIG9mZmVycyBmbGV4aWJpbGl0eSBmb3IgdmVuZG9ycyB0aGF0IG1heSBoYXZlXG4rdXNlZCBhbnkgTU1TIHZhbHVlIGJldHdlZW4gMTAgYW5kIDE1IGFzIGFsbG93ZWQgYnkgdGhlIHNwZWNpZmljYXRpb24uXG4rTURJT19NTURfVkVORDIgaXMgYWxyZWFkeSBtYXBwZWQgdG8gTU1TNCBpbiB0aGUgT0EgVEM2IGZyYW1lIHdvcmsgY29kZS5cbitcbisuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl93cml0ZV9yZWdpc3RlcnNfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBhZGRyZXNzLCB1MTYgbW1zLCBcXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZhbHVlW10sIHU4IGxlbmd0aCk7XG4rXG4rV3JpdGluZyBtdWx0aXBsZSBjb25zZWN1dGl2ZSByZWdpc3RlcnMgc3RhcnRpbmcgZnJvbSBAYWRkcmVzcyBmb3IgdGhlXG4rZ2l2ZW4gQG1tcyBtZW1vcnkgbWFwIHNlbGVjdG9yIGluIHRoZSBNQUMtUEhZLiBNYXhpbXVtIG9mIDEyOCBjb25zZWN1dGl2ZVxuK3JlZ2lzdGVycyBjYW4gYmUgd3JpdHRlbiBzdGFydGluZyBhdCBAYWRkcmVzcy5cbitcbisuLiBjOmZ1bmN0aW9uOjogaW50IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBcXFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTE2IG1tcywgXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHZhbHVlKTtcbitcbitXcml0ZSBhIHNpbmdsZSByZWdpc3RlciBhZGRyZXNzZWQgYnkgQGFkZHJlc3MgYW5kIEBtbXMgaW4gdGhlIE1BQy1QSFkuXG4rXG4rLi4gYzpmdW5jdGlvbjo6IGludCBvYV90YzZfcmVhZF9yZWdpc3RlcnNfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IGFkZHJlc3MsIHUxNiBtbXMsIFxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB2YWx1ZVtdLCB1OCBsZW5ndGgpO1xuK1xuK1JlYWRpbmcgbXVsdGlwbGUgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIHN0YXJ0aW5nIGZyb20gQGFkZHJlc3MgZm9yIHRoZVxuK2dpdmVuIEBtbXMgbWVtb3J5IG1hcCBzZWxlY3RvciB2YWx1ZSwgaW4gdGhlIE1BQy1QSFkuIE1heGltdW0gb2YgMTI4XG4rY29uc2VjdXRpdmUgcmVnaXN0ZXJzIGNhbiBiZSByZWFkIHN0YXJ0aW5nIGF0IEBhZGRyZXNzLlxuK1xuKy4uIGM6ZnVuY3Rpb246OiBpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgYWRkcmVzcywgdTE2IG1tcywgXFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKnZhbHVlKTtcbitcbitSZWFkIGEgc2luZ2xlIHJlZ2lzdGVyIGFkZHJlc3NlZCBieSBAYWRkcmVzcyBhbmQgQG1tcyBpbiB0aGUgTUFDLVBIWS5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCA1MmYxYTU1ZWNhOTliZi4uOTU4YjlmNjFlMzY0MTggMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuKysrIGIvTUFJTlRBSU5FUlNcbkBAIC0yMDE4MiwxMiArMjAxODIsMjAgQEAgUzpcdE1haW50YWluZWRcbiBGOlx0YXJjaC9taXBzL2Jvb3QvZHRzL3JhbGluay9vbWVnYTJwLmR0c1xuIFxuIE9OU0VNSSBFVEhFUk5FVCBQSFkgRFJJVkVSU1xuLU06XHRQaWVyZ2lvcmdpbyBCZXJ1dG8gXHUwMDNjcGllcmdpb3JnaW8uYmVydXRvQGdtYWlsLmNvbVx1MDAzZVxuK006XHRQaWVyZ2lvcmdpbyBCZXJ1dG8gXHUwMDNjcGllci5iZXJ1dG9Ab25zZW1pLmNvbVx1MDAzZVxuK006XHRTZWx2YSBSYWphZ29wYWwgXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0U3VwcG9ydGVkXG4gVzpcdGh0dHA6Ly93d3cub25zZW1pLmNvbVxuIEY6XHRkcml2ZXJzL25ldC9waHkvbmNuKlxuIFxuK09OU0VNSSBTMjUwMCAxMEJBU0UtVDFTIE1BQ1BIWSBFVEhFUk5FVCBEUklWRVJcbitNOlx0U2VsdmEgUmFqYWdvcGFsIFx1MDAzY3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbVx1MDAzZVxuK0w6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4rUzpcdFN1cHBvcnRlZFxuK0Y6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L29ubm4sczI1MDAueWFtbFxuK0Y6XHRkcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfKlxuK1xuIE9QLVRFRSBEUklWRVJcbiBNOlx0SmVucyBXaWtsYW5kZXIgXHUwMDNjamVucy53aWtsYW5kZXJAbGluYXJvLm9yZ1x1MDAzZVxuIEw6XHRvcC10ZWVAbGlzdHMudHJ1c3RlZGZpcm13YXJlLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpXG5AQCAtMjAyMDksMTAgKzIwMjE3LDExIEBAIEY6XHRkcml2ZXJzL3J0Yy9ydGMtb3B0ZWUuY1xuIFxuIE9QRU4gQUxMSUFOQ0UgMTBCQVNFLVQxUyBNQUNQSFkgU0VSSUFMIElOVEVSRkFDRSBGUkFNRVdPUktcbiBNOlx0UGFydGhpYmFuIFZlZXJhc29vcmFuIFx1MDAzY3BhcnRoaWJhbi52ZWVyYXNvb3JhbkBtaWNyb2NoaXAuY29tXHUwMDNlXG4rTTpcdFNlbHZhIFJhamFnb3BhbCBcdTAwM2NzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb21cdTAwM2UgKHRpbWVzdGFtcCBzdXBwb3J0KVxuIEw6XHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXG4gUzpcdE1haW50YWluZWRcbiBGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29hLXRjNi1mcmFtZXdvcmsucnN0XG4tRjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG4rRjpcdGRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzYqXG4gRjpcdGluY2x1ZGUvbGludXgvb2FfdGM2LmhcbiBcbiBPUEVOIEZJUk1XQVJFIEFORCBGTEFUVEVORUQgREVWSUNFIFRSRUVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuaW5kZXggNzhjNzlhZDdiYmE1NTMuLjI3NDAyYTU5MmIyOTRkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZ1xuQEAgLTEzNCw3ICsxMzQsOSBAQCBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9uZXRyb25vbWUvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvODM5MC9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9udmlkaWEvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbnhwL0tjb25maWdcIlxuK3NvdXJjZSBcImRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9LY29uZmlnXCJcbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9va2ktc2VtaS9LY29uZmlnXCJcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvS2NvbmZpZ1wiXG4gXG4gY29uZmlnIEVUSE9DXG4gXHR0cmlzdGF0ZSBcIk9wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMgc3VwcG9ydFwiXG5AQCAtMTQ2LDE3ICsxNDgsNiBAQCBjb25maWcgRVRIT0NcbiBcdGhlbHBcbiBcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIE9wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMuXG4gXG4tY29uZmlnIE9BX1RDNlxuLVx0dHJpc3RhdGUgXCJPUEVOIEFsbGlhbmNlIFRDNiAxMEJBU0UtVDF4IE1BQy1QSFkgc3VwcG9ydFwiIGlmIENPTVBJTEVfVEVTVFxuLVx0ZGVwZW5kcyBvbiBTUElcbi1cdHNlbGVjdCBQSFlMSUJcbi1cdGhlbHBcbi1cdCAgVGhpcyBsaWJyYXJ5IGltcGxlbWVudHMgT1BFTiBBbGxpYW5jZSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZXG4tXHQgIFNlcmlhbCBJbnRlcmZhY2UgcHJvdG9jb2wgZm9yIHN1cHBvcnRpbmcgMTBCQVNFLVQxeCBNQUMtUEhZcy5cbi1cbi1cdCAgVG8ga25vdyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgcmVmZXIgZG9jdW1lbnRhdGlvbiBpblxuLVx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdFx1MDAzZS5cbi1cbiBzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9wYXNlbWkvS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZ1wiXG4gc291cmNlIFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcWxvZ2ljL0tjb25maWdcIlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvTWFrZWZpbGVcbmluZGV4IGJiYTU1ZDlhZjM4NzcwLi43N2IxMWQ1YTdhYmYxMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9NYWtlZmlsZVxuQEAgLTcxLDYgKzcxLDcgQEAgb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfTkVUUk9OT01FKSArPSBuZXRyb25vbWUvXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfTkkpICs9IG5pL1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX05WSURJQSkgKz0gbnZpZGlhL1xuIG9iai0kKENPTkZJR19MUENfRU5FVCkgKz0gbnhwL1xuK29iai0kKENPTkZJR19PQV9UQzYpICs9IG9hX3RjNi9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9PS0kpICs9IG9raS1zZW1pL1xuIG9iai0kKENPTkZJR19FVEhPQykgKz0gZXRob2Mub1xuIG9iai0kKENPTkZJR19ORVRfVkVORE9SX1BBU0VNSSkgKz0gcGFzZW1pL1xuQEAgLTEwNCw0ICsxMDUsMyBAQCBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSUxJTlgpICs9IHhpbGlueC9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9YSVJDT00pICs9IHhpcmNvbS9cbiBvYmotJChDT05GSUdfTkVUX1ZFTkRPUl9TWU5PUFNZUykgKz0gc3lub3BzeXMvXG4gb2JqLSQoQ09ORklHX05FVF9WRU5ET1JfUEVOU0FORE8pICs9IHBlbnNhbmRvL1xuLW9iai0kKENPTkZJR19PQV9UQzYpICs9IG9hX3RjNi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjg2NXgvbGFuODY1eC5jXG5pbmRleCAwMjc3ZDk3MzczNjlhZC4uM2I1NTVlZTY5ODA0MTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuODY1eC9sYW44NjV4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW44NjV4L2xhbjg2NXguY1xuQEAgLTEzLDI3ICsxMywyNyBAQFxuICNkZWZpbmUgRFJWX05BTUVcdFx0XHRcImxhbjg2NTBcIlxuIFxuIC8qIE1BQyBOZXR3b3JrIENvbnRyb2wgUmVnaXN0ZXIgKi9cbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMXHRcdDB4MDAwMTAwMDBcbisjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMXHRcdDB4MFxuICNkZWZpbmUgTUFDX05FVF9DVExfVFhFTlx0XHRCSVQoMykgLyogVHJhbnNtaXQgRW5hYmxlICovXG4gI2RlZmluZSBNQUNfTkVUX0NUTF9SWEVOXHRcdEJJVCgyKSAvKiBSZWNlaXZlIEVuYWJsZSAqL1xuIFxuIC8qIE1BQyBOZXR3b3JrIENvbmZpZ3VyYXRpb24gUmVnICovXG4tI2RlZmluZSBMQU44NjVYX1JFR19NQUNfTkVUX0NGR1x0XHQweDAwMDEwMDAxXG4rI2RlZmluZSBMQU44NjVYX1JFR19NQUNfTkVUX0NGR1x0XHQweDFcbiAjZGVmaW5lIE1BQ19ORVRfQ0ZHX1BST01JU0NVT1VTX01PREVcdEJJVCg0KVxuICNkZWZpbmUgTUFDX05FVF9DRkdfTVVMVElDQVNUX01PREVcdEJJVCg2KVxuICNkZWZpbmUgTUFDX05FVF9DRkdfVU5JQ0FTVF9NT0RFXHRCSVQoNylcbiBcbiAvKiBNQUMgSGFzaCBSZWdpc3RlciBCb3R0b20gKi9cbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19MX0hBU0hcdFx0MHgwMDAxMDAyMFxuKyNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0xfSEFTSFx0XHQweDIwXG4gLyogTUFDIEhhc2ggUmVnaXN0ZXIgVG9wICovXG4tI2RlZmluZSBMQU44NjVYX1JFR19NQUNfSF9IQVNIXHRcdDB4MDAwMTAwMjFcbisjZGVmaW5lIExBTjg2NVhfUkVHX01BQ19IX0hBU0hcdFx0MHgyMVxuIC8qIE1BQyBTcGVjaWZpYyBBZGRyIDEgQm90dG9tIFJlZyAqL1xuLSNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0xfU0FERFIxXHQweDAwMDEwMDIyXG4rI2RlZmluZSBMQU44NjVYX1JFR19NQUNfTF9TQUREUjFcdDB4MjJcbiAvKiBNQUMgU3BlY2lmaWMgQWRkciAxIFRvcCBSZWcgKi9cbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19IX1NBRERSMVx0MHgwMDAxMDAyM1xuKyNkZWZpbmUgTEFOODY1WF9SRUdfTUFDX0hfU0FERFIxXHQweDIzXG4gXG4gLyogTUFDIFRTVSBUaW1lciBJbmNyZW1lbnQgUmVnaXN0ZXIgKi9cbi0jZGVmaW5lIExBTjg2NVhfUkVHX01BQ19UU1VfVElNRVJfSU5DUlx0XHQweDAwMDEwMDc3XG4rI2RlZmluZSBMQU44NjVYX1JFR19NQUNfVFNVX1RJTUVSX0lOQ1JcdFx0MHg3N1xuICNkZWZpbmUgTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTXHQweDAwMjhcbiBcbiBzdHJ1Y3QgbGFuODY1eF9wcml2IHtcbkBAIC00OSw3ICs0OSw4IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfaHdfbWFjYWRkcl9sb3dfYnl0ZXMoc3RydWN0IG9hX3RjNiAqdGM2LCBjb25zdCB1OCAqbWFjKVxuIFxuIFx0cmVndmFsID0gKG1hY1szXSBcdTAwM2NcdTAwM2MgMjQpIHwgKG1hY1syXSBcdTAwM2NcdTAwM2MgMTYpIHwgKG1hY1sxXSBcdTAwM2NcdTAwM2MgOCkgfCBtYWNbMF07XG4gXG4tXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgTEFOODY1WF9SRUdfTUFDX0xfU0FERFIxLCByZWd2YWwpO1xuK1x0cmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXModGM2LCBMQU44NjVYX1JFR19NQUNfTF9TQUREUjEsXG4rXHRcdFx0XHRcdCBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgcmVndmFsKTtcbiB9XG4gXG4gc3RhdGljIGludCBsYW44NjV4X3NldF9od19tYWNhZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYsIGNvbnN0IHU4ICptYWMpXG5AQCAtNjUsOCArNjYsOCBAQCBzdGF0aWMgaW50IGxhbjg2NXhfc2V0X2h3X21hY2FkZHIoc3RydWN0IGxhbjg2NXhfcHJpdiAqcHJpdiwgY29uc3QgdTggKm1hYylcbiBcbiBcdC8qIFByZXBhcmUgYW5kIGNvbmZpZ3VyZSBNQUMgYWRkcmVzcyBoaWdoIGJ5dGVzICovXG4gXHRyZWd2YWwgPSAobWFjWzVdIFx1MDAzY1x1MDAzYyA4KSB8IG1hY1s0XTtcbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfU0FERFIxLFxuLVx0XHRcdFx0ICAgIHJlZ3ZhbCk7XG4rXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfSF9TQUREUjEsXG4rXHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCByZWd2YWwpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTE0NiwxNCArMTQ3LDE2IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfc3BlY2lmaWNfbXVsdGljYXN0X2FkZHIoc3RydWN0IGxhbjg2NXhfcHJpdiAqcHJpdilcbiBcdH1cbiBcbiBcdC8qIEVuYWJsaW5nIHNwZWNpZmljIG11bHRpY2FzdCBhZGRyZXNzZXMgKi9cbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCwgaGFzaF9oaSk7XG4rXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfSF9IQVNILFxuK1x0XHRcdFx0XHRPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgaGFzaF9oaSk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZXRkZXYsIFwiRmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNoaDogJWRcXG5cIixcbiBcdFx0XHQgICByZXQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTF9IQVNILCBoYXNoX2xvKTtcbitcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19MX0hBU0gsXG4rXHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCBoYXNoX2xvKTtcbiBcdGlmIChyZXQpXG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZXRkZXYsIFwiRmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNobDogJWRcXG5cIixcbiBcdFx0XHQgICByZXQpO1xuQEAgLTE2NiwxNiArMTY5LDE2IEBAIHN0YXRpYyBpbnQgbGFuODY1eF9zZXRfYWxsX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpXG4gXHRpbnQgcmV0O1xuIFxuIFx0LyogRW5hYmxpbmcgYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMgKi9cbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCxcbi1cdFx0XHRcdCAgICAweGZmZmZmZmZmKTtcbitcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19IX0hBU0gsXG4rXHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCAweGZmZmZmZmZmKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0bmV0ZGV2X2Vycihwcml2LVx1MDAzZW5ldGRldiwgXCJGYWlsZWQgdG8gd3JpdGUgcmVnX2hhc2hoOiAlZFxcblwiLFxuIFx0XHRcdCAgIHJldCk7XG4gXHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19MX0hBU0gsXG4tXHRcdFx0XHQgICAgMHhmZmZmZmZmZik7XG4rXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTF9IQVNILFxuK1x0XHRcdFx0XHRPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgMHhmZmZmZmZmZik7XG4gXHRpZiAocmV0KVxuIFx0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlbmV0ZGV2LCBcIkZhaWxlZCB0byB3cml0ZSByZWdfaGFzaGw6ICVkXFxuXCIsXG4gXHRcdFx0ICAgcmV0KTtcbkBAIC0xODcsMTQgKzE5MCwxNiBAQCBzdGF0aWMgaW50IGxhbjg2NXhfY2xlYXJfYWxsX211bHRpY2FzdF9hZGRyKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX0hfSEFTSCwgMCk7XG4rXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfSF9IQVNILFxuK1x0XHRcdFx0XHRPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgMCk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZXRkZXYsIFwiRmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNoaDogJWRcXG5cIixcbiBcdFx0XHQgICByZXQpO1xuIFx0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuLVx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTF9IQVNILCAwKTtcbitcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19MX0hBU0gsXG4rXHRcdFx0XHRcdE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCAwKTtcbiBcdGlmIChyZXQpXG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZXRkZXYsIFwiRmFpbGVkIHRvIHdyaXRlIHJlZ19oYXNobDogJWRcXG5cIixcbiBcdFx0XHQgICByZXQpO1xuQEAgLTIzNSw3ICsyNDAsOCBAQCBzdGF0aWMgdm9pZCBsYW44NjV4X211bHRpY2FzdF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0XHRpZiAobGFuODY1eF9jbGVhcl9hbGxfbXVsdGljYXN0X2FkZHIocHJpdikpXG4gXHRcdFx0cmV0dXJuO1xuIFx0fVxuLVx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NGRywgcmVndmFsKTtcbitcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ0ZHLFxuK1x0XHRcdFx0XHRPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgcmVndmFsKTtcbiBcdGlmIChyZXQpXG4gXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZXRkZXYsIFwiRmFpbGVkIHRvIGVuYWJsZSBwcm9taXNjdW91cy9tdWx0aWNhc3Qvbm9ybWFsIG1vZGU6ICVkXFxuXCIsXG4gXHRcdFx0ICAgcmV0KTtcbkBAIC0yNjAsMTIgKzI2NiwxNCBAQCBzdGF0aWMgaW50IGxhbjg2NXhfaHdfZGlzYWJsZShzdHJ1Y3QgbGFuODY1eF9wcml2ICpwcml2KVxuIHtcbiBcdHUzMiByZWd2YWw7XG4gXG4tXHRpZiAob2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19ORVRfQ1RMLCBcdTAwMjZyZWd2YWwpKVxuK1x0aWYgKG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsXG4rXHRcdFx0XHQgICAgIE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxLCBcdTAwMjZyZWd2YWwpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdHJlZ3ZhbCBcdTAwMjY9IH4oTUFDX05FVF9DVExfVFhFTiB8IE1BQ19ORVRfQ1RMX1JYRU4pO1xuIFxuLVx0aWYgKG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsIHJlZ3ZhbCkpXG4rXHRpZiAob2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsXG4rXHRcdFx0XHQgICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgcmVndmFsKSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0yOTEsMTIgKzI5OSwxNCBAQCBzdGF0aWMgaW50IGxhbjg2NXhfaHdfZW5hYmxlKHN0cnVjdCBsYW44NjV4X3ByaXYgKnByaXYpXG4ge1xuIFx0dTMyIHJlZ3ZhbDtcbiBcbi1cdGlmIChvYV90YzZfcmVhZF9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsIFx1MDAyNnJlZ3ZhbCkpXG4rXHRpZiAob2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfTkVUX0NUTCxcbitcdFx0XHRcdCAgICAgT0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIFx1MDAyNnJlZ3ZhbCkpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0cmVndmFsIHw9IE1BQ19ORVRfQ1RMX1RYRU4gfCBNQUNfTkVUX0NUTF9SWEVOO1xuIFxuLVx0aWYgKG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsIHJlZ3ZhbCkpXG4rXHRpZiAob2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgTEFOODY1WF9SRUdfTUFDX05FVF9DVEwsXG4rXHRcdFx0XHQgICAgICBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMSwgcmVndmFsKSlcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zNTksOCArMzY5LDkgQEAgc3RhdGljIGludCBsYW44NjV4X3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4gXHQgKiBzdGFtcGluZyBhdCB0aGUgZW5kIG9mIHRoZSBTdGFydCBvZiBGcmFtZSBEZWxpbWl0ZXIgKFNGRCkgYW5kIHNldCB0aGVcbiBcdCAqIFRpbWVyIEluY3JlbWVudCByZWcgdG8gNDAgbnMgdG8gYmUgdXNlZCBhcyBhIDI1IE1IeiBpbnRlcm5hbCBjbG9jay5cbiBcdCAqL1xuLVx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBMQU44NjVYX1JFR19NQUNfVFNVX1RJTUVSX0lOQ1IsXG4tXHRcdFx0XHQgICAgTUFDX1RTVV9USU1FUl9JTkNSX0NPVU5UX05BTk9TRUNPTkRTKTtcbitcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIExBTjg2NVhfUkVHX01BQ19UU1VfVElNRVJfSU5DUixcbitcdFx0XHRcdFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsXG4rXHRcdFx0XHRcdE1BQ19UU1VfVElNRVJfSU5DUl9DT1VOVF9OQU5PU0VDT05EUyk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdGRldl9lcnIoXHUwMDI2c3BpLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gY29uZmlnIFRTVSBUaW1lciBJbmNyIHJlZzogJWRcXG5cIixcbiBcdFx0XHRyZXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTczNDVmMzQ1ZmI5ZjJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9LY29uZmlnXG5AQCAtMCwwICsxLDE2IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgT0EgVEM2IDEwQkFTRS1UMXggTUFDLVBIWSBjb25maWd1cmF0aW9uXG4rI1xuK1xuK2NvbmZpZyBPQV9UQzZcbitcdHRyaXN0YXRlIFwiT1BFTiBBbGxpYW5jZSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZIHN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBTUElcbitcdHNlbGVjdCBQSFlMSUJcbitcdGhlbHBcbitcdCAgVGhpcyBsaWJyYXJ5IGltcGxlbWVudHMgT1BFTiBBbGxpYW5jZSBUQzYgMTBCQVNFLVQxeCBNQUMtUEhZXG4rXHQgIFNlcmlhbCBJbnRlcmZhY2UgcHJvdG9jb2wgZm9yIHN1cHBvcnRpbmcgMTBCQVNFLVQxeCBNQUMtUEhZcy5cbitcbitcdCAgVG8ga25vdyB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscywgcmVmZXIgZG9jdW1lbnRhdGlvbiBpblxuK1x0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9vYS10YzYtZnJhbWV3b3JrLnJzdFx1MDAzZS5cbitcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvTWFrZWZpbGVcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOTY0ZjY2OGVmYzJkM2Fcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9NYWtlZmlsZVxuQEAgLTAsMCArMSw3IEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgTWFrZWZpbGUgZm9yIE9BIFRDNiAxMEJBU0UtVDF4IE1BQy1QSFlcbisjXG4rXG4rb2JqLSQoQ09ORklHX09BX1RDNikgOj0gb2FfdGM2X21vZC5vXG4rb2FfdGM2X21vZC1vYmpzIDo9IG9hX3RjNi5vIG9hX3RjNl9wdHAubyBvYV90YzZfdHN0YW1wLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzYuY1xuc2ltaWxhcml0eSBpbmRleCA3OSVcbnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG5yZW5hbWUgdG8gZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNi5jXG5pbmRleCAwNzI3ZDUzMzQ1YTMzYi4uZDRlOTQ3MjRmNjQ5MTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNi5jXG5AQCAtMTIsMTQ5ICsxMiwxNSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2FfdGM2LmhcdTAwM2VcbiBcbi0vKiBPUEVOIEFsbGlhbmNlIFRDNiByZWdpc3RlcnMgKi9cbi0vKiBTdGFuZGFyZCBDYXBhYmlsaXRpZXMgUmVnaXN0ZXIgKi9cbi0jZGVmaW5lIE9BX1RDNl9SRUdfU1REQ0FQXHRcdFx0MHgwMDAyXG4tI2RlZmluZSBTVERDQVBfRElSRUNUX1BIWV9SRUdfQUNDRVNTXHRcdEJJVCg4KVxuLVxuLS8qIFJlc2V0IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqL1xuLSNkZWZpbmUgT0FfVEM2X1JFR19SRVNFVFx0XHRcdDB4MDAwM1xuLSNkZWZpbmUgUkVTRVRfU1dSRVNFVFx0XHRcdFx0QklUKDApXHQvKiBTb2Z0d2FyZSBSZXNldCAqL1xuLVxuLS8qIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgIzAgKi9cbi0jZGVmaW5lIE9BX1RDNl9SRUdfQ09ORklHMFx0XHRcdDB4MDAwNFxuLSNkZWZpbmUgQ09ORklHMF9TWU5DXHRcdFx0XHRCSVQoMTUpXG4tI2RlZmluZSBDT05GSUcwX1pBUkZFX0VOQUJMRVx0XHRcdEJJVCgxMilcbi1cbi0vKiBTdGF0dXMgUmVnaXN0ZXIgIzAgKi9cbi0jZGVmaW5lIE9BX1RDNl9SRUdfU1RBVFVTMFx0XHRcdDB4MDAwOFxuLSNkZWZpbmUgU1RBVFVTMF9SRVNFVENcdFx0XHRcdEJJVCg2KVx0LyogUmVzZXQgQ29tcGxldGUgKi9cbi0jZGVmaW5lIFNUQVRVUzBfSEVBREVSX0VSUk9SXHRcdFx0QklUKDUpXG4tI2RlZmluZSBTVEFUVVMwX0xPU1NfT0ZfRlJBTUVfRVJST1JcdFx0QklUKDQpXG4tI2RlZmluZSBTVEFUVVMwX1JYX0JVRkZFUl9PVkVSRkxPV19FUlJPUlx0QklUKDMpXG4tI2RlZmluZSBTVEFUVVMwX1RYX1BST1RPQ09MX0VSUk9SXHRcdEJJVCgwKVxuLVxuLS8qIEJ1ZmZlciBTdGF0dXMgUmVnaXN0ZXIgKi9cbi0jZGVmaW5lIE9BX1RDNl9SRUdfQlVGRkVSX1NUQVRVU1x0XHQweDAwMEJcbi0jZGVmaW5lIEJVRkZFUl9TVEFUVVNfVFhfQ1JFRElUU19BVkFJTEFCTEVcdEdFTk1BU0soMTUsIDgpXG4tI2RlZmluZSBCVUZGRVJfU1RBVFVTX1JYX0NIVU5LU19BVkFJTEFCTEVcdEdFTk1BU0soNywgMClcbi1cbi0vKiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAjMCAqL1xuLSNkZWZpbmUgT0FfVEM2X1JFR19JTlRfTUFTSzBcdFx0XHQweDAwMENcbi0jZGVmaW5lIElOVF9NQVNLMF9IRUFERVJfRVJSX01BU0tcdFx0QklUKDUpXG4tI2RlZmluZSBJTlRfTUFTSzBfTE9TU19PRl9GUkFNRV9FUlJfTUFTS1x0QklUKDQpXG4tI2RlZmluZSBJTlRfTUFTSzBfUlhfQlVGRkVSX09WRVJGTE9XX0VSUl9NQVNLXHRCSVQoMylcbi0jZGVmaW5lIElOVF9NQVNLMF9UWF9QUk9UT0NPTF9FUlJfTUFTS1x0XHRCSVQoMClcbi0jZGVmaW5lIElOVF9NQVNLMF9BTExfSU5URVJSVVBUUyAgICAgICAgICAgICAgICAoR0VOTUFTSyg1LCAwKSB8IFxcXG4tXHRcdFx0XHRcdFx0IEdFTk1BU0soMTIsIDcpKVxuLVxuLS8qIFBIWSBDbGF1c2UgMjIgcmVnaXN0ZXJzIGJhc2UgYWRkcmVzcyBhbmQgbWFzayAqL1xuLSNkZWZpbmUgT0FfVEM2X1BIWV9TVERfUkVHX0FERFJfQkFTRVx0XHQweEZGMDBcbi0jZGVmaW5lIE9BX1RDNl9QSFlfU1REX1JFR19BRERSX01BU0tcdFx0MHgxRlxuLVxuLS8qIENvbnRyb2wgY29tbWFuZCBoZWFkZXIgKi9cbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9EQVRBX05PVF9DVFJMXHRCSVQoMzEpXG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfV1JJVEVfTk9UX1JFQURcdEJJVCgyOSlcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9NRU1fTUFQX1NFTEVDVE9SXHRHRU5NQVNLKDI3LCAyNClcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9BRERSXHRcdFx0R0VOTUFTSygyMywgOClcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9MRU5HVEhcdFx0R0VOTUFTSyg3LCAxKVxuLSNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX1BBUklUWVx0XHRCSVQoMClcbi1cbi0vKiBEYXRhIGhlYWRlciAqL1xuLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0RBVEFfTk9UX0NUUkxcdEJJVCgzMSlcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9EQVRBX1ZBTElEXHRcdEJJVCgyMSlcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9TVEFSVF9WQUxJRFx0XHRCSVQoMjApXG4tI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfU1RBUlRfV09SRF9PRkZTRVRcdEdFTk1BU0soMTksIDE2KVxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0VORF9WQUxJRFx0XHRCSVQoMTQpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfRU5EX0JZVEVfT0ZGU0VUXHRHRU5NQVNLKDEzLCA4KVxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1BBUklUWVx0XHRCSVQoMClcbi1cbi0vKiBEYXRhIGZvb3RlciAqL1xuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0VYVEVOREVEX1NUU1x0XHRCSVQoMzEpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfUlhEX0hFQURFUl9CQURcdEJJVCgzMClcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9DT05GSUdfU1lOQ1x0XHRCSVQoMjkpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfUlhfQ0hVTktTXHRcdEdFTk1BU0soMjgsIDI0KVxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0RBVEFfVkFMSURcdFx0QklUKDIxKVxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1ZBTElEXHRcdEJJVCgyMClcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9TVEFSVF9XT1JEX09GRlNFVFx0R0VOTUFTSygxOSwgMTYpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfRU5EX1ZBTElEXHRcdEJJVCgxNClcbi0jZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfQllURV9PRkZTRVRcdEdFTk1BU0soMTMsIDgpXG4tI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfVFhfQ1JFRElUU1x0XHRHRU5NQVNLKDUsIDEpXG4tXG4tLyogUEhZIOKAkyBDbGF1c2UgNDUgcmVnaXN0ZXJzIG1lbW9yeSBtYXAgc2VsZWN0b3IgKE1NUykgYXMgcGVyIHRhYmxlIDYgaW4gdGhlXG4tICogT1BFTiBBbGxpYW5jZSBzcGVjaWZpY2F0aW9uLlxuLSAqL1xuLSNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUENTX01NUzJcdFx0XHQyXHQvKiBNTUQgMyAqL1xuLSNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE1BX1BNRF9NTVMzXHRcdDNcdC8qIE1NRCAxICovXG4tI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzRcdFx0NFx0LyogTU1EIDMxICovXG4tI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9BVVRPX05FR19NTVM1XHRcdDVcdC8qIE1NRCA3ICovXG4tI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QT1dFUl9VTklUX01NUzZcdFx0Nlx0LyogTU1EIDEzICovXG4tXG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfU0laRVx0XHRcdDRcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFXHRcdDRcbi0jZGVmaW5lIE9BX1RDNl9DVFJMX0lHTk9SRURfU0laRVx0XHQ0XG4tI2RlZmluZSBPQV9UQzZfQ1RSTF9NQVhfUkVHSVNURVJTXHRcdDEyOFxuLSNkZWZpbmUgT0FfVEM2X0NUUkxfU1BJX0JVRl9TSVpFXHRcdChPQV9UQzZfQ1RSTF9IRUFERVJfU0laRSArXFxcbi1cdFx0XHRcdFx0XHQoT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSUyAqXFxcbi1cdFx0XHRcdFx0XHRPQV9UQzZfQ1RSTF9SRUdfVkFMVUVfU0laRSkgK1xcXG4tXHRcdFx0XHRcdFx0T0FfVEM2X0NUUkxfSUdOT1JFRF9TSVpFKVxuLSNkZWZpbmUgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRVx0XHQ2NFxuLSNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NJWkVcdFx0XHQ0XG4tI2RlZmluZSBPQV9UQzZfQ0hVTktfU0laRVx0XHRcdChPQV9UQzZfREFUQV9IRUFERVJfU0laRSArXFxcbi1cdFx0XHRcdFx0XHRPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFKVxuLSNkZWZpbmUgT0FfVEM2X01BWF9UWF9DSFVOS1NcdFx0XHQ0OFxuLSNkZWZpbmUgT0FfVEM2X1NQSV9EQVRBX0JVRl9TSVpFXHRcdChPQV9UQzZfTUFYX1RYX0NIVU5LUyAqXFxcbi1cdFx0XHRcdFx0XHRPQV9UQzZfQ0hVTktfU0laRSlcbi0jZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfREVMQVlcdFx0MTAwMFxuLSNkZWZpbmUgU1RBVFVTMF9SRVNFVENfUE9MTF9USU1FT1VUXHRcdDEwMDAwMDBcbi1cbi0vKiBJbnRlcm5hbCBzdHJ1Y3R1cmUgZm9yIE1BQy1QSFkgZHJpdmVycyAqL1xuLXN0cnVjdCBvYV90YzYge1xuLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG4tXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpb2J1cztcbi1cdHN0cnVjdCBzcGlfZGV2aWNlICpzcGk7XG4tXHRzdHJ1Y3QgbXV0ZXggc3BpX2N0cmxfbG9jazsgLyogUHJvdGVjdHMgc3BpIGNvbnRyb2wgdHJhbnNmZXIgKi9cbi1cdHNwaW5sb2NrX3QgdHhfc2tiX2xvY2s7IC8qIFByb3RlY3RzIHR4IHNrYiBoYW5kbGluZyAqL1xuLVx0dm9pZCAqc3BpX2N0cmxfdHhfYnVmO1xuLVx0dm9pZCAqc3BpX2N0cmxfcnhfYnVmO1xuLVx0dm9pZCAqc3BpX2RhdGFfdHhfYnVmO1xuLVx0dm9pZCAqc3BpX2RhdGFfcnhfYnVmO1xuLVx0c3RydWN0IHNrX2J1ZmYgKm9uZ29pbmdfdHhfc2tiO1xuLVx0c3RydWN0IHNrX2J1ZmYgKndhaXRpbmdfdHhfc2tiO1xuLVx0c3RydWN0IHNrX2J1ZmYgKnJ4X3NrYjtcbi1cdHUxNiB0eF9za2Jfb2Zmc2V0O1xuLVx0dTE2IHNwaV9kYXRhX3R4X2J1Zl9vZmZzZXQ7XG4tXHR1MTYgdHhfY3JlZGl0cztcbi1cdHU4IHJ4X2NodW5rc19hdmFpbGFibGU7XG4tXHRib29sIHJ4X2J1Zl9vdmVyZmxvdztcbi1cdGJvb2wgaW50X2ZsYWc7XG4tXHRib29sIGRpc2FibGVfdHJhZmZpYztcbi19O1xuLVxuLWVudW0gb2FfdGM2X2hlYWRlcl90eXBlIHtcbi1cdE9BX1RDNl9DVFJMX0hFQURFUixcbi1cdE9BX1RDNl9EQVRBX0hFQURFUixcbi19O1xuLVxuLWVudW0gb2FfdGM2X3JlZ2lzdGVyX29wIHtcbi1cdE9BX1RDNl9DVFJMX1JFR19SRUFEID0gMCxcbi1cdE9BX1RDNl9DVFJMX1JFR19XUklURSA9IDEsXG4tfTtcbi1cbi1lbnVtIG9hX3RjNl9kYXRhX3ZhbGlkX2luZm8ge1xuLVx0T0FfVEM2X0RBVEFfSU5WQUxJRCxcbi1cdE9BX1RDNl9EQVRBX1ZBTElELFxuLX07XG4rI2luY2x1ZGUgXCJvYV90YzZfc3RkX2RlZi5oXCJcbiBcbi1lbnVtIG9hX3RjNl9kYXRhX3N0YXJ0X3ZhbGlkX2luZm8ge1xuLVx0T0FfVEM2X0RBVEFfU1RBUlRfSU5WQUxJRCxcbi1cdE9BX1RDNl9EQVRBX1NUQVJUX1ZBTElELFxuK3N0cnVjdCBvYV90YzZfdHNfaW5mb19yeCB7XG4rXHRib29sIHJ0c2E7XG4rXHRib29sIHJ0c3A7XG4gfTtcbiBcbi1lbnVtIG9hX3RjNl9kYXRhX2VuZF92YWxpZF9pbmZvIHtcbi1cdE9BX1RDNl9EQVRBX0VORF9JTlZBTElELFxuLVx0T0FfVEM2X0RBVEFfRU5EX1ZBTElELFxuK3N0cnVjdCBvYV90YzZfdHNfaW5mb190eCB7XG4rXHR1OCB0c2M7XG4gfTtcbiBcbiBzdGF0aWMgaW50IG9hX3RjNl9zcGlfdHJhbnNmZXIoc3RydWN0IG9hX3RjNiAqdGM2LFxuQEAgLTE5MSw2ICs1NywxNjggQEAgc3RhdGljIGludCBvYV90YzZfZ2V0X3Bhcml0eSh1MzIgcClcbiBcdHJldHVybiAhKChwIFx1MDAzZVx1MDAzZSAyOCkgXHUwMDI2IDEpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IG9hX3RjNl90c19pbmZvX3R4ICpvYV90YzZfdHNpbmZvX3R4KHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3Qgb2FfdGM2X3RzX2luZm9fdHggKikoc2tiLVx1MDAzZWNiKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBvYV90YzZfdHNfaW5mb19yeCAqb2FfdGM2X3RzaW5mb19yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuK3tcbitcdHJldHVybiAoc3RydWN0IG9hX3RjNl90c19pbmZvX3J4ICopKHNrYi1cdTAwM2VjYik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG9hX3RjNl9kZWZlcl9mb3JfaHd0c3RhbXAoc3RydWN0IG9hX3RjNiAqdGM2LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbit7XG4rXHRpZiAoIXRjNi1cdTAwM2Vod190c3RhbXBfZW5hYmxlZClcbitcdFx0cmV0dXJuO1xuK1x0aWYgKCFza2IgfHwgKHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyBcdTAwMjYgU0tCVFhfSFdfVFNUQU1QKSA9PSAwKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAodGM2LVx1MDAzZXRzX2NvbmZpZy50eF90eXBlICE9IEhXVFNUQU1QX1RYX09OKSB7XG4rXHRcdHRjNi1cdTAwM2V0eF9od3RzdGFtcF9sb3N0Kys7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNrYl9zaGluZm8oc2tiKS1cdTAwM2V0eF9mbGFncyB8PSBTS0JUWF9JTl9QUk9HUkVTUztcbitcdHU4IHJldCA9IHRjNi1cdTAwM2V0eF90c19pZHgrKztcbitcbitcdGlmIChyZXQgPT0gT0FfVEM2X1RUU0NDX1JFR19JRClcbitcdFx0dGM2LVx1MDAzZXR4X3RzX2lkeCA9IE9BX1RDNl9UVFNDQV9SRUdfSUQ7XG4rXHRvYV90YzZfdHNpbmZvX3R4KHNrYiktXHUwMDNldHNjID0gcmV0O1xuK1xuK1x0bGlzdF9hZGRfdGFpbChcdTAwMjZza2ItXHUwMDNlbGlzdCwgXHUwMDI2dGM2LVx1MDAzZXR4X3RzX3NrYl9xKTtcbit9XG4rXG4rc3RhdGljIGludCBvYV90YzZfcHJvY2Vzc19kZWZlcnJlZF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2LCB1OCB0c2MpXG4re1xuK1x0c3RydWN0IHNrYl9zaGFyZWRfaHd0c3RhbXBzIHRzdGFtcDtcbitcdHN0cnVjdCBvYV90YzZfdHNfaW5mb190eCAqc2tpO1xuK1x0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDtcbitcdGJvb2wgZm91bmQgPSBmYWxzZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0LyogU2l6ZSBvZiBkYXRhIG11c3QgbWF0Y2ggT0FfVEM2X1RTVEFNUF9TWiAqL1xuK1x0dTMyIGRhdGFbMl07XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2tiLCB0bXAsIFx1MDAyNnRjNi1cdTAwM2V0eF90c19za2JfcSwgbGlzdCkge1xuK1x0XHRza2kgPSBvYV90YzZfdHNpbmZvX3R4KHNrYik7XG4rXHRcdGlmIChza2ktXHUwMDNldHNjICE9IHRzYylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKGZvdW5kKSB7XG4rXHRcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcdCAgICAgXCJNdWx0aXBsZSBza2JzLiB0c2MgPSAlZFxcblwiLFxuK1x0XHRcdFx0XHQgICAgIHRzYyk7XG4rXHRcdFx0dGM2LVx1MDAzZXR4X2h3dHN0YW1wX2VycisrO1xuK1x0XHR9XG4rXHRcdGZvdW5kID0gdHJ1ZTtcbitcdFx0bGlzdF9kZWwoXHUwMDI2c2tiLVx1MDAzZWxpc3QpO1xuK1xuK1x0XHQvKiBSZXRyaWV2ZSB0aGUgdGltZXN0YW1waW5nIGluZm8gKi9cbitcdFx0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJzKHRjNixcbitcdFx0XHRcdFx0ICAgIE9BX1RDNl9SRUdfVFRTQ0FfSElHSCArXG4rXHRcdFx0XHRcdCAgICAyICogKHRzYyAtIDEpLCBcdTAwMjZkYXRhWzBdLCAyKTtcbitcbitcdFx0aWYgKCFyZXQpIHtcbitcdFx0XHR0c3RhbXAuaHd0c3RhbXAgPSBrdGltZV9zZXQoZGF0YVswXSwgZGF0YVsxXSk7XG4rXHRcdFx0c2tiX3RzdGFtcF90eChza2IsIFx1MDAyNnRzdGFtcCk7XG4rXHRcdFx0dGM2LVx1MDAzZXR4X2h3dHN0YW1wX3BrdHMrKztcbitcdFx0fVxuK1xuK1x0XHRkZXZfa2ZyZWVfc2tiKHNrYik7XG4rXHR9XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgdm9pZCBvYV90YzZfZXZlbnRzX2hhbmRsZShzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiB2YWwpXG4re1xuK1x0LyogQ2hlY2sgVFggdGltZXN0YW1waW5nICovXG4rXHRpZiAodmFsIFx1MDAyNiBTVEFUVVMwX1RUU0NBQSlcbitcdFx0b2FfdGM2X3Byb2Nlc3NfZGVmZXJyZWRfc2tiKHRjNiwgT0FfVEM2X1RUU0NBX1JFR19JRCk7XG4rXG4rXHRpZiAodmFsIFx1MDAyNiBTVEFUVVMwX1RUU0NBQilcbitcdFx0b2FfdGM2X3Byb2Nlc3NfZGVmZXJyZWRfc2tiKHRjNiwgT0FfVEM2X1RUU0NCX1JFR19JRCk7XG4rXG4rXHRpZiAodmFsIFx1MDAyNiBTVEFUVVMwX1RUU0NBQylcbitcdFx0b2FfdGM2X3Byb2Nlc3NfZGVmZXJyZWRfc2tiKHRjNiwgT0FfVEM2X1RUU0NDX1JFR19JRCk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG9hX3RjNl91cGRhdGVfdHNfaW5fcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbit7XG4rXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGM2LVx1MDAzZXJ4X3NrYjtcbitcdHN0cnVjdCBvYV90YzZfdHNfaW5mb19yeCAqc2tpO1xuK1x0X19iZTMyIHRzX3ZhbFsyXTtcbitcdHUzMiB0c1syXTtcbitcbitcdGlmICghdGM2LVx1MDAzZWh3X3RzdGFtcF9lbmFibGVkKVxuK1x0XHRyZXR1cm47XG4rXHRza2kgPSBvYV90YzZfdHNpbmZvX3J4KHNrYik7XG4rXHRpZiAoIXNraS1cdTAwM2VydHNhKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtZW1jcHkoXHUwMDI2dHNfdmFsWzBdLCBza2ItXHUwMDNlZGF0YSwgNCk7XG4rXHRtZW1jcHkoXHUwMDI2dHNfdmFsWzFdLCAodTMyICopc2tiLVx1MDAzZWRhdGEgKyAxLCA0KTtcbitcbitcdHRzWzBdID0gYmUzMl90b19jcHUodHNfdmFsWzBdKTtcbitcdHRzWzFdID0gYmUzMl90b19jcHUodHNfdmFsWzFdKTtcbitcbitcdC8qIENoZWNrIHBhcml0eSAqL1xuK1x0aWYgKChvYV90YzZfZ2V0X3Bhcml0eSh0c1swXSkgXiBvYV90YzZfZ2V0X3Bhcml0eSh0c1sxXSkpID09XG4rXHQgICAgIXNraS1cdTAwM2VydHNwKSB7XG4rXHRcdHN0cnVjdCBza2Jfc2hhcmVkX2h3dHN0YW1wcyAqaHdfdHM7XG4rXG4rXHRcdC8qIFJlcG9ydCB0aW1lc3RhbXAgdG8gdGhlIHVwcGVyIGxheWVycyAqL1xuK1x0XHRod190cyA9IHNrYl9od3RzdGFtcHMoc2tiKTtcbitcdFx0bWVtc2V0KGh3X3RzLCAwLCBzaXplb2YoKmh3X3RzKSk7XG4rXHRcdGh3X3RzLVx1MDAzZWh3dHN0YW1wID0ga3RpbWVfc2V0KHRzWzBdLCB0c1sxXSk7XG4rXHR9XG4rXHRza2JfcHVsbChza2IsIHNpemVvZih0cykpO1xuK31cbitcbitzdGF0aWMgaW50IG9hX3RjNl91cGRhdGVfc3RhbmRhcmRfY2FwYWJpbGl0eShzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4re1xuK1x0dTMyIHJlZ3ZhbCA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NURENBUCwgXHUwMDI2cmVndmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmVndmFsIFx1MDAyNiBTVERDQVBfRlJBTUVfVElNRVNUQU1QX0NBUEFCSUxJVFkpXG4rXHRcdHRjNi1cdTAwM2Vod190c3RhbXBfc3VwcG9ydGVkID0gdHJ1ZTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiBvYV90YzZfaW9jdGwgLSBnZW5lcmljIGlvY3RsIGludGVyZmFjZSBmb3IgTUFDLVBIWSBkcml2ZXJzLlxuKyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXG4rICogQHJxOiByZXF1ZXN0IGZyb20gc29ja2V0IGludGVyZmFjZVxuKyAqIEBjbWQ6IHZhbHVlIHRvIHNldC9nZXQgdGltZXN0YW1wIGNvbmZpZ3VyYXRpb25cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXG4rICovXG4raW50IG9hX3RjNl9pb2N0bChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHRjNi1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChjbWQgPT0gU0lPQ1NIV1RTVEFNUCB8fCBjbWQgPT0gU0lPQ0dIV1RTVEFNUClcbitcdFx0cmV0dXJuIG9hX3RjNl90c3RhbXBfaW9jdGwodGM2LCBycSwgY21kKTtcbitcdGVsc2VcbitcdFx0cmV0dXJuIHBoeV9kb19pb2N0bF9ydW5uaW5nKHRjNi1cdTAwM2VuZXRkZXYsIHJxLCBjbWQpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaW9jdGwpO1xuK1xuKy8qKlxuKyAqIG9hX3RjNl9zZXRfdmVuZDFfbW1zIC0gQWRkIHZlbmRvciBzcGVjaWZpYyBNRElPX01NRCB0byBPQSBUQzYgTU1TXG4rICogbWFwcGVyIHZhbHVlLlxuKyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXG4rICogQG1tczogdmVuZG9yIGRlZmluZWQgTU1TIHZhbHVlIGZvciBWRU5EMSBtZGlvIGRldmljZS5cbisgKi9cbit2b2lkIG9hX3RjNl9zZXRfdmVuZDFfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgaW50IG1tcylcbit7XG4rXHR0YzYtXHUwMDNldmVuZDFfbW1zID0gbW1zO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfc2V0X3ZlbmQxX21tcyk7XG4rXG4gc3RhdGljIF9fYmUzMiBvYV90YzZfcHJlcGFyZV9jdHJsX2hlYWRlcih1MzIgYWRkciwgdTggbGVuZ3RoLFxuIFx0XHRcdFx0XHQgZW51bSBvYV90YzZfcmVnaXN0ZXJfb3AgcmVnX29wKVxuIHtcbkBAIC0zNTUsNiArMzgzLDgzIEBAIGludCBvYV90YzZfcmVhZF9yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBhZGRyZXNzLCB1MzIgKnZhbHVlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfcmVhZF9yZWdpc3Rlcik7XG4gXG4rLyoqXG4rICogb2FfdGM2X3JlYWRfcmVnaXN0ZXJzX21tcyAtIGZ1bmN0aW9uIGZvciByZWFkaW5nIG11bHRpcGxlIGNvbnNlY3V0aXZlXG4rICogcmVnaXN0ZXJzIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgbWVtb3J5IG1hcCBzZWxlY3RvciBwYWlyLlxuKyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXG4rICogQGFkZHJlc3M6IGFkZHJlc3Mgb2YgdGhlIGZpcnN0IHJlZ2lzdGVyIHRvIGJlIHJlYWQgaW4gdGhlIE1BQy1QSFkuXG4rICogQG1tczogTWVtb3J5IG1hcCBzZWxlY3RvciBmb3IgdGhlIHJlZ2lzdGVycyB0byBiZSByZWFkLlxuKyAqIEB2YWx1ZTogdmFsdWVzIHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RhcnRpbmcgcmVnaXN0ZXIgYWRkcmVzcyBAYWRkcmVzcy5cbisgKiBAbGVuZ3RoOiBudW1iZXIgb2YgY29uc2VjdXRpdmUgcmVnaXN0ZXJzIHRvIGJlIHJlYWQgZnJvbSBAYWRkcmVzcy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXG4rICovXG4raW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgYWRkcmVzcywgdTE2IG1tcyxcbitcdFx0XHQgICAgICB1MzIgdmFsdWVbXSwgdTggbGVuZ3RoKVxuK3tcbitcdHUzMiBtbXNfYWRkciA9ICh1MzIpbW1zIFx1MDAzY1x1MDAzYyAxNiB8ICh1MzIpYWRkcmVzcztcbitcbitcdHJldHVybiBvYV90YzZfcmVhZF9yZWdpc3RlcnModGM2LCBtbXNfYWRkciwgdmFsdWUsIGxlbmd0aCk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXMpO1xuK1xuKy8qKlxuKyAqIG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyAtIGZ1bmN0aW9uIGZvciByZWFkaW5nIGEgTUFDLVBIWSByZWdpc3RlclxuKyAqIGZvciB0aGUgZ2l2ZW4gYWRkcmVzcywgbWVtb3J5IG1hcCBzZWxlY3RvciBwYWlyLlxuKyAqIEB0YzY6IG9hX3RjNiBzdHJ1Y3QuXG4rICogQGFkZHJlc3M6IHJlZ2lzdGVyIGFkZHJlc3Mgb2YgdGhlIE1BQy1QSFkgdG8gYmUgcmVhZC5cbisgKiBAbW1zOiBNZW1vcnkgTWFwIFNlbGVjdG9yIGZvciB0aGUgZ2l2ZW4gYWRkcmVzc1xuKyAqIEB2YWx1ZTogdmFsdWUgcmVhZCBmcm9tIHRoZSBAYWRkcmVzcyByZWdpc3RlciBhZGRyZXNzIG9mIHRoZSBNQUMtUEhZLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cbisgKi9cbitpbnQgb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsXG4rXHRcdFx0ICAgICB1MzIgKnZhbHVlKVxuK3tcbitcdHJldHVybiBvYV90YzZfcmVhZF9yZWdpc3RlcnNfbW1zKHRjNiwgYWRkcmVzcywgbW1zLCB2YWx1ZSwgMSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyk7XG4rXG4rLyoqXG4rICogb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXMgLSBmdW5jdGlvbiBmb3Igd3JpdGluZyBtdWx0aXBsZSBjb25zZWN1dGl2ZVxuKyAqIHJlZ2lzdGVycyBmb3IgdGhlIGdpdmVuIGFkZHJlc3MsIG1lbW9yeSBtYXAgc2VsZWN0b3IgcGFpci5cbisgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuKyAqIEBhZGRyZXNzOiBhZGRyZXNzIG9mIHRoZSBmaXJzdCByZWdpc3RlciB0byBiZSB3cml0dGVuIGluIHRoZSBNQUMtUEhZLlxuKyAqIEBtbXM6IG1lbW9yeSBtYXAgU2VsZWN0b3IgZm9yIHRoZSBnaXZlbiByZWdpc3Rlci5cbisgKiBAdmFsdWU6IHZhbHVlcyB0byBiZSB3cml0dGVuIGZyb20gdGhlIHN0YXJ0aW5nIHJlZ2lzdGVyIGFkZHJlc3MgQGFkZHJlc3MuXG4rICogQGxlbmd0aDogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIHJlZ2lzdGVycyB0byBiZSB3cml0dGVuIGZyb20gQGFkZHJlc3MuXG4rICpcbisgKiBNYXhpbXVtIG9mIDEyOCBjb25zZWN1dGl2ZSByZWdpc3RlcnMgY2FuIGJlIHdyaXR0ZW4gc3RhcnRpbmcgYXQgQGFkZHJlc3MuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvdGhlcndpc2UgZmFpbGVkLlxuKyAqL1xuK2ludCBvYV90YzZfd3JpdGVfcmVnaXN0ZXJzX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxuK1x0XHRcdCAgICAgICB1MzIgdmFsdWVbXSwgdTggbGVuZ3RoKVxuK3tcbitcdHUzMiBtbXNfYWRkciA9ICh1MzIpbW1zIFx1MDAzY1x1MDAzYyAxNiB8ICh1MzIpYWRkcmVzcztcbitcbitcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJzKHRjNiwgbW1zX2FkZHIsIHZhbHVlLCBsZW5ndGgpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfd3JpdGVfcmVnaXN0ZXJzX21tcyk7XG4rXG4rLyoqXG4rICogb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyAtIGZ1bmN0aW9uIGZvciB3cml0aW5nIGEgTUFDLVBIWSByZWdpc3RlclxuKyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbWVtb3J5IG1hcCBzZWxlY3Rvci5cbisgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuKyAqIEBhZGRyZXNzOiByZWdpc3RlciBhZGRyZXNzIG9mIHRoZSBNQUMtUEhZIHRvIGJlIHdyaXR0ZW4uXG4rICogQG1tczogbWVtb3J5IG1hcCBzZWxlY3RvciBmb3IgdGhlIGdpdmVuIHJlZ2lzdGVyLlxuKyAqIEB2YWx1ZTogdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiB0aGUgQGFkZHJlc3MgcmVnaXN0ZXIgYWRkcmVzcyBvZlxuKyAqIHRoZSBNQUMtUEhZLlxuKyAqXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3Mgb3RoZXJ3aXNlIGZhaWxlZC5cbisgKi9cbitpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxuK1x0XHRcdCAgICAgIHUzMiB2YWx1ZSlcbit7XG4rXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXModGM2LCBhZGRyZXNzLCBtbXMsIFx1MDAyNnZhbHVlLCAxKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyk7XG4rXG4gLyoqXG4gICogb2FfdGM2X3dyaXRlX3JlZ2lzdGVycyAtIGZ1bmN0aW9uIGZvciB3cml0aW5nIG11bHRpcGxlIGNvbnNlY3V0aXZlIHJlZ2lzdGVycy5cbiAgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuQEAgLTQ0NCw3ICs1NDksNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9tZGlvYnVzX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcmVnbnVtLFxuIFx0XHRcdFx0ICAgICB2YWwpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG9hX3RjNl9nZXRfcGh5X2M0NV9tbXMoaW50IGRldm51bSlcbitzdGF0aWMgaW50IG9hX3RjNl9nZXRfcGh5X2M0NV9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCBpbnQgZGV2bnVtKVxuIHtcbiBcdHN3aXRjaCAoZGV2bnVtKSB7XG4gXHRjYXNlIE1ESU9fTU1EX1BDUzpcbkBAIC00NTcsNiArNTYyLDggQEAgc3RhdGljIGludCBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKGludCBkZXZudW0pXG4gXHRcdHJldHVybiBPQV9UQzZfUEhZX0M0NV9BVVRPX05FR19NTVM1O1xuIFx0Y2FzZSBNRElPX01NRF9QT1dFUl9VTklUOlxuIFx0XHRyZXR1cm4gT0FfVEM2X1BIWV9DNDVfUE9XRVJfVU5JVF9NTVM2O1xuK1x0Y2FzZSBNRElPX01NRF9WRU5EMTpcbitcdFx0cmV0dXJuIHRjNi1cdTAwM2V2ZW5kMV9tbXM7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5AQCAtNDY2LDE0ICs1NzMsMTQgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c19yZWFkX2M0NShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgaW50IGRldm51bSxcbiBcdFx0XHRcdCAgIGludCByZWdudW0pXG4ge1xuIFx0c3RydWN0IG9hX3RjNiAqdGM2ID0gYnVzLVx1MDAzZXByaXY7XG4rXHRpbnQgbW1zLCByZXQ7XG4gXHR1MzIgcmVndmFsO1xuLVx0aW50IHJldDtcbiBcbi1cdHJldCA9IG9hX3RjNl9nZXRfcGh5X2M0NV9tbXMoZGV2bnVtKTtcbi1cdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdHJldHVybiByZXQ7XG4rXHRtbXMgPSBvYV90YzZfZ2V0X3BoeV9jNDVfbW1zKHRjNiwgZGV2bnVtKTtcbitcdGlmIChtbXMgXHUwMDNjIDApXG4rXHRcdHJldHVybiBtbXM7XG4gXG4tXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIChyZXQgXHUwMDNjXHUwMDNjIDE2KSB8IHJlZ251bSwgXHUwMDI2cmVndmFsKTtcbitcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyh0YzYsICh1MTYpcmVnbnVtLCAodTE2KW1tcywgXHUwMDI2cmVndmFsKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtNDg0LDEzICs1OTEsMTMgQEAgc3RhdGljIGludCBvYV90YzZfbWRpb2J1c193cml0ZV9jNDUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBkZXZudW0sXG4gXHRcdFx0XHQgICAgaW50IHJlZ251bSwgdTE2IHZhbClcbiB7XG4gXHRzdHJ1Y3Qgb2FfdGM2ICp0YzYgPSBidXMtXHUwMDNlcHJpdjtcbi1cdGludCByZXQ7XG4rXHRpbnQgbW1zO1xuIFxuLVx0cmV0ID0gb2FfdGM2X2dldF9waHlfYzQ1X21tcyhkZXZudW0pO1xuLVx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIHJldDtcbitcdG1tcyA9IG9hX3RjNl9nZXRfcGh5X2M0NV9tbXModGM2LCBkZXZudW0pO1xuK1x0aWYgKG1tcyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG1tcztcbiBcbi1cdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCAocmV0IFx1MDAzY1x1MDAzYyAxNikgfCByZWdudW0sIHZhbCk7XG4rXHRyZXR1cm4gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyh0YzYsICh1MTYpcmVnbnVtLCAodTE2KW1tcywgdmFsKTtcbiB9XG4gXG4gc3RhdGljIGludCBvYV90YzZfbWRpb2J1c19yZWdpc3RlcihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG5AQCAtNzE0LDYgKzgyMSw5IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3NfZXh0ZW5kZWRfc3RhdHVzKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdFx0cmV0dXJuIHJldDtcbiBcdH1cbiBcbitcdGlmICgodmFsdWUgXHUwMDI2IFNUQVRVUzBfVFRTQ0FfTUFTSykgIT0gMClcbitcdFx0b2FfdGM2X2V2ZW50c19oYW5kbGUodGM2LCB2YWx1ZSBcdTAwMjYgU1RBVFVTMF9UVFNDQV9NQVNLKTtcbitcbiBcdC8qIENsZWFyIHRoZSBlcnJvciBpbnRlcnJ1cHRzIHN0YXR1cyAqL1xuIFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHRjNiwgT0FfVEM2X1JFR19TVEFUVVMwLCB2YWx1ZSk7XG4gXHRpZiAocmV0KSB7XG5AQCAtNzk2LDYgKzkwNiw3IEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9zdWJtaXRfcnhfc2tiKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdCAgICB0YzYtXHUwMDNlcnhfc2tiLVx1MDAzZWxlbiBcdTAwM2UgRVRIX0ZDU19MRU4pXG4gXHRcdHNrYl90cmltKHRjNi1cdTAwM2VyeF9za2IsIHRjNi1cdTAwM2VyeF9za2ItXHUwMDNlbGVuIC0gRVRIX0ZDU19MRU4pO1xuIFxuK1x0b2FfdGM2X3VwZGF0ZV90c19pbl9yeF9za2IodGM2KTtcbiBcdHRjNi1cdTAwM2VyeF9za2ItXHUwMDNlcHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyh0YzYtXHUwMDNlcnhfc2tiLCB0YzYtXHUwMDNlbmV0ZGV2KTtcbiBcdHRjNi1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfcGFja2V0cysrO1xuIFx0dGM2LVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy5yeF9ieXRlcyArPSB0YzYtXHUwMDNlcnhfc2tiLVx1MDAzZWxlbjtcbkBAIC04MTAsMjQgKzkyMSwyOSBAQCBzdGF0aWMgdm9pZCBvYV90YzZfdXBkYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1OCBsZW5ndGgpXG4gXHRtZW1jcHkoc2tiX3B1dCh0YzYtXHUwMDNlcnhfc2tiLCBsZW5ndGgpLCBwYXlsb2FkLCBsZW5ndGgpO1xuIH1cbiBcbi1zdGF0aWMgaW50IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2Ioc3RydWN0IG9hX3RjNiAqdGM2KVxuK3N0YXRpYyBpbnQgb2FfdGM2X2FsbG9jYXRlX3J4X3NrYihzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBmb290ZXIpXG4ge1xuK1x0c3RydWN0IG9hX3RjNl90c19pbmZvX3J4ICpza2k7XG4rXG4gXHR0YzYtXHUwMDNlcnhfc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbih0YzYtXHUwMDNlbmV0ZGV2LCB0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZW10dSArXG4tXHRcdFx0XHRcdFx0RVRIX0hMRU4gKyBFVEhfRkNTX0xFTik7XG4rXHRcdFx0XHRcdFx0RVRIX0hMRU4gKyBFVEhfRkNTX0xFTiArIE9BX1RDNl9UU1RBTVBfU1opO1xuIFx0aWYgKCF0YzYtXHUwMDNlcnhfc2tiKSB7XG4gXHRcdHRjNi1cdTAwM2VuZXRkZXYtXHUwMDNlc3RhdHMucnhfZHJvcHBlZCsrO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbiBcbitcdHNraSA9IG9hX3RjNl90c2luZm9fcngodGM2LVx1MDAzZXJ4X3NrYik7XG4rXHRza2ktXHUwMDNlcnRzYSA9IEZJRUxEX0dFVChPQV9UQzZfREFUQV9GT09URVJfUlRTQV9WQUxJRCwgZm9vdGVyKTtcbitcdHNraS1cdTAwM2VydHNwID0gRklFTERfR0VUKE9BX1RDNl9EQVRBX0ZPT1RFUl9SVFNQX1ZBTElELCBmb290ZXIpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgb2FfdGM2X3ByY3NfY29tcGxldGVfcnhfZnJhbWUoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqcGF5bG9hZCxcbi1cdFx0XHRcdFx0IHUxNiBzaXplKVxuK1x0XHRcdFx0XHQgdTE2IHNpemUsIHUzMiBmb290ZXIpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdHJldCA9IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2IodGM2KTtcbitcdHJldCA9IG9hX3RjNl9hbGxvY2F0ZV9yeF9za2IodGM2LCBmb290ZXIpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC04MzgsMTEgKzk1NCwxMSBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX2NvbXBsZXRlX3J4X2ZyYW1lKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHU4ICpwYXlsb2FkLCB1MTYgc2l6ZSlcbitzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2ZyYW1lX3N0YXJ0KHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKnBheWxvYWQsIHUxNiBzaXplLCB1MzIgZm9vdGVyKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRyZXQgPSBvYV90YzZfYWxsb2NhdGVfcnhfc2tiKHRjNik7XG4rXHRyZXQgPSBvYV90YzZfYWxsb2NhdGVfcnhfc2tiKHRjNiwgZm9vdGVyKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtODg3LDcgKzEwMDMsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbiBcdFx0c2l6ZSA9IGVuZF9ieXRlX29mZnNldCArIDEgLSBzdGFydF9ieXRlX29mZnNldDtcbiBcdFx0cmV0dXJuIG9hX3RjNl9wcmNzX2NvbXBsZXRlX3J4X2ZyYW1lKHRjNixcbiBcdFx0XHRcdFx0XHQgICAgIFx1MDAyNmRhdGFbc3RhcnRfYnl0ZV9vZmZzZXRdLFxuLVx0XHRcdFx0XHRcdCAgICAgc2l6ZSk7XG4rXHRcdFx0XHRcdFx0ICAgICBzaXplLCBmb290ZXIpO1xuIFx0fVxuIFxuIFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmx5IHJ4IGZyYW1lIHN0YXJ0ICovXG5AQCAtODk1LDcgKzEwMTEsNyBAQCBzdGF0aWMgaW50IG9hX3RjNl9wcmNzX3J4X2NodW5rX3BheWxvYWQoc3RydWN0IG9hX3RjNiAqdGM2LCB1OCAqZGF0YSxcbiBcdFx0c2l6ZSA9IE9BX1RDNl9DSFVOS19QQVlMT0FEX1NJWkUgLSBzdGFydF9ieXRlX29mZnNldDtcbiBcdFx0cmV0dXJuIG9hX3RjNl9wcmNzX3J4X2ZyYW1lX3N0YXJ0KHRjNixcbiBcdFx0XHRcdFx0XHQgIFx1MDAyNmRhdGFbc3RhcnRfYnl0ZV9vZmZzZXRdLFxuLVx0XHRcdFx0XHRcdCAgc2l6ZSk7XG4rXHRcdFx0XHRcdFx0ICBzaXplLCBmb290ZXIpO1xuIFx0fVxuIFxuIFx0LyogUHJvY2VzcyB0aGUgY2h1bmsgd2l0aCBvbmx5IHJ4IGZyYW1lIGVuZCAqL1xuQEAgLTkyMCw3ICsxMDM2LDcgQEAgc3RhdGljIGludCBvYV90YzZfcHJjc19yeF9jaHVua19wYXlsb2FkKHN0cnVjdCBvYV90YzYgKnRjNiwgdTggKmRhdGEsXG4gXHRcdHNpemUgPSBPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFIC0gc3RhcnRfYnl0ZV9vZmZzZXQ7XG4gXHRcdHJldHVybiBvYV90YzZfcHJjc19yeF9mcmFtZV9zdGFydCh0YzYsXG4gXHRcdFx0XHRcdFx0ICBcdTAwMjZkYXRhW3N0YXJ0X2J5dGVfb2Zmc2V0XSxcbi1cdFx0XHRcdFx0XHQgIHNpemUpO1xuK1x0XHRcdFx0XHRcdCAgc2l6ZSwgZm9vdGVyKTtcbiBcdH1cbiBcbiBcdC8qIFByb2Nlc3MgdGhlIGNodW5rIHdpdGggb25nb2luZyByeCBmcmFtZSBkYXRhICovXG5AQCAtOTc0LDEzICsxMDkwLDE1IEBAIHN0YXRpYyBpbnQgb2FfdGM2X3Byb2Nlc3Nfc3BpX2RhdGFfcnhfYnVmKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGxlbmd0aClcbiB9XG4gXG4gc3RhdGljIF9fYmUzMiBvYV90YzZfcHJlcGFyZV9kYXRhX2hlYWRlcihib29sIGRhdGFfdmFsaWQsIGJvb2wgc3RhcnRfdmFsaWQsXG4tXHRcdFx0XHRcdCBib29sIGVuZF92YWxpZCwgdTggZW5kX2J5dGVfb2Zmc2V0KVxuK1x0XHRcdFx0XHQgYm9vbCBlbmRfdmFsaWQsIHU4IGVuZF9ieXRlX29mZnNldCxcbitcdFx0XHRcdFx0IHU4IHRzYylcbiB7XG4gXHR1MzIgaGVhZGVyID0gRklFTERfUFJFUChPQV9UQzZfREFUQV9IRUFERVJfREFUQV9OT1RfQ1RSTCxcbiBcdFx0XHRcdE9BX1RDNl9EQVRBX0hFQURFUikgfFxuIFx0XHQgICAgIEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX0RBVEFfVkFMSUQsIGRhdGFfdmFsaWQpIHxcbiBcdFx0ICAgICBGSUVMRF9QUkVQKE9BX1RDNl9EQVRBX0hFQURFUl9TVEFSVF9WQUxJRCwgc3RhcnRfdmFsaWQpIHxcbiBcdFx0ICAgICBGSUVMRF9QUkVQKE9BX1RDNl9EQVRBX0hFQURFUl9FTkRfVkFMSUQsIGVuZF92YWxpZCkgfFxuK1x0XHQgICAgIEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX1RTQ19PRkZTRVQsIHRzYykgfFxuIFx0XHQgICAgIEZJRUxEX1BSRVAoT0FfVEM2X0RBVEFfSEVBREVSX0VORF9CWVRFX09GRlNFVCxcbiBcdFx0XHRcdGVuZF9ieXRlX29mZnNldCk7XG4gXG5AQCAtOTk5LDYgKzExMTcsNyBAQCBzdGF0aWMgdm9pZCBvYV90YzZfYWRkX3R4X3NrYl90b19zcGlfYnVmKHN0cnVjdCBvYV90YzYgKnRjNilcbiBcdGVudW0gb2FfdGM2X2RhdGFfc3RhcnRfdmFsaWRfaW5mbyBzdGFydF92YWxpZDtcbiBcdHU4IGVuZF9ieXRlX29mZnNldCA9IDA7XG4gXHR1MTYgbGVuZ3RoX3RvX2NvcHk7XG4rXHR1OCB0c2MgPSAwO1xuIFxuIFx0LyogSW5pdGlhbCB2YWx1ZSBpcyBhc3NpZ25lZCBoZXJlIHRvIGF2b2lkIG1vcmUgdGhhbiA4MCBjaGFyYWN0ZXJzIGluXG4gXHQgKiB0aGUgZGVjbGFyYXRpb24gcGxhY2UuXG5AQCAtMTAwOCw4ICsxMTI3LDEwIEBAIHN0YXRpYyB2b2lkIG9hX3RjNl9hZGRfdHhfc2tiX3RvX3NwaV9idWYoc3RydWN0IG9hX3RjNiAqdGM2KVxuIFx0LyogU2V0IHN0YXJ0IHZhbGlkIGlmIHRoZSBjdXJyZW50IHR4IGNodW5rIGNvbnRhaW5zIHRoZSBzdGFydCBvZiB0aGUgdHhcbiBcdCAqIGV0aGVybmV0IGZyYW1lLlxuIFx0ICovXG4tXHRpZiAoIXRjNi1cdTAwM2V0eF9za2Jfb2Zmc2V0KVxuK1x0aWYgKCF0YzYtXHUwMDNldHhfc2tiX29mZnNldCkge1xuIFx0XHRzdGFydF92YWxpZCA9IE9BX1RDNl9EQVRBX1NUQVJUX1ZBTElEO1xuK1x0XHR0c2MgPSBvYV90YzZfdHNpbmZvX3R4KHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYiktXHUwMDNldHNjO1xuK1x0fVxuIFxuIFx0LyogSWYgdGhlIHJlbWFpbmluZyB0eCBza2IgbGVuZ3RoIGlzIG1vcmUgdGhhbiB0aGUgY2h1bmsgcGF5bG9hZCBzaXplIG9mXG4gXHQgKiA2NCBieXRlcyB0aGVuIGNvcHkgb25seSA2NCBieXRlcyBhbmQgbGVhdmUgdGhlIG9uZ29pbmcgdHggc2tiIGZvclxuQEAgLTEwMzAsMTIgKzExNTEsMTggQEAgc3RhdGljIHZvaWQgb2FfdGM2X2FkZF90eF9za2JfdG9fc3BpX2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHRcdHRjNi1cdTAwM2V0eF9za2Jfb2Zmc2V0ID0gMDtcbiBcdFx0dGM2LVx1MDAzZW5ldGRldi1cdTAwM2VzdGF0cy50eF9ieXRlcyArPSB0YzYtXHUwMDNlb25nb2luZ190eF9za2ItXHUwMDNlbGVuO1xuIFx0XHR0YzYtXHUwMDNlbmV0ZGV2LVx1MDAzZXN0YXRzLnR4X3BhY2tldHMrKztcbi1cdFx0a2ZyZWVfc2tiKHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYik7XG4rXG4rXHRcdC8qIEZyZWUgdGhlIG9uZXMgdGhhdCBhcmUgbm90IHNhdmVkIGZvciBsYXRlciBwcm9jZXNzaW5nLFxuK1x0XHQgKiBsaWtlIHRpbWVzdGFtcGluZy5cbitcdFx0ICovXG4rXHRcdGlmICghKHNrYl9zaGluZm8odGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiKS1cdTAwM2V0eF9mbGFncyBcdTAwMjZcbitcdFx0ICAgIFNLQlRYX0lOX1BST0dSRVNTKSlcbitcdFx0XHRrZnJlZV9za2IodGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiKTtcbiBcdFx0dGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiID0gTlVMTDtcbiBcdH1cbiBcbiBcdCp0eF9idWYgPSBvYV90YzZfcHJlcGFyZV9kYXRhX2hlYWRlcihPQV9UQzZfREFUQV9WQUxJRCwgc3RhcnRfdmFsaWQsXG4tXHRcdFx0XHRcdCAgICAgZW5kX3ZhbGlkLCBlbmRfYnl0ZV9vZmZzZXQpO1xuK1x0XHRcdFx0XHQgICAgIGVuZF92YWxpZCwgZW5kX2J5dGVfb2Zmc2V0LCB0c2MpO1xuIFx0dGM2LVx1MDAzZXNwaV9kYXRhX3R4X2J1Zl9vZmZzZXQgKz0gT0FfVEM2X0NIVU5LX1NJWkU7XG4gfVxuIFxuQEAgLTEwNTMsNiArMTE4MCw4IEBAIHN0YXRpYyB1MTYgb2FfdGM2X3ByZXBhcmVfc3BpX3R4X2J1Zl9mb3JfdHhfc2ticyhzdHJ1Y3Qgb2FfdGM2ICp0YzYpXG4gXHRcdFx0dGM2LVx1MDAzZW9uZ29pbmdfdHhfc2tiID0gdGM2LVx1MDAzZXdhaXRpbmdfdHhfc2tiO1xuIFx0XHRcdHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYiA9IE5VTEw7XG4gXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbitcdFx0XHRvYV90YzZfZGVmZXJfZm9yX2h3dHN0YW1wKHRjNixcbitcdFx0XHRcdFx0XHQgIHRjNi1cdTAwM2VvbmdvaW5nX3R4X3NrYik7XG4gXHRcdH1cbiBcdFx0aWYgKCF0YzYtXHUwMDNlb25nb2luZ190eF9za2IpXG4gXHRcdFx0YnJlYWs7XG5AQCAtMTA2OSw3ICsxMTk4LDcgQEAgc3RhdGljIHZvaWQgb2FfdGM2X2FkZF9lbXB0eV9jaHVua3NfdG9fc3BpX2J1ZihzdHJ1Y3Qgb2FfdGM2ICp0YzYsXG4gXG4gXHRoZWFkZXIgPSBvYV90YzZfcHJlcGFyZV9kYXRhX2hlYWRlcihPQV9UQzZfREFUQV9JTlZBTElELFxuIFx0XHRcdFx0XHQgICAgT0FfVEM2X0RBVEFfU1RBUlRfSU5WQUxJRCxcbi1cdFx0XHRcdFx0ICAgIE9BX1RDNl9EQVRBX0VORF9JTlZBTElELCAwKTtcbitcdFx0XHRcdFx0ICAgIE9BX1RDNl9EQVRBX0VORF9JTlZBTElELCAwLCBmYWxzZSk7XG4gXG4gXHR3aGlsZSAobmVlZGVkX2VtcHR5X2NodW5rcy0tKSB7XG4gXHRcdF9fYmUzMiAqdHhfYnVmID0gdGM2LVx1MDAzZXNwaV9kYXRhX3R4X2J1ZiArXG5AQCAtMTI2MSw2ICsxMzkwLDcgQEAgbmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFx0fVxuIFxuK1x0b2FfdGM2X3RzaW5mb190eChza2IpLVx1MDAzZXRzYyA9IDA7XG4gXHRzcGluX2xvY2tfYmgoXHUwMDI2dGM2LVx1MDAzZXR4X3NrYl9sb2NrKTtcbiBcdHRjNi1cdTAwM2V3YWl0aW5nX3R4X3NrYiA9IHNrYjtcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG5AQCAtMTI5NCw2ICsxNDI0LDkgQEAgc3RydWN0IG9hX3RjNiAqb2FfdGM2X2luaXQoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXHUwMDI2c3BpLVx1MDAzZWRldik7XG4gXHRtdXRleF9pbml0KFx1MDAyNnRjNi1cdTAwM2VzcGlfY3RybF9sb2NrKTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNnRjNi1cdTAwM2V0eF9za2JfbG9jayk7XG4rXHR0YzYtXHUwMDNldmVuZDFfbW1zID0gLUVPUE5PVFNVUFA7XG4rXHR0YzYtXHUwMDNldHhfdHNfaWR4ID0gT0FfVEM2X1RUU0NBX1JFR19JRDtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNnRjNi1cdTAwM2V0eF90c19za2JfcSk7XG4gXG4gXHQvKiBTZXQgdGhlIFNQSSBjb250cm9sbGVyIHRvIHB1bXAgYXQgcmVhbHRpbWUgcHJpb3JpdHkgKi9cbiBcdHRjNi1cdTAwM2VzcGktXHUwMDNlcnQgPSB0cnVlO1xuQEAgLTEzNTksNiArMTQ5MiwxMiBAQCBzdHJ1Y3Qgb2FfdGM2ICpvYV90YzZfaW5pdChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0XHRnb3RvIHBoeV9leGl0O1xuIFx0fVxuIFxuK1x0cmV0ID0gb2FfdGM2X3VwZGF0ZV9zdGFuZGFyZF9jYXBhYmlsaXR5KHRjNik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgY2FwYWJpbGl0eVxcblwiKTtcbitcdFx0Z290byBwaHlfZXhpdDtcbitcdH1cbitcbiBcdHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIHRjNi1cdTAwM2VzcGktXHUwMDNlaXJxLFxuIFx0XHRcdFx0XHRvYV90YzZfbWFjcGh5X2lzcixcbiBcdFx0XHRcdFx0b2FfdGM2X21hY3BoeV90aHJlYWRlZF9pcnEsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9wdHAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfcHRwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMGNkZTU1NDVlZTI3YTBcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfcHRwLmNcbkBAIC0wLDAgKzEsNzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcbisvKlxuKyAqIFN1cHBvcnQgZm9yIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBmZWF0dXJlIGZvciBPUEVOIEFsbGlhbmNlXG4rICogMTBCQVNF4oCRVDF4IE1BQ+KAkVBIWSBTZXJpYWwgSW50ZXJmYWNlIGZyYW1ld29ya1xuKyAqXG4rICogQXV0aG9yOiBTZWx2YSBSYWphZ29wYWwgXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHJ0aW1lci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFkb21haW4uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGkvc3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vYV90YzYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldF90c3RhbXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3B0cF9jbG9ja19rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RpbWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbitcbisjaW5jbHVkZSBcIm9hX3RjNl9zdGRfZGVmLmhcIlxuK1xuKy8qKlxuKyAqIG9hX3RjNl9wdHBfcmVnaXN0ZXIgLSBSZWdpc3RlcnMgY2xvY2sgcmVsYXRlZCBjYWxsYmFja3NcbisgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuKyAqIEBpbmZvOiBEZXNjcmliZXMgYSBQVFAgaGFyZHdhcmUgY2xvY2tcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBWZW5kb3JzIGFyZSBleHBlY3RlZCB0byBzZXQgdGhlIGhhcmR3YXJlIHRpbWVzdGFtcFxuKyAqIHJlbGF0ZWQgY2FsbGJhY2tzIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcyBvdGhlcndpc2UgZmFpbGVkLlxuKyAqXG4rICovXG4raW50IG9hX3RjNl9wdHBfcmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pXG4re1xuK1x0LyogTm90IHN1cHBvcnRpbmcgaGFyZHdhcmUgdGltZXN0YW1wIGlzbid0IGFuIGVycm9yICovXG4rXHRpZiAoIXRjNi1cdTAwM2Vod190c3RhbXBfc3VwcG9ydGVkKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHNucHJpbnRmKGluZm8tXHUwMDNlbmFtZSwgc2l6ZW9mKGluZm8tXHUwMDNlbmFtZSksIFwiJXNcIixcbitcdFx0IFwiT0EgVEM2IFBUUCBjbG9ja1wiKTtcbitcdHRjNi1cdTAwM2VwdHBfY2xvY2sgPSBwdHBfY2xvY2tfcmVnaXN0ZXIoaW5mbywgXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYpO1xuK1x0aWYgKElTX0VSUih0YzYtXHUwMDNlcHRwX2Nsb2NrKSkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcIlJlZ2lzdHJhdGlvbiBvZiAlcyBmYWlsZWRcIixcbitcdFx0XHRpbmZvLVx1MDAzZW5hbWUpO1xuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcdH1cbitcdGRldl9pbmZvKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcIiVzIHJlZ2lzdGVyZWQuIGluZGV4ICVkXCIsIGluZm8tXHUwMDNlbmFtZSxcbitcdFx0IHB0cF9jbG9ja19pbmRleCh0YzYtXHUwMDNlcHRwX2Nsb2NrKSk7XG4rXHRyZXR1cm4gMDtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwob2FfdGM2X3B0cF9yZWdpc3Rlcik7XG4rXG4rLyoqXG4rICogb2FfdGM2X3B0cF91bnJlZ2lzdGVyIC0gVW5yZWdpc3RlcnMgY2xvY2sgcmVsYXRlZCBjYWxsYmFja3NcbisgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuKyAqL1xuK3ZvaWQgb2FfdGM2X3B0cF91bnJlZ2lzdGVyKHN0cnVjdCBvYV90YzYgKnRjNilcbit7XG4rXHRpZiAodGM2LVx1MDAzZXB0cF9jbG9jaylcbitcdFx0cHRwX2Nsb2NrX3VucmVnaXN0ZXIodGM2LVx1MDAzZXB0cF9jbG9jayk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9wdHBfdW5yZWdpc3Rlcik7XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiT1BFTiBBbGxpYW5jZSAxMEJBU0XigJFUMXggTUFD4oCRUEhZIFNlcmlhbCBJbnRlcmZhY2UgTGliXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJTZWx2YSBSYWphZ29wYWwgXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXHUwMDNlXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfc3RkX2RlZi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl9zdGRfZGVmLmhcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMzc4MTUwM2JlN2Y1NjJcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi9vYV90YzZfc3RkX2RlZi5oXG5AQCAtMCwwICsxLDE5MSBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqL1xuKy8qXG4rICogUmVnaXN0ZXIgYW5kIGRyaXZlciByZWxhdGVkIGRlZmluaXRpb25zIHRvIHN1cHBvcnRcbisgKiBPUEVOIEFsbGlhbmNlIDEwQkFTReKAkVQxeCBNQUPigJFQSFkgU2VyaWFsIEludGVyZmFjZSBmcmFtZXdvcmsuXG4rICpcbisgKiBBdXRob3I6IFNlbHZhIFJhamFnb3BhbCBcdTAwM2NzZWx2YW1hbmkucmFqYWdvcGFsQG9uc2VtaS5jb21cdTAwM2VcbisgKi9cbitcbisjaWZuZGVmIE9BX1RDNl9TVERfREVGX0hcbisjZGVmaW5lIE9BX1RDNl9TVERfREVGX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRfdHN0YW1wLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaS9zcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dhaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rXG4rLyogT1BFTiBBbGxpYW5jZSBUQzYgcmVnaXN0ZXJzICovXG4rLyogU3RhbmRhcmQgQ2FwYWJpbGl0aWVzIFJlZ2lzdGVyICovXG4rI2RlZmluZSBPQV9UQzZfUkVHX1NURENBUFx0XHRcdDB4MDAwMlxuKyNkZWZpbmUgU1REQ0FQX0RJUkVDVF9QSFlfUkVHX0FDQ0VTU1x0XHRCSVQoOClcbisjZGVmaW5lIFNURENBUF9GUkFNRV9USU1FU1RBTVBfQ0FQQUJJTElUWVx0QklUKDYpXG4rXG4rLyogUmVzZXQgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovXG4rI2RlZmluZSBPQV9UQzZfUkVHX1JFU0VUXHRcdFx0MHgwMDAzXG4rI2RlZmluZSBSRVNFVF9TV1JFU0VUXHRcdFx0XHRCSVQoMClcbitcbisvKiBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICMwICovXG4rI2RlZmluZSBPQV9UQzZfUkVHX0NPTkZJRzBcdFx0XHQweDAwMDRcbisjZGVmaW5lIENPTkZJRzBfU1lOQ1x0XHRcdFx0QklUKDE1KVxuKyNkZWZpbmUgQ09ORklHMF9aQVJGRV9FTkFCTEVcdFx0XHRCSVQoMTIpXG4rI2RlZmluZSBDT05GSUcwX0ZUU0VfRU5BQkxFXHRcdFx0QklUKDcpXG4rI2RlZmluZSBDT05GSUcwX0ZUU1NfNjRCSVRfVFNUQU1QXHRcdEJJVCg2KVxuK1xuKy8qIFN0YXR1cyBSZWdpc3RlciAjMCAqL1xuKyNkZWZpbmUgT0FfVEM2X1JFR19TVEFUVVMwXHRcdFx0MHgwMDA4XG4rI2RlZmluZSBTVEFUVVMwX1RUU0NBQ1x0XHRcdFx0QklUKDEwKVxuKyNkZWZpbmUgU1RBVFVTMF9UVFNDQUJcdFx0XHRcdEJJVCg5KVxuKyNkZWZpbmUgU1RBVFVTMF9UVFNDQUFcdFx0XHRcdEJJVCg4KVxuKyNkZWZpbmUgU1RBVFVTMF9UVFNDQV9NQVNLXHRcdEdFTk1BU0soMTAsIDgpXG4rI2RlZmluZSBTVEFUVVMwX1JFU0VUQ1x0XHRcdFx0QklUKDYpXG4rI2RlZmluZSBTVEFUVVMwX0hFQURFUl9FUlJPUlx0XHRcdEJJVCg1KVxuKyNkZWZpbmUgU1RBVFVTMF9MT1NTX09GX0ZSQU1FX0VSUk9SXHRcdEJJVCg0KVxuKyNkZWZpbmUgU1RBVFVTMF9SWF9CVUZGRVJfT1ZFUkZMT1dfRVJST1JcdEJJVCgzKVxuKyNkZWZpbmUgU1RBVFVTMF9UWF9QUk9UT0NPTF9FUlJPUlx0XHRCSVQoMClcbitcbisvKiBCdWZmZXIgU3RhdHVzIFJlZ2lzdGVyICovXG4rI2RlZmluZSBPQV9UQzZfUkVHX0JVRkZFUl9TVEFUVVNcdFx0MHgwMDBCXG4rI2RlZmluZSBCVUZGRVJfU1RBVFVTX1RYX0NSRURJVFNfQVZBSUxBQkxFXHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgQlVGRkVSX1NUQVRVU19SWF9DSFVOS1NfQVZBSUxBQkxFXHRHRU5NQVNLKDcsIDApXG4rXG4rLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgIzAgKi9cbisjZGVmaW5lIE9BX1RDNl9SRUdfSU5UX01BU0swXHRcdFx0MHgwMDBDXG4rI2RlZmluZSBJTlRfTUFTSzBfVFRTQ0FfTUFTS1x0XHRcdEdFTk1BU0soMTAsIDgpXG4rI2RlZmluZSBJTlRfTUFTSzBfSEVBREVSX0VSUl9NQVNLXHRcdEJJVCg1KVxuKyNkZWZpbmUgSU5UX01BU0swX0xPU1NfT0ZfRlJBTUVfRVJSX01BU0tcdEJJVCg0KVxuKyNkZWZpbmUgSU5UX01BU0swX1JYX0JVRkZFUl9PVkVSRkxPV19FUlJfTUFTS1x0QklUKDMpXG4rI2RlZmluZSBJTlRfTUFTSzBfVFhfUFJPVE9DT0xfRVJSX01BU0tcdFx0QklUKDApXG4rI2RlZmluZSBJTlRfTUFTSzBfQUxMX0lOVEVSUlVQVFNcdFx0KEdFTk1BU0soNSwgMCkgfCBcXFxuK1x0XHRcdFx0XHRcdCBHRU5NQVNLKDEyLCA3KSlcbitcbisvKiBQSFkgQ2xhdXNlIDIyIHJlZ2lzdGVycyBiYXNlIGFkZHJlc3MgYW5kIG1hc2sgKi9cbisjZGVmaW5lIE9BX1RDNl9QSFlfU1REX1JFR19BRERSX0JBU0VcdFx0MHhGRjAwXG4rI2RlZmluZSBPQV9UQzZfUEhZX1NURF9SRUdfQUREUl9NQVNLXHRcdDB4MUZcbitcbisvKiBUeCB0aW1lc3RhbXAgY2FwdHVyZSByZWdpc3RlciBBIChoaWdoKSAqL1xuKyNkZWZpbmUgT0FfVEM2X1JFR19UVFNDQV9ISUdIXHRcdFx0KDB4MTApXG4rXG4rLyogQ29udHJvbCBjb21tYW5kIGhlYWRlciAqL1xuKyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0RBVEFfTk9UX0NUUkxcdEJJVCgzMSlcbisjZGVmaW5lIE9BX1RDNl9DVFJMX0hFQURFUl9XUklURV9OT1RfUkVBRFx0QklUKDI5KVxuKyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX01FTV9NQVBfU0VMRUNUT1JcdEdFTk1BU0soMjcsIDI0KVxuKyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0FERFJcdFx0XHRHRU5NQVNLKDIzLCA4KVxuKyNkZWZpbmUgT0FfVEM2X0NUUkxfSEVBREVSX0xFTkdUSFx0XHRHRU5NQVNLKDcsIDEpXG4rI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfUEFSSVRZXHRcdEJJVCgwKVxuK1xuKy8qIERhdGEgaGVhZGVyICovXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfREFUQV9OT1RfQ1RSTFx0QklUKDMxKVxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX0RBVEFfVkFMSURcdFx0QklUKDIxKVxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NUQVJUX1ZBTElEXHRcdEJJVCgyMClcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9TVEFSVF9XT1JEX09GRlNFVFx0R0VOTUFTSygxOSwgMTYpXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfRU5EX1ZBTElEXHRcdEJJVCgxNClcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0hFQURFUl9FTkRfQllURV9PRkZTRVRcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfVFNDX09GRlNFVFx0XHRHRU5NQVNLKDcsIDYpXG4rI2RlZmluZSBPQV9UQzZfREFUQV9IRUFERVJfUEFSSVRZXHRcdEJJVCgwKVxuK1xuKy8qIERhdGEgZm9vdGVyICovXG4rI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfRVhURU5ERURfU1RTXHRcdEJJVCgzMSlcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SWERfSEVBREVSX0JBRFx0QklUKDMwKVxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX0NPTkZJR19TWU5DXHRcdEJJVCgyOSlcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9SWF9DSFVOS1NcdFx0R0VOTUFTSygyOCwgMjQpXG4rI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfREFUQV9WQUxJRFx0XHRCSVQoMjEpXG4rI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfU1RBUlRfVkFMSURcdFx0QklUKDIwKVxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1NUQVJUX1dPUkRfT0ZGU0VUXHRHRU5NQVNLKDE5LCAxNilcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfVkFMSURcdFx0QklUKDE0KVxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfRk9PVEVSX1JUU0FfVkFMSURcdFx0QklUKDcpXG4rI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfUlRTUF9WQUxJRFx0XHRCSVQoNilcbisjZGVmaW5lIE9BX1RDNl9EQVRBX0ZPT1RFUl9FTkRfQllURV9PRkZTRVRcdEdFTk1BU0soMTMsIDgpXG4rI2RlZmluZSBPQV9UQzZfREFUQV9GT09URVJfVFhfQ1JFRElUU1x0XHRHRU5NQVNLKDUsIDEpXG4rXG4rI2RlZmluZSBPQV9UQzZfQ1RSTF9IRUFERVJfU0laRVx0XHRcdDRcbisjZGVmaW5lIE9BX1RDNl9DVFJMX1JFR19WQUxVRV9TSVpFXHRcdDRcbisjZGVmaW5lIE9BX1RDNl9DVFJMX0lHTk9SRURfU0laRVx0XHQ0XG4rI2RlZmluZSBPQV9UQzZfQ1RSTF9NQVhfUkVHSVNURVJTXHRcdDEyOFxuKyNkZWZpbmUgT0FfVEM2X0NUUkxfU1BJX0JVRl9TSVpFXHRcdChPQV9UQzZfQ1RSTF9IRUFERVJfU0laRSArXFxcbitcdFx0XHRcdFx0XHQoT0FfVEM2X0NUUkxfTUFYX1JFR0lTVEVSUyAqXFxcbitcdFx0XHRcdFx0XHRPQV9UQzZfQ1RSTF9SRUdfVkFMVUVfU0laRSkgK1xcXG4rXHRcdFx0XHRcdFx0T0FfVEM2X0NUUkxfSUdOT1JFRF9TSVpFKVxuKyNkZWZpbmUgT0FfVEM2X0NIVU5LX1BBWUxPQURfU0laRVx0XHQ2NFxuKyNkZWZpbmUgT0FfVEM2X0RBVEFfSEVBREVSX1NJWkVcdFx0XHQ0XG4rI2RlZmluZSBPQV9UQzZfQ0hVTktfU0laRVx0XHRcdChPQV9UQzZfREFUQV9IRUFERVJfU0laRSArXFxcbitcdFx0XHRcdFx0XHRPQV9UQzZfQ0hVTktfUEFZTE9BRF9TSVpFKVxuKyNkZWZpbmUgT0FfVEM2X01BWF9UWF9DSFVOS1NcdFx0XHQ0OFxuKyNkZWZpbmUgT0FfVEM2X1NQSV9EQVRBX0JVRl9TSVpFXHRcdChPQV9UQzZfTUFYX1RYX0NIVU5LUyAqXFxcbitcdFx0XHRcdFx0XHRPQV9UQzZfQ0hVTktfU0laRSlcbisjZGVmaW5lIFNUQVRVUzBfUkVTRVRDX1BPTExfREVMQVlcdFx0MTAwMFxuKyNkZWZpbmUgU1RBVFVTMF9SRVNFVENfUE9MTF9USU1FT1VUXHRcdDEwMDAwMDBcbitcbisjZGVmaW5lIE9BX1RDNl9UU1RBTVBfU1pcdFx0XHQ4XG4rXG4rI2RlZmluZSBPQV9UQzZfVFRTQ0FfUkVHX0lEXHRcdFx0MVxuKyNkZWZpbmUgT0FfVEM2X1RUU0NCX1JFR19JRFx0XHRcdDJcbisjZGVmaW5lIE9BX1RDNl9UVFNDQ19SRUdfSURcdFx0XHQzXG4rXG4rLyogSW50ZXJuYWwgc3RydWN0dXJlIGZvciBNQUMtUEhZIGRyaXZlcnMgKi9cbitzdHJ1Y3Qgb2FfdGM2IHtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4rXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuK1x0c3RydWN0IG1paV9idXMgKm1kaW9idXM7XG4rXHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpO1xuK1x0c3RydWN0IG11dGV4IHNwaV9jdHJsX2xvY2s7IC8qIFByb3RlY3RzIHNwaSBjb250cm9sIHRyYW5zZmVyICovXG4rXHRzcGlubG9ja190IHR4X3NrYl9sb2NrOyAvKiBQcm90ZWN0cyB0eCBza2IgaGFuZGxpbmcgKi9cbitcdHZvaWQgKnNwaV9jdHJsX3R4X2J1ZjtcbitcdHZvaWQgKnNwaV9jdHJsX3J4X2J1ZjtcbitcdHZvaWQgKnNwaV9kYXRhX3R4X2J1ZjtcbitcdHZvaWQgKnNwaV9kYXRhX3J4X2J1ZjtcbitcdHN0cnVjdCBza19idWZmICpvbmdvaW5nX3R4X3NrYjtcbitcdHN0cnVjdCBza19idWZmICp3YWl0aW5nX3R4X3NrYjtcbitcdHN0cnVjdCBza19idWZmICpyeF9za2I7XG4rXHR1MTYgdHhfc2tiX29mZnNldDtcbitcdHUxNiBzcGlfZGF0YV90eF9idWZfb2Zmc2V0O1xuK1x0dTE2IHR4X2NyZWRpdHM7XG4rXHR1OCByeF9jaHVua3NfYXZhaWxhYmxlO1xuK1x0Ym9vbCByeF9idWZfb3ZlcmZsb3c7XG4rXHRib29sIGludF9mbGFnO1xuK1x0Ym9vbCBkaXNhYmxlX3RyYWZmaWM7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX2Nsb2NrX2luZm87XG4rXHRzdHJ1Y3QgaHd0c3RhbXBfY29uZmlnIHRzX2NvbmZpZztcbitcdHN0cnVjdCBsaXN0X2hlYWQgdHhfdHNfc2tiX3E7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrICpwdHBfY2xvY2s7XG4rXHRib29sIGh3X3RzdGFtcF9zdXBwb3J0ZWQ7XG4rXHRib29sIGh3X3RzdGFtcF9lbmFibGVkO1xuK1x0dTMyIHR4X2h3dHN0YW1wX3BrdHM7XG4rXHR1MzIgdHhfaHd0c3RhbXBfbG9zdDtcbitcdHUzMiB0eF9od3RzdGFtcF9lcnI7XG4rXHRpbnQgdmVuZDFfbW1zO1xuK1x0dTggdHhfdHNfaWR4O1xuK307XG4rXG4rZW51bSBvYV90YzZfaGVhZGVyX3R5cGUge1xuK1x0T0FfVEM2X0NUUkxfSEVBREVSLFxuK1x0T0FfVEM2X0RBVEFfSEVBREVSLFxuK307XG4rXG4rZW51bSBvYV90YzZfcmVnaXN0ZXJfb3Age1xuK1x0T0FfVEM2X0NUUkxfUkVHX1JFQUQgPSAwLFxuK1x0T0FfVEM2X0NUUkxfUkVHX1dSSVRFID0gMSxcbit9O1xuK1xuK2VudW0gb2FfdGM2X2RhdGFfdmFsaWRfaW5mbyB7XG4rXHRPQV9UQzZfREFUQV9JTlZBTElELFxuK1x0T0FfVEM2X0RBVEFfVkFMSUQsXG4rfTtcbitcbitlbnVtIG9hX3RjNl9kYXRhX3N0YXJ0X3ZhbGlkX2luZm8ge1xuK1x0T0FfVEM2X0RBVEFfU1RBUlRfSU5WQUxJRCxcbitcdE9BX1RDNl9EQVRBX1NUQVJUX1ZBTElELFxuK307XG4rXG4rZW51bSBvYV90YzZfZGF0YV9lbmRfdmFsaWRfaW5mbyB7XG4rXHRPQV9UQzZfREFUQV9FTkRfSU5WQUxJRCxcbitcdE9BX1RDNl9EQVRBX0VORF9WQUxJRCxcbit9O1xuK1xuK2ludCBvYV90YzZfdHN0YW1wX2lvY3RsKHN0cnVjdCBvYV90YzYgKnRjNiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7XG4rXG4rI2VuZGlmIC8qIE9BX1RDNl9TVERfREVGX0ggKi9cbitcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vYV90YzYvb2FfdGM2X3RzdGFtcC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl90c3RhbXAuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mODBmMWE0OTE2YTNlMFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb2FfdGM2L29hX3RjNl90c3RhbXAuY1xuQEAgLTAsMCArMSwyMDUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcbisvKlxuKyAqIE9QRU4gQWxsaWFuY2UgMTBCQVNF4oCRVDF4IE1BQ+KAkVBIWSBTZXJpYWwgSW50ZXJmYWNlIGZyYW1ld29ya1xuKyAqXG4rICogQXV0aG9yOiBTZWx2YSBSYWphZ29wYWwgXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXHUwMDNlXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9sbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vYV90YzYuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwib2FfdGM2X3N0ZF9kZWYuaFwiXG4rXG4rc3RhdGljIGludCBvYV90YzZfc2V0X2h3dHN0YW1wX3NldHRpbmdzKHN0cnVjdCBvYV90YzYgKnRjNilcbit7XG4rXHR1MzIgY2ZnMCwgaXJxbSwgc3RhdHVzMDtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfQ09ORklHMCwgXHUwMDI2Y2ZnMCk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2dGM2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIHJlYWQgQ0ZHMCByZWdpc3RlclxcblwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfSU5UX01BU0swLCBcdTAwMjZpcnFtKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gcmVhZCBJUlFNIHJlZ2lzdGVyXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdC8qIEhhcmR3YXJlIHRpbWVzdGFtcCBmZWF0dXJlIHN1cHBvcnRzIDY0LWJpdCB0aW1lc3RhbXAgb25seSAqL1xuK1x0aWYgKHRjNi1cdTAwM2V0c19jb25maWcudHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTiB8fFxuK1x0ICAgIHRjNi1cdTAwM2V0c19jb25maWcucnhfZmlsdGVyID09IEhXVFNUQU1QX0ZJTFRFUl9BTEwpXG4rXHRcdGNmZzAgfD0gKENPTkZJRzBfRlRTRV9FTkFCTEUgfFxuK1x0XHRcdCBDT05GSUcwX0ZUU1NfNjRCSVRfVFNUQU1QKTtcbitcdGVsc2VcbitcdFx0Y2ZnMCBcdTAwMjY9IH5DT05GSUcwX0ZUU0VfRU5BQkxFO1xuK1xuK1x0aWYgKHRjNi1cdTAwM2V0c19jb25maWcudHhfdHlwZSA9PSBIV1RTVEFNUF9UWF9PTilcbitcdFx0aXJxbSBcdTAwMjY9IH5JTlRfTUFTSzBfVFRTQ0FfTUFTSztcbitcdGVsc2VcbitcdFx0aXJxbSB8PSBJTlRfTUFTSzBfVFRTQ0FfTUFTSztcbitcbitcdC8qIENsZWFyIHRpbWVzdGFtcCByZWxhdGVkIElSUXMgKi9cbitcdHN0YXR1czAgPSBTVEFUVVMwX1RUU0NBX01BU0s7XG4rXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX1NUQVRVUzAsIHN0YXR1czApO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSBTVEFUVVMwIHJlZ2lzdGVyXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcih0YzYsIE9BX1RDNl9SRUdfSU5UX01BU0swLCBpcnFtKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZ0YzYtXHUwMDNlc3BpLVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gd3JpdGUgSVJRTSByZWdpc3RlclxcblwiKTtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXIodGM2LCBPQV9UQzZfUkVHX0NPTkZJRzAsIGNmZzApO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnRjNi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcImZhaWxlZCB0byB3cml0ZSBDRkcwIHJlZ2lzdGVyXFxuXCIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcdGlmIChjZmcwIFx1MDAyNiBDT05GSUcwX0ZUU0VfRU5BQkxFKVxuK1x0XHR0YzYtXHUwMDNlaHdfdHN0YW1wX2VuYWJsZWQgPSB0cnVlO1xuK1x0ZWxzZVxuK1x0XHR0YzYtXHUwMDNlaHdfdHN0YW1wX2VuYWJsZWQgPSBmYWxzZTtcbitvdXQ6XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiBvYV90YzZfaHd0c3RhbXBfZ2V0IC0gZ2V0cyBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlnXG4rICogQHRjNjogb2FfdGM2IHN0cnVjdC5cbisgKiBAY2ZnOiBrZXJuZWwgY29weSBvZiBoYXJkd2FyZSB0aW1lc3RhbXAgY29uZmlnXG4rICovXG4rdm9pZCBvYV90YzZfaHd0c3RhbXBfZ2V0KHN0cnVjdCBvYV90YzYgKnRjNixcbitcdFx0XHQgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZylcbit7XG4rXHRod3RzdGFtcF9jb25maWdfdG9fa2VybmVsKGNmZywgXHUwMDI2dGM2LVx1MDAzZXRzX2NvbmZpZyk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9od3RzdGFtcF9nZXQpO1xuK1xuKy8qKlxuKyAqIG9hX3RjNl9od3RzdGFtcF9zZXQgLSBzZXRzIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWdcbisgKiBAdGM2OiBvYV90YzYgc3RydWN0LlxuKyAqIEBjZmc6IGtlcm5lbCBjb3B5IG9mIGhhcmR3YXJlIHRpbWVzdGFtcCBjb25maWdcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXG4rICovXG4raW50IG9hX3RjNl9od3RzdGFtcF9zZXQoc3RydWN0IG9hX3RjNiAqdGM2LFxuK1x0XHRcdHN0cnVjdCBrZXJuZWxfaHd0c3RhbXBfY29uZmlnICpjZmcpXG4re1xuK1x0aWYgKCFuZXRpZl9ydW5uaW5nKHRjNi1cdTAwM2VuZXRkZXYpKVxuK1x0XHRyZXR1cm4gLUVJTztcbitcbitcdGlmICghdGM2LVx1MDAzZWh3X3RzdGFtcF9zdXBwb3J0ZWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHN3aXRjaCAoY2ZnLVx1MDAzZXR4X3R5cGUpIHtcbitcdGNhc2UgSFdUU1RBTVBfVFhfT0ZGOlxuK1x0Y2FzZSBIV1RTVEFNUF9UWF9PTjpcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcdH1cbitcbitcdHN3aXRjaCAoY2ZnLVx1MDAzZXJ4X2ZpbHRlcikge1xuK1x0Y2FzZSBIV1RTVEFNUF9GSUxURVJfTk9ORTpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX0FMTDpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1NPTUU6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfRVZFTlQ6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjFfTDRfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMV9MNF9ERUxBWV9SRVE6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfRVZFTlQ6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDRfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MNF9ERUxBWV9SRVE6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfRVZFTlQ6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfTDJfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9MMl9ERUxBWV9SRVE6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfRVZFTlQ6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9QVFBfVjJfU1lOQzpcbitcdGNhc2UgSFdUU1RBTVBfRklMVEVSX1BUUF9WMl9ERUxBWV9SRVE6XG4rXHRjYXNlIEhXVFNUQU1QX0ZJTFRFUl9OVFBfQUxMOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1x0fVxuK1x0aHd0c3RhbXBfY29uZmlnX2Zyb21fa2VybmVsKFx1MDAyNnRjNi1cdTAwM2V0c19jb25maWcsIGNmZyk7XG4rXG4rXHQvKiBTdXBwb3J0cyB0aW1lc3RhbXBpbmcgYWxsIHRyYWZmaWMgKi9cbitcdGlmIChjZmctXHUwMDNlcnhfZmlsdGVyICE9IEhXVFNUQU1QX0ZJTFRFUl9OT05FKVxuK1x0XHR0YzYtXHUwMDNldHNfY29uZmlnLnJ4X2ZpbHRlciA9IEhXVFNUQU1QX0ZJTFRFUl9BTEw7XG4rXHRyZXR1cm4gb2FfdGM2X3NldF9od3RzdGFtcF9zZXR0aW5ncyh0YzYpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfaHd0c3RhbXBfc2V0KTtcbitcbisvKipcbisgKiBvYV90YzZfZ2V0X3RzX3N0YXRzIC0gUHJvdmlkZXMgdGltZXN0YW1waW5nIHN0YXRzXG4rICogQHRjNjogb2FfdGM2IHN0cnVjdC5cbisgKiBAc3RhdHM6IGV0aHRvb2wgZGF0YSBzdHJ1Y3R1cmUgdG8gZmlsbCBpblxuKyAqL1xuK3ZvaWQgb2FfdGM2X2dldF90c19zdGF0cyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsXG4rXHRcdFx0IHN0cnVjdCBldGh0b29sX3RzX3N0YXRzICpzdGF0cylcbit7XG4rXHRzdGF0cy1cdTAwM2Vwa3RzID0gdGM2LVx1MDAzZXR4X2h3dHN0YW1wX3BrdHM7XG4rXHRzdGF0cy1cdTAwM2VlcnIgPSB0YzYtXHUwMDNldHhfaHd0c3RhbXBfZXJyO1xuK1x0c3RhdHMtXHUwMDNlbG9zdCA9IHRjNi1cdTAwM2V0eF9od3RzdGFtcF9sb3N0O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChvYV90YzZfZ2V0X3RzX3N0YXRzKTtcbitcbitpbnQgb2FfdGM2X3RzdGFtcF9pb2N0bChzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpXG4re1xuK1x0c3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcga2NmZztcbitcdHN0cnVjdCBod3RzdGFtcF9jb25maWcgdHNjZmc7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdGlmICghdGM2LVx1MDAzZWh3X3RzdGFtcF9zdXBwb3J0ZWQpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGlmIChjbWQgPT0gU0lPQ1NIV1RTVEFNUCkge1xuK1x0XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dHNjZmcsIHJxLVx1MDAzZWlmcl9kYXRhLFxuK1x0XHRcdFx0ICAgc2l6ZW9mKHRzY2ZnKSkpXG4rXHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRcdGlmICh0c2NmZy5mbGFncylcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0aHd0c3RhbXBfY29uZmlnX3RvX2tlcm5lbChcdTAwMjZrY2ZnLCBcdTAwMjZ0c2NmZyk7XG4rXHRcdHJldCA9IG9hX3RjNl9od3RzdGFtcF9zZXQodGM2LCBcdTAwMjZrY2ZnKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0aWYgKGNvcHlfdG9fdXNlcihycS1cdTAwM2VpZnJfZGF0YSwgXHUwMDI2dGM2LVx1MDAzZXRzX2NvbmZpZyxcbitcdFx0XHQgc2l6ZW9mKHRjNi1cdTAwM2V0c19jb25maWcpKSlcbitcdFx0cmV0ID0gLUVGQVVMVDtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIG9hX3RjNl9nZXRfdHNfaW5mbyAtIFByb3ZpZGVzIHRpbWVzdGFtcCBpbmZvIGZvciBldGh0b29sXG4rICogQHRjNjogb2FfdGM2IHN0cnVjdC5cbisgKiBAaW5mbzogZXRodG9vbCB0aW1lc3RhbXBpbmcgaW5mbyBzdHJ1Y3R1cmVcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzIG90aGVyd2lzZSBmYWlsZWQuXG4rICovXG4raW50IG9hX3RjNl9nZXRfdHNfaW5mbyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsXG4rXHRcdCAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfdHNfaW5mbyAqaW5mbylcbit7XG4rXHRpZiAoIXRjNi1cdTAwM2VwdHBfY2xvY2spXG4rXHRcdHJldHVybiBldGh0b29sX29wX2dldF90c19pbmZvKHRjNi1cdTAwM2VuZXRkZXYsIGluZm8pO1xuK1xuK1x0aW5mby1cdTAwM2Vzb190aW1lc3RhbXBpbmcgPSBTT0ZfVElNRVNUQU1QSU5HX1JBV19IQVJEV0FSRSB8XG4rXHRcdFx0XHRTT0ZfVElNRVNUQU1QSU5HX1RYX0hBUkRXQVJFIHxcbitcdFx0XHRcdFNPRl9USU1FU1RBTVBJTkdfUlhfSEFSRFdBUkU7XG4rXHRpbmZvLVx1MDAzZXBoY19pbmRleCA9IHB0cF9jbG9ja19pbmRleCh0YzYtXHUwMDNlcHRwX2Nsb2NrKTtcbitcdGluZm8tXHUwMDNldHhfdHlwZXMgPSBCSVQoSFdUU1RBTVBfVFhfT04pO1xuK1x0aW5mby1cdTAwM2VyeF9maWx0ZXJzID0gQklUKEhXVFNUQU1QX0ZJTFRFUl9BTEwpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKG9hX3RjNl9nZXRfdHNfaW5mbyk7XG4rXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiT1BFTiBBbGxpYW5jZSAxMEJBU0XigJFUMXggTUFD4oCRUEhZIFNlcmlhbCBJbnRlcmZhY2UgTGliXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJTZWx2YSBSYWphZ29wYWwgXHUwMDNjc2VsdmFtYW5pLnJhamFnb3BhbEBvbnNlbWkuY29tXHUwMDNlXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL0tjb25maWdcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uOGQ3MjE5NDE1MWVhNzlcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9LY29uZmlnXG5AQCAtMCwwICsxLDIxIEBAXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4rI1xuKyMgb25zZW1pIG5ldHdvcmsgZGV2aWNlIGNvbmZpZ3VyYXRpb25cbisjXG4rXG4rY29uZmlnIE5FVF9WRU5ET1JfT05TRU1JXG4rXHRib29sIFwib25zZW1pIG5ldHdvcmsgZGV2aWNlc1wiXG4rXHRoZWxwXG4rXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbitcbitcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcbitcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxuK1x0ICB0aGUgcXVlc3Rpb25zIGFib3V0IG9uc2VtaSBldGhlcm5ldCBkZXZpY2VzLiBJZiB5b3Ugc2F5IFksIHlvdVxuK1x0ICB3aWxsIGJlIGFza2VkIGZvciB5b3VyIHNwZWNpZmljIGNhcmQgaW4gdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMuXG4rXG4raWYgTkVUX1ZFTkRPUl9PTlNFTUlcbitcbitzb3VyY2UgXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvS2NvbmZpZ1wiXG4rXG4rZW5kaWYgIyBORVRfVkVORE9SX09OU0VNSVxuK1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9NYWtlZmlsZVxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5mM2Q0ZWIxNTQzMTNjNlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL01ha2VmaWxlXG5AQCAtMCwwICsxLDcgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjXG4rIyBNYWtlZmlsZSBmb3IgdGhlIG9uc2VtaSBuZXR3b3JrIGRldmljZSBkcml2ZXJzLlxuKyNcbitcbitvYmotJChDT05GSUdfUzI1MDBfTUFDUEhZKSArPSBzMjUwMC9cbitcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9LY29uZmlnXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjE0MWZiYWYxYjY0MTg3XG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvS2NvbmZpZ1xuQEAgLTAsMCArMSwxOSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIG9uc2VtaSBTMjUwMCBEcml2ZXIgU3VwcG9ydFxuKyNcbitcbitjb25maWcgUzI1MDBfTUFDUEhZXG4rXHR0cmlzdGF0ZSBcIlMyNTAwIHN1cHBvcnRcIlxuK1x0ZGVwZW5kcyBvbiBTUElcbitcdGltcGx5IE5FVF9TRUxGVEVTVFNcbitcdHNlbGVjdCBOQ04yNjAwMF9QSFlcbitcdHNlbGVjdCBPQV9UQzZcbitcdGhlbHBcbitcdCAgU3VwcG9ydCBmb3IgdGhlIG9uc2VtaSBUUzI1MDAgTUFDUEhZIEV0aGVybmV0IGNoaXAuXG4rXHQgIEl0IHdvcmtzIHVuZGVyIHRoZSBmcmFtZXdvcmsgdGhhdCBjb25mb3JtIHRvIE9QRU4gQWxsaWFuY2VcbitcdCAgMTBCQVNFLVQxeCBTZXJpYWwgSW50ZXJmYWNlIHNwZWNpZmljYXRpb24uXG4rXG4rXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZVxuK1x0ICBjYWxsZWQgczI1MDAuXG4rXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL01ha2VmaWxlXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjYxZWM3MDVjZGY5ZjFiXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvTWFrZWZpbGVcbkBAIC0wLDAgKzEsNyBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNcbisjIE1ha2VmaWxlIGZvciB0aGUgb25zZW1pIG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMuXG4rI1xuK29iai0kKENPTkZJR19TMjUwMF9NQUNQSFkpIDo9IHMyNTAwLm9cbitzMjUwMC1vYmpzIDo9IHMyNTAwX21haW4ubyBzMjUwMF9ldGh0b29sLm8gczI1MDBfcHRwLm9cbitcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX2V0aHRvb2wuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4wYjdlZjQ5MGQ3Y2FjM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX2V0aHRvb2wuY1xuQEAgLTAsMCArMSwzNjAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IDIwMjYgU2VtaWNvbmR1Y3RvciBDb21wb25lbnRzIEluZHVzdHJpZXMsIExMQyAoXCJvbnNlbWlcIikuXG4rICogb25zZW1pJ3MgUzI1MDAgMTBCQVNFLVQxUyBNQUMtUEhZIGRyaXZlclxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aHRvb2wuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zZWxmdGVzdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJzMjUwMF9od19kZWYuaFwiXG4rXG4rI2RlZmluZSBTMjUwMF9OVU1fUkVHU1x0XHRcdDM4XG4rI2RlZmluZSBTMjUwMF9SRUdEVU1QX0xFTlx0XHQoc2l6ZW9mKHUzMikgKiAoUzI1MDBfTlVNX1JFR1MgKiAyKSlcbitcbisjZGVmaW5lIFMyNTAwX05VTV9NQUNfU1RBVFNcdFx0MjFcbisjZGVmaW5lIFMyNTAwX05VTV9STU9OX1NUQVRTXHRcdDEyXG4rXG4rc3RydWN0IHMyNTAwX3JlZ19tYXAge1xuK1x0dTE2IHJlZztcbitcdHUxNiBtbXM7XG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHMyNTAwX3JlZ19tYXAgczI1MDBfcmVnX21hcFtTMjUwMF9OVU1fUkVHU10gPSB7XG4rXHR7IFMyNTAwX1JFR19WU19PTklQVkVSLCAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuK1x0eyBTMjUwMF9SRUdfVlNfVFdFQUtTMSwgICAgICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX1BMQ0FFWFQsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4rXHR7IFMyNTAwX1JFR19WU19QTUFUVU5FMCwgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuK1x0eyBTMjUwMF9SRUdfVlNfUE1BVFVORTEsICAgICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX1QxU1dVUFRVTkUsICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4rXHR7IFMyNTAwX1JFR19WU19IREQsICAgICAgICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuK1x0eyBTMjUwMF9SRUdfVlNfRENRX1RPSUQsICAgICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0RDUV9TUUksICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4rXHR7IFMyNTAwX1JFR19WU19EQ1FfU1FJX1BMVVMsIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuK1x0eyBTMjUwMF9SRUdfVlNfSEREX1RVTkUxLCAgICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMiwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4rXHR7IFMyNTAwX1JFR19WU19IRERfVFVORTMsICAgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuK1x0eyBTMjUwMF9SRUdfVlNfV1NfU1RBVFVTXzAsICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMCwgICAgT0FfVEM2X1BIWV9DNDVfVlNfUExDQV9NTVM0IH0sXG4rXHR7IFMyNTAwX1JFR19WU19XU19TVEFUVVNfMSwgIE9BX1RDNl9QSFlfQzQ1X1ZTX1BMQ0FfTU1TNCB9LFxuK1x0eyBTMjUwMF9SRUdfVlNfV1NfQ1RSTF8xLCAgICBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzQgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX01JSU1JUlFFLCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX01JSU1JUlFTLCAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0RJT0NGRzAsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0NISVBJRCwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX1RXRUFLUzIsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX01BQ0lEMCwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX01BQ0lEMSwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX05WTV9IRUFMVEgsICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX1BUUF9TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX1BUUE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX1BUUF9TRVRTRUMsICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX1NFVE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX1BUUF9BREosICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0NNUENUTCwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0NNUFNFQywgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0NNUE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0NNUFBFUiwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0NBUENUTCwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0NBUFNFQywgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0NBUE5TRUMsICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbitcdHsgUzI1MDBfUkVHX1ZTX0JDTkNOVCwgICAgICAgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIgfSxcbit9O1xuK1xuK2VudW0gczI1MDBfc3RhdF9pZHgge1xuK1x0UzI1MDBfTVNUT0NURUNUU1RYX0lEWCA9IDAsXG4rXHRTMjUwMF9NU1RGUkFNRVNUWE9LX0lEWCxcbitcdFMyNTAwX01TVEJDQVNUVFhPS19JRFgsXG4rXHRTMjUwMF9NU1RNQ0FTVFRYT0tfSURYLFxuK1x0UzI1MDBfTVNURlJBTUVTVFg2NF9JRFgsXG4rXHRTMjUwMF9NU1RGUkFNRVNUWDY1X0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1RYMTI4X0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1RYMjU2X0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1RYNTEyX0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1RYMTAyNF9JRFgsXG4rXHRTMjUwMF9NU1RUWFVOREVGTE9XX0lEWCxcbitcdFMyNTAwX01TVFNJTkdMRUNPTF9JRFgsXG4rXHRTMjUwMF9NU1RNVUxUSUNPTF9JRFgsXG4rXHRTMjUwMF9NU1RFWENFU1NDT0xfSURYLFxuK1x0UzI1MDBfTVNUREVGRVJSRURUWF9JRFgsXG4rXHRTMjUwMF9NU1RDUlNFUlJfSURYLFxuK1x0UzI1MDBfTVNUT0NURUNUU1JYX0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1JYT0tfSURYLFxuK1x0UzI1MDBfTVNUQkNBU1RSWE9LX0lEWCxcbitcdFMyNTAwX01TVE1DQVNUUlhPS19JRFgsXG4rXHRTMjUwMF9NU1RGUkFNRVNSWDY0X0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1JYNjVfSURYLFxuK1x0UzI1MDBfTVNURlJBTUVTUlgxMjhfSURYLFxuK1x0UzI1MDBfTVNURlJBTUVTUlgyNTZfSURYLFxuK1x0UzI1MDBfTVNURlJBTUVTUlg1MTJfSURYLFxuK1x0UzI1MDBfTVNURlJBTUVTUlgxMDI0X0lEWCxcbitcdFMyNTAwX01TVFJVTlRTRVJSX0lEWCxcbitcdFMyNTAwX01TVFJYVE9PTE9OR19JRFgsXG4rXHRTMjUwMF9NU1RGQ1NFUlJTX0lEWCxcbitcdFMyNTAwX01TVFNZTUJPTEVSUlNfSURYLFxuK1x0UzI1MDBfTVNUQUxJR05FUlJTX0lEWCxcbitcdFMyNTAwX01TVFJYT1ZFUkZMT1dfSURYLFxuK1x0UzI1MDBfTVNUUlhEUk9QUEVEX0lEWCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBjaGFyIHMyNTAwX21hY19zdGF0X3N0cmluZ3NbXVtFVEhfR1NUUklOR19MRU5dID0ge1xuK1x0XCJ0eF9ieXRlc1wiLFxuK1x0XCJ0eF9mcmFtZXNcIixcbitcdFwidHhfYnJvYWRjYXN0X2ZyYW1lc1wiLFxuK1x0XCJ0eF9tdWx0aWNhc3RfZnJhbWVzXCIsXG4rXHRcInR4X3VuZGVyZmxvd19lcnJvcnNcIixcbitcdFwidHhfc2luZ2xlX2NvbGxpc2lvbnNcIixcbitcdFwidHhfbXVsdGlwbGVfY29sbGlzaW9uc1wiLFxuK1x0XCJ0eF9leGNlc3NpdmVfY29sbGlzaW9uc1wiLFxuK1x0XCJ0eF9kZWZlcnJlZF9mcmFtZXNcIixcbitcdFwidHhfY2Fycmllcl9zZW5zZV9lcnJvcnNcIixcbitcdFwicnhfYnl0ZXNcIixcbitcdFwicnhfZnJhbWVzXCIsXG4rXHRcInJ4X2Jyb2FkY2FzdF9mcmFtZXNcIixcbitcdFwicnhfbXVsdGljYXN0X2ZyYW1lc1wiLFxuK1x0XCJyeF9ydW50c1wiLFxuK1x0XCJyeF9vdmVyc2l6ZV9mcmFtZXNcIixcbitcdFwicnhfY3JjX2Vycm9yc1wiLFxuK1x0XCJyeF9zeW1ib2xfZXJyb3JzXCIsXG4rXHRcInJ4X2FsaWdubWVudF9lcnJvcnNcIixcbitcdFwicnhfYnVzeV9kcm9wc1wiLFxuK1x0XCJyeF9taXNtYXRjaF9kcm9wc1wiLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHU4IHMyNTAwX21hY19zdGF0X21hcFtTMjUwMF9OVU1fTUFDX1NUQVRTXSA9IHtcbitcdFMyNTAwX01TVE9DVEVDVFNUWF9JRFgsXG4rXHRTMjUwMF9NU1RGUkFNRVNUWE9LX0lEWCxcbitcdFMyNTAwX01TVEJDQVNUVFhPS19JRFgsXG4rXHRTMjUwMF9NU1RNQ0FTVFRYT0tfSURYLFxuK1x0UzI1MDBfTVNUVFhVTkRFRkxPV19JRFgsXG4rXHRTMjUwMF9NU1RTSU5HTEVDT0xfSURYLFxuK1x0UzI1MDBfTVNUTVVMVElDT0xfSURYLFxuK1x0UzI1MDBfTVNURVhDRVNTQ09MX0lEWCxcbitcdFMyNTAwX01TVERFRkVSUkVEVFhfSURYLFxuK1x0UzI1MDBfTVNUQ1JTRVJSX0lEWCxcbitcdFMyNTAwX01TVE9DVEVDVFNSWF9JRFgsXG4rXHRTMjUwMF9NU1RGUkFNRVNSWE9LX0lEWCxcbitcdFMyNTAwX01TVEJDQVNUUlhPS19JRFgsXG4rXHRTMjUwMF9NU1RNQ0FTVFJYT0tfSURYLFxuK1x0UzI1MDBfTVNUUlVOVFNFUlJfSURYLFxuK1x0UzI1MDBfTVNUUlhUT09MT05HX0lEWCxcbitcdFMyNTAwX01TVEZDU0VSUlNfSURYLFxuK1x0UzI1MDBfTVNUU1lNQk9MRVJSU19JRFgsXG4rXHRTMjUwMF9NU1RBTElHTkVSUlNfSURYLFxuK1x0UzI1MDBfTVNUUlhPVkVSRkxPV19JRFgsXG4rXHRTMjUwMF9NU1RSWERST1BQRURfSURYLFxuK307XG4rXG4rc3RhdGljIGNvbnN0IHU4IHMyNTAwX3Jtb25fc3RhdF9tYXBbUzI1MDBfTlVNX1JNT05fU1RBVFNdID0ge1xuK1x0UzI1MDBfTVNURlJBTUVTVFg2NF9JRFgsXG4rXHRTMjUwMF9NU1RGUkFNRVNUWDY1X0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1RYMTI4X0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1RYMjU2X0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1RYNTEyX0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1RYMTAyNF9JRFgsXG4rXHRTMjUwMF9NU1RGUkFNRVNSWDY0X0lEWCxcbitcdFMyNTAwX01TVEZSQU1FU1JYNjVfSURYLFxuK1x0UzI1MDBfTVNURlJBTUVTUlgxMjhfSURYLFxuK1x0UzI1MDBfTVNURlJBTUVTUlgyNTZfSURYLFxuK1x0UzI1MDBfTVNURlJBTUVTUlg1MTJfSURYLFxuK1x0UzI1MDBfTVNURlJBTUVTUlgxMDI0X0lEWCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgczI1MDBfcm1vbl9oaXN0X3Jhbmdlc1tdID0ge1xuK1x0eyA2NCwgNjQgfSxcbitcdHsgNjUsIDEyNyB9LFxuK1x0eyAxMjgsIDI1NSB9LFxuK1x0eyAyNTYsIDUxMSB9LFxuK1x0eyA1MTIsIDEwMjMgfSxcbitcdHsgMTAyNCwgMjAwMCB9LFxuK1x0eyB9LFxuK307XG4rXG4rI2RlZmluZSBTMjUwMF9NQUNfU1RBVFNfTEVOIEFSUkFZX1NJWkUoczI1MDBfbWFjX3N0YXRfc3RyaW5ncylcbitzdGF0aWNfYXNzZXJ0KFMyNTAwX01BQ19TVEFUU19MRU4gPT0gUzI1MDBfTlVNX01BQ19TVEFUUyk7XG4rc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKHMyNTAwX21hY19zdGF0X21hcCkgPT0gUzI1MDBfTlVNX01BQ19TVEFUUyk7XG4rc3RhdGljX2Fzc2VydChBUlJBWV9TSVpFKHMyNTAwX3Jtb25fc3RhdF9tYXApID09IFMyNTAwX05VTV9STU9OX1NUQVRTKTtcbitcbisjZGVmaW5lIFNUQVRfUkVHX09GRlNFVCh4KSAoKFMyNTAwX1JFR19NQUNfU1QjI3gpIC0gXFxcbitcdFx0XHQgICBTMjUwMF9SRUdfTUFDX0ZJUlNUX1NUQVQpXG4rXG4rc3RhdGljIHZvaWQgczI1MDBfdXBkYXRlX3N0YXRzKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KVxuK3tcbitcdHU2NCAqZGF0YSA9IHByaXYtXHUwMDNlc3RhdHNfZGF0YTtcbitcdHUzMiAqcmVncywgKnJwdHI7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmVncyA9IGttYWxsb2NfYXJyYXkoUzI1MDBfTlVNX1NUQVRfUkVHUywgc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFyZWdzKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3RlcnNfbW1zKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1RYTCxcbitcdFx0XHRcdFx0T0FfVEM2X1BIWV9DNDVfTUFDX01NUzEsIHJlZ3MsXG4rXHRcdFx0XHRcdFMyNTAwX05VTV9TVEFUX1JFR1MpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRycHRyID0gcmVncztcbitcbitcdC8qIFRYIGJ5dGVzIGlzIGEgNjQtYml0IHJlZ2lzdGVyIHRoYXQgc3BhbnMgb3ZlciB0d28gMzItYml0IHJlZ3NcbitcdCAqIG5vdGU6IEhXIGRvZXMgYXV0by1mcmVlemUgd2hlbiByZWFkaW5nIExTQiBhbmQgdW4tZnJlZXplIG9uIE1TQlxuK1x0ICovXG4rXHQqKGRhdGErKykgKz0gKCh1NjQpKnJwdHIpIHwgKCgodTY0KSoocnB0ciArIDEpKSBcdTAwM2NcdTAwM2MgMzIpO1xuK1xuK1x0LyogcnVuIHVudGlsIHRoZSBuZXh0IDY0LWJpdCByZWdpc3RlciAqL1xuK1x0Zm9yIChycHRyICs9IDI7IChycHRyIC0gcmVncykgXHUwMDNjIFNUQVRfUkVHX09GRlNFVChPQ1RFQ1RTUlhMKTsgKytycHRyKVxuK1x0XHQqKGRhdGErKykgKz0gKnJwdHI7XG4rXG4rXHQvKiBSWCBieXRlcyBpcyBhIDY0LWJpdCByZWdpc3RlciB0aGF0IHNwYW5zIG92ZXIgdHdvIDMyLWJpdCByZWdzXG4rXHQgKiBub3RlOiBIVyBkb2VzIGF1dG8tZnJlZXplIHdoZW4gcmVhZGluZyBMU0IgYW5kIHVuLWZyZWV6ZSBvbiBNU0JcbitcdCAqL1xuK1x0KihkYXRhKyspICs9ICgodTY0KSpycHRyKSB8ICgoKHU2NCkqKHJwdHIgKyAxKSkgXHUwMDNjXHUwMDNjIDMyKTtcbitcbitcdGZvciAocnB0ciArPSAyOyAocnB0ciAtIHJlZ3MpIFx1MDAzYyBTMjUwMF9OVU1fU1RBVF9SRUdTOyArK3JwdHIpXG4rXHRcdCooZGF0YSsrKSArPSAqcnB0cjtcbitvdXQ6XG4rXHRrZnJlZShyZWdzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgczI1MDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbylcbit7XG4rXHRzdHJzY3B5KGluZm8tXHUwMDNlZHJpdmVyLCBEUlZfTkFNRSwgc2l6ZW9mKGluZm8tXHUwMDNlZHJpdmVyKSk7XG4rXHRzdHJzY3B5KGluZm8tXHUwMDNlYnVzX2luZm8sIGRldl9uYW1lKFx1MDAyNm5kZXYtXHUwMDNlZGV2KSxcbitcdFx0c2l6ZW9mKGluZm8tXHUwMDNlYnVzX2luZm8pKTtcbit9XG4rXG4rc3RhdGljIGludCBzMjUwMF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgaW50IHNzZXQpXG4re1xuK1x0c3dpdGNoIChzc2V0KSB7XG4rXHRjYXNlIEVUSF9TU19TVEFUUzpcbitcdFx0cmV0dXJuIFMyNTAwX01BQ19TVEFUU19MRU47XG4rXHRjYXNlIEVUSF9TU19URVNUOlxuK1x0XHRyZXR1cm4gbmV0X3NlbGZ0ZXN0X2dldF9jb3VudCgpO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBzMjUwMF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIHN0cmluZ3NldCxcbitcdFx0XHQgICAgICB1OCAqYnVmKVxuK3tcbitcdHN3aXRjaCAoc3RyaW5nc2V0KSB7XG4rXHRjYXNlIEVUSF9TU19TVEFUUzpcbitcdFx0bWVtY3B5KGJ1ZiwgczI1MDBfbWFjX3N0YXRfc3RyaW5ncyxcbitcdFx0ICAgICAgIFMyNTAwX01BQ19TVEFUU19MRU4gKiBFVEhfR1NUUklOR19MRU4pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRVRIX1NTX1RFU1Q6XG4rXHRcdG5ldF9zZWxmdGVzdF9nZXRfc3RyaW5ncyhidWYpO1xuK1x0XHRicmVhaztcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgczI1MDBfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHQgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdGludCBpO1xuK1xuK1x0czI1MDBfdXBkYXRlX3N0YXRzKHByaXYpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUzI1MDBfTlVNX01BQ19TVEFUUzsgaSsrKVxuK1x0XHRkYXRhW2ldID0gcHJpdi1cdTAwM2VzdGF0c19kYXRhW3MyNTAwX21hY19zdGF0X21hcFtpXV07XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHMyNTAwX3Jtb25fc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0ICAgICBzdHJ1Y3QgZXRodG9vbF9ybW9uX3N0YXRzICpybW9uX3N0YXRzLFxuK1x0XHRcdCAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfcm1vbl9oaXN0X3JhbmdlICoqcmFuZ2VzKVxuK3tcbitcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHR1OCBvZmZzZXQ7XG4rXHRpbnQgaTtcbitcbitcdHMyNTAwX3VwZGF0ZV9zdGF0cyhwcml2KTtcbitcbitcdG1lbXNldChybW9uX3N0YXRzLCAwLCBzaXplb2YoKnJtb25fc3RhdHMpKTtcbitcdHJtb25fc3RhdHMtXHUwMDNlc3JjID0gRVRIVE9PTF9NQUNfU1RBVFNfU1JDX0FHR1JFR0FURTtcbitcdHJtb25fc3RhdHMtXHUwMDNldW5kZXJzaXplX3BrdHMgPSBwcml2LVx1MDAzZXN0YXRzX2RhdGFbUzI1MDBfTVNUUlVOVFNFUlJfSURYXTtcbitcdHJtb25fc3RhdHMtXHUwMDNlb3ZlcnNpemVfcGt0cyA9IHByaXYtXHUwMDNlc3RhdHNfZGF0YVtTMjUwMF9NU1RSWFRPT0xPTkdfSURYXTtcbitcdHJtb25fc3RhdHMtXHUwMDNlZnJhZ21lbnRzID0gcHJpdi1cdTAwM2VzdGF0c19kYXRhW1MyNTAwX01TVEZDU0VSUlNfSURYXTtcbitcdHJtb25fc3RhdHMtXHUwMDNlamFiYmVycyA9IHByaXYtXHUwMDNlc3RhdHNfZGF0YVtTMjUwMF9NU1RBTElHTkVSUlNfSURYXTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkrKykge1xuK1x0XHRvZmZzZXQgPSBzMjUwMF9ybW9uX3N0YXRfbWFwW2ldO1xuK1x0XHRybW9uX3N0YXRzLVx1MDAzZWhpc3RfdHhbaV0gPSBwcml2LVx1MDAzZXN0YXRzX2RhdGFbb2Zmc2V0XTtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkrKykge1xuK1x0XHRvZmZzZXQgPSBzMjUwMF9ybW9uX3N0YXRfbWFwW2kgKyA2XTtcbitcdFx0cm1vbl9zdGF0cy1cdTAwM2VoaXN0W2ldID0gcHJpdi1cdTAwM2VzdGF0c19kYXRhW29mZnNldF07XG4rXHR9XG4rXG4rXHQqcmFuZ2VzID0gczI1MDBfcm1vbl9oaXN0X3Jhbmdlcztcbit9XG4rXG4rc3RhdGljIGludCBzMjUwMF9nZXRfdHNfaW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHQgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICp0c19pbmZvKVxuK3tcbitcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRyZXR1cm4gb2FfdGM2X2dldF90c19pbmZvKHByaXYtXHUwMDNldGM2LCB0c19pbmZvKTtcbit9XG4rXG4rc3RhdGljIGludCBzMjUwMF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRyZXR1cm4gUzI1MDBfUkVHRFVNUF9MRU47XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHMyNTAwX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdCAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsIHZvaWQgKnApXG4re1xuK1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHUzMiAqcGJ1ZmYgPSAodTMyICopcDtcbitcdHUxNiByZWcsIG1tcztcbitcdGludCByZXQgPSAwO1xuK1x0dTMyIHZhbDtcbitcdGludCBpO1xuK1xuK1x0cmVncy1cdTAwM2V2ZXJzaW9uID0gMDtcbitcdG1lbXNldChwLCAwLCBTMjUwMF9SRUdEVU1QX0xFTik7XG4rXG4rXHRpZiAoIW5ldGlmX3J1bm5pbmcobmRldikpXG4rXHRcdHJldHVybjtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFMyNTAwX05VTV9SRUdTOyBpKyspIHtcbitcdFx0dmFsID0gMDtcbitcdFx0cmVnID0gczI1MDBfcmVnX21hcFtpXS5yZWc7XG4rXHRcdG1tcyA9IHMyNTAwX3JlZ19tYXBbaV0ubW1zO1xuK1x0XHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIHJlZywgbW1zLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2dmFsKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRjb250aW51ZTtcbitcdFx0KnBidWZmKysgPSBjcHVfdG9fYmUzMigoKHUzMiltbXMgXHUwMDNjXHUwMDNjIDE2KSB8IHJlZyk7XG4rXHRcdCpwYnVmZisrID0gY3B1X3RvX2JlMzIodmFsKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgczI1MDBfZ2V0X3RzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqdHNfc3RhdHMpXG4re1xuK1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdG9hX3RjNl9nZXRfdHNfc3RhdHMocHJpdi1cdTAwM2V0YzYsIHRzX3N0YXRzKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHMyNTAwX2V0aHRvb2xfb3BzID0ge1xuK1x0LmdldF9kcnZpbmZvID0gczI1MDBfZ2V0X2RydmluZm8sXG4rXHQuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLFxuK1x0LmdldF9saW5rX2tzZXR0aW5ncyA9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcbitcdC5zZXRfbGlua19rc2V0dGluZ3MgPSBwaHlfZXRodG9vbF9zZXRfbGlua19rc2V0dGluZ3MsXG4rXHQuZ2V0X3RzX3N0YXRzID0gczI1MDBfZ2V0X3RzX3N0YXRzLFxuK1x0LmdldF9zc2V0X2NvdW50ID0gczI1MDBfZ2V0X3NzZXRfY291bnQsXG4rXHQuZ2V0X3N0cmluZ3MgPSBzMjUwMF9nZXRfc3RyaW5ncyxcbitcdC5nZXRfZXRodG9vbF9zdGF0cyA9IHMyNTAwX2dldF9ldGh0b29sX3N0YXRzLFxuK1x0LmdldF9ybW9uX3N0YXRzID0gczI1MDBfcm1vbl9zdGF0cyxcbitcdC5nZXRfdHNfaW5mbyA9IHMyNTAwX2dldF90c19pbmZvLFxuK1x0LmdldF9yZWdzX2xlbiA9IHMyNTAwX2dldF9yZWdzX2xlbixcbitcdC5nZXRfcmVncyA9IHMyNTAwX2dldF9yZWdzLFxuK1x0LnNlbGZfdGVzdCA9IG5ldF9zZWxmdGVzdCxcbit9O1xuK1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9od19kZWYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9od19kZWYuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZDljMGIzYWQzOWJjYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX2h3X2RlZi5oXG5AQCAtMCwwICsxLDIyMyBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4rLypcbisgKiBDb3B5cmlnaHQgMjAyNiBTZW1pY29uZHVjdG9yIENvbXBvbmVudHMgSW5kdXN0cmllcywgTExDIChcIm9uc2VtaVwiKS5cbisgKiBvbnNlbWkncyBTMjUwMCAxMEJBU0UtVDFTIE1BQy1QSFkgZHJpdmVyXG4rICovXG4rXG4rI2lmbmRlZiBTMjUwMF9IV19ERUZfSFxuKyNkZWZpbmUgUzI1MDBfSFdfREVGX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ocnRpbWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycWRvbWFpbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeWxpbmsuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaS9zcGkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29hX3RjNi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0X3RzdGFtcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHRwX2Nsb2NrX2tlcm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGltZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZXJybm8uaFx1MDAzZVxuK1xuKyNkZWZpbmUgRFJWX05BTUVcdFx0XHRcInMyNTAwXCJcbitcbisjZGVmaW5lIFMyNTAwX05fTUNBU1RfRklMVEVSU1x0XHQzXG4rXG4rLyogU1BJIE9JRCBhbmQgbW9kZWwgcmVnaXN0ZXIgKi9cbisjZGVmaW5lIFMyNTAwX1JFR19TUElfUEhZSURcdFx0MHgxXG4rXG4rI2RlZmluZSBTMjUwMF9TUElfUEhZSURfT1VJX1NISUZUXHQxMFxuKyNkZWZpbmUgUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLXHRHRU5NQVNLKDMxLCBTMjUwMF9TUElfUEhZSURfT1VJX1NISUZUKVxuKyNkZWZpbmUgUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMFx0R0VOTUFTSygyMSwgMTYpXG4rI2RlZmluZSBTMjUwMF9TUElfUEhZSURfT1VJX01BU0sxXHRHRU5NQVNLKDE1LCA4KVxuKyNkZWZpbmUgUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMlx0R0VOTUFTSyg3LCAwKVxuKy8qIFNQSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyICMwICovXG4rI2RlZmluZSBTMjUwMF9SRUdfU1BJX0NGRzBcdFx0MHg0XG4rXG4rI2RlZmluZSBTMjUwMF9TUElfQ0ZHMF9TWU5DX0JJVFx0XHRCSVQoMTUpXG4rI2RlZmluZSBTMjUwMF9TUElfQ0ZHMF9UWENUSFJFU0hfU0hJRlRcdDEwXG4rI2RlZmluZSBTMjUwMF9TUElfQ0ZHMF9SWENURV9CSVRcdEJJVCg4KVxuKyNkZWZpbmUgUzI1MDBfU1BJX0NGRzBfRlRTU182NF9CSVRcdEJJVCg2KVxuKyNkZWZpbmUgUzI1MDBfU1BJX0NGRzBfQ1BTX1NISUZUXHQwXG4rXG4rI2RlZmluZSBTMjUwMF9UWENUSFJFU0hfOFx0XHQweDJcbitcbisjZGVmaW5lIFMyNTAwX0NQU182NFx0XHRcdDB4NlxuK1xuKy8qIFNQSSBzdGF0dXMgcmVnaXN0ZXIgIzAgKi9cbisjZGVmaW5lIFMyNTAwX1JFR19TUElfU1QwXHRcdDB4OFxuK1xuKyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9DRFBFX0JJVFx0XHRCSVQoMTIpXG4rI2RlZmluZSBTMjUwMF9TUElfU1QwX1RYRkNTRV9CSVRcdEJJVCgxMSlcbisjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFRTQ0FDX0JJVFx0QklUKDEwKVxuKyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9UVFNDQUJfQklUXHRCSVQoOSlcbisjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFRTQ0FBX0JJVFx0QklUKDgpXG4rI2RlZmluZSBTMjUwMF9TUElfU1QwX1JFU0VUQ19CSVRcdEJJVCg2KVxuKyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9IRFJFX0JJVFx0XHRCSVQoNSlcbisjZGVmaW5lIFMyNTAwX1NQSV9TVDBfTE9GRV9CSVRcdFx0QklUKDQpXG4rI2RlZmluZSBTMjUwMF9TUElfU1QwX1JYQk9FX0JJVFx0XHRCSVQoMylcbisjZGVmaW5lIFMyNTAwX1NQSV9TVDBfVFhCVUVfQklUXHRcdEJJVCgyKVxuKyNkZWZpbmUgUzI1MDBfU1BJX1NUMF9UWEJPRV9CSVRcdFx0QklUKDEpXG4rI2RlZmluZSBTMjUwMF9TUElfU1QwX1RYUEVfQklUXHRcdEJJVCgwKVxuK1xuKy8qIFNQSSBJUlEgZW5hYmxlIHJlZ2lzdGVyICMwICh1c2UgdGhlIFMyNTAwX1NQSV9TVDBfKl9CSVQgY29uc3RhbnRzKSAqL1xuKyNkZWZpbmUgUzI1MDBfUkVHX1NQSV9JUlFNMFx0XHQweGNcbitcbisvKiBTUEkgYnVmZmVyIHN0YXR1cyByZWdpc3RlciAqL1xuKyNkZWZpbmUgUzI1MDBfUkVHX1NQSV9CVUZTVFx0XHQweGJcbitcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfQ1RSTFx0XHQweDBcbitcbisjZGVmaW5lIFMyNTAwX01BQ19DVFJMX01DU0ZfQklUXHRcdEJJVCgxOClcbisjZGVmaW5lIFMyNTAwX01BQ19DVFJMX0FEUkZfQklUXHRcdEJJVCgxNilcbisjZGVmaW5lIFMyNTAwX01BQ19DVFJMX0ZDU0FfQklUXHRcdEJJVCg4KVxuKyNkZWZpbmUgUzI1MDBfTUFDX0NUUkxfVFhFTl9CSVRcdFx0QklUKDEpXG4rI2RlZmluZSBTMjUwMF9NQUNfQ1RSTF9SWEVOX0JJVFx0XHRCSVQoMClcbitcbisvKiBNQUMgYWRkcmVzcyBmaWx0ZXIgcmVnaXN0ZXJzICovXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX0FERFJGSUxUTChuKVx0KDE2ICsgMiAqIChuKSlcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKG4pXHQoMTcgKyAyICogKG4pKVxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19BRERSTUFTS0wobilcdCgzMiArIDIgKiAobikpXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLSChuKVx0KDMzICsgMiAqIChuKSlcbitcbisjZGVmaW5lIFMyNTAwX01BQ19BRERSRklMVF9FTl9CSVRcdEJJVCgzMSlcbitcbisvKiBNQUMgc3RhdGlzdGljIHJlZ2lzdGVycyAqL1xuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVE9DVEVDVFNUWExcdDQ4XG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUT0NURUNUU1RYSFx0NDlcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWE9LXHQ1MFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEJDQVNUVFhPS1x0NTFcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RNQ0FTVFRYT0tcdDUyXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTVFg2NFx0NTNcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNUWDY1XHQ1NFxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYMTI4XHQ1NVxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYMjU2XHQ1NlxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYNTEyXHQ1N1xuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1RYMTAyNFx0NThcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RUWFVOREVGTE9XXHQ1OVxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFNJTkdMRUNPTFx0NjBcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RNVUxUSUNPTFx0NjFcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RFWENFU1NDT0xcdDYyXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUREVGRVJSRURUWFx0NjNcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RDUlNFUlJcdFx0NjRcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RPQ1RFQ1RTUlhMXHQ2NVxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVE9DVEVDVFNSWEhcdDY2XG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTUlhPS1x0NjdcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RCQ0FTVFJYT0tcdDY4XG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUTUNBU1RSWE9LXHQ2OVxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZSQU1FU1JYNjRcdDcwXG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NURlJBTUVTUlg2NVx0NzFcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDEyOFx0NzJcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDI1Nlx0NzNcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDUxMlx0NzRcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RGUkFNRVNSWDEwMjRcdDc1XG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUUlVOVFNFUlJcdDc2XG4rI2RlZmluZSBTMjUwMF9SRUdfTUFDX1NUUlhUT09MT05HXHQ3N1xuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEZDU0VSUlNcdFx0NzhcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RTWU1CT0xFUlJTXHQ3OVxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVEFMSUdORVJSU1x0ODBcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfU1RSWE9WRVJGTE9XXHQ4MVxuKyNkZWZpbmUgUzI1MDBfUkVHX01BQ19TVFJYRFJPUFBFRFx0ODJcbitcbisvKiBGaXJzdC9sYXN0IHN0YXRpc3RpYyByZWdpc3RlciBmb3Igc2VxdWVudGlhbCBhY2Nlc3MgKi9cbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfRklSU1RfU1RBVFx0UzI1MDBfUkVHX01BQ19TVE9DVEVDVFNUWExcbisjZGVmaW5lIFMyNTAwX1JFR19NQUNfTEFTVF9TVEFUXHRcdFMyNTAwX1JFR19NQUNfU1RSWERST1BQRURcbitcbisjZGVmaW5lIFMyNTAwX05VTV9TVEFUX1JFR1MgXFxcbitcdChTMjUwMF9SRUdfTUFDX0xBU1RfU1RBVCAtIFMyNTAwX1JFR19NQUNfRklSU1RfU1RBVCArIDEpXG4rI2RlZmluZSBTMjUwMF9OVU1fU1RBVF9WQVJTXHRcdChTMjUwMF9OVU1fU1RBVF9SRUdTIC0gMilcbitcbisvKiBWZW5kb3Igc3BlY2lmaWMgTU1TNCByZWdpc3RlcnMgKi9cbisjZGVmaW5lIFMyNTAwX1JFR19WU19PTklQVkVSXHRcdDB4ODAwMFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1RXRUFLUzFcdFx0MHg4MDAxXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfUExDQUVYVFx0XHQweDgwMDJcbisjZGVmaW5lIFMyNTAwX1JFR19WU19QTUFUVU5FMFx0XHQweDgwMDNcbisjZGVmaW5lIFMyNTAwX1JFR19WU19QTUFUVU5FMVx0XHQweDgwMDRcbisjZGVmaW5lIFMyNTAwX1JFR19WU19UMVNXVVBUVU5FXHRcdDB4ODAwN1xuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0hERFx0XHQweENDMDFcbisjZGVmaW5lIFMyNTAwX1JFR19WU19EQ1FfVE9JRFx0XHQweENDMDJcbisjZGVmaW5lIFMyNTAwX1JFR19WU19EQ1FfU1FJXHRcdDB4Q0MwM1xuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0RDUV9TUUlfUExVU1x0MHhDQzA0XG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfSEREX1RVTkUxXHRcdDB4Q0QwMFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0hERF9UVU5FMlx0XHQweENEMDFcbisjZGVmaW5lIFMyNTAwX1JFR19WU19IRERfVFVORTNcdFx0MHhDRDAyXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfV1NfU1RBVFVTXzBcdDB4RDAwMFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1dTX0NUUkxfMFx0XHQweEQwMDFcbisjZGVmaW5lIFMyNTAwX1JFR19WU19XU19TVEFUVVNfMVx0MHhEMTAwXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfV1NfQ1RSTF8xXHRcdDB4RDEwMVxuK1xuKy8qIFZlbmRvciBzcGVjaWZpYyBNTVMxMiByZWdpc3RlcnMgKi9cbisjZGVmaW5lIFMyNTAwX1JFR19WU19NSUlNSVJRRVx0XHQweDEwXG4rXG4rLyogTUlJTSBJUlEgc3RhdHVzIHJlZ2lzdGVyICovXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfTUlJTUlSUVNcdFx0MHgxMVxuKyNkZWZpbmUgTUlJTV9JUlFfU1RBVFVTX1JTVFNfU0hJRlRcdDE1XG4rI2RlZmluZSBNSUlNX0lSUV9TVEFUVVNfUlNUU1x0XHRCSVQoTUlJTV9JUlFfU1RBVFVTX1JTVFNfU0hJRlQpXG4rXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfRElPQ0ZHMFx0XHQweDEyXG4rXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfQ0hJUElEXHRcdDB4MTAwMFxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1RXRUFLUzJcdFx0MHgxMDAxXG4rXG4rLyogUGVybWFuZW50IE1BQyBhZGRyZXNzIHJlZ2lzdGVyICovXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfTUFDSUQwXHRcdDB4MTAwMlxuKyNkZWZpbmUgUzI1MDBfVlNfTUFDSUQwX0JZVEU0X01BU0tcdEdFTk1BU0soMTUsIDgpXG4rI2RlZmluZSBTMjUwMF9WU19NQUNJRDBfQllURTVfTUFTS1x0R0VOTUFTSyg3LCAwKVxuK1xuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX01BQ0lEMVx0XHQweDEwMDNcbisjZGVmaW5lIFMyNTAwX1ZTX01BQ0lEMV9CWVRFM19NQVNLXHRHRU5NQVNLKDcsIDApXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfTlZNX0hFQUxUSFx0XHQweDEwMDVcbitcbisvKiBQVFAgcmVnaXN0ZXJzICovXG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfUFRQX1NFQ1x0XHQweDEwMTBcbisjZGVmaW5lIFMyNTAwX1JFR19WU19QVFBfU0VUU0VDXHRcdDB4MTAxMlxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX1BUUF9BREpcdFx0MHgxMDE0XG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfUFRQTlNFQ1x0XHQweDEwMTFcbisjZGVmaW5lIFMyNTAwX1JFR19WU19TRVROU0VDXHRcdDB4MTAxM1xuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NNUENUTFx0XHQweDEwMTVcbisjZGVmaW5lIFMyNTAwX1JFR19WU19DTVBTRUNcdFx0MHgxMDE2XG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfQ01QTlNFQ1x0XHQweDEwMTdcbisjZGVmaW5lIFMyNTAwX1JFR19WU19DTVBQRVJcdFx0MHgxMDE4XG4rI2RlZmluZSBTMjUwMF9SRUdfVlNfQ0FQQ1RMXHRcdDB4MTAxOVxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0NBUFNFQ1x0XHQweDEwMUFcbisjZGVmaW5lIFMyNTAwX1JFR19WU19DQVBOU0VDXHRcdDB4MTAxQlxuKyNkZWZpbmUgUzI1MDBfUkVHX1ZTX0JDTkNOVFx0XHQweDEwMUNcbitcbisvKiBwcm90b3R5cGVzIC8gZm9yd2FyZCBkZWNsYXJhdGlvbnMgKi9cbitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHMyNTAwX2V0aHRvb2xfb3BzO1xuK1xuK3N0cnVjdCBzMjUwMF9pbmZvIHtcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xuK1xuK1x0LyogVG8gaGF2ZSBhdG9taWMgc2V0X3J4X21vZGUgb3BlcmF0aW9uICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4rXG4rXHQvKiBUbyBoYXZlIGF0b21pYyBvcGVyYXRpb24gd2hlbiB0aW1lIGlzIGFkanVzdGVkICovXG4rXHRzdHJ1Y3QgbXV0ZXggcHRwX2Fkal9sb2NrO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0aHJlYWQ7XG4rXG4rXHQvKiBnbG9iYWwgc3RhdGUgdmFyaWFibGVzICovXG4rXHRib29sIGV2ZW50X3BlbmRpbmc7XG4rXHR1bnNpZ25lZCBpbnQgbmRldl9mbGFncztcbitcdGJvb2wgcnhfZmxhZ3NfdXBkO1xuK1xuK1x0c2lnbmVkIGxvbmcgcG9sbF9qaWZmO1xuK1xuK1x0c3RydWN0IHNwaV9kZXZpY2UgKnNwaTtcbitcbitcdC8qIHN0YXRpc3RpYyBjb3VudGVycyB2YXJpYWJsZXMgKi9cbitcdHU2NCBzdGF0c19kYXRhW1MyNTAwX05VTV9TVEFUX1ZBUlNdO1xuK1xuK1x0LyogUFRQIHJlbGF0ZWQgdmFyaWFibGVzICovXG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gcHRwX2Nsb2NrX2luZm87XG4rXHR2b2lkICp0YzY7XG4rfTtcbitcbitpbnQgczI1MDBfcHRwX3JlZ2lzdGVyKHN0cnVjdCBzMjUwMF9pbmZvICpwcml2KTtcbitcbisjZW5kaWYgLyogUzI1MDBfSFdfREVGX0ggKi9cbitcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX21haW4uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yZDgxYjQ0ZjhjNzZjMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvb25zZW1pL3MyNTAwL3MyNTAwX21haW4uY1xuQEAgLTAsMCArMSw2NDkgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IDIwMjYgU2VtaWNvbmR1Y3RvciBDb21wb25lbnRzIEluZHVzdHJpZXMsIExMQyAoXCJvbnNlbWlcIikuXG4rICogb25zZW1pJ3MgUzI1MDAgMTBCQVNFLVQxUyBNQUMtUEhZIGRyaXZlclxuKyAqL1xuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxY2hpcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdHJldi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbitcbisjaW5jbHVkZSBcInMyNTAwX2h3X2RlZi5oXCJcbitcbisvKiBTMjUwMCBmdW5jdGlvbnMgXHUwMDI2IGRlZmluaXRpb25zICovXG4rXG4rI2RlZmluZSBTMjUwMF9TVEFUVVMwX01BU0tcdChTMjUwMF9TUElfU1QwX0NEUEVfQklUIHwgXFxcbitcdFx0XHRcdFMyNTAwX1NQSV9TVDBfVFhGQ1NFX0JJVCB8IFxcXG4rXHRcdFx0XHRTMjUwMF9TUElfU1QwX1RUU0NBQ19CSVQgfCBcXFxuK1x0XHRcdFx0UzI1MDBfU1BJX1NUMF9UVFNDQUJfQklUIHwgXFxcbitcdFx0XHRcdFMyNTAwX1NQSV9TVDBfVFRTQ0FBX0JJVCB8IFxcXG4rXHRcdFx0XHRTMjUwMF9TUElfU1QwX1JFU0VUQ19CSVQgfCBcXFxuK1x0XHRcdFx0UzI1MDBfU1BJX1NUMF9IRFJFX0JJVCB8IFxcXG4rXHRcdFx0XHRTMjUwMF9TUElfU1QwX0xPRkVfQklUIHwgXFxcbitcdFx0XHRcdFMyNTAwX1NQSV9TVDBfUlhCT0VfQklUIHwgXFxcbitcdFx0XHRcdFMyNTAwX1NQSV9TVDBfVFhCVUVfQklUIHwgXFxcbitcdFx0XHRcdFMyNTAwX1NQSV9TVDBfVFhCT0VfQklUIHwgXFxcbitcdFx0XHRcdFMyNTAwX1NQSV9TVDBfVFhQRV9CSVQpXG4rXG4rLyogSW5pdGlhbGl6ZXMgdGhlIG5ldCBkZXZpY2UgTUFDIGFkZHJlc3MgYnkgcmVhZGluZyB0aGUgVUlEIHN0b3JlZFxuKyAqIGludG8gdGhlIGRldmljZSBpbnRlcm5hbCBub24tdm9sYXRpbGUgbWVtb3J5LlxuKyAqL1xuK3N0YXRpYyBpbnQgczI1MDBfcmVhZF9tYWNfZnJvbV9udm1lbShzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdilcbit7XG4rXHR1MTYgbW1zID0gT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTI7XG4rXHR1OCBhZGRyW0VUSF9BTEVOXTtcbitcdHUzMiBtYWMxID0gMDtcbitcdHUzMiBtYWMwID0gMDtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfVlNfTUFDSUQxLFxuK1x0XHRcdFx0ICAgICAgIG1tcywgXHUwMDI2bWFjMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfVlNfTUFDSUQwLFxuK1x0XHRcdFx0ICAgICAgIG1tcywgXHUwMDI2bWFjMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0LyogUHJlLXByb2R1Y3Rpb24gcGFydHMgbWF5IGhhdmUgMCAqL1xuK1x0aWYgKG1hYzAgPT0gMCBcdTAwMjZcdTAwMjYgbWFjMSA9PSAwKVxuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1xuK1x0cmV0ID0gb2FfdGM2X3JlYWRfcmVnaXN0ZXIocHJpdi1cdTAwM2V0YzYsIFMyNTAwX1JFR19TUElfUEhZSUQsXG4rXHRcdFx0XHQgICBcdTAwMjZ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHZhbCA9ICh2YWwgXHUwMDI2IFMyNTAwX1NQSV9QSFlJRF9PVUlfTUFTSykgXHUwMDNlXHUwMDNlXG4rXHQgICAgICAgUzI1MDBfU1BJX1BIWUlEX09VSV9TSElGVDtcbitcbitcdC8qIE1hcHBpbmcgZm9yIGJpdHMgZnJvbSBQSFkgSUQgcmVnaXN0ZXIgdG8gT1VJIGFzIGdpdmUgYmVsb3cuXG4rXHQgKiAtIFBIWS1JRFsxMDoxN10gcHJvdmlkZXMgT1VJWzE2OjIzXVxuK1x0ICogLSBQSFktSURbMTg6MjVdIHByb3ZpZGVzIE9VSVs4OjE1XVxuK1x0ICogLSBQSFktSURbMjY6MzFdIHByb3ZpZGVzIE9VSVsyOjddXG4rXHQgKlxuK1x0ICogSGFyZHdhcmUgcHJlc2VudHMgT1VJIHN1Y2ggYSB3YXkgdGhhdCB0aGlzIHJlcXVpcmVzIG5vdCBqdXN0XG4rXHQgKiBieXRlIGxldmVsIHN3YXAsIGJpdCBsZXZlbCBzd2FwIGlzIG5lZWRlZCBhcyB3ZWxsLlxuK1x0ICovXG4rXHRhZGRyWzBdID0gYml0cmV2OChGSUVMRF9HRVQoUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMCwgdmFsKSk7XG4rXHRhZGRyWzFdID0gYml0cmV2OChGSUVMRF9HRVQoUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMSwgdmFsKSk7XG4rXHRhZGRyWzJdID0gYml0cmV2OChGSUVMRF9HRVQoUzI1MDBfU1BJX1BIWUlEX09VSV9NQVNLMiwgdmFsKSk7XG4rXG4rXHRhZGRyWzNdID0gRklFTERfR0VUKFMyNTAwX1ZTX01BQ0lEMV9CWVRFM19NQVNLLCBtYWMxKTtcbitcdGFkZHJbNF0gPSBGSUVMRF9HRVQoUzI1MDBfVlNfTUFDSUQwX0JZVEU0X01BU0ssIG1hYzApO1xuK1x0YWRkcls1XSA9IEZJRUxEX0dFVChTMjUwMF9WU19NQUNJRDBfQllURTVfTUFTSywgbWFjMCk7XG4rXG4rXHRfX2Rldl9hZGRyX3NldChwcml2LVx1MDAzZW5kZXYsIGFkZHIsIEVUSF9BTEVOKTtcbitcdHByaXYtXHUwMDNlbmRldi1cdTAwM2VhZGRyX2Fzc2lnbl90eXBlID0gTkVUX0FERFJfUEVSTTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qIFdyaXRlcyBNQUMgYWRkcmVzcyB0byBtYWNwaHkgcmVnaXN0ZXJzICovXG4rc3RhdGljIGludCBzMjUwMF9zZXRfbWFjX2ZpbHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgY29uc3QgdTggKm1hYylcbit7XG4rXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0dTE2IG1tcyA9IE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxO1xuK1x0dTMyIHZhbDtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBTZXQgdW5pY2FzdCBhZGRyZXNzIGZpbHRlciAqL1xuK1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbitcdFx0XHRcdFx0UzI1MDBfUkVHX01BQ19BRERSTUFTS0woMCksXG4rXHRcdFx0XHRcdG1tcywgMHhmZmZmZmZmZik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbitcdFx0XHRcdFx0UzI1MDBfUkVHX01BQ19BRERSTUFTS0goMCksXG4rXHRcdFx0XHRcdG1tcywgMHhmZmZmKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHR2YWwgPSBnZXRfdW5hbGlnbmVkX2JlMzIoXHUwMDI2bWFjWzJdKTtcbitcbitcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsXG4rXHRcdFx0XHRcdFMyNTAwX1JFR19NQUNfQUREUkZJTFRMKDApLFxuK1x0XHRcdFx0XHRtbXMsIHZhbCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0dmFsID0gUzI1MDBfTUFDX0FERFJGSUxUX0VOX0JJVCB8IGdldF91bmFsaWduZWRfYmUxNihtYWMpO1xuK1xuK1x0cmV0dXJuIG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsXG4rXHRcdFx0XHRcdCBTMjUwMF9SRUdfTUFDX0FERFJGSUxUSCgwKSxcbitcdFx0XHRcdFx0IG1tcywgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdixcbitcdFx0XHRcdCAgICAgIHUzMiBpbl9iaXRzLCBib29sIGNscilcbit7XG4rXHR1MTYgbW1zID0gT0FfVEM2X1BIWV9DNDVfTUFDX01NUzE7XG4rXHR1MzIgcmVnID0gUzI1MDBfUkVHX01BQ19DVFJMO1xuK1x0dTMyIHJ2YWwgPSAwO1xuK1x0dTMyIHd2YWwgPSAwO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgcmVnLCBtbXMsIFx1MDAyNnJ2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChjbHIpXG4rXHRcdHd2YWwgPSBydmFsIFx1MDAyNiB+aW5fYml0cztcbitcdGVsc2VcbitcdFx0d3ZhbCA9IHJ2YWwgfCBpbl9iaXRzO1xuK1x0aWYgKHJ2YWwgIT0gd3ZhbClcbitcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgcmVnLFxuK1x0XHRcdFx0XHRcdG1tcywgd3ZhbCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHMyNTAwX2luaXQoc3RydWN0IHMyNTAwX2luZm8gKnByaXYpXG4re1xuK1x0dTMyIHZhbDtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBDb25maWd1cmUgTUFDLVBIWSdzIGJlaGF2aW9yICovXG4rXHR2YWwgPSBTMjUwMF9TUElfQ0ZHMF9TWU5DX0JJVCB8IFMyNTAwX1NQSV9DRkcwX1JYQ1RFX0JJVCB8XG4rXHQgICAgICAoUzI1MDBfVFhDVEhSRVNIXzggXHUwMDNjXHUwMDNjIFMyNTAwX1NQSV9DRkcwX1RYQ1RIUkVTSF9TSElGVCkgfFxuK1x0ICAgICAgKFMyNTAwX0NQU182NCBcdTAwM2NcdTAwM2MgUzI1MDBfU1BJX0NGRzBfQ1BTX1NISUZUKSB8XG4rXHQgICAgICBTMjUwMF9TUElfQ0ZHMF9GVFNTXzY0X0JJVDtcbitcbitcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgUzI1MDBfUkVHX1NQSV9DRkcwLCB2YWwpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHZhbCA9ICh1MzIpfihTMjUwMF9TUElfU1QwX1JFU0VUQ19CSVQgfFxuK1x0XHQgICAgIFMyNTAwX1NQSV9TVDBfSERSRV9CSVQgfCBTMjUwMF9TUElfU1QwX0xPRkVfQklUIHxcbitcdFx0ICAgICBTMjUwMF9TUElfU1QwX1JYQk9FX0JJVCB8IFMyNTAwX1NQSV9TVDBfVFhCT0VfQklUIHxcbitcdFx0ICAgICBTMjUwMF9TUElfU1QwX1RYUEVfQklUKTtcbitcbitcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgUzI1MDBfUkVHX1NQSV9JUlFNMCwgdmFsKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHQvKiBQcm9ncmFtIHRoZSBzb3VyY2UgTUFDIGFkZHJlc3MgaW50byB0aGUgZGV2aWNlICovXG4rXHRyZXQgPSBzMjUwMF9zZXRfbWFjX2ZpbHRlcihwcml2LVx1MDAzZW5kZXYsIHByaXYtXHUwMDNlbmRldi1cdTAwM2VkZXZfYWRkcik7XG4rXG4rXHR2YWwgPSBTMjUwMF9NQUNfQ1RSTF9BRFJGX0JJVCB8IFMyNTAwX01BQ19DVFJMX0ZDU0FfQklUO1xuK1xuK1x0cmV0dXJuIHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsIHZhbCwgZmFsc2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzMjUwMF9zaHV0ZG93bihzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdilcbit7XG4rXHR1MzIgdmFsID0gUzI1MDBfTUFDX0NUUkxfVFhFTl9CSVQgfCBTMjUwMF9NQUNfQ1RSTF9SWEVOX0JJVDtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcHJpdi1cdTAwM2VuZGV2O1xuK1xuK1x0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcbitcdHBoeV9zdG9wKG5kZXYtXHUwMDNlcGh5ZGV2KTtcbitcbitcdHMyNTAwX21hY19jdHJsX21vZGlmeV9iaXRzKHByaXYsIHZhbCwgdHJ1ZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgczI1MDBfc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IHMyNTAwX2luZm8gKnByaXYsXG4rXHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgcnhfZmxhZ3MpXG4re1xuK1x0dTMyIHZhbCA9IFMyNTAwX01BQ19DVFJMX0FEUkZfQklUO1xuK1x0Ym9vbCBjbHIgPSBmYWxzZTtcbitcbitcdGlmIChyeF9mbGFncyBcdTAwMjYgSUZGX1BST01JU0MpXG4rXHRcdGNsciA9IHRydWU7XG4rXHRyZXR1cm4gczI1MDBfbWFjX2N0cmxfbW9kaWZ5X2JpdHMocHJpdiwgdmFsLCBjbHIpO1xuK31cbitcbitzdGF0aWMgaW50IHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZShzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdixcbitcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgcnhfZmxhZ3MpXG4re1xuK1x0dTE2IG1tcyA9IE9BX1RDNl9QSFlfQzQ1X01BQ19NTVMxO1xuK1x0aW50IGksIHJldCA9IDA7XG4rXHR1MTYgYWRkcjtcbitcdHUzMiB2YWw7XG4rXG4rXHRpZiAoKHJ4X2ZsYWdzIFx1MDAyNiBJRkZfQUxMTVVMVEkpIHx8XG4rXHQgICAgKG5ldGRldl9tY19jb3VudChwcml2LVx1MDAzZW5kZXYpIFx1MDAzZSBTMjUwMF9OX01DQVNUX0ZJTFRFUlMpKSB7XG4rXHRcdC8qIERpc2FibGUgbXVsdGljYXN0IGZpbHRlciAqL1xuK1x0XHRyZXQgPSBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhwcml2LFxuK1x0XHRcdFx0XHRcdCBTMjUwMF9NQUNfQ1RSTF9NQ1NGX0JJVCxcbitcdFx0XHRcdFx0XHQgdHJ1ZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogQWNjZXB0IGFsbCBtdWx0aWNhc3RzICovXG4rXHRcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLTCgxKTtcbitcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgYWRkcixcbitcdFx0XHRcdFx0XHRtbXMsIDApO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLSCgxKTtcbitcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNiwgYWRkcixcbitcdFx0XHRcdFx0XHRtbXMsIDB4MTAwKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEwoMSk7XG4rXHRcdHJldCA9IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIGFkZHIsXG4rXHRcdFx0XHRcdFx0bW1zLCAwKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHR2YWwgPSBTMjUwMF9NQUNfQUREUkZJTFRfRU5fQklUIHwgMHgwMDAwMDEwMDtcbitcdFx0YWRkciA9IFMyNTAwX1JFR19NQUNfQUREUkZJTFRIKDEpO1xuK1x0XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBhZGRyLFxuK1x0XHRcdFx0XHRcdG1tcywgdmFsKTtcbitcdH0gZWxzZSBpZiAobmV0ZGV2X21jX2NvdW50KHByaXYtXHUwMDNlbmRldikgPT0gMCkge1xuK1x0XHQvKiBFbmFibGUgbXVsdGljYXN0IGZpbHRlciAqL1xuK1x0XHRyZXQgPSBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhwcml2LFxuK1x0XHRcdFx0XHRcdCBTMjUwMF9NQUNfQ1RSTF9NQ1NGX0JJVCxcbitcdFx0XHRcdFx0XHQgZmFsc2UpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIERpc2FibGUgZmlsdGVycyAqL1xuK1x0XHRmb3IgKGkgPSAxOyBpIFx1MDAzYz0gUzI1MDBfTl9NQ0FTVF9GSUxURVJTOyBpKyspIHtcbitcdFx0XHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEgoaSk7XG4rXHRcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbitcdFx0XHRcdFx0XHRcdGFkZHIsIG1tcywgMCk7XG4rXHRcdFx0aWYgKHJldClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7XG4rXHRcdHUzMiBhZGRyaCwgYWRkcmw7XG4rXG4rXHRcdC8qIERpc2FibGUgbXVsdGljYXN0IGZpbHRlciAqL1xuK1x0XHRyZXQgPSBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhwcml2LFxuK1x0XHRcdFx0XHRcdCBTMjUwMF9NQUNfQ1RSTF9NQ1NGX0JJVCxcbitcdFx0XHRcdFx0XHQgdHJ1ZSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogRGlzYWJsZSBmaWx0ZXJzICovXG4rXHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjPSBTMjUwMF9OX01DQVNUX0ZJTFRFUlM7IGkrKykge1xuK1x0XHRcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJGSUxUSChpKTtcbitcdFx0XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LFxuK1x0XHRcdFx0XHRcdFx0YWRkciwgbW1zLCAwKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0fVxuK1xuK1x0XHRpID0gMTtcbitcdFx0bmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoaGEsIHByaXYtXHUwMDNlbmRldikge1xuK1x0XHRcdGlmIChpIFx1MDAzZSBTMjUwMF9OX01DQVNUX0ZJTFRFUlMpXG4rXHRcdFx0XHRicmVhaztcbitcbitcdFx0XHRhZGRyaCA9IFMyNTAwX01BQ19BRERSRklMVF9FTl9CSVQgfFxuK1x0XHRcdFx0IGdldF91bmFsaWduZWRfYmUxNihoYS1cdTAwM2VhZGRyKTtcbitcdFx0XHRhZGRybCA9IGdldF91bmFsaWduZWRfYmUzMihcdTAwMjZoYS1cdTAwM2VhZGRyWzJdKTtcbitcbitcdFx0XHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEgoaSk7XG4rXHRcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbitcdFx0XHRcdFx0XHRcdGFkZHIsIG1tcyxcbitcdFx0XHRcdFx0XHRcdGFkZHJoKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0XHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSRklMVEwoaSk7XG4rXHRcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbitcdFx0XHRcdFx0XHRcdGFkZHIsIG1tcyxcbitcdFx0XHRcdFx0XHRcdGFkZHJsKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0XHRhZGRyID0gUzI1MDBfUkVHX01BQ19BRERSTUFTS0woaSk7XG4rXHRcdFx0cmV0ID0gb2FfdGM2X3dyaXRlX3JlZ2lzdGVyX21tcyhwcml2LVx1MDAzZXRjNixcbitcdFx0XHRcdFx0XHRcdGFkZHIsIG1tcyxcbitcdFx0XHRcdFx0XHRcdDB4ZmZmZmZmZmYpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRcdGFkZHIgPSBTMjUwMF9SRUdfTUFDX0FERFJNQVNLSChpKTtcbitcdFx0XHRyZXQgPSBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LFxuK1x0XHRcdFx0XHRcdFx0YWRkciwgbW1zLFxuK1x0XHRcdFx0XHRcdFx0MHhmZmZmKTtcbitcdFx0XHRpZiAocmV0KVxuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHRpKys7XG4rXHRcdH1cbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qIERlZmVycmVkIGZ1bmN0aW9uIGZvciBhcHBseWluZyBSWCBtb2RlIGZsYWdzIGluIG5vbi1hdG9taWMgY29udGV4dCAqL1xuK3N0YXRpYyBpbnQgczI1MDBfcnhfbW9kZV91cGRhdGUoc3RydWN0IHMyNTAwX2luZm8gKnByaXYpXG4re1xuK1x0dW5zaWduZWQgaW50IHJ4X2ZsYWdzO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGludCByZXQ7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdHJ4X2ZsYWdzID0gcHJpdi1cdTAwM2VuZGV2X2ZsYWdzO1xuK1x0cHJpdi1cdTAwM2VyeF9mbGFnc191cGQgPSBmYWxzZTtcbitcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRyZXQgPSBzMjUwMF9zZXRfcHJvbWlzY3VvdXNfbW9kZShwcml2LCByeF9mbGFncyk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHJldCA9IHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZShwcml2LCByeF9mbGFncyk7XG4rb3V0OlxuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgczI1MDBfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZwcml2LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdHByaXYtXHUwMDNlcnhfZmxhZ3NfdXBkID0gdHJ1ZTtcbitcdHByaXYtXHUwMDNlbmRldl9mbGFncyA9IG5kZXYtXHUwMDNlZmxhZ3M7XG4rXG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnByaXYtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNldGhyZWFkKVxuK1x0XHR3YWtlX3VwX3Byb2Nlc3MocHJpdi1cdTAwM2V0aHJlYWQpO1xuK31cbitcbitzdGF0aWMgaW50IHMyNTAwX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdm9pZCAqcClcbit7XG4rXHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xuK1xuK1x0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItXHUwMDNlc2FfZGF0YSkpXG4rXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbitcbitcdGV0aF9od19hZGRyX3NldChuZGV2LCBhZGRyLVx1MDAzZXNhX2RhdGEpO1xuK1x0cmV0dXJuIHMyNTAwX3NldF9tYWNfZmlsdGVyKG5kZXYsIGFkZHItXHUwMDNlc2FfZGF0YSk7XG4rfVxuK1xuK3N0YXRpYyBuZXRkZXZfdHhfdCBzMjUwMF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdHJldHVybiBvYV90YzZfc3RhcnRfeG1pdChwcml2LVx1MDAzZXRjNiwgc2tiKTtcbit9XG4rXG4rc3RhdGljIGludCBzMjUwMF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGlmcmVxICpycSxcbitcdFx0ICAgICAgIGludCBjbWQpXG4re1xuK1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdHJldHVybiBvYV90YzZfaW9jdGwocHJpdi1cdTAwM2V0YzYsIHJxLCBjbWQpO1xuK31cbitcbitzdGF0aWMgdm9pZCBzMjUwMF9wcm9jZXNzX2V2ZW50cyhzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdilcbit7XG4rXHR1MzIgdmFsO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghcHJpdi1cdTAwM2VldmVudF9wZW5kaW5nKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRwcml2LVx1MDAzZWV2ZW50X3BlbmRpbmcgPSBmYWxzZTtcbitcbitcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfU1BJX1NUMCwgXHUwMDI2dmFsKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZXNwaS1cdTAwM2VkZXYsIFwiRXJyb3IgcmVhZGluZyBTVDAgcmVnaXN0ZXJcIik7XG4rXHRcdHJldHVybjtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBzMjUwMF90aHJlYWRfZnVuKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBkYXRhO1xuK1x0Ym9vbCB1cGRhdGVfcnhfbW9kZSA9IGZhbHNlO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHNpZ25lZCBsb25nIHRvdXQ7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHRvdXQgPSBwcml2LVx1MDAzZXBvbGxfamlmZjtcbitcbitcdGRvIHtcbitcdFx0aWYgKHVwZGF0ZV9yeF9tb2RlKSB7XG4rXHRcdFx0cmV0ID0gczI1MDBfcnhfbW9kZV91cGRhdGUocHJpdik7XG4rXHRcdFx0aWYgKHVubGlrZWx5KHJldCkpIHtcbitcdFx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VzcGktXHUwMDNlZGV2LFxuK1x0XHRcdFx0XHRcIkZhaWxlZCB0byBzZXQgbmV3IFJYIG1vZGVcIik7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXHRcdH1cbitcbitcdFx0aWYgKHRvdXQgPT0gMCkge1xuK1x0XHRcdHRvdXQgPSBwcml2LVx1MDAzZXBvbGxfamlmZjtcbitcbitcdFx0XHQvKiBGb3JjZSBjaGVja2luZyB0aGUgc3RhdHVzIHJlZ2lzdGVyICovXG4rXHRcdFx0cHJpdi1cdTAwM2VldmVudF9wZW5kaW5nID0gdHJ1ZTtcbitcdFx0fVxuK1xuK1x0XHRzMjUwMF9wcm9jZXNzX2V2ZW50cyhwcml2KTtcbitcbitcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbitcbitcdFx0dXBkYXRlX3J4X21vZGUgPSBwcml2LVx1MDAzZXJ4X2ZsYWdzX3VwZDtcbitcdFx0cmV0ID0gdXBkYXRlX3J4X21vZGU7XG4rXG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2cHJpdi1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdHRvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRvdXQpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcbitcdH0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgczI1MDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0aW50IHJldCA9IDA7XG4rXHR1MzIgdmFsO1xuK1xuK1x0ZGV2X2RiZyhcdTAwMjZuZGV2LVx1MDAzZWRldiwgXCIlc1wiLCBcInMyNTAwX29wZW5cIik7XG4rXHRwaHlfc3RhcnQocHJpdi1cdTAwM2VuZGV2LVx1MDAzZXBoeWRldik7XG4rXG4rXHRwcml2LVx1MDAzZXRocmVhZCA9IGt0aHJlYWRfcnVuKHMyNTAwX3RocmVhZF9mdW4sIHByaXYsXG4rXHRcdFx0XHQgICBEUlZfTkFNRSBcIi8lczolZFwiLFxuK1x0XHRcdFx0ICAgZGV2X25hbWUoXHUwMDI2cHJpdi1cdTAwM2VzcGktXHUwMDNlZGV2KSxcbitcdFx0XHRcdCAgIHNwaV9nZXRfY2hpcHNlbGVjdChwcml2LVx1MDAzZXNwaSwgMCkpO1xuK1xuK1x0aWYgKElTX0VSUihwcml2LVx1MDAzZXRocmVhZCkpIHtcbitcdFx0cmV0ID0gUFRSX0VSUihwcml2LVx1MDAzZXRocmVhZCk7XG4rXHR9IGVsc2Uge1xuK1x0XHR2YWwgPSBTMjUwMF9NQUNfQ1RSTF9UWEVOX0JJVCB8IFMyNTAwX01BQ19DVFJMX1JYRU5fQklUO1xuK1x0XHRyZXQgPSBzMjUwMF9tYWNfY3RybF9tb2RpZnlfYml0cyhwcml2LCB2YWwsIGZhbHNlKTtcbitcbitcdFx0bmV0aWZfc3RhcnRfcXVldWUocHJpdi1cdTAwM2VuZGV2KTtcbitcdH1cbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgczI1MDBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1xuK1x0ZGV2X2RiZyhcdTAwMjZuZGV2LVx1MDAzZWRldiwgXCIlc1wiLCBcInMyNTAwX3N0b3BcIik7XG4rXG4rXHRzMjUwMF9zaHV0ZG93bihwcml2KTtcbitcbitcdGt0aHJlYWRfc3RvcChwcml2LVx1MDAzZXRocmVhZCk7XG4rXHRwcml2LVx1MDAzZXRocmVhZCA9IE5VTEw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBzMjUwMF9od3RzdGFtcF9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmtfY2ZnKVxuK3tcbitcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRvYV90YzZfaHd0c3RhbXBfZ2V0KHByaXYtXHUwMDNldGM2LCBrX2NmZyk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBzMjUwMF9od3RzdGFtcF9zZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IGtlcm5lbF9od3RzdGFtcF9jb25maWcgKmNmZyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdHJldHVybiBvYV90YzZfaHd0c3RhbXBfc2V0KHByaXYtXHUwMDNldGM2LCBjZmcpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHMyNTAwX25ldGRldl9vcHMgPSB7XG4rXHQubmRvX29wZW4gICAgICAgICAgICA9IHMyNTAwX29wZW4sXG4rXHQubmRvX3N0b3AgICAgICAgICAgICA9IHMyNTAwX3N0b3AsXG4rXHQubmRvX3N0YXJ0X3htaXQgICAgICA9IHMyNTAwX3N0YXJ0X3htaXQsXG4rXHQubmRvX3NldF9tYWNfYWRkcmVzcyA9IHMyNTAwX3NldF9tYWNfYWRkcmVzcyxcbitcdC5uZG9fc2V0X3J4X21vZGUgICAgID0gczI1MDBfc2V0X3J4X21vZGUsXG4rXHQubmRvX2V0aF9pb2N0bCAgICAgICA9IHMyNTAwX2lvY3RsLFxuK1x0Lm5kb19od3RzdGFtcF9nZXQgICAgPSBzMjUwMF9od3RzdGFtcF9nZXQsXG4rXHQubmRvX2h3dHN0YW1wX3NldCAgICA9IHMyNTAwX2h3dHN0YW1wX3NldCxcbit9O1xuK1xuK3N0YXRpYyBpbnQgczI1MDBfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZzcGktXHUwMDNlZGV2O1xuK1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4rXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdjtcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHNwaS1cdTAwM2VpcnEgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtRU5PREVWO1xuK1xuK1x0bmRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXYoZGV2LCBzaXplb2Yoc3RydWN0IHMyNTAwX2luZm8pKTtcbitcdGlmICghbmRldilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuK1x0cHJpdi1cdTAwM2VzcGkgPSBzcGk7XG4rXHRwcml2LVx1MDAzZWRldiA9IGRldjtcbitcbitcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldik7XG4rXG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZwcml2LVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXB0cF9hZGpfbG9jayk7XG4rXHRuZGV2LVx1MDAzZWlycSA9IHNwaS1cdTAwM2VpcnE7XG4rXG4rXHRzcGktXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBwcml2O1xuK1x0c3BpX3NldF9kcnZkYXRhKHNwaSwgcHJpdik7XG4rXG4rXHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZzMjUwMF9uZXRkZXZfb3BzO1xuK1x0bmRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNnMyNTAwX2V0aHRvb2xfb3BzO1xuK1x0bmRldi1cdTAwM2VpZl9wb3J0ID0gSUZfUE9SVF8xMEJBU0VUO1xuK1x0bmRldi1cdTAwM2Vwcml2X2ZsYWdzIHw9IElGRl9VTklDQVNUX0ZMVDtcbitcdG5kZXYtXHUwMDNlaHdfZmVhdHVyZXMgPSBORVRJRl9GX1JYQUxMO1xuK1xuK1x0cHJpdi1cdTAwM2Vwb2xsX2ppZmYgPSBIWiAqIDU7IC8qIFBvbGwgaW50ZXJ2YWwgKi9cbitcbitcdHByaXYtXHUwMDNldGM2ID0gb2FfdGM2X2luaXQoc3BpLCBuZGV2KTtcbitcdGlmICghcHJpdi1cdTAwM2V0YzYpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZzcGktXHUwMDNlZGV2LCBcIk9BIFRDNiBpbml0IGZhaWxlZFwiKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXHRvYV90YzZfc2V0X3ZlbmQxX21tcyhwcml2LVx1MDAzZXRjNiwgT0FfVEM2X1BIWV9DNDVfVlNfTU1TMTIpO1xuK1xuK1x0LyogQ2xlYXIgUlNUUywgaWYgc2V0ICovXG4rXHRvYV90YzZfcmVhZF9yZWdpc3Rlcl9tbXMocHJpdi1cdTAwM2V0YzYsIFMyNTAwX1JFR19WU19NSUlNSVJRUyxcbitcdFx0XHRcdCBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMiwgXHUwMDI2dmFsKTtcbitcdHZhbCBcdTAwMjY9IE1JSU1fSVJRX1NUQVRVU19SU1RTO1xuK1x0aWYgKHZhbCAhPSAwKVxuK1x0XHRvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LFxuK1x0XHRcdFx0XHQgIFMyNTAwX1JFR19WU19NSUlNSVJRUyxcbitcdFx0XHRcdFx0ICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMixcbitcdFx0XHRcdFx0ICBNSUlNX0lSUV9TVEFUVVNfUlNUUyk7XG4rXG4rXHQvKiBBY2tub3dsZWRnZSBhbGwgSVJRIHN0YXR1cyBiaXRzICovXG4rXHRyZXQgPSBvYV90YzZfcmVhZF9yZWdpc3Rlcihwcml2LVx1MDAzZXRjNiwgUzI1MDBfUkVHX1NQSV9TVDAsIFx1MDAyNnZhbCk7XG4rXHRpZiAoIXJldCkge1xuK1x0XHR1MzIgbWFzayA9IFMyNTAwX1NUQVRVUzBfTUFTSztcbitcbitcdFx0dmFsIFx1MDAyNj0gbWFzaztcbitcdFx0b2FfdGM2X3dyaXRlX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfU1BJX1NUMCwgdmFsKTtcbitcdH1cbitcbitcdHJldCA9IGRldmljZV9nZXRfZXRoZGV2X2FkZHJlc3MocHJpdi1cdTAwM2VkZXYsIG5kZXYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0ID0gczI1MDBfcmVhZF9tYWNfZnJvbV9udm1lbShwcml2KTtcbitcbitcdGlmIChyZXQpIHtcbitcdFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5kZXYpO1xuK1x0XHRkZXZfd2FybihcdTAwMjZzcGktXHUwMDNlZGV2LCBcIlVzaW5nIHJhbmRvbSBNQUMgYWRkcmVzcyAlcE1cIixcbitcdFx0XHQgbmRldi1cdTAwM2VkZXZfYWRkcik7XG4rXHR9XG4rXG4rXHRyZXQgPSBzMjUwMF9pbml0KHByaXYpO1xuK1x0aWYgKHVubGlrZWx5KHJldCkpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZzcGktXHUwMDNlZGV2LCBcImZhaWxlZCB0byBzMjUwMF9pbml0IHRoZSBkZXZpY2VcIik7XG4rXHRcdGdvdG8gZXJyX3JlZ19yZWFkO1xuK1x0fVxuK1xuK1x0LyogQ29uZmlndXJlIFBUUCBpZiB0aGUgbW9kZWwgc3VwcG9ydHMgaXQgKi9cbitcdHJldCA9IHMyNTAwX3B0cF9yZWdpc3Rlcihwcml2KTtcbitcdGlmICh1bmxpa2VseShyZXQpKVxuK1x0XHRnb3RvIGVycl9yZWdfcmVhZDtcbitcbitcdHJldCA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZzcGktXHUwMDNlZGV2LCBcImZhaWxlZCB0byByZWdpc3RlciBuZXRkZXZcXG5cIik7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXG4rXHRcdGdvdG8gZXJyX3JlZ19yZWFkO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3JlZ19yZWFkOlxuK1x0ZGV2X2VycihcdTAwMjZzcGktXHUwMDNlZGV2LCBcImNvdWxkIG5vdCBpbml0aWFsaXplIG1hY3BoeVwiKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHMyNTAwX3JlbW92ZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKVxuK3tcbitcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gc3BpLVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuK1xuK1x0ZGV2X2RiZyhcdTAwMjZwcml2LVx1MDAzZW5kZXYtXHUwMDNlZGV2LCBcIiVzXCIsIFwiczI1MDBfcmVtb3ZlXCIpO1xuK1xuK1x0b2FfdGM2X3B0cF91bnJlZ2lzdGVyKHByaXYtXHUwMDNldGM2KTtcbitcdHVucmVnaXN0ZXJfbmV0ZGV2KHByaXYtXHUwMDNlbmRldik7XG4rXHRvYV90YzZfZXhpdChwcml2LVx1MDAzZXRjNik7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHMyNTAwX29mX21hdGNoW10gPSB7XG4rXHR7IC5jb21wYXRpYmxlID0gXCJvbm5uLHMyNTAwXCIgfSxcbitcdHsgfVxuK307XG4rTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgczI1MDBfb2ZfbWF0Y2gpO1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBzMjUwMF9pZHNbXSA9IHtcbitcdHsgXCJzMjUwMFwiIH0sXG4rXHR7IH1cbit9O1xuK01PRFVMRV9ERVZJQ0VfVEFCTEUoc3BpLCBzMjUwMF9pZHMpO1xuK1xuK3N0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBzMjUwMF9kcml2ZXIgPSB7XG4rXHQuZHJpdmVyID0ge1xuK1x0XHQubmFtZSA9IERSVl9OQU1FLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSBzMjUwMF9vZl9tYXRjaCxcbitcdH0sXG4rXHQucHJvYmUgPSBzMjUwMF9wcm9iZSxcbitcdC5yZW1vdmUgPSBzMjUwMF9yZW1vdmUsXG4rXHQuaWRfdGFibGUgPSBzMjUwMF9pZHMsXG4rfTtcbittb2R1bGVfc3BpX2RyaXZlcihzMjUwMF9kcml2ZXIpO1xuK1xuK01PRFVMRV9BVVRIT1IoXCJQaWVyZ2lvcmdpbyBCZXJ1dG8gXHUwMDNjcGllci5iZXJ1dG9Ab25zZW1pLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfQVVUSE9SKFwiU2VsdmEgUmFqYWdvcGFsIFx1MDAzY3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJvbnNlbWkgTUFDUEhZIGV0aGVybmV0IGRyaXZlclwiKTtcbitNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfcHRwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9vbnNlbWkvczI1MDAvczI1MDBfcHRwLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uN2RhNjYwY2I1YjE5MGFcbi0tLSAvZGV2L251bGxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L29uc2VtaS9zMjUwMC9zMjUwMF9wdHAuY1xuQEAgLTAsMCArMSwyNTAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogQ29weXJpZ2h0IDIwMjYgU2VtaWNvbmR1Y3RvciBDb21wb25lbnRzIEluZHVzdHJpZXMsIExMQyAoXCJvbnNlbWlcIikuXG4rICogb25zZW1pJ3MgUzI1MDAgMTBCQVNFLVQxUyBNQUMtUEhZIGRyaXZlclxuKyAqL1xuK1xuKyNpbmNsdWRlIFwiczI1MDBfaHdfZGVmLmhcIlxuK1xuK3N0YXRpYyBpbnQgczI1MDBfcHRwX2dldF90aW1lNjQoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsXG4rXHRcdFx0XHRzdHJ1Y3QgdGltZXNwZWM2NCAqdHMsXG4rXHRcdFx0XHRzdHJ1Y3QgcHRwX3N5c3RlbV90aW1lc3RhbXAgKnB0cF9zdHMpXG4re1xuK1x0c3RydWN0IHMyNTAwX2luZm8gKnByaXYgPSBjb250YWluZXJfb2YocHRwLCBzdHJ1Y3QgczI1MDBfaW5mbyxcbitcdFx0XHRcdFx0ICAgICAgIHB0cF9jbG9ja19pbmZvKTtcbitcdHUzMiBkYXRhWzJdO1xuK1x0aW50IHJldDtcbitcbitcdHB0cF9yZWFkX3N5c3RlbV9wcmV0cyhwdHBfc3RzKTtcbitcdHJldCA9IG9hX3RjNl9yZWFkX3JlZ2lzdGVyc19tbXMocHJpdi1cdTAwM2V0YzYsXG4rXHRcdFx0XHRcdFMyNTAwX1JFR19WU19QVFBfU0VDLFxuK1x0XHRcdFx0XHRPQV9UQzZfUEhZX0M0NV9WU19NTVMxMixcbitcdFx0XHRcdFx0XHUwMDI2ZGF0YVswXSwgMik7XG4rXHRwdHBfcmVhZF9zeXN0ZW1fcG9zdHRzKHB0cF9zdHMpO1xuK1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0dHMtXHUwMDNldHZfc2VjID0gZGF0YVswXTtcbitcdFx0dHMtXHUwMDNldHZfbnNlYyA9IGRhdGFbMV07XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IHMyNTAwX3B0cF9zZXRfdGltZTY0KHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IHRpbWVzcGVjNjQgKnRzKVxuK3tcbitcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHMyNTAwX2luZm8sXG4rXHRcdFx0XHRcdCAgICAgICBwdHBfY2xvY2tfaW5mbyk7XG4rXHR1MzIgZGF0YVsyXTtcbitcbitcdGlmICh0cy1cdTAwM2V0dl9zZWMgXHUwMDNlPSAoMVVMTCBcdTAwM2NcdTAwM2MgMzIpKVxuK1x0XHRyZXR1cm4gLUVSQU5HRTtcbitcbitcdGRhdGFbMF0gPSAodTMyKXRzLVx1MDAzZXR2X3NlYztcbitcdC8qIGJpdCAzMSA9IGV4ZWN1dGUgc2V0IGNvbW1hbmQgKi9cbitcdGRhdGFbMV0gPSB0cy1cdTAwM2V0dl9uc2VjIHwgQklUKDMxKTtcbitcbitcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJzX21tcyhwcml2LVx1MDAzZXRjNixcbitcdFx0XHRcdFx0ICBTMjUwMF9SRUdfVlNfUFRQX1NFVFNFQyxcbitcdFx0XHRcdFx0ICBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMixcbitcdFx0XHRcdFx0ICBcdTAwMjZkYXRhWzBdLCAyKTtcbit9XG4rXG4rc3RhdGljIGludCBzMjUwMF9wdHBfYWRqZmluZShzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKnB0cCwgbG9uZyBzY2FsZWRfcHBtKVxuK3tcbitcdHN0cnVjdCBzMjUwMF9pbmZvICpwcml2ID0gY29udGFpbmVyX29mKHB0cCwgc3RydWN0IHMyNTAwX2luZm8sXG4rXHRcdFx0XHRcdCAgICAgICBwdHBfY2xvY2tfaW5mbyk7XG4rXHR1MzIgc2lnbl9iaXQgPSAwO1xuK1x0bG9uZyBhZGo7XG4rXHR1MzIgdmFsO1xuK1x0dTY0IHBwbTtcbitcbitcdGlmIChzY2FsZWRfcHBtIFx1MDAzYyAwKSB7XG4rXHRcdC8qIHNwbGl0IHNpZ24gLyBtb2QgKi9cbitcdFx0c2lnbl9iaXQgPSAxVSBcdTAwM2NcdTAwM2MgMzE7XG4rXHRcdHNjYWxlZF9wcG0gPSB+c2NhbGVkX3BwbSArIDE7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogQ29udmVydCB1bnNpZ25lZCBzY2FsZWRfcHBtIHRvIGF0dG8tc2Vjb25kcyBwZXIgY2xvY2sgY3ljbGVzLlxuK1x0ICogVGhlIHNjYWxlZF9wcG0gZm9ybWF0IGlzIFF4LjE2IC0tXHUwMDNlIDEgbHNiID0gMS82NTUzNiBwcG0uXG4rXHQgKiBUaGUgY2xvY2sgcGVyaW9kIG9mIHRoZSBTMjUwMCBpcyA4bnMgKDEyNSBNSHopLCBzbyAxIGxzYiBvZlxuK1x0ICogYWRqIHJlZ2lzdGVyIExTQiBpcyAxIGF0dG8tc2VjIC8gOG5zID0gMC4wMDAxMjUgcHBtLlxuK1x0ICogUmVwcmVzZW50ZWQgaW4gUXguMTYgZm9ybWF0LCB0aGlzIGlzIDAuMDAwMTI1ICogMl4xNiA9IDgoLjE5MilcbitcdCAqIFRvIGNvbnZlcnQgc2NhbGVkX3BwbSBpbnRvIGEgcmVnaXN0ZXIgdmFsdWUgd2UgbmVlZCB0byBkaXZpZGVcbitcdCAqIGl0IGJ5IHRoZSBMU0IgdmFsdWUsIGhlbmNlIGFkaiA9IChzY2FsZWRfcHBtICogMTAwMCkgLyA4MTkyIHRvXG4rXHQgKiBtaW5pbWl6ZSB0aGUgcHJlY2lzaW9uIGxvc3MgZHVlIHRvIHRoZSBpbnRlZ2VyIGFyaXRobWV0aWMuXG4rXHQgKiBUaGF0IGZ1cnRoZXIgcmVkdWNlcyB0byAoc2NhbGVkX3BwbSAqIDEyNSkgLyAxMDI0LlxuK1x0ICovXG4rXHRwcG0gPSAodTY0KXNjYWxlZF9wcG0gKiAxMjU7XG4rXHRkb19kaXYocHBtLCAxMDI0KTtcbitcdGFkaiA9IChsb25nKXBwbTtcbitcbitcdC8qIGNoZWNrIG92ZXJmbG93ICovXG4rXHRpZiAoYWRqIFx1MDAzZT0gKDFMIFx1MDAzY1x1MDAzYyAyOCkpXG4rXHRcdHJldHVybiAtRVJBTkdFO1xuK1xuK1x0dmFsID0gKHUzMilhZGogfCBzaWduX2JpdDtcbitcdHJldHVybiBvYV90YzZfd3JpdGVfcmVnaXN0ZXJfbW1zKHByaXYtXHUwMDNldGM2LCBTMjUwMF9SRUdfVlNfUFRQX0FESixcbitcdFx0XHRcdFx0IE9BX1RDNl9QSFlfQzQ1X1ZTX01NUzEyLCB2YWwpO1xuK31cbitcbitzdGF0aWMgaW50IHMyNTAwX3VzZV9zZXR0aW1lKHN0cnVjdCBwdHBfY2xvY2tfaW5mbyAqcHRwLFxuK1x0XHRcdCAgICAgc3RydWN0IHRpbWVzcGVjNjQgbm93LCBzNjQgcmVtKVxuK3tcbitcdHN0cnVjdCBwdHBfc3lzdGVtX3RpbWVzdGFtcCBzdHM7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCBkZWx0YV90cztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRhcmdldDtcbitcdGludCByZXQ7XG4rXG4rXHRtZW1zZXQoXHUwMDI2c3RzLCAwLCBzaXplb2Yoc3RzKSk7XG4rXHRyZXQgPSBwdHAtXHUwMDNlZ2V0dGltZXg2NChwdHAsIFx1MDAyNm5vdywgXHUwMDI2c3RzKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmVtIFx1MDAzZT0gMCkge1xuK1x0XHRkZWx0YV90cyA9IG5zX3RvX3RpbWVzcGVjNjQocmVtKTtcbitcdFx0dGFyZ2V0ID0gdGltZXNwZWM2NF9hZGQobm93LCBkZWx0YV90cyk7XG4rXHR9IGVsc2Uge1xuK1x0XHRkZWx0YV90cyA9IG5zX3RvX3RpbWVzcGVjNjQoLXJlbSk7XG4rXHRcdHRhcmdldCA9IHRpbWVzcGVjNjRfc3ViKG5vdywgZGVsdGFfdHMpO1xuK1x0fVxuK1x0aWYgKHRhcmdldC50dl9zZWMgXHUwMDNjIDAgfHxcbitcdCAgICB0YXJnZXQudHZfc2VjIFx1MDAzZT0gKDFVTEwgXHUwMDNjXHUwMDNjIDMyKSlcbitcdFx0cmV0dXJuIC1FUkFOR0U7XG4rXHRyZXR1cm4gcHRwLVx1MDAzZXNldHRpbWU2NChwdHAsIFx1MDAyNnRhcmdldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgczI1MDBfcHRwX2FkanRpbWUoc3RydWN0IHB0cF9jbG9ja19pbmZvICpwdHAsIHM2NCBkZWx0YSlcbit7XG4rXHRzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdiA9IGNvbnRhaW5lcl9vZihwdHAsIHN0cnVjdCBzMjUwMF9pbmZvLFxuK1x0XHRcdFx0XHQgICAgICAgcHRwX2Nsb2NrX2luZm8pO1xuK1x0c3RydWN0IHB0cF9zeXN0ZW1fdGltZXN0YW1wIHN0cztcbitcdHN0cnVjdCB0aW1lc3BlYzY0IHRhcmdldDtcbitcdHVuc2lnbmVkIGludCBwZXJpb2RfbXM7XG4rXHRzdHJ1Y3QgdGltZXNwZWM2NCBub3c7XG4rXHRzNjQgc2NhbGVkX3BwbSwgcmVtO1xuK1x0aW50IG1heF9pdGVycyA9IDM7XG4rXHRzNjQgdGFyZ2V0X25zO1xuK1x0aW50IHJldCA9IDA7XG4rXHRzNjQgbm93X25zO1xuK1x0czY0IG51bTtcbitcdHM2NCBkZW47XG4rXG4rXHRpZiAoIXB0cClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBOb3RoaW5nIHRvIGRvICovXG4rXHRpZiAoZGVsdGEgPT0gMClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKFx1MDAyNnByaXYtXHUwMDNlcHRwX2Fkal9sb2NrKSlcbitcdFx0cmV0dXJuIC1FSU5UUjtcbitcbitcdC8qIFRyeSB0byBzbGV3IHRoZSBjbG9jayB1c2luZyBhZGpmaW5lIGZvciBiZXR0ZXIgYWNjdXJhY3kuXG4rXHQgKiBGb3IgbGFyZ2UgYWRqdXN0bWVudHMgZmFsbCBiYWNrIHRvIHNldHRpbmcgdGltZSBkaXJlY3RseS5cbitcdCAqL1xuK1x0cmVtID0gZGVsdGE7XG4rXG4rXHR3aGlsZSAocmVtICE9IDAgXHUwMDI2XHUwMDI2IG1heF9pdGVycy0tKSB7XG4rXHRcdHM2NCBhYnNfZGVsdGEgPSByZW0gXHUwMDNlIDAgPyByZW0gOiAtcmVtO1xuK1xuK1x0XHQvKiBJZiB0aGUgYWRqdXN0bWVudCBpcyB2ZXJ5IGxhcmdlLCBtb3JlIHRoYW4gMSBzZWNvbmQsXG4rXHRcdCAqIHVzZSBzZXR0aW1lIHRvIGF2b2lkIHZlcnkgbG9uZyBzbGV3aW5nIHBlcmlvZHMgb3JcbitcdFx0ICogZXhjZXNzaXZlIGZyZXF1ZW5jeSBvZmZzZXRzLlxuK1x0XHQgKi9cbitcdFx0aWYgKGFic19kZWx0YSBcdTAwM2UgMTAwMDAwMDAwMExMKSB7XG4rXHRcdFx0cmV0ID0gczI1MDBfdXNlX3NldHRpbWUocHRwLCBub3csIHJlbSk7XG4rXHRcdFx0cmVtID0gMDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHQvKiBDaG9vc2UgYSBzbGV3aW5nIHBlcmlvZCBkZXBlbmRpbmcgb24gbWFnbml0dWRlICovXG4rXHRcdGlmIChhYnNfZGVsdGEgXHUwMDNjPSAxMDAwMDAwTEwpIC8qIFx1MDAzYz0gMW1zICovXG4rXHRcdFx0cGVyaW9kX21zID0gMTAwMDsgLyogMSBzICovXG4rXHRcdGVsc2UgaWYgKGFic19kZWx0YSBcdTAwM2M9IDEwMDAwMDAwMExMKSAvKiBcdTAwM2M9IDEwMG1zICovXG4rXHRcdFx0cGVyaW9kX21zID0gMTAwMDA7IC8qIDEwIHMgKi9cbitcdFx0ZWxzZVxuK1x0XHRcdHBlcmlvZF9tcyA9IDYwMDAwOyAvKiA2MCBzICovXG4rXG4rXHRcdC8qIENvbXB1dGUgY3VycmVudCB0aW1lIGFuZCBmaXhlZCB0YXJnZXQgZm9yIHRoaXNcbitcdFx0ICogaXRlcmF0aW9uXG4rXHRcdCAqL1xuK1x0XHRtZW1zZXQoXHUwMDI2c3RzLCAwLCBzaXplb2Yoc3RzKSk7XG4rXHRcdHJldCA9IHB0cC1cdTAwM2VnZXR0aW1leDY0KHB0cCwgXHUwMDI2bm93LCBcdTAwMjZzdHMpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHRpZiAocmVtIFx1MDAzZT0gMClcbitcdFx0XHR0YXJnZXQgPSB0aW1lc3BlYzY0X2FkZChub3csXG4rXHRcdFx0XHRcdFx0bnNfdG9fdGltZXNwZWM2NChyZW0pKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHRhcmdldCA9IHRpbWVzcGVjNjRfc3ViKG5vdyxcbitcdFx0XHRcdFx0XHRuc190b190aW1lc3BlYzY0KC1yZW0pKTtcbitcbitcdFx0LyogQ29tcHV0ZSBzY2FsZWRfcHBtIChReC4xNikuIHNjYWxlZF9wcG0gPSBwcG0gKiAyXjE2XG4rXHRcdCAqIHBwbSA9IChkZWx0YV9zZWNvbmRzIC8gcGVyaW9kX3NlY29uZHMpICogMWU2XG4rXHRcdCAqID1cdTAwM2Ugc2NhbGVkX3BwbSA9IGRlbHRhX25zICogNjU1MzYgLyAocGVyaW9kX21zICogMTAwMClcbitcdFx0ICovXG4rXHRcdG51bSA9IHJlbSAqIDY1NTM2TEw7XG4rXHRcdGRlbiA9IChzNjQpcGVyaW9kX21zICogMTAwMExMO1xuK1xuK1x0XHQvKiBJbnRlZ2VyIGRpdmlzaW9uIHJvdW5kcyB0b3dhcmQgemVybzsga2VlcCBzaWduIGluXG4rXHRcdCAqIG51bWVyYXRvclxuK1x0XHQgKi9cbitcdFx0c2NhbGVkX3BwbSA9IGRpdl9zNjQobnVtLCBkZW4pO1xuK1xuK1x0XHQvKiBBcHBseSBmcmVxdWVuY3kgYWRqdXN0bWVudCAqL1xuK1x0XHRyZXQgPSBwdHAtXHUwMDNlYWRqZmluZShwdHAsIChsb25nKXNjYWxlZF9wcG0pO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGJyZWFrO1xuK1xuK1x0XHQvKiBTbGVlcCBmb3IgdGhlIHNsZXcgcGVyaW9kIChpbnRlcnJ1cHRpYmxlKS4gSWZcbitcdFx0ICogaW50ZXJydXB0ZWQsIGNsZWFyIHRoZSBhZGpmaW5lIGFuZCByZXR1cm4gLUVJTlRSLlxuK1x0XHQgKi9cbitcdFx0aWYgKG1zbGVlcF9pbnRlcnJ1cHRpYmxlKHBlcmlvZF9tcykpIHtcbitcdFx0XHQvKiBDbGVhciBhZGpmaW5lICovXG4rXHRcdFx0cHRwLVx1MDAzZWFkamZpbmUocHRwLCAwKTtcbitcdFx0XHRyZXQgPSAtRUlOVFI7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcbitcdFx0LyogQ2xlYXIgYWRqZmluZSBhbmQgbWVhc3VyZSByZW1haW5pbmcgb2Zmc2V0ICovXG4rXHRcdHB0cC1cdTAwM2VhZGpmaW5lKHB0cCwgMCk7XG4rXG4rXHRcdG1lbXNldChcdTAwMjZzdHMsIDAsIHNpemVvZihzdHMpKTtcbitcdFx0cmV0ID0gcHRwLVx1MDAzZWdldHRpbWV4NjQocHRwLCBcdTAwMjZub3csIFx1MDAyNnN0cyk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0YnJlYWs7XG4rXG4rXHRcdC8qIHJlbWFpbmluZyA9IHRhcmdldCAtIG5vdyAoaW4gbnMpICovXG4rXHRcdHRhcmdldF9ucyA9IHRpbWVzcGVjNjRfdG9fbnMoXHUwMDI2dGFyZ2V0KTtcbitcdFx0bm93X25zID0gdGltZXNwZWM2NF90b19ucyhcdTAwMjZub3cpO1xuK1x0XHRyZW0gPSB0YXJnZXRfbnMgLSBub3dfbnM7XG4rXG4rXHRcdC8qIElmIHJlbWFpbmluZyBpcyBzbWFsbCAoXHUwMDNjIDF1cyksIGZpbmlzaCAqL1xuK1x0XHRpZiAocmVtIFx1MDAzZSAtMTAwMCBcdTAwMjZcdTAwMjYgcmVtIFx1MDAzYyAxMDAwKVxuK1x0XHRcdHJlbSA9IDA7XG4rXHR9XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VwdHBfYWRqX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IHMyNTAwX3B0cF9yZWdpc3RlcihzdHJ1Y3QgczI1MDBfaW5mbyAqcHJpdilcbit7XG4rXHRzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8gPSBcdTAwMjZwcml2LVx1MDAzZXB0cF9jbG9ja19pbmZvO1xuK1x0aW50IHJldDtcbitcbitcdGluZm8tXHUwMDNlbWF4X2FkaiA9IDEwMDAwMDAwMDtcbitcdGluZm8tXHUwMDNlb3duZXIgPSBUSElTX01PRFVMRTtcbitcdGluZm8tXHUwMDNlYWRqZmluZSA9IHMyNTAwX3B0cF9hZGpmaW5lO1xuK1x0aW5mby1cdTAwM2VnZXR0aW1leDY0ID0gczI1MDBfcHRwX2dldF90aW1lNjQ7XG4rXHRpbmZvLVx1MDAzZXNldHRpbWU2NCA9IHMyNTAwX3B0cF9zZXRfdGltZTY0O1xuK1x0aW5mby1cdTAwM2VhZGp0aW1lID0gczI1MDBfcHRwX2FkanRpbWU7XG4rXG4rXHRyZXQgPSBvYV90YzZfcHRwX3JlZ2lzdGVyKHByaXYtXHUwMDNldGM2LCBpbmZvKTtcbitcdGlmIChyZXQpXG4rXHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VzcGktXHUwMDNlZGV2LCBcIlBUUCByZWdpc3RyYXRpb24gZmFpbGVkXCIpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L2RwODM4NjcuYyBiL2RyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmNcbmluZGV4IDg4MjU1ZTkyYjRjZGJkLi4wMWVhMmU4ZGQyNTNiYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9kcDgzODY3LmNcbkBAIC05OTEsMTUgKzk5MSw2IEBAIHN0YXRpYyB2b2lkIGRwODM4NjdfbGlua19jaGFuZ2Vfbm90aWZ5KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbnQgZHA4Mzg2N19sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKVxuLXtcbi1cdGlmIChlbmFibGUgXHUwMDI2XHUwMDI2IHNwZWVkKVxuLVx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tXG4tXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLFxuLVx0XHRcdCAgZW5hYmxlID8gQk1DUl9MT09QQkFDSyA6IDApO1xuLX1cbi1cbiBzdGF0aWMgaW50XG4gZHA4Mzg2N19sZWRfYnJpZ2h0bmVzc19zZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiBcdFx0XHQgICB1OCBpbmRleCwgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKVxuQEAgLTEyMDQsNyArMTE5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBkcDgzODY3X2RyaXZlcltdID0ge1xuIFx0XHQucmVzdW1lXHRcdD0gZHA4Mzg2N19yZXN1bWUsXG4gXG4gXHRcdC5saW5rX2NoYW5nZV9ub3RpZnkgPSBkcDgzODY3X2xpbmtfY2hhbmdlX25vdGlmeSxcbi1cdFx0LnNldF9sb29wYmFja1x0PSBkcDgzODY3X2xvb3BiYWNrLFxuK1x0XHQuc2V0X2xvb3BiYWNrXHQ9IGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZCxcbiBcbiBcdFx0LmxlZF9icmlnaHRuZXNzX3NldCA9IGRwODM4NjdfbGVkX2JyaWdodG5lc3Nfc2V0LFxuIFx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IGRwODM4NjdfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbWljcm9jaGlwX3Qxcy5jIGIvZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuY1xuaW5kZXggZTYwMWQ1NmIyNTA3ZjkuLjBjNGRjNzA2NDFkOGIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L21pY3JvY2hpcF90MXMuY1xuQEAgLTUwNiwzNCArNTA2LDYgQEAgc3RhdGljIGludCBsYW44Nnh4X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLyogT1BFTiBBbGxpYW5jZSAxMEJBU0UtVDF4IGNvbXBsaWFuY2UgTUFDLVBIWXMgd2lsbCBoYXZlIGJvdGggQzIyIGFuZFxuLSAqIEM0NSByZWdpc3RlcnMgc3BhY2UuIElmIHRoZSBQSFkgaXMgZGlzY292ZXJlZCB2aWEgQzIyIGJ1cyBwcm90b2NvbCBpdCBhc3N1bWVzXG4tICogaXQgdXNlcyBDMjIgcHJvdG9jb2wgYW5kIGFsd2F5cyB1c2VzIEMyMiByZWdpc3RlcnMgaW5kaXJlY3QgYWNjZXNzIHRvIGFjY2Vzc1xuLSAqIEM0NSByZWdpc3RlcnMuIFRoaXMgaXMgYmVjYXVzZSwgd2UgZG9uJ3QgaGF2ZSBhIGNsZWFuIHNlcGFyYXRpb24gYmV0d2VlblxuLSAqIEMyMi9DNDUgcmVnaXN0ZXIgc3BhY2UgYW5kIEMyMi9DNDUgTURJTyBidXMgcHJvdG9jb2xzLiBSZXN1bHRpbmcsIFBIWSBDNDVcbi0gKiByZWdpc3RlcnMgZGlyZWN0IGFjY2VzcyBjYW4ndCBiZSB1c2VkIHdoaWNoIGNhbiBzYXZlIG11bHRpcGxlIFNQSSBidXMgYWNjZXNzLlxuLSAqIFRvIHN1cHBvcnQgdGhpcyBmZWF0dXJlLCBzZXQgLnJlYWRfbW1kLy53cml0ZV9tbWQgaW4gdGhlIFBIWSBkcml2ZXIgdG8gY2FsbFxuLSAqIC5yZWFkX2M0NS8ud3JpdGVfYzQ1IGluIHRoZSBPUEVOIEFsbGlhbmNlIGZyYW1ld29ya1xuLSAqIGRyaXZlcnMvbmV0L2V0aGVybmV0L29hX3RjNi5jXG4tICovXG4tc3RhdGljIGludCBsYW44NjV4X3BoeV9yZWFkX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgZGV2bnVtLFxuLVx0XHRcdFx0dTE2IHJlZ251bSlcbi17XG4tXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuLVx0aW50IGFkZHIgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyO1xuLVxuLVx0cmV0dXJuIF9fbWRpb2J1c19jNDVfcmVhZChidXMsIGFkZHIsIGRldm51bSwgcmVnbnVtKTtcbi19XG4tXG4tc3RhdGljIGludCBsYW44NjV4X3BoeV93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSxcbi1cdFx0XHRcdCB1MTYgcmVnbnVtLCB1MTYgdmFsKVxuLXtcbi1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4tXHRpbnQgYWRkciA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG4tXG4tXHRyZXR1cm4gX19tZGlvYnVzX2M0NV93cml0ZShidXMsIGFkZHIsIGRldm51bSwgcmVnbnVtLCB2YWwpO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbWljcm9jaGlwX3Qxc19kcml2ZXJbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9MQU44NjdYX1JFVkIxKSxcbkBAIC01ODQsOCArNTU2LDggQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1pY3JvY2hpcF90MXNfZHJpdmVyW10gPSB7XG4gXHRcdC5mZWF0dXJlcyAgICAgICAgICAgPSBQSFlfQkFTSUNfVDFTX1AyTVBfRkVBVFVSRVMsXG4gXHRcdC5jb25maWdfaW5pdCAgICAgICAgPSBsYW44NjV4X3JldmJfY29uZmlnX2luaXQsXG4gXHRcdC5yZWFkX3N0YXR1cyAgICAgICAgPSBsYW44Nnh4X3JlYWRfc3RhdHVzLFxuLVx0XHQucmVhZF9tbWQgICAgICAgICAgID0gbGFuODY1eF9waHlfcmVhZF9tbWQsXG4tXHRcdC53cml0ZV9tbWQgICAgICAgICAgPSBsYW44NjV4X3BoeV93cml0ZV9tbWQsXG4rXHRcdC5yZWFkX21tZCAgICAgICAgICAgPSBnZW5waHlfcGh5X3JlYWRfbW1kLFxuK1x0XHQud3JpdGVfbW1kICAgICAgICAgID0gZ2VucGh5X3BoeV93cml0ZV9tbWQsXG4gXHRcdC5nZXRfcGxjYV9jZmdcdCAgICA9IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnLFxuIFx0XHQuc2V0X3BsY2FfY2ZnXHQgICAgPSBsYW44Nnh4X3BsY2Ffc2V0X2NmZyxcbiBcdFx0LmdldF9wbGNhX3N0YXR1cyAgICA9IGdlbnBoeV9jNDVfcGxjYV9nZXRfc3RhdHVzLFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jIGIvZHJpdmVycy9uZXQvcGh5L25jbjI2MDAwLmNcbmluZGV4IGNhYmRkODNjNjE0ZjBkLi5hZmFmYTgxZGMyMmI4MiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9uY24yNjAwMC5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbmNuMjYwMDAuY1xuQEAgLTIsNyArMiw3IEBAXG4gLypcbiAgKiAgRHJpdmVyIGZvciB0aGUgb25zZW1pIDEwQkFTRS1UMVMgTkNOMjYwMDAgUEhZcyBmYW1pbHkuXG4gICpcbi0gKiBDb3B5cmlnaHQgMjAyMiBvbnNlbWlcbisgKiBDb3B5cmlnaHQgMjAyNiBvbnNlbWlcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbkBAIC0xNCw2ICsxNCw3IEBAXG4gXG4gI2luY2x1ZGUgXCJtZGlvLW9wZW4tYWxsaWFuY2UuaFwiXG4gXG4rI2RlZmluZSBQSFlfSURfUzI1MDBcdFx0XHQweDE4MEZGNDExXG4gI2RlZmluZSBQSFlfSURfTkNOMjYwMDBcdFx0XHQweDE4MEZGNUExXG4gXG4gI2RlZmluZSBOQ04yNjAwMF9SRUdfSVJRX0NUTCAgICAgICAgICAgIDE2XG5AQCAtMzUsMTUgKzM2LDI0IEBAXG4gXG4gI2RlZmluZSBUT19UTVJfREVGQVVMVFx0XHRcdDMyXG4gXG4rI2RlZmluZSBOQ04yNjAwMF9SRUdfUEhZQ0ZHMVx0XHQweDgwMDFcbisjZGVmaW5lIE5DTjI2MDAwX1BIWUNGRzFfRU5JXHRcdEJJVCg3KVxuKyNkZWZpbmUgTkNOMjYwMDBfUEhZQ0ZHMV9FTklfTUFTS1x0QklUKDcpXG4rXG4gc3RhdGljIGludCBuY24yNjAwMF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbitcdGludCByZXQgPSAwO1xuK1xuIFx0LyogSFcgYnVnIHdvcmthcm91bmQ6IHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBQTENBIFRPX1RJTUVSIHNob3VsZCBiZVxuIFx0ICogMzIsIHdoZXJlIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgTkNOMjYwMDAgcmVwb3J0cyAyNC4gVGhpcyB3aWxsIGJlXG4gXHQgKiBmaXhlZCBpbiBmdXR1cmUgUEhZIHZlcnNpb25zLiBGb3IgdGhlIHRpbWUgYmVpbmcsIHdlIGZvcmNlIHRoZVxuIFx0ICogY29ycmVjdCBkZWZhdWx0IGhlcmUuXG4gXHQgKi9cbi1cdHJldHVybiBwaHlfd3JpdGVfbW1kKHBoeWRldiwgTURJT19NTURfVkVORDIsIE1ESU9fT0FUQzE0X1BMQ0FfVE9UTVIsXG4tXHRcdFx0ICAgICBUT19UTVJfREVGQVVMVCk7XG4rXHRpZiAocGh5X2lkX2NvbXBhcmVfbW9kZWwocGh5ZGV2LVx1MDAzZWRydi1cdTAwM2VwaHlfaWQsIFBIWV9JRF9OQ04yNjAwMCkpXG4rXHRcdHJldCA9IHBoeV93cml0ZV9tbWQocGh5ZGV2LCBNRElPX01NRF9WRU5EMixcbitcdFx0XHRcdCAgICBNRElPX09BVEMxNF9QTENBX1RPVE1SLFxuK1x0XHRcdFx0ICAgIFRPX1RNUl9ERUZBVUxUKTtcbitcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgbmNuMjYwMDBfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbkBAIC0xMDAsNiArMTEwLDI0IEBAIHN0YXRpYyBpbnQgbmNuMjYwMDBfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKiBJbnRlcmNlcHQgUExDQSBlbmFibGUvZGlzYWJsZSByZXF1ZXN0IHRvXG4rICogc2V0IHRoZSBwcm9wcmlldGFyeSwgRU5JIG1vZGUgYWNjb3JkaW5nbHlcbisgKi9cbitzdGF0aWMgaW50IG5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpXG4re1xuK1x0aW50IHJldCA9IGdlbnBoeV9jNDVfcGxjYV9zZXRfY2ZnKHBoeWRldiwgcGxjYV9jZmcpO1xuK1x0dTE2IGVuaV9jZmcgPSAwO1xuK1xuK1x0aWYgKHJldCB8fCBwbGNhX2NmZy1cdTAwM2VlbmFibGVkIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0ZW5pX2NmZyA9IChwbGNhX2NmZy1cdTAwM2VlbmFibGVkKSA/IE5DTjI2MDAwX1BIWUNGRzFfRU5JIDogMDtcbitcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1ZFTkQyLFxuK1x0XHRcdCAgICAgIE5DTjI2MDAwX1JFR19QSFlDRkcxLFxuK1x0XHRcdCAgICAgIE5DTjI2MDAwX1BIWUNGRzFfRU5JX01BU0ssIGVuaV9jZmcpO1xuK31cbitcbiBzdGF0aWMgaXJxcmV0dXJuX3QgbmNuMjYwMDBfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiBcdGludCByZXQ7XG5AQCAtMTE3LDggKzE0NSw4IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBuY24yNjAwMF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXG4gc3RhdGljIGludCBuY24yNjAwMF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbi1cdGludCByZXQ7XG4gXHR1MTYgaXJxZTtcbitcdGludCByZXQ7XG4gXG4gXHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4gXHRcdC8vIGFja25vd2xlZGdlIElSUXNcbkBAIC0xNDEsNiArMTY5LDI3IEBAIHN0YXRpYyBpbnQgbmNuMjYwMDBfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG5jbjI2MDAwX2RyaXZlcltdID0ge1xuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfTU9ERUwoUEhZX0lEX1MyNTAwKSxcbitcdFx0Lm5hbWUgICAgICAgICAgICAgICAgICA9IFwiUzI1MDBcIixcbitcdFx0LmZlYXR1cmVzICAgICAgICAgICAgICA9IFBIWV9CQVNJQ19UMVNfUDJNUF9GRUFUVVJFUyxcbitcdFx0LmNvbmZpZ19pbml0ICAgICAgICAgICA9IG5jbjI2MDAwX2NvbmZpZ19pbml0LFxuK1x0XHQuY29uZmlnX2ludHIgICAgICAgICAgID0gbmNuMjYwMDBfY29uZmlnX2ludHIsXG4rXHRcdC5jb25maWdfYW5lZyAgICAgICAgICAgPSBuY24yNjAwMF9jb25maWdfYW5lZyxcbitcdFx0LnJlYWRfc3RhdHVzICAgICAgICAgICA9IG5jbjI2MDAwX3JlYWRfc3RhdHVzLFxuK1x0XHQuaGFuZGxlX2ludGVycnVwdCAgICAgID0gbmNuMjYwMDBfaGFuZGxlX2ludGVycnVwdCxcbitcdFx0LnNldF9sb29wYmFjayAgICAgICAgICA9IGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZCxcbitcdFx0LnNldF9wbGNhX2NmZyAgICAgICAgICA9IG5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmcsXG4rXHRcdC5nZXRfcGxjYV9jZmcgICAgICAgICAgPSBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyxcbitcdFx0LmdldF9wbGNhX3N0YXR1cyAgICAgICA9IGdlbnBoeV9jNDVfcGxjYV9nZXRfc3RhdHVzLFxuK1x0XHQuc29mdF9yZXNldCAgICAgICAgICAgID0gZ2VucGh5X3NvZnRfcmVzZXQsXG4rXHRcdC5nZXRfc3FpICAgICAgICAgICAgICAgPSBnZW5waHlfYzQ1X29hdGMxNF9nZXRfc3FpLFxuK1x0XHQuZ2V0X3NxaV9tYXggICAgICAgICAgID0gZ2VucGh5X2M0NV9vYXRjMTRfZ2V0X3NxaV9tYXgsXG4rXHRcdC5yZWFkX21tZCAgICAgICAgICAgICAgPSBnZW5waHlfcGh5X3JlYWRfbW1kLFxuK1x0XHQud3JpdGVfbW1kICAgICAgICAgICAgID0gZ2VucGh5X3BoeV93cml0ZV9tbWQsXG4rXHRcdC5jYWJsZV90ZXN0X2dldF9zdGF0dXMgPSBnZW5waHlfYzQ1X29hdGMxNF9jYWJsZV90ZXN0X2dldF9zdGF0dXMsXG4rXHRcdC5jYWJsZV90ZXN0X3N0YXJ0ICAgICAgPSBnZW5waHlfYzQ1X29hdGMxNF9jYWJsZV90ZXN0X3N0YXJ0LFxuK1x0fSxcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX01PREVMKFBIWV9JRF9OQ04yNjAwMCksXG4gXHRcdC5uYW1lXHRcdFx0PSBcIk5DTjI2MDAwXCIsXG5AQCAtMTUxLDcgKzIwMCw3IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBuY24yNjAwMF9kcml2ZXJbXSA9IHtcbiBcdFx0LnJlYWRfc3RhdHVzXHRcdD0gbmNuMjYwMDBfcmVhZF9zdGF0dXMsXG4gXHRcdC5oYW5kbGVfaW50ZXJydXB0ICAgICAgID0gbmNuMjYwMDBfaGFuZGxlX2ludGVycnVwdCxcbiBcdFx0LmdldF9wbGNhX2NmZ1x0XHQ9IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnLFxuLVx0XHQuc2V0X3BsY2FfY2ZnXHRcdD0gZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcsXG4rXHRcdC5zZXRfcGxjYV9jZmdcdFx0PSBuY24yNjAwMF9jNDVfcGxjYV9zZXRfY2ZnLFxuIFx0XHQuZ2V0X3BsY2Ffc3RhdHVzXHQ9IGdlbnBoeV9jNDVfcGxjYV9nZXRfc3RhdHVzLFxuIFx0XHQuc29mdF9yZXNldCAgICAgICAgICAgICA9IGdlbnBoeV9zb2Z0X3Jlc2V0LFxuIFx0fSxcbkBAIC0xNjEsMTEgKzIxMCwxMyBAQCBtb2R1bGVfcGh5X2RyaXZlcihuY24yNjAwMF9kcml2ZXIpO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbmNuMjYwMDBfdGJsW10gPSB7XG4gXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfTkNOMjYwMDApIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9NT0RFTChQSFlfSURfUzI1MDApIH0sXG4gXHR7IH1cbiB9O1xuIFxuIE1PRFVMRV9ERVZJQ0VfVEFCTEUobWRpbywgbmNuMjYwMDBfdGJsKTtcbiBcbi1NT0RVTEVfQVVUSE9SKFwiUGllcmdpb3JnaW8gQmVydXRvXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJQaWVyZ2lvcmdpbyBCZXJ1dG8gXHUwMDNjcGllci5iZXJ1dG9Ab25zZW1pLmNvbVx1MDAzZVwiKTtcbitNT0RVTEVfQVVUSE9SKFwiU2VsdmEgUmFqYWdvcGFsIFx1MDAzY3NlbHZhbWFuaS5yYWphZ29wYWxAb25zZW1pLmNvbVx1MDAzZVwiKTtcbiBNT0RVTEVfREVTQ1JJUFRJT04oXCJvbnNlbWkgMTBCQVNFLVQxUyBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9MSUNFTlNFKFwiRHVhbCBCU0QvR1BMXCIpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAwNjE1MjI4NDU5ZWY0Mi4uMTFmZDIwNGVlYTE2YTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMjc4Nyw2ICsyNzg3LDgxIEBAIGludCBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaGRldiwgaW50IGRldm51bSxcbiB9XG4gRVhQT1JUX1NZTUJPTChnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkKTtcbiBcbisvKipcbisgKiBnZW5waHlfcGh5X3JlYWRfbW1kIC0gSGVscGVyIGZvciByZWFkaW5nIGEgcmVnaXN0ZXIgd2l0aG91dCBsb2NrXG4rICogZnJvbSB0aGUgZ2l2ZW4gTU1EIGFuZCBQSFkuXG4rICogQHBoeWRldjogVGhlIHBoeV9kZXZpY2Ugc3RydWN0XG4rICogQGRldm51bTogVGhlIE1NRCB0byByZWFkIGZyb21cbisgKiBAcmVnbnVtOiBUaGUgcmVnaXN0ZXIgb24gdGhlIE1NRCB0byByZWFkXG4rICpcbisgKiBEZXNjcmlwdGlvbjogUEhZcyBjYW4gaGF2ZSBib3RoIEMyMiBhbmQgQzQ1IHJlZ2lzdGVycyBzcGFjZS4gT25jZSBQSFlcbisgKiBpcyBkaXNjb3ZlcmVkIHZpYSBDMjIgYnVzIHByb3RvY29sLCBpdCB1c2VzIEMyMiBpbmRpcmVjdCBhY2Nlc3MgdG9cbisgKiBhY2Nlc3MgQzQ1IHJlZ2lzdGVycy4gU29tZSBQSFlzLCBsaWtlIDEwQmFzZS1UMVMgUEhZcyBkZWZpbmVkIGJ5IE9QRU5cbisgKiBBbGxpYW5jZSAxMEJBU0XigJFUMXgsIHN1cHBvcnQgb25seSBkaXJlY3QgYWNjZXNzLlxuKyAqXG4rICogSWYgUEhZIGluZGljYXRlcyBDNDUgc3VwcG9ydCB0aHJvdWdoIERUUyBlbnRyeSwgaXQgYXZvaWQgQzIyIEFQSXNcbisgKiBlbnRpcmVseSBhbmQgdGhlcmVmb3JlIGdlbmVyaWMgTURJTyByZWdpc3RlcnMgYXJlIGluYWNjZXNzaWJsZS5cbisgKlxuKyAqIE1ESU8gYnVzIGlzbid0IGxvY2tlZCBoZXJlIGJlY2F1c2Ugd2hlbiBjYWxsZWQgdGhyb3VnaCByZWFkX21tZFxuKyAqIGNhbGxiYWNrIG9mIHBoeV9kcml2ZXIsIGNhbGxlciBpcyBleHBlY3RlZCB0byBsb2NrIHRoZSBidXMgYXNcbisgKiBpbXBsZW1lbnRlZCBpbiBwaHlfcmVhZF9tbWQuXG4rICpcbisgKiBSZXR1cm5zOiBSZWdpc3RlciB2YWx1ZSBpZiBzdWNjZXNzZnVsLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IGdlbnBoeV9waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSxcbitcdFx0XHR1MTYgcmVnbnVtKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4rXHRpbnQgYWRkciA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHI7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0dXJuIF9fbWRpb2J1c19jNDVfcmVhZChidXMsIGFkZHIsIGRldm51bSwgcmVnbnVtKTtcbit9XG4rRVhQT1JUX1NZTUJPTChnZW5waHlfcGh5X3JlYWRfbW1kKTtcbitcbisvKipcbisgKiBnZW5waHlfcGh5X3dyaXRlX21tZCAtIEhlbHBlciBmb3Igd3JpdGluZyBhIHJlZ2lzdGVyIHdpdGhvdXQgbG9ja1xuKyAqIHRvIHRoZSBnaXZlbiBNTUQgYW5kIFBIWS5cbisgKiBAcGh5ZGV2OiBUaGUgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAZGV2bnVtOiBUaGUgTU1EIHRvIHdyaXRlIHRvXG4rICogQHJlZ251bTogVGhlIHJlZ2lzdGVyIG9uIHRoZSBNTUQgdG8gd3JpdGVcbisgKiBAdmFsOiAgICBWYWx1ZSB0byB3cml0ZVxuKyAqXG4rICogRGVzY3JpcHRpb246IFNpbWlsYXIgdG8gZ2VucGh5X3BoeV9yZWFkX21tZFxuKyAqXG4rICogUmV0dXJuczogMCBpZiBzdWNjZXNzZnVsLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuXG4rICovXG4raW50IGdlbnBoeV9waHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBkZXZudW0sXG4rXHRcdFx0IHUxNiByZWdudW0sIHUxNiB2YWwpXG4re1xuK1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbitcdGludCBhZGRyID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcjtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXR1cm4gX19tZGlvYnVzX2M0NV93cml0ZShidXMsIGFkZHIsIGRldm51bSwgcmVnbnVtLCB2YWwpO1xuK31cbitFWFBPUlRfU1lNQk9MKGdlbnBoeV9waHlfd3JpdGVfbW1kKTtcbitcbisvKipcbisgKiBnZW5waHlfbG9vcGJhY2tfZml4ZWRfc3BlZWQgLSBIZWxwZXIgdG8gbW9kaWZ5IHRoZSBQSFkgbG9vcGJhY2sgbW9kZVxuKyAqIHdpdGhvdXQgYWZmZWN0aW5nIGFueSBvdGhlciBzZXR0aW5ncy5cbisgKiBAcGh5ZGV2OiBUaGUgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAZW5hYmxlOiBGbGFnIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBQSFkgbGV2ZWwgbG9vcGJhY2suXG4rICogQHNwZWVkOiBTcGVlZCBzZXR0aW5nLiBOb3QgZXhwZWN0ZWQgdG8gYmUgc2V0LiBFcnJvciBpZiBpdCBpcyBzZXQuXG4rICpcbisgKiBSZXR1cm5zOiAwIGlmIHN1Y2Nlc3NmdWwsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS5cbisgKi9cbitpbnQgZ2VucGh5X2xvb3BiYWNrX2ZpeGVkX3NwZWVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLFxuK1x0XHRcdFx0aW50IHNwZWVkKVxuK3tcbitcdGlmIChlbmFibGUgXHUwMDI2XHUwMDI2IHNwZWVkKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLLFxuK1x0XHRcdCAgZW5hYmxlID8gQk1DUl9MT09QQkFDSyA6IDApO1xuK31cbitFWFBPUlRfU1lNQk9MKGdlbnBoeV9sb29wYmFja19maXhlZF9zcGVlZCk7XG4rXG4gaW50IGdlbnBoeV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4ge1xuIFx0cmV0dXJuIHBoeV9zZXRfYml0cyhwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29hX3RjNi5oIGIvaW5jbHVkZS9saW51eC9vYV90YzYuaFxuaW5kZXggMTVmNThlM2M1NmM3NDAuLjE3YWMzZTA3NTFlMTIyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9vYV90YzYuaFxuKysrIGIvaW5jbHVkZS9saW51eC9vYV90YzYuaFxuQEAgLTcsOCArNywyMyBAQFxuICAqIEF1dGhvcjogUGFydGhpYmFuIFZlZXJhc29vcmFuIFx1MDAzY3BhcnRoaWJhbi52ZWVyYXNvb3JhbkBtaWNyb2NoaXAuY29tXHUwMDNlXG4gICovXG4gXG4rI2lmbmRlZiBfTElOVVhfT0FfVEM2X0hcbisjZGVmaW5lIF9MSU5VWF9PQV9UQzZfSFxuK1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V0aGVyZGV2aWNlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zcGkvc3BpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wdHBfY2xvY2tfa2VybmVsLmhcdTAwM2VcbitcbisvKiBQSFkg4oCTIENsYXVzZSA0NSByZWdpc3RlcnMgbWVtb3J5IG1hcCBzZWxlY3RvciAoTU1TKSBhcyBwZXIgdGFibGUgNiBpblxuKyAqIHRoZSBPUEVOIEFsbGlhbmNlIHNwZWNpZmljYXRpb24uXG4rICovXG4rI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9NQUNfTU1TMVx0XHRcdDFcdC8qIE5vIE1NRCAqL1xuKyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUENTX01NUzJcdFx0XHQyXHQvKiBNTUQgMyAqL1xuKyNkZWZpbmUgT0FfVEM2X1BIWV9DNDVfUE1BX1BNRF9NTVMzXHRcdDNcdC8qIE1NRCAxICovXG4rI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9WU19QTENBX01NUzRcdFx0NFx0LyogTU1EIDMxICovXG4rI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9BVVRPX05FR19NTVM1XHRcdDVcdC8qIE1NRCA3ICovXG4rI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9QT1dFUl9VTklUX01NUzZcdFx0Nlx0LyogTU1EIDEzICovXG4rI2RlZmluZSBPQV9UQzZfUEhZX0M0NV9WU19NTVMxMlx0XHRcdDEyXHQvKiBmb3IgdmVuZG9ycyAqL1xuIFxuIHN0cnVjdCBvYV90YzY7XG4gXG5AQCAtMjIsMyArMzcsMjQgQEAgaW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVycyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUzMiBhZGRyZXNzLCB1MzIgdmFsdWVbXSxcbiBcdFx0XHQgIHU4IGxlbmd0aCk7XG4gbmV0ZGV2X3R4X3Qgb2FfdGM2X3N0YXJ0X3htaXQoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgb2FfdGM2X3plcm9fYWxpZ25fcmVjZWl2ZV9mcmFtZV9lbmFibGUoc3RydWN0IG9hX3RjNiAqdGM2KTtcbitpbnQgb2FfdGM2X3dyaXRlX3JlZ2lzdGVyc19tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgYWRkcmVzcywgdTE2IG1tcyxcbitcdFx0XHQgICAgICAgdTMyIHZhbHVlW10sIHU4IGxlbmd0aCk7XG4raW50IG9hX3RjNl93cml0ZV9yZWdpc3Rlcl9tbXMoc3RydWN0IG9hX3RjNiAqdGM2LCB1MTYgYWRkcmVzcywgdTE2IG1tcyxcbitcdFx0XHQgICAgICB1MzIgdmFsdWUpO1xuK2ludCBvYV90YzZfcmVhZF9yZWdpc3RlcnNfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgdTE2IGFkZHJlc3MsIHUxNiBtbXMsXG4rXHRcdFx0ICAgICAgdTMyIHZhbHVlW10sIHU4IGxlbmd0aCk7XG4raW50IG9hX3RjNl9yZWFkX3JlZ2lzdGVyX21tcyhzdHJ1Y3Qgb2FfdGM2ICp0YzYsIHUxNiBhZGRyZXNzLCB1MTYgbW1zLFxuK1x0XHRcdCAgICAgdTMyICp2YWx1ZSk7XG4raW50IG9hX3RjNl9wdHBfcmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3QgcHRwX2Nsb2NrX2luZm8gKmluZm8pO1xuK2ludCBvYV90YzZfaW9jdGwoc3RydWN0IG9hX3RjNiAqdGM2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTtcbitpbnQgb2FfdGM2X2dldF90c19pbmZvKHN0cnVjdCBvYV90YzYgKnRjNixcbitcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF90c19pbmZvICppbmZvKTtcbit2b2lkIG9hX3RjNl9od3RzdGFtcF9nZXQoc3RydWN0IG9hX3RjNiAqdGM2LFxuK1x0XHRcdCBzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbit2b2lkIG9hX3RjNl9nZXRfdHNfc3RhdHMoc3RydWN0IG9hX3RjNiAqdGM2LFxuK1x0XHRcdCBzdHJ1Y3QgZXRodG9vbF90c19zdGF0cyAqc3RhdHMpO1xuK2ludCBvYV90YzZfaHd0c3RhbXBfc2V0KHN0cnVjdCBvYV90YzYgKnRjNixcbitcdFx0XHRzdHJ1Y3Qga2VybmVsX2h3dHN0YW1wX2NvbmZpZyAqY2ZnKTtcbit2b2lkIG9hX3RjNl9zZXRfdmVuZDFfbW1zKHN0cnVjdCBvYV90YzYgKnRjNiwgaW50IG1tcyk7XG4rdm9pZCBvYV90YzZfcHRwX3VucmVnaXN0ZXIoc3RydWN0IG9hX3RjNiAqdGM2KTtcbisjZW5kaWYgLyogX0xJTlVYX09BX1RDNl9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDE5OWE3YWFhMzQxYmZkLi42MWJjZDcxYTMxNDMyNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzAxLDYgKzIzMDEsMTIgQEAgaW50IGdlbnBoeV9yZWFkX21tZF91bnN1cHBvcnRlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGhkZXYsIGludCBkZXZhZCxcbiBcdFx0XHRcdHUxNiByZWdudW0pO1xuIGludCBnZW5waHlfd3JpdGVfbW1kX3Vuc3VwcG9ydGVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaGRldiwgaW50IGRldm51bSxcbiBcdFx0XHRcdCB1MTYgcmVnbnVtLCB1MTYgdmFsKTtcbitpbnQgZ2VucGh5X2xvb3BiYWNrX2ZpeGVkX3NwZWVkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLFxuK1x0XHRcdFx0aW50IHNwZWVkKTtcbitpbnQgZ2VucGh5X3BoeV93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSxcbitcdFx0XHQgdTE2IHJlZ251bSwgdTE2IHZhbCk7XG4raW50IGdlbnBoeV9waHlfcmVhZF9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IGRldm51bSxcbitcdFx0XHR1MTYgcmVnbnVtKTtcbiBcbiAvKiBDbGF1c2UgMzcgKi9cbiBpbnQgZ2VucGh5X2MzN19jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA5VDExOjE4OjQ1LjM1OTIxMTYxOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTQzODcxMjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IE9uc2VtaSBTMjUwMCAxMEJBU0UtVDFTIE1BQ1BIWSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIGEgbmV3IHBhdGNoIHNlcmllcyBoZXJlIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgT25zZW1pIFMyNTAwIE1BQ1BIWSBldGhlcm5ldCBjb250cm9sbGVyLiBUaGlzIGFsc28gdG91Y2hlcyB0aGUgT0EgVEM2IGZyYW1ld29yayBmb3IgaGFyZHdhcmUgdGltZXN0YW1waW5nIGFuZCBzb21lIE1NUyBmdW5jdGlvbnMuIFRoZSBjb3JlIG9mIHRoaXMgaXMgYW4gU1BJLWJhc2VkIEV0aGVybmV0IGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIHdlIGFjdHVhbGx5IGZ1enogdGhpcyBlZmZlY3RpdmVseSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50P1wiLlxuXG5GaXJzdCwgbGV0J3MgZXN0YWJsaXNoIHRoZSBjb250ZXh0LiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiBTUEksIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBxdWVzdGlvbnMgYWJvdXQgcmVhY2hhYmlsaXR5LiBTUEkgZGV2aWNlcyAqY2FuKiBiZSBpbnN0YW50aWF0ZWQgdXNpbmcgZGV2aWNlIHRyZWUgb3Igc3lzZnMsIG9yIHdpdGggdG9vbHMgbGlrZSBgc3BpLW1vY2tgIG9yIGBzcGlkZXZgLCBidXQgd2lsbCBzeXprYWxsZXIgZXZlbiBiZSBhYmxlIHRvIGdldCB0byB0aGUgZHJpdmVyIHByb2JlPyBTeXprYWxsZXIgdXN1YWxseSBmdXp6ZXMgbmV0d29yayBkZXZpY2VzIHZpYSBuZXRsaW5rIChsaWtlIHZldGgsIHR1biwgZXRjLikgb3IgYnkgdGFyZ2V0aW5nIHRoZSBTUEkgaG9zdCBjb250cm9sbGVyIGRpcmVjdGx5LiBJdCBoYXMgc29tZSBsaW1pdGVkIFNQSSBzdXBwb3J0IHZpYSBgc3BpZGV2YCwgYnV0IG5vdCBmb3IgYXJiaXRyYXJ5IGRldmljZXMgKGxpa2UgdGhpcyBvbmUpLiBJdCBtaWdodCB3b3JrIGlmIHdlIGNhbiBlYXNpbHkgaW5zdGFudGlhdGUgYW4gU1BJIGRldmljZSB1c2luZyBgc3l6X3NwaV9zZXR1cGAgb3IgYSBkZXZpY2UgdHJlZSBvdmVybGF5LCBidXQgdGhhdCdzIG5vdCBhIHN0YW5kYXJkLCBhbmQgY3VycmVudCBzeXprYWxsZXIgc3VwcG9ydCBpcyBsaW1pdGVkIHRvIHNvbWUgc2VsZWN0IFNQSSBkZXZpY2VzLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiBpczogSXMgdGhpcyBkcml2ZXIgd29ydGggZnV6emluZz8gWWVzLCBpdCdzIGEgbmV0d29yayBkcml2ZXIgYW5kIGEgUEhZIGRyaXZlciwgd2hpY2ggYXJlIGhpZ2gtdmFsdWUgdGFyZ2V0cy4gVGhpcyBhZGRzIGBTMjUwMF9NQUNQSFlgLCBtb2RpZmllcyBgT0FfVEM2YCwgYW5kIHNlbGVjdHMgYE5DTjI2MDAwX1BIWWAuIEVuYWJsaW5nIGFsbCBvZiB0aGVzZSwgYWxvbmcgd2l0aCBgTkVUX1ZFTkRPUl9PTlNFTUlgLCBpcyBjcml0aWNhbC5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgdGhlIGtleSBmdW5jdGlvbnMgYXJlOiBgczI1MDBfcHJvYmVgLCBgczI1MDBfb3BlbmAsIGBzMjUwMF9zdG9wYCwgYHMyNTAwX3NldF9tYWNfYWRkcmVzc2AsIGBzMjUwMF9zZXRfcnhfbW9kZWAsIGBzMjUwMF9pb2N0bGAsIGBzMjUwMF9od3RzdGFtcF9nZXRgLCBgczI1MDBfaHd0c3RhbXBfc2V0YCwgYHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZWAsIGBvYV90YzZfaW9jdGxgLCBhbmQgYG9hX3RjNl9od3RzdGFtcF9zZXRgLCBgb2FfdGM2X3RzdGFtcF9pb2N0bGAsIGBvYV90YzZfcHRwX3JlZ2lzdGVyYCwgcGx1cyBzb21lIFBUUCBmdW5jdGlvbnMuXG5cbkJ1dCB0aGUgcHJvYmUgaXMgd2hhdCdzIHJlYWxseSBpbXBvcnRhbnQuIENhbiB3ZSBnZXQgaXQgdG8gZmlyZT8gU3l6a2FsbGVyIGhhcyBubyBzdGFuZGFyZCB3YXkgdG8gaW5qZWN0IGFyYml0cmFyeSBTUEkgZGV2aWNlcyB1bmxlc3MgaXQncyB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzaW1pbGFyLCB3aGljaCBpcyBub3QgYW4gdXBzdHJlYW0gc3RhbmRhcmQuIFdlJ3JlIHJ1bm5pbmcgaW4gUUVNVSwgd2hpY2ggKmNvdWxkKiBzdXBwb3J0IGF0dGFjaGluZyBTUEkgZGV2aWNlcywgYnV0IGl0J3Mgbm90IGEgZGVmYXVsdCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcmVhY2hhYmxlLlxuXG5UaGUga2V5IGhlcmUgaXMgdGhhdCwgd2hpbGUgdGhpcyBpcyBhbiBTUEkgZHJpdmVyLCBpdCBtb2RpZmllcyB0aGUgYG9hX3RjNmAgbGlicmFyeS4gVGhpcyBpcyB1c2VkIGJ5IG90aGVyIFNQSSBkcml2ZXJzIGxpa2UgYGxhbjg2NXguY2AsIHRoaXMgd2lsbCBsaWtlbHkgbWFrZSBpdCB3b3J0aCBmdXp6aW5nISBJdCBhbHNvIGFkZHMgdGhlIGBOQ04yNjAwMF9QSFlgIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIHBhcnQgb2YgdGhlIFBIWSBkcml2ZXIsIGFuZCBjYW4gYmUgdGVzdGVkIHVzaW5nIGBtZGlvYCBvciBgZXRodG9vbGAgd2l0aCBhIG5ldCBkZXZpY2UuIFRoZXJlZm9yZSwgYHMyNTAwX3Byb2JlYCwgYHMyNTAwX29wZW5gLCBgczI1MDBfaW9jdGxgLCBgczI1MDBfaHd0c3RhbXBfc2V0YCwgYHMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZWAsIGBzMjUwMF9wdHBfYWRqdGltZWAsIGBvYV90YzZfaHd0c3RhbXBfc2V0YCwgYG9hX3RjNl90c3RhbXBfaW9jdGxgLCBgb2FfdGM2X3B0cF9yZWdpc3RlcmAsIGFuZCAgYG5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmdgIGxvb2sgdmVyeSBpbXBvcnRhbnQuXG5cbk15IGRlY2lzaW9uIGhlcmUgaXMgdG8gY2xhc3NpZnkgdGhpcyBhcyBXb3J0aEZ1enppbmc9dHJ1ZS4gTGV0IHRoZSBmdXp6ZXIgd29yayBpdHMgbWFnaWMuIFdlIGp1c3QgbmVlZCB0byBtYWtlIHN1cmUgdG8gY29uZmlndXJlIHRob3NlIHN5bWJvbHMgY29ycmVjdGx5LCBhbG9uZyB3aXRoIGBORVRfVkVORE9SX09OU0VNSWAsIGBTMjUwMF9NQUNQSFlgLCBgT0FfVEM2YCwgYE5DTjI2MDAwX1BIWWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNTM5LCJPdXRwdXRUb2tlbnMiOjI3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1NDQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOVQxMToxOToxNC4zMDMwODQ1ODhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzA3MzU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9PTlNFTUlcIixcbiAgICBcIlMyNTAwX01BQ1BIWVwiLFxuICAgIFwiT0FfVEM2XCIsXG4gICAgXCJOQ04yNjAwMF9QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzMjUwMF9wcm9iZVwiLFxuICAgIFwiczI1MDBfb3BlblwiLFxuICAgIFwiczI1MDBfaW9jdGxcIixcbiAgICBcInMyNTAwX2h3dHN0YW1wX3NldFwiLFxuICAgIFwiczI1MDBfc2V0X211bHRpY2FzdF9tb2RlXCIsXG4gICAgXCJzMjUwMF9wdHBfYWRqdGltZVwiLFxuICAgIFwib2FfdGM2X2h3dHN0YW1wX3NldFwiLFxuICAgIFwib2FfdGM2X3RzdGFtcF9pb2N0bFwiLFxuICAgIFwib2FfdGM2X3B0cF9yZWdpc3RlclwiLFxuICAgIFwibmNuMjYwMDBfYzQ1X3BsY2Ffc2V0X2NmZ1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgU1BJLWJhc2VkIGV0aGVybmV0IGRyaXZlciBmb3IgdGhlIG9uc2VtaSBTMjUwMCBNQUNQSFksIGFkZHMgaGFyZHdhcmUgdGltZXN0YW1waW5nIHN1cHBvcnQgdG8gdGhlIE9BIFRDNiBmcmFtZXdvcmssIGFuZCB1cGRhdGVzIHRoZSBOQ04yNjAwMCBQSFkgZHJpdmVyLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBuZXR3b3JraW5nIHN1YnN5c3RlbSBhbmQgUEhZIGRyaXZlcnMgdGhhdCBjYW4gYmUgaW50ZXJhY3RlZCB3aXRoIHZpYSBldGh0b29sLCBuZXRsaW5rLCBhbmQgaW9jdGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfT05TRU1JXCIsXG4gICAgXCJTMjUwMF9NQUNQSFlcIixcbiAgICBcIk9BX1RDNlwiLFxuICAgIFwiTkNOMjYwMDBfUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiczI1MDBfcHJvYmVcIixcbiAgICBcInMyNTAwX29wZW5cIixcbiAgICBcInMyNTAwX2lvY3RsXCIsXG4gICAgXCJzMjUwMF9od3RzdGFtcF9zZXRcIixcbiAgICBcInMyNTAwX3NldF9tdWx0aWNhc3RfbW9kZVwiLFxuICAgIFwiczI1MDBfcHRwX2FkanRpbWVcIixcbiAgICBcIm9hX3RjNl9od3RzdGFtcF9zZXRcIixcbiAgICBcIm9hX3RjNl90c3RhbXBfaW9jdGxcIixcbiAgICBcIm9hX3RjNl9wdHBfcmVnaXN0ZXJcIixcbiAgICBcIm5jbjI2MDAwX2M0NV9wbGNhX3NldF9jZmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IFNQSS1iYXNlZCBldGhlcm5ldCBkcml2ZXIgZm9yIHRoZSBvbnNlbWkgUzI1MDAgTUFDUEhZLCBhZGRzIGhhcmR3YXJlIHRpbWVzdGFtcGluZyBzdXBwb3J0IHRvIHRoZSBPQSBUQzYgZnJhbWV3b3JrLCBhbmQgdXBkYXRlcyB0aGUgTkNOMjYwMDAgUEhZIGRyaXZlci4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgbmV0d29ya2luZyBzdWJzeXN0ZW0gYW5kIFBIWSBkcml2ZXJzIHRoYXQgY2FuIGJlIGludGVyYWN0ZWQgd2l0aCB2aWEgZXRodG9vbCwgbmV0bGluaywgYW5kIGlvY3Rscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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:nil,}