Name: series-workflowrcljd Phase: Succeeded StartedAt: 2026-07-14 15:43:18 +0000 UTC FinishedAt: 2026-07-14 17:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[0] Phase: Succeeded StartedAt: 2026-07-14 15:43:18 +0000 UTC FinishedAt: 2026-07-14 16:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 15:43:18 +0000 UTC FinishedAt: 2026-07-14 16:07:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "DMA_SHARED_BUFFER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "DMA_SHARED_BUFFER" ], "series_id": "111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_tph", "vfio_pci_core_feature_tph_resolve", "vfio_pci_core_feature_tph_st", "vfio_pci_core_feature_dma_buf_tph", "vfio_pci_dma_buf_get_pci_tph", "dma_buf_get_pci_tph", "pcie_tph_get_cpu_st_ext", "pcie_tph_set_st_entries", "pcie_enable_tph_ext", "vfio_tph_config_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZ2V0X2NwdV9zdF9leHQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfc2V0X3N0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7cGNpZV9lbmFibGVfdHBoX2V4dCYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gc3VwcG9ydCBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBJdCBhZGRzIG5ldyBWRklPIGlvY3Rscy9mZWF0dXJlcyBmb3IgVFBIIGNvbmZpZ3VyYXRpb24gYW5kIHJlc29sdXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYjAwYzYyNDc3MWZjMDc2NGY3NzcxZjcwNWMxNTkwZjdmNjQ0Yzc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTY6MDU6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbmluZGV4IGQ1MDRjNjM2ZGMyOTRlLi5lODMxNGVkMjQwZDMzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbkBAIC05MzksNiAmIzQzOzkzOSw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gICogICAgIC0gZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KClcbiAgKiAgICAgLSBkbWFfYnVmX3ZtYXAoKVxuICAqICAgICAtIGRtYV9idWZfdnVubWFwKClcbiYjNDM7ICogICAgIC0gZG1hX2J1Zl9nZXRfcGNpX3RwaCgpXG4gICpcbiAgKiAyLiBJbXBvcnRlcnMgbXVzdCBub3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZVxuICAqICAgIGZ1bmN0aW9uczpcbkBAIC05NzksNiAmIzQzOzk4MCw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudW5tYXBfZG1hX2J1ZigpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudm1hcCgpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudnVubWFwKClcbiYjNDM7ICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMuZ2V0X3BjaV90cGgoKVxuICAqXG4gICogMy4gRXhwb3J0ZXJzIG11c3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZVxuICAqICAgIGZ1bmN0aW9uczpcbkBAIC0xMTQ0LDYgJiM0MzsxMTQ2LDM2IEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfdW5waW4sIFwmIzM0O0RNQV9CVUZcJiMzNDspO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCAtIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBtZXRhZGF0YVxuJiM0MzsgKiBAZG1hYnVmOiBETUEgYnVmZmVyIHRvIHF1ZXJ5XG4mIzQzOyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbiYjNDM7ICogQHN0ZWVyaW5nX3RhZzogcmV0dXJucyB0aGUgcmF3IHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZCBuYW1lc3BhY2VcbiYjNDM7ICogQHBoOiByZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50XG4mIzQzOyAqXG4mIzQzOyAqIFdyYXBwZXIgZm9yIHRoZSBvcHRpb25hbCBcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCBjYWxsYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAtRU9QTk9UU1VQUCBpZiB0aGVcbiYjNDM7ICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZVxuJiM0MzsgKiByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcmV0dXJuZWQgc3RlZXJpbmcgdGFnIGFuZCBwcm9jZXNzaW5nIGhpbnQgYXJlIG9ubHkgdmFsaWQgdW50aWwgdGhlXG4mIzQzOyAqIGV4cG9ydGVyIGludmFsaWRhdGVzIHRoZSBjdXJyZW50IG1hcHBpbmcgKHNpZ25hbGxlZCB0byB0aGUgaW1wb3J0ZXIgdmlhXG4mIzQzOyAqIFx1MDAyNmRtYV9idWZfYXR0YWNoX29wcy5tb3ZlX25vdGlmeSkuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3XG4mIzQzOyAqIG1hcHBpbmcgaXMgZXN0YWJsaXNoZWQgZm9sbG93aW5nIGludmFsaWRhdGlvbi5cbiYjNDM7ICovXG4mIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXG4mIzQzO3tcbiYjNDM7XHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdGlmICghZG1hYnVmLVx1MDAzZW9wcy1cdTAwM2VnZXRfcGNpX3RwaClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgc3RlZXJpbmdfdGFnLCBwaCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9nZXRfcGNpX3RwaCwgXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4mIzQzO1xuIC8qKlxuICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJsZSBvZiB0aGUgYXR0YWNobWVudDtcbiAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xuaW5kZXggNjU1ZmZkNjBlNjJmNmEuLmU2YTg1MGFiMmIwMzdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMTY1LDE0ICYjNDM7MTY1LDYyIEBAIHN0YXRpYyB1OCBnZXRfc3RfbW9kZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gICovXG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuLVx0dTMyIHJlZztcbiYjNDM7XHR1MzIgcmVnID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4mIzQzO1x0XHRyZXR1cm4gUENJX1RQSF9MT0NfTk9ORTtcbiBcbiBcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4gXG4tXHRyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpO1xuJiM0MztcdHJldHVybiByZWcgXHUwMDI2IFBDSV9UUEhfQ0FQX0xPQ19NQVNLO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIFRQSCBDb21wbGV0ZXIgc3VwcG9ydFxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgXCYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWRcJiMzNDsgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxuJiM0MzsgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cbiYjNDM7ICogXCYjMzQ7bm90IHN1cHBvcnRlZFwmIzM0OyBzbyBjYWxsZXJzIG9ubHkgbmVlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHRocmVlXG4mIzQzOyAqIGRlZmluZWQgdmFsdWVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IG9uZSBvZiAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUsXG4mIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvclxuJiM0MzsgKiAgICAgICAgICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJlZztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgXHUwMDI2cmVnKSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbiYjNDM7XHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpKSB7XG4mIzQzO1x0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk6XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZO1xuJiM0MztcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEg6XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEg7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XG4mIzQzO1xuIC8qXG4gICogUmV0dXJuIHRoZSBzaXplIG9mIFNUIHRhYmxlLiBJZiBTVCB0YWJsZSBpcyBub3QgaW4gVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxuICAqIENhcGFiaWxpdHkgc3BhY2UsIHJldHVybiAwLiBPdGhlcndpc2UgcmV0dXJuIHRoZSBTVCBUYWJsZSBTaXplICYjNDM7IDEuXG5AQCAtMTg0LDkgJiM0MzsyMzIsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHQvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqL1xuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiBkZWZpbmVkIGluIHBjaV9yZWdzLmggKi9cbi1cdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XG4gXHRpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMxLDIwICYjNDM7Mjc2LDIyIEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gfVxuIFxuIC8qKlxuLSAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWRcbi0gKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG4mIzQzOyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeVxuJiM0MzsgKiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBDUFUsIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHR5cGUgc2VsZWN0aW9uXG4gICogQHBkZXY6IFBDSSBkZXZpY2VcbiAgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4mIzQzOyAqIEByZXFfdHlwZTogVFBIIHJlcXVlc3RlciB0eXBlIHRvIHNlbGVjdCBTVCBuYW1lc3BhY2VcbiAgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuICAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZFxuICAqXG4tICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhXG4tICogc3BlY2lmaWMgQ1BVIGFzIGluZGljYXRlZCBieSBjcHUuXG4mIzQzOyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLFxuJiM0MzsgKiB1c2luZyB0aGUgc3BlY2lmaWVkIFRQSCByZXF1ZXN0ZXIgdHlwZSB0byBzZWxlY3QgdGhlIGNvcnJlY3QgU1QgbmFtZXNwYWNlLlxuJiM0MzsgKiBWYWxpZGF0ZXMgcmVxdWVzdGVyIHR5cGUgYWdhaW5zdCBoYXJkd2FyZSBuZWdvdGlhdGVkIGNhcGFiaWxpdHkgbGltaXRzLlxuICAqXG4gICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuICAqL1xuLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbi1cdFx0XHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiYjNDM7aW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdFx0ICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiB7XG4gI2lmZGVmIENPTkZJR19BQ1BJXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcnA7XG5AQCAtMjUzLDYgJiM0MzszMDAsMTAgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0dTMyIGNwdV91aWQ7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHxcbiYjNDM7XHRcdHJlcV90eXBlIFx1MDAzZSBwZGV2LVx1MDAzZXRwaF9tYXhfdHlwZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHJldCA9IGFjcGlfZ2V0X2NwdV91aWQoY3B1LCBcdTAwMjZjcHVfdWlkKTtcbiBcdGlmIChyZXQgIT0gMClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0yNjgsMzUgJiM0MzszMTksNTQgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBcdTAwMjZpbmZvKTtcbiYjNDM7XHQqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCByZXFfdHlwZSwgXHUwMDI2aW5mbyk7XG4gXG4tXHRwY2lfZGJnKHBkZXYsIFwmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcblwmIzM0OyxcbiYjNDM7XHRwY2lfZGJnKHBkZXYsIFwmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXG5cJiMzNDssXG4gXHRcdChtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gXCYjMzQ7dm9sYXRpbGVcJiMzNDsgOiBcJiMzNDtwZXJzaXN0ZW50XCYjMzQ7LFxuLVx0XHRjcHUsICp0YWcpO1xuJiM0MztcdFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XG4gXG4gXHRyZXR1cm4gMDtcbiAjZWxzZVxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gI2VuZGlmXG4gfVxuLUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdF9leHQpO1xuIFxuIC8qKlxuLSAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnlcbiYjNDM7ICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxuJiM0MzsgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG4gICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4XG4tICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHdyaXR0ZW5cbiYjNDM7ICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxuJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuJiM0MzsgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWRcbiAgKlxuLSAqIEZpZ3VyZSBvdXQgdGhlIHByb3BlciBsb2NhdGlvbiBvZiBTVCB0YWJsZSwgZWl0aGVyIGluIHRoZSBNU0ktWCB0YWJsZSBvclxuLSAqIGluIHRoZSBUUEggRXh0ZW5kZWQgQ2FwYWJpbGl0eSBzcGFjZSwgYW5kIHdyaXRlIHRoZSBTdGVlcmluZyBUYWcgaW50b1xuLSAqIHRoZSBTVCBlbnRyeSBwb2ludGVkIGJ5IGluZGV4LlxuJiM0MzsgKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSxcbiYjNDM7ICogdXNpbmcgdGhlIGRlZmF1bHQgbmVnb3RpYXRlZCBUUEggcmVxdWVzdGVyIHR5cGUuXG4gICpcbiAgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4gICovXG4taW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIG1lbV90eXBlLCBwZGV2LVx1MDAzZXRwaF9tYXhfdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY3B1LCB0YWcpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfc2V0X3N0X2VudHJpZXMgLSBCYXRjaCBzZXQgU3RlZXJpbmcgVGFnIGVudHJpZXMgaW4gdGhlIFNUIHRhYmxlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBzdGFydDogc3RhcnRpbmcgU1QgdGFibGUgaW5kZXhcbiYjNDM7ICogQGNvdW50OiBudW1iZXIgb2YgY29udGlndW91cyBlbnRyaWVzIHRvIHdyaXRlXG4mIzQzOyAqIEB0YWdzOiBhcnJheSBvZiB1MTYgdGFnIHZhbHVlcyB0byBwcm9ncmFtXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGVudHJpZXMsIG9yIG5lZ2F0aXZlIGVycm5vXG4mIzQzOyAqL1xuJiM0MztpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxuIHtcbi1cdHUzMiBsb2M7XG4gXHRpbnQgZXJyID0gMDtcbiYjNDM7XHR1MzIgbG9jLCBpO1xuIFxuIFx0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTMwNiw3ICYjNDM7Mzc2LDcgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuIFxuIFx0LyogTm8gbmVlZCB0byB3cml0ZSB0YWcgaWYgZGV2aWNlIGlzIGluIFwmIzM0O05vIFNUIE1vZGVcJiMzNDsgKi9cbiBcdGlmIChwZGV2LVx1MDAzZXRwaF9tb2RlID09IFBDSV9UUEhfU1RfTlNfTU9ERSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4gXG4gXHQvKlxuIFx0ICogRGlzYWJsZSBUUEggYmVmb3JlIHVwZGF0aW5nIFNUIHRvIGF2b2lkIHBvdGVudGlhbCBpbnN0YWJpbGl0eSBhc1xuQEAgLTMxNSwzMSAmIzQzOzM4NSw0NyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIFBDSV9UUEhfUkVRX0RJU0FCTEUpO1xuIFxuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbi1cbi1cdHN3aXRjaCAobG9jKSB7XG4tXHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XG4tXHRcdGVyciA9IHBjaV9tc2l4X3dyaXRlX3RwaF90YWcocGRldiwgaW5kZXgsIHRhZyk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBQQ0lfVFBIX0xPQ19DQVA6XG4tXHRcdGVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBpbmRleCwgdGFnKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0aWYgKGVycikge1xuLVx0XHRwY2llX2Rpc2FibGVfdHBoKHBkZXYpO1xuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dpdGNoIChsb2MpIHtcbiYjNDM7XHRcdGNhc2UgUENJX1RQSF9MT0NfTVNJWDpcbiYjNDM7XHRcdFx0ZXJyID0gcGNpX21zaXhfd3JpdGVfdHBoX3RhZyhwZGV2LCBzdGFydCAmIzQzOyBpLCB0YWdzW2ldKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFBDSV9UUEhfTE9DX0NBUDpcbiYjNDM7XHRcdFx0ZXJyID0gd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHBkZXYsIHN0YXJ0ICYjNDM7IGksIHRhZ3NbaV0pO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZXJyICE9IDApIHtcbiYjNDM7XHRcdFx0cGNpX2VycihwZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSV1LCB0YWdzPSV1LCByZXQ9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0KGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSA/IFwmIzM0O01TSS1YXCYjMzQ7IDogXCYjMzQ7U1RcJiMzNDssXG4mIzQzO1x0XHRcdFx0c3RhcnQgJiM0MzsgaSwgdGFnc1tpXSwgZXJyKTtcbiYjNDM7XHRcdFx0cGNpZV9kaXNhYmxlX3RwaChwZGV2KTtcbiYjNDM7XHRcdFx0cmV0dXJuIGkgXHUwMDNlIDAgPyBpIDogZXJyO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0c2V0X2N0cmxfcmVnX3JlcV9lbihwZGV2LCBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSk7XG4gXG4tXHRwY2lfZGJnKHBkZXYsIFwmIzM0O3NldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBpbmRleD0lZCwgdGFnPSUjMDR4XFxuXCYjMzQ7LFxuLVx0XHQobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gXCYjMzQ7TVNJLVhcJiMzNDsgOiBcJiMzNDtTVFwmIzM0OywgaW5kZXgsIHRhZyk7XG4mIzQzO1x0cGNpX2RiZyhwZGV2LCBcJiMzNDtiYXRjaCBzZXQgc3RlZXJpbmcgdGFnOiAlcyB0YWJsZSwgc3RhcnQ9JXUsIGNvdW50PSV1IHN1Y2Nlc3MhXFxuXCYjMzQ7LFxuJiM0MztcdFx0KGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSA/IFwmIzM0O01TSS1YXCYjMzQ7IDogXCYjMzQ7U1RcJiMzNDssIHN0YXJ0LCBjb3VudCk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9zZXRfc3RfZW50cmllcyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4XG4mIzQzOyAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSB3cml0dGVuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhwZGV2LCBpbmRleCwgMSwgXHUwMDI2dGFnKTtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IDEgPyAwIDogcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX3NldF9zdF9lbnRyeSk7XG4gXG5AQCAtMzY2LDI2ICYjNDM7NDUyLDIxIEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xuIFxuIC8qKlxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuJiM0MzsgKiBwY2llX2VuYWJsZV90cGhfZXh0IC0gRW5hYmxlIFRQSCBzdXBwb3J0IHdpdGggc3BlY2lmaWMgU1QgbW9kZSBhbmRcbiYjNDM7ICogcmVxdWVzdGVyIHR5cGVcbiAgKiBAcGRldjogUENJIGRldmljZVxuLSAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcbi0gKlxuLSAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcbi0gKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGVcbi0gKiAgIC0gUENJX1RQSF9TVF9EU19NT0RFOiBEZXZpY2UgU3BlY2lmaWMgTW9kZVxuJiM0MzsgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGU6IFBDSV9UUEhfU1RfKE5TX01PREUgLyBJVl9NT0RFIC8gRFNfTU9ERSlcbiYjNDM7ICogQHJlcV90eXBlOiBSZXF1ZXN0ZXIgdHlwZSB0byBlbmFibGU6IFBDSV9UUEhfUkVRXyhUUEhfT05MWSAvIEVYVF9UUEgpXG4gICpcbi0gKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xuLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4tICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCYjMzk7cyBjb21wbGV0ZXIgY2FwYWJpbGl0eS5cbiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBhbmQgcmVxdWVzdGVyIHR5cGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZVxuJiM0MzsgKiBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuICAqL1xuLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSwgdTggcmVxX3R5cGUpXG4ge1xuIFx0dTMyIHJlZztcbiBcdHU4IGRldl9tb2Rlcztcbi1cdHU4IHJwX3JlcV90eXBlO1xuIFxuIFx0LyogSG9ub3IgXCYjMzQ7bm90cGhcJiMzNDsga2VybmVsIHBhcmFtZXRlciAqL1xuIFx0aWYgKHBjaV90cGhfZGlzYWJsZWQpXG5AQCAtMzk3LDYgJiM0Mzs0NzgsMTQgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXHRpZiAocGRldi1cdTAwM2V0cGhfZW5hYmxlZClcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiYjNDM7XHRpZiAocGRldi1cdTAwM2V0cGhfbWF4X3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgVFBIIHJlcXVlc3RlciB0eXBlIGNvbXBhdGliaWxpdHkgKi9cbiYjNDM7XHRpZiAocmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSB8fCByZXFfdHlwZSA9PSAyIHx8XG4mIzQzO1x0XHRyZXFfdHlwZSBcdTAwM2UgcGRldi1cdTAwM2V0cGhfbWF4X3R5cGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgU1QgbW9kZSBjb21wYXRpYmlsaXR5ICovXG4gXHRtb2RlIFx1MDAyNj0gUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0s7XG4gXHRkZXZfbW9kZXMgPSBnZXRfc3RfbW9kZXMocGRldik7XG5AQCAtNDA1LDIzICYjNDM7NDk0LDcgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXG4gXHRwZGV2LVx1MDAzZXRwaF9tb2RlID0gbW9kZTtcbiBcbi1cdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4tXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCBcdTAwMjZyZWcpO1xuLVx0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4tXHRlbHNlXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XG4tXG4tXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xuLVx0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xuLVx0XHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcbi1cbi1cdFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IG1pbihwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuLVx0fVxuLVxuLVx0aWYgKHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gcmVxX3R5cGU7XG4gXG4gXHQvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiBcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DVFJMLCBcdTAwMjZyZWcpO1xuQEAgLTQzNSw2ICYjNDM7NTA4LDIzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGU6IFBDSV9UUEhfU1RfKE5TX01PREUgLyBJVl9NT0RFIC8gRFNfTU9ERSlcbiYjNDM7ICpcbiYjNDM7ICogV3JhcHBlciBmb3IgcGNpZV9lbmFibGVfdHBoX2V4dCgpLCBhdXRvbWF0aWNhbGx5IHVzZXMgdGhlIHByZS1jYWNoZWRcbiYjNDM7ICogdHBoX21heF90eXBlIHZhbHVlIChuZWdvdGlhdGVkIG1heGltdW0gcmVxdWVzdGVyIHR5cGUgYmV0d2VlbiBkZXZpY2UgYW5kXG4mIzQzOyAqIHJvb3QgcG9ydCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCBwZGV2LVx1MDAzZXRwaF9tYXhfdHlwZSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaCk7XG4gXG4gdm9pZCBwY2lfcmVzdG9yZV90cGhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNTA4LDE0ICYjNDM7NTk4LDYwIEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKVxuIFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiYjNDM7XHR1OCB0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlO1xuIFx0aW50IG51bV9lbnRyaWVzO1xuIFx0dTMyIHNhdmVfc2l6ZTtcbiYjNDM7XHR1MzIgcmVnID0gMDtcbiBcbiBcdHBkZXYtXHUwMDNldHBoX2NhcCA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCk7XG4gXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbiYjNDM7XHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4mIzQzO1x0XHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xuJiM0MztcdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbiYjNDM7XHRcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xuJiM0MztcdFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xuJiM0MztcdFx0dHBoX3JlcV90eXBlID0gbWluKHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGRldi1cdTAwM2V0cGhfbWF4X3R5cGUgPSB0cGhfcmVxX3R5cGU7XG4mIzQzO1xuIFx0bnVtX2VudHJpZXMgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTtcbiBcdHNhdmVfc2l6ZSA9IHNpemVvZih1MzIpICYjNDM7IG51bV9lbnRyaWVzICogc2l6ZW9mKHUxNik7XG4gXHRwY2lfYWRkX2V4dF9jYXBfc2F2ZV9idWZmZXIocGRldiwgUENJX0VYVF9DQVBfSURfVFBILCBzYXZlX3NpemUpO1xuIH1cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9kc21fc3VwcG9ydGVkIC0gQ2hlY2sgaWYgcm9vdCBwb3J0IGV4cG9zZXMgVFBIIFNUIF9EU01cbiYjNDM7ICogQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0cnVlIGlmIHJvb3QgcG9ydCBvZiBAcGRldiBwcm92aWRlcyBUUEggU1QgRFNNIGZ1bmN0aW9uLFxuJiM0MzsgKiBmYWxzZSBvdGhlcndpc2UgKEFDUEkgZGlzYWJsZWQgb3IgRFNNIG1pc3NpbmcpLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQUNQSVxuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4mIzQzO1x0YWNwaV9oYW5kbGUgaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGhhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuJiM0MztcdGlmICghaGFuZGxlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWNwaV9jaGVja19kc20oaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbiYjNDM7XHRcdFx0ICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5pbmRleCA4MzAzNjlmZjg3OGRiZS4uYzQwN2MyMTdiNjQ5ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuQEAgLTYwLDYgJiM0Mzs2MCwyNiBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0O1xuIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZGVueWxpc3QsIFwmIzM0O0Rpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy5cJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRwaF9wb2xpY3k7XG4mIzQzO3N0YXRpYyBpbnQgdHBoX3BvbGljeV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwYXJhbV9zZXRfdWludF9taW5tYXgodmFsLCBrcCwgVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCxcbiYjNDM7XHRcdFx0XHQgICAgIFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QpO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB0cGhfcGFyYW1fb3BzID0ge1xuJiM0MztcdC5zZXQgPSB0cGhfcG9saWN5X3NldCxcbiYjNDM7XHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXG4mIzQzO307XG4mIzQzO21vZHVsZV9wYXJhbV9jYih0cGhfcG9saWN5LCBcdTAwMjZ0cGhfcGFyYW1fb3BzLCBcdTAwMjZ0cGhfcG9saWN5LCAwNjQ0KTtcbiYjNDM7TU9EVUxFX1BBUk1fREVTQyh0cGhfcG9saWN5LFxuJiM0MztcdFwmIzM0O0dsb2JhbCBUUEggcG9saWN5IGxldmVsICgwPWRlZmF1bHQgTm8tU1QpOlxcblwmIzM0O1xuJiM0MztcdFwmIzM0OzAgPSBOby1TVCBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbW1pbmcgdW5hdmFpbGFibGVcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsxID0gQWRkIElWIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcblwmIzM0O1xuJiM0MztcdFwmIzM0OyAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xcblwmIzM0O1xuJiM0MztcdFwmIzM0OzIgPSBBZGQgRFMgbW9kZTogUkVTT0xWRSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlLCBTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xcblwmIzM0O1xuJiM0MztcdFwmIzM0OyAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xcblwmIzM0Oyk7XG4mIzQzO1xuIHN0YXRpYyBib29sIHZmaW9fcGNpX2Rldl9pbl9kZW55bGlzdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzd2l0Y2ggKHBkZXYtXHUwMDNldmVuZG9yKSB7XG5AQCAtMTQyLDYgJiM0MzsxNjIsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfVkdBXG4gXHR2ZGV2LVx1MDAzZWRpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7XG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7XHR2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPSB0cGhfcG9saWN5O1xuJiM0MzsjZW5kaWZcbiBcbiBcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uOTdkYWQ2ZGI2OWUzOWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTA4NSw2ICYjNDM7MTA4NiwxNDYgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKVxuJiM0Mzt7XG4mIzQzO1x0dTggY2FwO1xuJiM0MztcdGludCBiYXNlID0gKHBvcyBcdTAwM2U9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOlxuJiM0MztcdFx0XHRcdFx0XHQgUENJX1NURF9IRUFERVJfU0laRU9GO1xuJiM0MztcdGNhcCA9IHZkZXYtXHUwMDNlcGNpX2NvbmZpZ19tYXBbcG9zXTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNhcCA9PSBQQ0lfQ0FQX0lEX0JBU0lDKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFhYWCBDYW4gd2UgaGF2ZSB0byBhYnV0dGluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZT8gKi9cbiYjNDM7XHR3aGlsZSAocG9zIC0gMSBcdTAwM2U9IGJhc2UgXHUwMDI2XHUwMDI2IHZkZXYtXHUwMDNlcGNpX2NvbmZpZ19tYXBbcG9zIC0gMV0gPT0gY2FwKVxuJiM0MztcdFx0cG9zLS07XG4mIzQzO1xuJiM0MztcdHJldHVybiBwb3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZmaW9fdXBkYXRlX3RwaF92Y29uZmlnX2J5dGVzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiYjNDM7XHRcdFx0XHRcdCAgaW50IHBvcylcbiYjNDM7e1xuJiM0MztcdF9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgdmFsID0gbGUzMl90b19jcHUoKnZwdHIpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikpIHtcbiYjNDM7XHRcdC8qIFJlbW92ZSBleHRlbmRlZCBUUEggaWYgcm9vdC1wb3J0IGRvZXNuJiMzOTt0IHN1cHBvcnQgKi9cbiYjNDM7XHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKSB7XG4mIzQzO1x0XHQvKiBSZXBvcnQgb25seSBOby1TVCBtb2RlIHN1cHBvcnRlZCAqL1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHxcbiYjNDM7XHRcdFx0IFBDSV9UUEhfQ0FQX0xPQ19NQVNLIHwgUENJX1RQSF9DQVBfU1RfTUFTSyk7XG4mIzQzO1x0fSBlbHNlIGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xuJiM0MztcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgYW5kIElWIG1vZGVzIHN1cHBvcnRlZCAqL1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBDSV9UUEhfQ0FQX1NUX0RTO1xuJiM0MztcdFx0LyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb2VzbiYjMzk7dCBzdXBwb3J0IElWIG1vZGUgKi9cbiYjNDM7XHRcdGlmICghKHZhbCBcdTAwMjYgUENJX1RQSF9DQVBfU1RfSVYpKVxuJiM0MztcdFx0XHR2YWwgXHUwMDI2PSB+KFBDSV9UUEhfQ0FQX0xPQ19NQVNLIHwgUENJX1RQSF9DQVBfU1RfTUFTSyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XG4mIzQzO1xuJiM0MztcdC8qIEJhY2t1cCB1cGRhdGVkIGNhcGFiaWxpdHkgcmVnaXN0ZXIgdmFsdWUgKi9cbiYjNDM7XHR2ZGV2LVx1MDAzZXRwaF9jYXBfdmlydCA9IHZhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2Ugb25seSB2aXJ0dWFsaXplIHRoZSBUUEggaGVhZGVyIChleGNsdWRpbmcgdGhlIFNUIHRhYmxlKS5cbiYjNDM7XHQgKiBGb3IgdGhlIFNUIHRhYmxlIChpZiBhbnkpLCB0aGUgcmVhZCBvcGVyYXRpb24gcmV0dXJucyAwIGJ5XG4mIzQzO1x0ICogZGVmYXVsdCwgYW5kIHRoZSB3cml0ZSBvcGVyYXRpb24gaXMgZGlzY2FyZGVkIGJ5IGRlZmF1bHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFsbG9jX3Blcm1fYml0cyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbiYjNDM7XHRwX3NldGQocGVybSwgUENJX1RQSF9DQVAsIEFMTF9WSVJULCBOT19XUklURSk7XG4mIzQzO1xuJiM0MztcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NUUkwsIEFMTF9WSVJULFxuJiM0MztcdCAgICAgICBQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSyB8IFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiYjNDM7XHRcdFx0XHRpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4mIzQzO1x0XHRcdFx0aW50IG9mZnNldCwgX19sZTMyICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzZT0gUENJX1RQSF9CQVNFX1NJWkVPRikge1xuJiM0MztcdFx0KnZhbCA9IGNwdV90b19sZTMyKDApO1xuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2U9IFBDSV9UUEhfQ0FQIFx1MDAyNlx1MDAyNiAhdmRldi1cdTAwM2V0cGhfb3B0X2luKSB7XG4mIzQzO1x0XHQqdmFsID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuJiM0MztcdFx0XHRcdCBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4mIzQzO1x0XHRcdFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc3RhcnQgPSB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHZkZXYsIHBvcyk7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xuJiM0MztcdHU4IG1vZGUsIHJlcSwgb3JnX3JlcTtcbiYjNDM7XHRfX2xlMzIgb3JnX3ZhbCA9IDA7XG4mIzQzO1x0dTE2IGNtZDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbiB8fCBvZmZzZXQgXHUwMDNlPSBQQ0lfVFBIX0JBU0VfU0laRU9GKVxuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcbiYjNDM7XHRjbWQgPSB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHZkZXYpO1xuJiM0MztcbiYjNDM7XHRvcmdfY3RybCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3N0YXJ0ICYjNDM7IFBDSV9UUEhfQ1RSTF0pO1xuJiM0MztcdHZmaW9fZGVmYXVsdF9jb25maWdfcmVhZCh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIFx1MDAyNm9yZ192YWwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcbiYjNDM7XHRpZiAocmV0ICE9IGNvdW50KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5ld19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DVFJMXSk7XG4mIzQzO1x0aWYgKG5ld19jdHJsID09IG9yZ19jdHJsKVxuJiM0MztcdFx0Z290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCBjaGFuZ2VzIGluIFRQSF9DVFJMLiAqL1xuJiM0MztcbiYjNDM7XHRjYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NBUF0pO1xuJiM0MztcdG1vZGUgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIG5ld19jdHJsKTtcbiYjNDM7XHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7XG4mIzQzO1x0aWYgKG1vZGUgXHUwMDNlIFBDSV9UUEhfU1RfRFNfTU9ERSB8fCAhKGNhcCBcdTAwMjYgKDF1IFx1MDAzY1x1MDAzYyBtb2RlKSkgfHwgcmVxID09IDB4MiB8fFxuJiM0MztcdFx0KHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIIFx1MDAyNlx1MDAyNiAhKGNhcCBcdTAwMjYgUENJX1RQSF9DQVBfRVhUX1RQSCkpKVxuJiM0MztcdFx0Z290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi9cbiYjNDM7XG4mIzQzO1x0b3JnX3JlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIG9yZ19jdHJsKTtcbiYjNDM7XHRpZiAocmVxID09IG9yZ19yZXEpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmU7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovXG4mIzQzO1xuJiM0MztcdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcbiYjNDM7XHRcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcmVxKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7XG4mIzQzO1x0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO3Jlc3RvcmU6XG4mIzQzO1x0dmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIG9yZ192YWwpO1xuJiM0MztvdXQ6XG4mIzQzO1x0dmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZSh2ZGV2LCBjbWQpO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiAmIzQzOzEyNDEsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZClcbiBcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XG4gXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xuJiM0MztcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4gfVxuIFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcbkBAIC0xMTIwLDYgJiM0MzsxMjYyLDkgQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbiYjNDM7XHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuJiM0MztcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS5yZWFkZm4gPSB2ZmlvX3RwaF9jb25maWdfcmVhZDtcbiYjNDM7XHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRFZTRUNdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XG4gXG5AQCAtMTEyOSwyMyAmIzQzOzEyNzQsNiBAQCBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKVxuLXtcbi1cdHU4IGNhcDtcbi1cdGludCBiYXNlID0gKHBvcyBcdTAwM2U9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOlxuLVx0XHRcdFx0XHRcdCBQQ0lfU1REX0hFQURFUl9TSVpFT0Y7XG4tXHRjYXAgPSB2ZGV2LVx1MDAzZXBjaV9jb25maWdfbWFwW3Bvc107XG4tXG4tXHRpZiAoY2FwID09IFBDSV9DQVBfSURfQkFTSUMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0LyogWFhYIENhbiB3ZSBoYXZlIHRvIGFidXR0aW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlPyAqL1xuLVx0d2hpbGUgKHBvcyAtIDEgXHUwMDNlPSBiYXNlIFx1MDAyNlx1MDAyNiB2ZGV2LVx1MDAzZXBjaV9jb25maWdfbWFwW3BvcyAtIDFdID09IGNhcClcbi1cdFx0cG9zLS07XG4tXG4tXHRyZXR1cm4gcG9zO1xuLX1cbi1cbiBzdGF0aWMgaW50IHZmaW9fbXNpX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0XHRcdGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbiBcdFx0XHRcdGludCBvZmZzZXQsIF9fbGUzMiAqdmFsKVxuQEAgLTE3MDEsNiAmIzQzOzE4MjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0cmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKGVjYXAgPT0gUENJX0VYVF9DQVBfSURfVFBIKVxuJiM0MztcdFx0XHR2ZmlvX3VwZGF0ZV90cGhfdmNvbmZpZ19ieXRlcyh2ZGV2LCBlcG9zKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSWYgd2UmIzM5O3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCAzZjExYTk2MjRiOWMwMy4uYjhkOWQ4NDBhOTNiNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xMyw2ICYjNDM7MTMsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FwZXJ0dXJlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG5AQCAtMzAsNiAmIzQzOzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxuICNpbmNsdWRlIFx1MDAzY2FzbS9lZWguaFx1MDAzZVxuQEAgLTEyNywxMCAmIzQzOzEzMCwyMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3RwaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbiYjNDM7XHRcdFx0XHRcdCAgICB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3ByaXZhdGUoc2VxKTtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzZXEsIFwmIzM0O3BvbGljeT0ldSBjYXAtdmlydD0weCV4IG9wdC1pbj0ldVxcblwmIzM0OyxcbiYjNDM7XHRcdHZkZXYtXHUwMDNldHBoX3BvbGljeSwgdmRldi1cdTAwM2V0cGhfY2FwX3ZpcnQsIHZkZXYtXHUwMDNldHBoX29wdF9pbik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWRcbi0gKiBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJiMzOTtzIGVmZmVjdGl2ZSB2YWx1ZSBjYW4gZGlmZmVyIGZyb20gdGhlXG4tICogY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZy4gIEV4cG9zZSB0aGUgcGVyLWRldmljZSAocmVhZC1vbmx5KSB2YWx1ZXNcbiYjNDM7ICogZGlzYWJsZV9pZGxlX2QzLCBub2ludHhtYXNrIGFuZCB0cGhfcG9saWN5IGFyZSB3cml0YWJsZSBtb2R1bGUgcGFyYW1ldGVyc1xuJiM0MzsgKiBsYXRjaGVkIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UmIzM5O3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbVxuJiM0MzsgKiB0aGUgY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZy4gIEV4cG9zZSB0aGUgcGVyLWRldmljZSAocmVhZC1vbmx5KSB2YWx1ZXNcbiAgKiBoZXJlIGZvciB2aXNpYmlsaXR5OyByZWFkLW9ubHkgcGFyYW1ldGVycyBjYW4mIzM5O3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLlxuICAqL1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNDYsNiAmIzQzOzE1OSw4IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfbm9pbnR4bWFzayk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcJiMzNDtkaXNhYmxlX2lkbGVfZDNcJiMzNDssIHBjaV9kaXIsXG4gXHRcdFx0XHQgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyk7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldiwgXCYjMzQ7dHBoXCYjMzQ7LCBwY2lfZGlyLFxuJiM0MztcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoKTtcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuQEAgLTYxMCw2ICYjNDM7NjI1LDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4gXG4gXHR2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzID0gIXJldDtcbiYjNDM7XHR2ZGV2LVx1MDAzZXRwaF9vcHRfaW4gPSBmYWxzZTtcbiYjNDM7XHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi9cbiYjNDM7XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4gXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuIFx0aWYgKCF2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcbkBAIC03NTcsNiAmIzQzOzc3NSw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcbiBcdHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHZkZXYpO1xuIFxuJiM0MztcdC8qIFJlc2V0IFRQSCBzdGF0dXMgb24gZXhpdCB1c2VyIHNlc3Npb24gKi9cbiYjNDM7XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIHdlIGhhdmUgc2F2ZWQgc3RhdGUsIHJlc3RvcmUgaXQuICBJZiB3ZSBjYW4gcmVzZXQgdGhlIGRldmljZSxcbiBcdCAqIGV2ZW4gYmV0dGVyLiAgUmVzZXR0aW5nIHdpdGggY3VycmVudCBzdGF0ZSBzZWVtcyBiZXR0ZXIgdGhhblxuQEAgLTE1NTgsNiAmIzQzOzE1NzksNyBAQCBsb25nIHZmaW9fcGNpX2NvcmVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPVxuIFx0XHRjb250YWluZXJfb2YoY29yZV92ZGV2LCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UsIHZkZXYpO1xuIFx0dm9pZCBfX3VzZXIgKnVhcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHN3aXRjaCAoY21kKSB7XG4gXHRjYXNlIFZGSU9fREVWSUNFX0dFVF9JTkZPOlxuQEAgLTE1NjksOSAmIzQzOzE1OTEsMTUgQEAgbG9uZyB2ZmlvX3BjaV9jb3JlX2lvY3RsKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0Y2FzZSBWRklPX0RFVklDRV9JT0VWRU5URkQ6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9pb2V2ZW50ZmQodmRldiwgdWFyZyk7XG4gXHRjYXNlIFZGSU9fREVWSUNFX1BDSV9IT1RfUkVTRVQ6XG4tXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9wY2lfaG90X3Jlc2V0KHZkZXYsIHVhcmcpO1xuJiM0MztcdFx0cmV0ID0gdmZpb19wY2lfaW9jdGxfcGNpX2hvdF9yZXNldCh2ZGV2LCB1YXJnKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0Y2FzZSBWRklPX0RFVklDRV9SRVNFVDpcbi1cdFx0cmV0dXJuIHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHZkZXYsIHVhcmcpO1xuJiM0MztcdFx0cmV0ID0gdmZpb19wY2lfaW9jdGxfcmVzZXQodmRldiwgdWFyZyk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdGNhc2UgVkZJT19ERVZJQ0VfU0VUX0lSUVM6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9zZXRfaXJxcyh2ZGV2LCB1YXJnKTtcbiBcdGRlZmF1bHQ6XG5AQCAtMTYwNyw2ICYjNDM7MTYzNSwyOTkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfc3Rfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuJiM0MztcdFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHtcbiYjNDM7XHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1BIO1xuJiM0MztcbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5IFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCh2ZGV2LVx1MDAzZXRwaF9jYXBfdmlydCBcdTAwMjYgUENJX1RQSF9DQVBfU1RfSVYpKSB7XG4mIzQzO1x0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkU7XG4mIzQzO1x0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRjtcbiYjNDM7XHRcdGlmIChwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHRcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfQ1BVO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5IFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCh2ZGV2LVx1MDAzZXRwaF9jYXBfdmlydCBcdTAwMjYgUENJX1RQSF9DQVBfU1RfRFMpKSB7XG4mIzQzO1x0XHRpZiAodmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHZkZXYpIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTtcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUY7XG4mIzQzO1x0XHRcdGlmIChwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHRcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuJiM0MztcdFx0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZsYWdzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIHRwaDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXBjaWVfc3RkX3RwaF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeixcbiYjNDM7XHRcdFx0VkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbiYjNDM7XHRcdFx0c2l6ZW9mKHRwaCkpO1xuJiM0MztcdGlmIChyZXQgIT0gMSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ0cGgsIGFyZywgc2l6ZW9mKHRwaCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpIHtcbiYjNDM7XHRcdGlmICh0cGguZmxhZ3MgIT0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR2ZGV2LVx1MDAzZXRwaF9vcHRfaW4gPSAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR0cGguZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZ0cGgsIHNpemVvZih0cGgpKSA/IC1FRkFVTFQgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfcmVzb2x2ZV9hbGxvd19zcmMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGZsYWdzID0gdmZpb19wY2lfZ2V0X3RwaF9jYXBhYmlsaXR5KHZkZXYpO1xuJiM0MztcdHUzMiBhbGxvd19zcmMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IChWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1BIIHxcbiYjNDM7XHRcdCAgICAgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9TVCkpXG4mIzQzO1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUKVxuJiM0MztcdFx0YWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFIHxcbiYjNDM7XHRcdFx0ICAgICBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWxsb3dfc3JjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICpzdCwgdTggKnBoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkbWFidWYgPSBkbWFfYnVmX2dldChmZCk7XG4mIzQzO1x0aWYgKElTX0VSUihkbWFidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbiYjNDM7XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRyZXQgPSBkbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0LCBwaCk7XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIHNyY19obmRsLCBib29sIGV4dGVuZGVkLCB1MTYgKnN0KVxuJiM0Mzt7XG4mIzQzO1x0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHR1OCBwaDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRilcbiYjNDM7XHRcdHJldCA9IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKHNyY19obmRsLCBleHRlbmRlZCwgc3QsIFx1MDAyNnBoKTtcbiYjNDM7XHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUpXG4mIzQzO1x0XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXG4mIzQzO1x0XHRcdFx0XHQgICAgICByZXFfdHlwZSwgc3JjX2huZGwsIHN0KTtcbiYjNDM7XHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVClcbiYjNDM7XHRcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHJlcV90eXBlLCBzcmNfaG5kbCwgc3QpO1xuJiM0MztcdGVsc2UgaWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpXG4mIzQzO1x0XHQqc3QgPSAwO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgIT0gMClcbiYjNDM7XHRcdCpzdCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiYjNDM7XHRcdFx0dTMyIGZsYWdzLFxuJiM0MztcdFx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0c2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgcmVzb2x2ZTtcbiYjNDM7XHR1MzIgdXNlcl9mbGFncywgYWxsb3dfc3JjO1xuJiM0MztcdGJvb2wgZXh0ZW5kZWQ7XG4mIzQzO1x0dTE2IHRhZyA9IDA7XG4mIzQzO1x0dTggcGggPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdmRldi1cdTAwM2V0cGhfb3B0X2luKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcbiYjNDM7XHRcdFx0XHQgc2l6ZW9mKHJlc29sdmUpKTtcbiYjNDM7XHRpZiAocmV0ICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cmVzb2x2ZSwgYXJnLCBzaXplb2YocmVzb2x2ZSkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHVzZXJfZmxhZ3MgPSByZXNvbHZlLmZsYWdzO1xuJiM0MztcdGV4dGVuZGVkID0gISEodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcbiYjNDM7XHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0dXNlcl9mbGFncyBcdTAwMjY9IH5WRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4mIzQzO1xuJiM0MztcdGFsbG93X3NyYyA9IHZmaW9fcGNpX2dldF90cGhfcmVzb2x2ZV9hbGxvd19zcmModmRldik7XG4mIzQzO1x0aWYgKHVzZXJfZmxhZ3MgXHUwMDI2IH5hbGxvd19zcmMgfHwgIWlzX3Bvd2VyX29mXzIodXNlcl9mbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzb2x2ZS52YWxpZCA9IDA7XG4mIzQzO1x0cmVzb2x2ZS5waCA9IDA7XG4mIzQzO1x0cmVzb2x2ZS5zdCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VyX2ZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRikge1xuJiM0MztcdFx0cmV0ID0gdmZpb19wY2lfZ2V0X2RtYWJ1Zl90cGgocmVzb2x2ZS5zcmMsIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2dGFnLCBcdTAwMjZwaCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmVzb2x2ZS5waCA9IHBoO1xuJiM0MztcdFx0cmVzb2x2ZS52YWxpZCA9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9QSDtcbiYjNDM7XHRcdGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgXHUwMDNlPSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKSB7XG4mIzQzO1x0XHRcdHJlc29sdmUuc3QgPSB0YWc7XG4mIzQzO1x0XHRcdHJlc29sdmUudmFsaWQgfD0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyh2ZGV2LVx1MDAzZXBkZXYsIHVzZXJfZmxhZ3MsIHJlc29sdmUuc3JjLFxuJiM0MztcdFx0XHRcdCAgICAgIGV4dGVuZGVkLCBcdTAwMjZ0YWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJlc29sdmUudmFsaWQgfD0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUO1xuJiM0MztcdHJlc29sdmUuc3QgPSB0YWc7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0cmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnJlc29sdmUsIHNpemVvZihyZXNvbHZlKSkgPyAtRUZBVUxUIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3N0X2FsbG93X3NyYyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XG4mIzQzO1x0dTMyIGFsbG93X3NyYyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUYpXG4mIzQzO1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVSlcbiYjNDM7XHRcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XG4mIzQzO1x0XHRcdCAgICAgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORSlcbiYjNDM7XHRcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX05PTkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhbGxvd19zcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0dTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0XHRzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3QgdHBoX3N0O1xuJiM0MztcdHUzMiB1c2VyX2ZsYWdzLCBhbGxvd19zcmMsIHN0X3NpemU7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZCwgc3RvcF9vbl96ZXJvO1xuJiM0MztcdHUzMiAqc3JjX2huZGwgPSBOVUxMO1xuJiM0MztcdHUxNiAqdGFncyA9IE5VTEw7XG4mIzQzO1x0aW50IHJldCwgaTtcbiYjNDM7XHR1MTYgY21kO1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbiB8fCB2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4mIzQzO1x0XHRcdFx0IHNpemVvZih0cGhfc3QpKTtcbiYjNDM7XHRpZiAocmV0ICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dHBoX3N0LCBhcmcsIHNpemVvZih0cGhfc3QpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHR1c2VyX2ZsYWdzID0gdHBoX3N0LmZsYWdzO1xuJiM0MztcdGV4dGVuZGVkID0gISEodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcbiYjNDM7XHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0dXNlcl9mbGFncyBcdTAwMjY9IH5WRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4mIzQzO1xuJiM0MztcdHN0b3Bfb25femVybyA9ICEhKHVzZXJfZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUKTtcbiYjNDM7XHRpZiAoc3RvcF9vbl96ZXJvIFx1MDAyNlx1MDAyNiAodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHVzZXJfZmxhZ3MgXHUwMDI2PSB+VkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1Q7XG4mIzQzO1xuJiM0MztcdGFsbG93X3NyYyA9IHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHZkZXYpO1xuJiM0MztcdGlmICh1c2VyX2ZsYWdzIFx1MDAyNiB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHN0X3NpemUgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUodmRldik7XG4mIzQzO1x0aWYgKHRwaF9zdC5zdGFydCBcdTAwM2U9IHN0X3NpemUgfHwgdHBoX3N0LmNvdW50IFx1MDAzZSBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8XG4mIzQzO1x0XHR0cGhfc3QuY291bnQgPT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoISh1c2VyX2ZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKSB7XG4mIzQzO1x0XHRzcmNfaG5kbCA9IG1lbWR1cF9hcnJheV91c2VyKHU2NF90b191c2VyX3B0cih0cGhfc3QuZGVzdHMpLFxuJiM0MztcdFx0XHRcdFx0ICAgICB0cGhfc3QuY291bnQsIHNpemVvZih1MzIpKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoc3JjX2huZGwpKVxuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihzcmNfaG5kbCk7XG4mIzQzO1x0fVxuJiM0MztcdHRhZ3MgPSBrY2FsbG9jKHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUxNiksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0aWYgKCF0YWdzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cGhfc3QuY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyhwZGV2LCB1c2VyX2ZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc3JjX2huZGwgPyBzcmNfaG5kbFtpXSA6IDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBleHRlbmRlZCwgXHUwMDI2dGFnc1tpXSk7XG4mIzQzO1x0XHRpZiAocmV0IHx8IChzdG9wX29uX3plcm8gXHUwMDI2XHUwMDI2IHRhZ3NbaV0gPT0gMCkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGkgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGNtZCA9IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUodmRldik7XG4mIzQzO1x0XHRyZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhwZGV2LCB0cGhfc3Quc3RhcnQsIGksIHRhZ3MpO1xuJiM0MztcdFx0dmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZSh2ZGV2LCBjbWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZSh0YWdzKTtcbiYjNDM7XHRrZnJlZShzcmNfaG5kbCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXG4ge1xuQEAgLTE2MjUsNiAmIzQzOzE5NDYsMTYgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuJiM0MztcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgYXJnc3opO1xuJiM0MztcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XG4mIzQzO1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFOlxuJiM0MztcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSh2ZGV2LCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5pbmRleCBjMTZmNDYwYzAxZDY4MS4uNTM1MTgzOWMxMzM4YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZmaW9fcGNpX3ByaXYuaFwmIzM0O1xuQEAgLTE5LDcgJiM0MzsyMCwxNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4gXHR1MzIgbnJfcmFuZ2VzO1xuIFx0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVcGRhdGVzIHByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XG4mIzQzO1x0ICogcHJvdGVjdGVkIGJ5IG1lbW9yeV9sb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdHUxNiB0cGhfc3RfZXh0O1xuJiM0MztcdHU4IHRwaF9zdDtcbiYjNDM7XHRib29sIHJldm9rZWQ7XG4mIzQzO1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4mIzQzO1x0dTggdHBoX3N0X2V4dF92YWxpZDoxO1xuJiM0MztcdHU4IHRwaF9waDoyO1xuIH07XG4gXG4gc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuQEAgLTMwLDcgJiM0Mzs0MSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdGlmICghYXR0YWNobWVudC1cdTAwM2VwZWVyMnBlZXIpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXJldm9rZWQpXG4mIzQzO1x0aWYgKFJFQURfT05DRShwcml2LVx1MDAzZXJldm9rZWQpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmICghZG1hX2J1Zl9hdHRhY2hfcmV2b2NhYmxlKGF0dGFjaG1lbnQpKVxuQEAgLTY5LDYgJiM0Mzs4MCwyNiBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGV4dGVuZGVkKSB7XG4mIzQzO1x0XHRpZiAoIXByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0X2V4dDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF92YWxpZClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0O1xuJiM0MztcdH1cbiYjNDM7XHQqcGggPSBwcml2LVx1MDAzZXRwaF9waDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcbiBcdFx0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbkBAIC0xMDEsNiAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbiBcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbiYjNDM7XHQuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLFxuIFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXG4gXHQudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsXG4gXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcbkBAIC0zMzMsNiAmIzQzOzM2NSw3MiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiYjNDM7XHR1OCBjb21wO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbiYjNDM7XHRcdFx0XHQgc2l6ZW9mKHNldF90cGgpKTtcbiYjNDM7XHRpZiAocmV0ICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRfdHBoLmZsYWdzIFx1MDAyNiB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldF90cGgucGggXHUwMDI2IH4weDMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKChzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KHNldF90cGguZG1hYnVmX2ZkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGRtYWJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZG1hYnVmLVx1MDAzZW9wcyAhPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXRfcHV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXZkZXYgIT0gdmRldikge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V0cGhfc3QgICAgICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0X2V4dCAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZ19leHQ7XG4mIzQzO1x0cHJpdi1cdTAwM2V0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7XG4mIzQzO1x0cHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQgICA9ICEhKHNldF90cGguZmxhZ3MgXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1QpO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZCA9XG4mIzQzO1x0XHQhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCk7XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcbiYjNDM7b3V0X3B1dDpcbiYjNDM7XHRkbWFfYnVmX3B1dChkbWFidWYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLjAzYzRhMDQxNDI2NGVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMTEsNiAmIzQzOzExLDEyIEBAXG4gLyogQ2FwIG1heGltdW0gbnVtYmVyIG9mIGlvZXZlbnRmZHMgcGVyIGRldmljZSAoYXJiaXRyYXJ5KSAqL1xuICNkZWZpbmUgVkZJT19QQ0lfSU9FVkVOVEZEX01BWFx0XHQxMDAwXG4gXG4mIzQzO2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7XG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCA9IDAsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCA9IDEsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bmV4dDtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZVx0KnZkZXY7XG5AQCAtMTE4LDYgJiM0MzsxMjQsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgX191c2VyICphcmcsXG4gXHRcdFx0XHQgIHNpemVfdCBhcmdzeik7XG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplX3QgYXJnc3opO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuICNlbHNlXG5AQCAtMTI4LDYgJiM0MzsxMzgsMTQgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4mIzQzO1x0XHRcdFx0ICBzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVOT1RUWTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuaW5kZXggZDEyMDNkYTU2ZmM1ZjcuLjE0ZThlYjYxYTYyYzA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5AQCAtMTEzLDYgJiM0MzsxMTMsMjkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHtcbiBcdCAqL1xuIFx0dm9pZCAoKnVucGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xuIFxuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBnZXRfcGNpX3RwaDpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBzdGVlcmluZyBtZXRhZGF0YSBmb3JcbiYjNDM7XHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cbiYjNDM7XHQgKiBvdXRib3VuZCBUTFBzIHRhcmdldGluZyB0aGUgZXhwb3J0ZXIgZm9yIHBlZXItdG8tcGVlciBETUEuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcbiYjNDM7XHQgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUXG4mIzQzO1x0ICogQHN0ZWVyaW5nX3RhZzogUmV0dXJucyB0aGUgcmF3IFRQSCBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWRcbiYjNDM7XHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcbiYjNDM7XHQgKiBAcGg6IFJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnQgKDItYml0IHZhbHVlKVxuJiM0MztcdCAqXG4mIzQzO1x0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcbiYjNDM7XHQgKiBcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVPUE5PVFNVUFAgd2hlblxuJiM0MztcdCAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmV0dXJuZWQgbWV0YWRhdGEgZm9sbG93cyB0aGUgbGlmZXRpbWUgcnVsZXMgZG9jdW1lbnRlZCBmb3JcbiYjNDM7XHQgKiBkbWFfYnVmX2dldF9wY2lfdHBoKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50ICgqZ2V0X3BjaV90cGgpKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdCAgIHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuJiM0MztcbiBcdC8qKlxuIFx0ICogQG1hcF9kbWFfYnVmOlxuIFx0ICpcbkBAIC01NjMsNiAmIzQzOzU4Niw4IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdFx0ICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4gaW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4gdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4mIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuIFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbmluZGV4IGJlNjhjZDE3ZjJmODMzLi5hZWFmNzAxZTc5NjViMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuQEAgLTksNiAmIzQzOzksOCBAQFxuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7XG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcbkBAIC0yMSwyNiAmIzQzOzIzLDY5IEBAIGVudW0gdHBoX21lbV90eXBlIHtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfc3RkX3RwaF9zdXBwb3J0ZWQgLSBjaGVjayBzdGFuZGFyZCBUUEggcmVxdWVzdGVyIHN1cHBvcnRcbiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2VcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBcXFxuJiM0MztcdCgocGRldiktXHUwMDNldHBoX21heF90eXBlIFx1MDAzZT0gUENJX1RQSF9SRVFfVFBIX09OTFkpXG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX2V4dF90cGhfc3VwcG9ydGVkIC0gY2hlY2sgZXh0ZW5kZWQgVFBIIHJlcXVlc3RlciBzdXBwb3J0XG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikgXFxcbiYjNDM7XHQoKHBkZXYpLVx1MDAzZXRwaF9tYXhfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKVxuIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0ICB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpO1xuLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4tXHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO2ludCBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHN0YXJ0LFxuJiM0MztcdFx0XHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xuJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQoc3RydWN0IHBjaV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHRcdCAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xuJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XG4gdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLCB1OCByZXFfdHlwZSk7XG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpO1xuIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiYjNDM7dTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuJiM0Mztib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuICNlbHNlXG4mIzQzOyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZVxuJiM0MzsjZGVmaW5lIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikgZmFsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxuJiM0Mzt7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHRcdFx0ICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSxcbiYjNDM7XHRcdFx0XHRcdCAgdTE2ICp0YWcpXG4mIzQzO3sgcmV0dXJuIC1FSU5WQUw7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG4tc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICB1OCByZXFfdHlwZSlcbiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7IHJldHVybiBQQ0lfVFBIX0xPQ19OT05FOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gUENJX1RQSF9SRVFfRElTQUJMRTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gZmFsc2U7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li41ZWQ1ODc5OWE5YjEyOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC00NzIsNyAmIzQzOzQ3Miw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHVuc2lnbmVkIGludFx0YXRzX2VuYWJsZWQ6MTtcdFx0LyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi9cbiBcdHVuc2lnbmVkIGludFx0cGFzaWRfZW5hYmxlZDoxO1x0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXG4gXHR1bnNpZ25lZCBpbnRcdHByaV9lbmFibGVkOjE7XHRcdC8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi9cbi1cdHVuc2lnbmVkIGludFx0dHBoX2VuYWJsZWQ6MTtcdFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cbiBcdHVuc2lnbmVkIGludFx0Zm1fZW5hYmxlZDoxO1x0XHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21hbmFnZWQ6MTtcdFx0LyogTWFuYWdlZCB2aWEgZGV2cmVzICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21zaV9tYW5hZ2VkOjE7XHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xuQEAgLTU4OCw3ICYjNDM7NTg3LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4tXHR1MTZcdFx0dHBoX2NhcDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfY2FwOjEzO1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4mIzQzO1x0dTE2XHRcdHRwaF9tYXhfdHlwZToyOyAvKiBOZWdvdGlhdGVkIG1heCBUUEggcmVxdWVzdGVyIHR5cGVcbiYjNDM7XHRcdFx0XHRcdCAgIGJldHdlZW4gZGV2aWNlIGFuZCByb290IHBvcnQgKi9cbiYjNDM7XHR1MTZcdFx0dHBoX2VuYWJsZWQ6MTtcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cbiBcdHU4XHRcdHRwaF9tb2RlO1x0LyogVFBIIG1vZGUgKi9cbiBcdHU4XHRcdHRwaF9yZXFfdHlwZTtcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbmluZGV4IDlhMTY3NGMxNTJhYTI5Li5kNjA2NGZhOWU4MGE2OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuQEAgLTE0OSw2ICYjNDM7MTQ5LDkgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcbiBcdHN0cnVjdCBub3RpZmllcl9ibG9ja1x0bmI7XG4gXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRtZW1vcnlfbG9jaztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRtYWJ1ZnM7XG4mIzQzO1x0dThcdFx0XHR0cGhfb3B0X2luO1xuJiM0MztcdHU4XHRcdFx0dHBoX3BvbGljeTtcbiYjNDM7XHR1MzJcdFx0XHR0cGhfY2FwX3ZpcnQ7XG4gfTtcbiBcbiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZWUuLjliYzNjZWY3YTg5YWM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuQEAgLTE1MzQsNiAmIzQzOzE1MzQsMTUwIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuICAqL1xuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUIGFzc29jaWF0ZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YVxuJiM0MzsgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5XG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiBvbiB0aGlzIGRldmljZSwgYW5kIHRoZSBkZXZpY2UgbXVzdCByZXBvcnRcbiYjNDM7ICogVFBIIENvbXBsZXRlciBzdXBwb3J0IGluIERldmljZSBDYXBhYmlsaXRpZXMgMiAoYml0cyAxMzoxMik7IHJlcXVlc3RzXG4mIzQzOyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG9cbiYjNDM7ICogcmVwb3J0IHRoZSBFeHRlbmRlZCBUUEggQ29tcGxldGVyIGVuY29kaW5nLiBPdGhlcndpc2UgdGhlIGlvY3RsXG4mIzQzOyAqIHJldHVybnMgLUVPUE5PVFNVUFAuXG4mIzQzOyAqXG4mIzQzOyAqIEBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuXG4mIzQzOyAqXG4mIzQzOyAqIDgtYml0IFNUIChAc3RlZXJpbmdfdGFnKSBhbmQgMTYtYml0IEV4dGVuZGVkIFNUIChAc3RlZXJpbmdfdGFnX2V4dCkgYXJlXG4mIzQzOyAqIGRpc3RpbmN0IG5hbWVzcGFjZXMuIEBmbGFncyBpcyB0aGUgYXV0aG9yaXRhdGl2ZSB2YWxpZGl0eSBtYXNrIGZvciB0aGVcbiYjNDM7ICogdHdvIG5hbWVzcGFjZXM6IFZGSU9fRE1BX0JVRl9UUEhfU1QgbWFya3MgQHN0ZWVyaW5nX3RhZyB2YWxpZCBhbmRcbiYjNDM7ICogVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQgbWFya3MgQHN0ZWVyaW5nX3RhZ19leHQgdmFsaWQuIEFuIGltcG9ydGVyXG4mIzQzOyAqIHJlcXVlc3RzIG9uZSBuYW1lc3BhY2UgYW5kIHJlY2VpdmVzIHRoZSBtYXRjaGluZyB2YWx1ZS5cbiYjNDM7ICpcbiYjNDM7ICogRWFjaCBTRVQgZnVsbHkgcmVwbGFjZXMgdGhlIGRtYS1idWYmIzM5O3MgVFBIIHN0YXRlIGZvciBmdXR1cmUgcXVlcmllc1xuJiM0MzsgKiBvbmx5LiBBIG5hbWVzcGFjZSB3aG9zZSBmbGFnIGJpdCBpcyBjbGVhciBpcyByZXBvcnRlZCBhcyB1bnN1cHBvcnRlZFxuJiM0MzsgKiB0byBmdXR1cmUgaW1wb3J0ZXJzOyBhbiBpbXBvcnRlciB0aGF0IGhhcyBhbHJlYWR5IHJldHJpZXZlZCBhIHZhbHVlXG4mIzQzOyAqIGlzIHVuYWZmZWN0ZWQuIEBmbGFncyA9PSAwIGxlYXZlcyBib3RoIG5hbWVzcGFjZXMgdW5zdXBwb3J0ZWQgZm9yXG4mIzQzOyAqIGZ1dHVyZSBpbXBvcnRlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIEBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmRlZmluZWQgQGZsYWdzIGFuZCBAcGggYml0cyBtdXN0IGFsd2F5cyBiZSB6ZXJvLlxuJiM0MzsgKlxuJiM0MzsgKiBVc2Vyc3BhY2UgbXVzdCBjb25maWd1cmUgVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuXG4mIzQzOyAqIGltcG9ydGVyLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RcdFx0KDEgXHUwMDNjXHUwMDNjIDApXG4mIzQzOyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFRcdFx0KDEgXHUwMDNjXHUwMDNjIDEpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7XG4mIzQzO1x0X19zMzJcdGRtYWJ1Zl9mZDtcbiYjNDM7XHRfX3UzMlx0ZmxhZ3M7XG4mIzQzO1x0X191MTZcdHN0ZWVyaW5nX3RhZ19leHQ7XG4mIzQzO1x0X191OFx0c3RlZXJpbmdfdGFnO1xuJiM0MztcdF9fdThcdHBoO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFx0XHQxNFxuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkVcdDE1XG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcdDE2XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCAtIENvbnRyb2wgYW5kIHF1ZXJ5IFBDSSBUUEggY2FwYWJpbGl0aWVzXG4mIzQzOyAqXG4mIzQzOyAqIFNFVDogT3B0LWluIHRvIFRQSCBmZWF0dXJlIGZvciB0aGUgZGV2aWNlOyBmbGFncyBtdXN0IGJlIHplcm8uXG4mIzQzOyAqIEdFVDogUmV0dXJuIHN1cHBvcnRlZCBUUEggY2FwYWJpbGl0eSBiaXRzIChzZWUgVkZJT19ERVZJQ0VfVFBIX0NBUF8qKVxuJiM0MzsgKiAgICAgIGluIGZsYWdzLiBSZXR1cm5zIGVycm9yIGlmIFNFVCBoYXMgbm90IGJlZW4gaW52b2tlZCBmaXJzdC5cbiYjNDM7ICpcbiYjNDM7ICogVXNlcnNwYWNlIG11c3QgZmlyc3QgaW52b2tlIFNFVCBvbiB0aGlzIGZlYXR1cmUgdG8gZW5hYmxlIFRQSCBzdXBwb3J0LFxuJiM0MzsgKiByZWNlaXZlIHZhbGlkIGNhcGFiaWxpdHkgYml0cyB2aWEgR0VULCBnYWluIHBlcm1pc3Npb24gZm9yIHVzaW5nXG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkUgLyBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCwgYW5kIGFjY2Vzc1xuJiM0MzsgKiB0aGUgdmlydHVhbGl6ZWQgVFBIIGNhcGFiaWxpdHkgcmVnaXN0ZXJzIHZpYSBWRklPIGNvbmZpZyBzcGFjZSBhY2Nlc3Nlcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB7XG4mIzQzO1x0X191MzIgZmxhZ3M7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBETUFCVUYgc291cmNlIHJlc29sdmUgcHJvY2Vzc2luZyBoaW50IHN1cHBvcnRlZCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEhcdCgxdSBcdTAwM2NcdTAwM2MgMClcbiYjNDM7LyogRE1BQlVGIHNvdXJjZSBUUEhfU1QgYmF0Y2ggcHJvZ3JhbW1pbmcgc3VwcG9ydGVkICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUZcdFx0KDF1IFx1MDAzY1x1MDAzYyAxKVxuJiM0MzsvKiBDUFUgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVVx0XHQoMXUgXHUwMDNjXHUwMDNjIDIpXG4mIzQzOy8qIE5PTkUgc291cmNlIChtZWFucyBzdGVlcmluZyB0YWcgaXMgemVybykgVFBIX1NUIGJhdGNoIHByb2dyYW1taW5nIHN1cHBvcnRlZCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORVx0XHQoMXUgXHUwMDNjXHUwMDNjIDMpXG4mIzQzOy8qIERNQUJVRiBzb3VyY2UgcmVzb2x2ZSBzdGVlcmluZyB0YWcgc3VwcG9ydGVkICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9TVFx0KDF1IFx1MDAzY1x1MDAzYyA0KVxuJiM0MzsvKiBDUFUgc291cmNlIHJlc29sdmUgc3RlZXJpbmcgdGFnIHN1cHBvcnRlZCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9DUFVfU1RcdCgxdSBcdTAwM2NcdTAwM2MgNSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkUgLSBSZXNvbHZlIFRQSCBhdHRyaWJ1dGVzIGZyb20gZ2l2ZW4gc291cmNlXG4mIzQzOyAqXG4mIzQzOyAqIEdFVCBvbmx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlcXVpcmVzIHByaW9yIHN1Y2Nlc3NmdWwgU0VUIG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBILCBvdGhlcndpc2VcbiYjNDM7ICogdGhpcyBmZWF0dXJlIHdpbGwgcmV0dXJuIGVycm9yLlxuJiM0MzsgKlxuJiM0MzsgKiBAZmxhZ3M6IElOIC0gc291cmNlIHR5cGUgc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfU1JDXyopXG4mIzQzOyAqICAgICAgICAgYW5kIHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2Ugc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpXG4mIzQzOyAqIEBzcmM6ICAgSU4gLSBzb3VyY2UgaWRlbnRpZmllciwgZS5nLiBkbWFidWYgZmQgd2hlbiBTUkNfRE1BQlVGIGlzIHNldCBpblxuJiM0MzsgKiAgICAgICAgIGZsYWdzXG4mIzQzOyAqIEB2YWxpZDogT1VUIC0gYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcywgc2VlXG4mIzQzOyAqICAgICAgICAgVkZJT19ERVZJQ0VfVFBIX1ZBTElEXypcbiYjNDM7ICogQHBoOiAgICBPVVQgLSBUUEggcHJvY2Vzc2luZyBoaW50ICh2YWxpZCB3aGVuIFZBTElEX1BIIGlzIHNldCBpbiB2YWxpZClcbiYjNDM7ICogQHN0OiAgICBPVVQgLSBUUEggc3RlZXJpbmcgdGFnICh2YWxpZCB3aGVuIFZBTElEX1NUIGlzIHNldCBpbiB2YWxpZClcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIHtcbiYjNDM7XHRfX3UzMiBmbGFncztcbiYjNDM7XHRfX3UzMiBzcmM7XG4mIzQzO1x0X191OCAgdmFsaWQ7XG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIICgxdSBcdTAwM2NcdTAwM2MgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUICgxdSBcdTAwM2NcdTAwM2MgMSkgLyogc3QgaG9sZHMgdmFsaWQgc3RlZXJpbmcgdGFnICovXG4mIzQzO1x0X191OCAgcGg7XG4mIzQzO1x0X191MTYgc3Q7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCAtIEJhdGNoIHByb2dyYW0gYXJjaGl0ZWN0ZWQgc3RlZXJpbmcgdGFnXG4mIzQzOyAqIHRhYmxlIGVudHJpZXNcbiYjNDM7ICogUmV0dXJuIHZhbHVlOiBcdTAwM2U9MCA9IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzO1xuJiM0MzsgKiAgICAgICAgICAgICAgIFx1MDAzYzAgID0gbmVnYXRpdmUgZXJybm9cbiYjNDM7ICpcbiYjNDM7ICogU0VUIG9ubHlcbiYjNDM7ICpcbiYjNDM7ICogQWRkaXRpb25hbCBjb25zdHJhaW50OiBVc2Vyc3BhY2UgbXVzdCBjb21wbGV0ZSB0d28gcHJlcmVxdWlzaXRlIHN0ZXBzXG4mIzQzOyAqIGJlZm9yZSBpbnZva2luZyB0aGlzIGZlYXR1cmU6XG4mIzQzOyAqIDEuIENhbGwgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggd2l0aCBTRVQgdG8gZW5hYmxlIHZmaW8gVFBIIHBlcm1pc3Npb247XG4mIzQzOyAqIDIuIFdyaXRlIHRoZSBUUEggY29udHJvbCByZWdpc3RlciB0byBhY3RpdmF0ZSBkZXZpY2UgaGFyZHdhcmUgVFBIIGxvZ2ljLlxuJiM0MzsgKlxuJiM0MzsgKiBAZmxhZ3M6IElOIC0gc291cmNlIHR5cGUgc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfU1JDXyopIGFuZFxuJiM0MzsgKiAgICAgICAgIHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2Ugc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpIGFuZFxuJiM0MzsgKiAgICAgICAgIGZhaWx1cmUgcG9saWN5IChzZWUgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpXG4mIzQzOyAqIEBzdGFydDogSU4gLSBmaXJzdCBzdGVlcmluZyB0YWcgdGFibGUgaW5kZXggLyBNU0ktWCB2ZWN0b3JcbiYjNDM7ICogQGNvdW50OiBJTiAtIG51bWJlciBvZiBjb250aWd1b3VzIGVudHJpZXMgdG8gcHJvZ3JhbVxuJiM0MzsgKiBAZGVzdHM6IElOIC0gdXNlciBwb2ludGVyIHRvIGFycmF5IG9mIHNvdXJjZSB1MzIgdmFsdWVzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3Qge1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdF9fdTE2IHN0YXJ0O1xuJiM0MztcdF9fdTE2IGNvdW50O1xuJiM0MztcdF9fYWxpZ25lZF91NjQgZGVzdHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBTb3VyY2UgaG9sZHMgZG1hLWJ1ZiBmZCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGICAgICAgKDF1IFx1MDAzY1x1MDAzYyAwKVxuJiM0MzsvKiBVc2UgZXh0ZW5kZWQgMTYtYml0IHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2UgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERURcdCgxdSBcdTAwM2NcdTAwM2MgMSlcbiYjNDM7LyogU291cmNlIGhvbGRzIHZvbGF0aWxlIG1lbW9yeSBDUFUgSUQgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRVx0KDF1IFx1MDAzY1x1MDAzYyAyKVxuJiM0MzsvKiBTb3VyY2UgaG9sZHMgcGVyc2lzdGVudCBtZW1vcnkgQ1BVIElEICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVFx0KDF1IFx1MDAzY1x1MDAzYyAzKVxuJiM0MzsvKiBUUEhfU1Qgb25seTogc2V0IHN0ZWVyaW5nIHRhZyB0byB6ZXJvICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FXHQoMXUgXHUwMDNjXHUwMDNjIDQpXG4mIzQzOy8qIFRQSF9TVCBvbmx5OiBmYWlsIGlmIHJlc29sdmVkIHN0ZWVyaW5nIHRhZyBpcyB6ZXJvICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1RcdCgxdSBcdTAwM2NcdTAwM2MgNSlcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJRV9UUEgmIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9nZXRfY3B1X3N0X2V4dCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9zZXRfc3RfZW50cmllcyYjMzQ7LAogICAgJiMzNDtwY2llX2VuYWJsZV90cGhfZXh0JiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBWRklPIFBDSSBhbmQgRE1BLUJVRiB0byBzdXBwb3J0IFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIEl0IGFkZHMgbmV3IFZGSU8gaW9jdGxzL2ZlYXR1cmVzIGZvciBUUEggY29uZmlndXJhdGlvbiBhbmQgcmVzb2x1dGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGIwMGM2MjQ3NzFmYzA3NjRmNzc3MWY3MDVjMTU5MGY3ZjY0NGM3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDE0IDE2OjA1OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKaW5kZXggZDUwNGM2MzZkYzI5NGUuLmU4MzE0ZWQyNDBkMzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKQEAgLTkzOSw2ICYjNDM7OTM5LDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKICAqICAgICAtIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudCgpCiAgKiAgICAgLSBkbWFfYnVmX3ZtYXAoKQogICogICAgIC0gZG1hX2J1Zl92dW5tYXAoKQomIzQzOyAqICAgICAtIGRtYV9idWZfZ2V0X3BjaV90cGgoKQogICoKICAqIDIuIEltcG9ydGVycyBtdXN0IG5vdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlCiAgKiAgICBmdW5jdGlvbnM6CkBAIC05NzksNiAmIzQzOzk4MCw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiAgKiAgICAgLSAmYW1wO2RtYV9idWZfb3BzLnVubWFwX2RtYV9idWYoKQogICogICAgIC0gJmFtcDtkbWFfYnVmX29wcy52bWFwKCkKICAqICAgICAtICZhbXA7ZG1hX2J1Zl9vcHMudnVubWFwKCkKJiM0MzsgKiAgICAgLSAmYW1wO2RtYV9idWZfb3BzLmdldF9wY2lfdHBoKCkKICAqCiAgKiAzLiBFeHBvcnRlcnMgbXVzdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlCiAgKiAgICBmdW5jdGlvbnM6CkBAIC0xMTQ0LDYgJiM0MzsxMTQ2LDM2IEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiB9CiBFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX3VucGluLCAmIzM0O0RNQV9CVUYmIzM0Oyk7CiAKJiM0MzsvKioKJiM0MzsgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhCiYjNDM7ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeQomIzQzOyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1QKJiM0MzsgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZQomIzQzOyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludAomIzQzOyAqCiYjNDM7ICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsICZhbXA7ZG1hX2J1Zl9vcHMuZ2V0X3BjaV90cGggY2FsbGJhY2suCiYjNDM7ICoKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoICZhbXA7ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlCiYjNDM7ICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZQomIzQzOyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgc3RlZXJpbmcgdGFnIGFuZCBwcm9jZXNzaW5nIGhpbnQgYXJlIG9ubHkgdmFsaWQgdW50aWwgdGhlCiYjNDM7ICogZXhwb3J0ZXIgaW52YWxpZGF0ZXMgdGhlIGN1cnJlbnQgbWFwcGluZyAoc2lnbmFsbGVkIHRvIHRoZSBpbXBvcnRlciB2aWEKJiM0MzsgKiAmYW1wO2RtYV9idWZfYXR0YWNoX29wcy5tb3ZlX25vdGlmeSkuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3CiYjNDM7ICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLgomIzQzOyAqLwomIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCkKJiM0Mzt7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CWlmICghZG1hYnVmLSZndDtvcHMtJmd0O2dldF9wY2lfdHBoKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gZG1hYnVmLSZndDtvcHMtJmd0O2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2dldF9wY2lfdHBoLCAmIzM0O0RNQV9CVUYmIzM0Oyk7CiYjNDM7CiAvKioKICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJsZSBvZiB0aGUgYXR0YWNobWVudDsKICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3RwaC5jIGIvZHJpdmVycy9wY2kvdHBoLmMKaW5kZXggNjU1ZmZkNjBlNjJmNmEuLmU2YTg1MGFiMmIwMzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS90cGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS90cGguYwpAQCAtMTY1LDE0ICYjNDM7MTY1LDYyIEBAIHN0YXRpYyB1OCBnZXRfc3RfbW9kZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAgKi8KIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXUzMiByZWc7CiYjNDM7CXUzMiByZWcgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBkZXYtJmd0O3RwaF9jYXApCiYjNDM7CQlyZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCAmYW1wO3JlZyk7CiAKLQlyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpOwomIzQzOwlyZXR1cm4gcmVnICZhbXA7IFBDSV9UUEhfQ0FQX0xPQ19NQVNLOwogfQogRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTsKIAomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguCiYjNDM7ICovCiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZGV2LSZndDt0cGhfcmVxX3R5cGU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBUUEggQ29tcGxldGVyIHN1cHBvcnQKJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlICYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWQmIzM0OyBmaWVsZCAoYml0cyAxMzoxMikgb2YgRGV2aWNlCiYjNDM7ICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvCiYjNDM7ICogJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZQomIzQzOyAqIGRlZmluZWQgdmFsdWVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLAomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvcgomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILgomIzQzOyAqLwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdTMyIHJlZzsKJiM0MzsKJiM0MzsJaWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgJmFtcDtyZWcpKQomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOwomIzQzOwlpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpCiYjNDM7CQlyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpKSB7CiYjNDM7CWNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOgomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWTsKJiM0MzsJY2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDoKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKTsKJiM0MzsKIC8qCiAgKiBSZXR1cm4gdGhlIHNpemUgb2YgU1QgdGFibGUuIElmIFNUIHRhYmxlIGlzIG5vdCBpbiBUUEggUmVxdWVzdGVyIEV4dGVuZGVkCiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSAmIzQzOyAxLgpAQCAtMTg0LDkgJiM0MzsyMzIsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAkvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqLwogCWxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7Ci0KLQkvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogZGVmaW5lZCBpbiBwY2lfcmVncy5oICovCi0JbG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTsKIAlpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUCkKIAkJcmV0dXJuIDA7CiAKQEAgLTIzMSwyMCAmIzQzOzI3NiwyMiBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKQogfQogCiAvKioKLSAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQKLSAqIHdpdGggYSBzcGVjaWZpYyBDUFUKJiM0MzsgKiBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkKJiM0MzsgKiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBDUFUsIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHR5cGUgc2VsZWN0aW9uCiAgKiBAcGRldjogUENJIGRldmljZQogICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKQomIzQzOyAqIEByZXFfdHlwZTogVFBIIHJlcXVlc3RlciB0eXBlIHRvIHNlbGVjdCBTVCBuYW1lc3BhY2UKICAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkCiAgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWQKICAqCi0gKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEKLSAqIHNwZWNpZmljIENQVSBhcyBpbmRpY2F0ZWQgYnkgY3B1LgomIzQzOyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLAomIzQzOyAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgVFBIIHJlcXVlc3RlciB0eXBlIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBTVCBuYW1lc3BhY2UuCiYjNDM7ICogVmFsaWRhdGVzIHJlcXVlc3RlciB0eXBlIGFnYWluc3QgaGFyZHdhcmUgbmVnb3RpYXRlZCBjYXBhYmlsaXR5IGxpbWl0cy4KICAqCiAgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiAgKi8KLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKLQkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKQomIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkJICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZykKIHsKICNpZmRlZiBDT05GSUdfQUNQSQogCXN0cnVjdCBwY2lfZGV2ICpycDsKQEAgLTI1Myw2ICYjNDM7MzAwLDEwIEBAIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAl1MzIgY3B1X3VpZDsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHwKJiM0MzsJCXJlcV90eXBlICZndDsgcGRldi0mZ3Q7dHBoX21heF90eXBlKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJcmV0ID0gYWNwaV9nZXRfY3B1X3VpZChjcHUsICZhbXA7Y3B1X3VpZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMjY4LDM1ICYjNDM7MzE5LDU0IEBAIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JKnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi0mZ3Q7dHBoX3JlcV90eXBlLCAmYW1wO2luZm8pOwomIzQzOwkqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCByZXFfdHlwZSwgJmFtcDtpbmZvKTsKIAotCXBjaV9kYmcocGRldiwgJiMzNDtnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgY3B1PSVkLCB0YWc9JSMwNHhcbiYjMzQ7LAomIzQzOwlwY2lfZGJnKHBkZXYsICYjMzQ7Z2V0IHN0ZWVyaW5nIHRhZzogbWVtX3R5cGU9JXMsIHJlcV90eXBlPSV1LCBjcHU9JWQsIHRhZz0lIzA0eFxuJiMzNDssCiAJCShtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gJiMzNDt2b2xhdGlsZSYjMzQ7IDogJiMzNDtwZXJzaXN0ZW50JiMzNDssCi0JCWNwdSwgKnRhZyk7CiYjNDM7CQlyZXFfdHlwZSwgY3B1LCAqdGFnKTsKIAogCXJldHVybiAwOwogI2Vsc2UKIAlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgogfQotRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTsKJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KTsKIAogLyoqCi0gKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5CiYjNDM7ICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZAomIzQzOyAqIHdpdGggYSBzcGVjaWZpYyBDUFUKICAqIEBwZGV2OiBQQ0kgZGV2aWNlCi0gKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4Ci0gKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgd3JpdHRlbgomIzQzOyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSkKJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZAomIzQzOyAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZAogICoKLSAqIEZpZ3VyZSBvdXQgdGhlIHByb3BlciBsb2NhdGlvbiBvZiBTVCB0YWJsZSwgZWl0aGVyIGluIHRoZSBNU0ktWCB0YWJsZSBvcgotICogaW4gdGhlIFRQSCBFeHRlbmRlZCBDYXBhYmlsaXR5IHNwYWNlLCBhbmQgd3JpdGUgdGhlIFN0ZWVyaW5nIFRhZyBpbnRvCi0gKiB0aGUgU1QgZW50cnkgcG9pbnRlZCBieSBpbmRleC4KJiM0MzsgKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSwKJiM0MzsgKiB1c2luZyB0aGUgZGVmYXVsdCBuZWdvdGlhdGVkIFRQSCByZXF1ZXN0ZXIgdHlwZS4KICAqCiAgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiAgKi8KLWludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkJdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQocGRldiwgbWVtX3R5cGUsIHBkZXYtJmd0O3RwaF9tYXhfdHlwZSwKJiM0MzsJCQkJICAgICAgIGNwdSwgdGFnKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2llX3RwaF9zZXRfc3RfZW50cmllcyAtIEJhdGNoIHNldCBTdGVlcmluZyBUYWcgZW50cmllcyBpbiB0aGUgU1QgdGFibGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBzdGFydDogc3RhcnRpbmcgU1QgdGFibGUgaW5kZXgKJiM0MzsgKiBAY291bnQ6IG51bWJlciBvZiBjb250aWd1b3VzIGVudHJpZXMgdG8gd3JpdGUKJiM0MzsgKiBAdGFnczogYXJyYXkgb2YgdTE2IHRhZyB2YWx1ZXMgdG8gcHJvZ3JhbQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gZW50cmllcywgb3IgbmVnYXRpdmUgZXJybm8KJiM0MzsgKi8KJiM0MztpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCwKJiM0MzsJCQkgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpCiB7Ci0JdTMyIGxvYzsKIAlpbnQgZXJyID0gMDsKJiM0MzsJdTMyIGxvYywgaTsKIAogCWlmICghcGRldi0mZ3Q7dHBoX2NhcCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMDYsNyAmIzQzOzM3Niw3IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKIAogCS8qIE5vIG5lZWQgdG8gd3JpdGUgdGFnIGlmIGRldmljZSBpcyBpbiAmIzM0O05vIFNUIE1vZGUmIzM0OyAqLwogCWlmIChwZGV2LSZndDt0cGhfbW9kZSA9PSBQQ0lfVFBIX1NUX05TX01PREUpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIGNvdW50OwogCiAJLyoKIAkgKiBEaXNhYmxlIFRQSCBiZWZvcmUgdXBkYXRpbmcgU1QgdG8gYXZvaWQgcG90ZW50aWFsIGluc3RhYmlsaXR5IGFzCkBAIC0zMTUsMzEgJiM0MzszODUsNDcgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKQogCXNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7CiAKIAlsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwotCS8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqLwotCWxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7Ci0KLQlzd2l0Y2ggKGxvYykgewotCWNhc2UgUENJX1RQSF9MT0NfTVNJWDoKLQkJZXJyID0gcGNpX21zaXhfd3JpdGVfdHBoX3RhZyhwZGV2LCBpbmRleCwgdGFnKTsKLQkJYnJlYWs7Ci0JY2FzZSBQQ0lfVFBIX0xPQ19DQVA6Ci0JCWVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBpbmRleCwgdGFnKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZXJyKSB7Ci0JCXBjaWVfZGlzYWJsZV90cGgocGRldik7Ci0JCXJldHVybiBlcnI7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN3aXRjaCAobG9jKSB7CiYjNDM7CQljYXNlIFBDSV9UUEhfTE9DX01TSVg6CiYjNDM7CQkJZXJyID0gcGNpX21zaXhfd3JpdGVfdHBoX3RhZyhwZGV2LCBzdGFydCAmIzQzOyBpLCB0YWdzW2ldKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgUENJX1RQSF9MT0NfQ0FQOgomIzQzOwkJCWVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBzdGFydCAmIzQzOyBpLCB0YWdzW2ldKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChlcnIgIT0gMCkgewomIzQzOwkJCXBjaV9lcnIocGRldiwgJiMzNDtmYWlsZWQgdG8gc2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSV1LCB0YWdzPSV1LCByZXQ9JWRcbiYjMzQ7LAomIzQzOwkJCQkobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gJiMzNDtNU0ktWCYjMzQ7IDogJiMzNDtTVCYjMzQ7LAomIzQzOwkJCQlzdGFydCAmIzQzOyBpLCB0YWdzW2ldLCBlcnIpOwomIzQzOwkJCXBjaWVfZGlzYWJsZV90cGgocGRldik7CiYjNDM7CQkJcmV0dXJuIGkgJmd0OyAwID8gaSA6IGVycjsKJiM0MzsJCX0KIAl9CiAKIAlzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSk7CiAKLQlwY2lfZGJnKHBkZXYsICYjMzQ7c2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSVkLCB0YWc9JSMwNHhcbiYjMzQ7LAotCQkobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gJiMzNDtNU0ktWCYjMzQ7IDogJiMzNDtTVCYjMzQ7LCBpbmRleCwgdGFnKTsKJiM0MzsJcGNpX2RiZyhwZGV2LCAmIzM0O2JhdGNoIHNldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBzdGFydD0ldSwgY291bnQ9JXUgc3VjY2VzcyFcbiYjMzQ7LAomIzQzOwkJKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSA/ICYjMzQ7TVNJLVgmIzM0OyA6ICYjMzQ7U1QmIzM0Oywgc3RhcnQsIGNvdW50KTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc2V0X3N0X2VudHJpZXMpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnkKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBpbmRleDogU1QgdGFibGUgZW50cnkgaW5kZXgKJiM0MzsgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgd3JpdHRlbgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKQomIzQzOyAqLwomIzQzO2ludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKJiM0Mzt7CiYjNDM7CWludCByZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhwZGV2LCBpbmRleCwgMSwgJmFtcDt0YWcpOwomIzQzOwlyZXR1cm4gcmV0ID09IDEgPyAwIDogcmV0OwogfQogRVhQT1JUX1NZTUJPTChwY2llX3RwaF9zZXRfc3RfZW50cnkpOwogCkBAIC0zNjYsMjYgJiM0Mzs0NTIsMjEgQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogRVhQT1JUX1NZTUJPTChwY2llX2Rpc2FibGVfdHBoKTsKIAogLyoqCi0gKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGUKJiM0MzsgKiBwY2llX2VuYWJsZV90cGhfZXh0IC0gRW5hYmxlIFRQSCBzdXBwb3J0IHdpdGggc3BlY2lmaWMgU1QgbW9kZSBhbmQKJiM0MzsgKiByZXF1ZXN0ZXIgdHlwZQogICogQHBkZXY6IFBDSSBkZXZpY2UKLSAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZToKLSAqCi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlCi0gKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGUKLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlCiYjNDM7ICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlOiBQQ0lfVFBIX1NUXyhOU19NT0RFIC8gSVZfTU9ERSAvIERTX01PREUpCiYjNDM7ICogQHJlcV90eXBlOiBSZXF1ZXN0ZXIgdHlwZSB0byBlbmFibGU6IFBDSV9UUEhfUkVRXyhUUEhfT05MWSAvIEVYVF9UUEgpCiAgKgotICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcKLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsCi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXIKLSAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuCiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBhbmQgcmVxdWVzdGVyIHR5cGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZQomIzQzOyAqIGRldmljZSBiZWZvcmUgZW5hYmxpbmcgYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKQogICovCi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSkKJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSwgdTggcmVxX3R5cGUpCiB7CiAJdTMyIHJlZzsKIAl1OCBkZXZfbW9kZXM7Ci0JdTggcnBfcmVxX3R5cGU7CiAKIAkvKiBIb25vciAmIzM0O25vdHBoJiMzNDsga2VybmVsIHBhcmFtZXRlciAqLwogCWlmIChwY2lfdHBoX2Rpc2FibGVkKQpAQCAtMzk3LDYgJiM0Mzs0NzgsMTQgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAJaWYgKHBkZXYtJmd0O3RwaF9lbmFibGVkKQogCQlyZXR1cm4gLUVCVVNZOwogCiYjNDM7CWlmIChwZGV2LSZndDt0cGhfbWF4X3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgVFBIIHJlcXVlc3RlciB0eXBlIGNvbXBhdGliaWxpdHkgKi8KJiM0MzsJaWYgKHJlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUgfHwgcmVxX3R5cGUgPT0gMiB8fAomIzQzOwkJcmVxX3R5cGUgJmd0OyBwZGV2LSZndDt0cGhfbWF4X3R5cGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgU1QgbW9kZSBjb21wYXRpYmlsaXR5ICovCiAJbW9kZSAmYW1wOz0gUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0s7CiAJZGV2X21vZGVzID0gZ2V0X3N0X21vZGVzKHBkZXYpOwpAQCAtNDA1LDIzICYjNDM7NDk0LDcgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAKIAlwZGV2LSZndDt0cGhfbW9kZSA9IG1vZGU7CiAKLQkvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCAmYW1wO3JlZyk7Ci0JaWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKQotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIOwotCWVsc2UKLQkJcGRldi0mZ3Q7dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7Ci0KLQkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqLwotCWlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHsKLQkJcnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7Ci0KLQkJLyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqLwotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi0mZ3Q7dHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7Ci0JfQotCi0JaWYgKHBkZXYtJmd0O3RwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcGRldi0mZ3Q7dHBoX3JlcV90eXBlID0gcmVxX3R5cGU7CiAKIAkvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NUUkwsICZhbXA7cmVnKTsKQEAgLTQzNSw2ICYjNDM7NTA4LDIzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogCiAJcmV0dXJuIDA7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGhfZXh0KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZTogUENJX1RQSF9TVF8oTlNfTU9ERSAvIElWX01PREUgLyBEU19NT0RFKQomIzQzOyAqCiYjNDM7ICogV3JhcHBlciBmb3IgcGNpZV9lbmFibGVfdHBoX2V4dCgpLCBhdXRvbWF0aWNhbGx5IHVzZXMgdGhlIHByZS1jYWNoZWQKJiM0MzsgKiB0cGhfbWF4X3R5cGUgdmFsdWUgKG5lZ290aWF0ZWQgbWF4aW11bSByZXF1ZXN0ZXIgdHlwZSBiZXR3ZWVuIGRldmljZSBhbmQKJiM0MzsgKiByb290IHBvcnQpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKQomIzQzOyAqLwomIzQzO2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCBwZGV2LSZndDt0cGhfbWF4X3R5cGUpOwomIzQzO30KIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTsKIAogdm9pZCBwY2lfcmVzdG9yZV90cGhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC01MDgsMTQgJiM0Mzs1OTgsNjAgQEAgdm9pZCBwY2lfbm9fdHBoKHZvaWQpCiAKIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewomIzQzOwl1OCB0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlOwogCWludCBudW1fZW50cmllczsKIAl1MzIgc2F2ZV9zaXplOwomIzQzOwl1MzIgcmVnID0gMDsKIAogCXBkZXYtJmd0O3RwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpOwogCWlmICghcGRldi0mZ3Q7dHBoX2NhcCkKIAkJcmV0dXJuOwogCiYjNDM7CS8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovCiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCAmYW1wO3JlZyk7CiYjNDM7CWlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSkKJiM0MzsJCXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7CiYjNDM7CWVsc2UKJiM0MzsJCXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZOwomIzQzOwomIzQzOwkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqLwomIzQzOwlpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7CiYjNDM7CQlycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTsKJiM0MzsJCS8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi8KJiM0MzsJCXRwaF9yZXFfdHlwZSA9IG1pbih0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwZGV2LSZndDt0cGhfbWF4X3R5cGUgPSB0cGhfcmVxX3R5cGU7CiYjNDM7CiAJbnVtX2VudHJpZXMgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTsKIAlzYXZlX3NpemUgPSBzaXplb2YodTMyKSAmIzQzOyBudW1fZW50cmllcyAqIHNpemVvZih1MTYpOwogCXBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfZHNtX3N1cHBvcnRlZCAtIENoZWNrIGlmIHJvb3QgcG9ydCBleHBvc2VzIFRQSCBTVCBfRFNNCiYjNDM7ICogQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gdHJ1ZSBpZiByb290IHBvcnQgb2YgQHBkZXYgcHJvdmlkZXMgVFBIIFNUIERTTSBmdW5jdGlvbiwKJiM0MzsgKiBmYWxzZSBvdGhlcndpc2UgKEFDUEkgZGlzYWJsZWQgb3IgRFNNIG1pc3NpbmcpLgomIzQzOyAqLwomIzQzO2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJCiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7CiYjNDM7CWFjcGlfaGFuZGxlIGhhbmRsZTsKJiM0MzsKJiM0MzsJaWYgKCFycCB8fCAhcnAtJmd0O2J1cyB8fCAhcnAtJmd0O2J1cy0mZ3Q7YnJpZGdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwloYW5kbGUgPSBBQ1BJX0hBTkRMRShycC0mZ3Q7YnVzLSZndDticmlkZ2UpOwomIzQzOwlpZiAoIWhhbmRsZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjcGlfY2hlY2tfZHNtKGhhbmRsZSwgJmFtcDtwY2lfYWNwaV9kc21fZ3VpZCwgNywKJiM0MzsJCQkgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7CiYjNDM7I2Vsc2UKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2llX3RwaF9kc21fc3VwcG9ydGVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYwppbmRleCA4MzAzNjlmZjg3OGRiZS4uYzQwN2MyMTdiNjQ5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKQEAgLTYwLDYgJiM0Mzs2MCwyNiBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0OwogbW9kdWxlX3BhcmFtKGRpc2FibGVfZGVueWxpc3QsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2RlbnlsaXN0LCAmIzM0O0Rpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy4mIzM0Oyk7CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRwaF9wb2xpY3k7CiYjNDM7c3RhdGljIGludCB0cGhfcG9saWN5X3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULAomIzQzOwkJCQkgICAgIFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QpOwomIzQzO30KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdHBoX3BhcmFtX29wcyA9IHsKJiM0MzsJLnNldCA9IHRwaF9wb2xpY3lfc2V0LAomIzQzOwkuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsCiYjNDM7fTsKJiM0Mzttb2R1bGVfcGFyYW1fY2IodHBoX3BvbGljeSwgJmFtcDt0cGhfcGFyYW1fb3BzLCAmYW1wO3RwaF9wb2xpY3ksIDA2NDQpOwomIzQzO01PRFVMRV9QQVJNX0RFU0ModHBoX3BvbGljeSwKJiM0MzsJJiMzNDtHbG9iYWwgVFBIIHBvbGljeSBsZXZlbCAoMD1kZWZhdWx0IE5vLVNUKTpcbiYjMzQ7CiYjNDM7CSYjMzQ7MCA9IE5vLVNUIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xuJiMzNDsKJiM0MzsJJiMzNDsgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbW1pbmcgdW5hdmFpbGFibGVcbiYjMzQ7CiYjNDM7CSYjMzQ7MSA9IEFkZCBJViBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcbiYjMzQ7CiYjNDM7CSYjMzQ7ICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVSBzb3VyY2VzXG4mIzM0OwomIzQzOwkmIzM0OzIgPSBBZGQgRFMgbW9kZTogUkVTT0xWRSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlLCBTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xuJiMzNDsKJiM0MzsJJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcbiYjMzQ7KTsKJiM0MzsKIHN0YXRpYyBib29sIHZmaW9fcGNpX2Rldl9pbl9kZW55bGlzdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzd2l0Y2ggKHBkZXYtJmd0O3ZlbmRvcikgewpAQCAtMTQyLDYgJiM0MzsxNjIsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KQogI2lmZGVmIENPTkZJR19WRklPX1BDSV9WR0EKIAl2ZGV2LSZndDtkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhOwogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19QQ0lFX1RQSAomIzQzOwl2ZGV2LSZndDt0cGhfcG9saWN5ID0gdHBoX3BvbGljeTsKJiM0MzsjZW5kaWYKIAogCXJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwppbmRleCBhMTBlZDczM2YwZTNhZi4uOTdkYWQ2ZGI2OWUzOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdmZpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKQEAgLTEwODUsNiAmIzQzOzEwODYsMTQ2IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmZpb19maW5kX2NhcF9zdGFydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MpCiYjNDM7ewomIzQzOwl1OCBjYXA7CiYjNDM7CWludCBiYXNlID0gKHBvcyAmZ3Q7PSBQQ0lfQ0ZHX1NQQUNFX1NJWkUpID8gUENJX0NGR19TUEFDRV9TSVpFIDoKJiM0MzsJCQkJCQkgUENJX1NURF9IRUFERVJfU0laRU9GOwomIzQzOwljYXAgPSB2ZGV2LSZndDtwY2lfY29uZmlnX21hcFtwb3NdOwomIzQzOwomIzQzOwlpZiAoY2FwID09IFBDSV9DQVBfSURfQkFTSUMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogWFhYIENhbiB3ZSBoYXZlIHRvIGFidXR0aW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlPyAqLwomIzQzOwl3aGlsZSAocG9zIC0gMSAmZ3Q7PSBiYXNlICZhbXA7JmFtcDsgdmRldi0mZ3Q7cGNpX2NvbmZpZ19tYXBbcG9zIC0gMV0gPT0gY2FwKQomIzQzOwkJcG9zLS07CiYjNDM7CiYjNDM7CXJldHVybiBwb3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZmaW9fdXBkYXRlX3RwaF92Y29uZmlnX2J5dGVzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJCSAgaW50IHBvcykKJiM0Mzt7CiYjNDM7CV9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgdmFsID0gbGUzMl90b19jcHUoKnZwdHIpOwomIzQzOwomIzQzOwlpZiAoIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikpIHsKJiM0MzsJCS8qIFJlbW92ZSBleHRlbmRlZCBUUEggaWYgcm9vdC1wb3J0IGRvZXNuJiMzOTt0IHN1cHBvcnQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCkgewomIzQzOwkJLyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHwKJiM0MzsJCQkgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTsKJiM0MzsJfSBlbHNlIGlmICh2ZGV2LSZndDt0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QpIHsKJiM0MzsJCS8qIFJlcG9ydCBvbmx5IE5vLVNUIGFuZCBJViBtb2RlcyBzdXBwb3J0ZWQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gflBDSV9UUEhfQ0FQX1NUX0RTOwomIzQzOwkJLyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb2VzbiYjMzk7dCBzdXBwb3J0IElWIG1vZGUgKi8KJiM0MzsJCWlmICghKHZhbCAmYW1wOyBQQ0lfVFBIX0NBUF9TVF9JVikpCiYjNDM7CQkJdmFsICZhbXA7PSB+KFBDSV9UUEhfQ0FQX0xPQ19NQVNLIHwgUENJX1RQSF9DQVBfU1RfTUFTSyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnZwdHIgPSBjcHVfdG9fbGUzMih2YWwpOwomIzQzOwomIzQzOwkvKiBCYWNrdXAgdXBkYXRlZCBjYXBhYmlsaXR5IHJlZ2lzdGVyIHZhbHVlICovCiYjNDM7CXZkZXYtJmd0O3RwaF9jYXBfdmlydCA9IHZhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovCiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogV2Ugb25seSB2aXJ0dWFsaXplIHRoZSBUUEggaGVhZGVyIChleGNsdWRpbmcgdGhlIFNUIHRhYmxlKS4KJiM0MzsJICogRm9yIHRoZSBTVCB0YWJsZSAoaWYgYW55KSwgdGhlIHJlYWQgb3BlcmF0aW9uIHJldHVybnMgMCBieQomIzQzOwkgKiBkZWZhdWx0LCBhbmQgdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyBkaXNjYXJkZWQgYnkgZGVmYXVsdC4KJiM0MzsJICovCiYjNDM7CWlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRikpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcF9zZXRkKHBlcm0sIDAsIEFMTF9WSVJULCBOT19XUklURSk7CiYjNDM7CXBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NBUCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTsKJiM0MzsKJiM0MzsJcF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsCiYjNDM7CSAgICAgICBQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSyB8IFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcywKJiM0MzsJCQkJaW50IGNvdW50LCBzdHJ1Y3QgcGVybV9iaXRzICpwZXJtLAomIzQzOwkJCQlpbnQgb2Zmc2V0LCBfX2xlMzIgKnZhbCkKJiM0Mzt7CiYjNDM7CWlmIChvZmZzZXQgJmd0Oz0gUENJX1RQSF9CQVNFX1NJWkVPRikgewomIzQzOwkJKnZhbCA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmd0Oz0gUENJX1RQSF9DQVAgJmFtcDsmYW1wOyAhdmRldi0mZ3Q7dHBoX29wdF9pbikgewomIzQzOwkJKnZhbCA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsCiYjNDM7CQkJCSBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sCiYjNDM7CQkJCSBpbnQgb2Zmc2V0LCBfX2xlMzIgdmFsKQomIzQzO3sKJiM0MzsJdTE2IHN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBvcmdfY3RybCwgbmV3X2N0cmwsIGNhcDsKJiM0MzsJdTggbW9kZSwgcmVxLCBvcmdfcmVxOwomIzQzOwlfX2xlMzIgb3JnX3ZhbCA9IDA7CiYjNDM7CXUxNiBjbWQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7dHBoX29wdF9pbiB8fCBvZmZzZXQgJmd0Oz0gUENJX1RQSF9CQVNFX1NJWkVPRikKJiM0MzsJCXJldHVybiBjb3VudDsKJiM0MzsKJiM0MzsJY21kID0gdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZSh2ZGV2KTsKJiM0MzsKJiM0MzsJb3JnX2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSZhbXA7dmRldi0mZ3Q7dmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NUUkxdKTsKJiM0MzsJdmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgJmFtcDtvcmdfdmFsKTsKJiM0MzsKJiM0MzsJcmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7CiYjNDM7CWlmIChyZXQgIT0gY291bnQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbmV3X2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSZhbXA7dmRldi0mZ3Q7dmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NUUkxdKTsKJiM0MzsJaWYgKG5ld19jdHJsID09IG9yZ19jdHJsKQomIzQzOwkJZ290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCBjaGFuZ2VzIGluIFRQSF9DVFJMLiAqLwomIzQzOwomIzQzOwljYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSZhbXA7dmRldi0mZ3Q7dmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NBUF0pOwomIzQzOwltb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBuZXdfY3RybCk7CiYjNDM7CXJlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIG5ld19jdHJsKTsKJiM0MzsJaWYgKG1vZGUgJmd0OyBQQ0lfVFBIX1NUX0RTX01PREUgfHwgIShjYXAgJmFtcDsgKDF1ICZsdDsmbHQ7IG1vZGUpKSB8fCByZXEgPT0gMHgyIHx8CiYjNDM7CQkocmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEggJmFtcDsmYW1wOyAhKGNhcCAmYW1wOyBQQ0lfVFBIX0NBUF9FWFRfVFBIKSkpCiYjNDM7CQlnb3RvIHJlc3RvcmU7IC8qIERyb3AgaW52YWxpZCBvciB1bnN1cHBvcnRlZCB3cml0ZSB2YWx1ZSAqLwomIzQzOwomIzQzOwlvcmdfcmVxID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgb3JnX2N0cmwpOwomIzQzOwlpZiAocmVxID09IG9yZ19yZXEpCiYjNDM7CQlnb3RvIHJlc3RvcmU7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovCiYjNDM7CiYjNDM7CWlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHsKJiM0MzsJCXJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcmVxKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlOwomIzQzOwl9IGVsc2UgaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7CiYjNDM7CQlwY2llX2Rpc2FibGVfdHBoKHZkZXYtJmd0O3BkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWdvdG8gb3V0OwomIzQzOwomIzQzO3Jlc3RvcmU6CiYjNDM7CXZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTsKJiM0MztvdXQ6CiYjNDM7CXZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgcGVybWlzc2lvbiB0YWJsZXMKICAqLwpAQCAtMTEwMCw2ICYjNDM7MTI0MSw3IEBAIHZvaWQgdmZpb19wY2lfdW5pbml0X3Blcm1fYml0cyh2b2lkKQogCiAJZnJlZV9wZXJtX2JpdHMoJmFtcDtlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pOwogCWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTsKJiM0MzsJZnJlZV9wZXJtX2JpdHMoJmFtcDtlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pOwogfQogCiBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpCkBAIC0xMTIwLDYgJiM0MzsxMjYyLDkgQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKQogCS8qIEV4dGVuZGVkIGNhcGFiaWxpdGllcyAqLwogCXJldCB8PSBpbml0X3BjaV9leHRfY2FwX2Vycl9wZXJtKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTsKIAlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7CiYjNDM7CXJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTsKJiM0MzsJZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdLnJlYWRmbiA9IHZmaW9fdHBoX2NvbmZpZ19yZWFkOwomIzQzOwllY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTsKIAllY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1ZORFJdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7CiAJZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9EVlNFQ10ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTsKIApAQCAtMTEyOSwyMyAmIzQzOzEyNzQsNiBAQCBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcykKLXsKLQl1OCBjYXA7Ci0JaW50IGJhc2UgPSAocG9zICZndDs9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOgotCQkJCQkJIFBDSV9TVERfSEVBREVSX1NJWkVPRjsKLQljYXAgPSB2ZGV2LSZndDtwY2lfY29uZmlnX21hcFtwb3NdOwotCi0JaWYgKGNhcCA9PSBQQ0lfQ0FQX0lEX0JBU0lDKQotCQlyZXR1cm4gMDsKLQotCS8qIFhYWCBDYW4gd2UgaGF2ZSB0byBhYnV0dGluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZT8gKi8KLQl3aGlsZSAocG9zIC0gMSAmZ3Q7PSBiYXNlICZhbXA7JmFtcDsgdmRldi0mZ3Q7cGNpX2NvbmZpZ19tYXBbcG9zIC0gMV0gPT0gY2FwKQotCQlwb3MtLTsKLQotCXJldHVybiBwb3M7Ci19Ci0KIHN0YXRpYyBpbnQgdmZpb19tc2lfY29uZmlnX3JlYWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLAogCQkJCWludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSwKIAkJCQlpbnQgb2Zmc2V0LCBfX2xlMzIgKnZhbCkKQEAgLTE3MDEsNiAmIzQzOzE4MjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAkJcmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEgpCiYjNDM7CQkJdmZpb191cGRhdGVfdHBoX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcyk7CiAKIAkJLyoKIAkJICogSWYgd2UmIzM5O3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggM2YxMWE5NjI0YjljMDMuLmI4ZDlkODQwYTkzYjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwpAQCAtMTMsNiAmIzQzOzEzLDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9hcGVydHVyZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V2ZW50ZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CkBAIC0zMCw2ICYjNDM7MzIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXVmZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS1wMnBkbWEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXRwaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKQogI2luY2x1ZGUgJmx0O2FzbS9lZWguaCZndDsKQEAgLTEyNywxMCAmIzQzOzEzMCwyMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGgoc3RydWN0IHNlcV9maWxlICpzZXEsCiYjNDM7CQkJCQkgICAgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZmaW9fcGNpX2NvcmVfZGVidWdmc19wcml2YXRlKHNlcSk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0O3BvbGljeT0ldSBjYXAtdmlydD0weCV4IG9wdC1pbj0ldVxuJiMzNDssCiYjNDM7CQl2ZGV2LSZndDt0cGhfcG9saWN5LCB2ZGV2LSZndDt0cGhfY2FwX3ZpcnQsIHZkZXYtJmd0O3RwaF9vcHRfaW4pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKgotICogZGlzYWJsZV9pZGxlX2QzIGFuZCBub2ludHhtYXNrIGFyZSB3cml0YWJsZSBtb2R1bGUgcGFyYW1ldGVycyBsYXRjaGVkCi0gKiBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJiMzOTtzIGVmZmVjdGl2ZSB2YWx1ZSBjYW4gZGlmZmVyIGZyb20gdGhlCi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlcwomIzQzOyAqIGRpc2FibGVfaWRsZV9kMywgbm9pbnR4bWFzayBhbmQgdHBoX3BvbGljeSBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnMKJiM0MzsgKiBsYXRjaGVkIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UmIzM5O3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbQomIzQzOyAqIHRoZSBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlcwogICogaGVyZSBmb3IgdmlzaWJpbGl0eTsgcmVhZC1vbmx5IHBhcmFtZXRlcnMgY2FuJiMzOTt0IGRyaWZ0IGFuZCBhcmUgb21pdHRlZC4KICAqLwogc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQpAQCAtMTQ2LDYgJiM0MzsxNTksOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJCQkJICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCAmIzM0O2Rpc2FibGVfaWRsZV9kMyYjMzQ7LCBwY2lfZGlyLAogCQkJCSAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfZGlzYWJsZV9pZGxlX2QzKTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldiwgJiMzNDt0cGgmIzM0OywgcGNpX2RpciwKJiM0MzsJCQkJICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGgpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCkBAIC02MTAsNiAmIzQzOzYyNSw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOwogCiAJdmRldi0mZ3Q7cmVzZXRfd29ya3MgPSAhcmV0OwomIzQzOwl2ZGV2LSZndDt0cGhfb3B0X2luID0gZmFsc2U7CiYjNDM7CS8qIFJlc2V0IFRQSCBzdGF0dXMgb24gbmV3IHVzZXIgc2Vzc2lvbiAqLwomIzQzOwlwY2llX2Rpc2FibGVfdHBoKHZkZXYtJmd0O3BkZXYpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTsKIAlpZiAoIXZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSkKQEAgLTc1Nyw2ICYjNDM7Nzc1LDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCiAJdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2UodmRldik7CiAKJiM0MzsJLyogUmVzZXQgVFBIIHN0YXR1cyBvbiBleGl0IHVzZXIgc2Vzc2lvbiAqLwomIzQzOwlwY2llX2Rpc2FibGVfdHBoKHZkZXYtJmd0O3BkZXYpOwomIzQzOwogCS8qCiAJICogSWYgd2UgaGF2ZSBzYXZlZCBzdGF0ZSwgcmVzdG9yZSBpdC4gIElmIHdlIGNhbiByZXNldCB0aGUgZGV2aWNlLAogCSAqIGV2ZW4gYmV0dGVyLiAgUmVzZXR0aW5nIHdpdGggY3VycmVudCBzdGF0ZSBzZWVtcyBiZXR0ZXIgdGhhbgpAQCAtMTU1OCw2ICYjNDM7MTU3OSw3IEBAIGxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCwKIAlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPQogCQljb250YWluZXJfb2YoY29yZV92ZGV2LCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UsIHZkZXYpOwogCXZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnOwomIzQzOwlpbnQgcmV0OwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFZGSU9fREVWSUNFX0dFVF9JTkZPOgpAQCAtMTU2OSw5ICYjNDM7MTU5MSwxNSBAQCBsb25nIHZmaW9fcGNpX2NvcmVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHVuc2lnbmVkIGludCBjbWQsCiAJY2FzZSBWRklPX0RFVklDRV9JT0VWRU5URkQ6CiAJCXJldHVybiB2ZmlvX3BjaV9pb2N0bF9pb2V2ZW50ZmQodmRldiwgdWFyZyk7CiAJY2FzZSBWRklPX0RFVklDRV9QQ0lfSE9UX1JFU0VUOgotCQlyZXR1cm4gdmZpb19wY2lfaW9jdGxfcGNpX2hvdF9yZXNldCh2ZGV2LCB1YXJnKTsKJiM0MzsJCXJldCA9IHZmaW9fcGNpX2lvY3RsX3BjaV9ob3RfcmVzZXQodmRldiwgdWFyZyk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlwY2llX2Rpc2FibGVfdHBoKHZkZXYtJmd0O3BkZXYpOwomIzQzOwkJcmV0dXJuIHJldDsKIAljYXNlIFZGSU9fREVWSUNFX1JFU0VUOgotCQlyZXR1cm4gdmZpb19wY2lfaW9jdGxfcmVzZXQodmRldiwgdWFyZyk7CiYjNDM7CQlyZXQgPSB2ZmlvX3BjaV9pb2N0bF9yZXNldCh2ZGV2LCB1YXJnKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CQlyZXR1cm4gcmV0OwogCWNhc2UgVkZJT19ERVZJQ0VfU0VUX0lSUVM6CiAJCXJldHVybiB2ZmlvX3BjaV9pb2N0bF9zZXRfaXJxcyh2ZGV2LCB1YXJnKTsKIAlkZWZhdWx0OgpAQCAtMTYwNyw2ICYjNDM7MTYzNSwyOTkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19DQVApIHsKJiM0MzsJCXJldHVybiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTsKJiM0MzsJfSBlbHNlIGlmIChsb2MgPT0gUENJX1RQSF9MT0NfTVNJWCkgewomIzQzOwkJcmV0ID0gcGNpX21zaXhfdmVjX2NvdW50KHBkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQomIzQzO3sKJiM0MzsJdTMyIGZsYWdzID0gVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9QSDsKJiM0MzsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgJmd0Oz0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCAmYW1wOyZhbXA7CiYjNDM7CQkodmRldi0mZ3Q7dHBoX2NhcF92aXJ0ICZhbXA7IFBDSV9UUEhfQ0FQX1NUX0lWKSkgewomIzQzOwkJZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9OT05FOwomIzQzOwkJZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUY7CiYjNDM7CQlpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKJiM0MzsJCQlmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVTsKJiM0MzsJfQomIzQzOwlpZiAodmRldi0mZ3Q7dHBoX3BvbGljeSAmZ3Q7PSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUICZhbXA7JmFtcDsKJiM0MzsJCSh2ZGV2LSZndDt0cGhfY2FwX3ZpcnQgJmFtcDsgUENJX1RQSF9DQVBfU1RfRFMpKSB7CiYjNDM7CQlpZiAodmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHZkZXYpICZndDsgMCkgewomIzQzOwkJCWZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTsKJiM0MzsJCQlmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRjsKJiM0MzsJCQlpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKJiM0MzsJCQkJZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7CiYjNDM7CQl9CiYjNDM7CQlpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKJiM0MzsJCQlmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmbGFnczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgICB1MzIgZmxhZ3MsCiYjNDM7CQkJCSAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIF9fdXNlciAqYXJnLAomIzQzOwkJCQkgICAgIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB0cGg7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghcGNpZV9zdGRfdHBoX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwKJiM0MzsJCQlWRklPX0RFVklDRV9GRUFUVVJFX0dFVCB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULAomIzQzOwkJCXNpemVvZih0cGgpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dHBoLCBhcmcsIHNpemVvZih0cGgpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpIHsKJiM0MzsJCWlmICh0cGguZmxhZ3MgIT0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXZkZXYtJmd0O3RwaF9vcHRfaW4gPSAxOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDt0cGhfb3B0X2luKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXRwaC5mbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZhbXA7dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3Jlc29sdmVfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXUzMiBmbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTsKJiM0MzsJdTMyIGFsbG93X3NyYyA9IDA7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyAoVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9QSCB8CiYjNDM7CQkgICAgIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfU1QpKQomIzQzOwkJYWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0NQVV9TVCkKJiM0MzsJCWFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8CiYjNDM7CQkJICAgICBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UOwomIzQzOwomIzQzOwlyZXR1cm4gYWxsb3dfc3JjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICpzdCwgdTggKnBoKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZG1hYnVmID0gZG1hX2J1Zl9nZXQoZmQpOwomIzQzOwlpZiAoSVNfRVJSKGRtYWJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkbWFidWYpOwomIzQzOwomIzQzOwlyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJaWYgKHJldCA9PSAwKQomIzQzOwkJcmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBzdCwgcGgpOwomIzQzOwlkbWFfcmVzdl91bmxvY2soZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHNyY19iaXRzLAomIzQzOwkJCQkgICB1MzIgc3JjX2huZGwsIGJvb2wgZXh0ZW5kZWQsIHUxNiAqc3QpCiYjNDM7ewomIzQzOwl1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJdTggcGg7CiYjNDM7CiYjNDM7CWlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRikKJiM0MzsJCXJldCA9IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKHNyY19obmRsLCBleHRlbmRlZCwgc3QsICZhbXA7cGgpOwomIzQzOwllbHNlIGlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSkKJiM0MzsJCXJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIFRQSF9NRU1fVFlQRV9WTSwKJiM0MzsJCQkJCSAgICAgIHJlcV90eXBlLCBzcmNfaG5kbCwgc3QpOwomIzQzOwllbHNlIGlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UKQomIzQzOwkJcmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQocGRldiwgVFBIX01FTV9UWVBFX1BNLAomIzQzOwkJCQkJICAgICAgcmVxX3R5cGUsIHNyY19obmRsLCBzdCk7CiYjNDM7CWVsc2UgaWYgKHNyY19iaXRzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSkKJiM0MzsJCSpzdCA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChyZXQgIT0gMCkKJiM0MzsJCSpzdCA9IDA7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQl1MzIgZmxhZ3MsCiYjNDM7CQkJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgX191c2VyICphcmcsCiYjNDM7CQkJc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgcmVzb2x2ZTsKJiM0MzsJdTMyIHVzZXJfZmxhZ3MsIGFsbG93X3NyYzsKJiM0MzsJYm9vbCBleHRlbmRlZDsKJiM0MzsJdTE2IHRhZyA9IDA7CiYjNDM7CXU4IHBoID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDt0cGhfb3B0X2luKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCwKJiM0MzsJCQkJIHNpemVvZihyZXNvbHZlKSk7CiYjNDM7CWlmIChyZXQgIT0gMSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3Jlc29sdmUsIGFyZywgc2l6ZW9mKHJlc29sdmUpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwl1c2VyX2ZsYWdzID0gcmVzb2x2ZS5mbGFnczsKJiM0MzsJZXh0ZW5kZWQgPSAhISh1c2VyX2ZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCk7CiYjNDM7CWlmIChleHRlbmRlZCAmYW1wOyZhbXA7ICFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHZkZXYtJmd0O3BkZXYpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl1c2VyX2ZsYWdzICZhbXA7PSB+VkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEOwomIzQzOwomIzQzOwlhbGxvd19zcmMgPSB2ZmlvX3BjaV9nZXRfdHBoX3Jlc29sdmVfYWxsb3dfc3JjKHZkZXYpOwomIzQzOwlpZiAodXNlcl9mbGFncyAmYW1wOyB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJlc29sdmUudmFsaWQgPSAwOwomIzQzOwlyZXNvbHZlLnBoID0gMDsKJiM0MzsJcmVzb2x2ZS5zdCA9IDA7CiYjNDM7CiYjNDM7CWlmICh1c2VyX2ZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKSB7CiYjNDM7CQlyZXQgPSB2ZmlvX3BjaV9nZXRfZG1hYnVmX3RwaChyZXNvbHZlLnNyYywgZXh0ZW5kZWQsCiYjNDM7CQkJCQkgICAgICAmYW1wO3RhZywgJmFtcDtwaCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXNvbHZlLnBoID0gcGg7CiYjNDM7CQlyZXNvbHZlLnZhbGlkID0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIOwomIzQzOwkJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgJmd0Oz0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCkgewomIzQzOwkJCXJlc29sdmUuc3QgPSB0YWc7CiYjNDM7CQkJcmVzb2x2ZS52YWxpZCB8PSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1Q7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyh2ZGV2LSZndDtwZGV2LCB1c2VyX2ZsYWdzLCByZXNvbHZlLnNyYywKJiM0MzsJCQkJICAgICAgZXh0ZW5kZWQsICZhbXA7dGFnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJlc29sdmUudmFsaWQgfD0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUOwomIzQzOwlyZXNvbHZlLnN0ID0gdGFnOwomIzQzOwomIzQzO291dDoKJiM0MzsJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZhbXA7cmVzb2x2ZSwgc2l6ZW9mKHJlc29sdmUpKSA/IC1FRkFVTFQgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXUzMiBmbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTsKJiM0MzsJdTMyIGFsbG93X3NyYyA9IDA7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRikKJiM0MzsJCWFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRjsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfQ1BVKQomIzQzOwkJYWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFIHwKJiM0MzsJCQkgICAgIFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQ7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkUpCiYjNDM7CQlhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FOwomIzQzOwomIzQzOwlyZXR1cm4gYWxsb3dfc3JjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAomIzQzOwkJCQl1MzIgZmxhZ3MsCiYjNDM7CQkJCXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHRwaF9zdDsKJiM0MzsJdTMyIHVzZXJfZmxhZ3MsIGFsbG93X3NyYywgc3Rfc2l6ZTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwlib29sIGV4dGVuZGVkLCBzdG9wX29uX3plcm87CiYjNDM7CXUzMiAqc3JjX2huZGwgPSBOVUxMOwomIzQzOwl1MTYgKnRhZ3MgPSBOVUxMOwomIzQzOwlpbnQgcmV0LCBpOwomIzQzOwl1MTYgY21kOwomIzQzOwomIzQzOwlpZiAoIXZkZXYtJmd0O3RwaF9vcHRfaW4gfHwgdmRldi0mZ3Q7dHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQkJIHNpemVvZih0cGhfc3QpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dHBoX3N0LCBhcmcsIHNpemVvZih0cGhfc3QpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwl1c2VyX2ZsYWdzID0gdHBoX3N0LmZsYWdzOwomIzQzOwlleHRlbmRlZCA9ICEhKHVzZXJfZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTsKJiM0MzsJaWYgKGV4dGVuZGVkICZhbXA7JmFtcDsgIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQodmRldi0mZ3Q7cGRldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CXVzZXJfZmxhZ3MgJmFtcDs9IH5WRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7CiYjNDM7CiYjNDM7CXN0b3Bfb25femVybyA9ICEhKHVzZXJfZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpOwomIzQzOwlpZiAoc3RvcF9vbl96ZXJvICZhbXA7JmFtcDsgKHVzZXJfZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl1c2VyX2ZsYWdzICZhbXA7PSB+VkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1Q7CiYjNDM7CiYjNDM7CWFsbG93X3NyYyA9IHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHZkZXYpOwomIzQzOwlpZiAodXNlcl9mbGFncyAmYW1wOyB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXN0X3NpemUgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUodmRldik7CiYjNDM7CWlmICh0cGhfc3Quc3RhcnQgJmd0Oz0gc3Rfc2l6ZSB8fCB0cGhfc3QuY291bnQgJmd0OyBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8CiYjNDM7CQl0cGhfc3QuY291bnQgPT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoISh1c2VyX2ZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSkpIHsKJiM0MzsJCXNyY19obmRsID0gbWVtZHVwX2FycmF5X3VzZXIodTY0X3RvX3VzZXJfcHRyKHRwaF9zdC5kZXN0cyksCiYjNDM7CQkJCQkgICAgIHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUzMikpOwomIzQzOwkJaWYgKElTX0VSUihzcmNfaG5kbCkpCiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoc3JjX2huZGwpOwomIzQzOwl9CiYjNDM7CXRhZ3MgPSBrY2FsbG9jKHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUxNiksIEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghdGFncykgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0cGhfc3QuY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyhwZGV2LCB1c2VyX2ZsYWdzLAomIzQzOwkJCQkJICAgICAgc3JjX2huZGwgPyBzcmNfaG5kbFtpXSA6IDAsCiYjNDM7CQkJCQkgICAgICBleHRlbmRlZCwgJmFtcDt0YWdzW2ldKTsKJiM0MzsJCWlmIChyZXQgfHwgKHN0b3Bfb25femVybyAmYW1wOyZhbXA7IHRhZ3NbaV0gPT0gMCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGkgJmd0OyAwKSB7CiYjNDM7CQljbWQgPSB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHZkZXYpOwomIzQzOwkJcmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJpZXMocGRldiwgdHBoX3N0LnN0YXJ0LCBpLCB0YWdzKTsKJiM0MzsJCXZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUodGFncyk7CiYjNDM7CWtmcmVlKHNyY19obmRsKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiAJCQkJdm9pZCBfX3VzZXIgKmFyZywgc2l6ZV90IGFyZ3N6KQogewpAQCAtMTYyNSw2ICYjNDM7MTk0NiwxNiBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwogCWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOgogCQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwomIzQzOwljYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsCiYjNDM7CQkJCQkJCSBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRToKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUodmRldiwgZmxhZ3MsCiYjNDM7CQkJCQkJCSBhcmcsIGFyZ3N6KTsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDoKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwppbmRleCBjMTZmNDYwYzAxZDY4MS4uNTM1MTgzOWMxMzM4YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwpAQCAtMyw2ICYjNDM7Myw3IEBACiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9kbWEtYnVmLW1hcHBpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2ktcDJwZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZmaW9fcGNpX3ByaXYuaCYjMzQ7CkBAIC0xOSw3ICYjNDM7MjAsMTcgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgewogCXUzMiBucl9yYW5nZXM7CiAJc3RydWN0IGtyZWYga3JlZjsKIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwotCXU4IHJldm9rZWQgOiAxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVcGRhdGVzIHByb3RlY3RlZCBieSBkbWFidWYtJmd0O3Jlc3YsIEByZXZva2VkIGFkZGl0aW9uYWxseQomIzQzOwkgKiBwcm90ZWN0ZWQgYnkgbWVtb3J5X2xvY2suCiYjNDM7CSAqLwomIzQzOwl1MTYgdHBoX3N0X2V4dDsKJiM0MzsJdTggdHBoX3N0OwomIzQzOwlib29sIHJldm9rZWQ7CiYjNDM7CXU4IHRwaF9zdF92YWxpZDoxOwomIzQzOwl1OCB0cGhfc3RfZXh0X3ZhbGlkOjE7CiYjNDM7CXU4IHRwaF9waDoyOwogfTsKIAogc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLApAQCAtMzAsNyAmIzQzOzQxLDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCWlmICghYXR0YWNobWVudC0mZ3Q7cGVlcjJwZWVyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAocHJpdi0mZ3Q7cmV2b2tlZCkKJiM0MzsJaWYgKFJFQURfT05DRShwcml2LSZndDtyZXZva2VkKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIWRtYV9idWZfYXR0YWNoX3Jldm9jYWJsZShhdHRhY2htZW50KSkKQEAgLTY5LDYgJiM0Mzs4MCwyNiBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQkJCXUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJaWYgKGV4dGVuZGVkKSB7CiYjNDM7CQlpZiAoIXByaXYtJmd0O3RwaF9zdF9leHRfdmFsaWQpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJKnN0ZWVyaW5nX3RhZyA9IHByaXYtJmd0O3RwaF9zdF9leHQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAoIXByaXYtJmd0O3RwaF9zdF92YWxpZCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQkqc3RlZXJpbmdfdGFnID0gcHJpdi0mZ3Q7dHBoX3N0OwomIzQzOwl9CiYjNDM7CSpwaCA9IHByaXYtJmd0O3RwaF9waDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAogCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqc2d0LAogCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKQEAgLTEwMSw2ICYjNDM7MTMyLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHsKIAkuYXR0YWNoID0gdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2gsCiYjNDM7CS5nZXRfcGNpX3RwaCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgsCiAJLm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsCiAJLnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLAogCS5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLApAQCAtMzMzLDYgJiM0MzszNjUsNzIgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgICAgdTMyIGZsYWdzLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJICAgICAgc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggc2V0X3RwaDsKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiYjNDM7CXU4IGNvbXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LSZndDtwZGV2KTsKJiM0MzsJaWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULAomIzQzOwkJCQkgc2l6ZW9mKHNldF90cGgpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChzZXRfdHBoLmZsYWdzICZhbXA7IH4oVkZJT19ETUFfQlVGX1RQSF9TVCB8IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoc2V0X3RwaC5waCAmYW1wOyB+MHgzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICgoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgJmFtcDsmYW1wOwomIzQzOwkgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpOwomIzQzOwlpZiAoSVNfRVJSKGRtYWJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkbWFidWYpOwomIzQzOwomIzQzOwlpZiAoZG1hYnVmLSZndDtvcHMgIT0gJmFtcDt2ZmlvX3BjaV9kbWFidWZfb3BzKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYgPSBkbWFidWYtJmd0O3ByaXY7CiYjNDM7CWlmIChwcml2LSZndDt2ZGV2ICE9IHZkZXYpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9wdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi0mZ3Q7cmVzdiwgTlVMTCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wdXQ7CiYjNDM7CiYjNDM7CXByaXYtJmd0O3RwaF9zdCAgICAgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWc7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0OwomIzQzOwlwcml2LSZndDt0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF92YWxpZCAgID0gISEoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUKTsKJiM0MzsJcHJpdi0mZ3Q7dHBoX3N0X2V4dF92YWxpZCA9CiYjNDM7CQkhIShzZXRfdHBoLmZsYWdzICZhbXA7IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTsKJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CXJldCA9IDA7CiYjNDM7CiYjNDM7b3V0X3B1dDoKJiM0MzsJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCkKIHsKIAlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKaW5kZXggZmNhOWQwZGZhYzkwZjguLjAzYzRhMDQxNDI2NGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaApAQCAtMTEsNiAmIzQzOzExLDEyIEBACiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovCiAjZGVmaW5lIFZGSU9fUENJX0lPRVZFTlRGRF9NQVgJCTEwMDAKIAomIzQzO2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7CiYjNDM7CVZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgPSAwLAomIzQzOwlWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSwKJiM0MzsJVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQgewogCXN0cnVjdCBsaXN0X2hlYWQJbmV4dDsKIAlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UJKnZkZXY7CkBAIC0xMTgsNiAmIzQzOzEyNCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCQkJCSAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZywKIAkJCQkgIHNpemVfdCBhcmdzeik7CiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJCSAgICAgIHUzMiBmbGFncywKJiM0MzsJCQkJICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsCiYjNDM7CQkJCSAgICAgIHNpemVfdCBhcmdzeik7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwogdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpOwogI2Vsc2UKQEAgLTEyOCw2ICYjNDM7MTM4LDE0IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogewogCXJldHVybiAtRU5PVFRZOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwkJCQkgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLAomIzQzOwkJCQkgIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU5PVFRZOwomIzQzO30KIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAppbmRleCBkMTIwM2RhNTZmYzVmNy4uMTRlOGViNjFhNjJjMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCkBAIC0xMTMsNiAmIzQzOzExMywyOSBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewogCSAqLwogCXZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKIAomIzQzOwkvKioKJiM0MzsJICogQGdldF9wY2lfdHBoOgomIzQzOwkgKgomIzQzOwkgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yCiYjNDM7CSAqIHRoaXMgYnVmZmVyIHNvIGFuIGltcG9ydGVyIGNhbiBwcm9ncmFtIGEgbWF0Y2hpbmcgU1QvUEggaGludCBvbgomIzQzOwkgKiBvdXRib3VuZCBUTFBzIHRhcmdldGluZyB0aGUgZXhwb3J0ZXIgZm9yIHBlZXItdG8tcGVlciBETUEuCiYjNDM7CSAqCiYjNDM7CSAqIEBkbWFidWY6IERNQSBidWZmZXIgZm9yIHdoaWNoIHRvIHJldHJpZXZlIFRQSCBtZXRhZGF0YQomIzQzOwkgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUCiYjNDM7CSAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkCiYjNDM7CSAqICAgICAgICAgICAgICAgIG5hbWVzcGFjZQomIzQzOwkgKiBAcGg6IFJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnQgKDItYml0IHZhbHVlKQomIzQzOwkgKgomIzQzOwkgKiBPcHRpb25hbCBjYWxsYmFjayBmb3IgZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLiBDYWxsZWQgd2l0aAomIzQzOwkgKiAmYW1wO2RtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuCiYjNDM7CSAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLgomIzQzOwkgKgomIzQzOwkgKiBSZXR1cm5lZCBtZXRhZGF0YSBmb2xsb3dzIHRoZSBsaWZldGltZSBydWxlcyBkb2N1bWVudGVkIGZvcgomIzQzOwkgKiBkbWFfYnVmX2dldF9wY2lfdHBoKCkuCiYjNDM7CSAqLwomIzQzOwlpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQkgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTsKJiM0MzsKIAkvKioKIAkgKiBAbWFwX2RtYV9idWY6CiAJICoKQEAgLTU2Myw2ICYjNDM7NTg2LDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwogdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CiYjNDM7aW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQl1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTsKIAogc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmgKaW5kZXggYmU2OGNkMTdmMmY4MzMuLmFlYWY3MDFlNzk2NWIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaApAQCAtOSw2ICYjNDM7OSw4IEBACiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSAogI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsKIC8qCiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50CiAgKiBkZXBlbmRpbmcgb24gdGhlIG1lbW9yeSB0eXBlOiBWb2xhdGlsZSBNZW1vcnkgb3IgUGVyc2lzdGVudCBNZW1vcnkuIFdoZW4gYQpAQCAtMjEsMjYgJiM0MzsyMyw2OSBAQCBlbnVtIHRwaF9tZW1fdHlwZSB7CiB9OwogCiAjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7LyoqCiYjNDM7ICogcGNpZV9zdGRfdHBoX3N1cHBvcnRlZCAtIGNoZWNrIHN0YW5kYXJkIFRQSCByZXF1ZXN0ZXIgc3VwcG9ydAomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlCiYjNDM7ICovCiYjNDM7I2RlZmluZSBwY2llX3N0ZF90cGhfc3VwcG9ydGVkKHBkZXYpIFwKJiM0MzsJKChwZGV2KS0mZ3Q7dHBoX21heF90eXBlICZndDs9IFBDSV9UUEhfUkVRX1RQSF9PTkxZKQomIzQzOy8qKgomIzQzOyAqIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQgLSBjaGVjayBleHRlbmRlZCBUUEggcmVxdWVzdGVyIHN1cHBvcnQKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqLwomIzQzOyNkZWZpbmUgcGNpZV9leHRfdHBoX3N1cHBvcnRlZChwZGV2KSBcCiYjNDM7CSgocGRldiktJmd0O3RwaF9tYXhfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKQogaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKTsKLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCQllbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKJiM0MztpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCwKJiM0MzsJCQkgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpOwomIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKJiM0MzsJCQkgICAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTsKJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTsKIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7Ci1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7CiYjNDM7aW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKTsKJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKTsKIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiYjNDM7dTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAjZWxzZQomIzQzOyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZQomIzQzOyNkZWZpbmUgcGNpZV9leHRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZQogc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQl1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpCiB7IHJldHVybiAtRUlOVkFMOyB9CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiYjNDM7CQkJCQkgIHVuc2lnbmVkIGludCBzdGFydCwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpCiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiYjNDM7CQkJCQkgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCQkJICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwKJiM0MzsJCQkJCSAgdTE2ICp0YWcpCiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfQogc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCSAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKQogeyByZXR1cm4gLUVJTlZBTDsgfQogc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfQotc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLAomIzQzOwkJCQkgICAgICB1OCByZXFfdHlwZSkKJiM0Mzt7IHJldHVybiAtRUlOVkFMOyB9CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sgcmV0dXJuIDA7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sgcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7IH0KJiM0MztzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7eyByZXR1cm4gUENJX1RQSF9SRVFfRElTQUJMRTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7eyByZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7IH0KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDY0YjMwOGI2ZTYxYzE5Li41ZWQ1ODc5OWE5YjEyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC00NzIsNyAmIzQzOzQ3Miw2IEBAIHN0cnVjdCBwY2lfZGV2IHsKIAl1bnNpZ25lZCBpbnQJYXRzX2VuYWJsZWQ6MTsJCS8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovCiAJdW5zaWduZWQgaW50CXBhc2lkX2VuYWJsZWQ6MTsJLyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovCiAJdW5zaWduZWQgaW50CXByaV9lbmFibGVkOjE7CQkvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovCi0JdW5zaWduZWQgaW50CXRwaF9lbmFibGVkOjE7CQkvKiBUTFAgUHJvY2Vzc2luZyBIaW50cyAqLwogCXVuc2lnbmVkIGludAlmbV9lbmFibGVkOjE7CQkvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovCiAJdW5zaWduZWQgaW50CWlzX21hbmFnZWQ6MTsJCS8qIE1hbmFnZWQgdmlhIGRldnJlcyAqLwogCXVuc2lnbmVkIGludAlpc19tc2lfbWFuYWdlZDoxOwkvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqLwpAQCAtNTg4LDcgJiM0Mzs1ODcsMTAgQEAgc3RydWN0IHBjaV9kZXYgewogCXU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi8KIAogI2lmZGVmIENPTkZJR19QQ0lFX1RQSAotCXUxNgkJdHBoX2NhcDsJLyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovCiYjNDM7CXUxNgkJdHBoX2NhcDoxMzsJLyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovCiYjNDM7CXUxNgkJdHBoX21heF90eXBlOjI7IC8qIE5lZ290aWF0ZWQgbWF4IFRQSCByZXF1ZXN0ZXIgdHlwZQomIzQzOwkJCQkJICAgYmV0d2VlbiBkZXZpY2UgYW5kIHJvb3QgcG9ydCAqLwomIzQzOwl1MTYJCXRwaF9lbmFibGVkOjE7CS8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi8KIAl1OAkJdHBoX21vZGU7CS8qIFRQSCBtb2RlICovCiAJdTgJCXRwaF9yZXFfdHlwZTsJLyogVFBIIHJlcXVlc3RlciB0eXBlICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKaW5kZXggOWExNjc0YzE1MmFhMjkuLmQ2MDY0ZmE5ZTgwYTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaApAQCAtMTQ5LDYgJiM0MzsxNDksOSBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgewogCXN0cnVjdCBub3RpZmllcl9ibG9jawluYjsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCW1lbW9yeV9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJZG1hYnVmczsKJiM0MzsJdTgJCQl0cGhfb3B0X2luOwomIzQzOwl1OAkJCXRwaF9wb2xpY3k7CiYjNDM7CXUzMgkJCXRwaF9jYXBfdmlydDsKIH07CiAKIGVudW0gdmZpb19wY2lfaW9fd2lkdGggewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKaW5kZXggNWRlNjE4YTNhNWVlZWUuLjliYzNjZWY3YTg5YWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKQEAgLTE1MzQsNiAmIzQzOzE1MzQsMTUwIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgewogICovCiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMgogCiYjNDM7LyoqCiYjNDM7ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEKJiM0MzsgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5CiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydAomIzQzOyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0cwomIzQzOyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG8KJiM0MzsgKiByZXBvcnQgdGhlIEV4dGVuZGVkIFRQSCBDb21wbGV0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSB0aGUgaW9jdGwKJiM0MzsgKiByZXR1cm5zIC1FT1BOT1RTVVBQLgomIzQzOyAqCiYjNDM7ICogQGRtYWJ1Zl9mZCBpcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRi4KJiM0MzsgKgomIzQzOyAqIDgtYml0IFNUIChAc3RlZXJpbmdfdGFnKSBhbmQgMTYtYml0IEV4dGVuZGVkIFNUIChAc3RlZXJpbmdfdGFnX2V4dCkgYXJlCiYjNDM7ICogZGlzdGluY3QgbmFtZXNwYWNlcy4gQGZsYWdzIGlzIHRoZSBhdXRob3JpdGF0aXZlIHZhbGlkaXR5IG1hc2sgZm9yIHRoZQomIzQzOyAqIHR3byBuYW1lc3BhY2VzOiBWRklPX0RNQV9CVUZfVFBIX1NUIG1hcmtzIEBzdGVlcmluZ190YWcgdmFsaWQgYW5kCiYjNDM7ICogVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQgbWFya3MgQHN0ZWVyaW5nX3RhZ19leHQgdmFsaWQuIEFuIGltcG9ydGVyCiYjNDM7ICogcmVxdWVzdHMgb25lIG5hbWVzcGFjZSBhbmQgcmVjZWl2ZXMgdGhlIG1hdGNoaW5nIHZhbHVlLgomIzQzOyAqCiYjNDM7ICogRWFjaCBTRVQgZnVsbHkgcmVwbGFjZXMgdGhlIGRtYS1idWYmIzM5O3MgVFBIIHN0YXRlIGZvciBmdXR1cmUgcXVlcmllcwomIzQzOyAqIG9ubHkuIEEgbmFtZXNwYWNlIHdob3NlIGZsYWcgYml0IGlzIGNsZWFyIGlzIHJlcG9ydGVkIGFzIHVuc3VwcG9ydGVkCiYjNDM7ICogdG8gZnV0dXJlIGltcG9ydGVyczsgYW4gaW1wb3J0ZXIgdGhhdCBoYXMgYWxyZWFkeSByZXRyaWV2ZWQgYSB2YWx1ZQomIzQzOyAqIGlzIHVuYWZmZWN0ZWQuIEBmbGFncyA9PSAwIGxlYXZlcyBib3RoIG5hbWVzcGFjZXMgdW5zdXBwb3J0ZWQgZm9yCiYjNDM7ICogZnV0dXJlIGltcG9ydGVycy4KJiM0MzsgKgomIzQzOyAqIEBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLgomIzQzOyAqCiYjNDM7ICogVW5kZWZpbmVkIEBmbGFncyBhbmQgQHBoIGJpdHMgbXVzdCBhbHdheXMgYmUgemVyby4KJiM0MzsgKgomIzQzOyAqIFVzZXJzcGFjZSBtdXN0IGNvbmZpZ3VyZSBUUEggYmVmb3JlIGhhbmRpbmcgdGhlIGRtYS1idWYgZmQgdG8gYW4KJiM0MzsgKiBpbXBvcnRlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEggMTMKJiM0MzsKJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1QJCSgxICZsdDsmbHQ7IDApCiYjNDM7I2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVAkJKDEgJmx0OyZsdDsgMSkKJiM0MzsKJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7CiYjNDM7CV9fczMyCWRtYWJ1Zl9mZDsKJiM0MzsJX191MzIJZmxhZ3M7CiYjNDM7CV9fdTE2CXN0ZWVyaW5nX3RhZ19leHQ7CiYjNDM7CV9fdTgJc3RlZXJpbmdfdGFnOwomIzQzOwlfX3U4CXBoOwomIzQzO307CiYjNDM7CiYjNDM7LyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBICQkxNAomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRQkxNQomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1QJMTYKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIIC0gQ29udHJvbCBhbmQgcXVlcnkgUENJIFRQSCBjYXBhYmlsaXRpZXMKJiM0MzsgKgomIzQzOyAqIFNFVDogT3B0LWluIHRvIFRQSCBmZWF0dXJlIGZvciB0aGUgZGV2aWNlOyBmbGFncyBtdXN0IGJlIHplcm8uCiYjNDM7ICogR0VUOiBSZXR1cm4gc3VwcG9ydGVkIFRQSCBjYXBhYmlsaXR5IGJpdHMgKHNlZSBWRklPX0RFVklDRV9UUEhfQ0FQXyopCiYjNDM7ICogICAgICBpbiBmbGFncy4gUmV0dXJucyBlcnJvciBpZiBTRVQgaGFzIG5vdCBiZWVuIGludm9rZWQgZmlyc3QuCiYjNDM7ICoKJiM0MzsgKiBVc2Vyc3BhY2UgbXVzdCBmaXJzdCBpbnZva2UgU0VUIG9uIHRoaXMgZmVhdHVyZSB0byBlbmFibGUgVFBIIHN1cHBvcnQsCiYjNDM7ICogcmVjZWl2ZSB2YWxpZCBjYXBhYmlsaXR5IGJpdHMgdmlhIEdFVCwgZ2FpbiBwZXJtaXNzaW9uIGZvciB1c2luZwomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkUgLyBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCwgYW5kIGFjY2VzcwomIzQzOyAqIHRoZSB2aXJ0dWFsaXplZCBUUEggY2FwYWJpbGl0eSByZWdpc3RlcnMgdmlhIFZGSU8gY29uZmlnIHNwYWNlIGFjY2Vzc2VzLgomIzQzOyAqLwomIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB7CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzO307CiYjNDM7CiYjNDM7LyogRE1BQlVGIHNvdXJjZSByZXNvbHZlIHByb2Nlc3NpbmcgaGludCBzdXBwb3J0ZWQgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEgJKDF1ICZsdDsmbHQ7IDApCiYjNDM7LyogRE1BQlVGIHNvdXJjZSBUUEhfU1QgYmF0Y2ggcHJvZ3JhbW1pbmcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRgkJKDF1ICZsdDsmbHQ7IDEpCiYjNDM7LyogQ1BVIHNvdXJjZSBUUEhfU1QgYmF0Y2ggcHJvZ3JhbW1pbmcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVQkJKDF1ICZsdDsmbHQ7IDIpCiYjNDM7LyogTk9ORSBzb3VyY2UgKG1lYW5zIHN0ZWVyaW5nIHRhZyBpcyB6ZXJvKSBUUEhfU1QgYmF0Y2ggcHJvZ3JhbW1pbmcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkUJCSgxdSAmbHQ7Jmx0OyAzKQomIzQzOy8qIERNQUJVRiBzb3VyY2UgcmVzb2x2ZSBzdGVlcmluZyB0YWcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1NUCSgxdSAmbHQ7Jmx0OyA0KQomIzQzOy8qIENQVSBzb3VyY2UgcmVzb2x2ZSBzdGVlcmluZyB0YWcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUCSgxdSAmbHQ7Jmx0OyA1KQomIzQzOwomIzQzOy8qCiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgVFBIIGF0dHJpYnV0ZXMgZnJvbSBnaXZlbiBzb3VyY2UKJiM0MzsgKgomIzQzOyAqIEdFVCBvbmx5CiYjNDM7ICoKJiM0MzsgKiBSZXF1aXJlcyBwcmlvciBzdWNjZXNzZnVsIFNFVCBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCwgb3RoZXJ3aXNlCiYjNDM7ICogdGhpcyBmZWF0dXJlIHdpbGwgcmV0dXJuIGVycm9yLgomIzQzOyAqCiYjNDM7ICogQGZsYWdzOiBJTiAtIHNvdXJjZSB0eXBlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX1NSQ18qKQomIzQzOyAqICAgICAgICAgYW5kIHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2Ugc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpCiYjNDM7ICogQHNyYzogICBJTiAtIHNvdXJjZSBpZGVudGlmaWVyLCBlLmcuIGRtYWJ1ZiBmZCB3aGVuIFNSQ19ETUFCVUYgaXMgc2V0IGluCiYjNDM7ICogICAgICAgICBmbGFncwomIzQzOyAqIEB2YWxpZDogT1VUIC0gYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcywgc2VlCiYjNDM7ICogICAgICAgICBWRklPX0RFVklDRV9UUEhfVkFMSURfKgomIzQzOyAqIEBwaDogICAgT1VUIC0gVFBIIHByb2Nlc3NpbmcgaGludCAodmFsaWQgd2hlbiBWQUxJRF9QSCBpcyBzZXQgaW4gdmFsaWQpCiYjNDM7ICogQHN0OiAgICBPVVQgLSBUUEggc3RlZXJpbmcgdGFnICh2YWxpZCB3aGVuIFZBTElEX1NUIGlzIHNldCBpbiB2YWxpZCkKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzOwlfX3UzMiBzcmM7CiYjNDM7CV9fdTggIHZhbGlkOwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIICgxdSAmbHQ7Jmx0OyAwKSAvKiBwaCBob2xkcyB2YWxpZCBwcm9jZXNzaW5nIGhpbnQgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVCAoMXUgJmx0OyZsdDsgMSkgLyogc3QgaG9sZHMgdmFsaWQgc3RlZXJpbmcgdGFnICovCiYjNDM7CV9fdTggIHBoOwomIzQzOwlfX3UxNiBzdDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1QgLSBCYXRjaCBwcm9ncmFtIGFyY2hpdGVjdGVkIHN0ZWVyaW5nIHRhZwomIzQzOyAqIHRhYmxlIGVudHJpZXMKJiM0MzsgKiBSZXR1cm4gdmFsdWU6ICZndDs9MCA9IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzOwomIzQzOyAqICAgICAgICAgICAgICAgJmx0OzAgID0gbmVnYXRpdmUgZXJybm8KJiM0MzsgKgomIzQzOyAqIFNFVCBvbmx5CiYjNDM7ICoKJiM0MzsgKiBBZGRpdGlvbmFsIGNvbnN0cmFpbnQ6IFVzZXJzcGFjZSBtdXN0IGNvbXBsZXRlIHR3byBwcmVyZXF1aXNpdGUgc3RlcHMKJiM0MzsgKiBiZWZvcmUgaW52b2tpbmcgdGhpcyBmZWF0dXJlOgomIzQzOyAqIDEuIENhbGwgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggd2l0aCBTRVQgdG8gZW5hYmxlIHZmaW8gVFBIIHBlcm1pc3Npb247CiYjNDM7ICogMi4gV3JpdGUgdGhlIFRQSCBjb250cm9sIHJlZ2lzdGVyIHRvIGFjdGl2YXRlIGRldmljZSBoYXJkd2FyZSBUUEggbG9naWMuCiYjNDM7ICoKJiM0MzsgKiBAZmxhZ3M6IElOIC0gc291cmNlIHR5cGUgc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfU1JDXyopIGFuZAomIzQzOyAqICAgICAgICAgc3RlZXJpbmcgdGFnIG5hbWVzcGFjZSBzZWxlY3RvciAoc2VlIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCkgYW5kCiYjNDM7ICogICAgICAgICBmYWlsdXJlIHBvbGljeSAoc2VlIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUKQomIzQzOyAqIEBzdGFydDogSU4gLSBmaXJzdCBzdGVlcmluZyB0YWcgdGFibGUgaW5kZXggLyBNU0ktWCB2ZWN0b3IKJiM0MzsgKiBAY291bnQ6IElOIC0gbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byBwcm9ncmFtCiYjNDM7ICogQGRlc3RzOiBJTiAtIHVzZXIgcG9pbnRlciB0byBhcnJheSBvZiBzb3VyY2UgdTMyIHZhbHVlcwomIzQzOyAqLwomIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB7CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzOwlfX3UxNiBzdGFydDsKJiM0MzsJX191MTYgY291bnQ7CiYjNDM7CV9fYWxpZ25lZF91NjQgZGVzdHM7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBTb3VyY2UgaG9sZHMgZG1hLWJ1ZiBmZCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgICAgICAoMXUgJmx0OyZsdDsgMCkKJiM0MzsvKiBVc2UgZXh0ZW5kZWQgMTYtYml0IHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2UgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRAkoMXUgJmx0OyZsdDsgMSkKJiM0MzsvKiBTb3VyY2UgaG9sZHMgdm9sYXRpbGUgbWVtb3J5IENQVSBJRCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUJKDF1ICZsdDsmbHQ7IDIpCiYjNDM7LyogU291cmNlIGhvbGRzIHBlcnNpc3RlbnQgbWVtb3J5IENQVSBJRCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVAkoMXUgJmx0OyZsdDsgMykKJiM0MzsvKiBUUEhfU1Qgb25seTogc2V0IHN0ZWVyaW5nIHRhZyB0byB6ZXJvICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUJKDF1ICZsdDsmbHQ7IDQpCiYjNDM7LyogVFBIX1NUIG9ubHk6IGZhaWwgaWYgcmVzb2x2ZWQgc3RlZXJpbmcgdGFnIGlzIHplcm8gKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUCSgxdSAmbHQ7Jmx0OyA1KQomIzQzOwogLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovCiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM5MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpIGFuZCBETUEtQlVGIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgaW50ZWdyYXRpbmcgUENJZSBUUEggd2l0aCBETUEtQlVGLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBWRklPIGZyYW1ld29yay4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBub24tdHJpdmlhbCBwaWVjZSBvZiB3b3JrLCB0b3VjaGluZyBhIGdvb2QgY2h1bmsgb2YgdGhlIGtlcm5lbDogYGRtYS1idWYuY2AsIHRoZSBgcGNpL3RwaC5jYCBhbmQgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBWRklPIFBDSSBjb2RlLCBhcyB3ZWxsIGFzIHNldmVyYWwgaGVhZGVyIGZpbGVzLiBUaGUgYnJlYWR0aCBvZiB0aGUgY2hhbmdlcyBpbW1lZGlhdGVseSBzaWduYWxzIHNvbWUgY29tcGxleGl0eSBhbmQgdGhlIG5lZWQgZm9yIGNhcmVmdWwgc2NydXRpbnkuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBhaW0gaGVyZSBpcyB0byBleHBvc2UgVFBIIGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHRocm91Z2ggVkZJTy4gSSBzZWUgbmV3IFZGSU8gaW9jdGxzIGJlaW5nIGludHJvZHVjZWQ6IGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCwgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIYCwgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkVgLCBhbmQgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUYC4gVGhlIGFkZGl0aW9uIG9mIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpbiBgZG1hLWJ1Zi5jYCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBjaS90cGguY2AgaW5jbHVkaW5nIG5ldyBmdW5jdGlvbnMgbGlrZSBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHRgLCBgcGNpZV90cGhfc2V0X3N0X2VudHJpZXNgLCBhbmQgdGhlIGVuYWJsZW1lbnQvc3VwcG9ydCBjaGVja3MsIGFsbCBzZWVtIHRvIGJlIHBsdW1iaW5nIHRoZSBuZWNlc3NhcnkgcGllY2VzIHRvZ2V0aGVyLiBJdCBhcHBlYXJzIGZ1bmN0aW9uYWwsIGFuZCByZWFjaGFibGUgdmlhIFZGSU8gaW9jdGxzLiBUaGlzIG1lYW5zIHdlICphYnNvbHV0ZWx5KiBuZWVkIHRvIGZ1enogdGhlIG5ldyBpb2N0bHMgYWdncmVzc2l2ZWx5OyBhIG1pc2ludGVycHJldGF0aW9uIGNvdWxkIGhhdmUgc2V2ZXJlIHJlcGVyY3Vzc2lvbnMuCgpCZWZvcmUgSSBkZWx2ZSBkZWVwZXIsIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29uZmlnIG9wdGlvbnMgd2UgbmVlZCB0byBrbm93IGFib3V0LiBUaGUgY29kZSB1c2VzIGBDT05GSUdfUENJRV9UUEhgIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBpbmNsdWRpbmcgdGhlIG1haW4gVkZJTyBQQ0kgZHJpdmVyLCBhcyB3ZWxsIGFzIHRoZSBwY2kgYW5kIHRwaCBoZWFkZXJzLiBgQ09ORklHX1ZGSU9fUENJYCBpcyBjbGVhcmx5IHRoZSBiYWNrYm9uZSBjb25maWcgZm9yIFZGSU8gUENJLCBhbmQgaXQmIzM5O3MgdW5zdXJwcmlzaW5nIHRvIHNlZSB0aGF0IGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgIGlzIHJlcXVpcmVkLCBnaXZlbiB0aGUgRE1BLUJVRiBpbnRlZ3JhdGlvbi4gTmV4dCwgSSBzaG91bGQgbG9vayBhdCB3aGVyZSBgQ09ORklHX1BDSUVfVFBIYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcyB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgbmVlZGVkIGZvciB0aGlzIG5ldyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lFX1RQSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXG4tLVxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTYtXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtUTFAgUHJvY2Vzc2luZyBIaW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDc1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlBDSWUgVFBIIGFuZCBWRklPLVBDSSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYFBDSUVfVFBIYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCwgcmlnaHQ/IE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGggYFZGSU9fUENJYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgUENJZSBUUEggaXMgaGFuZGxlZC4gUGVyaGFwcyBJIHNob3VsZCBhbHNvIGxvb2sgZm9yIFZGSU8tc3BlY2lmaWMgY29kZSBwYXRocywgdG8gc2VlIGhvdyB0byBkZWFsIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGl0cyBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIHNlZSBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjA1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFZGSU8gQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBWRklPIHNldHVwIGhlcmUuIExvb2tzIGxpa2UgYFZGSU9fUENJYCBpcyB0aGUgY29yZSwgdGhlIG1haW4gbW9kdWxlIHdlIG5lZWQgZm9yIFBDSSBwYXNzdGhyb3VnaCwgbmF0dXJhbGx5LiBCdXQsIGlmIHdlIHdhbnQgdG8gbGV2ZXJhZ2UgdGhlIGRtYWJ1ZiBmZWF0dXJlcywgdGhlbiB3ZSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIGBWRklPX1BDSV9ETUFCVUZgIGFzIHdlbGwuIFRoYXQgb25lLCBJIHNlZSwgZGVwZW5kcyBvbiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4KClNvLCB0byBiZSBleHBsaWNpdCBhbmQgY292ZXIgYWxsIHRoZSBiYXNlcywgSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgd2UgZW5hYmxlIGBQQ0lFX1RQSGAsIHRoZW4gZW5hYmxlIGBWRklPX1BDSWAsIGZvbGxvd2VkIGJ5IGBQQ0lfUDJQRE1BYCwgYW5kLCBmaW5hbGx5LCBgRE1BX1NIQVJFRF9CVUZGRVJgLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFBDSV9QMlBETUFgIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX1AyUERNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE5Nz1jb25maWcgUENJRV9UUEhcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvcGNpL0tjb25maWc6MjA2OmNvbmZpZyBQQ0lfUDJQRE1BXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7UENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MDcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBUUEggSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGRyaXZpbmcgdGhpcyBUUEggaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBzdWdnZXN0cyB0aGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlczogYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AsIGFuZCBmaW5hbGx5IGBwY2llX2VuYWJsZV90cGhfZXh0YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRyb2wgZmxvdy4gRmlyc3QsIHRob3VnaCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbmQgdGhhdCB0aGV5JiMzOTtyZSBjb3JyZWN0bHkgY29ubmVjdGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIGFyZSBzb2xpZCBiZWZvcmUgSSBzdGFydCBhc3NlbWJsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2NTY9c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2ODEtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjgyOnN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjgzLVx0XHRcdFx0ICAgICB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTc1MD1zdGF0aWMgaW50IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3NS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3NzY6c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3Ny1cdFx0XHR1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTgzOD1zdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODUzLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTg1NDpzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTg1NS1cdFx0XHRcdHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xOTMxPWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTUyLVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSDpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE5NTM6XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5NTQtXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkU6XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxOTU1Olx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHZkZXYsIGZsYWdzLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTk1Ni1cdFx0XHRcdFx0XHRcdCBhcmcsIGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5NTctXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTk1ODpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTk1OS1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTQ0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb25maXJtaW5nIGFuZCBSZWZpbmluZzogQSBRdWljayBDaGVjayoqCgpSaWdodCwgKnRoZXkqIGFyZSB0aGVyZS4gSSBjYW4gc2Vuc2UgaXQuIE5vdywgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGh5cG90aGVzaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QgYW5kIEkgaGF2ZSBhbGwgdGhlIHBpZWNlcyBJIHJlcXVpcmUuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBwcmVzZW5jZSBhbmQgbWFraW5nIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNydWNpYWwgY29tcG9uZW50IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIGlzIHNvdW5kLiBJdCYjMzk7cyBhIGtleSBlbGVtZW50IGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gc29saWQgZ3JvdW5kIHJlZ2FyZGluZyBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgZXhwZWN0ZWQgYmVoYXZpb3IuIEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJ1dCBhIHZpdGFsIHN0ZXAgdG8gYXZvaWQgYW55IGZ1dHVyZSBzdXJwcmlzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xOTMxPWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTQ5LVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTk1MDpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTk1MS1cdFx0XHRcdFx0XHRcdCBhcmdzeik7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0yNTM9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY3LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozNjg6aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM2OS1cdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMjQ9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyNi1cdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEyNzppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyOC1cdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xNDI9c3RhdGljIGlubGluZSBpbnRcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjE0Mzp2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xNDQtXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg1NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFZGSU8gUENJZSBUUEggUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHdpdGhpbiBWRklPIFBDSSBhbmQgRE1BLUJVRiB0byBlbmFibGUgc3VwcG9ydCBmb3IgUENJZSBUUEguIE15IGluaXRpYWwgZ3V0IGZlZWxpbmc/IFRoaXMgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0LiYjMzQ7IFdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZGSU8gZHJpdmVyLCB0aGUgRE1BLUJVRiBmcmFtZXdvcmssIGFuZCB0aGUgUENJZSBoaWVyYXJjaHkuIEFueSBuZXcgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHNwYWNlIGlzIGFsd2F5cyB3b3J0aCBhIHRob3JvdWdoIGxvb2suCgpOb3csIGZvciB0aGUgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgZW5hYmxlZDogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYW5kLCBjcnVjaWFsbHksIGBWRklPX1BDSV9ETUFCVUZgLCB3aGljaCBtZWFucyBlbmFibGluZyB0aGUgZGVwZW5kZW5jaWVzLCBgUENJX1AyUERNQWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoZXNlIGFyZSBteSBncm91bmQgemVyby4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXNlIHN5bWJvbHMgc2VlbSBsaWtlIGdvb2QgcG9pbnRzIHRvIGNvbmNlbnRyYXRlIG9uOgoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgIC0gVGhlc2UgbGlrZWx5IGRlYWwgd2l0aCB0aGUgY29yZSBUUEggZmVhdHVyZSBzZXR1cCBhbmQgaGFuZGxpbmcuCiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAgLSBUaGVzZSBmdW5jdGlvbnMgYXJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlZ3JhdGlvbiB3aXRoIERNQS1CVUYsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIG15IHByaW1hcnkgYXJlYSBvZiBmb2N1cy4KKiAgIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AsIGBwY2llX2VuYWJsZV90cGhfZXh0YCAtIFBDSWUgc2lkZSBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uLiBUaGVzZSBhcmUgaW1wb3J0YW50IGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCiogICBgdmZpb190cGhfY29uZmlnX3dyaXRlYCwgYHZmaW9fdHBoX2NvbmZpZ19yZWFkYCAtIFRoZXNlIHJlcHJlc2VudCB0aGUgY3J1Y2lhbCBpbnRlcmZhY2UgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBUUEggY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byBgdmZpb190cGhfY29uZmlnX3dyaXRlYCBmaXJzdC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb190cGhfY29uZmlnX3dyaXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM9MTE1Nj1zdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExNzItXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jOjExNzM6c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMTc0LVx0XHRcdFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTEyNDc9aW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTI2Ni1cdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS5yZWFkZm4gPSB2ZmlvX3RwaF9jb25maWdfcmVhZDtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM6MTI2NzpcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMjY4LVx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk5MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSYjMzk7bSBoYXZpbmcgaXQ6CgoqKlRQSCBDb25maWd1cmF0aW9uIEV4YW1pbmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCBhbmQgYHZmaW9fdHBoX2NvbmZpZ19yZWFkYCBhcmUgaW5kZWVkIHByZXNlbnQuIEdvb2QsIGdvb2QuIFRoZXkgYXJlIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MsIHNvIHRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gYmVnaW4uIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIHRoYXQgdWx0aW1hdGVseSBsZXZlcmFnZXMgb3IgdXRpbGl6ZXMgdGhvc2UgZnVuY3Rpb25zLiBUaGUga2V5IGFyZWEgb2YgaW50ZXJlc3QgYXQgdGhpcyBwb2ludCBpcyBnb2luZyB0byBiZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGludm9rZWQgaW4gcmVsYXRpb24gdG8gdGhlIFBDSWUgVHJhbnNsYXRpb24gUHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AgaGFzIHRvIHNheS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlIGluIG9yZGVyIHRvIGZpbmQgd2hlcmUgdGhlIGFjdHVhbCBQQ0llIHRyYW5zYWN0aW9ucyBhcmUgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2llX3RwaF9zZXRfc3RfZW50cmllcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS90cGguYz0zNTQ9RVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcbi0tXG5kcml2ZXJzL3BjaS90cGguYy0zNTYtLyoqXG5kcml2ZXJzL3BjaS90cGguYzozNTc6ICogcGNpZV90cGhfc2V0X3N0X2VudHJpZXMgLSBCYXRjaCBzZXQgU3RlZXJpbmcgVGFnIGVudHJpZXMgaW4gdGhlIFNUIHRhYmxlXG5kcml2ZXJzL3BjaS90cGguYy0zNTgtICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0tXG5kcml2ZXJzL3BjaS90cGguYy0zNjQtICovXG5kcml2ZXJzL3BjaS90cGguYzozNjU6aW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXG5kcml2ZXJzL3BjaS90cGguYy0zNjYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTQxNC19XG5kcml2ZXJzL3BjaS90cGguYzo0MTU6RVhQT1JUX1NZTUJPTChwY2llX3RwaF9zZXRfc3RfZW50cmllcyk7XG5kcml2ZXJzL3BjaS90cGguYy00MTYtXG4tLVxuZHJpdmVycy9wY2kvdHBoLmM9NDI1PWludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbmRyaXZlcnMvcGNpL3RwaC5jLTQyNi17XG5kcml2ZXJzL3BjaS90cGguYzo0Mjc6XHRpbnQgcmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJpZXMocGRldiwgaW5kZXgsIDEsIFx1MDAyNnRhZyk7XG5kcml2ZXJzL3BjaS90cGguYy00MjgtXHRyZXR1cm4gcmV0ID09IDEgPyAwIDogcmV0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE4NTQ9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTIwLVx0XHRjbWQgPSB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTkyMTpcdFx0cmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJpZXMocGRldiwgdHBoX3N0LnN0YXJ0LCBpLCB0YWdzKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5MjItXHRcdHZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaD0zOD1pbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtMzktXHRcdFx0ICB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpO1xuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6NDA6aW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC00MS1cdFx0XHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTU3PXN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC01OS17IHJldHVybiAtRUlOVkFMOyB9XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo2MDpzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTYxLVx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBzdGFydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxMDYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFRhcmdldGVkIEZvY3VzKioKCkF3ZXNvbWUhIFRoYXQmIzM5O3MgdGhlIGZlZWxpbmcgd2hlbiB5b3UmIzM5O3JlIGFib3V0IHRvIGRpdmUgaW50byBhIHNwZWNpZmljIGFyZWEuIE5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgcGNpZV9lbmFibGVfdHBoX2V4dGAuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGlzLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGVuZXJneS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHdpbGwgaW1tZWRpYXRlbHkgYmUgbG9va2luZyBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50KSBleHRlbnNpb25zIGluIHJlbGF0aW9uIHRvIFBDSWUgZW5hYmxlbWVudC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaWVfZW5hYmxlX3RwaF9leHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvdHBoLmM9NDUyPUVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNDU0LS8qKlxuZHJpdmVycy9wY2kvdHBoLmM6NDU1OiAqIHBjaWVfZW5hYmxlX3RwaF9leHQgLSBFbmFibGUgVFBIIHN1cHBvcnQgd2l0aCBzcGVjaWZpYyBTVCBtb2RlIGFuZFxuZHJpdmVycy9wY2kvdHBoLmMtNDU2LSAqIHJlcXVlc3RlciB0eXBlXG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNDY1LSAqL1xuZHJpdmVycy9wY2kvdHBoLmM6NDY2OmludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLCB1OCByZXFfdHlwZSlcbmRyaXZlcnMvcGNpL3RwaC5jLTQ2Ny17XG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNTEwLX1cbmRyaXZlcnMvcGNpL3RwaC5jOjUxMTpFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHQpO1xuZHJpdmVycy9wY2kvdHBoLmMtNTEyLVxuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTUxNy0gKlxuZHJpdmVycy9wY2kvdHBoLmM6NTE4OiAqIFdyYXBwZXIgZm9yIHBjaWVfZW5hYmxlX3RwaF9leHQoKSwgYXV0b21hdGljYWxseSB1c2VzIHRoZSBwcmUtY2FjaGVkXG5kcml2ZXJzL3BjaS90cGguYy01MTktICogdHBoX21heF90eXBlIHZhbHVlIChuZWdvdGlhdGVkIG1heGltdW0gcmVxdWVzdGVyIHR5cGUgYmV0d2VlbiBkZXZpY2UgYW5kXG4tLVxuZHJpdmVycy9wY2kvdHBoLmM9NTI0PWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXG5kcml2ZXJzL3BjaS90cGguYy01MjUte1xuZHJpdmVycy9wY2kvdHBoLmM6NTI2Olx0cmV0dXJuIHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcGRldi1cdTAwM2V0cGhfbWF4X3R5cGUpO1xuZHJpdmVycy9wY2kvdHBoLmMtNTI3LX1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTExNzM9c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTIxMi1cdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM6MTIxMzpcdFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCByZXEpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMjE0LVx0XHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTQ2PXZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo0NzppbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSwgdTggcmVxX3R5cGUpO1xuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNDgtaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSk7XG4tLVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg9NzM9c3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6NzQ6c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTc1LVx0XHRcdFx0ICAgICAgdTggcmVxX3R5cGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTI2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRQSCBTeW1ib2xzIGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5OgoKKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYAoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAKKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YAoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAKKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYAoqICAgYGRtYV9idWZfZ2V0X3BjaV90cGhgCiogICBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHRgCiogICBgcGNpZV90cGhfc2V0X3N0X2VudHJpZXNgCiogICBgcGNpZV9lbmFibGVfdHBoX2V4dGAKKiAgIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgCiogICBgdmZpb190cGhfY29uZmlnX3JlYWRgCgpUaGVzZSBzZWVtIHByZXR0eSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIHBhdGNoIGl0c2VsZiwgbm90IHBhcnQgb2YgdGhlIGNvcmUgaG90LXBhdGggY29kZSwgd2hpY2ggaXMgZ29vZC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gc3ltYm9scyB0aGF0IGFyZSByZWxldmFudC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBgQ09ORklHX0FDUElgIGNvbWVzIHVwIGluIGEgY291cGxlIG9mIHBsYWNlczogYHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0YCBhbmQgYHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWRgLiBIb3dldmVyLCBgQUNQSWAgaXMgYmFzaWNhbGx5IGEgZ2l2ZW4gb24geDg2LCBpc24mIzM5O3QgaXQ/IFNvLCBJIGRvbiYjMzk7dCB0aGluayBJIHJlYWxseSBuZWVkIHRvIGV4cGxpY2l0bHkgY2FsbCB0aGF0IG91dCB1bmxlc3MgaXQmIzM5O3MgKnNwZWNpZmljKiB0byB0aGlzIFRQSCBmZWF0dXJlLiBUaGUgZmVhdHVyZSBpdHNlbGYsIHRob3VnaCwgdGhhdCYjMzk7cyBgUENJRV9UUEhgLgoKQWxyaWdodCwgSSBuZWVkIHRvIHJldmlzaXQgdGhlIGBWRklPX1BDSV9ETUFCVUZgIHNldHRpbmcuIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyBhIGJpdCBtb3JlIGludm9sdmVkLiBJdCYjMzk7cyBjb25maWd1cmVkIGFzIGBkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgJmFtcDsmYW1wOyBQQ0lfUDJQRE1BICZhbXA7JmFtcDsgRE1BX1NIQVJFRF9CVUZGRVJgLiBPa2F5LCBzbywgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2UgYFZGSU9fUENJYCwgSSBkZWZpbml0ZWx5IG5lZWQgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIG1ha2Ugc3VyZSB0byBsaXN0IHRoZW0uCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBmb3IgYERNQV9TSEFSRURfQlVGRkVSYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQxMjkKCQkJCQkJCW91dHB1dDogMjc0CgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFZGSU8tUENJIENvbmZpZ3VyYXRpb24gYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYm9vbGVhbiwgYW5kIHVzdWFsbHksIGl0JiMzOTtzIHNldCB2aWEgb3RoZXIgY29uZmlndXJhdGlvbnMuIE1ha2VzIHNlbnNlLiBUaGVuIHRoZXJlIGFyZSBzb21lIGNvbmZpZ3VyYXRpb25zIHRvIGxpc3QgLSBJJiMzOTtsbCBqb3QgdGhlbSBkb3duOiBgUENJRV9UUEhgLCBgVkZJT19QQ0lgLCBgUENJX1AyUERNQWAsIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlaXIgdHlwZXMgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCBtZSBjaGVjay4gYFZGSU9fUENJYCBpcyBhIHRyaXN0YXRlLCBhbmQgdGhhdCBjaGVja3Mgb3V0LCBhcyBpcyBgVkZJT19QQ0lfQ09SRWAuIGBQQ0lFX1RQSGAgaXMgYSBib29sLiBHb29kLiBgUENJX1AyUERNQWAgaXMgYWxzbyBhIGJvb2wuIFJpZ2h0LiBBbmQgZmluYWxseSwgYERNQV9TSEFSRURfQlVGRkVSYCwgYWxzbyBhIGJvb2xlYW4uIFNvLCBhbGwgYm9vbGVhbnMgYW5kIHRyaXN0YXRlcywgY29uZmlybWVkLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyBtYWtlIGEgbm90ZSBvZiB0aG9zZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uczogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4KCk5vdyBJJiMzOTtsbCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgYnVuY2ggb2YgZnVuY3Rpb25zIHN0YXJ0aW5nIHdpdGggYHZmaW9fcGNpXy4uLmAuIFRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGluc2lkZSBgdmZpb19wY2lfY29yZS5jYC4gTGlzdGluZyBhbGwgb2YgdGhvc2UgbWlnaHQgYmUgdG9vIGV4aGF1c3RpdmUsIHNvIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBwcmltYXJ5IElPQ1RMIGhhbmRsZXJzLgoKT2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdGAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCwgYHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0YCwgYHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzYCwgYHBjaWVfZW5hYmxlX3RwaF9leHRgLCBhbmQgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAuCgpUaGlzIGFwcGVhcnMgcHJldHR5IGNvbXByZWhlbnNpdmUsIGNvdmVyaW5nIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMuIEkgdGhpbmsgdGhpcyBpcyBhIHNvbGlkIHJldmlldy4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZ2V0X2NwdV9zdF9leHQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfc2V0X3N0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7cGNpZV9lbmFibGVfdHBoX2V4dCYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gc3VwcG9ydCBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBJdCBhZGRzIG5ldyBWRklPIGlvY3Rscy9mZWF0dXJlcyBmb3IgVFBIIGNvbmZpZ3VyYXRpb24gYW5kIHJlc29sdXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZ2V0X2NwdV9zdF9leHQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfc2V0X3N0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7cGNpZV9lbmFibGVfdHBoX2V4dCYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gc3VwcG9ydCBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBJdCBhZGRzIG5ldyBWRklPIGlvY3Rscy9mZWF0dXJlcyBmb3IgVFBIIGNvbmZpZ3VyYXRpb24gYW5kIHJlc29sdXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNTo0NS41MzQxNjA4MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTAzMDY2OTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0XCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhcIixcbiAgICBcImRtYV9idWZfZ2V0X3BjaV90cGhcIixcbiAgICBcInBjaWVfdHBoX2dldF9jcHVfc3RfZXh0XCIsXG4gICAgXCJwY2llX3RwaF9zZXRfc3RfZW50cmllc1wiLFxuICAgIFwicGNpZV9lbmFibGVfdHBoX2V4dFwiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gc3VwcG9ydCBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBJdCBhZGRzIG5ldyBWRklPIGlvY3Rscy9mZWF0dXJlcyBmb3IgVFBIIGNvbmZpZ3VyYXRpb24gYW5kIHJlc29sdXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA1OjQ1LjUzNDE2NjA5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEyMDYxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGIwMGM2MjQ3NzFmYzA3NjRmNzc3MWY3MDVjMTU5MGY3ZjY0NGM3OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAxNCAxNjowNTo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xcbmluZGV4IGQ1MDRjNjM2ZGMyOTRlLi5lODMxNGVkMjQwZDMzNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXFxuKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xcbkBAIC05MzksNiArOTM5LDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcXG4gICogICAgIC0gZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KClcXG4gICogICAgIC0gZG1hX2J1Zl92bWFwKClcXG4gICogICAgIC0gZG1hX2J1Zl92dW5tYXAoKVxcbisgKiAgICAgLSBkbWFfYnVmX2dldF9wY2lfdHBoKClcXG4gICpcXG4gICogMi4gSW1wb3J0ZXJzIG11c3Qgbm90IGhvbGQgdGhlIGRtYS1idWYgcmVzZXJ2YXRpb24gbG9jayB3aGVuIGNhbGxpbmcgdGhlc2VcXG4gICogICAgZnVuY3Rpb25zOlxcbkBAIC05NzksNiArOTgwLDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcXG4gICogICAgIC0gXFx1MDAyNmRtYV9idWZfb3BzLnVubWFwX2RtYV9idWYoKVxcbiAgKiAgICAgLSBcXHUwMDI2ZG1hX2J1Zl9vcHMudm1hcCgpXFxuICAqICAgICAtIFxcdTAwMjZkbWFfYnVmX29wcy52dW5tYXAoKVxcbisgKiAgICAgLSBcXHUwMDI2ZG1hX2J1Zl9vcHMuZ2V0X3BjaV90cGgoKVxcbiAgKlxcbiAgKiAzLiBFeHBvcnRlcnMgbXVzdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlXFxuICAqICAgIGZ1bmN0aW9uczpcXG5AQCAtMTE0NCw2ICsxMTQ2LDM2IEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgXFxcIkRNQV9CVUZcXFwiKTtcXG4gXFxuKy8qKlxcbisgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXFxuKyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcXG4rICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxcbisgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxcbisgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcXG4rICpcXG4rICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFxcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCBjYWxsYmFjay5cXG4rICpcXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlXFxuKyAqIGV4cG9ydGVyIGRvZXMgbm90IGltcGxlbWVudCB0aGUgY2FsbGJhY2sgb3IgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGVcXG4rICogcmVxdWVzdGVkIG5hbWVzcGFjZS5cXG4rICpcXG4rICogVGhlIHJldHVybmVkIHN0ZWVyaW5nIHRhZyBhbmQgcHJvY2Vzc2luZyBoaW50IGFyZSBvbmx5IHZhbGlkIHVudGlsIHRoZVxcbisgKiBleHBvcnRlciBpbnZhbGlkYXRlcyB0aGUgY3VycmVudCBtYXBwaW5nIChzaWduYWxsZWQgdG8gdGhlIGltcG9ydGVyIHZpYVxcbisgKiBcXHUwMDI2ZG1hX2J1Zl9hdHRhY2hfb3BzLm1vdmVfbm90aWZ5KS4gSW1wb3J0ZXJzIG11c3QgcmUtcXVlcnkgYWZ0ZXIgYSBuZXdcXG4rICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLlxcbisgKi9cXG4raW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcXG4re1xcbitcXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXG4rXFx0aWYgKCFkbWFidWYtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BjaV90cGgpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiBkbWFidWYtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgc3RlZXJpbmdfdGFnLCBwaCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9nZXRfcGNpX3RwaCwgXFxcIkRNQV9CVUZcXFwiKTtcXG4rXFxuIC8qKlxcbiAgKiBkbWFfYnVmX21hcF9hdHRhY2htZW50IC0gUmV0dXJucyB0aGUgc2NhdHRlcmxpc3QgdGFibGUgb2YgdGhlIGF0dGFjaG1lbnQ7XFxuICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xcbmluZGV4IDY1NWZmZDYwZTYyZjZhLi5lNmE4NTBhYjJiMDM3ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXFxuQEAgLTE2NSwxNCArMTY1LDYyIEBAIHN0YXRpYyB1OCBnZXRfc3RfbW9kZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuICAqL1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbi1cXHR1MzIgcmVnO1xcbitcXHR1MzIgcmVnID0gMDtcXG4rXFxuK1xcdGlmICghcGRldi1cXHUwMDNldHBoX2NhcClcXG4rXFx0XFx0cmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7XFxuIFxcbiBcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2cmVnKTtcXG4gXFxuLVxcdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XFxuK1xcdHJldHVybiByZWcgXFx1MDAyNiBQQ0lfVFBIX0NBUF9MT0NfTUFTSztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MpO1xcbiBcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XFxuKyAqXFxuKyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cXG4rICovXFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBUUEggQ29tcGxldGVyIHN1cHBvcnRcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICpcXG4rICogUmVhZHMgdGhlIFxcXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFxcXCIgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cXG4rICogXFxcIm5vdCBzdXBwb3J0ZWRcXFwiIHNvIGNhbGxlcnMgb25seSBuZWVkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgdGhyZWVcXG4rICogZGVmaW5lZCB2YWx1ZXMuXFxuKyAqXFxuKyAqIFJldHVybjogb25lIG9mICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSxcXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXFxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxcbisgKi9cXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0dTMyIHJlZztcXG4rXFxuK1xcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFxcdTAwMjZyZWcpKVxcbitcXHRcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuK1xcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXG4rXFx0c3dpdGNoIChGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZykpIHtcXG4rXFx0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk6XFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk7XFxuK1xcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEg6XFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XFxuK1xcbiAvKlxcbiAgKiBSZXR1cm4gdGhlIHNpemUgb2YgU1QgdGFibGUuIElmIFNUIHRhYmxlIGlzIG5vdCBpbiBUUEggUmVxdWVzdGVyIEV4dGVuZGVkXFxuICAqIENhcGFiaWxpdHkgc3BhY2UsIHJldHVybiAwLiBPdGhlcndpc2UgcmV0dXJuIHRoZSBTVCBUYWJsZSBTaXplICsgMS5cXG5AQCAtMTg0LDkgKzIzMiw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXFxuIFxcdGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7XFxuLVxcbi1cXHQvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogZGVmaW5lZCBpbiBwY2lfcmVncy5oICovXFxuLVxcdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XFxuIFxcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTIzMSwyMCArMjc2LDIyIEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIH1cXG4gXFxuIC8qKlxcbi0gKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXFxuLSAqIHdpdGggYSBzcGVjaWZpYyBDUFVcXG4rICogcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5XFxuKyAqIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSwgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZSBzZWxlY3Rpb25cXG4gICogQHBkZXY6IFBDSSBkZXZpY2VcXG4gICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxcbisgKiBAcmVxX3R5cGU6IFRQSCByZXF1ZXN0ZXIgdHlwZSB0byBzZWxlY3QgU1QgbmFtZXNwYWNlXFxuICAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXFxuICAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZFxcbiAgKlxcbi0gKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFcXG4tICogc3BlY2lmaWMgQ1BVIGFzIGluZGljYXRlZCBieSBjcHUuXFxuKyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLFxcbisgKiB1c2luZyB0aGUgc3BlY2lmaWVkIFRQSCByZXF1ZXN0ZXIgdHlwZSB0byBzZWxlY3QgdGhlIGNvcnJlY3QgU1QgbmFtZXNwYWNlLlxcbisgKiBWYWxpZGF0ZXMgcmVxdWVzdGVyIHR5cGUgYWdhaW5zdCBoYXJkd2FyZSBuZWdvdGlhdGVkIGNhcGFiaWxpdHkgbGltaXRzLlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuICAqL1xcbi1pbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHQgICAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfQUNQSVxcbiBcXHRzdHJ1Y3QgcGNpX2RldiAqcnA7XFxuQEAgLTI1Myw2ICszMDAsMTAgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHR1MzIgY3B1X3VpZDtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHxcXG4rXFx0XFx0cmVxX3R5cGUgXFx1MDAzZSBwZGV2LVxcdTAwM2V0cGhfbWF4X3R5cGUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cmV0ID0gYWNwaV9nZXRfY3B1X3VpZChjcHUsIFxcdTAwMjZjcHVfdWlkKTtcXG4gXFx0aWYgKHJldCAhPSAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC0yNjgsMzUgKzMxOSw1NCBAQCBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbi1cXHQqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCBwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUsIFxcdTAwMjZpbmZvKTtcXG4rXFx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcmVxX3R5cGUsIFxcdTAwMjZpbmZvKTtcXG4gXFxuLVxcdHBjaV9kYmcocGRldiwgXFxcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcXFxuXFxcIixcXG4rXFx0cGNpX2RiZyhwZGV2LCBcXFwiZ2V0IHN0ZWVyaW5nIHRhZzogbWVtX3R5cGU9JXMsIHJlcV90eXBlPSV1LCBjcHU9JWQsIHRhZz0lIzA0eFxcXFxuXFxcIixcXG4gXFx0XFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcXFwidm9sYXRpbGVcXFwiIDogXFxcInBlcnNpc3RlbnRcXFwiLFxcbi1cXHRcXHRjcHUsICp0YWcpO1xcbitcXHRcXHRyZXFfdHlwZSwgY3B1LCAqdGFnKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiAjZWxzZVxcbiBcXHRyZXR1cm4gLUVOT0RFVjtcXG4gI2VuZGlmXFxuIH1cXG4tRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0X2V4dCk7XFxuIFxcbiAvKipcXG4tICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxcbisgKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXFxuKyAqIHdpdGggYSBzcGVjaWZpYyBDUFVcXG4gICogQHBkZXY6IFBDSSBkZXZpY2VcXG4tICogQGluZGV4OiBTVCB0YWJsZSBlbnRyeSBpbmRleFxcbi0gKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgd3JpdHRlblxcbisgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXFxuKyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXFxuKyAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZFxcbiAgKlxcbi0gKiBGaWd1cmUgb3V0IHRoZSBwcm9wZXIgbG9jYXRpb24gb2YgU1QgdGFibGUsIGVpdGhlciBpbiB0aGUgTVNJLVggdGFibGUgb3JcXG4tICogaW4gdGhlIFRQSCBFeHRlbmRlZCBDYXBhYmlsaXR5IHNwYWNlLCBhbmQgd3JpdGUgdGhlIFN0ZWVyaW5nIFRhZyBpbnRvXFxuLSAqIHRoZSBTVCBlbnRyeSBwb2ludGVkIGJ5IGluZGV4LlxcbisgKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSxcXG4rICogdXNpbmcgdGhlIGRlZmF1bHQgbmVnb3RpYXRlZCBUUEggcmVxdWVzdGVyIHR5cGUuXFxuICAqXFxuICAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcXG4gICovXFxuLWludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4re1xcbitcXHRyZXR1cm4gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQocGRldiwgbWVtX3R5cGUsIHBkZXYtXFx1MDAzZXRwaF9tYXhfdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNwdSwgdGFnKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzIC0gQmF0Y2ggc2V0IFN0ZWVyaW5nIFRhZyBlbnRyaWVzIGluIHRoZSBTVCB0YWJsZVxcbisgKiBAcGRldjogUENJIGRldmljZVxcbisgKiBAc3RhcnQ6IHN0YXJ0aW5nIFNUIHRhYmxlIGluZGV4XFxuKyAqIEBjb3VudDogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byB3cml0ZVxcbisgKiBAdGFnczogYXJyYXkgb2YgdTE2IHRhZyB2YWx1ZXMgdG8gcHJvZ3JhbVxcbisgKlxcbisgKiBSZXR1cm46IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzLCBvciBuZWdhdGl2ZSBlcnJub1xcbisgKi9cXG4raW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgY291bnQsIGNvbnN0IHUxNiAqdGFncylcXG4ge1xcbi1cXHR1MzIgbG9jO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTMyIGxvYywgaTtcXG4gXFxuIFxcdGlmICghcGRldi1cXHUwMDNldHBoX2NhcClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTMwNiw3ICszNzYsNyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIFxcbiBcXHQvKiBObyBuZWVkIHRvIHdyaXRlIHRhZyBpZiBkZXZpY2UgaXMgaW4gXFxcIk5vIFNUIE1vZGVcXFwiICovXFxuIFxcdGlmIChwZGV2LVxcdTAwM2V0cGhfbW9kZSA9PSBQQ0lfVFBIX1NUX05TX01PREUpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEaXNhYmxlIFRQSCBiZWZvcmUgdXBkYXRpbmcgU1QgdG8gYXZvaWQgcG90ZW50aWFsIGluc3RhYmlsaXR5IGFzXFxuQEAgLTMxNSwzMSArMzg1LDQ3IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcXG4gXFx0c2V0X2N0cmxfcmVnX3JlcV9lbihwZGV2LCBQQ0lfVFBIX1JFUV9ESVNBQkxFKTtcXG4gXFxuIFxcdGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7XFxuLVxcdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqL1xcbi1cXHRsb2MgPSBGSUVMRF9QUkVQKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCBsb2MpO1xcbi1cXG4tXFx0c3dpdGNoIChsb2MpIHtcXG4tXFx0Y2FzZSBQQ0lfVFBIX0xPQ19NU0lYOlxcbi1cXHRcXHRlcnIgPSBwY2lfbXNpeF93cml0ZV90cGhfdGFnKHBkZXYsIGluZGV4LCB0YWcpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBQQ0lfVFBIX0xPQ19DQVA6XFxuLVxcdFxcdGVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBpbmRleCwgdGFnKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0cGNpZV9kaXNhYmxlX3RwaChwZGV2KTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0c3dpdGNoIChsb2MpIHtcXG4rXFx0XFx0Y2FzZSBQQ0lfVFBIX0xPQ19NU0lYOlxcbitcXHRcXHRcXHRlcnIgPSBwY2lfbXNpeF93cml0ZV90cGhfdGFnKHBkZXYsIHN0YXJ0ICsgaSwgdGFnc1tpXSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBDSV9UUEhfTE9DX0NBUDpcXG4rXFx0XFx0XFx0ZXJyID0gd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHBkZXYsIHN0YXJ0ICsgaSwgdGFnc1tpXSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChlcnIgIT0gMCkge1xcbitcXHRcXHRcXHRwY2lfZXJyKHBkZXYsIFxcXCJmYWlsZWQgdG8gc2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSV1LCB0YWdzPSV1LCByZXQ9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdChsb2MgPT0gUENJX1RQSF9MT0NfTVNJWCkgPyBcXFwiTVNJLVhcXFwiIDogXFxcIlNUXFxcIixcXG4rXFx0XFx0XFx0XFx0c3RhcnQgKyBpLCB0YWdzW2ldLCBlcnIpO1xcbitcXHRcXHRcXHRwY2llX2Rpc2FibGVfdHBoKHBkZXYpO1xcbitcXHRcXHRcXHRyZXR1cm4gaSBcXHUwMDNlIDAgPyBpIDogZXJyO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgcGRldi1cXHUwMDNldHBoX3JlcV90eXBlKTtcXG4gXFxuLVxcdHBjaV9kYmcocGRldiwgXFxcInNldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBpbmRleD0lZCwgdGFnPSUjMDR4XFxcXG5cXFwiLFxcbi1cXHRcXHQobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gXFxcIk1TSS1YXFxcIiA6IFxcXCJTVFxcXCIsIGluZGV4LCB0YWcpO1xcbitcXHRwY2lfZGJnKHBkZXYsIFxcXCJiYXRjaCBzZXQgc3RlZXJpbmcgdGFnOiAlcyB0YWJsZSwgc3RhcnQ9JXUsIGNvdW50PSV1IHN1Y2Nlc3MhXFxcXG5cXFwiLFxcbitcXHRcXHQobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gXFxcIk1TSS1YXFxcIiA6IFxcXCJTVFxcXCIsIHN0YXJ0LCBjb3VudCk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc2V0X3N0X2VudHJpZXMpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnlcXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcXG4rICogQGluZGV4OiBTVCB0YWJsZSBlbnRyeSBpbmRleFxcbisgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgd3JpdHRlblxcbisgKlxcbisgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuKyAqL1xcbitpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuK3tcXG4rXFx0aW50IHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIGluZGV4LCAxLCBcXHUwMDI2dGFnKTtcXG4rXFx0cmV0dXJuIHJldCA9PSAxID8gMCA6IHJldDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX3NldF9zdF9lbnRyeSk7XFxuIFxcbkBAIC0zNjYsMjYgKzQ1MiwyMSBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XFxuIFxcbiAvKipcXG4tICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXFxuKyAqIHBjaWVfZW5hYmxlX3RwaF9leHQgLSBFbmFibGUgVFBIIHN1cHBvcnQgd2l0aCBzcGVjaWZpYyBTVCBtb2RlIGFuZFxcbisgKiByZXF1ZXN0ZXIgdHlwZVxcbiAgKiBAcGRldjogUENJIGRldmljZVxcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XFxuLSAqXFxuLSAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXFxuLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXFxuKyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZTogUENJX1RQSF9TVF8oTlNfTU9ERSAvIElWX01PREUgLyBEU19NT0RFKVxcbisgKiBAcmVxX3R5cGU6IFJlcXVlc3RlciB0eXBlIHRvIGVuYWJsZTogUENJX1RQSF9SRVFfKFRQSF9PTkxZIC8gRVhUX1RQSClcXG4gICpcXG4tICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmdcXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXFxuLSAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQncyBjb21wbGV0ZXIgY2FwYWJpbGl0eS5cXG4rICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBhbmQgcmVxdWVzdGVyIHR5cGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZVxcbisgKiBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuICAqL1xcbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKVxcbiB7XFxuIFxcdHUzMiByZWc7XFxuIFxcdHU4IGRldl9tb2RlcztcXG4tXFx0dTggcnBfcmVxX3R5cGU7XFxuIFxcbiBcXHQvKiBIb25vciBcXFwibm90cGhcXFwiIGtlcm5lbCBwYXJhbWV0ZXIgKi9cXG4gXFx0aWYgKHBjaV90cGhfZGlzYWJsZWQpXFxuQEAgLTM5Nyw2ICs0NzgsMTQgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXFxuIFxcdGlmIChwZGV2LVxcdTAwM2V0cGhfZW5hYmxlZClcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuK1xcdGlmIChwZGV2LVxcdTAwM2V0cGhfbWF4X3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgVFBIIHJlcXVlc3RlciB0eXBlIGNvbXBhdGliaWxpdHkgKi9cXG4rXFx0aWYgKHJlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUgfHwgcmVxX3R5cGUgPT0gMiB8fFxcbitcXHRcXHRyZXFfdHlwZSBcXHUwMDNlIHBkZXYtXFx1MDAzZXRwaF9tYXhfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgU1QgbW9kZSBjb21wYXRpYmlsaXR5ICovXFxuIFxcdG1vZGUgXFx1MDAyNj0gUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0s7XFxuIFxcdGRldl9tb2RlcyA9IGdldF9zdF9tb2RlcyhwZGV2KTtcXG5AQCAtNDA1LDIzICs0OTQsNyBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4gXFxuIFxcdHBkZXYtXFx1MDAzZXRwaF9tb2RlID0gbW9kZTtcXG4gXFxuLVxcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXFxuLVxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFxcdTAwMjZyZWcpO1xcbi1cXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXFxuLVxcdFxcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cGRldi1cXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuLVxcbi1cXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xcbi1cXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XFxuLVxcdFxcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xcbi1cXG4tXFx0XFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xcbi1cXHRcXHRwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi1cXHUwMDNldHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IHJlcV90eXBlO1xcbiBcXG4gXFx0LyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovXFxuIFxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DVFJMLCBcXHUwMDI2cmVnKTtcXG5AQCAtNDM1LDYgKzUwOCwyMyBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4dCk7XFxuK1xcbisvKipcXG4rICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXFxuKyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZTogUENJX1RQSF9TVF8oTlNfTU9ERSAvIElWX01PREUgLyBEU19NT0RFKVxcbisgKlxcbisgKiBXcmFwcGVyIGZvciBwY2llX2VuYWJsZV90cGhfZXh0KCksIGF1dG9tYXRpY2FsbHkgdXNlcyB0aGUgcHJlLWNhY2hlZFxcbisgKiB0cGhfbWF4X3R5cGUgdmFsdWUgKG5lZ290aWF0ZWQgbWF4aW11bSByZXF1ZXN0ZXIgdHlwZSBiZXR3ZWVuIGRldmljZSBhbmRcXG4rICogcm9vdCBwb3J0KS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxcbisgKi9cXG4raW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSlcXG4re1xcbitcXHRyZXR1cm4gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCBwZGV2LVxcdTAwM2V0cGhfbWF4X3R5cGUpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcXG4gXFxuIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC01MDgsMTQgKzU5OCw2MCBAQCB2b2lkIHBjaV9ub190cGgodm9pZClcXG4gXFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuK1xcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XFxuIFxcdGludCBudW1fZW50cmllcztcXG4gXFx0dTMyIHNhdmVfc2l6ZTtcXG4rXFx0dTMyIHJlZyA9IDA7XFxuIFxcbiBcXHRwZGV2LVxcdTAwM2V0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTtcXG4gXFx0aWYgKCFwZGV2LVxcdTAwM2V0cGhfY2FwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2cmVnKTtcXG4rXFx0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxcbitcXHRcXHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xcbitcXG4rXFx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cXG4rXFx0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xcbitcXHRcXHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcXG4rXFx0XFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xcbitcXHRcXHR0cGhfcmVxX3R5cGUgPSBtaW4odHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9tYXhfdHlwZSA9IHRwaF9yZXFfdHlwZTtcXG4rXFxuIFxcdG51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XFxuIFxcdHNhdmVfc2l6ZSA9IHNpemVvZih1MzIpICsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTtcXG4gXFx0cGNpX2FkZF9leHRfY2FwX3NhdmVfYnVmZmVyKHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCwgc2F2ZV9zaXplKTtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQgLSBDaGVjayBpZiByb290IHBvcnQgZXhwb3NlcyBUUEggU1QgX0RTTVxcbisgKiBAcGRldjogdGFyZ2V0IFBDSSBkZXZpY2VcXG4rICpcXG4rICogUmV0dXJuIHRydWUgaWYgcm9vdCBwb3J0IG9mIEBwZGV2IHByb3ZpZGVzIFRQSCBTVCBEU00gZnVuY3Rpb24sXFxuKyAqIGZhbHNlIG90aGVyd2lzZSAoQUNQSSBkaXNhYmxlZCBvciBEU00gbWlzc2luZykuXFxuKyAqL1xcbitib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19BQ1BJXFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XFxuK1xcdGFjcGlfaGFuZGxlIGhhbmRsZTtcXG4rXFxuK1xcdGlmICghcnAgfHwgIXJwLVxcdTAwM2VidXMgfHwgIXJwLVxcdTAwM2VidXMtXFx1MDAzZWJyaWRnZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aGFuZGxlID0gQUNQSV9IQU5ETEUocnAtXFx1MDAzZWJ1cy1cXHUwMDNlYnJpZGdlKTtcXG4rXFx0aWYgKCFoYW5kbGUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBhY3BpX2NoZWNrX2RzbShoYW5kbGUsIFxcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcXG4rXFx0XFx0XFx0ICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpO1xcbisjZWxzZVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuKyNlbmRpZlxcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcXG5pbmRleCA4MzAzNjlmZjg3OGRiZS4uYzQwN2MyMTdiNjQ5ZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXFxuQEAgLTYwLDYgKzYwLDI2IEBAIHN0YXRpYyBib29sIGRpc2FibGVfZGVueWxpc3Q7XFxuIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2RlbnlsaXN0LCBcXFwiRGlzYWJsZSB1c2Ugb2YgZGV2aWNlIGRlbnlsaXN0LiBEaXNhYmxpbmcgdGhlIGRlbnlsaXN0IGFsbG93cyBiaW5kaW5nIHRvIGRldmljZXMgd2l0aCBrbm93biBlcnJhdGEgdGhhdCBtYXkgbGVhZCB0byBleHBsb2l0YWJsZSBzdGFiaWxpdHkgb3Igc2VjdXJpdHkgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnkgdW50cnVzdGVkIHVzZXJzLlxcXCIpO1xcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCB0cGhfcG9saWN5O1xcbitzdGF0aWMgaW50IHRwaF9wb2xpY3lfc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuK3tcXG4rXFx0cmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULFxcbitcXHRcXHRcXHRcXHQgICAgIFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QpO1xcbit9XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB0cGhfcGFyYW1fb3BzID0ge1xcbitcXHQuc2V0ID0gdHBoX3BvbGljeV9zZXQsXFxuK1xcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcXG4rfTtcXG4rbW9kdWxlX3BhcmFtX2NiKHRwaF9wb2xpY3ksIFxcdTAwMjZ0cGhfcGFyYW1fb3BzLCBcXHUwMDI2dHBoX3BvbGljeSwgMDY0NCk7XFxuK01PRFVMRV9QQVJNX0RFU0ModHBoX3BvbGljeSxcXG4rXFx0XFxcIkdsb2JhbCBUUEggcG9saWN5IGxldmVsICgwPWRlZmF1bHQgTm8tU1QpOlxcXFxuXFxcIlxcbitcXHRcXFwiMCA9IE5vLVNUIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxcXG5cXFwiXFxuK1xcdFxcXCIxID0gQWRkIElWIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVSBzb3VyY2VzXFxcXG5cXFwiXFxuK1xcdFxcXCIyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZSwgU1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcXFxcblxcXCJcXG4rXFx0XFxcIiAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xcXFxuXFxcIik7XFxuK1xcbiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3dpdGNoIChwZGV2LVxcdTAwM2V2ZW5kb3IpIHtcXG5AQCAtMTQyLDYgKzE2Miw5IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXFxuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfVkdBXFxuIFxcdHZkZXYtXFx1MDAzZWRpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7XFxuICNlbmRpZlxcbisjaWZkZWYgQ09ORklHX1BDSUVfVFBIXFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgPSB0cGhfcG9saWN5O1xcbisjZW5kaWZcXG4gXFxuIFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uOTdkYWQ2ZGI2OWUzOWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS10cGguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZmaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtMTA4NSw2ICsxMDg2LDE0NiBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9leHRfY2FwX3B3cl9wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKVxcbit7XFxuK1xcdHU4IGNhcDtcXG4rXFx0aW50IGJhc2UgPSAocG9zIFxcdTAwM2U9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgUENJX1NURF9IRUFERVJfU0laRU9GO1xcbitcXHRjYXAgPSB2ZGV2LVxcdTAwM2VwY2lfY29uZmlnX21hcFtwb3NdO1xcbitcXG4rXFx0aWYgKGNhcCA9PSBQQ0lfQ0FQX0lEX0JBU0lDKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFhYWCBDYW4gd2UgaGF2ZSB0byBhYnV0dGluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZT8gKi9cXG4rXFx0d2hpbGUgKHBvcyAtIDEgXFx1MDAzZT0gYmFzZSBcXHUwMDI2XFx1MDAyNiB2ZGV2LVxcdTAwM2VwY2lfY29uZmlnX21hcFtwb3MgLSAxXSA9PSBjYXApXFxuK1xcdFxcdHBvcy0tO1xcbitcXG4rXFx0cmV0dXJuIHBvcztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmZpb191cGRhdGVfdHBoX3Zjb25maWdfYnl0ZXMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBwb3MpXFxuK3tcXG4rXFx0X19sZTMyICp2cHRyID0gKF9fbGUzMiAqKVxcdTAwMjZ2ZGV2LVxcdTAwM2V2Y29uZmlnW3BvcyArIFBDSV9UUEhfQ0FQXTtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR1MzIgdmFsID0gbGUzMl90b19jcHUoKnZwdHIpO1xcbitcXG4rXFx0aWYgKCFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHBkZXYpKSB7XFxuK1xcdFxcdC8qIFJlbW92ZSBleHRlbmRlZCBUUEggaWYgcm9vdC1wb3J0IGRvZXNuJ3Qgc3VwcG9ydCAqL1xcbitcXHRcXHR2YWwgXFx1MDAyNj0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2ZGV2LVxcdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpIHtcXG4rXFx0XFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi9cXG4rXFx0XFx0dmFsIFxcdTAwMjY9IH4oUENJX1RQSF9DQVBfU1RfSVYgfCBQQ0lfVFBIX0NBUF9TVF9EUyB8XFxuK1xcdFxcdFxcdCBQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xcbitcXHR9IGVsc2UgaWYgKHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xcbitcXHRcXHQvKiBSZXBvcnQgb25seSBOby1TVCBhbmQgSVYgbW9kZXMgc3VwcG9ydGVkICovXFxuK1xcdFxcdHZhbCBcXHUwMDI2PSB+UENJX1RQSF9DQVBfU1RfRFM7XFxuK1xcdFxcdC8qIFJlbW92ZSBTVCBsb2NhdGlvbiBhbmQgc2l6ZSBpZiBkZXYgZG9lc24ndCBzdXBwb3J0IElWIG1vZGUgKi9cXG4rXFx0XFx0aWYgKCEodmFsIFxcdTAwMjYgUENJX1RQSF9DQVBfU1RfSVYpKVxcbitcXHRcXHRcXHR2YWwgXFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xcbitcXHR9XFxuK1xcbitcXHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XFxuK1xcbitcXHQvKiBCYWNrdXAgdXBkYXRlZCBjYXBhYmlsaXR5IHJlZ2lzdGVyIHZhbHVlICovXFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9jYXBfdmlydCA9IHZhbDtcXG4rfVxcbitcXG4rLyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovXFxuK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXZSBvbmx5IHZpcnR1YWxpemUgdGhlIFRQSCBoZWFkZXIgKGV4Y2x1ZGluZyB0aGUgU1QgdGFibGUpLlxcbitcXHQgKiBGb3IgdGhlIFNUIHRhYmxlIChpZiBhbnkpLCB0aGUgcmVhZCBvcGVyYXRpb24gcmV0dXJucyAwIGJ5XFxuK1xcdCAqIGRlZmF1bHQsIGFuZCB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIGRpc2NhcmRlZCBieSBkZWZhdWx0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGFsbG9jX3Blcm1fYml0cyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcXG4rXFx0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ0FQLCBBTExfVklSVCwgTk9fV1JJVEUpO1xcbitcXG4rXFx0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsXFxuK1xcdCAgICAgICBQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSyB8IFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfcmVhZChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXFxuK1xcdFxcdFxcdFxcdGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4rXFx0XFx0XFx0XFx0aW50IG9mZnNldCwgX19sZTMyICp2YWwpXFxuK3tcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNlPSBQQ0lfVFBIX0JBU0VfU0laRU9GKSB7XFxuK1xcdFxcdCp2YWwgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2U9IFBDSV9UUEhfQ0FQIFxcdTAwMjZcXHUwMDI2ICF2ZGV2LVxcdTAwM2V0cGhfb3B0X2luKSB7XFxuK1xcdFxcdCp2YWwgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxcbitcXHRcXHRcXHRcXHQgaW50IGNvdW50LCBzdHJ1Y3QgcGVybV9iaXRzICpwZXJtLFxcbitcXHRcXHRcXHRcXHQgaW50IG9mZnNldCwgX19sZTMyIHZhbClcXG4re1xcbitcXHR1MTYgc3RhcnQgPSB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHZkZXYsIHBvcyk7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cXHUwMDNlcGRldjtcXG4rXFx0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xcbitcXHR1OCBtb2RlLCByZXEsIG9yZ19yZXE7XFxuK1xcdF9fbGUzMiBvcmdfdmFsID0gMDtcXG4rXFx0dTE2IGNtZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghdmRldi1cXHUwMDNldHBoX29wdF9pbiB8fCBvZmZzZXQgXFx1MDAzZT0gUENJX1RQSF9CQVNFX1NJWkVPRilcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXG4rXFx0Y21kID0gdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZSh2ZGV2KTtcXG4rXFxuK1xcdG9yZ19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcXHUwMDI2dmRldi1cXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ1RSTF0pO1xcbitcXHR2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBcXHUwMDI2b3JnX3ZhbCk7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcXG4rXFx0aWYgKHJldCAhPSBjb3VudClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRuZXdfY3RybCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXFx1MDAyNnZkZXYtXFx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcXG4rXFx0aWYgKG5ld19jdHJsID09IG9yZ19jdHJsKVxcbitcXHRcXHRnb3RvIG91dDsgLyogT25seSBjYXJlIGFib3V0IGNoYW5nZXMgaW4gVFBIX0NUUkwuICovXFxuK1xcbitcXHRjYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVxcdTAwMjZ2ZGV2LVxcdTAwM2V2Y29uZmlnW3N0YXJ0ICsgUENJX1RQSF9DQVBdKTtcXG4rXFx0bW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgbmV3X2N0cmwpO1xcbitcXHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7XFxuK1xcdGlmIChtb2RlIFxcdTAwM2UgUENJX1RQSF9TVF9EU19NT0RFIHx8ICEoY2FwIFxcdTAwMjYgKDF1IFxcdTAwM2NcXHUwMDNjIG1vZGUpKSB8fCByZXEgPT0gMHgyIHx8XFxuK1xcdFxcdChyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcXHUwMDI2XFx1MDAyNiAhKGNhcCBcXHUwMDI2IFBDSV9UUEhfQ0FQX0VYVF9UUEgpKSlcXG4rXFx0XFx0Z290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi9cXG4rXFxuK1xcdG9yZ19yZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBvcmdfY3RybCk7XFxuK1xcdGlmIChyZXEgPT0gb3JnX3JlcSlcXG4rXFx0XFx0Z290byByZXN0b3JlOyAvKiBPbmx5IGNhcmUgYWJvdXQgcmVxdWVzdGVyIGVuYWJsZSAqL1xcbitcXG4rXFx0aWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkge1xcbitcXHRcXHRyZXQgPSBwY2llX2VuYWJsZV90cGhfZXh0KHBkZXYsIG1vZGUsIHJlcSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFx0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xcbitcXHRcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRnb3RvIG91dDtcXG4rXFxuK3Jlc3RvcmU6XFxuK1xcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTtcXG4rb3V0OlxcbitcXHR2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHZkZXYsIGNtZCk7XFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4gLypcXG4gICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIHBlcm1pc3Npb24gdGFibGVzXFxuICAqL1xcbkBAIC0xMTAwLDYgKzEyNDEsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZClcXG4gXFxuIFxcdGZyZWVfcGVybV9iaXRzKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xcbiBcXHRmcmVlX3Blcm1fYml0cyhcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcXG4rXFx0ZnJlZV9wZXJtX2JpdHMoXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XFxuIH1cXG4gXFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcXG5AQCAtMTEyMCw2ICsxMjYyLDkgQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxcbiBcXHQvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgKi9cXG4gXFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfZXJyX3Blcm0oXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XFxuIFxcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3B3cl9wZXJtKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xcbitcXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTtcXG4rXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdLnJlYWRmbiA9IHZmaW9fdHBoX2NvbmZpZ19yZWFkO1xcbitcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcXG4gXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcbiBcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0RWU0VDXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcbiBcXG5AQCAtMTEyOSwyMyArMTI3NCw2IEBAIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcylcXG4te1xcbi1cXHR1OCBjYXA7XFxuLVxcdGludCBiYXNlID0gKHBvcyBcXHUwMDNlPSBQQ0lfQ0ZHX1NQQUNFX1NJWkUpID8gUENJX0NGR19TUEFDRV9TSVpFIDpcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFBDSV9TVERfSEVBREVSX1NJWkVPRjtcXG4tXFx0Y2FwID0gdmRldi1cXHUwMDNlcGNpX2NvbmZpZ19tYXBbcG9zXTtcXG4tXFxuLVxcdGlmIChjYXAgPT0gUENJX0NBUF9JRF9CQVNJQylcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHQvKiBYWFggQ2FuIHdlIGhhdmUgdG8gYWJ1dHRpbmcgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGU/ICovXFxuLVxcdHdoaWxlIChwb3MgLSAxIFxcdTAwM2U9IGJhc2UgXFx1MDAyNlxcdTAwMjYgdmRldi1cXHUwMDNlcGNpX2NvbmZpZ19tYXBbcG9zIC0gMV0gPT0gY2FwKVxcbi1cXHRcXHRwb3MtLTtcXG4tXFxuLVxcdHJldHVybiBwb3M7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgdmZpb19tc2lfY29uZmlnX3JlYWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxcbiBcXHRcXHRcXHRcXHRpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXFxuIFxcdFxcdFxcdFxcdGludCBvZmZzZXQsIF9fbGUzMiAqdmFsKVxcbkBAIC0xNzAxLDYgKzE4MjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0XFx0cmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGVjYXAgPT0gUENJX0VYVF9DQVBfSURfVFBIKVxcbitcXHRcXHRcXHR2ZmlvX3VwZGF0ZV90cGhfdmNvbmZpZ19ieXRlcyh2ZGV2LCBlcG9zKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IDNmMTFhOTYyNGI5YzAzLi5iOGQ5ZDg0MGE5M2I1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTEzLDYgKzEzLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FwZXJ0dXJlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldmVudGZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG5AQCAtMzAsNiArMzIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11ZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS10cGguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZWVoLmhcXHUwMDNlXFxuQEAgLTEyNywxMCArMTMwLDIwIEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3RwaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3ByaXZhdGUoc2VxKTtcXG4rXFxuK1xcdHNlcV9wcmludGYoc2VxLCBcXFwicG9saWN5PSV1IGNhcC12aXJ0PTB4JXggb3B0LWluPSV1XFxcXG5cXFwiLFxcbitcXHRcXHR2ZGV2LVxcdTAwM2V0cGhfcG9saWN5LCB2ZGV2LVxcdTAwM2V0cGhfY2FwX3ZpcnQsIHZkZXYtXFx1MDAzZXRwaF9vcHRfaW4pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLypcXG4tICogZGlzYWJsZV9pZGxlX2QzIGFuZCBub2ludHhtYXNrIGFyZSB3cml0YWJsZSBtb2R1bGUgcGFyYW1ldGVycyBsYXRjaGVkXFxuLSAqIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UncyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tIHRoZVxcbi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xcbisgKiBkaXNhYmxlX2lkbGVfZDMsIG5vaW50eG1hc2sgYW5kIHRwaF9wb2xpY3kgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzXFxuKyAqIGxhdGNoZWQgcGVyIGRldmljZSBhdCBpbml0LCBzbyBhIGRldmljZSdzIGVmZmVjdGl2ZSB2YWx1ZSBjYW4gZGlmZmVyIGZyb21cXG4rICogdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzXFxuICAqIGhlcmUgZm9yIHZpc2liaWxpdHk7IHJlYWQtb25seSBwYXJhbWV0ZXJzIGNhbid0IGRyaWZ0IGFuZCBhcmUgb21pdHRlZC5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG5AQCAtMTQ2LDYgKzE1OSw4IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0XFx0XFx0XFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldiwgXFxcImRpc2FibGVfaWRsZV9kM1xcXCIsIHBjaV9kaXIsXFxuIFxcdFxcdFxcdFxcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfZGlzYWJsZV9pZGxlX2QzKTtcXG4rXFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldiwgXFxcInRwaFxcXCIsIHBjaV9kaXIsXFxuK1xcdFxcdFxcdFxcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoKTtcXG4gfVxcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbkBAIC02MTAsNiArNjI1LDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0XFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XFxuIFxcbiBcXHR2ZGV2LVxcdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9vcHRfaW4gPSBmYWxzZTtcXG4rXFx0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBuZXcgdXNlciBzZXNzaW9uICovXFxuK1xcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cXHUwMDNlcGRldik7XFxuIFxcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXHR2ZGV2LVxcdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XFxuIFxcdGlmICghdmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxcbkBAIC03NTcsNiArNzc1LDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXG4gXFx0dmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2UodmRldik7XFxuIFxcbitcXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIGV4aXQgdXNlciBzZXNzaW9uICovXFxuK1xcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cXHUwMDNlcGRldik7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBJZiB3ZSBoYXZlIHNhdmVkIHN0YXRlLCByZXN0b3JlIGl0LiAgSWYgd2UgY2FuIHJlc2V0IHRoZSBkZXZpY2UsXFxuIFxcdCAqIGV2ZW4gYmV0dGVyLiAgUmVzZXR0aW5nIHdpdGggY3VycmVudCBzdGF0ZSBzZWVtcyBiZXR0ZXIgdGhhblxcbkBAIC0xNTU4LDYgKzE1NzksNyBAQCBsb25nIHZmaW9fcGNpX2NvcmVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHVuc2lnbmVkIGludCBjbWQsXFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9XFxuIFxcdFxcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSwgdmRldik7XFxuIFxcdHZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9HRVRfSU5GTzpcXG5AQCAtMTU2OSw5ICsxNTkxLDE1IEBAIGxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9JT0VWRU5URkQ6XFxuIFxcdFxcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9pb2V2ZW50ZmQodmRldiwgdWFyZyk7XFxuIFxcdGNhc2UgVkZJT19ERVZJQ0VfUENJX0hPVF9SRVNFVDpcXG4tXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2lvY3RsX3BjaV9ob3RfcmVzZXQodmRldiwgdWFyZyk7XFxuK1xcdFxcdHJldCA9IHZmaW9fcGNpX2lvY3RsX3BjaV9ob3RfcmVzZXQodmRldiwgdWFyZyk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRjYXNlIFZGSU9fREVWSUNFX1JFU0VUOlxcbi1cXHRcXHRyZXR1cm4gdmZpb19wY2lfaW9jdGxfcmVzZXQodmRldiwgdWFyZyk7XFxuK1xcdFxcdHJldCA9IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHZkZXYsIHVhcmcpO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9TRVRfSVJRUzpcXG4gXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2lvY3RsX3NldF9pcnFzKHZkZXYsIHVhcmcpO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0xNjA3LDYgKzE2MzUsMjk5IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB1MzIgdmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19DQVApIHtcXG4rXFx0XFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xcbitcXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XFxuK1xcdFxcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuK3tcXG4rXFx0dTMyIGZsYWdzID0gVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9QSDtcXG4rXFxuK1xcdGlmICh2ZGV2LVxcdTAwM2V0cGhfcG9saWN5IFxcdTAwM2U9IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KHZkZXYtXFx1MDAzZXRwaF9jYXBfdmlydCBcXHUwMDI2IFBDSV9UUEhfQ0FQX1NUX0lWKSkge1xcbitcXHRcXHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkU7XFxuK1xcdFxcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfRE1BQlVGO1xcbitcXHRcXHRpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2KSlcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7XFxuK1xcdH1cXG4rXFx0aWYgKHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgXFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQodmRldi1cXHUwMDNldHBoX2NhcF92aXJ0IFxcdTAwMjYgUENJX1RQSF9DQVBfU1RfRFMpKSB7XFxuK1xcdFxcdGlmICh2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUodmRldikgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTtcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUY7XFxuK1xcdFxcdFxcdGlmIChwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXFx1MDAzZXBkZXYpKVxcbitcXHRcXHRcXHRcXHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2KSlcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0NQVV9TVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZsYWdzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggX191c2VyICphcmcsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB0cGg7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXBjaWVfc3RkX3RwaF9zdXBwb3J0ZWQodmRldi1cXHUwMDNlcGRldikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuK1xcdFxcdFxcdFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXFxuK1xcdFxcdFxcdHNpemVvZih0cGgpKTtcXG4rXFx0aWYgKHJldCAhPSAxKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ0cGgsIGFyZywgc2l6ZW9mKHRwaCkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSB7XFxuK1xcdFxcdGlmICh0cGguZmxhZ3MgIT0gMClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdHZkZXYtXFx1MDAzZXRwaF9vcHRfaW4gPSAxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF2ZGV2LVxcdTAwM2V0cGhfb3B0X2luKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHRwaC5mbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTtcXG4rXFxuK1xcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3Jlc29sdmVfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHR1MzIgZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XFxuK1xcdHUzMiBhbGxvd19zcmMgPSAwO1xcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgKFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEggfFxcbitcXHRcXHQgICAgIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfU1QpKVxcbitcXHRcXHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9DUFVfU1QpXFxuK1xcdFxcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XFxuK1xcdFxcdFxcdCAgICAgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVDtcXG4rXFxuK1xcdHJldHVybiBhbGxvd19zcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZ2V0X2RtYWJ1Zl90cGgoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnN0LCB1OCAqcGgpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTtcXG4rXFx0aWYgKElTX0VSUihkbWFidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xcbitcXG4rXFx0cmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuK1xcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBzdCwgcGgpO1xcbitcXHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZ2V0X3RwaF9zdF90YWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzcmNfYml0cyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyIHNyY19obmRsLCBib29sIGV4dGVuZGVkLCB1MTYgKnN0KVxcbit7XFxuK1xcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHR1OCBwaDtcXG4rXFxuK1xcdGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKVxcbitcXHRcXHRyZXQgPSB2ZmlvX3BjaV9nZXRfZG1hYnVmX3RwaChzcmNfaG5kbCwgZXh0ZW5kZWQsIHN0LCBcXHUwMDI2cGgpO1xcbitcXHRlbHNlIGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFKVxcbitcXHRcXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHJlcV90eXBlLCBzcmNfaG5kbCwgc3QpO1xcbitcXHRlbHNlIGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQpXFxuK1xcdFxcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgcmVxX3R5cGUsIHNyY19obmRsLCBzdCk7XFxuK1xcdGVsc2UgaWYgKHNyY19iaXRzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKVxcbitcXHRcXHQqc3QgPSAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocmV0ICE9IDApXFxuK1xcdFxcdCpzdCA9IDA7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuK1xcdFxcdFxcdHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgX191c2VyICphcmcsXFxuK1xcdFxcdFxcdHNpemVfdCBhcmdzeilcXG4re1xcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSByZXNvbHZlO1xcbitcXHR1MzIgdXNlcl9mbGFncywgYWxsb3dfc3JjO1xcbitcXHRib29sIGV4dGVuZGVkO1xcbitcXHR1MTYgdGFnID0gMDtcXG4rXFx0dTggcGggPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCF2ZGV2LVxcdTAwM2V0cGhfb3B0X2luKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcXG4rXFx0XFx0XFx0XFx0IHNpemVvZihyZXNvbHZlKSk7XFxuK1xcdGlmIChyZXQgIT0gMSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cmVzb2x2ZSwgYXJnLCBzaXplb2YocmVzb2x2ZSkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHVzZXJfZmxhZ3MgPSByZXNvbHZlLmZsYWdzO1xcbitcXHRleHRlbmRlZCA9ICEhKHVzZXJfZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xcbitcXHRpZiAoZXh0ZW5kZWQgXFx1MDAyNlxcdTAwMjYgIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQodmRldi1cXHUwMDNlcGRldikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0dXNlcl9mbGFncyBcXHUwMDI2PSB+VkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEO1xcbitcXG4rXFx0YWxsb3dfc3JjID0gdmZpb19wY2lfZ2V0X3RwaF9yZXNvbHZlX2FsbG93X3NyYyh2ZGV2KTtcXG4rXFx0aWYgKHVzZXJfZmxhZ3MgXFx1MDAyNiB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlc29sdmUudmFsaWQgPSAwO1xcbitcXHRyZXNvbHZlLnBoID0gMDtcXG4rXFx0cmVzb2x2ZS5zdCA9IDA7XFxuK1xcbitcXHRpZiAodXNlcl9mbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKSB7XFxuK1xcdFxcdHJldCA9IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKHJlc29sdmUuc3JjLCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRhZywgXFx1MDAyNnBoKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmVzb2x2ZS5waCA9IHBoO1xcbitcXHRcXHRyZXNvbHZlLnZhbGlkID0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIO1xcbitcXHRcXHRpZiAodmRldi1cXHUwMDNldHBoX3BvbGljeSBcXHUwMDNlPSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKSB7XFxuK1xcdFxcdFxcdHJlc29sdmUuc3QgPSB0YWc7XFxuK1xcdFxcdFxcdHJlc29sdmUudmFsaWQgfD0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyh2ZGV2LVxcdTAwM2VwZGV2LCB1c2VyX2ZsYWdzLCByZXNvbHZlLnNyYyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZXh0ZW5kZWQsIFxcdTAwMjZ0YWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcXG4rXFx0cmVzb2x2ZS5zdCA9IHRhZztcXG4rXFxuK291dDpcXG4rXFx0cmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZyZXNvbHZlLCBzaXplb2YocmVzb2x2ZSkpID8gLUVGQVVMVCA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyB1MzIgdmZpb19wY2lfZ2V0X3RwaF9zdF9hbGxvd19zcmMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbit7XFxuK1xcdHUzMiBmbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTtcXG4rXFx0dTMyIGFsbG93X3NyYyA9IDA7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRilcXG4rXFx0XFx0YWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVSlcXG4rXFx0XFx0YWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFIHxcXG4rXFx0XFx0XFx0ICAgICBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkUpXFxuK1xcdFxcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX05PTkU7XFxuK1xcbitcXHRyZXR1cm4gYWxsb3dfc3JjO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHR1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0c2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB0cGhfc3Q7XFxuK1xcdHUzMiB1c2VyX2ZsYWdzLCBhbGxvd19zcmMsIHN0X3NpemU7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cXHUwMDNlcGRldjtcXG4rXFx0Ym9vbCBleHRlbmRlZCwgc3RvcF9vbl96ZXJvO1xcbitcXHR1MzIgKnNyY19obmRsID0gTlVMTDtcXG4rXFx0dTE2ICp0YWdzID0gTlVMTDtcXG4rXFx0aW50IHJldCwgaTtcXG4rXFx0dTE2IGNtZDtcXG4rXFxuK1xcdGlmICghdmRldi1cXHUwMDNldHBoX29wdF9pbiB8fCB2ZGV2LVxcdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKHRwaF9zdCkpO1xcbitcXHRpZiAocmV0ICE9IDEpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnRwaF9zdCwgYXJnLCBzaXplb2YodHBoX3N0KSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0dXNlcl9mbGFncyA9IHRwaF9zdC5mbGFncztcXG4rXFx0ZXh0ZW5kZWQgPSAhISh1c2VyX2ZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcXG4rXFx0aWYgKGV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHZkZXYtXFx1MDAzZXBkZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdHVzZXJfZmxhZ3MgXFx1MDAyNj0gflZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcXG4rXFxuK1xcdHN0b3Bfb25femVybyA9ICEhKHVzZXJfZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfUkVRVUlSRV9TVCk7XFxuK1xcdGlmIChzdG9wX29uX3plcm8gXFx1MDAyNlxcdTAwMjYgKHVzZXJfZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0dXNlcl9mbGFncyBcXHUwMDI2PSB+VkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1Q7XFxuK1xcbitcXHRhbGxvd19zcmMgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X2FsbG93X3NyYyh2ZGV2KTtcXG4rXFx0aWYgKHVzZXJfZmxhZ3MgXFx1MDAyNiB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHN0X3NpemUgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUodmRldik7XFxuK1xcdGlmICh0cGhfc3Quc3RhcnQgXFx1MDAzZT0gc3Rfc2l6ZSB8fCB0cGhfc3QuY291bnQgXFx1MDAzZSBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8XFxuK1xcdFxcdHRwaF9zdC5jb3VudCA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmICghKHVzZXJfZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKSB7XFxuK1xcdFxcdHNyY19obmRsID0gbWVtZHVwX2FycmF5X3VzZXIodTY0X3RvX3VzZXJfcHRyKHRwaF9zdC5kZXN0cyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdHBoX3N0LmNvdW50LCBzaXplb2YodTMyKSk7XFxuK1xcdFxcdGlmIChJU19FUlIoc3JjX2huZGwpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzcmNfaG5kbCk7XFxuK1xcdH1cXG4rXFx0dGFncyA9IGtjYWxsb2ModHBoX3N0LmNvdW50LCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCF0YWdzKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHBoX3N0LmNvdW50OyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gdmZpb19wY2lfZ2V0X3RwaF9zdF90YWcocGRldiwgdXNlcl9mbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc3JjX2huZGwgPyBzcmNfaG5kbFtpXSA6IDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGV4dGVuZGVkLCBcXHUwMDI2dGFnc1tpXSk7XFxuK1xcdFxcdGlmIChyZXQgfHwgKHN0b3Bfb25femVybyBcXHUwMDI2XFx1MDAyNiB0YWdzW2ldID09IDApKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGNtZCA9IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUodmRldik7XFxuK1xcdFxcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIHRwaF9zdC5zdGFydCwgaSwgdGFncyk7XFxuK1xcdFxcdHZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTtcXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRrZnJlZSh0YWdzKTtcXG4rXFx0a2ZyZWUoc3JjX2huZGwpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcXG4ge1xcbkBAIC0xNjI1LDYgKzE5NDYsMTYgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XFxuIFxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcXG4rXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIOlxcbitcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRTpcXG4rXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSh2ZGV2LCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZywgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxcbitcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXFxuaW5kZXggYzE2ZjQ2MGMwMWQ2ODEuLjUzNTE4MzljMTMzOGFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtcmVzdi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInZmaW9fcGNpX3ByaXYuaFxcXCJcXG5AQCAtMTksNyArMjAsMTcgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xcbiBcXHR1MzIgbnJfcmFuZ2VzO1xcbiBcXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbi1cXHR1OCByZXZva2VkIDogMTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFVwZGF0ZXMgcHJvdGVjdGVkIGJ5IGRtYWJ1Zi1cXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XFxuK1xcdCAqIHByb3RlY3RlZCBieSBtZW1vcnlfbG9jay5cXG4rXFx0ICovXFxuK1xcdHUxNiB0cGhfc3RfZXh0O1xcbitcXHR1OCB0cGhfc3Q7XFxuK1xcdGJvb2wgcmV2b2tlZDtcXG4rXFx0dTggdHBoX3N0X3ZhbGlkOjE7XFxuK1xcdHU4IHRwaF9zdF9leHRfdmFsaWQ6MTtcXG4rXFx0dTggdHBoX3BoOjI7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXFxuQEAgLTMwLDcgKzQxLDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbiBcXHRpZiAoIWF0dGFjaG1lbnQtXFx1MDAzZXBlZXIycGVlcilcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZXJldm9rZWQpXFxuK1xcdGlmIChSRUFEX09OQ0UocHJpdi1cXHUwMDNlcmV2b2tlZCkpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0aWYgKCFkbWFfYnVmX2F0dGFjaF9yZXZvY2FibGUoYXR0YWNobWVudCkpXFxuQEAgLTY5LDYgKzgwLDI2IEBAIHZmaW9fcGNpX2RtYV9idWZfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxcbitcXHRcXHRcXHRcXHRcXHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmIChleHRlbmRlZCkge1xcbitcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXRwaF9zdF9leHRfdmFsaWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXFx1MDAzZXRwaF9zdF9leHQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghcHJpdi1cXHUwMDNldHBoX3N0X3ZhbGlkKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdCpzdGVlcmluZ190YWcgPSBwcml2LVxcdTAwM2V0cGhfc3Q7XFxuK1xcdH1cXG4rXFx0KnBoID0gcHJpdi1cXHUwMDNldHBoX3BoO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcXG4gXFx0XFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxcbkBAIC0xMDEsNiArMTMyLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XFxuIFxcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcXG4rXFx0LmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCxcXG4gXFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXFxuIFxcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcXG4gXFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXFxuQEAgLTMzMyw2ICszNjUsNzIgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbitcXHR1OCBjb21wO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Y29tcCA9IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXFxuK1xcdFxcdFxcdFxcdCBzaXplb2Yoc2V0X3RwaCkpO1xcbitcXHRpZiAocmV0ICE9IDEpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnNldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRpZiAoc2V0X3RwaC5mbGFncyBcXHUwMDI2IH4oVkZJT19ETUFfQlVGX1RQSF9TVCB8IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoc2V0X3RwaC5waCBcXHUwMDI2IH4weDMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKChzZXRfdHBoLmZsYWdzIFxcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjb21wICE9IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRkbWFidWYgPSBkbWFfYnVmX2dldChzZXRfdHBoLmRtYWJ1Zl9mZCk7XFxuK1xcdGlmIChJU19FUlIoZG1hYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcXG4rXFxuK1xcdGlmIChkbWFidWYtXFx1MDAzZW9wcyAhPSBcXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuK1xcdGlmIChwcml2LVxcdTAwM2V2ZGV2ICE9IHZkZXYpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfcHV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcHV0O1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3N0X2V4dCAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZ19leHQ7XFxuK1xcdHByaXYtXFx1MDAzZXRwaF9waCAgICAgICAgID0gc2V0X3RwaC5waDtcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFxcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVCk7XFxuK1xcdHByaXYtXFx1MDAzZXRwaF9zdF9leHRfdmFsaWQgPVxcbitcXHRcXHQhIShzZXRfdHBoLmZsYWdzIFxcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpO1xcbitcXHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFx0cmV0ID0gMDtcXG4rXFxuK291dF9wdXQ6XFxuK1xcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaCBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLjAzYzRhMDQxNDI2NGVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5AQCAtMTEsNiArMTEsMTIgQEBcXG4gLyogQ2FwIG1heGltdW0gbnVtYmVyIG9mIGlvZXZlbnRmZHMgcGVyIGRldmljZSAoYXJiaXRyYXJ5KSAqL1xcbiAjZGVmaW5lIFZGSU9fUENJX0lPRVZFTlRGRF9NQVhcXHRcXHQxMDAwXFxuIFxcbitlbnVtIHZmaW9fcGNpX3RwaF9wb2xpY3kge1xcbitcXHRWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUID0gMCxcXG4rXFx0VkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCA9IDEsXFxuK1xcdFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QgPSAyLFxcbit9O1xcbitcXG4gc3RydWN0IHZmaW9fcGNpX2lvZXZlbnRmZCB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRuZXh0O1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2VcXHQqdmRldjtcXG5AQCAtMTE4LDYgKzEyNCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcXG4gXFx0XFx0XFx0XFx0ICBzaXplX3QgYXJnc3opO1xcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGFyZ3N6KTtcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xcbiAjZWxzZVxcbkBAIC0xMjgsNiArMTM4LDE0IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHJldHVybiAtRU5PVFRZO1xcbit9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiB7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxcbmluZGV4IGQxMjAzZGE1NmZjNWY3Li4xNGU4ZWI2MWE2MmMwNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXFxuQEAgLTExMyw2ICsxMTMsMjkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHtcXG4gXFx0ICovXFxuIFxcdHZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcXG4gXFxuK1xcdC8qKlxcbitcXHQgKiBAZ2V0X3BjaV90cGg6XFxuK1xcdCAqXFxuK1xcdCAqIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBzdGVlcmluZyBtZXRhZGF0YSBmb3JcXG4rXFx0ICogdGhpcyBidWZmZXIgc28gYW4gaW1wb3J0ZXIgY2FuIHByb2dyYW0gYSBtYXRjaGluZyBTVC9QSCBoaW50IG9uXFxuK1xcdCAqIG91dGJvdW5kIFRMUHMgdGFyZ2V0aW5nIHRoZSBleHBvcnRlciBmb3IgcGVlci10by1wZWVyIERNQS5cXG4rXFx0ICpcXG4rXFx0ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciBmb3Igd2hpY2ggdG8gcmV0cmlldmUgVFBIIG1ldGFkYXRhXFxuK1xcdCAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcXG4rXFx0ICogQHN0ZWVyaW5nX3RhZzogUmV0dXJucyB0aGUgcmF3IFRQSCBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWRcXG4rXFx0ICogICAgICAgICAgICAgICAgbmFtZXNwYWNlXFxuK1xcdCAqIEBwaDogUmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludCAoMi1iaXQgdmFsdWUpXFxuK1xcdCAqXFxuK1xcdCAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkbWFfYnVmX2dldF9wY2lfdHBoKCkuIENhbGxlZCB3aXRoXFxuK1xcdCAqIFxcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVPUE5PVFNVUFAgd2hlblxcbitcXHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cXG4rXFx0ICpcXG4rXFx0ICogUmV0dXJuZWQgbWV0YWRhdGEgZm9sbG93cyB0aGUgbGlmZXRpbWUgcnVsZXMgZG9jdW1lbnRlZCBmb3JcXG4rXFx0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLlxcbitcXHQgKi9cXG4rXFx0aW50ICgqZ2V0X3BjaV90cGgpKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdCAgIHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xcbitcXG4gXFx0LyoqXFxuIFxcdCAqIEBtYXBfZG1hX2J1ZjpcXG4gXFx0ICpcXG5AQCAtNTYzLDYgKzU4Niw4IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4gXFx0XFx0ICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XFxuIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcXG4raW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XFxuIFxcbiBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uYWVhZjcwMWU3OTY1YjAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbkBAIC05LDYgKzksOCBAQFxcbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbitcXG4gLypcXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxcbiAgKiBkZXBlbmRpbmcgb24gdGhlIG1lbW9yeSB0eXBlOiBWb2xhdGlsZSBNZW1vcnkgb3IgUGVyc2lzdGVudCBNZW1vcnkuIFdoZW4gYVxcbkBAIC0yMSwyNiArMjMsNjkgQEAgZW51bSB0cGhfbWVtX3R5cGUge1xcbiB9O1xcbiBcXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxcbisvKipcXG4rICogcGNpZV9zdGRfdHBoX3N1cHBvcnRlZCAtIGNoZWNrIHN0YW5kYXJkIFRQSCByZXF1ZXN0ZXIgc3VwcG9ydFxcbisgKiBAcGRldjogUENJIGRldmljZVxcbisgKi9cXG4rI2RlZmluZSBwY2llX3N0ZF90cGhfc3VwcG9ydGVkKHBkZXYpIFxcXFxcXG4rXFx0KChwZGV2KS1cXHUwMDNldHBoX21heF90eXBlIFxcdTAwM2U9IFBDSV9UUEhfUkVRX1RQSF9PTkxZKVxcbisvKipcXG4rICogcGNpZV9leHRfdHBoX3N1cHBvcnRlZCAtIGNoZWNrIGV4dGVuZGVkIFRQSCByZXF1ZXN0ZXIgc3VwcG9ydFxcbisgKiBAcGRldjogUENJIGRldmljZVxcbisgKi9cXG4rI2RlZmluZSBwY2llX2V4dF90cGhfc3VwcG9ydGVkKHBkZXYpIFxcXFxcXG4rXFx0KChwZGV2KS1cXHUwMDNldHBoX21heF90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpXFxuIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKTtcXG4taW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcXG4tXFx0XFx0XFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK2ludCBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHN0YXJ0LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQoc3RydWN0IHBjaV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdFxcdCAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xcbiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XFxuK2ludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLCB1OCByZXFfdHlwZSk7XFxuK2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpO1xcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbit1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuICNlbHNlXFxuKyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZVxcbisjZGVmaW5lIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikgZmFsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4rc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IHN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxcbit7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2ICp0YWcpXFxuK3sgcmV0dXJuIC1FSU5WQUw7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxcbi1zdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbitzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICB1OCByZXFfdHlwZSlcXG4reyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXFxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4rc3RhdGljIGlubGluZSB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIDA7IH1cXG4rc3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsgfVxcbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cXG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIGZhbHNlOyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li41ZWQ1ODc5OWE5YjEyOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbkBAIC00NzIsNyArNDcyLDYgQEAgc3RydWN0IHBjaV9kZXYge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRhdHNfZW5hYmxlZDoxO1xcdFxcdC8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovXFxuIFxcdHVuc2lnbmVkIGludFxcdHBhc2lkX2VuYWJsZWQ6MTtcXHQvKiBQcm9jZXNzIEFkZHJlc3MgU3BhY2UgSUQgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0cHJpX2VuYWJsZWQ6MTtcXHRcXHQvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovXFxuLVxcdHVuc2lnbmVkIGludFxcdHRwaF9lbmFibGVkOjE7XFx0XFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0Zm1fZW5hYmxlZDoxO1xcdFxcdC8qIEZsaXQgTW9kZSAoc2VnbWVudCBjYXB0dXJlZCkgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0aXNfbWFuYWdlZDoxO1xcdFxcdC8qIE1hbmFnZWQgdmlhIGRldnJlcyAqL1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRpc19tc2lfbWFuYWdlZDoxO1xcdC8qIE1TSSByZWxlYXNlIHZpYSBkZXZyZXMgaW5zdGFsbGVkICovXFxuQEAgLTU4OCw3ICs1ODcsMTAgQEAgc3RydWN0IHBjaV9kZXYge1xcbiBcXHR1OCByZXNldF9tZXRob2RzW1BDSV9OVU1fUkVTRVRfTUVUSE9EU107IC8qIEluIHByaW9yaXR5IG9yZGVyICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXFxuLVxcdHUxNlxcdFxcdHRwaF9jYXA7XFx0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXFxuK1xcdHUxNlxcdFxcdHRwaF9jYXA6MTM7XFx0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXFxuK1xcdHUxNlxcdFxcdHRwaF9tYXhfdHlwZToyOyAvKiBOZWdvdGlhdGVkIG1heCBUUEggcmVxdWVzdGVyIHR5cGVcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYmV0d2VlbiBkZXZpY2UgYW5kIHJvb3QgcG9ydCAqL1xcbitcXHR1MTZcXHRcXHR0cGhfZW5hYmxlZDoxO1xcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cXG4gXFx0dThcXHRcXHR0cGhfbW9kZTtcXHQvKiBUUEggbW9kZSAqL1xcbiBcXHR1OFxcdFxcdHRwaF9yZXFfdHlwZTtcXHQvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi9cXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5pbmRleCA5YTE2NzRjMTUyYWEyOS4uZDYwNjRmYTllODBhNjkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbkBAIC0xNDksNiArMTQ5LDkgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcXG4gXFx0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXFx0bmI7XFxuIFxcdHN0cnVjdCByd19zZW1hcGhvcmVcXHRtZW1vcnlfbG9jaztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGRtYWJ1ZnM7XFxuK1xcdHU4XFx0XFx0XFx0dHBoX29wdF9pbjtcXG4rXFx0dThcXHRcXHRcXHR0cGhfcG9saWN5O1xcbitcXHR1MzJcXHRcXHRcXHR0cGhfY2FwX3ZpcnQ7XFxuIH07XFxuIFxcbiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uOWJjM2NlZjdhODlhYzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5AQCAtMTUzNCw2ICsxNTM0LDE1MCBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcXG4gICovXFxuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXFxuIFxcbisvKipcXG4rICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcXG4rICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieVxcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYgb24gdGhpcyBkZXZpY2UsIGFuZCB0aGUgZGV2aWNlIG11c3QgcmVwb3J0XFxuKyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xcbisgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvXFxuKyAqIHJlcG9ydCB0aGUgRXh0ZW5kZWQgVFBIIENvbXBsZXRlciBlbmNvZGluZy4gT3RoZXJ3aXNlIHRoZSBpb2N0bFxcbisgKiByZXR1cm5zIC1FT1BOT1RTVVBQLlxcbisgKlxcbisgKiBAZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxcbisgKlxcbisgKiA4LWJpdCBTVCAoQHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoQHN0ZWVyaW5nX3RhZ19leHQpIGFyZVxcbisgKiBkaXN0aW5jdCBuYW1lc3BhY2VzLiBAZmxhZ3MgaXMgdGhlIGF1dGhvcml0YXRpdmUgdmFsaWRpdHkgbWFzayBmb3IgdGhlXFxuKyAqIHR3byBuYW1lc3BhY2VzOiBWRklPX0RNQV9CVUZfVFBIX1NUIG1hcmtzIEBzdGVlcmluZ190YWcgdmFsaWQgYW5kXFxuKyAqIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIG1hcmtzIEBzdGVlcmluZ190YWdfZXh0IHZhbGlkLiBBbiBpbXBvcnRlclxcbisgKiByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXFxuKyAqXFxuKyAqIEVhY2ggU0VUIGZ1bGx5IHJlcGxhY2VzIHRoZSBkbWEtYnVmJ3MgVFBIIHN0YXRlIGZvciBmdXR1cmUgcXVlcmllc1xcbisgKiBvbmx5LiBBIG5hbWVzcGFjZSB3aG9zZSBmbGFnIGJpdCBpcyBjbGVhciBpcyByZXBvcnRlZCBhcyB1bnN1cHBvcnRlZFxcbisgKiB0byBmdXR1cmUgaW1wb3J0ZXJzOyBhbiBpbXBvcnRlciB0aGF0IGhhcyBhbHJlYWR5IHJldHJpZXZlZCBhIHZhbHVlXFxuKyAqIGlzIHVuYWZmZWN0ZWQuIEBmbGFncyA9PSAwIGxlYXZlcyBib3RoIG5hbWVzcGFjZXMgdW5zdXBwb3J0ZWQgZm9yXFxuKyAqIGZ1dHVyZSBpbXBvcnRlcnMuXFxuKyAqXFxuKyAqIEBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLlxcbisgKlxcbisgKiBVbmRlZmluZWQgQGZsYWdzIGFuZCBAcGggYml0cyBtdXN0IGFsd2F5cyBiZSB6ZXJvLlxcbisgKlxcbisgKiBVc2Vyc3BhY2UgbXVzdCBjb25maWd1cmUgVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuXFxuKyAqIGltcG9ydGVyLlxcbisgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXFxuK1xcbisjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbisjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4rXFxuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHtcXG4rXFx0X19zMzJcXHRkbWFidWZfZmQ7XFxuK1xcdF9fdTMyXFx0ZmxhZ3M7XFxuK1xcdF9fdTE2XFx0c3RlZXJpbmdfdGFnX2V4dDtcXG4rXFx0X191OFxcdHN0ZWVyaW5nX3RhZztcXG4rXFx0X191OFxcdHBoO1xcbit9O1xcbitcXG4rLyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFxcdFxcdDE0XFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRVxcdDE1XFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcXHQxNlxcbitcXG4rLypcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggLSBDb250cm9sIGFuZCBxdWVyeSBQQ0kgVFBIIGNhcGFiaWxpdGllc1xcbisgKlxcbisgKiBTRVQ6IE9wdC1pbiB0byBUUEggZmVhdHVyZSBmb3IgdGhlIGRldmljZTsgZmxhZ3MgbXVzdCBiZSB6ZXJvLlxcbisgKiBHRVQ6IFJldHVybiBzdXBwb3J0ZWQgVFBIIGNhcGFiaWxpdHkgYml0cyAoc2VlIFZGSU9fREVWSUNFX1RQSF9DQVBfKilcXG4rICogICAgICBpbiBmbGFncy4gUmV0dXJucyBlcnJvciBpZiBTRVQgaGFzIG5vdCBiZWVuIGludm9rZWQgZmlyc3QuXFxuKyAqXFxuKyAqIFVzZXJzcGFjZSBtdXN0IGZpcnN0IGludm9rZSBTRVQgb24gdGhpcyBmZWF0dXJlIHRvIGVuYWJsZSBUUEggc3VwcG9ydCxcXG4rICogcmVjZWl2ZSB2YWxpZCBjYXBhYmlsaXR5IGJpdHMgdmlhIEdFVCwgZ2FpbiBwZXJtaXNzaW9uIGZvciB1c2luZ1xcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFIC8gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1QsIGFuZCBhY2Nlc3NcXG4rICogdGhlIHZpcnR1YWxpemVkIFRQSCBjYXBhYmlsaXR5IHJlZ2lzdGVycyB2aWEgVkZJTyBjb25maWcgc3BhY2UgYWNjZXNzZXMuXFxuKyAqL1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGgge1xcbitcXHRfX3UzMiBmbGFncztcXG4rfTtcXG4rXFxuKy8qIERNQUJVRiBzb3VyY2UgcmVzb2x2ZSBwcm9jZXNzaW5nIGhpbnQgc3VwcG9ydGVkICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9QSFxcdCgxdSBcXHUwMDNjXFx1MDAzYyAwKVxcbisvKiBETUFCVUYgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRlxcdFxcdCgxdSBcXHUwMDNjXFx1MDAzYyAxKVxcbisvKiBDUFUgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVVxcdFxcdCgxdSBcXHUwMDNjXFx1MDAzYyAyKVxcbisvKiBOT05FIHNvdXJjZSAobWVhbnMgc3RlZXJpbmcgdGFnIGlzIHplcm8pIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkVcXHRcXHQoMXUgXFx1MDAzY1xcdTAwM2MgMylcXG4rLyogRE1BQlVGIHNvdXJjZSByZXNvbHZlIHN0ZWVyaW5nIHRhZyBzdXBwb3J0ZWQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1NUXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDQpXFxuKy8qIENQVSBzb3VyY2UgcmVzb2x2ZSBzdGVlcmluZyB0YWcgc3VwcG9ydGVkICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0NQVV9TVFxcdCgxdSBcXHUwMDNjXFx1MDAzYyA1KVxcbitcXG4rLypcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgVFBIIGF0dHJpYnV0ZXMgZnJvbSBnaXZlbiBzb3VyY2VcXG4rICpcXG4rICogR0VUIG9ubHlcXG4rICpcXG4rICogUmVxdWlyZXMgcHJpb3Igc3VjY2Vzc2Z1bCBTRVQgb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEgsIG90aGVyd2lzZVxcbisgKiB0aGlzIGZlYXR1cmUgd2lsbCByZXR1cm4gZXJyb3IuXFxuKyAqXFxuKyAqIEBmbGFnczogSU4gLSBzb3VyY2UgdHlwZSBzZWxlY3RvciAoc2VlIFZGSU9fREVWSUNFX1RQSF9TUkNfKilcXG4rICogICAgICAgICBhbmQgc3RlZXJpbmcgdGFnIG5hbWVzcGFjZSBzZWxlY3RvciAoc2VlIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRClcXG4rICogQHNyYzogICBJTiAtIHNvdXJjZSBpZGVudGlmaWVyLCBlLmcuIGRtYWJ1ZiBmZCB3aGVuIFNSQ19ETUFCVUYgaXMgc2V0IGluXFxuKyAqICAgICAgICAgZmxhZ3NcXG4rICogQHZhbGlkOiBPVVQgLSBiaXRtYXAgaW5kaWNhdGluZyB2YWxpZCBvdXRwdXQgZmllbGRzLCBzZWVcXG4rICogICAgICAgICBWRklPX0RFVklDRV9UUEhfVkFMSURfKlxcbisgKiBAcGg6ICAgIE9VVCAtIFRQSCBwcm9jZXNzaW5nIGhpbnQgKHZhbGlkIHdoZW4gVkFMSURfUEggaXMgc2V0IGluIHZhbGlkKVxcbisgKiBAc3Q6ICAgIE9VVCAtIFRQSCBzdGVlcmluZyB0YWcgKHZhbGlkIHdoZW4gVkFMSURfU1QgaXMgc2V0IGluIHZhbGlkKVxcbisgKi9cXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUge1xcbitcXHRfX3UzMiBmbGFncztcXG4rXFx0X191MzIgc3JjO1xcbitcXHRfX3U4ICB2YWxpZDtcXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEggKDF1IFxcdTAwM2NcXHUwMDNjIDApIC8qIHBoIGhvbGRzIHZhbGlkIHByb2Nlc3NpbmcgaGludCAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVCAoMXUgXFx1MDAzY1xcdTAwM2MgMSkgLyogc3QgaG9sZHMgdmFsaWQgc3RlZXJpbmcgdGFnICovXFxuK1xcdF9fdTggIHBoO1xcbitcXHRfX3UxNiBzdDtcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUIC0gQmF0Y2ggcHJvZ3JhbSBhcmNoaXRlY3RlZCBzdGVlcmluZyB0YWdcXG4rICogdGFibGUgZW50cmllc1xcbisgKiBSZXR1cm4gdmFsdWU6IFxcdTAwM2U9MCA9IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzO1xcbisgKiAgICAgICAgICAgICAgIFxcdTAwM2MwICA9IG5lZ2F0aXZlIGVycm5vXFxuKyAqXFxuKyAqIFNFVCBvbmx5XFxuKyAqXFxuKyAqIEFkZGl0aW9uYWwgY29uc3RyYWludDogVXNlcnNwYWNlIG11c3QgY29tcGxldGUgdHdvIHByZXJlcXVpc2l0ZSBzdGVwc1xcbisgKiBiZWZvcmUgaW52b2tpbmcgdGhpcyBmZWF0dXJlOlxcbisgKiAxLiBDYWxsIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIIHdpdGggU0VUIHRvIGVuYWJsZSB2ZmlvIFRQSCBwZXJtaXNzaW9uO1xcbisgKiAyLiBXcml0ZSB0aGUgVFBIIGNvbnRyb2wgcmVnaXN0ZXIgdG8gYWN0aXZhdGUgZGV2aWNlIGhhcmR3YXJlIFRQSCBsb2dpYy5cXG4rICpcXG4rICogQGZsYWdzOiBJTiAtIHNvdXJjZSB0eXBlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX1NSQ18qKSBhbmRcXG4rICogICAgICAgICBzdGVlcmluZyB0YWcgbmFtZXNwYWNlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKSBhbmRcXG4rICogICAgICAgICBmYWlsdXJlIHBvbGljeSAoc2VlIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUKVxcbisgKiBAc3RhcnQ6IElOIC0gZmlyc3Qgc3RlZXJpbmcgdGFnIHRhYmxlIGluZGV4IC8gTVNJLVggdmVjdG9yXFxuKyAqIEBjb3VudDogSU4gLSBudW1iZXIgb2YgY29udGlndW91cyBlbnRyaWVzIHRvIHByb2dyYW1cXG4rICogQGRlc3RzOiBJTiAtIHVzZXIgcG9pbnRlciB0byBhcnJheSBvZiBzb3VyY2UgdTMyIHZhbHVlc1xcbisgKi9cXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHtcXG4rXFx0X191MzIgZmxhZ3M7XFxuK1xcdF9fdTE2IHN0YXJ0O1xcbitcXHRfX3UxNiBjb3VudDtcXG4rXFx0X19hbGlnbmVkX3U2NCBkZXN0cztcXG4rfTtcXG4rXFxuKy8qIFNvdXJjZSBob2xkcyBkbWEtYnVmIGZkICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgICAgICAoMXUgXFx1MDAzY1xcdTAwM2MgMClcXG4rLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBzdGVlcmluZyB0YWcgbmFtZXNwYWNlICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDEpXFxuKy8qIFNvdXJjZSBob2xkcyB2b2xhdGlsZSBtZW1vcnkgQ1BVIElEICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEVcXHQoMXUgXFx1MDAzY1xcdTAwM2MgMilcXG4rLyogU291cmNlIGhvbGRzIHBlcnNpc3RlbnQgbWVtb3J5IENQVSBJRCAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlRcXHQoMXUgXFx1MDAzY1xcdTAwM2MgMylcXG4rLyogVFBIX1NUIG9ubHk6IHNldCBzdGVlcmluZyB0YWcgdG8gemVybyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORVxcdCgxdSBcXHUwMDNjXFx1MDAzYyA0KVxcbisvKiBUUEhfU1Qgb25seTogZmFpbCBpZiByZXNvbHZlZCBzdGVlcmluZyB0YWcgaXMgemVybyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDUpXFxuK1xcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNTo0Ni40NDc2NzkzOTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MTE2MDkyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaFwiLFxuICAgIFwiZG1hX2J1Zl9nZXRfcGNpX3RwaFwiLFxuICAgIFwicGNpZV90cGhfZ2V0X2NwdV9zdF9leHRcIixcbiAgICBcInBjaWVfdHBoX3NldF9zdF9lbnRyaWVzXCIsXG4gICAgXCJwY2llX2VuYWJsZV90cGhfZXh0XCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBWRklPIFBDSSBhbmQgRE1BLUJVRiB0byBzdXBwb3J0IFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIEl0IGFkZHMgbmV3IFZGSU8gaW9jdGxzL2ZlYXR1cmVzIGZvciBUUEggY29uZmlndXJhdGlvbiBhbmQgcmVzb2x1dGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYjAwYzYyNDc3MWZjMDc2NGY3NzcxZjcwNWMxNTkwZjdmNjQ0Yzc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTY6MDU6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuaW5kZXggZDUwNGM2MzZkYzI5NGUuLmU4MzE0ZWQyNDBkMzM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuQEAgLTkzOSw2ICs5MzksNyBAQCBkbWFfYnVmX3Bpbl9vbl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxuICAqICAgICAtIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudCgpXG4gICogICAgIC0gZG1hX2J1Zl92bWFwKClcbiAgKiAgICAgLSBkbWFfYnVmX3Z1bm1hcCgpXG4rICogICAgIC0gZG1hX2J1Zl9nZXRfcGNpX3RwaCgpXG4gICpcbiAgKiAyLiBJbXBvcnRlcnMgbXVzdCBub3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZVxuICAqICAgIGZ1bmN0aW9uczpcbkBAIC05NzksNiArOTgwLDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy51bm1hcF9kbWFfYnVmKClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy52bWFwKClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy52dW5tYXAoKVxuKyAqICAgICAtIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoKClcbiAgKlxuICAqIDMuIEV4cG9ydGVycyBtdXN0IGhvbGQgdGhlIGRtYS1idWYgcmVzZXJ2YXRpb24gbG9jayB3aGVuIGNhbGxpbmcgdGhlc2VcbiAgKiAgICBmdW5jdGlvbnM6XG5AQCAtMTE0NCw2ICsxMTQ2LDM2IEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfdW5waW4sIFwiRE1BX0JVRlwiKTtcbiBcbisvKipcbisgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXG4rICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeVxuKyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbisgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxuKyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludFxuKyAqXG4rICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxuKyAqXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAtRU9QTk9UU1VQUCBpZiB0aGVcbisgKiBleHBvcnRlciBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIG9yIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlXG4rICogcmVxdWVzdGVkIG5hbWVzcGFjZS5cbisgKlxuKyAqIFRoZSByZXR1cm5lZCBzdGVlcmluZyB0YWcgYW5kIHByb2Nlc3NpbmcgaGludCBhcmUgb25seSB2YWxpZCB1bnRpbCB0aGVcbisgKiBleHBvcnRlciBpbnZhbGlkYXRlcyB0aGUgY3VycmVudCBtYXBwaW5nIChzaWduYWxsZWQgdG8gdGhlIGltcG9ydGVyIHZpYVxuKyAqIFx1MDAyNmRtYV9idWZfYXR0YWNoX29wcy5tb3ZlX25vdGlmeSkuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3XG4rICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLlxuKyAqL1xuK2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4rXHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbit7XG4rXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRpZiAoIWRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xuK31cbitFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2dldF9wY2lfdHBoLCBcIkRNQV9CVUZcIik7XG4rXG4gLyoqXG4gICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50O1xuICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA2NTVmZmQ2MGU2MmY2YS4uZTZhODUwYWIyYjAzN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuKysrIGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xNjUsMTQgKzE2NSw2MiBAQCBzdGF0aWMgdTggZ2V0X3N0X21vZGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuICAqL1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbi1cdHUzMiByZWc7XG4rXHR1MzIgcmVnID0gMDtcbitcbitcdGlmICghcGRldi1cdTAwM2V0cGhfY2FwKVxuK1x0XHRyZXR1cm4gUENJX1RQSF9MT0NfTk9ORTtcbiBcbiBcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XG4rXHRyZXR1cm4gcmVnIFx1MDAyNiBQQ0lfVFBIX0NBUF9MT0NfTUFTSztcbiB9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTtcbiBcbisvKipcbisgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4rXG4rLyoqXG4rICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIFRQSCBDb21wbGV0ZXIgc3VwcG9ydFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZWFkcyB0aGUgXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFwiIGZpZWxkIChiaXRzIDEzOjEyKSBvZiBEZXZpY2VcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cbisgKiBcIm5vdCBzdXBwb3J0ZWRcIiBzbyBjYWxsZXJzIG9ubHkgbmVlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHRocmVlXG4rICogZGVmaW5lZCB2YWx1ZXMuXG4rICpcbisgKiBSZXR1cm46IG9uZSBvZiAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUsXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0dTMyIHJlZztcbitcbitcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG4rXHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbitcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1xuK1x0c3dpdGNoIChGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZykpIHtcbitcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOlxuK1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZO1xuK1x0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDpcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKTtcbitcbiAvKlxuICAqIFJldHVybiB0aGUgc2l6ZSBvZiBTVCB0YWJsZS4gSWYgU1QgdGFibGUgaXMgbm90IGluIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWRcbiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSArIDEuXG5AQCAtMTg0LDkgKzIzMiw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVxuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbiBcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yMzEsMjAgKzI3NiwyMiBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKVxuIH1cbiBcbiAvKipcbi0gKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXG4tICogd2l0aCBhIHNwZWNpZmljIENQVVxuKyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeVxuKyAqIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSwgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZSBzZWxlY3Rpb25cbiAgKiBAcGRldjogUENJIGRldmljZVxuICAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcbisgKiBAcmVxX3R5cGU6IFRQSCByZXF1ZXN0ZXIgdHlwZSB0byBzZWxlY3QgU1QgbmFtZXNwYWNlXG4gICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcbiAgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWRcbiAgKlxuLSAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYVxuLSAqIHNwZWNpZmljIENQVSBhcyBpbmRpY2F0ZWQgYnkgY3B1LlxuKyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLFxuKyAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgVFBIIHJlcXVlc3RlciB0eXBlIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBTVCBuYW1lc3BhY2UuXG4rICogVmFsaWRhdGVzIHJlcXVlc3RlciB0eXBlIGFnYWluc3QgaGFyZHdhcmUgbmVnb3RpYXRlZCBjYXBhYmlsaXR5IGxpbWl0cy5cbiAgKlxuICAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbiAgKi9cbi1pbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4tXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbitcdFx0XHQgICAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHtcbiAjaWZkZWYgQ09ORklHX0FDUElcbiBcdHN0cnVjdCBwY2lfZGV2ICpycDtcbkBAIC0yNTMsNiArMzAwLDEwIEBAIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdHUzMiBjcHVfdWlkO1xuIFx0aW50IHJldDtcbiBcbitcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHxcbitcdFx0cmVxX3R5cGUgXHUwMDNlIHBkZXYtXHUwMDNldHBoX21heF90eXBlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldCA9IGFjcGlfZ2V0X2NwdV91aWQoY3B1LCBcdTAwMjZjcHVfdWlkKTtcbiBcdGlmIChyZXQgIT0gMClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0yNjgsMzUgKzMxOSw1NCBAQCBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuK1x0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuIFxuLVx0cGNpX2RiZyhwZGV2LCBcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcblwiLFxuK1x0cGNpX2RiZyhwZGV2LCBcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXG5cIixcbiBcdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcInZvbGF0aWxlXCIgOiBcInBlcnNpc3RlbnRcIixcbi1cdFx0Y3B1LCAqdGFnKTtcbitcdFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XG4gXG4gXHRyZXR1cm4gMDtcbiAjZWxzZVxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gI2VuZGlmXG4gfVxuLUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0X2V4dCk7XG4gXG4gLyoqXG4tICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxuKyAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWRcbisgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG4gICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4XG4tICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHdyaXR0ZW5cbisgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4rICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcbisgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWRcbiAgKlxuLSAqIEZpZ3VyZSBvdXQgdGhlIHByb3BlciBsb2NhdGlvbiBvZiBTVCB0YWJsZSwgZWl0aGVyIGluIHRoZSBNU0ktWCB0YWJsZSBvclxuLSAqIGluIHRoZSBUUEggRXh0ZW5kZWQgQ2FwYWJpbGl0eSBzcGFjZSwgYW5kIHdyaXRlIHRoZSBTdGVlcmluZyBUYWcgaW50b1xuLSAqIHRoZSBTVCBlbnRyeSBwb2ludGVkIGJ5IGluZGV4LlxuKyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLFxuKyAqIHVzaW5nIHRoZSBkZWZhdWx0IG5lZ290aWF0ZWQgVFBIIHJlcXVlc3RlciB0eXBlLlxuICAqXG4gICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuICAqL1xuLWludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4re1xuK1x0cmV0dXJuIHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIG1lbV90eXBlLCBwZGV2LVx1MDAzZXRwaF9tYXhfdHlwZSxcbitcdFx0XHRcdCAgICAgICBjcHUsIHRhZyk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4rXG4rLyoqXG4rICogcGNpZV90cGhfc2V0X3N0X2VudHJpZXMgLSBCYXRjaCBzZXQgU3RlZXJpbmcgVGFnIGVudHJpZXMgaW4gdGhlIFNUIHRhYmxlXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAc3RhcnQ6IHN0YXJ0aW5nIFNUIHRhYmxlIGluZGV4XG4rICogQGNvdW50OiBudW1iZXIgb2YgY29udGlndW91cyBlbnRyaWVzIHRvIHdyaXRlXG4rICogQHRhZ3M6IGFycmF5IG9mIHUxNiB0YWcgdmFsdWVzIHRvIHByb2dyYW1cbisgKlxuKyAqIFJldHVybjogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGVudHJpZXMsIG9yIG5lZ2F0aXZlIGVycm5vXG4rICovXG4raW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXG4rXHRcdFx0ICAgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxuIHtcbi1cdHUzMiBsb2M7XG4gXHRpbnQgZXJyID0gMDtcbitcdHUzMiBsb2MsIGk7XG4gXG4gXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMzA2LDcgKzM3Niw3IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiBcbiBcdC8qIE5vIG5lZWQgdG8gd3JpdGUgdGFnIGlmIGRldmljZSBpcyBpbiBcIk5vIFNUIE1vZGVcIiAqL1xuIFx0aWYgKHBkZXYtXHUwMDNldHBoX21vZGUgPT0gUENJX1RQSF9TVF9OU19NT0RFKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIGNvdW50O1xuIFxuIFx0LypcbiBcdCAqIERpc2FibGUgVFBIIGJlZm9yZSB1cGRhdGluZyBTVCB0byBhdm9pZCBwb3RlbnRpYWwgaW5zdGFiaWxpdHkgYXNcbkBAIC0zMTUsMzEgKzM4NSw0NyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIFBDSV9UUEhfUkVRX0RJU0FCTEUpO1xuIFxuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbi1cbi1cdHN3aXRjaCAobG9jKSB7XG4tXHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XG4tXHRcdGVyciA9IHBjaV9tc2l4X3dyaXRlX3RwaF90YWcocGRldiwgaW5kZXgsIHRhZyk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBQQ0lfVFBIX0xPQ19DQVA6XG4tXHRcdGVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBpbmRleCwgdGFnKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0aWYgKGVycikge1xuLVx0XHRwY2llX2Rpc2FibGVfdHBoKHBkZXYpO1xuLVx0XHRyZXR1cm4gZXJyO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuK1x0XHRzd2l0Y2ggKGxvYykge1xuK1x0XHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XG4rXHRcdFx0ZXJyID0gcGNpX21zaXhfd3JpdGVfdHBoX3RhZyhwZGV2LCBzdGFydCArIGksIHRhZ3NbaV0pO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFBDSV9UUEhfTE9DX0NBUDpcbitcdFx0XHRlcnIgPSB3cml0ZV90YWdfdG9fc3RfdGFibGUocGRldiwgc3RhcnQgKyBpLCB0YWdzW2ldKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdGlmIChlcnIgIT0gMCkge1xuK1x0XHRcdHBjaV9lcnIocGRldiwgXCJmYWlsZWQgdG8gc2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSV1LCB0YWdzPSV1LCByZXQ9JWRcXG5cIixcbitcdFx0XHRcdChsb2MgPT0gUENJX1RQSF9MT0NfTVNJWCkgPyBcIk1TSS1YXCIgOiBcIlNUXCIsXG4rXHRcdFx0XHRzdGFydCArIGksIHRhZ3NbaV0sIGVycik7XG4rXHRcdFx0cGNpZV9kaXNhYmxlX3RwaChwZGV2KTtcbitcdFx0XHRyZXR1cm4gaSBcdTAwM2UgMCA/IGkgOiBlcnI7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUpO1xuIFxuLVx0cGNpX2RiZyhwZGV2LCBcInNldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBpbmRleD0lZCwgdGFnPSUjMDR4XFxuXCIsXG4tXHRcdChsb2MgPT0gUENJX1RQSF9MT0NfTVNJWCkgPyBcIk1TSS1YXCIgOiBcIlNUXCIsIGluZGV4LCB0YWcpO1xuK1x0cGNpX2RiZyhwZGV2LCBcImJhdGNoIHNldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBzdGFydD0ldSwgY291bnQ9JXUgc3VjY2VzcyFcXG5cIixcbitcdFx0KGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSA/IFwiTVNJLVhcIiA6IFwiU1RcIiwgc3RhcnQsIGNvdW50KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKTtcbitcbisvKipcbisgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5XG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4XG4rICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHdyaXR0ZW5cbisgKlxuKyAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbisgKi9cbitpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4re1xuK1x0aW50IHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIGluZGV4LCAxLCBcdTAwMjZ0YWcpO1xuK1x0cmV0dXJuIHJldCA9PSAxID8gMCA6IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9zZXRfc3RfZW50cnkpO1xuIFxuQEAgLTM2NiwyNiArNDUyLDIxIEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xuIFxuIC8qKlxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuKyAqIHBjaWVfZW5hYmxlX3RwaF9leHQgLSBFbmFibGUgVFBIIHN1cHBvcnQgd2l0aCBzcGVjaWZpYyBTVCBtb2RlIGFuZFxuKyAqIHJlcXVlc3RlciB0eXBlXG4gICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4tICpcbi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbisgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGU6IFBDSV9UUEhfU1RfKE5TX01PREUgLyBJVl9NT0RFIC8gRFNfTU9ERSlcbisgKiBAcmVxX3R5cGU6IFJlcXVlc3RlciB0eXBlIHRvIGVuYWJsZTogUENJX1RQSF9SRVFfKFRQSF9PTkxZIC8gRVhUX1RQSClcbiAgKlxuLSAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcbi0gKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXG4rICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBhbmQgcmVxdWVzdGVyIHR5cGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZVxuKyAqIGRldmljZSBiZWZvcmUgZW5hYmxpbmcgYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4gICovXG4taW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKVxuIHtcbiBcdHUzMiByZWc7XG4gXHR1OCBkZXZfbW9kZXM7XG4tXHR1OCBycF9yZXFfdHlwZTtcbiBcbiBcdC8qIEhvbm9yIFwibm90cGhcIiBrZXJuZWwgcGFyYW1ldGVyICovXG4gXHRpZiAocGNpX3RwaF9kaXNhYmxlZClcbkBAIC0zOTcsNiArNDc4LDE0IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0aWYgKHBkZXYtXHUwMDNldHBoX2VuYWJsZWQpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4rXHRpZiAocGRldi1cdTAwM2V0cGhfbWF4X3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgVFBIIHJlcXVlc3RlciB0eXBlIGNvbXBhdGliaWxpdHkgKi9cbitcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHxcbitcdFx0cmVxX3R5cGUgXHUwMDNlIHBkZXYtXHUwMDNldHBoX21heF90eXBlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdC8qIFNhbml0aXplIGFuZCBjaGVjayBTVCBtb2RlIGNvbXBhdGliaWxpdHkgKi9cbiBcdG1vZGUgXHUwMDI2PSBQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSztcbiBcdGRldl9tb2RlcyA9IGdldF9zdF9tb2RlcyhwZGV2KTtcbkBAIC00MDUsMjMgKzQ5NCw3IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cGRldi1cdTAwM2V0cGhfbW9kZSA9IG1vZGU7XG4gXG4tXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xuLVx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcdTAwMjZyZWcpO1xuLVx0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4tXHRlbHNlXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XG4tXG4tXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xuLVx0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xuLVx0XHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcbi1cbi1cdFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IG1pbihwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuLVx0fVxuLVxuLVx0aWYgKHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSByZXFfdHlwZTtcbiBcbiBcdC8qIFdyaXRlIHRoZW0gaW50byBUUEggY29udHJvbCByZWdpc3RlciAqL1xuIFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ1RSTCwgXHUwMDI2cmVnKTtcbkBAIC00MzUsNiArNTA4LDIzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuK0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4dCk7XG4rXG4rLyoqXG4rICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGU6IFBDSV9UUEhfU1RfKE5TX01PREUgLyBJVl9NT0RFIC8gRFNfTU9ERSlcbisgKlxuKyAqIFdyYXBwZXIgZm9yIHBjaWVfZW5hYmxlX3RwaF9leHQoKSwgYXV0b21hdGljYWxseSB1c2VzIHRoZSBwcmUtY2FjaGVkXG4rICogdHBoX21heF90eXBlIHZhbHVlIChuZWdvdGlhdGVkIG1heGltdW0gcmVxdWVzdGVyIHR5cGUgYmV0d2VlbiBkZXZpY2UgYW5kXG4rICogcm9vdCBwb3J0KS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbisgKi9cbitpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKVxuK3tcbitcdHJldHVybiBwY2llX2VuYWJsZV90cGhfZXh0KHBkZXYsIG1vZGUsIHBkZXYtXHUwMDNldHBoX21heF90eXBlKTtcbit9XG4gRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xuIFxuIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTUwOCwxNCArNTk4LDYwIEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKVxuIFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbitcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XG4gXHRpbnQgbnVtX2VudHJpZXM7XG4gXHR1MzIgc2F2ZV9zaXplO1xuK1x0dTMyIHJlZyA9IDA7XG4gXG4gXHRwZGV2LVx1MDAzZXRwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpO1xuIFx0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4rXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4rXHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4rXHRlbHNlXG4rXHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuK1xuK1x0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbitcdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbitcdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4rXHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbitcdFx0dHBoX3JlcV90eXBlID0gbWluKHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuK1x0fVxuK1xuK1x0cGRldi1cdTAwM2V0cGhfbWF4X3R5cGUgPSB0cGhfcmVxX3R5cGU7XG4rXG4gXHRudW1fZW50cmllcyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuIFx0c2F2ZV9zaXplID0gc2l6ZW9mKHUzMikgKyBudW1fZW50cmllcyAqIHNpemVvZih1MTYpO1xuIFx0cGNpX2FkZF9leHRfY2FwX3NhdmVfYnVmZmVyKHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCwgc2F2ZV9zaXplKTtcbiB9XG4rXG4rLyoqXG4rICogcGNpZV90cGhfZHNtX3N1cHBvcnRlZCAtIENoZWNrIGlmIHJvb3QgcG9ydCBleHBvc2VzIFRQSCBTVCBfRFNNXG4rICogQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlXG4rICpcbisgKiBSZXR1cm4gdHJ1ZSBpZiByb290IHBvcnQgb2YgQHBkZXYgcHJvdmlkZXMgVFBIIFNUIERTTSBmdW5jdGlvbixcbisgKiBmYWxzZSBvdGhlcndpc2UgKEFDUEkgZGlzYWJsZWQgb3IgRFNNIG1pc3NpbmcpLlxuKyAqL1xuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rI2lmZGVmIENPTkZJR19BQ1BJXG4rXHRzdHJ1Y3QgcGNpX2RldiAqcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpO1xuK1x0YWNwaV9oYW5kbGUgaGFuZGxlO1xuK1xuK1x0aWYgKCFycCB8fCAhcnAtXHUwMDNlYnVzIHx8ICFycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRoYW5kbGUgPSBBQ1BJX0hBTkRMRShycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKTtcbitcdGlmICghaGFuZGxlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gYWNwaV9jaGVja19kc20oaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbitcdFx0XHQgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7XG4rI2Vsc2VcbitcdHJldHVybiBmYWxzZTtcbisjZW5kaWZcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5pbmRleCA4MzAzNjlmZjg3OGRiZS4uYzQwN2MyMTdiNjQ5ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuQEAgLTYwLDYgKzYwLDI2IEBAIHN0YXRpYyBib29sIGRpc2FibGVfZGVueWxpc3Q7XG4gbW9kdWxlX3BhcmFtKGRpc2FibGVfZGVueWxpc3QsIGJvb2wsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgXCJEaXNhYmxlIHVzZSBvZiBkZXZpY2UgZGVueWxpc3QuIERpc2FibGluZyB0aGUgZGVueWxpc3QgYWxsb3dzIGJpbmRpbmcgdG8gZGV2aWNlcyB3aXRoIGtub3duIGVycmF0YSB0aGF0IG1heSBsZWFkIHRvIGV4cGxvaXRhYmxlIHN0YWJpbGl0eSBvciBzZWN1cml0eSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieSB1bnRydXN0ZWQgdXNlcnMuXCIpO1xuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHBoX3BvbGljeTtcbitzdGF0aWMgaW50IHRwaF9wb2xpY3lfc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4re1xuK1x0cmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULFxuK1x0XHRcdFx0ICAgICBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKTtcbit9XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHRwaF9wYXJhbV9vcHMgPSB7XG4rXHQuc2V0ID0gdHBoX3BvbGljeV9zZXQsXG4rXHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXG4rfTtcbittb2R1bGVfcGFyYW1fY2IodHBoX3BvbGljeSwgXHUwMDI2dHBoX3BhcmFtX29wcywgXHUwMDI2dHBoX3BvbGljeSwgMDY0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyh0cGhfcG9saWN5LFxuK1x0XCJHbG9iYWwgVFBIIHBvbGljeSBsZXZlbCAoMD1kZWZhdWx0IE5vLVNUKTpcXG5cIlxuK1x0XCIwID0gTm8tU1QgbW9kZTogUkVTT0xWRSBvbmx5IHJldHVybnMgUEggZm9yIERNQUJVRiBzb3VyY2U7XFxuXCJcbitcdFwiICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxuXCJcbitcdFwiMSA9IEFkZCBJViBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcXG5cIlxuK1x0XCIgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cIlxuK1x0XCIyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZSwgU1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcXG5cIlxuK1x0XCIgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cIik7XG4rXG4gc3RhdGljIGJvb2wgdmZpb19wY2lfZGV2X2luX2RlbnlsaXN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN3aXRjaCAocGRldi1cdTAwM2V2ZW5kb3IpIHtcbkBAIC0xNDIsNiArMTYyLDkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxuIFx0dmRldi1cdTAwM2VkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhO1xuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbitcdHZkZXYtXHUwMDNldHBoX3BvbGljeSA9IHRwaF9wb2xpY3k7XG4rI2VuZGlmXG4gXG4gXHRyZXR1cm4gdmZpb19wY2lfY29yZV9pbml0X2Rldihjb3JlX3ZkZXYpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuaW5kZXggYTEwZWQ3MzNmMGUzYWYuLjk3ZGFkNmRiNjllMzlkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92ZmlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC0xMDg1LDYgKzEwODYsMTQ2IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKVxuK3tcbitcdHU4IGNhcDtcbitcdGludCBiYXNlID0gKHBvcyBcdTAwM2U9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOlxuK1x0XHRcdFx0XHRcdCBQQ0lfU1REX0hFQURFUl9TSVpFT0Y7XG4rXHRjYXAgPSB2ZGV2LVx1MDAzZXBjaV9jb25maWdfbWFwW3Bvc107XG4rXG4rXHRpZiAoY2FwID09IFBDSV9DQVBfSURfQkFTSUMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogWFhYIENhbiB3ZSBoYXZlIHRvIGFidXR0aW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlPyAqL1xuK1x0d2hpbGUgKHBvcyAtIDEgXHUwMDNlPSBiYXNlIFx1MDAyNlx1MDAyNiB2ZGV2LVx1MDAzZXBjaV9jb25maWdfbWFwW3BvcyAtIDFdID09IGNhcClcbitcdFx0cG9zLS07XG4rXG4rXHRyZXR1cm4gcG9zO1xuK31cbitcbitzdGF0aWMgdm9pZCB2ZmlvX3VwZGF0ZV90cGhfdmNvbmZpZ19ieXRlcyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHRcdCAgaW50IHBvcylcbit7XG4rXHRfX2xlMzIgKnZwdHIgPSAoX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3BvcyArIFBDSV9UUEhfQ0FQXTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0dTMyIHZhbCA9IGxlMzJfdG9fY3B1KCp2cHRyKTtcbitcbitcdGlmICghcGNpZV9leHRfdHBoX3N1cHBvcnRlZChwZGV2KSkge1xuK1x0XHQvKiBSZW1vdmUgZXh0ZW5kZWQgVFBIIGlmIHJvb3QtcG9ydCBkb2Vzbid0IHN1cHBvcnQgKi9cbitcdFx0dmFsIFx1MDAyNj0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7XG4rXHR9XG4rXG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpIHtcbitcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi9cbitcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHxcbitcdFx0XHQgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTtcbitcdH0gZWxzZSBpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QpIHtcbitcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgYW5kIElWIG1vZGVzIHN1cHBvcnRlZCAqL1xuK1x0XHR2YWwgXHUwMDI2PSB+UENJX1RQSF9DQVBfU1RfRFM7XG4rXHRcdC8qIFJlbW92ZSBTVCBsb2NhdGlvbiBhbmQgc2l6ZSBpZiBkZXYgZG9lc24ndCBzdXBwb3J0IElWIG1vZGUgKi9cbitcdFx0aWYgKCEodmFsIFx1MDAyNiBQQ0lfVFBIX0NBUF9TVF9JVikpXG4rXHRcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xuK1x0fVxuK1xuK1x0KnZwdHIgPSBjcHVfdG9fbGUzMih2YWwpO1xuK1xuK1x0LyogQmFja3VwIHVwZGF0ZWQgY2FwYWJpbGl0eSByZWdpc3RlciB2YWx1ZSAqL1xuK1x0dmRldi1cdTAwM2V0cGhfY2FwX3ZpcnQgPSB2YWw7XG4rfVxuK1xuKy8qIFBlcm1pc3Npb25zIGZvciBUUEggZXh0ZW5kZWQgY2FwYWJpbGl0eSAqL1xuK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbit7XG4rXHQvKlxuK1x0ICogV2Ugb25seSB2aXJ0dWFsaXplIHRoZSBUUEggaGVhZGVyIChleGNsdWRpbmcgdGhlIFNUIHRhYmxlKS5cbitcdCAqIEZvciB0aGUgU1QgdGFibGUgKGlmIGFueSksIHRoZSByZWFkIG9wZXJhdGlvbiByZXR1cm5zIDAgYnlcbitcdCAqIGRlZmF1bHQsIGFuZCB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIGRpc2NhcmRlZCBieSBkZWZhdWx0LlxuK1x0ICovXG4rXHRpZiAoYWxsb2NfcGVybV9iaXRzKHBlcm0sIFBDSV9UUEhfQkFTRV9TSVpFT0YpKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpO1xuK1x0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ0FQLCBBTExfVklSVCwgTk9fV1JJVEUpO1xuK1xuK1x0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsXG4rXHQgICAgICAgUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0sgfCBQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3JlYWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuK1x0XHRcdFx0aW50IGNvdW50LCBzdHJ1Y3QgcGVybV9iaXRzICpwZXJtLFxuK1x0XHRcdFx0aW50IG9mZnNldCwgX19sZTMyICp2YWwpXG4re1xuK1x0aWYgKG9mZnNldCBcdTAwM2U9IFBDSV9UUEhfQkFTRV9TSVpFT0YpIHtcbitcdFx0KnZhbCA9IGNwdV90b19sZTMyKDApO1xuK1x0XHRyZXR1cm4gY291bnQ7XG4rXHR9XG4rXG4rXHRpZiAob2Zmc2V0IFx1MDAzZT0gUENJX1RQSF9DQVAgXHUwMDI2XHUwMDI2ICF2ZGV2LVx1MDAzZXRwaF9vcHRfaW4pIHtcbitcdFx0KnZhbCA9IGNwdV90b19sZTMyKDApO1xuK1x0XHRyZXR1cm4gY291bnQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuK1x0XHRcdFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbitcdFx0XHRcdCBpbnQgb2Zmc2V0LCBfX2xlMzIgdmFsKVxuK3tcbitcdHUxNiBzdGFydCA9IHZmaW9fZmluZF9jYXBfc3RhcnQodmRldiwgcG9zKTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xuK1x0dTggbW9kZSwgcmVxLCBvcmdfcmVxO1xuK1x0X19sZTMyIG9yZ192YWwgPSAwO1xuK1x0dTE2IGNtZDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbiB8fCBvZmZzZXQgXHUwMDNlPSBQQ0lfVFBIX0JBU0VfU0laRU9GKVxuK1x0XHRyZXR1cm4gY291bnQ7XG4rXG4rXHRjbWQgPSB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHZkZXYpO1xuK1xuK1x0b3JnX2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ1RSTF0pO1xuK1x0dmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgXHUwMDI2b3JnX3ZhbCk7XG4rXG4rXHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcbitcdGlmIChyZXQgIT0gY291bnQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bmV3X2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ1RSTF0pO1xuK1x0aWYgKG5ld19jdHJsID09IG9yZ19jdHJsKVxuK1x0XHRnb3RvIG91dDsgLyogT25seSBjYXJlIGFib3V0IGNoYW5nZXMgaW4gVFBIX0NUUkwuICovXG4rXG4rXHRjYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ0FQXSk7XG4rXHRtb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBuZXdfY3RybCk7XG4rXHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7XG4rXHRpZiAobW9kZSBcdTAwM2UgUENJX1RQSF9TVF9EU19NT0RFIHx8ICEoY2FwIFx1MDAyNiAoMXUgXHUwMDNjXHUwMDNjIG1vZGUpKSB8fCByZXEgPT0gMHgyIHx8XG4rXHRcdChyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcdTAwMjZcdTAwMjYgIShjYXAgXHUwMDI2IFBDSV9UUEhfQ0FQX0VYVF9UUEgpKSlcbitcdFx0Z290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi9cbitcbitcdG9yZ19yZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBvcmdfY3RybCk7XG4rXHRpZiAocmVxID09IG9yZ19yZXEpXG4rXHRcdGdvdG8gcmVzdG9yZTsgLyogT25seSBjYXJlIGFib3V0IHJlcXVlc3RlciBlbmFibGUgKi9cbitcbitcdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcbitcdFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCByZXEpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZTtcbitcdH0gZWxzZSBpZiAocmVxID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHtcbitcdFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuK1x0fVxuK1xuK1x0Z290byBvdXQ7XG4rXG4rcmVzdG9yZTpcbitcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTtcbitvdXQ6XG4rXHR2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHZkZXYsIGNtZCk7XG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuIC8qXG4gICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIHBlcm1pc3Npb24gdGFibGVzXG4gICovXG5AQCAtMTEwMCw2ICsxMjQxLDcgQEAgdm9pZCB2ZmlvX3BjaV91bmluaXRfcGVybV9iaXRzKHZvaWQpXG4gXG4gXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0ZnJlZV9wZXJtX2JpdHMoXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbitcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4gfVxuIFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcbkBAIC0xMTIwLDYgKzEyNjIsOSBAQCBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXG4gXHQvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgKi9cbiBcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX2Vycl9wZXJtKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xuK1x0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTtcbitcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS5yZWFkZm4gPSB2ZmlvX3RwaF9jb25maWdfcmVhZDtcbitcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9EVlNFQ10ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcbkBAIC0xMTI5LDIzICsxMjc0LDYgQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcylcbi17XG4tXHR1OCBjYXA7XG4tXHRpbnQgYmFzZSA9IChwb3MgXHUwMDNlPSBQQ0lfQ0ZHX1NQQUNFX1NJWkUpID8gUENJX0NGR19TUEFDRV9TSVpFIDpcbi1cdFx0XHRcdFx0XHQgUENJX1NURF9IRUFERVJfU0laRU9GO1xuLVx0Y2FwID0gdmRldi1cdTAwM2VwY2lfY29uZmlnX21hcFtwb3NdO1xuLVxuLVx0aWYgKGNhcCA9PSBQQ0lfQ0FQX0lEX0JBU0lDKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdC8qIFhYWCBDYW4gd2UgaGF2ZSB0byBhYnV0dGluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZT8gKi9cbi1cdHdoaWxlIChwb3MgLSAxIFx1MDAzZT0gYmFzZSBcdTAwMjZcdTAwMjYgdmRldi1cdTAwM2VwY2lfY29uZmlnX21hcFtwb3MgLSAxXSA9PSBjYXApXG4tXHRcdHBvcy0tO1xuLVxuLVx0cmV0dXJuIHBvcztcbi19XG4tXG4gc3RhdGljIGludCB2ZmlvX21zaV9jb25maWdfcmVhZChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXG4gXHRcdFx0XHRpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4gXHRcdFx0XHRpbnQgb2Zmc2V0LCBfX2xlMzIgKnZhbClcbkBAIC0xNzAxLDYgKzE4MjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0cmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEgpXG4rXHRcdFx0dmZpb191cGRhdGVfdHBoX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCAzZjExYTk2MjRiOWMwMy4uYjhkOWQ4NDBhOTNiNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xMyw2ICsxMyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXBlcnR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG5AQCAtMzAsNiArMzIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0VFSClcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWVoLmhcdTAwM2VcbkBAIC0xMjcsMTAgKzEzMCwyMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoKHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuK1x0XHRcdFx0XHQgICAgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPSB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfcHJpdmF0ZShzZXEpO1xuK1xuK1x0c2VxX3ByaW50ZihzZXEsIFwicG9saWN5PSV1IGNhcC12aXJ0PTB4JXggb3B0LWluPSV1XFxuXCIsXG4rXHRcdHZkZXYtXHUwMDNldHBoX3BvbGljeSwgdmRldi1cdTAwM2V0cGhfY2FwX3ZpcnQsIHZkZXYtXHUwMDNldHBoX29wdF9pbik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWRcbi0gKiBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJ3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbSB0aGVcbi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xuKyAqIGRpc2FibGVfaWRsZV9kMywgbm9pbnR4bWFzayBhbmQgdHBoX3BvbGljeSBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnNcbisgKiBsYXRjaGVkIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UncyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tXG4rICogdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzXG4gICogaGVyZSBmb3IgdmlzaWJpbGl0eTsgcmVhZC1vbmx5IHBhcmFtZXRlcnMgY2FuJ3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLlxuICAqL1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNDYsNiArMTU5LDggQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRcdFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYsIFwiZGlzYWJsZV9pZGxlX2QzXCIsIHBjaV9kaXIsXG4gXHRcdFx0XHQgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcInRwaFwiLCBwY2lfZGlyLFxuK1x0XHRcdFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGgpO1xuIH1cbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG5AQCAtNjEwLDYgKzYyNSw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuIFxuIFx0dmRldi1cdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XG4rXHR2ZGV2LVx1MDAzZXRwaF9vcHRfaW4gPSBmYWxzZTtcbitcdC8qIFJlc2V0IFRQSCBzdGF0dXMgb24gbmV3IHVzZXIgc2Vzc2lvbiAqL1xuK1x0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuIFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXHR2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTtcbiBcdGlmICghdmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUpXG5AQCAtNzU3LDYgKzc3NSw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcbiBcdHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHZkZXYpO1xuIFxuK1x0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBleGl0IHVzZXIgc2Vzc2lvbiAqL1xuK1x0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuK1xuIFx0LypcbiBcdCAqIElmIHdlIGhhdmUgc2F2ZWQgc3RhdGUsIHJlc3RvcmUgaXQuICBJZiB3ZSBjYW4gcmVzZXQgdGhlIGRldmljZSxcbiBcdCAqIGV2ZW4gYmV0dGVyLiAgUmVzZXR0aW5nIHdpdGggY3VycmVudCBzdGF0ZSBzZWVtcyBiZXR0ZXIgdGhhblxuQEAgLTE1NTgsNiArMTU3OSw3IEBAIGxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9XG4gXHRcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSwgdmRldik7XG4gXHR2b2lkIF9fdXNlciAqdWFyZyA9ICh2b2lkIF9fdXNlciAqKWFyZztcbitcdGludCByZXQ7XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBWRklPX0RFVklDRV9HRVRfSU5GTzpcbkBAIC0xNTY5LDkgKzE1OTEsMTUgQEAgbG9uZyB2ZmlvX3BjaV9jb3JlX2lvY3RsKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0Y2FzZSBWRklPX0RFVklDRV9JT0VWRU5URkQ6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9pb2V2ZW50ZmQodmRldiwgdWFyZyk7XG4gXHRjYXNlIFZGSU9fREVWSUNFX1BDSV9IT1RfUkVTRVQ6XG4tXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9wY2lfaG90X3Jlc2V0KHZkZXYsIHVhcmcpO1xuK1x0XHRyZXQgPSB2ZmlvX3BjaV9pb2N0bF9wY2lfaG90X3Jlc2V0KHZkZXYsIHVhcmcpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHRcdHJldHVybiByZXQ7XG4gXHRjYXNlIFZGSU9fREVWSUNFX1JFU0VUOlxuLVx0XHRyZXR1cm4gdmZpb19wY2lfaW9jdGxfcmVzZXQodmRldiwgdWFyZyk7XG4rXHRcdHJldCA9IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHZkZXYsIHVhcmcpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHRcdHJldHVybiByZXQ7XG4gXHRjYXNlIFZGSU9fREVWSUNFX1NFVF9JUlFTOlxuIFx0XHRyZXR1cm4gdmZpb19wY2lfaW9jdGxfc2V0X2lycXModmRldiwgdWFyZyk7XG4gXHRkZWZhdWx0OlxuQEAgLTE2MDcsNiArMTYzNSwyOTkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB1MzIgdmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbitcdHUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChsb2MgPT0gUENJX1RQSF9MT0NfQ0FQKSB7XG4rXHRcdHJldHVybiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTtcbitcdH0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHtcbitcdFx0cmV0ID0gcGNpX21zaXhfdmVjX2NvdW50KHBkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB1MzIgdmZpb19wY2lfZ2V0X3RwaF9jYXBhYmlsaXR5KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbit7XG4rXHR1MzIgZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1BIO1xuK1xuK1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSBcdTAwM2U9IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QgXHUwMDI2XHUwMDI2XG4rXHRcdCh2ZGV2LVx1MDAzZXRwaF9jYXBfdmlydCBcdTAwMjYgUENJX1RQSF9DQVBfU1RfSVYpKSB7XG4rXHRcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTtcbitcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUY7XG4rXHRcdGlmIChwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4rXHRcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7XG4rXHR9XG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5IFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCBcdTAwMjZcdTAwMjZcbitcdFx0KHZkZXYtXHUwMDNldHBoX2NhcF92aXJ0IFx1MDAyNiBQQ0lfVFBIX0NBUF9TVF9EUykpIHtcbitcdFx0aWYgKHZmaW9fcGNpX2dldF90cGhfc3Rfc2l6ZSh2ZGV2KSBcdTAwM2UgMCkge1xuK1x0XHRcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTtcbitcdFx0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRjtcbitcdFx0XHRpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuK1x0XHRcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7XG4rXHRcdH1cbitcdFx0aWYgKHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbitcdFx0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZsYWdzO1xuK31cbitcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdFx0ICAgICB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdCAgICAgc2l6ZV90IGFyZ3N6KVxuK3tcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB0cGg7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFwY2llX3N0ZF90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXG4rXHRcdFx0VkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbitcdFx0XHRzaXplb2YodHBoKSk7XG4rXHRpZiAocmV0ICE9IDEpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dHBoLCBhcmcsIHNpemVvZih0cGgpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSB7XG4rXHRcdGlmICh0cGguZmxhZ3MgIT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0dmRldi1cdTAwM2V0cGhfb3B0X2luID0gMTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR0cGguZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XG4rXG4rXHRyZXR1cm4gY29weV90b191c2VyKGFyZywgXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcbit9XG4rXG4rc3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3Jlc29sdmVfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbit7XG4rXHR1MzIgZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XG4rXHR1MzIgYWxsb3dfc3JjID0gMDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgKFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEggfFxuK1x0XHQgICAgIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfU1QpKVxuK1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9DUFVfU1QpXG4rXHRcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XG4rXHRcdFx0ICAgICBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UO1xuK1xuK1x0cmV0dXJuIGFsbG93X3NyYztcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9nZXRfZG1hYnVmX3RwaChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsIHUxNiAqc3QsIHU4ICpwaClcbit7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0aW50IHJldDtcbitcbitcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTtcbitcdGlmIChJU19FUlIoZG1hYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbitcbitcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXHRpZiAocmV0ID09IDApXG4rXHRcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgc3QsIHBoKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHNyY19iaXRzLFxuK1x0XHRcdFx0ICAgdTMyIHNyY19obmRsLCBib29sIGV4dGVuZGVkLCB1MTYgKnN0KVxuK3tcbitcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHU4IHBoO1xuK1xuK1x0aWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRilcbitcdFx0cmV0ID0gdmZpb19wY2lfZ2V0X2RtYWJ1Zl90cGgoc3JjX2huZGwsIGV4dGVuZGVkLCBzdCwgXHUwMDI2cGgpO1xuK1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFKVxuK1x0XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXG4rXHRcdFx0XHRcdCAgICAgIHJlcV90eXBlLCBzcmNfaG5kbCwgc3QpO1xuK1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQpXG4rXHRcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcbitcdFx0XHRcdFx0ICAgICAgcmVxX3R5cGUsIHNyY19obmRsLCBzdCk7XG4rXHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKVxuK1x0XHQqc3QgPSAwO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1xuK1x0aWYgKHJldCAhPSAwKVxuK1x0XHQqc3QgPSAwO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdHUzMiBmbGFncyxcbitcdFx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSBfX3VzZXIgKmFyZyxcbitcdFx0XHRzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgcmVzb2x2ZTtcbitcdHUzMiB1c2VyX2ZsYWdzLCBhbGxvd19zcmM7XG4rXHRib29sIGV4dGVuZGVkO1xuK1x0dTE2IHRhZyA9IDA7XG4rXHR1OCBwaCA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXRwaF9vcHRfaW4pXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxuK1x0XHRcdFx0IHNpemVvZihyZXNvbHZlKSk7XG4rXHRpZiAocmV0ICE9IDEpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cmVzb2x2ZSwgYXJnLCBzaXplb2YocmVzb2x2ZSkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHVzZXJfZmxhZ3MgPSByZXNvbHZlLmZsYWdzO1xuK1x0ZXh0ZW5kZWQgPSAhISh1c2VyX2ZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xuK1x0aWYgKGV4dGVuZGVkIFx1MDAyNlx1MDAyNiAhcGNpZV9leHRfdHBoX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR1c2VyX2ZsYWdzIFx1MDAyNj0gflZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcbitcbitcdGFsbG93X3NyYyA9IHZmaW9fcGNpX2dldF90cGhfcmVzb2x2ZV9hbGxvd19zcmModmRldik7XG4rXHRpZiAodXNlcl9mbGFncyBcdTAwMjYgfmFsbG93X3NyYyB8fCAhaXNfcG93ZXJfb2ZfMih1c2VyX2ZsYWdzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXNvbHZlLnZhbGlkID0gMDtcbitcdHJlc29sdmUucGggPSAwO1xuK1x0cmVzb2x2ZS5zdCA9IDA7XG4rXG4rXHRpZiAodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpIHtcbitcdFx0cmV0ID0gdmZpb19wY2lfZ2V0X2RtYWJ1Zl90cGgocmVzb2x2ZS5zcmMsIGV4dGVuZGVkLFxuK1x0XHRcdFx0XHQgICAgICBcdTAwMjZ0YWcsIFx1MDAyNnBoKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXNvbHZlLnBoID0gcGg7XG4rXHRcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEg7XG4rXHRcdGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgXHUwMDNlPSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKSB7XG4rXHRcdFx0cmVzb2x2ZS5zdCA9IHRhZztcbitcdFx0XHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbitcdFx0fVxuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHJldCA9IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHZkZXYtXHUwMDNlcGRldiwgdXNlcl9mbGFncywgcmVzb2x2ZS5zcmMsXG4rXHRcdFx0XHQgICAgICBleHRlbmRlZCwgXHUwMDI2dGFnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbitcdHJlc29sdmUuc3QgPSB0YWc7XG4rXG4rb3V0OlxuK1x0cmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnJlc29sdmUsIHNpemVvZihyZXNvbHZlKSkgPyAtRUZBVUxUIDogMDtcbit9XG4rXG4rc3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3N0X2FsbG93X3NyYyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4re1xuK1x0dTMyIGZsYWdzID0gdmZpb19wY2lfZ2V0X3RwaF9jYXBhYmlsaXR5KHZkZXYpO1xuK1x0dTMyIGFsbG93X3NyYyA9IDA7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfRE1BQlVGKVxuK1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfQ1BVKVxuK1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfFxuK1x0XHRcdCAgICAgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVDtcbitcdGlmIChmbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9OT05FKVxuK1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FO1xuK1xuK1x0cmV0dXJuIGFsbG93X3NyYztcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHRcdHUzMiBmbGFncyxcbitcdFx0XHRcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdHNpemVfdCBhcmdzeilcbit7XG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3QgdHBoX3N0O1xuK1x0dTMyIHVzZXJfZmxhZ3MsIGFsbG93X3NyYywgc3Rfc2l6ZTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0Ym9vbCBleHRlbmRlZCwgc3RvcF9vbl96ZXJvO1xuK1x0dTMyICpzcmNfaG5kbCA9IE5VTEw7XG4rXHR1MTYgKnRhZ3MgPSBOVUxMO1xuK1x0aW50IHJldCwgaTtcbitcdHUxNiBjbWQ7XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbiB8fCB2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4rXHRcdFx0XHQgc2l6ZW9mKHRwaF9zdCkpO1xuK1x0aWYgKHJldCAhPSAxKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnRwaF9zdCwgYXJnLCBzaXplb2YodHBoX3N0KSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0dXNlcl9mbGFncyA9IHRwaF9zdC5mbGFncztcbitcdGV4dGVuZGVkID0gISEodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcbitcdGlmIChleHRlbmRlZCBcdTAwMjZcdTAwMjYgIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0dXNlcl9mbGFncyBcdTAwMjY9IH5WRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4rXG4rXHRzdG9wX29uX3plcm8gPSAhISh1c2VyX2ZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfUkVRVUlSRV9TVCk7XG4rXHRpZiAoc3RvcF9vbl96ZXJvIFx1MDAyNlx1MDAyNiAodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR1c2VyX2ZsYWdzIFx1MDAyNj0gflZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUO1xuK1xuK1x0YWxsb3dfc3JjID0gdmZpb19wY2lfZ2V0X3RwaF9zdF9hbGxvd19zcmModmRldik7XG4rXHRpZiAodXNlcl9mbGFncyBcdTAwMjYgfmFsbG93X3NyYyB8fCAhaXNfcG93ZXJfb2ZfMih1c2VyX2ZsYWdzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRzdF9zaXplID0gdmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHZkZXYpO1xuK1x0aWYgKHRwaF9zdC5zdGFydCBcdTAwM2U9IHN0X3NpemUgfHwgdHBoX3N0LmNvdW50IFx1MDAzZSBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8XG4rXHRcdHRwaF9zdC5jb3VudCA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICghKHVzZXJfZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSkpIHtcbitcdFx0c3JjX2huZGwgPSBtZW1kdXBfYXJyYXlfdXNlcih1NjRfdG9fdXNlcl9wdHIodHBoX3N0LmRlc3RzKSxcbitcdFx0XHRcdFx0ICAgICB0cGhfc3QuY291bnQsIHNpemVvZih1MzIpKTtcbitcdFx0aWYgKElTX0VSUihzcmNfaG5kbCkpXG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoc3JjX2huZGwpO1xuK1x0fVxuK1x0dGFncyA9IGtjYWxsb2ModHBoX3N0LmNvdW50LCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghdGFncykge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwaF9zdC5jb3VudDsgaSsrKSB7XG4rXHRcdHJldCA9IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHBkZXYsIHVzZXJfZmxhZ3MsXG4rXHRcdFx0XHRcdCAgICAgIHNyY19obmRsID8gc3JjX2huZGxbaV0gOiAwLFxuK1x0XHRcdFx0XHQgICAgICBleHRlbmRlZCwgXHUwMDI2dGFnc1tpXSk7XG4rXHRcdGlmIChyZXQgfHwgKHN0b3Bfb25femVybyBcdTAwMjZcdTAwMjYgdGFnc1tpXSA9PSAwKSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmIChpIFx1MDAzZSAwKSB7XG4rXHRcdGNtZCA9IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUodmRldik7XG4rXHRcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIHRwaF9zdC5zdGFydCwgaSwgdGFncyk7XG4rXHRcdHZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTtcbitcdH1cbitcbitvdXQ6XG4rXHRrZnJlZSh0YWdzKTtcbitcdGtmcmVlKHNyY19obmRsKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbiB7XG5AQCAtMTYyNSw2ICsxOTQ2LDE2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4gXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcbitcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuK1x0XHRcdFx0XHRcdFx0IGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRTpcbitcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSh2ZGV2LCBmbGFncyxcbitcdFx0XHRcdFx0XHRcdCBhcmcsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1Q6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5pbmRleCBjMTZmNDYwYzAxZDY4MS4uNTM1MTgzOWMxMzM4YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5AQCAtMyw2ICszLDcgQEBcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInZmaW9fcGNpX3ByaXYuaFwiXG5AQCAtMTksNyArMjAsMTcgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xuIFx0dTMyIG5yX3JhbmdlcztcbiBcdHN0cnVjdCBrcmVmIGtyZWY7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuLVx0dTggcmV2b2tlZCA6IDE7XG4rXG4rXHQvKlxuK1x0ICogVXBkYXRlcyBwcm90ZWN0ZWQgYnkgZG1hYnVmLVx1MDAzZXJlc3YsIEByZXZva2VkIGFkZGl0aW9uYWxseVxuK1x0ICogcHJvdGVjdGVkIGJ5IG1lbW9yeV9sb2NrLlxuK1x0ICovXG4rXHR1MTYgdHBoX3N0X2V4dDtcbitcdHU4IHRwaF9zdDtcbitcdGJvb2wgcmV2b2tlZDtcbitcdHU4IHRwaF9zdF92YWxpZDoxO1xuK1x0dTggdHBoX3N0X2V4dF92YWxpZDoxO1xuK1x0dTggdHBoX3BoOjI7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG5AQCAtMzAsNyArNDEsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRpZiAoIWF0dGFjaG1lbnQtXHUwMDNlcGVlcjJwZWVyKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuK1x0aWYgKFJFQURfT05DRShwcml2LVx1MDAzZXJldm9rZWQpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmICghZG1hX2J1Zl9hdHRhY2hfcmV2b2NhYmxlKGF0dGFjaG1lbnQpKVxuQEAgLTY5LDYgKzgwLDI2IEBAIHZmaW9fcGNpX2RtYV9idWZfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbit7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuK1xuK1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1xuK1x0aWYgKGV4dGVuZGVkKSB7XG4rXHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfZXh0X3ZhbGlkKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0X2V4dDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHQqc3RlZXJpbmdfdGFnID0gcHJpdi1cdTAwM2V0cGhfc3Q7XG4rXHR9XG4rXHQqcGggPSBwcml2LVx1MDAzZXRwaF9waDtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcbiBcdFx0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbkBAIC0xMDEsNiArMTMyLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0ge1xuIFx0LmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLFxuK1x0LmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCxcbiBcdC5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfbWFwLFxuIFx0LnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLFxuIFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXG5AQCAtMzMzLDYgKzM2NSw3MiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuK1x0XHRcdFx0ICAgICAgc2l6ZV90IGFyZ3N6KVxuK3tcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcbitcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4rXHR1OCBjb21wO1xuK1x0aW50IHJldDtcbitcbitcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuK1x0XHRcdFx0IHNpemVvZihzZXRfdHBoKSk7XG4rXHRpZiAocmV0ICE9IDEpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGlmIChzZXRfdHBoLmZsYWdzIFx1MDAyNiB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHNldF90cGgucGggXHUwMDI2IH4weDMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKChzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpO1xuK1x0aWYgKElTX0VSUihkbWFidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuK1xuK1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9wdXQ7XG4rXHR9XG4rXG4rXHRwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4rXHRpZiAocHJpdi1cdTAwM2V2ZGV2ICE9IHZkZXYpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfcHV0O1xuK1x0fVxuK1xuK1x0cmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcbitcdHByaXYtXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcbitcdHByaXYtXHUwMDNldHBoX3N0X2V4dCAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZ19leHQ7XG4rXHRwcml2LVx1MDAzZXRwaF9waCAgICAgICAgID0gc2V0X3RwaC5waDtcbitcdHByaXYtXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcbitcdHByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZCA9XG4rXHRcdCEhKHNldF90cGguZmxhZ3MgXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRyZXQgPSAwO1xuK1xuK291dF9wdXQ6XG4rXHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLjAzYzRhMDQxNDI2NGVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMTEsNiArMTEsMTIgQEBcbiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovXG4gI2RlZmluZSBWRklPX1BDSV9JT0VWRU5URkRfTUFYXHRcdDEwMDBcbiBcbitlbnVtIHZmaW9fcGNpX3RwaF9wb2xpY3kge1xuK1x0VkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCA9IDAsXG4rXHRWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSxcbitcdFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QgPSAyLFxuK307XG4rXG4gc3RydWN0IHZmaW9fcGNpX2lvZXZlbnRmZCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXh0O1xuIFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlXHQqdmRldjtcbkBAIC0xMTgsNiArMTI0LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxuIFx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgICAgICBzaXplX3QgYXJnc3opO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuICNlbHNlXG5AQCAtMTI4LDYgKzEzOCwxNCBAQCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiB7XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuK1x0XHRcdFx0ICBzaXplX3QgYXJnc3opXG4re1xuK1x0cmV0dXJuIC1FTk9UVFk7XG4rfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuaW5kZXggZDEyMDNkYTU2ZmM1ZjcuLjE0ZThlYjYxYTYyYzA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5AQCAtMTEzLDYgKzExMywyOSBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMge1xuIFx0ICovXG4gXHR2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4gXG4rXHQvKipcbitcdCAqIEBnZXRfcGNpX3RwaDpcbitcdCAqXG4rXHQgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yXG4rXHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cbitcdCAqIG91dGJvdW5kIFRMUHMgdGFyZ2V0aW5nIHRoZSBleHBvcnRlciBmb3IgcGVlci10by1wZWVyIERNQS5cbitcdCAqXG4rXHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcbitcdCAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbitcdCAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkXG4rXHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcbitcdCAqIEBwaDogUmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludCAoMi1iaXQgdmFsdWUpXG4rXHQgKlxuK1x0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcbitcdCAqIFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuXG4rXHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cbitcdCAqXG4rXHQgKiBSZXR1cm5lZCBtZXRhZGF0YSBmb2xsb3dzIHRoZSBsaWZldGltZSBydWxlcyBkb2N1bWVudGVkIGZvclxuK1x0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLlxuK1x0ICovXG4rXHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHQgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbitcbiBcdC8qKlxuIFx0ICogQG1hcF9kbWFfYnVmOlxuIFx0ICpcbkBAIC01NjMsNiArNTg2LDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuIFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbmluZGV4IGJlNjhjZDE3ZjJmODMzLi5hZWFmNzAxZTc5NjViMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuQEAgLTksNiArOSw4IEBAXG4gI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0hcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rXG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcbkBAIC0yMSwyNiArMjMsNjkgQEAgZW51bSB0cGhfbWVtX3R5cGUge1xuIH07XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuKy8qKlxuKyAqIHBjaWVfc3RkX3RwaF9zdXBwb3J0ZWQgLSBjaGVjayBzdGFuZGFyZCBUUEggcmVxdWVzdGVyIHN1cHBvcnRcbisgKiBAcGRldjogUENJIGRldmljZVxuKyAqL1xuKyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBcXFxuK1x0KChwZGV2KS1cdTAwM2V0cGhfbWF4X3R5cGUgXHUwMDNlPSBQQ0lfVFBIX1JFUV9UUEhfT05MWSlcbisvKipcbisgKiBwY2llX2V4dF90cGhfc3VwcG9ydGVkIC0gY2hlY2sgZXh0ZW5kZWQgVFBIIHJlcXVlc3RlciBzdXBwb3J0XG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKi9cbisjZGVmaW5lIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikgXFxcbitcdCgocGRldiktXHUwMDNldHBoX21heF90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpXG4gaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZyk7XG4taW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcbi1cdFx0XHRlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbitpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCxcbitcdFx0XHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbitcdFx0XHQgICAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XG4gdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKTtcbitpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKTtcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbit1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4rYm9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiAjZWxzZVxuKyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZVxuKyNkZWZpbmUgcGNpZV9leHRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbitzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldixcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc3RhcnQsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpXG4reyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0XHRcdCAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsXG4rXHRcdFx0XHRcdCAgdTE2ICp0YWcpXG4reyByZXR1cm4gLUVJTlZBTDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cbi1zdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsXG4rXHRcdFx0XHQgICAgICB1OCByZXFfdHlwZSlcbit7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbitzdGF0aWMgaW5saW5lIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiAwOyB9XG4rc3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBQQ0lfVFBIX0xPQ19OT05FOyB9XG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOyB9XG4rc3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4reyByZXR1cm4gZmFsc2U7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li41ZWQ1ODc5OWE5YjEyOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC00NzIsNyArNDcyLDYgQEAgc3RydWN0IHBjaV9kZXYge1xuIFx0dW5zaWduZWQgaW50XHRhdHNfZW5hYmxlZDoxO1x0XHQvKiBBZGRyZXNzIFRyYW5zbGF0aW9uIFN2YyAqL1xuIFx0dW5zaWduZWQgaW50XHRwYXNpZF9lbmFibGVkOjE7XHQvKiBQcm9jZXNzIEFkZHJlc3MgU3BhY2UgSUQgKi9cbiBcdHVuc2lnbmVkIGludFx0cHJpX2VuYWJsZWQ6MTtcdFx0LyogUGFnZSBSZXF1ZXN0IEludGVyZmFjZSAqL1xuLVx0dW5zaWduZWQgaW50XHR0cGhfZW5hYmxlZDoxO1x0XHQvKiBUTFAgUHJvY2Vzc2luZyBIaW50cyAqL1xuIFx0dW5zaWduZWQgaW50XHRmbV9lbmFibGVkOjE7XHRcdC8qIEZsaXQgTW9kZSAoc2VnbWVudCBjYXB0dXJlZCkgKi9cbiBcdHVuc2lnbmVkIGludFx0aXNfbWFuYWdlZDoxO1x0XHQvKiBNYW5hZ2VkIHZpYSBkZXZyZXMgKi9cbiBcdHVuc2lnbmVkIGludFx0aXNfbXNpX21hbmFnZWQ6MTtcdC8qIE1TSSByZWxlYXNlIHZpYSBkZXZyZXMgaW5zdGFsbGVkICovXG5AQCAtNTg4LDcgKzU4NywxMCBAQCBzdHJ1Y3QgcGNpX2RldiB7XG4gXHR1OCByZXNldF9tZXRob2RzW1BDSV9OVU1fUkVTRVRfTUVUSE9EU107IC8qIEluIHByaW9yaXR5IG9yZGVyICovXG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuLVx0dTE2XHRcdHRwaF9jYXA7XHQvKiBUUEggY2FwYWJpbGl0eSBvZmZzZXQgKi9cbitcdHUxNlx0XHR0cGhfY2FwOjEzO1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4rXHR1MTZcdFx0dHBoX21heF90eXBlOjI7IC8qIE5lZ290aWF0ZWQgbWF4IFRQSCByZXF1ZXN0ZXIgdHlwZVxuK1x0XHRcdFx0XHQgICBiZXR3ZWVuIGRldmljZSBhbmQgcm9vdCBwb3J0ICovXG4rXHR1MTZcdFx0dHBoX2VuYWJsZWQ6MTtcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cbiBcdHU4XHRcdHRwaF9tb2RlO1x0LyogVFBIIG1vZGUgKi9cbiBcdHU4XHRcdHRwaF9yZXFfdHlwZTtcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbmluZGV4IDlhMTY3NGMxNTJhYTI5Li5kNjA2NGZhOWU4MGE2OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuQEAgLTE0OSw2ICsxNDksOSBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXHRuYjtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdG1lbW9yeV9sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZG1hYnVmcztcbitcdHU4XHRcdFx0dHBoX29wdF9pbjtcbitcdHU4XHRcdFx0dHBoX3BvbGljeTtcbitcdHUzMlx0XHRcdHRwaF9jYXBfdmlydDtcbiB9O1xuIFxuIGVudW0gdmZpb19wY2lfaW9fd2lkdGgge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uOWJjM2NlZjdhODlhYzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICsxNTM0LDE1MCBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcbiAgKi9cbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxuIFxuKy8qKlxuKyAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgYXNzb2NpYXRlIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhXG4rICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieVxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiBvbiB0aGlzIGRldmljZSwgYW5kIHRoZSBkZXZpY2UgbXVzdCByZXBvcnRcbisgKiBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gRGV2aWNlIENhcGFiaWxpdGllcyAyIChiaXRzIDEzOjEyKTsgcmVxdWVzdHNcbisgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvXG4rICogcmVwb3J0IHRoZSBFeHRlbmRlZCBUUEggQ29tcGxldGVyIGVuY29kaW5nLiBPdGhlcndpc2UgdGhlIGlvY3RsXG4rICogcmV0dXJucyAtRU9QTk9UU1VQUC5cbisgKlxuKyAqIEBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuXG4rICpcbisgKiA4LWJpdCBTVCAoQHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoQHN0ZWVyaW5nX3RhZ19leHQpIGFyZVxuKyAqIGRpc3RpbmN0IG5hbWVzcGFjZXMuIEBmbGFncyBpcyB0aGUgYXV0aG9yaXRhdGl2ZSB2YWxpZGl0eSBtYXNrIGZvciB0aGVcbisgKiB0d28gbmFtZXNwYWNlczogVkZJT19ETUFfQlVGX1RQSF9TVCBtYXJrcyBAc3RlZXJpbmdfdGFnIHZhbGlkIGFuZFxuKyAqIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIG1hcmtzIEBzdGVlcmluZ190YWdfZXh0IHZhbGlkLiBBbiBpbXBvcnRlclxuKyAqIHJlcXVlc3RzIG9uZSBuYW1lc3BhY2UgYW5kIHJlY2VpdmVzIHRoZSBtYXRjaGluZyB2YWx1ZS5cbisgKlxuKyAqIEVhY2ggU0VUIGZ1bGx5IHJlcGxhY2VzIHRoZSBkbWEtYnVmJ3MgVFBIIHN0YXRlIGZvciBmdXR1cmUgcXVlcmllc1xuKyAqIG9ubHkuIEEgbmFtZXNwYWNlIHdob3NlIGZsYWcgYml0IGlzIGNsZWFyIGlzIHJlcG9ydGVkIGFzIHVuc3VwcG9ydGVkXG4rICogdG8gZnV0dXJlIGltcG9ydGVyczsgYW4gaW1wb3J0ZXIgdGhhdCBoYXMgYWxyZWFkeSByZXRyaWV2ZWQgYSB2YWx1ZVxuKyAqIGlzIHVuYWZmZWN0ZWQuIEBmbGFncyA9PSAwIGxlYXZlcyBib3RoIG5hbWVzcGFjZXMgdW5zdXBwb3J0ZWQgZm9yXG4rICogZnV0dXJlIGltcG9ydGVycy5cbisgKlxuKyAqIEBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLlxuKyAqXG4rICogVW5kZWZpbmVkIEBmbGFncyBhbmQgQHBoIGJpdHMgbXVzdCBhbHdheXMgYmUgemVyby5cbisgKlxuKyAqIFVzZXJzcGFjZSBtdXN0IGNvbmZpZ3VyZSBUUEggYmVmb3JlIGhhbmRpbmcgdGhlIGRtYS1idWYgZmQgdG8gYW5cbisgKiBpbXBvcnRlci5cbisgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEggMTNcbitcbisjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RcdFx0KDEgXHUwMDNjXHUwMDNjIDApXG4rI2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVFx0XHQoMSBcdTAwM2NcdTAwM2MgMSlcbitcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7XG4rXHRfX3MzMlx0ZG1hYnVmX2ZkO1xuK1x0X191MzJcdGZsYWdzO1xuK1x0X191MTZcdHN0ZWVyaW5nX3RhZ19leHQ7XG4rXHRfX3U4XHRzdGVlcmluZ190YWc7XG4rXHRfX3U4XHRwaDtcbit9O1xuK1xuKy8qIFBDSWUgVFBIIGRldmljZSBmZWF0dXJlIGRlZmluaXRpb25zIGZvciBWRklPX0RFVklDRV9GRUFUVVJFIGlvY3RsICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFx0XHQxNFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRVx0MTVcbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUXHQxNlxuK1xuKy8qXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggLSBDb250cm9sIGFuZCBxdWVyeSBQQ0kgVFBIIGNhcGFiaWxpdGllc1xuKyAqXG4rICogU0VUOiBPcHQtaW4gdG8gVFBIIGZlYXR1cmUgZm9yIHRoZSBkZXZpY2U7IGZsYWdzIG11c3QgYmUgemVyby5cbisgKiBHRVQ6IFJldHVybiBzdXBwb3J0ZWQgVFBIIGNhcGFiaWxpdHkgYml0cyAoc2VlIFZGSU9fREVWSUNFX1RQSF9DQVBfKilcbisgKiAgICAgIGluIGZsYWdzLiBSZXR1cm5zIGVycm9yIGlmIFNFVCBoYXMgbm90IGJlZW4gaW52b2tlZCBmaXJzdC5cbisgKlxuKyAqIFVzZXJzcGFjZSBtdXN0IGZpcnN0IGludm9rZSBTRVQgb24gdGhpcyBmZWF0dXJlIHRvIGVuYWJsZSBUUEggc3VwcG9ydCxcbisgKiByZWNlaXZlIHZhbGlkIGNhcGFiaWxpdHkgYml0cyB2aWEgR0VULCBnYWluIHBlcm1pc3Npb24gZm9yIHVzaW5nXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAvIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NULCBhbmQgYWNjZXNzXG4rICogdGhlIHZpcnR1YWxpemVkIFRQSCBjYXBhYmlsaXR5IHJlZ2lzdGVycyB2aWEgVkZJTyBjb25maWcgc3BhY2UgYWNjZXNzZXMuXG4rICovXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIHtcbitcdF9fdTMyIGZsYWdzO1xuK307XG4rXG4rLyogRE1BQlVGIHNvdXJjZSByZXNvbHZlIHByb2Nlc3NpbmcgaGludCBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEhcdCgxdSBcdTAwM2NcdTAwM2MgMClcbisvKiBETUFCVUYgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfRE1BQlVGXHRcdCgxdSBcdTAwM2NcdTAwM2MgMSlcbisvKiBDUFUgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfQ1BVXHRcdCgxdSBcdTAwM2NcdTAwM2MgMilcbisvKiBOT05FIHNvdXJjZSAobWVhbnMgc3RlZXJpbmcgdGFnIGlzIHplcm8pIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORVx0XHQoMXUgXHUwMDNjXHUwMDNjIDMpXG4rLyogRE1BQlVGIHNvdXJjZSByZXNvbHZlIHN0ZWVyaW5nIHRhZyBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfU1RcdCgxdSBcdTAwM2NcdTAwM2MgNClcbisvKiBDUFUgc291cmNlIHJlc29sdmUgc3RlZXJpbmcgdGFnIHN1cHBvcnRlZCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0NQVV9TVFx0KDF1IFx1MDAzY1x1MDAzYyA1KVxuK1xuKy8qXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgVFBIIGF0dHJpYnV0ZXMgZnJvbSBnaXZlbiBzb3VyY2VcbisgKlxuKyAqIEdFVCBvbmx5XG4rICpcbisgKiBSZXF1aXJlcyBwcmlvciBzdWNjZXNzZnVsIFNFVCBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCwgb3RoZXJ3aXNlXG4rICogdGhpcyBmZWF0dXJlIHdpbGwgcmV0dXJuIGVycm9yLlxuKyAqXG4rICogQGZsYWdzOiBJTiAtIHNvdXJjZSB0eXBlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX1NSQ18qKVxuKyAqICAgICAgICAgYW5kIHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2Ugc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpXG4rICogQHNyYzogICBJTiAtIHNvdXJjZSBpZGVudGlmaWVyLCBlLmcuIGRtYWJ1ZiBmZCB3aGVuIFNSQ19ETUFCVUYgaXMgc2V0IGluXG4rICogICAgICAgICBmbGFnc1xuKyAqIEB2YWxpZDogT1VUIC0gYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcywgc2VlXG4rICogICAgICAgICBWRklPX0RFVklDRV9UUEhfVkFMSURfKlxuKyAqIEBwaDogICAgT1VUIC0gVFBIIHByb2Nlc3NpbmcgaGludCAodmFsaWQgd2hlbiBWQUxJRF9QSCBpcyBzZXQgaW4gdmFsaWQpXG4rICogQHN0OiAgICBPVVQgLSBUUEggc3RlZXJpbmcgdGFnICh2YWxpZCB3aGVuIFZBTElEX1NUIGlzIHNldCBpbiB2YWxpZClcbisgKi9cbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7XG4rXHRfX3UzMiBmbGFncztcbitcdF9fdTMyIHNyYztcbitcdF9fdTggIHZhbGlkO1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIICgxdSBcdTAwM2NcdTAwM2MgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1QgKDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBzdCBob2xkcyB2YWxpZCBzdGVlcmluZyB0YWcgKi9cbitcdF9fdTggIHBoO1xuK1x0X191MTYgc3Q7XG4rfTtcbitcbisvKlxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUIC0gQmF0Y2ggcHJvZ3JhbSBhcmNoaXRlY3RlZCBzdGVlcmluZyB0YWdcbisgKiB0YWJsZSBlbnRyaWVzXG4rICogUmV0dXJuIHZhbHVlOiBcdTAwM2U9MCA9IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzO1xuKyAqICAgICAgICAgICAgICAgXHUwMDNjMCAgPSBuZWdhdGl2ZSBlcnJub1xuKyAqXG4rICogU0VUIG9ubHlcbisgKlxuKyAqIEFkZGl0aW9uYWwgY29uc3RyYWludDogVXNlcnNwYWNlIG11c3QgY29tcGxldGUgdHdvIHByZXJlcXVpc2l0ZSBzdGVwc1xuKyAqIGJlZm9yZSBpbnZva2luZyB0aGlzIGZlYXR1cmU6XG4rICogMS4gQ2FsbCBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCB3aXRoIFNFVCB0byBlbmFibGUgdmZpbyBUUEggcGVybWlzc2lvbjtcbisgKiAyLiBXcml0ZSB0aGUgVFBIIGNvbnRyb2wgcmVnaXN0ZXIgdG8gYWN0aXZhdGUgZGV2aWNlIGhhcmR3YXJlIFRQSCBsb2dpYy5cbisgKlxuKyAqIEBmbGFnczogSU4gLSBzb3VyY2UgdHlwZSBzZWxlY3RvciAoc2VlIFZGSU9fREVWSUNFX1RQSF9TUkNfKikgYW5kXG4rICogICAgICAgICBzdGVlcmluZyB0YWcgbmFtZXNwYWNlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKSBhbmRcbisgKiAgICAgICAgIGZhaWx1cmUgcG9saWN5IChzZWUgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpXG4rICogQHN0YXJ0OiBJTiAtIGZpcnN0IHN0ZWVyaW5nIHRhZyB0YWJsZSBpbmRleCAvIE1TSS1YIHZlY3RvclxuKyAqIEBjb3VudDogSU4gLSBudW1iZXIgb2YgY29udGlndW91cyBlbnRyaWVzIHRvIHByb2dyYW1cbisgKiBAZGVzdHM6IElOIC0gdXNlciBwb2ludGVyIHRvIGFycmF5IG9mIHNvdXJjZSB1MzIgdmFsdWVzXG4rICovXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHtcbitcdF9fdTMyIGZsYWdzO1xuK1x0X191MTYgc3RhcnQ7XG4rXHRfX3UxNiBjb3VudDtcbitcdF9fYWxpZ25lZF91NjQgZGVzdHM7XG4rfTtcbitcbisvKiBTb3VyY2UgaG9sZHMgZG1hLWJ1ZiBmZCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgICAgICAoMXUgXHUwMDNjXHUwMDNjIDApXG4rLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBzdGVlcmluZyB0YWcgbmFtZXNwYWNlICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERURcdCgxdSBcdTAwM2NcdTAwM2MgMSlcbisvKiBTb3VyY2UgaG9sZHMgdm9sYXRpbGUgbWVtb3J5IENQVSBJRCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEVcdCgxdSBcdTAwM2NcdTAwM2MgMilcbisvKiBTb3VyY2UgaG9sZHMgcGVyc2lzdGVudCBtZW1vcnkgQ1BVIElEICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UXHQoMXUgXHUwMDNjXHUwMDNjIDMpXG4rLyogVFBIX1NUIG9ubHk6IHNldCBzdGVlcmluZyB0YWcgdG8gemVybyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FXHQoMXUgXHUwMDNjXHUwMDNjIDQpXG4rLyogVFBIX1NUIG9ubHk6IGZhaWwgaWYgcmVzb2x2ZWQgc3RlZXJpbmcgdGFnIGlzIHplcm8gKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUXHQoMXUgXHUwMDNjXHUwMDNjIDUpXG4rXG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNTo0Ni40NDc2ODIzODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODc1OTAxMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkgYW5kIERNQS1CVUYgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIGFsbCBhYm91dCBpbnRlZ3JhdGluZyBQQ0llIFRQSCB3aXRoIERNQS1CVUYsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFZGSU8gZnJhbWV3b3JrLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgbm9uLXRyaXZpYWwgcGllY2Ugb2Ygd29yaywgdG91Y2hpbmcgYSBnb29kIGNodW5rIG9mIHRoZSBrZXJuZWw6IGBkbWEtYnVmLmNgLCB0aGUgYHBjaS90cGguY2AgYW5kIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgVkZJTyBQQ0kgY29kZSwgYXMgd2VsbCBhcyBzZXZlcmFsIGhlYWRlciBmaWxlcy4gVGhlIGJyZWFkdGggb2YgdGhlIGNoYW5nZXMgaW1tZWRpYXRlbHkgc2lnbmFscyBzb21lIGNvbXBsZXhpdHkgYW5kIHRoZSBuZWVkIGZvciBjYXJlZnVsIHNjcnV0aW55LlxuXG5JdCdzIGNsZWFyIHRoYXQgdGhlIGFpbSBoZXJlIGlzIHRvIGV4cG9zZSBUUEggZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UgdGhyb3VnaCBWRklPLiBJIHNlZSBuZXcgVkZJTyBpb2N0bHMgYmVpbmcgaW50cm9kdWNlZDogYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhgLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRWAsIGFuZCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RgLiBUaGUgYWRkaXRpb24gb2YgYGRtYV9idWZfZ2V0X3BjaV90cGhgIGluIGBkbWEtYnVmLmNgIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgcGNpL3RwaC5jYCBpbmNsdWRpbmcgbmV3IGZ1bmN0aW9ucyBsaWtlIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AsIGFuZCB0aGUgZW5hYmxlbWVudC9zdXBwb3J0IGNoZWNrcywgYWxsIHNlZW0gdG8gYmUgcGx1bWJpbmcgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgdG9nZXRoZXIuIEl0IGFwcGVhcnMgZnVuY3Rpb25hbCwgYW5kIHJlYWNoYWJsZSB2aWEgVkZJTyBpb2N0bHMuIFRoaXMgbWVhbnMgd2UgKmFic29sdXRlbHkqIG5lZWQgdG8gZnV6eiB0aGUgbmV3IGlvY3RscyBhZ2dyZXNzaXZlbHk7IGEgbWlzaW50ZXJwcmV0YXRpb24gY291bGQgaGF2ZSBzZXZlcmUgcmVwZXJjdXNzaW9ucy5cblxuQmVmb3JlIEkgZGVsdmUgZGVlcGVyLCBsZXQncyBpZGVudGlmeSB0aGUgY29uZmlnIG9wdGlvbnMgd2UgbmVlZCB0byBrbm93IGFib3V0LiBUaGUgY29kZSB1c2VzIGBDT05GSUdfUENJRV9UUEhgIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBpbmNsdWRpbmcgdGhlIG1haW4gVkZJTyBQQ0kgZHJpdmVyLCBhcyB3ZWxsIGFzIHRoZSBwY2kgYW5kIHRwaCBoZWFkZXJzLiBgQ09ORklHX1ZGSU9fUENJYCBpcyBjbGVhcmx5IHRoZSBiYWNrYm9uZSBjb25maWcgZm9yIFZGSU8gUENJLCBhbmQgaXQncyB1bnN1cnByaXNpbmcgdG8gc2VlIHRoYXQgYENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUmAgaXMgcmVxdWlyZWQsIGdpdmVuIHRoZSBETUEtQlVGIGludGVncmF0aW9uLiBOZXh0LCBJIHNob3VsZCBsb29rIGF0IHdoZXJlIGBDT05GSUdfUENJRV9UUEhgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBpcyBuZWVkZWQgZm9yIHRoaXMgbmV3IGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDU6NTQuMzIzNTg2Mjg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTA0MDg2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSUVfVFBIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk2LVxcbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlRMUCBQcm9jZXNzaW5nIEhpbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNjowMS40NzQwMDA4ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA3MTA0NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqUENJZSBUUEggYW5kIFZGSU8tUENJIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYFBDSUVfVFBIYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbi4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCByaWdodD8gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUuLi4gdGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB3aXRoIGBWRklPX1BDSWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIFBDSWUgVFBIIGlzIGhhbmRsZWQuIFBlcmhhcHMgSSBzaG91bGQgYWxzbyBsb29rIGZvciBWRklPLXNwZWNpZmljIGNvZGUgcGF0aHMsIHRvIHNlZSBob3cgdG8gZGVhbCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBpdHMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucyB0byBzZWUgaWYgSSBhbSBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjA1LjM4MTEwODU3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA0Nzg2MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNjoxMC40ODU5MDQ0MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI3MTU2NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFZGSU8gQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgVkZJTyBzZXR1cCBoZXJlLiBMb29rcyBsaWtlIGBWRklPX1BDSWAgaXMgdGhlIGNvcmUsIHRoZSBtYWluIG1vZHVsZSB3ZSBuZWVkIGZvciBQQ0kgcGFzc3Rocm91Z2gsIG5hdHVyYWxseS4gQnV0LCBpZiB3ZSB3YW50IHRvIGxldmVyYWdlIHRoZSBkbWFidWYgZmVhdHVyZXMsIHRoZW4gd2UnbGwgZGVmaW5pdGVseSBuZWVkIGBWRklPX1BDSV9ETUFCVUZgIGFzIHdlbGwuIFRoYXQgb25lLCBJIHNlZSwgZGVwZW5kcyBvbiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC5cblxuU28sIHRvIGJlIGV4cGxpY2l0IGFuZCBjb3ZlciBhbGwgdGhlIGJhc2VzLCBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHdlIGVuYWJsZSBgUENJRV9UUEhgLCB0aGVuIGVuYWJsZSBgVkZJT19QQ0lgLCBmb2xsb3dlZCBieSBgUENJX1AyUERNQWAsIGFuZCwgZmluYWxseSwgYERNQV9TSEFSRURfQlVGRkVSYC4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGBQQ0lfUDJQRE1BYCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjA1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjE1LjQxMzA2NTU5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyNDUwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfUDJQRE1BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxcbi0tXFxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDUtXFxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjIwLjM0NTUyMTIxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjczODU2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBUUEggSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBkcml2aW5nIHRoaXMgVFBIIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNvZGUgc3VnZ2VzdHMgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXM6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHRgLCBgcGNpZV90cGhfc2V0X3N0X2VudHJpZXNgLCBhbmQgZmluYWxseSBgcGNpZV9lbmFibGVfdHBoX2V4dGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRyb2wgZmxvdy4gRmlyc3QsIHRob3VnaCwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCB0aGF0IHRoZXkncmUgY29ycmVjdGx5IGNvbm5lY3RlZCB3aXRoaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhcmUgc29saWQgYmVmb3JlIEkgc3RhcnQgYXNzZW1ibGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MDcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDY6MjQuOTcyOTExMjc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU1MTYwOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTY1Nj1zdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjgxLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2ODI6c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjgzLVxcdFxcdFxcdFxcdCAgICAgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTc1MD1zdGF0aWMgaW50IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzc1LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3NzY6c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3NzctXFx0XFx0XFx0dTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTgzOD1zdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NTMtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTg1NDpzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NTUtXFx0XFx0XFx0XFx0dTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTkzMT1pbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTUyLVxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTk1MzpcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTk1NC1cXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkU6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTk1NTpcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHZkZXYsIGZsYWdzLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5NTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZywgYXJnc3opO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5NTctXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxOTU4OlxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTU5LVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjMwLjAyODA4NTEzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTYyODg4NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbmZpcm1pbmcgYW5kIFJlZmluaW5nOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsICp0aGV5KiBhcmUgdGhlcmUuIEkgY2FuIHNlbnNlIGl0LiBOb3csIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0IGFuZCBJIGhhdmUgYWxsIHRoZSBwaWVjZXMgSSByZXF1aXJlLlxuXG5MZXQncyBjaGVjayB0aGUgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEknbSB2ZXJpZnlpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgcHJlc2VuY2UgYW5kIG1ha2luZyBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjcnVjaWFsIGNvbXBvbmVudCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBpcyBzb3VuZC4gSXQncyBhIGtleSBlbGVtZW50IGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBvbiBzb2xpZCBncm91bmQgcmVnYXJkaW5nIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBleHBlY3RlZCBiZWhhdmlvci4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayBidXQgYSB2aXRhbCBzdGVwIHRvIGF2b2lkIGFueSBmdXR1cmUgc3VycHJpc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk0NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjM0LjE5MDk3NjkxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzMjI1Mzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTkzMT1pbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTQ5LVxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxOTUwOlxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTUxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBhcmdzeik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTI1Mz1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM2Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjM2ODppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM2OS1cXHRcXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMjQ9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTI2LVxcdFxcdFxcdFxcdCAgc2l6ZV90IGFyZ3N6KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaDoxMjc6aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTI4LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTE0Mj1zdGF0aWMgaW5saW5lIGludFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjE0Mzp2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTQ0LVxcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjM5LjMyMzI0MTE5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODE0Njk3NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVkZJTyBQQ0llIFRQSCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB3aXRoaW4gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFBDSWUgVFBILiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nPyBUaGlzIHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldC5cIiBXZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZGSU8gZHJpdmVyLCB0aGUgRE1BLUJVRiBmcmFtZXdvcmssIGFuZCB0aGUgUENJZSBoaWVyYXJjaHkuIEFueSBuZXcgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHNwYWNlIGlzIGFsd2F5cyB3b3J0aCBhIHRob3JvdWdoIGxvb2suXG5cbk5vdywgZm9yIHRoZSBzZXR1cC4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCwgY3J1Y2lhbGx5LCBgVkZJT19QQ0lfRE1BQlVGYCwgd2hpY2ggbWVhbnMgZW5hYmxpbmcgdGhlIGRlcGVuZGVuY2llcywgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGVzZSBhcmUgbXkgZ3JvdW5kIHplcm8uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXNlIHN5bWJvbHMgc2VlbSBsaWtlIGdvb2QgcG9pbnRzIHRvIGNvbmNlbnRyYXRlIG9uOlxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCAtIFRoZXNlIGxpa2VseSBkZWFsIHdpdGggdGhlIGNvcmUgVFBIIGZlYXR1cmUgc2V0dXAgYW5kIGhhbmRsaW5nLlxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCAtIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVncmF0aW9uIHdpdGggRE1BLUJVRiwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgbXkgcHJpbWFyeSBhcmVhIG9mIGZvY3VzLlxuKiAgIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AsIGBwY2llX2VuYWJsZV90cGhfZXh0YCAtIFBDSWUgc2lkZSBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uLiBUaGVzZSBhcmUgaW1wb3J0YW50IGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG4qICAgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAsIGB2ZmlvX3RwaF9jb25maWdfcmVhZGAgLSBUaGVzZSByZXByZXNlbnQgdGhlIGNydWNpYWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgVFBIIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byBgdmZpb190cGhfY29uZmlnX3dyaXRlYCBmaXJzdC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDY6NDUuMTM3OTU5MDE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg2MzIzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fdHBoX2NvbmZpZ193cml0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTExNTY9c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfcmVhZChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExNzItXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYzoxMTczOnN0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExNzQtXFx0XFx0XFx0XFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM9MTI0Nz1pbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTEyNjYtXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdLnJlYWRmbiA9IHZmaW9fdHBoX2NvbmZpZ19yZWFkO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM6MTI2NzpcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTEyNjgtXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNjo0OS42MjQyODk0ODhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NzQ2NDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSdtIGhhdmluZyBpdDpcblxuKipUUEggQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqXG5cblJpZ2h0LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgIGFuZCBgdmZpb190cGhfY29uZmlnX3JlYWRgIGFyZSBpbmRlZWQgcHJlc2VudC4gR29vZCwgZ29vZC4gVGhleSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2Nrcywgc28gdGhpcyBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGJlZ2luLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgbGV2ZXJhZ2VzIG9yIHV0aWxpemVzIHRob3NlIGZ1bmN0aW9ucy4gVGhlIGtleSBhcmVhIG9mIGludGVyZXN0IGF0IHRoaXMgcG9pbnQgaXMgZ29pbmcgdG8gYmUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBpbnZva2VkIGluIHJlbGF0aW9uIHRvIHRoZSBQQ0llIFRyYW5zbGF0aW9uIFByb2Nlc3MuIExldCdzIHNlZSB3aGF0IGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AgaGFzIHRvIHNheS4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUgaW4gb3JkZXIgdG8gZmluZCB3aGVyZSB0aGUgYWN0dWFsIFBDSWUgdHJhbnNhY3Rpb25zIGFyZSBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTkzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDY6NTIuNzkxNzU3MTM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ4MTkzNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaWVfdHBoX3NldF9zdF9lbnRyaWVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL3RwaC5jPTM1ND1FWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpO1xcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtMzU2LS8qKlxcbmRyaXZlcnMvcGNpL3RwaC5jOjM1NzogKiBwY2llX3RwaF9zZXRfc3RfZW50cmllcyAtIEJhdGNoIHNldCBTdGVlcmluZyBUYWcgZW50cmllcyBpbiB0aGUgU1QgdGFibGVcXG5kcml2ZXJzL3BjaS90cGguYy0zNTgtICogQHBkZXY6IFBDSSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTM2NC0gKi9cXG5kcml2ZXJzL3BjaS90cGguYzozNjU6aW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXFxuZHJpdmVycy9wY2kvdHBoLmMtMzY2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgY291bnQsIGNvbnN0IHUxNiAqdGFncylcXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTQxNC19XFxuZHJpdmVycy9wY2kvdHBoLmM6NDE1OkVYUE9SVF9TWU1CT0wocGNpZV90cGhfc2V0X3N0X2VudHJpZXMpO1xcbmRyaXZlcnMvcGNpL3RwaC5jLTQxNi1cXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jPTQyNT1pbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuZHJpdmVycy9wY2kvdHBoLmMtNDI2LXtcXG5kcml2ZXJzL3BjaS90cGguYzo0Mjc6XFx0aW50IHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIGluZGV4LCAxLCBcXHUwMDI2dGFnKTtcXG5kcml2ZXJzL3BjaS90cGguYy00MjgtXFx0cmV0dXJuIHJldCA9PSAxID8gMCA6IHJldDtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE4NTQ9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5MjAtXFx0XFx0Y21kID0gdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZSh2ZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxOTIxOlxcdFxcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIHRwaF9zdC5zdGFydCwgaSwgdGFncyk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTkyMi1cXHRcXHR2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHZkZXYsIGNtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaD0zOD1pbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTM5LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKTtcXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo0MDppbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCxcXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC00MS1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg9NTc9c3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTkteyByZXR1cm4gLUVJTlZBTDsgfVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oOjYwOnN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTYxLVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IHN0YXJ0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNjo1Ny4xMzk5NTc0NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYyNjMyMzY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBUYXJnZXRlZCBGb2N1cyoqXG5cbkF3ZXNvbWUhIFRoYXQncyB0aGUgZmVlbGluZyB3aGVuIHlvdSdyZSBhYm91dCB0byBkaXZlIGludG8gYSBzcGVjaWZpYyBhcmVhLiBOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHBjaWVfZW5hYmxlX3RwaF9leHRgLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhpcywgYW5kIHRoYXQncyB3aGVyZSBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgZW5lcmd5LiBHaXZlbiBteSBleHBlcnRpc2UsIEkgd2lsbCBpbW1lZGlhdGVseSBiZSBsb29raW5nIGF0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludCkgZXh0ZW5zaW9ucyBpbiByZWxhdGlvbiB0byBQQ0llIGVuYWJsZW1lbnQuIEl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTA2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDY6NTkuNzY2Mjg2MjAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU0NjI3NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaWVfZW5hYmxlX3RwaF9leHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvdHBoLmM9NDUyPUVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy00NTQtLyoqXFxuZHJpdmVycy9wY2kvdHBoLmM6NDU1OiAqIHBjaWVfZW5hYmxlX3RwaF9leHQgLSBFbmFibGUgVFBIIHN1cHBvcnQgd2l0aCBzcGVjaWZpYyBTVCBtb2RlIGFuZFxcbmRyaXZlcnMvcGNpL3RwaC5jLTQ1Ni0gKiByZXF1ZXN0ZXIgdHlwZVxcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtNDY1LSAqL1xcbmRyaXZlcnMvcGNpL3RwaC5jOjQ2NjppbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSwgdTggcmVxX3R5cGUpXFxuZHJpdmVycy9wY2kvdHBoLmMtNDY3LXtcXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTUxMC19XFxuZHJpdmVycy9wY2kvdHBoLmM6NTExOkVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4dCk7XFxuZHJpdmVycy9wY2kvdHBoLmMtNTEyLVxcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtNTE3LSAqXFxuZHJpdmVycy9wY2kvdHBoLmM6NTE4OiAqIFdyYXBwZXIgZm9yIHBjaWVfZW5hYmxlX3RwaF9leHQoKSwgYXV0b21hdGljYWxseSB1c2VzIHRoZSBwcmUtY2FjaGVkXFxuZHJpdmVycy9wY2kvdHBoLmMtNTE5LSAqIHRwaF9tYXhfdHlwZSB2YWx1ZSAobmVnb3RpYXRlZCBtYXhpbXVtIHJlcXVlc3RlciB0eXBlIGJldHdlZW4gZGV2aWNlIGFuZFxcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmM9NTI0PWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXFxuZHJpdmVycy9wY2kvdHBoLmMtNTI1LXtcXG5kcml2ZXJzL3BjaS90cGguYzo1MjY6XFx0cmV0dXJuIHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcGRldi1cXHUwMDNldHBoX21heF90eXBlKTtcXG5kcml2ZXJzL3BjaS90cGguYy01MjctfVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYz0xMTczPXN0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTIxMi1cXHRpZiAocmVxID09IFBDSV9UUEhfUkVRX1RQSF9PTkxZIHx8IHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKSB7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYzoxMjEzOlxcdFxcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcmVxKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTEyMTQtXFx0XFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTQ2PXZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6NDc6aW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKTtcXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC00OC1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTczPXN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo3NDpzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLFxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTc1LVxcdFxcdFxcdFxcdCAgICAgIHU4IHJlcV90eXBlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNzowNC4xMjA5MjE2ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwMjU1MDI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUUEggU3ltYm9scyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBwYXRjaCByZWxhdGVkIHRvIFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIE15IGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHk6XG5cbiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGBcbiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYFxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YFxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgXG4qICAgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgXG4qICAgYGRtYV9idWZfZ2V0X3BjaV90cGhgXG4qICAgYHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0YFxuKiAgIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2BcbiogICBgcGNpZV9lbmFibGVfdHBoX2V4dGBcbiogICBgdmZpb190cGhfY29uZmlnX3dyaXRlYFxuKiAgIGB2ZmlvX3RwaF9jb25maWdfcmVhZGBcblxuVGhlc2Ugc2VlbSBwcmV0dHkgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBwYXRjaCBpdHNlbGYsIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGhvdC1wYXRoIGNvZGUsIHdoaWNoIGlzIGdvb2QuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBzeW1ib2xzIHRoYXQgYXJlIHJlbGV2YW50LiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgYENPTkZJR19BQ1BJYCBjb21lcyB1cCBpbiBhIGNvdXBsZSBvZiBwbGFjZXM6IGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAgYW5kIGBwY2llX3RwaF9kc21fc3VwcG9ydGVkYC4gSG93ZXZlciwgYEFDUElgIGlzIGJhc2ljYWxseSBhIGdpdmVuIG9uIHg4NiwgaXNuJ3QgaXQ/IFNvLCBJIGRvbid0IHRoaW5rIEkgcmVhbGx5IG5lZWQgdG8gZXhwbGljaXRseSBjYWxsIHRoYXQgb3V0IHVubGVzcyBpdCdzICpzcGVjaWZpYyogdG8gdGhpcyBUUEggZmVhdHVyZS4gVGhlIGZlYXR1cmUgaXRzZWxmLCB0aG91Z2gsIHRoYXQncyBgUENJRV9UUEhgLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgYFZGSU9fUENJX0RNQUJVRmAgc2V0dGluZy4gSSByZW1lbWJlciB0aGF0J3MgYSBiaXQgbW9yZSBpbnZvbHZlZC4gSXQncyBjb25maWd1cmVkIGFzIGBkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSYC4gT2theSwgc28sIGluIGFkZGl0aW9uIHRvIHRoZSBiYXNlIGBWRklPX1BDSWAsIEkgZGVmaW5pdGVseSBuZWVkIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGFuZCBtYWtlIHN1cmUgdG8gbGlzdCB0aGVtLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgRE1BX1NIQVJFRF9CVUZGRVJgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA3OjEwLjUyMzQ3NDUxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NjI4MDM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDc6MTUuMTA5NzY4NTkzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDk3Njg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkZJTy1QQ0kgQ29uZmlndXJhdGlvbiBhbmQgQXNzb2NpYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYm9vbGVhbiwgYW5kIHVzdWFsbHksIGl0J3Mgc2V0IHZpYSBvdGhlciBjb25maWd1cmF0aW9ucy4gTWFrZXMgc2Vuc2UuIFRoZW4gdGhlcmUgYXJlIHNvbWUgY29uZmlndXJhdGlvbnMgdG8gbGlzdCAtIEknbGwgam90IHRoZW0gZG93bjogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlaXIgdHlwZXMgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCBtZSBjaGVjay4gYFZGSU9fUENJYCBpcyBhIHRyaXN0YXRlLCBhbmQgdGhhdCBjaGVja3Mgb3V0LCBhcyBpcyBgVkZJT19QQ0lfQ09SRWAuIGBQQ0lFX1RQSGAgaXMgYSBib29sLiBHb29kLiBgUENJX1AyUERNQWAgaXMgYWxzbyBhIGJvb2wuIFJpZ2h0LiBBbmQgZmluYWxseSwgYERNQV9TSEFSRURfQlVGRkVSYCwgYWxzbyBhIGJvb2xlYW4uIFNvLCBhbGwgYm9vbGVhbnMgYW5kIHRyaXN0YXRlcywgY29uZmlybWVkLlxuXG5BbHJpZ2h0LCBub3cgbGV0J3MgbWFrZSBhIG5vdGUgb2YgdGhvc2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbnM6IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGBQQ0lfUDJQRE1BYCwgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAuXG5cbk5vdyBJJ2xsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBidW5jaCBvZiBmdW5jdGlvbnMgc3RhcnRpbmcgd2l0aCBgdmZpb19wY2lfLi4uYC4gVGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW5zaWRlIGB2ZmlvX3BjaV9jb3JlLmNgLiBMaXN0aW5nIGFsbCBvZiB0aG9zZSBtaWdodCBiZSB0b28gZXhoYXVzdGl2ZSwgc28gSSdsbCBmb2N1cyBvbiB0aGUgcHJpbWFyeSBJT0NUTCBoYW5kbGVycy5cblxuT2theSwgbGV0J3Mgc2VlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHRgLCBgcGNpZV90cGhfc2V0X3N0X2VudHJpZXNgLCBgcGNpZV9lbmFibGVfdHBoX2V4dGAsIGFuZCBgdmZpb190cGhfY29uZmlnX3dyaXRlYC5cblxuVGhpcyBhcHBlYXJzIHByZXR0eSBjb21wcmVoZW5zaXZlLCBjb3ZlcmluZyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBJIHRoaW5rIHRoaXMgaXMgYSBzb2xpZCByZXZpZXcuIEknbGwgZ28gYWhlYWQgYW5kIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxMjksIk91dHB1dFRva2VucyI6Mjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA3OjI0LjMxOTU0MTA2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDIyMTk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJRV9UUEhcIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9nZXRfY3B1X3N0X2V4dFwiLFxuICAgIFwicGNpZV90cGhfc2V0X3N0X2VudHJpZXNcIixcbiAgICBcInBjaWVfZW5hYmxlX3RwaF9leHRcIixcbiAgICBcInZmaW9fdHBoX2NvbmZpZ193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIFZGSU8gUENJIGFuZCBETUEtQlVGIHRvIHN1cHBvcnQgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKS4gSXQgYWRkcyBuZXcgVkZJTyBpb2N0bHMvZmVhdHVyZXMgZm9yIFRQSCBjb25maWd1cmF0aW9uIGFuZCByZXNvbHV0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaFwiLFxuICAgIFwiZG1hX2J1Zl9nZXRfcGNpX3RwaFwiLFxuICAgIFwicGNpZV90cGhfZ2V0X2NwdV9zdF9leHRcIixcbiAgICBcInBjaWVfdHBoX3NldF9zdF9lbnRyaWVzXCIsXG4gICAgXCJwY2llX2VuYWJsZV90cGhfZXh0XCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBWRklPIFBDSSBhbmQgRE1BLUJVRiB0byBzdXBwb3J0IFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIEl0IGFkZHMgbmV3IFZGSU8gaW9jdGxzL2ZlYXR1cmVzIGZvciBUUEggY29uZmlndXJhdGlvbiBhbmQgcmVzb2x1dGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcljd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 15:43:18 +0000 UTC FinishedAt: 2026-07-14 16:07:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "DMA_SHARED_BUFFER" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "3b029c035b34bbc693405ddf759f0e9b920c27f1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PCIE_TPH", "VFIO_PCI", "PCI_P2PDMA", "DMA_SHARED_BUFFER" ], "series_id": "111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_tph", "vfio_pci_core_feature_tph_resolve", "vfio_pci_core_feature_tph_st", "vfio_pci_core_feature_dma_buf_tph", "vfio_pci_dma_buf_get_pci_tph", "dma_buf_get_pci_tph", "pcie_tph_get_cpu_st_ext", "pcie_tph_set_st_entries", "pcie_enable_tph_ext", "vfio_tph_config_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZ2V0X2NwdV9zdF9leHQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfc2V0X3N0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7cGNpZV9lbmFibGVfdHBoX2V4dCYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gc3VwcG9ydCBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBJdCBhZGRzIG5ldyBWRklPIGlvY3Rscy9mZWF0dXJlcyBmb3IgVFBIIGNvbmZpZ3VyYXRpb24gYW5kIHJlc29sdXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYjAwYzYyNDc3MWZjMDc2NGY3NzcxZjcwNWMxNTkwZjdmNjQ0Yzc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTY6MDU6NDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbmluZGV4IGQ1MDRjNjM2ZGMyOTRlLi5lODMxNGVkMjQwZDMzNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmNcbkBAIC05MzksNiAmIzQzOzkzOSw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gICogICAgIC0gZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KClcbiAgKiAgICAgLSBkbWFfYnVmX3ZtYXAoKVxuICAqICAgICAtIGRtYV9idWZfdnVubWFwKClcbiYjNDM7ICogICAgIC0gZG1hX2J1Zl9nZXRfcGNpX3RwaCgpXG4gICpcbiAgKiAyLiBJbXBvcnRlcnMgbXVzdCBub3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZVxuICAqICAgIGZ1bmN0aW9uczpcbkBAIC05NzksNiAmIzQzOzk4MCw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudW5tYXBfZG1hX2J1ZigpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudm1hcCgpXG4gICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMudnVubWFwKClcbiYjNDM7ICogICAgIC0gXHUwMDI2ZG1hX2J1Zl9vcHMuZ2V0X3BjaV90cGgoKVxuICAqXG4gICogMy4gRXhwb3J0ZXJzIG11c3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZVxuICAqICAgIGZ1bmN0aW9uczpcbkBAIC0xMTQ0LDYgJiM0MzsxMTQ2LDM2IEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfdW5waW4sIFwmIzM0O0RNQV9CVUZcJiMzNDspO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCAtIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBtZXRhZGF0YVxuJiM0MzsgKiBAZG1hYnVmOiBETUEgYnVmZmVyIHRvIHF1ZXJ5XG4mIzQzOyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbiYjNDM7ICogQHN0ZWVyaW5nX3RhZzogcmV0dXJucyB0aGUgcmF3IHN0ZWVyaW5nIHRhZyBmb3IgdGhlIHJlcXVlc3RlZCBuYW1lc3BhY2VcbiYjNDM7ICogQHBoOiByZXR1cm5zIHRoZSBUUEggcHJvY2Vzc2luZyBoaW50XG4mIzQzOyAqXG4mIzQzOyAqIFdyYXBwZXIgZm9yIHRoZSBvcHRpb25hbCBcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCBjYWxsYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAtRU9QTk9UU1VQUCBpZiB0aGVcbiYjNDM7ICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZVxuJiM0MzsgKiByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcmV0dXJuZWQgc3RlZXJpbmcgdGFnIGFuZCBwcm9jZXNzaW5nIGhpbnQgYXJlIG9ubHkgdmFsaWQgdW50aWwgdGhlXG4mIzQzOyAqIGV4cG9ydGVyIGludmFsaWRhdGVzIHRoZSBjdXJyZW50IG1hcHBpbmcgKHNpZ25hbGxlZCB0byB0aGUgaW1wb3J0ZXIgdmlhXG4mIzQzOyAqIFx1MDAyNmRtYV9idWZfYXR0YWNoX29wcy5tb3ZlX25vdGlmeSkuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3XG4mIzQzOyAqIG1hcHBpbmcgaXMgZXN0YWJsaXNoZWQgZm9sbG93aW5nIGludmFsaWRhdGlvbi5cbiYjNDM7ICovXG4mIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpXG4mIzQzO3tcbiYjNDM7XHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1xuJiM0MztcdGlmICghZG1hYnVmLVx1MDAzZW9wcy1cdTAwM2VnZXRfcGNpX3RwaClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgc3RlZXJpbmdfdGFnLCBwaCk7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9nZXRfcGNpX3RwaCwgXCYjMzQ7RE1BX0JVRlwmIzM0Oyk7XG4mIzQzO1xuIC8qKlxuICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJsZSBvZiB0aGUgYXR0YWNobWVudDtcbiAgKiBtYXBwZWQgaW50byBfZGV2aWNlXyBhZGRyZXNzIHNwYWNlLiBJcyBhIHdyYXBwZXIgZm9yIG1hcF9kbWFfYnVmKCkgb2YgdGhlXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xuaW5kZXggNjU1ZmZkNjBlNjJmNmEuLmU2YTg1MGFiMmIwMzdlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvdHBoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5AQCAtMTY1LDE0ICYjNDM7MTY1LDYyIEBAIHN0YXRpYyB1OCBnZXRfc3RfbW9kZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gICovXG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4ge1xuLVx0dTMyIHJlZztcbiYjNDM7XHR1MzIgcmVnID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4mIzQzO1x0XHRyZXR1cm4gUENJX1RQSF9MT0NfTk9ORTtcbiBcbiBcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4gXG4tXHRyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpO1xuJiM0MztcdHJldHVybiByZWcgXHUwMDI2IFBDSV9UUEhfQ0FQX0xPQ19NQVNLO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MpO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSAtIFJldHVybiB0aGUgZGV2aWNlJiMzOTtzIFRQSCBDb21wbGV0ZXIgc3VwcG9ydFxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeVxuJiM0MzsgKlxuJiM0MzsgKiBSZWFkcyB0aGUgXCYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWRcJiMzNDsgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxuJiM0MzsgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cbiYjNDM7ICogXCYjMzQ7bm90IHN1cHBvcnRlZFwmIzM0OyBzbyBjYWxsZXJzIG9ubHkgbmVlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHRocmVlXG4mIzQzOyAqIGRlZmluZWQgdmFsdWVzLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IG9uZSBvZiAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUsXG4mIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvclxuJiM0MzsgKiAgICAgICAgICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSC5cbiYjNDM7ICovXG4mIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIHJlZztcbiYjNDM7XG4mIzQzO1x0aWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgXHUwMDI2cmVnKSlcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbiYjNDM7XHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpXG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpKSB7XG4mIzQzO1x0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk6XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZO1xuJiM0MztcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEg6XG4mIzQzO1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEg7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XG4mIzQzO1xuIC8qXG4gICogUmV0dXJuIHRoZSBzaXplIG9mIFNUIHRhYmxlLiBJZiBTVCB0YWJsZSBpcyBub3QgaW4gVFBIIFJlcXVlc3RlciBFeHRlbmRlZFxuICAqIENhcGFiaWxpdHkgc3BhY2UsIHJldHVybiAwLiBPdGhlcndpc2UgcmV0dXJuIHRoZSBTVCBUYWJsZSBTaXplICYjNDM7IDEuXG5AQCAtMTg0LDkgJiM0MzsyMzIsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXG4gXHQvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqL1xuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiBkZWZpbmVkIGluIHBjaV9yZWdzLmggKi9cbi1cdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XG4gXHRpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMjMxLDIwICYjNDM7Mjc2LDIyIEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gfVxuIFxuIC8qKlxuLSAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWRcbi0gKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG4mIzQzOyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeVxuJiM0MzsgKiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBDUFUsIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHR5cGUgc2VsZWN0aW9uXG4gICogQHBkZXY6IFBDSSBkZXZpY2VcbiAgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4mIzQzOyAqIEByZXFfdHlwZTogVFBIIHJlcXVlc3RlciB0eXBlIHRvIHNlbGVjdCBTVCBuYW1lc3BhY2VcbiAgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuICAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZFxuICAqXG4tICogUmV0dXJuIHRoZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhXG4tICogc3BlY2lmaWMgQ1BVIGFzIGluZGljYXRlZCBieSBjcHUuXG4mIzQzOyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLFxuJiM0MzsgKiB1c2luZyB0aGUgc3BlY2lmaWVkIFRQSCByZXF1ZXN0ZXIgdHlwZSB0byBzZWxlY3QgdGhlIGNvcnJlY3QgU1QgbmFtZXNwYWNlLlxuJiM0MzsgKiBWYWxpZGF0ZXMgcmVxdWVzdGVyIHR5cGUgYWdhaW5zdCBoYXJkd2FyZSBuZWdvdGlhdGVkIGNhcGFiaWxpdHkgbGltaXRzLlxuICAqXG4gICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuICAqL1xuLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbi1cdFx0XHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiYjNDM7aW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiYjNDM7XHRcdFx0ICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcbiB7XG4gI2lmZGVmIENPTkZJR19BQ1BJXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcnA7XG5AQCAtMjUzLDYgJiM0MzszMDAsMTAgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0dTMyIGNwdV91aWQ7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHxcbiYjNDM7XHRcdHJlcV90eXBlIFx1MDAzZSBwZGV2LVx1MDAzZXRwaF9tYXhfdHlwZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiBcdHJldCA9IGFjcGlfZ2V0X2NwdV91aWQoY3B1LCBcdTAwMjZjcHVfdWlkKTtcbiBcdGlmIChyZXQgIT0gMClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0yNjgsMzUgJiM0MzszMTksNTQgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdCp0YWcgPSB0cGhfZXh0cmFjdF90YWcobWVtX3R5cGUsIHBkZXYtXHUwMDNldHBoX3JlcV90eXBlLCBcdTAwMjZpbmZvKTtcbiYjNDM7XHQqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCByZXFfdHlwZSwgXHUwMDI2aW5mbyk7XG4gXG4tXHRwY2lfZGJnKHBkZXYsIFwmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcblwmIzM0OyxcbiYjNDM7XHRwY2lfZGJnKHBkZXYsIFwmIzM0O2dldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXG5cJiMzNDssXG4gXHRcdChtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gXCYjMzQ7dm9sYXRpbGVcJiMzNDsgOiBcJiMzNDtwZXJzaXN0ZW50XCYjMzQ7LFxuLVx0XHRjcHUsICp0YWcpO1xuJiM0MztcdFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XG4gXG4gXHRyZXR1cm4gMDtcbiAjZWxzZVxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gI2VuZGlmXG4gfVxuLUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdF9leHQpO1xuIFxuIC8qKlxuLSAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnlcbiYjNDM7ICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZFxuJiM0MzsgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG4gICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4XG4tICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHdyaXR0ZW5cbiYjNDM7ICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxuJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZFxuJiM0MzsgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWRcbiAgKlxuLSAqIEZpZ3VyZSBvdXQgdGhlIHByb3BlciBsb2NhdGlvbiBvZiBTVCB0YWJsZSwgZWl0aGVyIGluIHRoZSBNU0ktWCB0YWJsZSBvclxuLSAqIGluIHRoZSBUUEggRXh0ZW5kZWQgQ2FwYWJpbGl0eSBzcGFjZSwgYW5kIHdyaXRlIHRoZSBTdGVlcmluZyBUYWcgaW50b1xuLSAqIHRoZSBTVCBlbnRyeSBwb2ludGVkIGJ5IGluZGV4LlxuJiM0MzsgKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSxcbiYjNDM7ICogdXNpbmcgdGhlIGRlZmF1bHQgbmVnb3RpYXRlZCBUUEggcmVxdWVzdGVyIHR5cGUuXG4gICpcbiAgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4gICovXG4taW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHRcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIG1lbV90eXBlLCBwZGV2LVx1MDAzZXRwaF9tYXhfdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgY3B1LCB0YWcpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfc2V0X3N0X2VudHJpZXMgLSBCYXRjaCBzZXQgU3RlZXJpbmcgVGFnIGVudHJpZXMgaW4gdGhlIFNUIHRhYmxlXG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4mIzQzOyAqIEBzdGFydDogc3RhcnRpbmcgU1QgdGFibGUgaW5kZXhcbiYjNDM7ICogQGNvdW50OiBudW1iZXIgb2YgY29udGlndW91cyBlbnRyaWVzIHRvIHdyaXRlXG4mIzQzOyAqIEB0YWdzOiBhcnJheSBvZiB1MTYgdGFnIHZhbHVlcyB0byBwcm9ncmFtXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGVudHJpZXMsIG9yIG5lZ2F0aXZlIGVycm5vXG4mIzQzOyAqL1xuJiM0MztpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCxcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxuIHtcbi1cdHUzMiBsb2M7XG4gXHRpbnQgZXJyID0gMDtcbiYjNDM7XHR1MzIgbG9jLCBpO1xuIFxuIFx0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTMwNiw3ICYjNDM7Mzc2LDcgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuIFxuIFx0LyogTm8gbmVlZCB0byB3cml0ZSB0YWcgaWYgZGV2aWNlIGlzIGluIFwmIzM0O05vIFNUIE1vZGVcJiMzNDsgKi9cbiBcdGlmIChwZGV2LVx1MDAzZXRwaF9tb2RlID09IFBDSV9UUEhfU1RfTlNfTU9ERSlcbi1cdFx0cmV0dXJuIDA7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4gXG4gXHQvKlxuIFx0ICogRGlzYWJsZSBUUEggYmVmb3JlIHVwZGF0aW5nIFNUIHRvIGF2b2lkIHBvdGVudGlhbCBpbnN0YWJpbGl0eSBhc1xuQEAgLTMxNSwzMSAmIzQzOzM4NSw0NyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIFBDSV9UUEhfUkVRX0RJU0FCTEUpO1xuIFxuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbi1cbi1cdHN3aXRjaCAobG9jKSB7XG4tXHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XG4tXHRcdGVyciA9IHBjaV9tc2l4X3dyaXRlX3RwaF90YWcocGRldiwgaW5kZXgsIHRhZyk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBQQ0lfVFBIX0xPQ19DQVA6XG4tXHRcdGVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBpbmRleCwgdGFnKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0aWYgKGVycikge1xuLVx0XHRwY2llX2Rpc2FibGVfdHBoKHBkZXYpO1xuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dpdGNoIChsb2MpIHtcbiYjNDM7XHRcdGNhc2UgUENJX1RQSF9MT0NfTVNJWDpcbiYjNDM7XHRcdFx0ZXJyID0gcGNpX21zaXhfd3JpdGVfdHBoX3RhZyhwZGV2LCBzdGFydCAmIzQzOyBpLCB0YWdzW2ldKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFBDSV9UUEhfTE9DX0NBUDpcbiYjNDM7XHRcdFx0ZXJyID0gd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHBkZXYsIHN0YXJ0ICYjNDM7IGksIHRhZ3NbaV0pO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGVyciA9IC1FSU5WQUw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAoZXJyICE9IDApIHtcbiYjNDM7XHRcdFx0cGNpX2VycihwZGV2LCBcJiMzNDtmYWlsZWQgdG8gc2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSV1LCB0YWdzPSV1LCByZXQ9JWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0KGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSA/IFwmIzM0O01TSS1YXCYjMzQ7IDogXCYjMzQ7U1RcJiMzNDssXG4mIzQzO1x0XHRcdFx0c3RhcnQgJiM0MzsgaSwgdGFnc1tpXSwgZXJyKTtcbiYjNDM7XHRcdFx0cGNpZV9kaXNhYmxlX3RwaChwZGV2KTtcbiYjNDM7XHRcdFx0cmV0dXJuIGkgXHUwMDNlIDAgPyBpIDogZXJyO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0c2V0X2N0cmxfcmVnX3JlcV9lbihwZGV2LCBwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSk7XG4gXG4tXHRwY2lfZGJnKHBkZXYsIFwmIzM0O3NldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBpbmRleD0lZCwgdGFnPSUjMDR4XFxuXCYjMzQ7LFxuLVx0XHQobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gXCYjMzQ7TVNJLVhcJiMzNDsgOiBcJiMzNDtTVFwmIzM0OywgaW5kZXgsIHRhZyk7XG4mIzQzO1x0cGNpX2RiZyhwZGV2LCBcJiMzNDtiYXRjaCBzZXQgc3RlZXJpbmcgdGFnOiAlcyB0YWJsZSwgc3RhcnQ9JXUsIGNvdW50PSV1IHN1Y2Nlc3MhXFxuXCYjMzQ7LFxuJiM0MztcdFx0KGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSA/IFwmIzM0O01TSS1YXCYjMzQ7IDogXCYjMzQ7U1RcJiMzNDssIHN0YXJ0LCBjb3VudCk7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gY291bnQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9zZXRfc3RfZW50cmllcyk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4XG4mIzQzOyAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSB3cml0dGVuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhwZGV2LCBpbmRleCwgMSwgXHUwMDI2dGFnKTtcbiYjNDM7XHRyZXR1cm4gcmV0ID09IDEgPyAwIDogcmV0O1xuIH1cbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX3NldF9zdF9lbnRyeSk7XG4gXG5AQCAtMzY2LDI2ICYjNDM7NDUyLDIxIEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xuIFxuIC8qKlxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuJiM0MzsgKiBwY2llX2VuYWJsZV90cGhfZXh0IC0gRW5hYmxlIFRQSCBzdXBwb3J0IHdpdGggc3BlY2lmaWMgU1QgbW9kZSBhbmRcbiYjNDM7ICogcmVxdWVzdGVyIHR5cGVcbiAgKiBAcGRldjogUENJIGRldmljZVxuLSAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZTpcbi0gKlxuLSAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcbi0gKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGVcbi0gKiAgIC0gUENJX1RQSF9TVF9EU19NT0RFOiBEZXZpY2UgU3BlY2lmaWMgTW9kZVxuJiM0MzsgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGU6IFBDSV9UUEhfU1RfKE5TX01PREUgLyBJVl9NT0RFIC8gRFNfTU9ERSlcbiYjNDM7ICogQHJlcV90eXBlOiBSZXF1ZXN0ZXIgdHlwZSB0byBlbmFibGU6IFBDSV9UUEhfUkVRXyhUUEhfT05MWSAvIEVYVF9UUEgpXG4gICpcbi0gKiBDaGVjayB3aGV0aGVyIHRoZSBtb2RlIGlzIGFjdHVhbGx5IHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGJlZm9yZSBlbmFibGluZ1xuLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXG4tICogY2FwYWJpbGl0eSBhbmQgdGhlIFJvb3QgUG9ydCYjMzk7cyBjb21wbGV0ZXIgY2FwYWJpbGl0eS5cbiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBhbmQgcmVxdWVzdGVyIHR5cGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZVxuJiM0MzsgKiBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LlxuICAqXG4gICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuICAqL1xuLWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSwgdTggcmVxX3R5cGUpXG4ge1xuIFx0dTMyIHJlZztcbiBcdHU4IGRldl9tb2Rlcztcbi1cdHU4IHJwX3JlcV90eXBlO1xuIFxuIFx0LyogSG9ub3IgXCYjMzQ7bm90cGhcJiMzNDsga2VybmVsIHBhcmFtZXRlciAqL1xuIFx0aWYgKHBjaV90cGhfZGlzYWJsZWQpXG5AQCAtMzk3LDYgJiM0Mzs0NzgsMTQgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXHRpZiAocGRldi1cdTAwM2V0cGhfZW5hYmxlZClcbiBcdFx0cmV0dXJuIC1FQlVTWTtcbiBcbiYjNDM7XHRpZiAocGRldi1cdTAwM2V0cGhfbWF4X3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgVFBIIHJlcXVlc3RlciB0eXBlIGNvbXBhdGliaWxpdHkgKi9cbiYjNDM7XHRpZiAocmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSB8fCByZXFfdHlwZSA9PSAyIHx8XG4mIzQzO1x0XHRyZXFfdHlwZSBcdTAwM2UgcGRldi1cdTAwM2V0cGhfbWF4X3R5cGUpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgU1QgbW9kZSBjb21wYXRpYmlsaXR5ICovXG4gXHRtb2RlIFx1MDAyNj0gUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0s7XG4gXHRkZXZfbW9kZXMgPSBnZXRfc3RfbW9kZXMocGRldik7XG5AQCAtNDA1LDIzICYjNDM7NDk0LDcgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4gXG4gXHRwZGV2LVx1MDAzZXRwaF9tb2RlID0gbW9kZTtcbiBcbi1cdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4tXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCBcdTAwMjZyZWcpO1xuLVx0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4tXHRlbHNlXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XG4tXG4tXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xuLVx0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xuLVx0XHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcbi1cbi1cdFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IG1pbihwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuLVx0fVxuLVxuLVx0aWYgKHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gcmVxX3R5cGU7XG4gXG4gXHQvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi9cbiBcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgJiM0MzsgUENJX1RQSF9DVFJMLCBcdTAwMjZyZWcpO1xuQEAgLTQzNSw2ICYjNDM7NTA4LDIzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHQpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuJiM0MzsgKiBAcGRldjogUENJIGRldmljZVxuJiM0MzsgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGU6IFBDSV9UUEhfU1RfKE5TX01PREUgLyBJVl9NT0RFIC8gRFNfTU9ERSlcbiYjNDM7ICpcbiYjNDM7ICogV3JhcHBlciBmb3IgcGNpZV9lbmFibGVfdHBoX2V4dCgpLCBhdXRvbWF0aWNhbGx5IHVzZXMgdGhlIHByZS1jYWNoZWRcbiYjNDM7ICogdHBoX21heF90eXBlIHZhbHVlIChuZWdvdGlhdGVkIG1heGltdW0gcmVxdWVzdGVyIHR5cGUgYmV0d2VlbiBkZXZpY2UgYW5kXG4mIzQzOyAqIHJvb3QgcG9ydCkuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbiYjNDM7ICovXG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCBwZGV2LVx1MDAzZXRwaF9tYXhfdHlwZSk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaCk7XG4gXG4gdm9pZCBwY2lfcmVzdG9yZV90cGhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtNTA4LDE0ICYjNDM7NTk4LDYwIEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKVxuIFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiYjNDM7XHR1OCB0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlO1xuIFx0aW50IG51bV9lbnRyaWVzO1xuIFx0dTMyIHNhdmVfc2l6ZTtcbiYjNDM7XHR1MzIgcmVnID0gMDtcbiBcbiBcdHBkZXYtXHUwMDNldHBoX2NhcCA9IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCk7XG4gXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4mIzQzO1x0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbiYjNDM7XHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4mIzQzO1x0XHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuJiM0MztcbiYjNDM7XHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xuJiM0MztcdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbiYjNDM7XHRcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xuJiM0MztcdFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xuJiM0MztcdFx0dHBoX3JlcV90eXBlID0gbWluKHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cGRldi1cdTAwM2V0cGhfbWF4X3R5cGUgPSB0cGhfcmVxX3R5cGU7XG4mIzQzO1xuIFx0bnVtX2VudHJpZXMgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTtcbiBcdHNhdmVfc2l6ZSA9IHNpemVvZih1MzIpICYjNDM7IG51bV9lbnRyaWVzICogc2l6ZW9mKHUxNik7XG4gXHRwY2lfYWRkX2V4dF9jYXBfc2F2ZV9idWZmZXIocGRldiwgUENJX0VYVF9DQVBfSURfVFBILCBzYXZlX3NpemUpO1xuIH1cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX3RwaF9kc21fc3VwcG9ydGVkIC0gQ2hlY2sgaWYgcm9vdCBwb3J0IGV4cG9zZXMgVFBIIFNUIF9EU01cbiYjNDM7ICogQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiB0cnVlIGlmIHJvb3QgcG9ydCBvZiBAcGRldiBwcm92aWRlcyBUUEggU1QgRFNNIGZ1bmN0aW9uLFxuJiM0MzsgKiBmYWxzZSBvdGhlcndpc2UgKEFDUEkgZGlzYWJsZWQgb3IgRFNNIG1pc3NpbmcpLlxuJiM0MzsgKi9cbiYjNDM7Ym9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzOyNpZmRlZiBDT05GSUdfQUNQSVxuJiM0MztcdHN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XG4mIzQzO1x0YWNwaV9oYW5kbGUgaGFuZGxlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJwIHx8ICFycC1cdTAwM2VidXMgfHwgIXJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGhhbmRsZSA9IEFDUElfSEFORExFKHJwLVx1MDAzZWJ1cy1cdTAwM2VicmlkZ2UpO1xuJiM0MztcdGlmICghaGFuZGxlKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWNwaV9jaGVja19kc20oaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbiYjNDM7XHRcdFx0ICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpO1xuJiM0MzsjZWxzZVxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5pbmRleCA4MzAzNjlmZjg3OGRiZS4uYzQwN2MyMTdiNjQ5ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuQEAgLTYwLDYgJiM0Mzs2MCwyNiBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0O1xuIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTtcbiBNT0RVTEVfUEFSTV9ERVNDKGRpc2FibGVfZGVueWxpc3QsIFwmIzM0O0Rpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy5cJiMzNDspO1xuIFxuJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRwaF9wb2xpY3k7XG4mIzQzO3N0YXRpYyBpbnQgdHBoX3BvbGljeV9zZXQoY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwYXJhbV9zZXRfdWludF9taW5tYXgodmFsLCBrcCwgVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCxcbiYjNDM7XHRcdFx0XHQgICAgIFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QpO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB0cGhfcGFyYW1fb3BzID0ge1xuJiM0MztcdC5zZXQgPSB0cGhfcG9saWN5X3NldCxcbiYjNDM7XHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXG4mIzQzO307XG4mIzQzO21vZHVsZV9wYXJhbV9jYih0cGhfcG9saWN5LCBcdTAwMjZ0cGhfcGFyYW1fb3BzLCBcdTAwMjZ0cGhfcG9saWN5LCAwNjQ0KTtcbiYjNDM7TU9EVUxFX1BBUk1fREVTQyh0cGhfcG9saWN5LFxuJiM0MztcdFwmIzM0O0dsb2JhbCBUUEggcG9saWN5IGxldmVsICgwPWRlZmF1bHQgTm8tU1QpOlxcblwmIzM0O1xuJiM0MztcdFwmIzM0OzAgPSBOby1TVCBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbW1pbmcgdW5hdmFpbGFibGVcXG5cJiMzNDtcbiYjNDM7XHRcJiMzNDsxID0gQWRkIElWIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcblwmIzM0O1xuJiM0MztcdFwmIzM0OyAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xcblwmIzM0O1xuJiM0MztcdFwmIzM0OzIgPSBBZGQgRFMgbW9kZTogUkVTT0xWRSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlLCBTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xcblwmIzM0O1xuJiM0MztcdFwmIzM0OyAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xcblwmIzM0Oyk7XG4mIzQzO1xuIHN0YXRpYyBib29sIHZmaW9fcGNpX2Rldl9pbl9kZW55bGlzdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzd2l0Y2ggKHBkZXYtXHUwMDNldmVuZG9yKSB7XG5AQCAtMTQyLDYgJiM0MzsxNjIsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KVxuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfVkdBXG4gXHR2ZGV2LVx1MDAzZWRpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7XG4gI2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7XHR2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPSB0cGhfcG9saWN5O1xuJiM0MzsjZW5kaWZcbiBcbiBcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uOTdkYWQ2ZGI2OWUzOWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdmZpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG5AQCAtMTA4NSw2ICYjNDM7MTA4NiwxNDYgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKVxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKVxuJiM0Mzt7XG4mIzQzO1x0dTggY2FwO1xuJiM0MztcdGludCBiYXNlID0gKHBvcyBcdTAwM2U9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOlxuJiM0MztcdFx0XHRcdFx0XHQgUENJX1NURF9IRUFERVJfU0laRU9GO1xuJiM0MztcdGNhcCA9IHZkZXYtXHUwMDNlcGNpX2NvbmZpZ19tYXBbcG9zXTtcbiYjNDM7XG4mIzQzO1x0aWYgKGNhcCA9PSBQQ0lfQ0FQX0lEX0JBU0lDKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qIFhYWCBDYW4gd2UgaGF2ZSB0byBhYnV0dGluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZT8gKi9cbiYjNDM7XHR3aGlsZSAocG9zIC0gMSBcdTAwM2U9IGJhc2UgXHUwMDI2XHUwMDI2IHZkZXYtXHUwMDNlcGNpX2NvbmZpZ19tYXBbcG9zIC0gMV0gPT0gY2FwKVxuJiM0MztcdFx0cG9zLS07XG4mIzQzO1xuJiM0MztcdHJldHVybiBwb3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZmaW9fdXBkYXRlX3RwaF92Y29uZmlnX2J5dGVzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiYjNDM7XHRcdFx0XHRcdCAgaW50IHBvcylcbiYjNDM7e1xuJiM0MztcdF9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgdmFsID0gbGUzMl90b19jcHUoKnZwdHIpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikpIHtcbiYjNDM7XHRcdC8qIFJlbW92ZSBleHRlbmRlZCBUUEggaWYgcm9vdC1wb3J0IGRvZXNuJiMzOTt0IHN1cHBvcnQgKi9cbiYjNDM7XHRcdHZhbCBcdTAwMjY9IH5QQ0lfVFBIX0NBUF9FWFRfVFBIO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKSB7XG4mIzQzO1x0XHQvKiBSZXBvcnQgb25seSBOby1TVCBtb2RlIHN1cHBvcnRlZCAqL1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHxcbiYjNDM7XHRcdFx0IFBDSV9UUEhfQ0FQX0xPQ19NQVNLIHwgUENJX1RQSF9DQVBfU1RfTUFTSyk7XG4mIzQzO1x0fSBlbHNlIGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xuJiM0MztcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgYW5kIElWIG1vZGVzIHN1cHBvcnRlZCAqL1xuJiM0MztcdFx0dmFsIFx1MDAyNj0gflBDSV9UUEhfQ0FQX1NUX0RTO1xuJiM0MztcdFx0LyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb2VzbiYjMzk7dCBzdXBwb3J0IElWIG1vZGUgKi9cbiYjNDM7XHRcdGlmICghKHZhbCBcdTAwMjYgUENJX1RQSF9DQVBfU1RfSVYpKVxuJiM0MztcdFx0XHR2YWwgXHUwMDI2PSB+KFBDSV9UUEhfQ0FQX0xPQ19NQVNLIHwgUENJX1RQSF9DQVBfU1RfTUFTSyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XG4mIzQzO1xuJiM0MztcdC8qIEJhY2t1cCB1cGRhdGVkIGNhcGFiaWxpdHkgcmVnaXN0ZXIgdmFsdWUgKi9cbiYjNDM7XHR2ZGV2LVx1MDAzZXRwaF9jYXBfdmlydCA9IHZhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovXG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2Ugb25seSB2aXJ0dWFsaXplIHRoZSBUUEggaGVhZGVyIChleGNsdWRpbmcgdGhlIFNUIHRhYmxlKS5cbiYjNDM7XHQgKiBGb3IgdGhlIFNUIHRhYmxlIChpZiBhbnkpLCB0aGUgcmVhZCBvcGVyYXRpb24gcmV0dXJucyAwIGJ5XG4mIzQzO1x0ICogZGVmYXVsdCwgYW5kIHRoZSB3cml0ZSBvcGVyYXRpb24gaXMgZGlzY2FyZGVkIGJ5IGRlZmF1bHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGFsbG9jX3Blcm1fYml0cyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcbiYjNDM7XHRwX3NldGQocGVybSwgUENJX1RQSF9DQVAsIEFMTF9WSVJULCBOT19XUklURSk7XG4mIzQzO1xuJiM0MztcdHBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NUUkwsIEFMTF9WSVJULFxuJiM0MztcdCAgICAgICBQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSyB8IFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiYjNDM7XHRcdFx0XHRpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4mIzQzO1x0XHRcdFx0aW50IG9mZnNldCwgX19sZTMyICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpZiAob2Zmc2V0IFx1MDAzZT0gUENJX1RQSF9CQVNFX1NJWkVPRikge1xuJiM0MztcdFx0KnZhbCA9IGNwdV90b19sZTMyKDApO1xuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9mZnNldCBcdTAwM2U9IFBDSV9UUEhfQ0FQIFx1MDAyNlx1MDAyNiAhdmRldi1cdTAwM2V0cGhfb3B0X2luKSB7XG4mIzQzO1x0XHQqdmFsID0gY3B1X3RvX2xlMzIoMCk7XG4mIzQzO1x0XHRyZXR1cm4gY291bnQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuJiM0MztcdFx0XHRcdCBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4mIzQzO1x0XHRcdFx0IGludCBvZmZzZXQsIF9fbGUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1MTYgc3RhcnQgPSB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHZkZXYsIHBvcyk7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xuJiM0MztcdHU4IG1vZGUsIHJlcSwgb3JnX3JlcTtcbiYjNDM7XHRfX2xlMzIgb3JnX3ZhbCA9IDA7XG4mIzQzO1x0dTE2IGNtZDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbiB8fCBvZmZzZXQgXHUwMDNlPSBQQ0lfVFBIX0JBU0VfU0laRU9GKVxuJiM0MztcdFx0cmV0dXJuIGNvdW50O1xuJiM0MztcbiYjNDM7XHRjbWQgPSB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHZkZXYpO1xuJiM0MztcbiYjNDM7XHRvcmdfY3RybCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3N0YXJ0ICYjNDM7IFBDSV9UUEhfQ1RSTF0pO1xuJiM0MztcdHZmaW9fZGVmYXVsdF9jb25maWdfcmVhZCh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIFx1MDAyNm9yZ192YWwpO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcbiYjNDM7XHRpZiAocmV0ICE9IGNvdW50KVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdG5ld19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcdTAwMjZ2ZGV2LVx1MDAzZXZjb25maWdbc3RhcnQgJiM0MzsgUENJX1RQSF9DVFJMXSk7XG4mIzQzO1x0aWYgKG5ld19jdHJsID09IG9yZ19jdHJsKVxuJiM0MztcdFx0Z290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCBjaGFuZ2VzIGluIFRQSF9DVFJMLiAqL1xuJiM0MztcbiYjNDM7XHRjYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NBUF0pO1xuJiM0MztcdG1vZGUgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0ssIG5ld19jdHJsKTtcbiYjNDM7XHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7XG4mIzQzO1x0aWYgKG1vZGUgXHUwMDNlIFBDSV9UUEhfU1RfRFNfTU9ERSB8fCAhKGNhcCBcdTAwMjYgKDF1IFx1MDAzY1x1MDAzYyBtb2RlKSkgfHwgcmVxID09IDB4MiB8fFxuJiM0MztcdFx0KHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIIFx1MDAyNlx1MDAyNiAhKGNhcCBcdTAwMjYgUENJX1RQSF9DQVBfRVhUX1RQSCkpKVxuJiM0MztcdFx0Z290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi9cbiYjNDM7XG4mIzQzO1x0b3JnX3JlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIG9yZ19jdHJsKTtcbiYjNDM7XHRpZiAocmVxID09IG9yZ19yZXEpXG4mIzQzO1x0XHRnb3RvIHJlc3RvcmU7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovXG4mIzQzO1xuJiM0MztcdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcbiYjNDM7XHRcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcmVxKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7XG4mIzQzO1x0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO3Jlc3RvcmU6XG4mIzQzO1x0dmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIG9yZ192YWwpO1xuJiM0MztvdXQ6XG4mIzQzO1x0dmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZSh2ZGV2LCBjbWQpO1xuJiM0MztcdHJldHVybiBjb3VudDtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEluaXRpYWxpemUgdGhlIHNoYXJlZCBwZXJtaXNzaW9uIHRhYmxlc1xuICAqL1xuQEAgLTExMDAsNiAmIzQzOzEyNDEsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZClcbiBcbiBcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XG4gXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xuJiM0MztcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4gfVxuIFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcbkBAIC0xMTIwLDYgJiM0MzsxMjYyLDkgQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0LyogRXh0ZW5kZWQgY2FwYWJpbGl0aWVzICovXG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9lcnJfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbiYjNDM7XHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pO1xuJiM0MztcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS5yZWFkZm4gPSB2ZmlvX3RwaF9jb25maWdfcmVhZDtcbiYjNDM7XHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVk5EUl0ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRFZTRUNdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7XG4gXG5AQCAtMTEyOSwyMyAmIzQzOzEyNzQsNiBAQCBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi1zdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKVxuLXtcbi1cdHU4IGNhcDtcbi1cdGludCBiYXNlID0gKHBvcyBcdTAwM2U9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOlxuLVx0XHRcdFx0XHRcdCBQQ0lfU1REX0hFQURFUl9TSVpFT0Y7XG4tXHRjYXAgPSB2ZGV2LVx1MDAzZXBjaV9jb25maWdfbWFwW3Bvc107XG4tXG4tXHRpZiAoY2FwID09IFBDSV9DQVBfSURfQkFTSUMpXG4tXHRcdHJldHVybiAwO1xuLVxuLVx0LyogWFhYIENhbiB3ZSBoYXZlIHRvIGFidXR0aW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlPyAqL1xuLVx0d2hpbGUgKHBvcyAtIDEgXHUwMDNlPSBiYXNlIFx1MDAyNlx1MDAyNiB2ZGV2LVx1MDAzZXBjaV9jb25maWdfbWFwW3BvcyAtIDFdID09IGNhcClcbi1cdFx0cG9zLS07XG4tXG4tXHRyZXR1cm4gcG9zO1xuLX1cbi1cbiBzdGF0aWMgaW50IHZmaW9fbXNpX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0XHRcdGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbiBcdFx0XHRcdGludCBvZmZzZXQsIF9fbGUzMiAqdmFsKVxuQEAgLTE3MDEsNiAmIzQzOzE4MjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0cmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKGVjYXAgPT0gUENJX0VYVF9DQVBfSURfVFBIKVxuJiM0MztcdFx0XHR2ZmlvX3VwZGF0ZV90cGhfdmNvbmZpZ19ieXRlcyh2ZGV2LCBlcG9zKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSWYgd2UmIzM5O3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCAzZjExYTk2MjRiOWMwMy4uYjhkOWQ4NDBhOTNiNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xMyw2ICYjNDM7MTMsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2FwZXJ0dXJlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG5AQCAtMzAsNiAmIzQzOzMyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW9tbXVmZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcdTAwM2VcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKVxuICNpbmNsdWRlIFx1MDAzY2FzbS9lZWguaFx1MDAzZVxuQEAgLTEyNywxMCAmIzQzOzEzMCwyMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3RwaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcbiYjNDM7XHRcdFx0XHRcdCAgICB2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3ByaXZhdGUoc2VxKTtcbiYjNDM7XG4mIzQzO1x0c2VxX3ByaW50ZihzZXEsIFwmIzM0O3BvbGljeT0ldSBjYXAtdmlydD0weCV4IG9wdC1pbj0ldVxcblwmIzM0OyxcbiYjNDM7XHRcdHZkZXYtXHUwMDNldHBoX3BvbGljeSwgdmRldi1cdTAwM2V0cGhfY2FwX3ZpcnQsIHZkZXYtXHUwMDNldHBoX29wdF9pbik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gLypcbi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWRcbi0gKiBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJiMzOTtzIGVmZmVjdGl2ZSB2YWx1ZSBjYW4gZGlmZmVyIGZyb20gdGhlXG4tICogY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZy4gIEV4cG9zZSB0aGUgcGVyLWRldmljZSAocmVhZC1vbmx5KSB2YWx1ZXNcbiYjNDM7ICogZGlzYWJsZV9pZGxlX2QzLCBub2ludHhtYXNrIGFuZCB0cGhfcG9saWN5IGFyZSB3cml0YWJsZSBtb2R1bGUgcGFyYW1ldGVyc1xuJiM0MzsgKiBsYXRjaGVkIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UmIzM5O3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbVxuJiM0MzsgKiB0aGUgY3VycmVudCBwYXJhbWV0ZXIgc2V0dGluZy4gIEV4cG9zZSB0aGUgcGVyLWRldmljZSAocmVhZC1vbmx5KSB2YWx1ZXNcbiAgKiBoZXJlIGZvciB2aXNpYmlsaXR5OyByZWFkLW9ubHkgcGFyYW1ldGVycyBjYW4mIzM5O3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLlxuICAqL1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNDYsNiAmIzQzOzE1OSw4IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfbm9pbnR4bWFzayk7XG4gXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcJiMzNDtkaXNhYmxlX2lkbGVfZDNcJiMzNDssIHBjaV9kaXIsXG4gXHRcdFx0XHQgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyk7XG4mIzQzO1x0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldiwgXCYjMzQ7dHBoXCYjMzQ7LCBwY2lfZGlyLFxuJiM0MztcdFx0XHRcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoKTtcbiB9XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuQEAgLTYxMCw2ICYjNDM7NjI1LDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XG4gXG4gXHR2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzID0gIXJldDtcbiYjNDM7XHR2ZGV2LVx1MDAzZXRwaF9vcHRfaW4gPSBmYWxzZTtcbiYjNDM7XHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIG5ldyB1c2VyIHNlc3Npb24gKi9cbiYjNDM7XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4gXHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbiBcdHZkZXYtXHUwMDNlcGNpX3NhdmVkX3N0YXRlID0gcGNpX3N0b3JlX3NhdmVkX3N0YXRlKHBkZXYpO1xuIFx0aWYgKCF2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSlcbkBAIC03NTcsNiAmIzQzOzc3NSw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcbiBcdHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHZkZXYpO1xuIFxuJiM0MztcdC8qIFJlc2V0IFRQSCBzdGF0dXMgb24gZXhpdCB1c2VyIHNlc3Npb24gKi9cbiYjNDM7XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1xuIFx0LypcbiBcdCAqIElmIHdlIGhhdmUgc2F2ZWQgc3RhdGUsIHJlc3RvcmUgaXQuICBJZiB3ZSBjYW4gcmVzZXQgdGhlIGRldmljZSxcbiBcdCAqIGV2ZW4gYmV0dGVyLiAgUmVzZXR0aW5nIHdpdGggY3VycmVudCBzdGF0ZSBzZWVtcyBiZXR0ZXIgdGhhblxuQEAgLTE1NTgsNiAmIzQzOzE1NzksNyBAQCBsb25nIHZmaW9fcGNpX2NvcmVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHVuc2lnbmVkIGludCBjbWQsXG4gXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPVxuIFx0XHRjb250YWluZXJfb2YoY29yZV92ZGV2LCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UsIHZkZXYpO1xuIFx0dm9pZCBfX3VzZXIgKnVhcmcgPSAodm9pZCBfX3VzZXIgKilhcmc7XG4mIzQzO1x0aW50IHJldDtcbiBcbiBcdHN3aXRjaCAoY21kKSB7XG4gXHRjYXNlIFZGSU9fREVWSUNFX0dFVF9JTkZPOlxuQEAgLTE1NjksOSAmIzQzOzE1OTEsMTUgQEAgbG9uZyB2ZmlvX3BjaV9jb3JlX2lvY3RsKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0Y2FzZSBWRklPX0RFVklDRV9JT0VWRU5URkQ6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9pb2V2ZW50ZmQodmRldiwgdWFyZyk7XG4gXHRjYXNlIFZGSU9fREVWSUNFX1BDSV9IT1RfUkVTRVQ6XG4tXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9wY2lfaG90X3Jlc2V0KHZkZXYsIHVhcmcpO1xuJiM0MztcdFx0cmV0ID0gdmZpb19wY2lfaW9jdGxfcGNpX2hvdF9yZXNldCh2ZGV2LCB1YXJnKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuIFx0Y2FzZSBWRklPX0RFVklDRV9SRVNFVDpcbi1cdFx0cmV0dXJuIHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHZkZXYsIHVhcmcpO1xuJiM0MztcdFx0cmV0ID0gdmZpb19wY2lfaW9jdGxfcmVzZXQodmRldiwgdWFyZyk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiBcdGNhc2UgVkZJT19ERVZJQ0VfU0VUX0lSUVM6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9zZXRfaXJxcyh2ZGV2LCB1YXJnKTtcbiBcdGRlZmF1bHQ6XG5AQCAtMTYwNyw2ICYjNDM7MTYzNSwyOTkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfc3Rfc2l6ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbiYjNDM7XHR1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAobG9jID09IFBDSV9UUEhfTE9DX0NBUCkge1xuJiM0MztcdFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuJiM0MztcdH0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHtcbiYjNDM7XHRcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1BIO1xuJiM0MztcbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5IFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCh2ZGV2LVx1MDAzZXRwaF9jYXBfdmlydCBcdTAwMjYgUENJX1RQSF9DQVBfU1RfSVYpKSB7XG4mIzQzO1x0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkU7XG4mIzQzO1x0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRjtcbiYjNDM7XHRcdGlmIChwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHRcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfQ1BVO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5IFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCh2ZGV2LVx1MDAzZXRwaF9jYXBfdmlydCBcdTAwMjYgUENJX1RQSF9DQVBfU1RfRFMpKSB7XG4mIzQzO1x0XHRpZiAodmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHZkZXYpIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTtcbiYjNDM7XHRcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUY7XG4mIzQzO1x0XHRcdGlmIChwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHRcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuJiM0MztcdFx0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZsYWdzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgICAgc2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIHRwaDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoIXBjaWVfc3RkX3RwaF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeixcbiYjNDM7XHRcdFx0VkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbiYjNDM7XHRcdFx0c2l6ZW9mKHRwaCkpO1xuJiM0MztcdGlmIChyZXQgIT0gMSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZ0cGgsIGFyZywgc2l6ZW9mKHRwaCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpIHtcbiYjNDM7XHRcdGlmICh0cGguZmxhZ3MgIT0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHR2ZGV2LVx1MDAzZXRwaF9vcHRfaW4gPSAxO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbilcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHR0cGguZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcdTAwMjZ0cGgsIHNpemVvZih0cGgpKSA/IC1FRkFVTFQgOiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfcmVzb2x2ZV9hbGxvd19zcmMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGZsYWdzID0gdmZpb19wY2lfZ2V0X3RwaF9jYXBhYmlsaXR5KHZkZXYpO1xuJiM0MztcdHUzMiBhbGxvd19zcmMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IChWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1BIIHxcbiYjNDM7XHRcdCAgICAgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9TVCkpXG4mIzQzO1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUKVxuJiM0MztcdFx0YWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFIHxcbiYjNDM7XHRcdFx0ICAgICBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gYWxsb3dfc3JjO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICpzdCwgdTggKnBoKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkbWFidWYgPSBkbWFfYnVmX2dldChmZCk7XG4mIzQzO1x0aWYgKElTX0VSUihkbWFidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbiYjNDM7XHRpZiAocmV0ID09IDApXG4mIzQzO1x0XHRyZXQgPSBkbWFfYnVmX2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0LCBwaCk7XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIHNyY19obmRsLCBib29sIGV4dGVuZGVkLCB1MTYgKnN0KVxuJiM0Mzt7XG4mIzQzO1x0dTggcmVxX3R5cGUgPSBleHRlbmRlZCA/IFBDSV9UUEhfUkVRX0VYVF9UUEggOiBQQ0lfVFBIX1JFUV9UUEhfT05MWTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XHR1OCBwaDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRilcbiYjNDM7XHRcdHJldCA9IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKHNyY19obmRsLCBleHRlbmRlZCwgc3QsIFx1MDAyNnBoKTtcbiYjNDM7XHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUpXG4mIzQzO1x0XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXG4mIzQzO1x0XHRcdFx0XHQgICAgICByZXFfdHlwZSwgc3JjX2huZGwsIHN0KTtcbiYjNDM7XHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVClcbiYjNDM7XHRcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHJlcV90eXBlLCBzcmNfaG5kbCwgc3QpO1xuJiM0MztcdGVsc2UgaWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpXG4mIzQzO1x0XHQqc3QgPSAwO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdGlmIChyZXQgIT0gMClcbiYjNDM7XHRcdCpzdCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiYjNDM7XHRcdFx0dTMyIGZsYWdzLFxuJiM0MztcdFx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0c2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgcmVzb2x2ZTtcbiYjNDM7XHR1MzIgdXNlcl9mbGFncywgYWxsb3dfc3JjO1xuJiM0MztcdGJvb2wgZXh0ZW5kZWQ7XG4mIzQzO1x0dTE2IHRhZyA9IDA7XG4mIzQzO1x0dTggcGggPSAwO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghdmRldi1cdTAwM2V0cGhfb3B0X2luKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcbiYjNDM7XHRcdFx0XHQgc2l6ZW9mKHJlc29sdmUpKTtcbiYjNDM7XHRpZiAocmV0ICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cmVzb2x2ZSwgYXJnLCBzaXplb2YocmVzb2x2ZSkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdHVzZXJfZmxhZ3MgPSByZXNvbHZlLmZsYWdzO1xuJiM0MztcdGV4dGVuZGVkID0gISEodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcbiYjNDM7XHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0dXNlcl9mbGFncyBcdTAwMjY9IH5WRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4mIzQzO1xuJiM0MztcdGFsbG93X3NyYyA9IHZmaW9fcGNpX2dldF90cGhfcmVzb2x2ZV9hbGxvd19zcmModmRldik7XG4mIzQzO1x0aWYgKHVzZXJfZmxhZ3MgXHUwMDI2IH5hbGxvd19zcmMgfHwgIWlzX3Bvd2VyX29mXzIodXNlcl9mbGFncykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0cmVzb2x2ZS52YWxpZCA9IDA7XG4mIzQzO1x0cmVzb2x2ZS5waCA9IDA7XG4mIzQzO1x0cmVzb2x2ZS5zdCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VyX2ZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRikge1xuJiM0MztcdFx0cmV0ID0gdmZpb19wY2lfZ2V0X2RtYWJ1Zl90cGgocmVzb2x2ZS5zcmMsIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgXHUwMDI2dGFnLCBcdTAwMjZwaCk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmVzb2x2ZS5waCA9IHBoO1xuJiM0MztcdFx0cmVzb2x2ZS52YWxpZCA9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9QSDtcbiYjNDM7XHRcdGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgXHUwMDNlPSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKSB7XG4mIzQzO1x0XHRcdHJlc29sdmUuc3QgPSB0YWc7XG4mIzQzO1x0XHRcdHJlc29sdmUudmFsaWQgfD0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyh2ZGV2LVx1MDAzZXBkZXYsIHVzZXJfZmxhZ3MsIHJlc29sdmUuc3JjLFxuJiM0MztcdFx0XHRcdCAgICAgIGV4dGVuZGVkLCBcdTAwMjZ0YWcpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJlc29sdmUudmFsaWQgfD0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUO1xuJiM0MztcdHJlc29sdmUuc3QgPSB0YWc7XG4mIzQzO1xuJiM0MztvdXQ6XG4mIzQzO1x0cmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnJlc29sdmUsIHNpemVvZihyZXNvbHZlKSkgPyAtRUZBVUxUIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3N0X2FsbG93X3NyYyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHR1MzIgZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XG4mIzQzO1x0dTMyIGFsbG93X3NyYyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmIChmbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUYpXG4mIzQzO1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XG4mIzQzO1x0aWYgKGZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVSlcbiYjNDM7XHRcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XG4mIzQzO1x0XHRcdCAgICAgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVDtcbiYjNDM7XHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORSlcbiYjNDM7XHRcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX05PTkU7XG4mIzQzO1xuJiM0MztcdHJldHVybiBhbGxvd19zcmM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0dTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0XHRzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3QgdHBoX3N0O1xuJiM0MztcdHUzMiB1c2VyX2ZsYWdzLCBhbGxvd19zcmMsIHN0X3NpemU7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVx1MDAzZXBkZXY7XG4mIzQzO1x0Ym9vbCBleHRlbmRlZCwgc3RvcF9vbl96ZXJvO1xuJiM0MztcdHUzMiAqc3JjX2huZGwgPSBOVUxMO1xuJiM0MztcdHUxNiAqdGFncyA9IE5VTEw7XG4mIzQzO1x0aW50IHJldCwgaTtcbiYjNDM7XHR1MTYgY21kO1xuJiM0MztcbiYjNDM7XHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbiB8fCB2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVClcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4mIzQzO1x0XHRcdFx0IHNpemVvZih0cGhfc3QpKTtcbiYjNDM7XHRpZiAocmV0ICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dHBoX3N0LCBhcmcsIHNpemVvZih0cGhfc3QpKSlcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcbiYjNDM7XHR1c2VyX2ZsYWdzID0gdHBoX3N0LmZsYWdzO1xuJiM0MztcdGV4dGVuZGVkID0gISEodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcbiYjNDM7XHRpZiAoZXh0ZW5kZWQgXHUwMDI2XHUwMDI2ICFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0dXNlcl9mbGFncyBcdTAwMjY9IH5WRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4mIzQzO1xuJiM0MztcdHN0b3Bfb25femVybyA9ICEhKHVzZXJfZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUKTtcbiYjNDM7XHRpZiAoc3RvcF9vbl96ZXJvIFx1MDAyNlx1MDAyNiAodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdHVzZXJfZmxhZ3MgXHUwMDI2PSB+VkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1Q7XG4mIzQzO1xuJiM0MztcdGFsbG93X3NyYyA9IHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHZkZXYpO1xuJiM0MztcdGlmICh1c2VyX2ZsYWdzIFx1MDAyNiB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHN0X3NpemUgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUodmRldik7XG4mIzQzO1x0aWYgKHRwaF9zdC5zdGFydCBcdTAwM2U9IHN0X3NpemUgfHwgdHBoX3N0LmNvdW50IFx1MDAzZSBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8XG4mIzQzO1x0XHR0cGhfc3QuY291bnQgPT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoISh1c2VyX2ZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKSB7XG4mIzQzO1x0XHRzcmNfaG5kbCA9IG1lbWR1cF9hcnJheV91c2VyKHU2NF90b191c2VyX3B0cih0cGhfc3QuZGVzdHMpLFxuJiM0MztcdFx0XHRcdFx0ICAgICB0cGhfc3QuY291bnQsIHNpemVvZih1MzIpKTtcbiYjNDM7XHRcdGlmIChJU19FUlIoc3JjX2huZGwpKVxuJiM0MztcdFx0XHRyZXR1cm4gUFRSX0VSUihzcmNfaG5kbCk7XG4mIzQzO1x0fVxuJiM0MztcdHRhZ3MgPSBrY2FsbG9jKHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUxNiksIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4mIzQzO1x0aWYgKCF0YWdzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0cGhfc3QuY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyhwZGV2LCB1c2VyX2ZsYWdzLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc3JjX2huZGwgPyBzcmNfaG5kbFtpXSA6IDAsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBleHRlbmRlZCwgXHUwMDI2dGFnc1tpXSk7XG4mIzQzO1x0XHRpZiAocmV0IHx8IChzdG9wX29uX3plcm8gXHUwMDI2XHUwMDI2IHRhZ3NbaV0gPT0gMCkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGkgXHUwMDNlIDApIHtcbiYjNDM7XHRcdGNtZCA9IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUodmRldik7XG4mIzQzO1x0XHRyZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhwZGV2LCB0cGhfc3Quc3RhcnQsIGksIHRhZ3MpO1xuJiM0MztcdFx0dmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZSh2ZGV2LCBjbWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRrZnJlZSh0YWdzKTtcbiYjNDM7XHRrZnJlZShzcmNfaG5kbCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHR2b2lkIF9fdXNlciAqYXJnLCBzaXplX3QgYXJnc3opXG4ge1xuQEAgLTE2MjUsNiAmIzQzOzE5NDYsMTYgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOlxuIFx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuJiM0MztcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgYXJnc3opO1xuJiM0MztcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XG4mIzQzO1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFOlxuJiM0MztcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSh2ZGV2LCBmbGFncyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgYXJnLCBhcmdzeik7XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDpcbiYjNDM7XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5pbmRleCBjMTZmNDYwYzAxZDY4MS4uNTM1MTgzOWMxMzM4YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5AQCAtMyw2ICYjNDM7Myw3IEBAXG4gICovXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXRwaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3ZmaW9fcGNpX3ByaXYuaFwmIzM0O1xuQEAgLTE5LDcgJiM0MzsyMCwxNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4gXHR1MzIgbnJfcmFuZ2VzO1xuIFx0c3RydWN0IGtyZWYga3JlZjtcbiBcdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVcGRhdGVzIHByb3RlY3RlZCBieSBkbWFidWYtXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XG4mIzQzO1x0ICogcHJvdGVjdGVkIGJ5IG1lbW9yeV9sb2NrLlxuJiM0MztcdCAqL1xuJiM0MztcdHUxNiB0cGhfc3RfZXh0O1xuJiM0MztcdHU4IHRwaF9zdDtcbiYjNDM7XHRib29sIHJldm9rZWQ7XG4mIzQzO1x0dTggdHBoX3N0X3ZhbGlkOjE7XG4mIzQzO1x0dTggdHBoX3N0X2V4dF92YWxpZDoxO1xuJiM0MztcdHU4IHRwaF9waDoyO1xuIH07XG4gXG4gc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuQEAgLTMwLDcgJiM0Mzs0MSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdGlmICghYXR0YWNobWVudC1cdTAwM2VwZWVyMnBlZXIpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdGlmIChwcml2LVx1MDAzZXJldm9rZWQpXG4mIzQzO1x0aWYgKFJFQURfT05DRShwcml2LVx1MDAzZXJldm9rZWQpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmICghZG1hX2J1Zl9hdHRhY2hfcmV2b2NhYmxlKGF0dGFjaG1lbnQpKVxuQEAgLTY5LDYgJiM0Mzs4MCwyNiBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuJiM0MztcdFx0XHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKGV4dGVuZGVkKSB7XG4mIzQzO1x0XHRpZiAoIXByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0X2V4dDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aWYgKCFwcml2LVx1MDAzZXRwaF9zdF92YWxpZClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0O1xuJiM0MztcdH1cbiYjNDM7XHQqcGggPSBwcml2LVx1MDAzZXRwaF9waDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcbiBcdFx0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbkBAIC0xMDEsNiAmIzQzOzEzMiw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZShzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmKVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbiBcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbiYjNDM7XHQuZ2V0X3BjaV90cGggPSB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoLFxuIFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXG4gXHQudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsXG4gXHQucmVsZWFzZSA9IHZmaW9fcGNpX2RtYV9idWZfcmVsZWFzZSxcbkBAIC0zMzMsNiAmIzQzOzM2NSw3MiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiM0MztcdFx0XHRcdCAgICAgIHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiYjNDM7XHR1OCBjb21wO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVx1MDAzZXBkZXYpO1xuJiM0MztcdGlmIChjb21wID09IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FKVxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbiYjNDM7XHRcdFx0XHQgc2l6ZW9mKHNldF90cGgpKTtcbiYjNDM7XHRpZiAocmV0ICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdGlmIChzZXRfdHBoLmZsYWdzIFx1MDAyNiB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNldF90cGgucGggXHUwMDI2IH4weDMpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0aWYgKChzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGNvbXAgIT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEgpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KHNldF90cGguZG1hYnVmX2ZkKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGRtYWJ1ZikpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuJiM0MztcbiYjNDM7XHRpZiAoZG1hYnVmLVx1MDAzZW9wcyAhPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBvdXRfcHV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXZkZXYgIT0gdmRldikge1xuJiM0MztcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V0cGhfc3QgICAgICAgICA9IHNldF90cGguc3RlZXJpbmdfdGFnO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0X2V4dCAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZ19leHQ7XG4mIzQzO1x0cHJpdi1cdTAwM2V0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7XG4mIzQzO1x0cHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQgICA9ICEhKHNldF90cGguZmxhZ3MgXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1QpO1xuJiM0MztcdHByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZCA9XG4mIzQzO1x0XHQhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCk7XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XHRyZXQgPSAwO1xuJiM0MztcbiYjNDM7b3V0X3B1dDpcbiYjNDM7XHRkbWFfYnVmX3B1dChkbWFidWYpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLjAzYzRhMDQxNDI2NGVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMTEsNiAmIzQzOzExLDEyIEBAXG4gLyogQ2FwIG1heGltdW0gbnVtYmVyIG9mIGlvZXZlbnRmZHMgcGVyIGRldmljZSAoYXJiaXRyYXJ5KSAqL1xuICNkZWZpbmUgVkZJT19QQ0lfSU9FVkVOVEZEX01BWFx0XHQxMDAwXG4gXG4mIzQzO2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7XG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCA9IDAsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCA9IDEsXG4mIzQzO1x0VkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsXG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQge1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0bmV4dDtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZVx0KnZkZXY7XG5AQCAtMTE4LDYgJiM0MzsxMjQsMTAgQEAgc3RhdGljIGlubGluZSBib29sIHZmaW9fcGNpX2lzX3ZnYShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgX191c2VyICphcmcsXG4gXHRcdFx0XHQgIHNpemVfdCBhcmdzeik7XG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcbiYjNDM7XHRcdFx0XHQgICAgICBzaXplX3QgYXJnc3opO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuICNlbHNlXG5AQCAtMTI4LDYgJiM0MzsxMzgsMTQgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnRcbiYjNDM7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4mIzQzO1x0XHRcdFx0ICBzaXplX3QgYXJnc3opXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVOT1RUWTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuaW5kZXggZDEyMDNkYTU2ZmM1ZjcuLjE0ZThlYjYxYTYyYzA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5AQCAtMTEzLDYgJiM0MzsxMTMsMjkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHtcbiBcdCAqL1xuIFx0dm9pZCAoKnVucGluKShzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xuIFxuJiM0MztcdC8qKlxuJiM0MztcdCAqIEBnZXRfcGNpX3RwaDpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBzdGVlcmluZyBtZXRhZGF0YSBmb3JcbiYjNDM7XHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cbiYjNDM7XHQgKiBvdXRib3VuZCBUTFBzIHRhcmdldGluZyB0aGUgZXhwb3J0ZXIgZm9yIHBlZXItdG8tcGVlciBETUEuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcbiYjNDM7XHQgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUXG4mIzQzO1x0ICogQHN0ZWVyaW5nX3RhZzogUmV0dXJucyB0aGUgcmF3IFRQSCBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWRcbiYjNDM7XHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcbiYjNDM7XHQgKiBAcGg6IFJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnQgKDItYml0IHZhbHVlKVxuJiM0MztcdCAqXG4mIzQzO1x0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcbiYjNDM7XHQgKiBcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVPUE5PVFNVUFAgd2hlblxuJiM0MztcdCAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogUmV0dXJuZWQgbWV0YWRhdGEgZm9sbG93cyB0aGUgbGlmZXRpbWUgcnVsZXMgZG9jdW1lbnRlZCBmb3JcbiYjNDM7XHQgKiBkbWFfYnVmX2dldF9wY2lfdHBoKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW50ICgqZ2V0X3BjaV90cGgpKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdCAgIHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuJiM0MztcbiBcdC8qKlxuIFx0ICogQG1hcF9kbWFfYnVmOlxuIFx0ICpcbkBAIC01NjMsNiAmIzQzOzU4Niw4IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdFx0ICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4gaW50IGRtYV9idWZfcGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4gdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4mIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4mIzQzO1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuIFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbmluZGV4IGJlNjhjZDE3ZjJmODMzLi5hZWFmNzAxZTc5NjViMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuQEAgLTksNiAmIzQzOzksOCBAQFxuICNpZm5kZWYgTElOVVhfUENJX1RQSF9IXG4gI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0hcbiBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiYjNDM7XG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcbkBAIC0yMSwyNiAmIzQzOzIzLDY5IEBAIGVudW0gdHBoX21lbV90eXBlIHtcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfUENJRV9UUEhcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaWVfc3RkX3RwaF9zdXBwb3J0ZWQgLSBjaGVjayBzdGFuZGFyZCBUUEggcmVxdWVzdGVyIHN1cHBvcnRcbiYjNDM7ICogQHBkZXY6IFBDSSBkZXZpY2VcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBcXFxuJiM0MztcdCgocGRldiktXHUwMDNldHBoX21heF90eXBlIFx1MDAzZT0gUENJX1RQSF9SRVFfVFBIX09OTFkpXG4mIzQzOy8qKlxuJiM0MzsgKiBwY2llX2V4dF90cGhfc3VwcG9ydGVkIC0gY2hlY2sgZXh0ZW5kZWQgVFBIIHJlcXVlc3RlciBzdXBwb3J0XG4mIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlXG4mIzQzOyAqL1xuJiM0MzsjZGVmaW5lIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikgXFxcbiYjNDM7XHQoKHBkZXYpLVx1MDAzZXRwaF9tYXhfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKVxuIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0ICB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpO1xuLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4tXHRcdFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO2ludCBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHN0YXJ0LFxuJiM0MztcdFx0XHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xuJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQoc3RydWN0IHBjaV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4mIzQzO1x0XHRcdCAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xuJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XG4gdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLCB1OCByZXFfdHlwZSk7XG4mIzQzO2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpO1xuIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gdTMyIHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2Moc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuJiM0Mzt1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiYjNDM7dTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuJiM0Mztib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuICNlbHNlXG4mIzQzOyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZVxuJiM0MzsjZGVmaW5lIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikgZmFsc2VcbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4gXHRcdFx0XHRcdHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiB7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuJiM0MztcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxuJiM0Mzt7IHJldHVybiAtRUlOVkFMOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuJiM0MztcdFx0XHRcdFx0ICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSxcbiYjNDM7XHRcdFx0XHRcdCAgdTE2ICp0YWcpXG4mIzQzO3sgcmV0dXJuIC1FSU5WQUw7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldikgeyB9XG4tc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSxcbiYjNDM7XHRcdFx0XHQgICAgICB1OCByZXFfdHlwZSlcbiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7IHJldHVybiBQQ0lfVFBIX0xPQ19OT05FOyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gUENJX1RQSF9SRVFfRElTQUJMRTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7IHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7eyByZXR1cm4gZmFsc2U7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li41ZWQ1ODc5OWE5YjEyOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC00NzIsNyAmIzQzOzQ3Miw2IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHVuc2lnbmVkIGludFx0YXRzX2VuYWJsZWQ6MTtcdFx0LyogQWRkcmVzcyBUcmFuc2xhdGlvbiBTdmMgKi9cbiBcdHVuc2lnbmVkIGludFx0cGFzaWRfZW5hYmxlZDoxO1x0LyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovXG4gXHR1bnNpZ25lZCBpbnRcdHByaV9lbmFibGVkOjE7XHRcdC8qIFBhZ2UgUmVxdWVzdCBJbnRlcmZhY2UgKi9cbi1cdHVuc2lnbmVkIGludFx0dHBoX2VuYWJsZWQ6MTtcdFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cbiBcdHVuc2lnbmVkIGludFx0Zm1fZW5hYmxlZDoxO1x0XHQvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21hbmFnZWQ6MTtcdFx0LyogTWFuYWdlZCB2aWEgZGV2cmVzICovXG4gXHR1bnNpZ25lZCBpbnRcdGlzX21zaV9tYW5hZ2VkOjE7XHQvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqL1xuQEAgLTU4OCw3ICYjNDM7NTg3LDEwIEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi9cbiBcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXG4tXHR1MTZcdFx0dHBoX2NhcDtcdC8qIFRQSCBjYXBhYmlsaXR5IG9mZnNldCAqL1xuJiM0MztcdHUxNlx0XHR0cGhfY2FwOjEzO1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4mIzQzO1x0dTE2XHRcdHRwaF9tYXhfdHlwZToyOyAvKiBOZWdvdGlhdGVkIG1heCBUUEggcmVxdWVzdGVyIHR5cGVcbiYjNDM7XHRcdFx0XHRcdCAgIGJldHdlZW4gZGV2aWNlIGFuZCByb290IHBvcnQgKi9cbiYjNDM7XHR1MTZcdFx0dHBoX2VuYWJsZWQ6MTtcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cbiBcdHU4XHRcdHRwaF9tb2RlO1x0LyogVFBIIG1vZGUgKi9cbiBcdHU4XHRcdHRwaF9yZXFfdHlwZTtcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbmluZGV4IDlhMTY3NGMxNTJhYTI5Li5kNjA2NGZhOWU4MGE2OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuQEAgLTE0OSw2ICYjNDM7MTQ5LDkgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcbiBcdHN0cnVjdCBub3RpZmllcl9ibG9ja1x0bmI7XG4gXHRzdHJ1Y3Qgcndfc2VtYXBob3JlXHRtZW1vcnlfbG9jaztcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGRtYWJ1ZnM7XG4mIzQzO1x0dThcdFx0XHR0cGhfb3B0X2luO1xuJiM0MztcdHU4XHRcdFx0dHBoX3BvbGljeTtcbiYjNDM7XHR1MzJcdFx0XHR0cGhfY2FwX3ZpcnQ7XG4gfTtcbiBcbiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZWUuLjliYzNjZWY3YTg5YWM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuQEAgLTE1MzQsNiAmIzQzOzE1MzQsMTUwIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuICAqL1xuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBVcG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUIGFzc29jaWF0ZSBUUEggKFRMUCBQcm9jZXNzaW5nIEhpbnRzKSBtZXRhZGF0YVxuJiM0MzsgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5XG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiBvbiB0aGlzIGRldmljZSwgYW5kIHRoZSBkZXZpY2UgbXVzdCByZXBvcnRcbiYjNDM7ICogVFBIIENvbXBsZXRlciBzdXBwb3J0IGluIERldmljZSBDYXBhYmlsaXRpZXMgMiAoYml0cyAxMzoxMik7IHJlcXVlc3RzXG4mIzQzOyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG9cbiYjNDM7ICogcmVwb3J0IHRoZSBFeHRlbmRlZCBUUEggQ29tcGxldGVyIGVuY29kaW5nLiBPdGhlcndpc2UgdGhlIGlvY3RsXG4mIzQzOyAqIHJldHVybnMgLUVPUE5PVFNVUFAuXG4mIzQzOyAqXG4mIzQzOyAqIEBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuXG4mIzQzOyAqXG4mIzQzOyAqIDgtYml0IFNUIChAc3RlZXJpbmdfdGFnKSBhbmQgMTYtYml0IEV4dGVuZGVkIFNUIChAc3RlZXJpbmdfdGFnX2V4dCkgYXJlXG4mIzQzOyAqIGRpc3RpbmN0IG5hbWVzcGFjZXMuIEBmbGFncyBpcyB0aGUgYXV0aG9yaXRhdGl2ZSB2YWxpZGl0eSBtYXNrIGZvciB0aGVcbiYjNDM7ICogdHdvIG5hbWVzcGFjZXM6IFZGSU9fRE1BX0JVRl9UUEhfU1QgbWFya3MgQHN0ZWVyaW5nX3RhZyB2YWxpZCBhbmRcbiYjNDM7ICogVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQgbWFya3MgQHN0ZWVyaW5nX3RhZ19leHQgdmFsaWQuIEFuIGltcG9ydGVyXG4mIzQzOyAqIHJlcXVlc3RzIG9uZSBuYW1lc3BhY2UgYW5kIHJlY2VpdmVzIHRoZSBtYXRjaGluZyB2YWx1ZS5cbiYjNDM7ICpcbiYjNDM7ICogRWFjaCBTRVQgZnVsbHkgcmVwbGFjZXMgdGhlIGRtYS1idWYmIzM5O3MgVFBIIHN0YXRlIGZvciBmdXR1cmUgcXVlcmllc1xuJiM0MzsgKiBvbmx5LiBBIG5hbWVzcGFjZSB3aG9zZSBmbGFnIGJpdCBpcyBjbGVhciBpcyByZXBvcnRlZCBhcyB1bnN1cHBvcnRlZFxuJiM0MzsgKiB0byBmdXR1cmUgaW1wb3J0ZXJzOyBhbiBpbXBvcnRlciB0aGF0IGhhcyBhbHJlYWR5IHJldHJpZXZlZCBhIHZhbHVlXG4mIzQzOyAqIGlzIHVuYWZmZWN0ZWQuIEBmbGFncyA9PSAwIGxlYXZlcyBib3RoIG5hbWVzcGFjZXMgdW5zdXBwb3J0ZWQgZm9yXG4mIzQzOyAqIGZ1dHVyZSBpbXBvcnRlcnMuXG4mIzQzOyAqXG4mIzQzOyAqIEBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLlxuJiM0MzsgKlxuJiM0MzsgKiBVbmRlZmluZWQgQGZsYWdzIGFuZCBAcGggYml0cyBtdXN0IGFsd2F5cyBiZSB6ZXJvLlxuJiM0MzsgKlxuJiM0MzsgKiBVc2Vyc3BhY2UgbXVzdCBjb25maWd1cmUgVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuXG4mIzQzOyAqIGltcG9ydGVyLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXG4mIzQzO1xuJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RcdFx0KDEgXHUwMDNjXHUwMDNjIDApXG4mIzQzOyNkZWZpbmUgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFRcdFx0KDEgXHUwMDNjXHUwMDNjIDEpXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7XG4mIzQzO1x0X19zMzJcdGRtYWJ1Zl9mZDtcbiYjNDM7XHRfX3UzMlx0ZmxhZ3M7XG4mIzQzO1x0X191MTZcdHN0ZWVyaW5nX3RhZ19leHQ7XG4mIzQzO1x0X191OFx0c3RlZXJpbmdfdGFnO1xuJiM0MztcdF9fdThcdHBoO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7LyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFx0XHQxNFxuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkVcdDE1XG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcdDE2XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCAtIENvbnRyb2wgYW5kIHF1ZXJ5IFBDSSBUUEggY2FwYWJpbGl0aWVzXG4mIzQzOyAqXG4mIzQzOyAqIFNFVDogT3B0LWluIHRvIFRQSCBmZWF0dXJlIGZvciB0aGUgZGV2aWNlOyBmbGFncyBtdXN0IGJlIHplcm8uXG4mIzQzOyAqIEdFVDogUmV0dXJuIHN1cHBvcnRlZCBUUEggY2FwYWJpbGl0eSBiaXRzIChzZWUgVkZJT19ERVZJQ0VfVFBIX0NBUF8qKVxuJiM0MzsgKiAgICAgIGluIGZsYWdzLiBSZXR1cm5zIGVycm9yIGlmIFNFVCBoYXMgbm90IGJlZW4gaW52b2tlZCBmaXJzdC5cbiYjNDM7ICpcbiYjNDM7ICogVXNlcnNwYWNlIG11c3QgZmlyc3QgaW52b2tlIFNFVCBvbiB0aGlzIGZlYXR1cmUgdG8gZW5hYmxlIFRQSCBzdXBwb3J0LFxuJiM0MzsgKiByZWNlaXZlIHZhbGlkIGNhcGFiaWxpdHkgYml0cyB2aWEgR0VULCBnYWluIHBlcm1pc3Npb24gZm9yIHVzaW5nXG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkUgLyBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCwgYW5kIGFjY2Vzc1xuJiM0MzsgKiB0aGUgdmlydHVhbGl6ZWQgVFBIIGNhcGFiaWxpdHkgcmVnaXN0ZXJzIHZpYSBWRklPIGNvbmZpZyBzcGFjZSBhY2Nlc3Nlcy5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB7XG4mIzQzO1x0X191MzIgZmxhZ3M7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBETUFCVUYgc291cmNlIHJlc29sdmUgcHJvY2Vzc2luZyBoaW50IHN1cHBvcnRlZCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEhcdCgxdSBcdTAwM2NcdTAwM2MgMClcbiYjNDM7LyogRE1BQlVGIHNvdXJjZSBUUEhfU1QgYmF0Y2ggcHJvZ3JhbW1pbmcgc3VwcG9ydGVkICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUZcdFx0KDF1IFx1MDAzY1x1MDAzYyAxKVxuJiM0MzsvKiBDUFUgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVVx0XHQoMXUgXHUwMDNjXHUwMDNjIDIpXG4mIzQzOy8qIE5PTkUgc291cmNlIChtZWFucyBzdGVlcmluZyB0YWcgaXMgemVybykgVFBIX1NUIGJhdGNoIHByb2dyYW1taW5nIHN1cHBvcnRlZCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORVx0XHQoMXUgXHUwMDNjXHUwMDNjIDMpXG4mIzQzOy8qIERNQUJVRiBzb3VyY2UgcmVzb2x2ZSBzdGVlcmluZyB0YWcgc3VwcG9ydGVkICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9TVFx0KDF1IFx1MDAzY1x1MDAzYyA0KVxuJiM0MzsvKiBDUFUgc291cmNlIHJlc29sdmUgc3RlZXJpbmcgdGFnIHN1cHBvcnRlZCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9DUFVfU1RcdCgxdSBcdTAwM2NcdTAwM2MgNSlcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkUgLSBSZXNvbHZlIFRQSCBhdHRyaWJ1dGVzIGZyb20gZ2l2ZW4gc291cmNlXG4mIzQzOyAqXG4mIzQzOyAqIEdFVCBvbmx5XG4mIzQzOyAqXG4mIzQzOyAqIFJlcXVpcmVzIHByaW9yIHN1Y2Nlc3NmdWwgU0VUIG9uIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBILCBvdGhlcndpc2VcbiYjNDM7ICogdGhpcyBmZWF0dXJlIHdpbGwgcmV0dXJuIGVycm9yLlxuJiM0MzsgKlxuJiM0MzsgKiBAZmxhZ3M6IElOIC0gc291cmNlIHR5cGUgc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfU1JDXyopXG4mIzQzOyAqICAgICAgICAgYW5kIHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2Ugc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpXG4mIzQzOyAqIEBzcmM6ICAgSU4gLSBzb3VyY2UgaWRlbnRpZmllciwgZS5nLiBkbWFidWYgZmQgd2hlbiBTUkNfRE1BQlVGIGlzIHNldCBpblxuJiM0MzsgKiAgICAgICAgIGZsYWdzXG4mIzQzOyAqIEB2YWxpZDogT1VUIC0gYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcywgc2VlXG4mIzQzOyAqICAgICAgICAgVkZJT19ERVZJQ0VfVFBIX1ZBTElEXypcbiYjNDM7ICogQHBoOiAgICBPVVQgLSBUUEggcHJvY2Vzc2luZyBoaW50ICh2YWxpZCB3aGVuIFZBTElEX1BIIGlzIHNldCBpbiB2YWxpZClcbiYjNDM7ICogQHN0OiAgICBPVVQgLSBUUEggc3RlZXJpbmcgdGFnICh2YWxpZCB3aGVuIFZBTElEX1NUIGlzIHNldCBpbiB2YWxpZClcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9yZXNvbHZlIHtcbiYjNDM7XHRfX3UzMiBmbGFncztcbiYjNDM7XHRfX3UzMiBzcmM7XG4mIzQzO1x0X191OCAgdmFsaWQ7XG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIICgxdSBcdTAwM2NcdTAwM2MgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUICgxdSBcdTAwM2NcdTAwM2MgMSkgLyogc3QgaG9sZHMgdmFsaWQgc3RlZXJpbmcgdGFnICovXG4mIzQzO1x0X191OCAgcGg7XG4mIzQzO1x0X191MTYgc3Q7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCAtIEJhdGNoIHByb2dyYW0gYXJjaGl0ZWN0ZWQgc3RlZXJpbmcgdGFnXG4mIzQzOyAqIHRhYmxlIGVudHJpZXNcbiYjNDM7ICogUmV0dXJuIHZhbHVlOiBcdTAwM2U9MCA9IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzO1xuJiM0MzsgKiAgICAgICAgICAgICAgIFx1MDAzYzAgID0gbmVnYXRpdmUgZXJybm9cbiYjNDM7ICpcbiYjNDM7ICogU0VUIG9ubHlcbiYjNDM7ICpcbiYjNDM7ICogQWRkaXRpb25hbCBjb25zdHJhaW50OiBVc2Vyc3BhY2UgbXVzdCBjb21wbGV0ZSB0d28gcHJlcmVxdWlzaXRlIHN0ZXBzXG4mIzQzOyAqIGJlZm9yZSBpbnZva2luZyB0aGlzIGZlYXR1cmU6XG4mIzQzOyAqIDEuIENhbGwgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggd2l0aCBTRVQgdG8gZW5hYmxlIHZmaW8gVFBIIHBlcm1pc3Npb247XG4mIzQzOyAqIDIuIFdyaXRlIHRoZSBUUEggY29udHJvbCByZWdpc3RlciB0byBhY3RpdmF0ZSBkZXZpY2UgaGFyZHdhcmUgVFBIIGxvZ2ljLlxuJiM0MzsgKlxuJiM0MzsgKiBAZmxhZ3M6IElOIC0gc291cmNlIHR5cGUgc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfU1JDXyopIGFuZFxuJiM0MzsgKiAgICAgICAgIHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2Ugc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpIGFuZFxuJiM0MzsgKiAgICAgICAgIGZhaWx1cmUgcG9saWN5IChzZWUgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpXG4mIzQzOyAqIEBzdGFydDogSU4gLSBmaXJzdCBzdGVlcmluZyB0YWcgdGFibGUgaW5kZXggLyBNU0ktWCB2ZWN0b3JcbiYjNDM7ICogQGNvdW50OiBJTiAtIG51bWJlciBvZiBjb250aWd1b3VzIGVudHJpZXMgdG8gcHJvZ3JhbVxuJiM0MzsgKiBAZGVzdHM6IElOIC0gdXNlciBwb2ludGVyIHRvIGFycmF5IG9mIHNvdXJjZSB1MzIgdmFsdWVzXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3Qge1xuJiM0MztcdF9fdTMyIGZsYWdzO1xuJiM0MztcdF9fdTE2IHN0YXJ0O1xuJiM0MztcdF9fdTE2IGNvdW50O1xuJiM0MztcdF9fYWxpZ25lZF91NjQgZGVzdHM7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKiBTb3VyY2UgaG9sZHMgZG1hLWJ1ZiBmZCAqL1xuJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGICAgICAgKDF1IFx1MDAzY1x1MDAzYyAwKVxuJiM0MzsvKiBVc2UgZXh0ZW5kZWQgMTYtYml0IHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2UgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERURcdCgxdSBcdTAwM2NcdTAwM2MgMSlcbiYjNDM7LyogU291cmNlIGhvbGRzIHZvbGF0aWxlIG1lbW9yeSBDUFUgSUQgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRVx0KDF1IFx1MDAzY1x1MDAzYyAyKVxuJiM0MzsvKiBTb3VyY2UgaG9sZHMgcGVyc2lzdGVudCBtZW1vcnkgQ1BVIElEICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVFx0KDF1IFx1MDAzY1x1MDAzYyAzKVxuJiM0MzsvKiBUUEhfU1Qgb25seTogc2V0IHN0ZWVyaW5nIHRhZyB0byB6ZXJvICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FXHQoMXUgXHUwMDNjXHUwMDNjIDQpXG4mIzQzOy8qIFRQSF9TVCBvbmx5OiBmYWlsIGlmIHJlc29sdmVkIHN0ZWVyaW5nIHRhZyBpcyB6ZXJvICovXG4mIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1RcdCgxdSBcdTAwM2NcdTAwM2MgNSlcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UENJRV9UUEgmIzM0OywKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtETUFfU0hBUkVEX0JVRkZFUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7ZG1hX2J1Zl9nZXRfcGNpX3RwaCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9nZXRfY3B1X3N0X2V4dCYjMzQ7LAogICAgJiMzNDtwY2llX3RwaF9zZXRfc3RfZW50cmllcyYjMzQ7LAogICAgJiMzNDtwY2llX2VuYWJsZV90cGhfZXh0JiMzNDssCiAgICAmIzM0O3ZmaW9fdHBoX2NvbmZpZ193cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBWRklPIFBDSSBhbmQgRE1BLUJVRiB0byBzdXBwb3J0IFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIEl0IGFkZHMgbmV3IFZGSU8gaW9jdGxzL2ZlYXR1cmVzIGZvciBUUEggY29uZmlndXJhdGlvbiBhbmQgcmVzb2x1dGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGIwMGM2MjQ3NzFmYzA3NjRmNzc3MWY3MDVjMTU5MGY3ZjY0NGM3OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgSnVsIDE0IDE2OjA1OjQzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKaW5kZXggZDUwNGM2MzZkYzI5NGUuLmU4MzE0ZWQyNDBkMzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMKQEAgLTkzOSw2ICYjNDM7OTM5LDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCkKICAqICAgICAtIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudCgpCiAgKiAgICAgLSBkbWFfYnVmX3ZtYXAoKQogICogICAgIC0gZG1hX2J1Zl92dW5tYXAoKQomIzQzOyAqICAgICAtIGRtYV9idWZfZ2V0X3BjaV90cGgoKQogICoKICAqIDIuIEltcG9ydGVycyBtdXN0IG5vdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlCiAgKiAgICBmdW5jdGlvbnM6CkBAIC05NzksNiAmIzQzOzk4MCw3IEBAIGRtYV9idWZfcGluX29uX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiAgKiAgICAgLSAmYW1wO2RtYV9idWZfb3BzLnVubWFwX2RtYV9idWYoKQogICogICAgIC0gJmFtcDtkbWFfYnVmX29wcy52bWFwKCkKICAqICAgICAtICZhbXA7ZG1hX2J1Zl9vcHMudnVubWFwKCkKJiM0MzsgKiAgICAgLSAmYW1wO2RtYV9idWZfb3BzLmdldF9wY2lfdHBoKCkKICAqCiAgKiAzLiBFeHBvcnRlcnMgbXVzdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlCiAgKiAgICBmdW5jdGlvbnM6CkBAIC0xMTQ0LDYgJiM0MzsxMTQ2LDM2IEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCiB9CiBFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX3VucGluLCAmIzM0O0RNQV9CVUYmIzM0Oyk7CiAKJiM0MzsvKioKJiM0MzsgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhCiYjNDM7ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeQomIzQzOyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1QKJiM0MzsgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZQomIzQzOyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludAomIzQzOyAqCiYjNDM7ICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsICZhbXA7ZG1hX2J1Zl9vcHMuZ2V0X3BjaV90cGggY2FsbGJhY2suCiYjNDM7ICoKJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB3aXRoICZhbXA7ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlCiYjNDM7ICogZXhwb3J0ZXIgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBjYWxsYmFjayBvciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZQomIzQzOyAqIHJlcXVlc3RlZCBuYW1lc3BhY2UuCiYjNDM7ICoKJiM0MzsgKiBUaGUgcmV0dXJuZWQgc3RlZXJpbmcgdGFnIGFuZCBwcm9jZXNzaW5nIGhpbnQgYXJlIG9ubHkgdmFsaWQgdW50aWwgdGhlCiYjNDM7ICogZXhwb3J0ZXIgaW52YWxpZGF0ZXMgdGhlIGN1cnJlbnQgbWFwcGluZyAoc2lnbmFsbGVkIHRvIHRoZSBpbXBvcnRlciB2aWEKJiM0MzsgKiAmYW1wO2RtYV9idWZfYXR0YWNoX29wcy5tb3ZlX25vdGlmeSkuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3CiYjNDM7ICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLgomIzQzOyAqLwomIzQzO2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsCiYjNDM7CQkJdTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCkKJiM0Mzt7CiYjNDM7CWRtYV9yZXN2X2Fzc2VydF9oZWxkKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CWlmICghZG1hYnVmLSZndDtvcHMtJmd0O2dldF9wY2lfdHBoKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXR1cm4gZG1hYnVmLSZndDtvcHMtJmd0O2dldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2dldF9wY2lfdHBoLCAmIzM0O0RNQV9CVUYmIzM0Oyk7CiYjNDM7CiAvKioKICAqIGRtYV9idWZfbWFwX2F0dGFjaG1lbnQgLSBSZXR1cm5zIHRoZSBzY2F0dGVybGlzdCB0YWJsZSBvZiB0aGUgYXR0YWNobWVudDsKICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3RwaC5jIGIvZHJpdmVycy9wY2kvdHBoLmMKaW5kZXggNjU1ZmZkNjBlNjJmNmEuLmU2YTg1MGFiMmIwMzdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS90cGguYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS90cGguYwpAQCAtMTY1LDE0ICYjNDM7MTY1LDYyIEBAIHN0YXRpYyB1OCBnZXRfc3RfbW9kZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAgKi8KIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXUzMiByZWc7CiYjNDM7CXUzMiByZWcgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBkZXYtJmd0O3RwaF9jYXApCiYjNDM7CQlyZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCAmYW1wO3JlZyk7CiAKLQlyZXR1cm4gRklFTERfR0VUKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCByZWcpOwomIzQzOwlyZXR1cm4gcmVnICZhbXA7IFBDSV9UUEhfQ0FQX0xPQ19NQVNLOwogfQogRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTsKIAomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZQomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguCiYjNDM7ICovCiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBwZGV2LSZndDt0cGhfcmVxX3R5cGU7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSYjMzk7cyBUUEggQ29tcGxldGVyIHN1cHBvcnQKJiM0MzsgKiBAcGRldjogUENJIGRldmljZSB0byBxdWVyeQomIzQzOyAqCiYjNDM7ICogUmVhZHMgdGhlICYjMzQ7VFBIIENvbXBsZXRlciBTdXBwb3J0ZWQmIzM0OyBmaWVsZCAoYml0cyAxMzoxMikgb2YgRGV2aWNlCiYjNDM7ICogQ2FwYWJpbGl0aWVzIDIuIFRoZSByZXNlcnZlZCAwYjEwIGVuY29kaW5nIGlzIGZvbGRlZCBpbnRvCiYjNDM7ICogJiMzNDtub3Qgc3VwcG9ydGVkJiMzNDsgc28gY2FsbGVycyBvbmx5IG5lZWQgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSB0aHJlZQomIzQzOyAqIGRlZmluZWQgdmFsdWVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBvbmUgb2YgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FLAomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWSBvcgomIzQzOyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILgomIzQzOyAqLwomIzQzO3U4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdTMyIHJlZzsKJiM0MzsKJiM0MzsJaWYgKHBjaWVfY2FwYWJpbGl0eV9yZWFkX2R3b3JkKHBkZXYsIFBDSV9FWFBfREVWQ0FQMiwgJmFtcDtyZWcpKQomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOwomIzQzOwlpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHJlZykpCiYjNDM7CQlyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7CiYjNDM7CiYjNDM7CXN3aXRjaCAoRklFTERfR0VUKFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9NQVNLLCByZWcpKSB7CiYjNDM7CWNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOgomIzQzOwkJcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9UUEhfT05MWTsKJiM0MzsJY2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDoKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTsKJiM0MzsJfQomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKTsKJiM0MzsKIC8qCiAgKiBSZXR1cm4gdGhlIHNpemUgb2YgU1QgdGFibGUuIElmIFNUIHRhYmxlIGlzIG5vdCBpbiBUUEggUmVxdWVzdGVyIEV4dGVuZGVkCiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSAmIzQzOyAxLgpAQCAtMTg0LDkgJiM0MzsyMzIsNiBAQCB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAKIAkvKiBDaGVjayBTVCB0YWJsZSBsb2NhdGlvbiBmaXJzdCAqLwogCWxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7Ci0KLQkvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogZGVmaW5lZCBpbiBwY2lfcmVncy5oICovCi0JbG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTsKIAlpZiAobG9jICE9IFBDSV9UUEhfTE9DX0NBUCkKIAkJcmV0dXJuIDA7CiAKQEAgLTIzMSwyMCAmIzQzOzI3NiwyMiBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKQogfQogCiAvKioKLSAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQKLSAqIHdpdGggYSBzcGVjaWZpYyBDUFUKJiM0MzsgKiBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkKJiM0MzsgKiBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBDUFUsIHdpdGggZXhwbGljaXQgcmVxdWVzdGVyIHR5cGUgc2VsZWN0aW9uCiAgKiBAcGRldjogUENJIGRldmljZQogICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKQomIzQzOyAqIEByZXFfdHlwZTogVFBIIHJlcXVlc3RlciB0eXBlIHRvIHNlbGVjdCBTVCBuYW1lc3BhY2UKICAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkCiAgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWQKICAqCi0gKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEKLSAqIHNwZWNpZmljIENQVSBhcyBpbmRpY2F0ZWQgYnkgY3B1LgomIzQzOyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLAomIzQzOyAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgVFBIIHJlcXVlc3RlciB0eXBlIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBTVCBuYW1lc3BhY2UuCiYjNDM7ICogVmFsaWRhdGVzIHJlcXVlc3RlciB0eXBlIGFnYWluc3QgaGFyZHdhcmUgbmVnb3RpYXRlZCBjYXBhYmlsaXR5IGxpbWl0cy4KICAqCiAgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiAgKi8KLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKLQkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKQomIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkJICAgIHU4IHJlcV90eXBlLCB1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZykKIHsKICNpZmRlZiBDT05GSUdfQUNQSQogCXN0cnVjdCBwY2lfZGV2ICpycDsKQEAgLTI1Myw2ICYjNDM7MzAwLDEwIEBAIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAl1MzIgY3B1X3VpZDsKIAlpbnQgcmV0OwogCiYjNDM7CWlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHwKJiM0MzsJCXJlcV90eXBlICZndDsgcGRldi0mZ3Q7dHBoX21heF90eXBlKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJcmV0ID0gYWNwaV9nZXRfY3B1X3VpZChjcHUsICZhbXA7Y3B1X3VpZCk7CiAJaWYgKHJldCAhPSAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMjY4LDM1ICYjNDM7MzE5LDU0IEBAIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JKnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi0mZ3Q7dHBoX3JlcV90eXBlLCAmYW1wO2luZm8pOwomIzQzOwkqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCByZXFfdHlwZSwgJmFtcDtpbmZvKTsKIAotCXBjaV9kYmcocGRldiwgJiMzNDtnZXQgc3RlZXJpbmcgdGFnOiBtZW1fdHlwZT0lcywgY3B1PSVkLCB0YWc9JSMwNHhcbiYjMzQ7LAomIzQzOwlwY2lfZGJnKHBkZXYsICYjMzQ7Z2V0IHN0ZWVyaW5nIHRhZzogbWVtX3R5cGU9JXMsIHJlcV90eXBlPSV1LCBjcHU9JWQsIHRhZz0lIzA0eFxuJiMzNDssCiAJCShtZW1fdHlwZSA9PSBUUEhfTUVNX1RZUEVfVk0pID8gJiMzNDt2b2xhdGlsZSYjMzQ7IDogJiMzNDtwZXJzaXN0ZW50JiMzNDssCi0JCWNwdSwgKnRhZyk7CiYjNDM7CQlyZXFfdHlwZSwgY3B1LCAqdGFnKTsKIAogCXJldHVybiAwOwogI2Vsc2UKIAlyZXR1cm4gLUVOT0RFVjsKICNlbmRpZgogfQotRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTsKJiM0MztFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KTsKIAogLyoqCi0gKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5CiYjNDM7ICogcGNpZV90cGhfZ2V0X2NwdV9zdCgpIC0gUmV0cmlldmUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZAomIzQzOyAqIHdpdGggYSBzcGVjaWZpYyBDUFUKICAqIEBwZGV2OiBQQ0kgZGV2aWNlCi0gKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4Ci0gKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgd3JpdHRlbgomIzQzOyAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSkKJiM0MzsgKiBAY3B1OiBhc3NvY2lhdGVkIENQVSBpZAomIzQzOyAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZAogICoKLSAqIEZpZ3VyZSBvdXQgdGhlIHByb3BlciBsb2NhdGlvbiBvZiBTVCB0YWJsZSwgZWl0aGVyIGluIHRoZSBNU0ktWCB0YWJsZSBvcgotICogaW4gdGhlIFRQSCBFeHRlbmRlZCBDYXBhYmlsaXR5IHNwYWNlLCBhbmQgd3JpdGUgdGhlIFN0ZWVyaW5nIFRhZyBpbnRvCi0gKiB0aGUgU1QgZW50cnkgcG9pbnRlZCBieSBpbmRleC4KJiM0MzsgKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSwKJiM0MzsgKiB1c2luZyB0aGUgZGVmYXVsdCBuZWdvdGlhdGVkIFRQSCByZXF1ZXN0ZXIgdHlwZS4KICAqCiAgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pCiAgKi8KLWludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsCiYjNDM7CQkJdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQocGRldiwgbWVtX3R5cGUsIHBkZXYtJmd0O3RwaF9tYXhfdHlwZSwKJiM0MzsJCQkJICAgICAgIGNwdSwgdGFnKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2llX3RwaF9zZXRfc3RfZW50cmllcyAtIEJhdGNoIHNldCBTdGVlcmluZyBUYWcgZW50cmllcyBpbiB0aGUgU1QgdGFibGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBzdGFydDogc3RhcnRpbmcgU1QgdGFibGUgaW5kZXgKJiM0MzsgKiBAY291bnQ6IG51bWJlciBvZiBjb250aWd1b3VzIGVudHJpZXMgdG8gd3JpdGUKJiM0MzsgKiBAdGFnczogYXJyYXkgb2YgdTE2IHRhZyB2YWx1ZXMgdG8gcHJvZ3JhbQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gZW50cmllcywgb3IgbmVnYXRpdmUgZXJybm8KJiM0MzsgKi8KJiM0MztpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCwKJiM0MzsJCQkgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpCiB7Ci0JdTMyIGxvYzsKIAlpbnQgZXJyID0gMDsKJiM0MzsJdTMyIGxvYywgaTsKIAogCWlmICghcGRldi0mZ3Q7dHBoX2NhcCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zMDYsNyAmIzQzOzM3Niw3IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKIAogCS8qIE5vIG5lZWQgdG8gd3JpdGUgdGFnIGlmIGRldmljZSBpcyBpbiAmIzM0O05vIFNUIE1vZGUmIzM0OyAqLwogCWlmIChwZGV2LSZndDt0cGhfbW9kZSA9PSBQQ0lfVFBIX1NUX05TX01PREUpCi0JCXJldHVybiAwOwomIzQzOwkJcmV0dXJuIGNvdW50OwogCiAJLyoKIAkgKiBEaXNhYmxlIFRQSCBiZWZvcmUgdXBkYXRpbmcgU1QgdG8gYXZvaWQgcG90ZW50aWFsIGluc3RhYmlsaXR5IGFzCkBAIC0zMTUsMzEgJiM0MzszODUsNDcgQEAgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKQogCXNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgUENJX1RQSF9SRVFfRElTQUJMRSk7CiAKIAlsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpOwotCS8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqLwotCWxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7Ci0KLQlzd2l0Y2ggKGxvYykgewotCWNhc2UgUENJX1RQSF9MT0NfTVNJWDoKLQkJZXJyID0gcGNpX21zaXhfd3JpdGVfdHBoX3RhZyhwZGV2LCBpbmRleCwgdGFnKTsKLQkJYnJlYWs7Ci0JY2FzZSBQQ0lfVFBIX0xPQ19DQVA6Ci0JCWVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBpbmRleCwgdGFnKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyID0gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoZXJyKSB7Ci0JCXBjaWVfZGlzYWJsZV90cGgocGRldik7Ci0JCXJldHVybiBlcnI7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN3aXRjaCAobG9jKSB7CiYjNDM7CQljYXNlIFBDSV9UUEhfTE9DX01TSVg6CiYjNDM7CQkJZXJyID0gcGNpX21zaXhfd3JpdGVfdHBoX3RhZyhwZGV2LCBzdGFydCAmIzQzOyBpLCB0YWdzW2ldKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgUENJX1RQSF9MT0NfQ0FQOgomIzQzOwkJCWVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBzdGFydCAmIzQzOyBpLCB0YWdzW2ldKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsJCWlmIChlcnIgIT0gMCkgewomIzQzOwkJCXBjaV9lcnIocGRldiwgJiMzNDtmYWlsZWQgdG8gc2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSV1LCB0YWdzPSV1LCByZXQ9JWRcbiYjMzQ7LAomIzQzOwkJCQkobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gJiMzNDtNU0ktWCYjMzQ7IDogJiMzNDtTVCYjMzQ7LAomIzQzOwkJCQlzdGFydCAmIzQzOyBpLCB0YWdzW2ldLCBlcnIpOwomIzQzOwkJCXBjaWVfZGlzYWJsZV90cGgocGRldik7CiYjNDM7CQkJcmV0dXJuIGkgJmd0OyAwID8gaSA6IGVycjsKJiM0MzsJCX0KIAl9CiAKIAlzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIHBkZXYtJmd0O3RwaF9yZXFfdHlwZSk7CiAKLQlwY2lfZGJnKHBkZXYsICYjMzQ7c2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSVkLCB0YWc9JSMwNHhcbiYjMzQ7LAotCQkobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gJiMzNDtNU0ktWCYjMzQ7IDogJiMzNDtTVCYjMzQ7LCBpbmRleCwgdGFnKTsKJiM0MzsJcGNpX2RiZyhwZGV2LCAmIzM0O2JhdGNoIHNldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBzdGFydD0ldSwgY291bnQ9JXUgc3VjY2VzcyFcbiYjMzQ7LAomIzQzOwkJKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSA/ICYjMzQ7TVNJLVgmIzM0OyA6ICYjMzQ7U1QmIzM0Oywgc3RhcnQsIGNvdW50KTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gY291bnQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc2V0X3N0X2VudHJpZXMpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnkKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBpbmRleDogU1QgdGFibGUgZW50cnkgaW5kZXgKJiM0MzsgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgd3JpdHRlbgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKQomIzQzOyAqLwomIzQzO2ludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZykKJiM0Mzt7CiYjNDM7CWludCByZXQgPSBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhwZGV2LCBpbmRleCwgMSwgJmFtcDt0YWcpOwomIzQzOwlyZXR1cm4gcmV0ID09IDEgPyAwIDogcmV0OwogfQogRVhQT1JUX1NZTUJPTChwY2llX3RwaF9zZXRfc3RfZW50cnkpOwogCkBAIC0zNjYsMjYgJiM0Mzs0NTIsMjEgQEAgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogRVhQT1JUX1NZTUJPTChwY2llX2Rpc2FibGVfdHBoKTsKIAogLyoqCi0gKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGUKJiM0MzsgKiBwY2llX2VuYWJsZV90cGhfZXh0IC0gRW5hYmxlIFRQSCBzdXBwb3J0IHdpdGggc3BlY2lmaWMgU1QgbW9kZSBhbmQKJiM0MzsgKiByZXF1ZXN0ZXIgdHlwZQogICogQHBkZXY6IFBDSSBkZXZpY2UKLSAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZS4gQ3VycmVudCBzdXBwb3J0ZWQgbW9kZXMgaW5jbHVkZToKLSAqCi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlCi0gKiAgIC0gUENJX1RQSF9TVF9JVl9NT0RFOiBJbnRlcnJ1cHQgVmVjdG9yIE1vZGUKLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlCiYjNDM7ICogQG1vZGU6IFNUIG1vZGUgdG8gZW5hYmxlOiBQQ0lfVFBIX1NUXyhOU19NT0RFIC8gSVZfTU9ERSAvIERTX01PREUpCiYjNDM7ICogQHJlcV90eXBlOiBSZXF1ZXN0ZXIgdHlwZSB0byBlbmFibGU6IFBDSV9UUEhfUkVRXyhUUEhfT05MWSAvIEVYVF9UUEgpCiAgKgotICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmcKLSAqIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LiBBZGRpdGlvbmFsbHkgZGV0ZXJtaW5lIHdoYXQgdHlwZXMgb2YgcmVxdWVzdHMsCi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXIKLSAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQmIzM5O3MgY29tcGxldGVyIGNhcGFiaWxpdHkuCiYjNDM7ICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBhbmQgcmVxdWVzdGVyIHR5cGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZQomIzQzOyAqIGRldmljZSBiZWZvcmUgZW5hYmxpbmcgYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuCiAgKgogICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKQogICovCi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSkKJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSwgdTggcmVxX3R5cGUpCiB7CiAJdTMyIHJlZzsKIAl1OCBkZXZfbW9kZXM7Ci0JdTggcnBfcmVxX3R5cGU7CiAKIAkvKiBIb25vciAmIzM0O25vdHBoJiMzNDsga2VybmVsIHBhcmFtZXRlciAqLwogCWlmIChwY2lfdHBoX2Rpc2FibGVkKQpAQCAtMzk3LDYgJiM0Mzs0NzgsMTQgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAJaWYgKHBkZXYtJmd0O3RwaF9lbmFibGVkKQogCQlyZXR1cm4gLUVCVVNZOwogCiYjNDM7CWlmIChwZGV2LSZndDt0cGhfbWF4X3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwkvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgVFBIIHJlcXVlc3RlciB0eXBlIGNvbXBhdGliaWxpdHkgKi8KJiM0MzsJaWYgKHJlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUgfHwgcmVxX3R5cGUgPT0gMiB8fAomIzQzOwkJcmVxX3R5cGUgJmd0OyBwZGV2LSZndDt0cGhfbWF4X3R5cGUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgU1QgbW9kZSBjb21wYXRpYmlsaXR5ICovCiAJbW9kZSAmYW1wOz0gUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0s7CiAJZGV2X21vZGVzID0gZ2V0X3N0X21vZGVzKHBkZXYpOwpAQCAtNDA1LDIzICYjNDM7NDk0LDcgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpCiAKIAlwZGV2LSZndDt0cGhfbW9kZSA9IG1vZGU7CiAKLQkvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqLwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCAmYW1wO3JlZyk7Ci0JaWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKQotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIOwotCWVsc2UKLQkJcGRldi0mZ3Q7dHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7Ci0KLQkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqLwotCWlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHsKLQkJcnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7Ci0KLQkJLyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqLwotCQlwZGV2LSZndDt0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi0mZ3Q7dHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7Ci0JfQotCi0JaWYgKHBkZXYtJmd0O3RwaF9yZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKQotCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJcGRldi0mZ3Q7dHBoX3JlcV90eXBlID0gcmVxX3R5cGU7CiAKIAkvKiBXcml0ZSB0aGVtIGludG8gVFBIIGNvbnRyb2wgcmVnaXN0ZXIgKi8KIAlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi0mZ3Q7dHBoX2NhcCAmIzQzOyBQQ0lfVFBIX0NUUkwsICZhbXA7cmVnKTsKQEAgLTQzNSw2ICYjNDM7NTA4LDIzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKQogCiAJcmV0dXJuIDA7CiB9CiYjNDM7RVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGhfZXh0KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2llX2VuYWJsZV90cGggLSBFbmFibGUgVFBIIHN1cHBvcnQgZm9yIGRldmljZSB1c2luZyBhIHNwZWNpZmljIFNUIG1vZGUKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZTogUENJX1RQSF9TVF8oTlNfTU9ERSAvIElWX01PREUgLyBEU19NT0RFKQomIzQzOyAqCiYjNDM7ICogV3JhcHBlciBmb3IgcGNpZV9lbmFibGVfdHBoX2V4dCgpLCBhdXRvbWF0aWNhbGx5IHVzZXMgdGhlIHByZS1jYWNoZWQKJiM0MzsgKiB0cGhfbWF4X3R5cGUgdmFsdWUgKG5lZ290aWF0ZWQgbWF4aW11bSByZXF1ZXN0ZXIgdHlwZSBiZXR3ZWVuIGRldmljZSBhbmQKJiM0MzsgKiByb290IHBvcnQpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKQomIzQzOyAqLwomIzQzO2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCBwZGV2LSZndDt0cGhfbWF4X3R5cGUpOwomIzQzO30KIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTsKIAogdm9pZCBwY2lfcmVzdG9yZV90cGhfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCkBAIC01MDgsMTQgJiM0Mzs1OTgsNjAgQEAgdm9pZCBwY2lfbm9fdHBoKHZvaWQpCiAKIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewomIzQzOwl1OCB0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlOwogCWludCBudW1fZW50cmllczsKIAl1MzIgc2F2ZV9zaXplOwomIzQzOwl1MzIgcmVnID0gMDsKIAogCXBkZXYtJmd0O3RwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpOwogCWlmICghcGRldi0mZ3Q7dHBoX2NhcCkKIAkJcmV0dXJuOwogCiYjNDM7CS8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovCiYjNDM7CXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LSZndDt0cGhfY2FwICYjNDM7IFBDSV9UUEhfQ0FQLCAmYW1wO3JlZyk7CiYjNDM7CWlmIChGSUVMRF9HRVQoUENJX1RQSF9DQVBfRVhUX1RQSCwgcmVnKSkKJiM0MzsJCXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7CiYjNDM7CWVsc2UKJiM0MzsJCXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZOwomIzQzOwomIzQzOwkvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqLwomIzQzOwlpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7CiYjNDM7CQlycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTsKJiM0MzsJCS8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi8KJiM0MzsJCXRwaF9yZXFfdHlwZSA9IG1pbih0cGhfcmVxX3R5cGUsIHJwX3JlcV90eXBlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwZGV2LSZndDt0cGhfbWF4X3R5cGUgPSB0cGhfcmVxX3R5cGU7CiYjNDM7CiAJbnVtX2VudHJpZXMgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTsKIAlzYXZlX3NpemUgPSBzaXplb2YodTMyKSAmIzQzOyBudW1fZW50cmllcyAqIHNpemVvZih1MTYpOwogCXBjaV9hZGRfZXh0X2NhcF9zYXZlX2J1ZmZlcihwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgsIHNhdmVfc2l6ZSk7CiB9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogcGNpZV90cGhfZHNtX3N1cHBvcnRlZCAtIENoZWNrIGlmIHJvb3QgcG9ydCBleHBvc2VzIFRQSCBTVCBfRFNNCiYjNDM7ICogQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gdHJ1ZSBpZiByb290IHBvcnQgb2YgQHBkZXYgcHJvdmlkZXMgVFBIIFNUIERTTSBmdW5jdGlvbiwKJiM0MzsgKiBmYWxzZSBvdGhlcndpc2UgKEFDUEkgZGlzYWJsZWQgb3IgRFNNIG1pc3NpbmcpLgomIzQzOyAqLwomIzQzO2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7I2lmZGVmIENPTkZJR19BQ1BJCiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7CiYjNDM7CWFjcGlfaGFuZGxlIGhhbmRsZTsKJiM0MzsKJiM0MzsJaWYgKCFycCB8fCAhcnAtJmd0O2J1cyB8fCAhcnAtJmd0O2J1cy0mZ3Q7YnJpZGdlKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwloYW5kbGUgPSBBQ1BJX0hBTkRMRShycC0mZ3Q7YnVzLSZndDticmlkZ2UpOwomIzQzOwlpZiAoIWhhbmRsZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIGFjcGlfY2hlY2tfZHNtKGhhbmRsZSwgJmFtcDtwY2lfYWNwaV9kc21fZ3VpZCwgNywKJiM0MzsJCQkgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7CiYjNDM7I2Vsc2UKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2llX3RwaF9kc21fc3VwcG9ydGVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYwppbmRleCA4MzAzNjlmZjg3OGRiZS4uYzQwN2MyMTdiNjQ5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMKQEAgLTYwLDYgJiM0Mzs2MCwyNiBAQCBzdGF0aWMgYm9vbCBkaXNhYmxlX2RlbnlsaXN0OwogbW9kdWxlX3BhcmFtKGRpc2FibGVfZGVueWxpc3QsIGJvb2wsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2RlbnlsaXN0LCAmIzM0O0Rpc2FibGUgdXNlIG9mIGRldmljZSBkZW55bGlzdC4gRGlzYWJsaW5nIHRoZSBkZW55bGlzdCBhbGxvd3MgYmluZGluZyB0byBkZXZpY2VzIHdpdGgga25vd24gZXJyYXRhIHRoYXQgbWF5IGxlYWQgdG8gZXhwbG9pdGFibGUgc3RhYmlsaXR5IG9yIHNlY3VyaXR5IGlzc3VlcyB3aGVuIGFjY2Vzc2VkIGJ5IHVudHJ1c3RlZCB1c2Vycy4mIzM0Oyk7CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IHRwaF9wb2xpY3k7CiYjNDM7c3RhdGljIGludCB0cGhfcG9saWN5X3NldChjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULAomIzQzOwkJCQkgICAgIFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QpOwomIzQzO30KJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgdHBoX3BhcmFtX29wcyA9IHsKJiM0MzsJLnNldCA9IHRwaF9wb2xpY3lfc2V0LAomIzQzOwkuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsCiYjNDM7fTsKJiM0Mzttb2R1bGVfcGFyYW1fY2IodHBoX3BvbGljeSwgJmFtcDt0cGhfcGFyYW1fb3BzLCAmYW1wO3RwaF9wb2xpY3ksIDA2NDQpOwomIzQzO01PRFVMRV9QQVJNX0RFU0ModHBoX3BvbGljeSwKJiM0MzsJJiMzNDtHbG9iYWwgVFBIIHBvbGljeSBsZXZlbCAoMD1kZWZhdWx0IE5vLVNUKTpcbiYjMzQ7CiYjNDM7CSYjMzQ7MCA9IE5vLVNUIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xuJiMzNDsKJiM0MzsJJiMzNDsgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbW1pbmcgdW5hdmFpbGFibGVcbiYjMzQ7CiYjNDM7CSYjMzQ7MSA9IEFkZCBJViBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcbiYjMzQ7CiYjNDM7CSYjMzQ7ICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVSBzb3VyY2VzXG4mIzM0OwomIzQzOwkmIzM0OzIgPSBBZGQgRFMgbW9kZTogUkVTT0xWRSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlLCBTVCBmb3IgRE1BQlVGL0NQVSBzb3VyY2VzO1xuJiMzNDsKJiM0MzsJJiMzNDsgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcbiYjMzQ7KTsKJiM0MzsKIHN0YXRpYyBib29sIHZmaW9fcGNpX2Rldl9pbl9kZW55bGlzdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzd2l0Y2ggKHBkZXYtJmd0O3ZlbmRvcikgewpAQCAtMTQyLDYgJiM0MzsxNjIsOSBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2luaXRfZGV2KHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2KQogI2lmZGVmIENPTkZJR19WRklPX1BDSV9WR0EKIAl2ZGV2LSZndDtkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhOwogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19QQ0lFX1RQSAomIzQzOwl2ZGV2LSZndDt0cGhfcG9saWN5ID0gdHBoX3BvbGljeTsKJiM0MzsjZW5kaWYKIAogCXJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwppbmRleCBhMTBlZDczM2YwZTNhZi4uOTdkYWQ2ZGI2OWUzOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwpAQCAtMjIsNiAmIzQzOzIyLDcgQEAKIAogI2luY2x1ZGUgJmx0O2xpbnV4L2ZzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGNpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91YWNjZXNzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdmZpby5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKQEAgLTEwODUsNiAmIzQzOzEwODYsMTQ2IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSkKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgdmZpb19maW5kX2NhcF9zdGFydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MpCiYjNDM7ewomIzQzOwl1OCBjYXA7CiYjNDM7CWludCBiYXNlID0gKHBvcyAmZ3Q7PSBQQ0lfQ0ZHX1NQQUNFX1NJWkUpID8gUENJX0NGR19TUEFDRV9TSVpFIDoKJiM0MzsJCQkJCQkgUENJX1NURF9IRUFERVJfU0laRU9GOwomIzQzOwljYXAgPSB2ZGV2LSZndDtwY2lfY29uZmlnX21hcFtwb3NdOwomIzQzOwomIzQzOwlpZiAoY2FwID09IFBDSV9DQVBfSURfQkFTSUMpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJLyogWFhYIENhbiB3ZSBoYXZlIHRvIGFidXR0aW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlPyAqLwomIzQzOwl3aGlsZSAocG9zIC0gMSAmZ3Q7PSBiYXNlICZhbXA7JmFtcDsgdmRldi0mZ3Q7cGNpX2NvbmZpZ19tYXBbcG9zIC0gMV0gPT0gY2FwKQomIzQzOwkJcG9zLS07CiYjNDM7CiYjNDM7CXJldHVybiBwb3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHZmaW9fdXBkYXRlX3RwaF92Y29uZmlnX2J5dGVzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJCSAgaW50IHBvcykKJiM0Mzt7CiYjNDM7CV9fbGUzMiAqdnB0ciA9IChfX2xlMzIgKikmYW1wO3ZkZXYtJmd0O3Zjb25maWdbcG9zICYjNDM7IFBDSV9UUEhfQ0FQXTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgdmFsID0gbGUzMl90b19jcHUoKnZwdHIpOwomIzQzOwomIzQzOwlpZiAoIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikpIHsKJiM0MzsJCS8qIFJlbW92ZSBleHRlbmRlZCBUUEggaWYgcm9vdC1wb3J0IGRvZXNuJiMzOTt0IHN1cHBvcnQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCkgewomIzQzOwkJLyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHwKJiM0MzsJCQkgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTsKJiM0MzsJfSBlbHNlIGlmICh2ZGV2LSZndDt0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QpIHsKJiM0MzsJCS8qIFJlcG9ydCBvbmx5IE5vLVNUIGFuZCBJViBtb2RlcyBzdXBwb3J0ZWQgKi8KJiM0MzsJCXZhbCAmYW1wOz0gflBDSV9UUEhfQ0FQX1NUX0RTOwomIzQzOwkJLyogUmVtb3ZlIFNUIGxvY2F0aW9uIGFuZCBzaXplIGlmIGRldiBkb2VzbiYjMzk7dCBzdXBwb3J0IElWIG1vZGUgKi8KJiM0MzsJCWlmICghKHZhbCAmYW1wOyBQQ0lfVFBIX0NBUF9TVF9JVikpCiYjNDM7CQkJdmFsICZhbXA7PSB+KFBDSV9UUEhfQ0FQX0xPQ19NQVNLIHwgUENJX1RQSF9DQVBfU1RfTUFTSyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnZwdHIgPSBjcHVfdG9fbGUzMih2YWwpOwomIzQzOwomIzQzOwkvKiBCYWNrdXAgdXBkYXRlZCBjYXBhYmlsaXR5IHJlZ2lzdGVyIHZhbHVlICovCiYjNDM7CXZkZXYtJmd0O3RwaF9jYXBfdmlydCA9IHZhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovCiYjNDM7c3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogV2Ugb25seSB2aXJ0dWFsaXplIHRoZSBUUEggaGVhZGVyIChleGNsdWRpbmcgdGhlIFNUIHRhYmxlKS4KJiM0MzsJICogRm9yIHRoZSBTVCB0YWJsZSAoaWYgYW55KSwgdGhlIHJlYWQgb3BlcmF0aW9uIHJldHVybnMgMCBieQomIzQzOwkgKiBkZWZhdWx0LCBhbmQgdGhlIHdyaXRlIG9wZXJhdGlvbiBpcyBkaXNjYXJkZWQgYnkgZGVmYXVsdC4KJiM0MzsJICovCiYjNDM7CWlmIChhbGxvY19wZXJtX2JpdHMocGVybSwgUENJX1RQSF9CQVNFX1NJWkVPRikpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcF9zZXRkKHBlcm0sIDAsIEFMTF9WSVJULCBOT19XUklURSk7CiYjNDM7CXBfc2V0ZChwZXJtLCBQQ0lfVFBIX0NBUCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTsKJiM0MzsKJiM0MzsJcF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsCiYjNDM7CSAgICAgICBQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSyB8IFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSyk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcywKJiM0MzsJCQkJaW50IGNvdW50LCBzdHJ1Y3QgcGVybV9iaXRzICpwZXJtLAomIzQzOwkJCQlpbnQgb2Zmc2V0LCBfX2xlMzIgKnZhbCkKJiM0Mzt7CiYjNDM7CWlmIChvZmZzZXQgJmd0Oz0gUENJX1RQSF9CQVNFX1NJWkVPRikgewomIzQzOwkJKnZhbCA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvZmZzZXQgJmd0Oz0gUENJX1RQSF9DQVAgJmFtcDsmYW1wOyAhdmRldi0mZ3Q7dHBoX29wdF9pbikgewomIzQzOwkJKnZhbCA9IGNwdV90b19sZTMyKDApOwomIzQzOwkJcmV0dXJuIGNvdW50OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsCiYjNDM7CQkJCSBpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sCiYjNDM7CQkJCSBpbnQgb2Zmc2V0LCBfX2xlMzIgdmFsKQomIzQzO3sKJiM0MzsJdTE2IHN0YXJ0ID0gdmZpb19maW5kX2NhcF9zdGFydCh2ZGV2LCBwb3MpOwomIzQzOwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtJmd0O3BkZXY7CiYjNDM7CXUzMiBvcmdfY3RybCwgbmV3X2N0cmwsIGNhcDsKJiM0MzsJdTggbW9kZSwgcmVxLCBvcmdfcmVxOwomIzQzOwlfX2xlMzIgb3JnX3ZhbCA9IDA7CiYjNDM7CXUxNiBjbWQ7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7dHBoX29wdF9pbiB8fCBvZmZzZXQgJmd0Oz0gUENJX1RQSF9CQVNFX1NJWkVPRikKJiM0MzsJCXJldHVybiBjb3VudDsKJiM0MzsKJiM0MzsJY21kID0gdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZSh2ZGV2KTsKJiM0MzsKJiM0MzsJb3JnX2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSZhbXA7dmRldi0mZ3Q7dmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NUUkxdKTsKJiM0MzsJdmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgJmFtcDtvcmdfdmFsKTsKJiM0MzsKJiM0MzsJcmV0ID0gdmZpb19kZWZhdWx0X2NvbmZpZ193cml0ZSh2ZGV2LCBwb3MsIGNvdW50LCBwZXJtLCBvZmZzZXQsIHZhbCk7CiYjNDM7CWlmIChyZXQgIT0gY291bnQpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJbmV3X2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSZhbXA7dmRldi0mZ3Q7dmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NUUkxdKTsKJiM0MzsJaWYgKG5ld19jdHJsID09IG9yZ19jdHJsKQomIzQzOwkJZ290byBvdXQ7IC8qIE9ubHkgY2FyZSBhYm91dCBjaGFuZ2VzIGluIFRQSF9DVFJMLiAqLwomIzQzOwomIzQzOwljYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKSZhbXA7dmRldi0mZ3Q7dmNvbmZpZ1tzdGFydCAmIzQzOyBQQ0lfVFBIX0NBUF0pOwomIzQzOwltb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBuZXdfY3RybCk7CiYjNDM7CXJlcSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0ssIG5ld19jdHJsKTsKJiM0MzsJaWYgKG1vZGUgJmd0OyBQQ0lfVFBIX1NUX0RTX01PREUgfHwgIShjYXAgJmFtcDsgKDF1ICZsdDsmbHQ7IG1vZGUpKSB8fCByZXEgPT0gMHgyIHx8CiYjNDM7CQkocmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEggJmFtcDsmYW1wOyAhKGNhcCAmYW1wOyBQQ0lfVFBIX0NBUF9FWFRfVFBIKSkpCiYjNDM7CQlnb3RvIHJlc3RvcmU7IC8qIERyb3AgaW52YWxpZCBvciB1bnN1cHBvcnRlZCB3cml0ZSB2YWx1ZSAqLwomIzQzOwomIzQzOwlvcmdfcmVxID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSywgb3JnX2N0cmwpOwomIzQzOwlpZiAocmVxID09IG9yZ19yZXEpCiYjNDM7CQlnb3RvIHJlc3RvcmU7IC8qIE9ubHkgY2FyZSBhYm91dCByZXF1ZXN0ZXIgZW5hYmxlICovCiYjNDM7CiYjNDM7CWlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHsKJiM0MzsJCXJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcmVxKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlOwomIzQzOwl9IGVsc2UgaWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFKSB7CiYjNDM7CQlwY2llX2Rpc2FibGVfdHBoKHZkZXYtJmd0O3BkZXYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWdvdG8gb3V0OwomIzQzOwomIzQzO3Jlc3RvcmU6CiYjNDM7CXZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTsKJiM0MztvdXQ6CiYjNDM7CXZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTsKJiM0MzsJcmV0dXJuIGNvdW50OwomIzQzO30KJiM0MzsKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgcGVybWlzc2lvbiB0YWJsZXMKICAqLwpAQCAtMTEwMCw2ICYjNDM7MTI0MSw3IEBAIHZvaWQgdmZpb19wY2lfdW5pbml0X3Blcm1fYml0cyh2b2lkKQogCiAJZnJlZV9wZXJtX2JpdHMoJmFtcDtlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pOwogCWZyZWVfcGVybV9iaXRzKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTsKJiM0MzsJZnJlZV9wZXJtX2JpdHMoJmFtcDtlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0pOwogfQogCiBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpCkBAIC0xMTIwLDYgJiM0MzsxMjYyLDkgQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKQogCS8qIEV4dGVuZGVkIGNhcGFiaWxpdGllcyAqLwogCXJldCB8PSBpbml0X3BjaV9leHRfY2FwX2Vycl9wZXJtKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9FUlJdKTsKIAlyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybSgmYW1wO2VjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfUFdSXSk7CiYjNDM7CXJldCB8PSBpbml0X3BjaV9leHRfY2FwX3RwaF9wZXJtKCZhbXA7ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTsKJiM0MzsJZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdLnJlYWRmbiA9IHZmaW9fdHBoX2NvbmZpZ19yZWFkOwomIzQzOwllY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTsKIAllY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1ZORFJdLndyaXRlZm4gPSB2ZmlvX3Jhd19jb25maWdfd3JpdGU7CiAJZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9EVlNFQ10ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTsKIApAQCAtMTEyOSwyMyAmIzQzOzEyNzQsNiBAQCBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcykKLXsKLQl1OCBjYXA7Ci0JaW50IGJhc2UgPSAocG9zICZndDs9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOgotCQkJCQkJIFBDSV9TVERfSEVBREVSX1NJWkVPRjsKLQljYXAgPSB2ZGV2LSZndDtwY2lfY29uZmlnX21hcFtwb3NdOwotCi0JaWYgKGNhcCA9PSBQQ0lfQ0FQX0lEX0JBU0lDKQotCQlyZXR1cm4gMDsKLQotCS8qIFhYWCBDYW4gd2UgaGF2ZSB0byBhYnV0dGluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZT8gKi8KLQl3aGlsZSAocG9zIC0gMSAmZ3Q7PSBiYXNlICZhbXA7JmFtcDsgdmRldi0mZ3Q7cGNpX2NvbmZpZ19tYXBbcG9zIC0gMV0gPT0gY2FwKQotCQlwb3MtLTsKLQotCXJldHVybiBwb3M7Ci19Ci0KIHN0YXRpYyBpbnQgdmZpb19tc2lfY29uZmlnX3JlYWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLAogCQkJCWludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSwKIAkJCQlpbnQgb2Zmc2V0LCBfX2xlMzIgKnZhbCkKQEAgLTE3MDEsNiAmIzQzOzE4MjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAkJcmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEgpCiYjNDM7CQkJdmZpb191cGRhdGVfdHBoX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcyk7CiAKIAkJLyoKIAkJICogSWYgd2UmIzM5O3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMKaW5kZXggM2YxMWE5NjI0YjljMDMuLmI4ZDlkODQwYTkzYjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwpAQCAtMTMsNiAmIzQzOzEzLDggQEAKICNpbmNsdWRlICZsdDtsaW51eC9hcGVydHVyZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlYnVnZnMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V2ZW50ZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CkBAIC0zMCw2ICYjNDM7MzIsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW9tbXVmZC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS1wMnBkbWEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXRwaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9maWxlLmgmZ3Q7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfRUVIKQogI2luY2x1ZGUgJmx0O2FzbS9lZWguaCZndDsKQEAgLTEyNywxMCAmIzQzOzEzMCwyMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGgoc3RydWN0IHNlcV9maWxlICpzZXEsCiYjNDM7CQkJCQkgICAgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZmaW9fcGNpX2NvcmVfZGVidWdmc19wcml2YXRlKHNlcSk7CiYjNDM7CiYjNDM7CXNlcV9wcmludGYoc2VxLCAmIzM0O3BvbGljeT0ldSBjYXAtdmlydD0weCV4IG9wdC1pbj0ldVxuJiMzNDssCiYjNDM7CQl2ZGV2LSZndDt0cGhfcG9saWN5LCB2ZGV2LSZndDt0cGhfY2FwX3ZpcnQsIHZkZXYtJmd0O3RwaF9vcHRfaW4pOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiAvKgotICogZGlzYWJsZV9pZGxlX2QzIGFuZCBub2ludHhtYXNrIGFyZSB3cml0YWJsZSBtb2R1bGUgcGFyYW1ldGVycyBsYXRjaGVkCi0gKiBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJiMzOTtzIGVmZmVjdGl2ZSB2YWx1ZSBjYW4gZGlmZmVyIGZyb20gdGhlCi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlcwomIzQzOyAqIGRpc2FibGVfaWRsZV9kMywgbm9pbnR4bWFzayBhbmQgdHBoX3BvbGljeSBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnMKJiM0MzsgKiBsYXRjaGVkIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UmIzM5O3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbQomIzQzOyAqIHRoZSBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlcwogICogaGVyZSBmb3IgdmlzaWJpbGl0eTsgcmVhZC1vbmx5IHBhcmFtZXRlcnMgY2FuJiMzOTt0IGRyaWZ0IGFuZCBhcmUgb21pdHRlZC4KICAqLwogc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQpAQCAtMTQ2LDYgJiM0MzsxNTksOCBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJCQkJICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTsKIAlkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCAmIzM0O2Rpc2FibGVfaWRsZV9kMyYjMzQ7LCBwY2lfZGlyLAogCQkJCSAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfZGlzYWJsZV9pZGxlX2QzKTsKJiM0MzsJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldiwgJiMzNDt0cGgmIzM0OywgcGNpX2RpciwKJiM0MzsJCQkJICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGgpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCkBAIC02MTAsNiAmIzQzOzYyNSw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiAJCWdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlOwogCiAJdmRldi0mZ3Q7cmVzZXRfd29ya3MgPSAhcmV0OwomIzQzOwl2ZGV2LSZndDt0cGhfb3B0X2luID0gZmFsc2U7CiYjNDM7CS8qIFJlc2V0IFRQSCBzdGF0dXMgb24gbmV3IHVzZXIgc2Vzc2lvbiAqLwomIzQzOwlwY2llX2Rpc2FibGVfdHBoKHZkZXYtJmd0O3BkZXYpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCXZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTsKIAlpZiAoIXZkZXYtJmd0O3BjaV9zYXZlZF9zdGF0ZSkKQEAgLTc1Nyw2ICYjNDM7Nzc1LDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCiAJdmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2UodmRldik7CiAKJiM0MzsJLyogUmVzZXQgVFBIIHN0YXR1cyBvbiBleGl0IHVzZXIgc2Vzc2lvbiAqLwomIzQzOwlwY2llX2Rpc2FibGVfdHBoKHZkZXYtJmd0O3BkZXYpOwomIzQzOwogCS8qCiAJICogSWYgd2UgaGF2ZSBzYXZlZCBzdGF0ZSwgcmVzdG9yZSBpdC4gIElmIHdlIGNhbiByZXNldCB0aGUgZGV2aWNlLAogCSAqIGV2ZW4gYmV0dGVyLiAgUmVzZXR0aW5nIHdpdGggY3VycmVudCBzdGF0ZSBzZWVtcyBiZXR0ZXIgdGhhbgpAQCAtMTU1OCw2ICYjNDM7MTU3OSw3IEBAIGxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCwKIAlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPQogCQljb250YWluZXJfb2YoY29yZV92ZGV2LCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UsIHZkZXYpOwogCXZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnOwomIzQzOwlpbnQgcmV0OwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFZGSU9fREVWSUNFX0dFVF9JTkZPOgpAQCAtMTU2OSw5ICYjNDM7MTU5MSwxNSBAQCBsb25nIHZmaW9fcGNpX2NvcmVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHVuc2lnbmVkIGludCBjbWQsCiAJY2FzZSBWRklPX0RFVklDRV9JT0VWRU5URkQ6CiAJCXJldHVybiB2ZmlvX3BjaV9pb2N0bF9pb2V2ZW50ZmQodmRldiwgdWFyZyk7CiAJY2FzZSBWRklPX0RFVklDRV9QQ0lfSE9UX1JFU0VUOgotCQlyZXR1cm4gdmZpb19wY2lfaW9jdGxfcGNpX2hvdF9yZXNldCh2ZGV2LCB1YXJnKTsKJiM0MzsJCXJldCA9IHZmaW9fcGNpX2lvY3RsX3BjaV9ob3RfcmVzZXQodmRldiwgdWFyZyk7CiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlwY2llX2Rpc2FibGVfdHBoKHZkZXYtJmd0O3BkZXYpOwomIzQzOwkJcmV0dXJuIHJldDsKIAljYXNlIFZGSU9fREVWSUNFX1JFU0VUOgotCQlyZXR1cm4gdmZpb19wY2lfaW9jdGxfcmVzZXQodmRldiwgdWFyZyk7CiYjNDM7CQlyZXQgPSB2ZmlvX3BjaV9pb2N0bF9yZXNldCh2ZGV2LCB1YXJnKTsKJiM0MzsJCWlmICghcmV0KQomIzQzOwkJCXBjaWVfZGlzYWJsZV90cGgodmRldi0mZ3Q7cGRldik7CiYjNDM7CQlyZXR1cm4gcmV0OwogCWNhc2UgVkZJT19ERVZJQ0VfU0VUX0lSUVM6CiAJCXJldHVybiB2ZmlvX3BjaV9pb2N0bF9zZXRfaXJxcyh2ZGV2LCB1YXJnKTsKIAlkZWZhdWx0OgpAQCAtMTYwNyw2ICYjNDM7MTYzNSwyOTkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwl1MzIgbG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19DQVApIHsKJiM0MzsJCXJldHVybiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTsKJiM0MzsJfSBlbHNlIGlmIChsb2MgPT0gUENJX1RQSF9MT0NfTVNJWCkgewomIzQzOwkJcmV0ID0gcGNpX21zaXhfdmVjX2NvdW50KHBkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9IGVsc2UgewomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQomIzQzO3sKJiM0MzsJdTMyIGZsYWdzID0gVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9QSDsKJiM0MzsKJiM0MzsJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgJmd0Oz0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCAmYW1wOyZhbXA7CiYjNDM7CQkodmRldi0mZ3Q7dHBoX2NhcF92aXJ0ICZhbXA7IFBDSV9UUEhfQ0FQX1NUX0lWKSkgewomIzQzOwkJZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9OT05FOwomIzQzOwkJZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUY7CiYjNDM7CQlpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKJiM0MzsJCQlmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVTsKJiM0MzsJfQomIzQzOwlpZiAodmRldi0mZ3Q7dHBoX3BvbGljeSAmZ3Q7PSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUICZhbXA7JmFtcDsKJiM0MzsJCSh2ZGV2LSZndDt0cGhfY2FwX3ZpcnQgJmFtcDsgUENJX1RQSF9DQVBfU1RfRFMpKSB7CiYjNDM7CQlpZiAodmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHZkZXYpICZndDsgMCkgewomIzQzOwkJCWZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTsKJiM0MzsJCQlmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRjsKJiM0MzsJCQlpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKJiM0MzsJCQkJZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7CiYjNDM7CQl9CiYjNDM7CQlpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKJiM0MzsJCQlmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmbGFnczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgICB1MzIgZmxhZ3MsCiYjNDM7CQkJCSAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIF9fdXNlciAqYXJnLAomIzQzOwkJCQkgICAgIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB0cGg7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghcGNpZV9zdGRfdHBoX3N1cHBvcnRlZCh2ZGV2LSZndDtwZGV2KSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJcmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwKJiM0MzsJCQlWRklPX0RFVklDRV9GRUFUVVJFX0dFVCB8IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULAomIzQzOwkJCXNpemVvZih0cGgpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dHBoLCBhcmcsIHNpemVvZih0cGgpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQpIHsKJiM0MzsJCWlmICh0cGguZmxhZ3MgIT0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXZkZXYtJmd0O3RwaF9vcHRfaW4gPSAxOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDt0cGhfb3B0X2luKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXRwaC5mbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZhbXA7dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3Jlc29sdmVfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXUzMiBmbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTsKJiM0MzsJdTMyIGFsbG93X3NyYyA9IDA7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyAoVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9QSCB8CiYjNDM7CQkgICAgIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfU1QpKQomIzQzOwkJYWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGOwomIzQzOwlpZiAoZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0NQVV9TVCkKJiM0MzsJCWFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8CiYjNDM7CQkJICAgICBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UOwomIzQzOwomIzQzOwlyZXR1cm4gYWxsb3dfc3JjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKGludCBmZCwgYm9vbCBleHRlbmRlZCwgdTE2ICpzdCwgdTggKnBoKQomIzQzO3sKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZG1hYnVmID0gZG1hX2J1Zl9nZXQoZmQpOwomIzQzOwlpZiAoSVNfRVJSKGRtYWJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkbWFidWYpOwomIzQzOwomIzQzOwlyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJaWYgKHJldCA9PSAwKQomIzQzOwkJcmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBzdCwgcGgpOwomIzQzOwlkbWFfcmVzdl91bmxvY2soZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHNyY19iaXRzLAomIzQzOwkJCQkgICB1MzIgc3JjX2huZGwsIGJvb2wgZXh0ZW5kZWQsIHUxNiAqc3QpCiYjNDM7ewomIzQzOwl1OCByZXFfdHlwZSA9IGV4dGVuZGVkID8gUENJX1RQSF9SRVFfRVhUX1RQSCA6IFBDSV9UUEhfUkVRX1RQSF9PTkxZOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJdTggcGg7CiYjNDM7CiYjNDM7CWlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRikKJiM0MzsJCXJldCA9IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKHNyY19obmRsLCBleHRlbmRlZCwgc3QsICZhbXA7cGgpOwomIzQzOwllbHNlIGlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSkKJiM0MzsJCXJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIFRQSF9NRU1fVFlQRV9WTSwKJiM0MzsJCQkJCSAgICAgIHJlcV90eXBlLCBzcmNfaG5kbCwgc3QpOwomIzQzOwllbHNlIGlmIChzcmNfYml0cyAmYW1wOyBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UKQomIzQzOwkJcmV0ID0gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQocGRldiwgVFBIX01FTV9UWVBFX1BNLAomIzQzOwkJCQkJICAgICAgcmVxX3R5cGUsIHNyY19obmRsLCBzdCk7CiYjNDM7CWVsc2UgaWYgKHNyY19iaXRzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSkKJiM0MzsJCSpzdCA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChyZXQgIT0gMCkKJiM0MzsJCSpzdCA9IDA7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQl1MzIgZmxhZ3MsCiYjNDM7CQkJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgX191c2VyICphcmcsCiYjNDM7CQkJc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgcmVzb2x2ZTsKJiM0MzsJdTMyIHVzZXJfZmxhZ3MsIGFsbG93X3NyYzsKJiM0MzsJYm9vbCBleHRlbmRlZDsKJiM0MzsJdTE2IHRhZyA9IDA7CiYjNDM7CXU4IHBoID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDt0cGhfb3B0X2luKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCwKJiM0MzsJCQkJIHNpemVvZihyZXNvbHZlKSk7CiYjNDM7CWlmIChyZXQgIT0gMSkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWlmIChjb3B5X2Zyb21fdXNlcigmYW1wO3Jlc29sdmUsIGFyZywgc2l6ZW9mKHJlc29sdmUpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwl1c2VyX2ZsYWdzID0gcmVzb2x2ZS5mbGFnczsKJiM0MzsJZXh0ZW5kZWQgPSAhISh1c2VyX2ZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCk7CiYjNDM7CWlmIChleHRlbmRlZCAmYW1wOyZhbXA7ICFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHZkZXYtJmd0O3BkZXYpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl1c2VyX2ZsYWdzICZhbXA7PSB+VkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEOwomIzQzOwomIzQzOwlhbGxvd19zcmMgPSB2ZmlvX3BjaV9nZXRfdHBoX3Jlc29sdmVfYWxsb3dfc3JjKHZkZXYpOwomIzQzOwlpZiAodXNlcl9mbGFncyAmYW1wOyB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXJlc29sdmUudmFsaWQgPSAwOwomIzQzOwlyZXNvbHZlLnBoID0gMDsKJiM0MzsJcmVzb2x2ZS5zdCA9IDA7CiYjNDM7CiYjNDM7CWlmICh1c2VyX2ZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKSB7CiYjNDM7CQlyZXQgPSB2ZmlvX3BjaV9nZXRfZG1hYnVmX3RwaChyZXNvbHZlLnNyYywgZXh0ZW5kZWQsCiYjNDM7CQkJCQkgICAgICAmYW1wO3RhZywgJmFtcDtwaCk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXNvbHZlLnBoID0gcGg7CiYjNDM7CQlyZXNvbHZlLnZhbGlkID0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIOwomIzQzOwkJaWYgKHZkZXYtJmd0O3RwaF9wb2xpY3kgJmd0Oz0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCkgewomIzQzOwkJCXJlc29sdmUuc3QgPSB0YWc7CiYjNDM7CQkJcmVzb2x2ZS52YWxpZCB8PSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1Q7CiYjNDM7CQl9CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyh2ZGV2LSZndDtwZGV2LCB1c2VyX2ZsYWdzLCByZXNvbHZlLnNyYywKJiM0MzsJCQkJICAgICAgZXh0ZW5kZWQsICZhbXA7dGFnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJlc29sdmUudmFsaWQgfD0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUOwomIzQzOwlyZXNvbHZlLnN0ID0gdGFnOwomIzQzOwomIzQzO291dDoKJiM0MzsJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsICZhbXA7cmVzb2x2ZSwgc2l6ZW9mKHJlc29sdmUpKSA/IC1FRkFVTFQgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0Mzt7CiYjNDM7CXUzMiBmbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTsKJiM0MzsJdTMyIGFsbG93X3NyYyA9IDA7CiYjNDM7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRikKJiM0MzsJCWFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRjsKJiM0MzsJaWYgKGZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfQ1BVKQomIzQzOwkJYWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFIHwKJiM0MzsJCQkgICAgIFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQ7CiYjNDM7CWlmIChmbGFncyAmYW1wOyBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkUpCiYjNDM7CQlhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FOwomIzQzOwomIzQzOwlyZXR1cm4gYWxsb3dfc3JjOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAomIzQzOwkJCQl1MzIgZmxhZ3MsCiYjNDM7CQkJCXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHRwaF9zdDsKJiM0MzsJdTMyIHVzZXJfZmxhZ3MsIGFsbG93X3NyYywgc3Rfc2l6ZTsKJiM0MzsJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LSZndDtwZGV2OwomIzQzOwlib29sIGV4dGVuZGVkLCBzdG9wX29uX3plcm87CiYjNDM7CXUzMiAqc3JjX2huZGwgPSBOVUxMOwomIzQzOwl1MTYgKnRhZ3MgPSBOVUxMOwomIzQzOwlpbnQgcmV0LCBpOwomIzQzOwl1MTYgY21kOwomIzQzOwomIzQzOwlpZiAoIXZkZXYtJmd0O3RwaF9vcHRfaW4gfHwgdmRldi0mZ3Q7dHBoX3BvbGljeSA9PSBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQkJIHNpemVvZih0cGhfc3QpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7dHBoX3N0LCBhcmcsIHNpemVvZih0cGhfc3QpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwl1c2VyX2ZsYWdzID0gdHBoX3N0LmZsYWdzOwomIzQzOwlleHRlbmRlZCA9ICEhKHVzZXJfZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTsKJiM0MzsJaWYgKGV4dGVuZGVkICZhbXA7JmFtcDsgIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQodmRldi0mZ3Q7cGRldikpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CXVzZXJfZmxhZ3MgJmFtcDs9IH5WRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7CiYjNDM7CiYjNDM7CXN0b3Bfb25femVybyA9ICEhKHVzZXJfZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpOwomIzQzOwlpZiAoc3RvcF9vbl96ZXJvICZhbXA7JmFtcDsgKHVzZXJfZmxhZ3MgJmFtcDsgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl1c2VyX2ZsYWdzICZhbXA7PSB+VkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1Q7CiYjNDM7CiYjNDM7CWFsbG93X3NyYyA9IHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHZkZXYpOwomIzQzOwlpZiAodXNlcl9mbGFncyAmYW1wOyB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXN0X3NpemUgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUodmRldik7CiYjNDM7CWlmICh0cGhfc3Quc3RhcnQgJmd0Oz0gc3Rfc2l6ZSB8fCB0cGhfc3QuY291bnQgJmd0OyBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8CiYjNDM7CQl0cGhfc3QuY291bnQgPT0gMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoISh1c2VyX2ZsYWdzICZhbXA7IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSkpIHsKJiM0MzsJCXNyY19obmRsID0gbWVtZHVwX2FycmF5X3VzZXIodTY0X3RvX3VzZXJfcHRyKHRwaF9zdC5kZXN0cyksCiYjNDM7CQkJCQkgICAgIHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUzMikpOwomIzQzOwkJaWYgKElTX0VSUihzcmNfaG5kbCkpCiYjNDM7CQkJcmV0dXJuIFBUUl9FUlIoc3JjX2huZGwpOwomIzQzOwl9CiYjNDM7CXRhZ3MgPSBrY2FsbG9jKHRwaF9zdC5jb3VudCwgc2l6ZW9mKHUxNiksIEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghdGFncykgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0cGhfc3QuY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyhwZGV2LCB1c2VyX2ZsYWdzLAomIzQzOwkJCQkJICAgICAgc3JjX2huZGwgPyBzcmNfaG5kbFtpXSA6IDAsCiYjNDM7CQkJCQkgICAgICBleHRlbmRlZCwgJmFtcDt0YWdzW2ldKTsKJiM0MzsJCWlmIChyZXQgfHwgKHN0b3Bfb25femVybyAmYW1wOyZhbXA7IHRhZ3NbaV0gPT0gMCkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGkgJmd0OyAwKSB7CiYjNDM7CQljbWQgPSB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHZkZXYpOwomIzQzOwkJcmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJpZXMocGRldiwgdHBoX3N0LnN0YXJ0LCBpLCB0YWdzKTsKJiM0MzsJCXZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTsKJiM0MzsJfQomIzQzOwomIzQzO291dDoKJiM0MzsJa2ZyZWUodGFncyk7CiYjNDM7CWtmcmVlKHNyY19obmRsKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiAJCQkJdm9pZCBfX3VzZXIgKmFyZywgc2l6ZV90IGFyZ3N6KQogewpAQCAtMTYyNSw2ICYjNDM7MTk0NiwxNiBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwogCWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOgogCQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwomIzQzOwljYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEg6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHZkZXYsIGZsYWdzLCBhcmcsCiYjNDM7CQkJCQkJCSBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7CiYjNDM7CWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRToKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUodmRldiwgZmxhZ3MsCiYjNDM7CQkJCQkJCSBhcmcsIGFyZ3N6KTsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDoKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwppbmRleCBjMTZmNDYwYzAxZDY4MS4uNTM1MTgzOWMxMzM4YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwpAQCAtMyw2ICYjNDM7Myw3IEBACiAgKi8KICNpbmNsdWRlICZsdDtsaW51eC9kbWEtYnVmLW1hcHBpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wY2ktcDJwZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BjaS10cGguaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwogCiAjaW5jbHVkZSAmIzM0O3ZmaW9fcGNpX3ByaXYuaCYjMzQ7CkBAIC0xOSw3ICYjNDM7MjAsMTcgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgewogCXUzMiBucl9yYW5nZXM7CiAJc3RydWN0IGtyZWYga3JlZjsKIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwotCXU4IHJldm9rZWQgOiAxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBVcGRhdGVzIHByb3RlY3RlZCBieSBkbWFidWYtJmd0O3Jlc3YsIEByZXZva2VkIGFkZGl0aW9uYWxseQomIzQzOwkgKiBwcm90ZWN0ZWQgYnkgbWVtb3J5X2xvY2suCiYjNDM7CSAqLwomIzQzOwl1MTYgdHBoX3N0X2V4dDsKJiM0MzsJdTggdHBoX3N0OwomIzQzOwlib29sIHJldm9rZWQ7CiYjNDM7CXU4IHRwaF9zdF92YWxpZDoxOwomIzQzOwl1OCB0cGhfc3RfZXh0X3ZhbGlkOjE7CiYjNDM7CXU4IHRwaF9waDoyOwogfTsKIAogc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLApAQCAtMzAsNyAmIzQzOzQxLDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCWlmICghYXR0YWNobWVudC0mZ3Q7cGVlcjJwZWVyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlpZiAocHJpdi0mZ3Q7cmV2b2tlZCkKJiM0MzsJaWYgKFJFQURfT05DRShwcml2LSZndDtyZXZva2VkKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIWRtYV9idWZfYXR0YWNoX3Jldm9jYWJsZShhdHRhY2htZW50KSkKQEAgLTY5LDYgJiM0Mzs4MCwyNiBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQkJCXUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsKJiM0MzsJaWYgKGV4dGVuZGVkKSB7CiYjNDM7CQlpZiAoIXByaXYtJmd0O3RwaF9zdF9leHRfdmFsaWQpCiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJKnN0ZWVyaW5nX3RhZyA9IHByaXYtJmd0O3RwaF9zdF9leHQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAoIXByaXYtJmd0O3RwaF9zdF92YWxpZCkKJiM0MzsJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CQkqc3RlZXJpbmdfdGFnID0gcHJpdi0mZ3Q7dHBoX3N0OwomIzQzOwl9CiYjNDM7CSpwaCA9IHByaXYtJmd0O3RwaF9waDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAogCQkJCSAgIHN0cnVjdCBzZ190YWJsZSAqc2d0LAogCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKQEAgLTEwMSw2ICYjNDM7MTMyLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHsKIAkuYXR0YWNoID0gdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2gsCiYjNDM7CS5nZXRfcGNpX3RwaCA9IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgsCiAJLm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsCiAJLnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLAogCS5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLApAQCAtMzMzLDYgJiM0MzszNjUsNzIgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgICAgdTMyIGZsYWdzLAomIzQzOwkJCQkgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZywKJiM0MzsJCQkJICAgICAgc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggc2V0X3RwaDsKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiYjNDM7CXU4IGNvbXA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LSZndDtwZGV2KTsKJiM0MzsJaWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULAomIzQzOwkJCQkgc2l6ZW9mKHNldF90cGgpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CWlmIChzZXRfdHBoLmZsYWdzICZhbXA7IH4oVkZJT19ETUFfQlVGX1RQSF9TVCB8IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwomIzQzOwlpZiAoc2V0X3RwaC5waCAmYW1wOyB+MHgzKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmICgoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgJmFtcDsmYW1wOwomIzQzOwkgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSCkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpOwomIzQzOwlpZiAoSVNfRVJSKGRtYWJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkbWFidWYpOwomIzQzOwomIzQzOwlpZiAoZG1hYnVmLSZndDtvcHMgIT0gJmFtcDt2ZmlvX3BjaV9kbWFidWZfb3BzKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBvdXRfcHV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYgPSBkbWFidWYtJmd0O3ByaXY7CiYjNDM7CWlmIChwcml2LSZndDt2ZGV2ICE9IHZkZXYpIHsKJiM0MzsJCXJldCA9IC1FSU5WQUw7CiYjNDM7CQlnb3RvIG91dF9wdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi0mZ3Q7cmVzdiwgTlVMTCk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIG91dF9wdXQ7CiYjNDM7CiYjNDM7CXByaXYtJmd0O3RwaF9zdCAgICAgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWc7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF9leHQgICAgID0gc2V0X3RwaC5zdGVlcmluZ190YWdfZXh0OwomIzQzOwlwcml2LSZndDt0cGhfcGggICAgICAgICA9IHNldF90cGgucGg7CiYjNDM7CXByaXYtJmd0O3RwaF9zdF92YWxpZCAgID0gISEoc2V0X3RwaC5mbGFncyAmYW1wOyBWRklPX0RNQV9CVUZfVFBIX1NUKTsKJiM0MzsJcHJpdi0mZ3Q7dHBoX3N0X2V4dF92YWxpZCA9CiYjNDM7CQkhIShzZXRfdHBoLmZsYWdzICZhbXA7IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTsKJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKGRtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CXJldCA9IDA7CiYjNDM7CiYjNDM7b3V0X3B1dDoKJiM0MzsJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCkKIHsKIAlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKaW5kZXggZmNhOWQwZGZhYzkwZjguLjAzYzRhMDQxNDI2NGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaApAQCAtMTEsNiAmIzQzOzExLDEyIEBACiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovCiAjZGVmaW5lIFZGSU9fUENJX0lPRVZFTlRGRF9NQVgJCTEwMDAKIAomIzQzO2VudW0gdmZpb19wY2lfdHBoX3BvbGljeSB7CiYjNDM7CVZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QgPSAwLAomIzQzOwlWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSwKJiM0MzsJVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCA9IDIsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQgewogCXN0cnVjdCBsaXN0X2hlYWQJbmV4dDsKIAlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UJKnZkZXY7CkBAIC0xMTgsNiAmIzQzOzEyNCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCQkJCSAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZywKIAkJCQkgIHNpemVfdCBhcmdzeik7CiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiYjNDM7CQkJCSAgICAgIHUzMiBmbGFncywKJiM0MzsJCQkJICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsCiYjNDM7CQkJCSAgICAgIHNpemVfdCBhcmdzeik7CiB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwogdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpOwogI2Vsc2UKQEAgLTEyOCw2ICYjNDM7MTM4LDE0IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogewogCXJldHVybiAtRU5PVFRZOwogfQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50CiYjNDM7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwkJCQkgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLAomIzQzOwkJCQkgIHNpemVfdCBhcmdzeikKJiM0Mzt7CiYjNDM7CXJldHVybiAtRU5PVFRZOwomIzQzO30KIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogewogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAppbmRleCBkMTIwM2RhNTZmYzVmNy4uMTRlOGViNjFhNjJjMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCkBAIC0xMTMsNiAmIzQzOzExMywyOSBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewogCSAqLwogCXZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKIAomIzQzOwkvKioKJiM0MzsJICogQGdldF9wY2lfdHBoOgomIzQzOwkgKgomIzQzOwkgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yCiYjNDM7CSAqIHRoaXMgYnVmZmVyIHNvIGFuIGltcG9ydGVyIGNhbiBwcm9ncmFtIGEgbWF0Y2hpbmcgU1QvUEggaGludCBvbgomIzQzOwkgKiBvdXRib3VuZCBUTFBzIHRhcmdldGluZyB0aGUgZXhwb3J0ZXIgZm9yIHBlZXItdG8tcGVlciBETUEuCiYjNDM7CSAqCiYjNDM7CSAqIEBkbWFidWY6IERNQSBidWZmZXIgZm9yIHdoaWNoIHRvIHJldHJpZXZlIFRQSCBtZXRhZGF0YQomIzQzOwkgKiBAZXh0ZW5kZWQ6IGZhbHNlIGZvciA4LWJpdCBTVCwgdHJ1ZSBmb3IgMTYtYml0IEV4dGVuZGVkIFNUCiYjNDM7CSAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkCiYjNDM7CSAqICAgICAgICAgICAgICAgIG5hbWVzcGFjZQomIzQzOwkgKiBAcGg6IFJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnQgKDItYml0IHZhbHVlKQomIzQzOwkgKgomIzQzOwkgKiBPcHRpb25hbCBjYWxsYmFjayBmb3IgZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLiBDYWxsZWQgd2l0aAomIzQzOwkgKiAmYW1wO2RtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuCiYjNDM7CSAqIHRoZSBleHBvcnRlciBoYXMgbm8gbWV0YWRhdGEgZm9yIHRoZSByZXF1ZXN0ZWQgbmFtZXNwYWNlLgomIzQzOwkgKgomIzQzOwkgKiBSZXR1cm5lZCBtZXRhZGF0YSBmb2xsb3dzIHRoZSBsaWZldGltZSBydWxlcyBkb2N1bWVudGVkIGZvcgomIzQzOwkgKiBkbWFfYnVmX2dldF9wY2lfdHBoKCkuCiYjNDM7CSAqLwomIzQzOwlpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQkgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTsKJiM0MzsKIAkvKioKIAkgKiBAbWFwX2RtYV9idWY6CiAJICoKQEAgLTU2Myw2ICYjNDM7NTg2LDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCQkgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTsKIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwogdm9pZCBkbWFfYnVmX3VucGluKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7CiYjNDM7aW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCwKJiM0MzsJCQl1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTsKIAogc3RydWN0IGRtYV9idWYgKmRtYV9idWZfZXhwb3J0KGNvbnN0IHN0cnVjdCBkbWFfYnVmX2V4cG9ydF9pbmZvICpleHBfaW5mbyk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmgKaW5kZXggYmU2OGNkMTdmMmY4MzMuLmFlYWY3MDFlNzk2NWIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS10cGguaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaApAQCAtOSw2ICYjNDM7OSw4IEBACiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSAogI2RlZmluZSBMSU5VWF9QQ0lfVFBIX0gKIAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKJiM0MzsKIC8qCiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50CiAgKiBkZXBlbmRpbmcgb24gdGhlIG1lbW9yeSB0eXBlOiBWb2xhdGlsZSBNZW1vcnkgb3IgUGVyc2lzdGVudCBNZW1vcnkuIFdoZW4gYQpAQCAtMjEsMjYgJiM0MzsyMyw2OSBAQCBlbnVtIHRwaF9tZW1fdHlwZSB7CiB9OwogCiAjaWZkZWYgQ09ORklHX1BDSUVfVFBICiYjNDM7LyoqCiYjNDM7ICogcGNpZV9zdGRfdHBoX3N1cHBvcnRlZCAtIGNoZWNrIHN0YW5kYXJkIFRQSCByZXF1ZXN0ZXIgc3VwcG9ydAomIzQzOyAqIEBwZGV2OiBQQ0kgZGV2aWNlCiYjNDM7ICovCiYjNDM7I2RlZmluZSBwY2llX3N0ZF90cGhfc3VwcG9ydGVkKHBkZXYpIFwKJiM0MzsJKChwZGV2KS0mZ3Q7dHBoX21heF90eXBlICZndDs9IFBDSV9UUEhfUkVRX1RQSF9PTkxZKQomIzQzOy8qKgomIzQzOyAqIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQgLSBjaGVjayBleHRlbmRlZCBUUEggcmVxdWVzdGVyIHN1cHBvcnQKJiM0MzsgKiBAcGRldjogUENJIGRldmljZQomIzQzOyAqLwomIzQzOyNkZWZpbmUgcGNpZV9leHRfdHBoX3N1cHBvcnRlZChwZGV2KSBcCiYjNDM7CSgocGRldiktJmd0O3RwaF9tYXhfdHlwZSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKQogaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCSAgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKTsKLWludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCQllbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKJiM0MztpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCwKJiM0MzsJCQkgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpOwomIzQzO2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKJiM0MzsJCQkgICAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTsKJiM0MztpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSwKIAkJCXVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTsKIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7Ci1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7CiYjNDM7aW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKTsKJiM0MztpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKTsKIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiYjNDM7dTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiYjNDM7dTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwomIzQzO2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAjZWxzZQomIzQzOyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZQomIzQzOyNkZWZpbmUgcGNpZV9leHRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZQogc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQl1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpCiB7IHJldHVybiAtRUlOVkFMOyB9CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiYjNDM7CQkJCQkgIHVuc2lnbmVkIGludCBzdGFydCwKJiM0MzsJCQkJCSAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpCiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCiYjNDM7CQkJCQkgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAomIzQzOwkJCQkJICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwKJiM0MzsJCQkJCSAgdTE2ICp0YWcpCiYjNDM7eyByZXR1cm4gLUVJTlZBTDsgfQogc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LAogCQkJCSAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKQogeyByZXR1cm4gLUVJTlZBTDsgfQogc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfQotc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSkKJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLAomIzQzOwkJCQkgICAgICB1OCByZXFfdHlwZSkKJiM0Mzt7IHJldHVybiAtRUlOVkFMOyB9CiYjNDM7c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKQogeyByZXR1cm4gLUVJTlZBTDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sgcmV0dXJuIDA7IH0KJiM0MztzdGF0aWMgaW5saW5lIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sgcmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7IH0KJiM0MztzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7eyByZXR1cm4gUENJX1RQSF9SRVFfRElTQUJMRTsgfQomIzQzO3N0YXRpYyBpbmxpbmUgdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7eyByZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7IH0KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKICNlbmRpZiAvKiBMSU5VWF9QQ0lfVFBIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDY0YjMwOGI2ZTYxYzE5Li41ZWQ1ODc5OWE5YjEyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC00NzIsNyAmIzQzOzQ3Miw2IEBAIHN0cnVjdCBwY2lfZGV2IHsKIAl1bnNpZ25lZCBpbnQJYXRzX2VuYWJsZWQ6MTsJCS8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovCiAJdW5zaWduZWQgaW50CXBhc2lkX2VuYWJsZWQ6MTsJLyogUHJvY2VzcyBBZGRyZXNzIFNwYWNlIElEICovCiAJdW5zaWduZWQgaW50CXByaV9lbmFibGVkOjE7CQkvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovCi0JdW5zaWduZWQgaW50CXRwaF9lbmFibGVkOjE7CQkvKiBUTFAgUHJvY2Vzc2luZyBIaW50cyAqLwogCXVuc2lnbmVkIGludAlmbV9lbmFibGVkOjE7CQkvKiBGbGl0IE1vZGUgKHNlZ21lbnQgY2FwdHVyZWQpICovCiAJdW5zaWduZWQgaW50CWlzX21hbmFnZWQ6MTsJCS8qIE1hbmFnZWQgdmlhIGRldnJlcyAqLwogCXVuc2lnbmVkIGludAlpc19tc2lfbWFuYWdlZDoxOwkvKiBNU0kgcmVsZWFzZSB2aWEgZGV2cmVzIGluc3RhbGxlZCAqLwpAQCAtNTg4LDcgJiM0Mzs1ODcsMTAgQEAgc3RydWN0IHBjaV9kZXYgewogCXU4IHJlc2V0X21ldGhvZHNbUENJX05VTV9SRVNFVF9NRVRIT0RTXTsgLyogSW4gcHJpb3JpdHkgb3JkZXIgKi8KIAogI2lmZGVmIENPTkZJR19QQ0lFX1RQSAotCXUxNgkJdHBoX2NhcDsJLyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovCiYjNDM7CXUxNgkJdHBoX2NhcDoxMzsJLyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovCiYjNDM7CXUxNgkJdHBoX21heF90eXBlOjI7IC8qIE5lZ290aWF0ZWQgbWF4IFRQSCByZXF1ZXN0ZXIgdHlwZQomIzQzOwkJCQkJICAgYmV0d2VlbiBkZXZpY2UgYW5kIHJvb3QgcG9ydCAqLwomIzQzOwl1MTYJCXRwaF9lbmFibGVkOjE7CS8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi8KIAl1OAkJdHBoX21vZGU7CS8qIFRQSCBtb2RlICovCiAJdTgJCXRwaF9yZXFfdHlwZTsJLyogVFBIIHJlcXVlc3RlciB0eXBlICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmgKaW5kZXggOWExNjc0YzE1MmFhMjkuLmQ2MDY0ZmE5ZTgwYTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaApAQCAtMTQ5LDYgJiM0MzsxNDksOSBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgewogCXN0cnVjdCBub3RpZmllcl9ibG9jawluYjsKIAlzdHJ1Y3Qgcndfc2VtYXBob3JlCW1lbW9yeV9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQJZG1hYnVmczsKJiM0MzsJdTgJCQl0cGhfb3B0X2luOwomIzQzOwl1OAkJCXRwaF9wb2xpY3k7CiYjNDM7CXUzMgkJCXRwaF9jYXBfdmlydDsKIH07CiAKIGVudW0gdmZpb19wY2lfaW9fd2lkdGggewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKaW5kZXggNWRlNjE4YTNhNWVlZWUuLjliYzNjZWY3YTg5YWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKQEAgLTE1MzQsNiAmIzQzOzE1MzQsMTUwIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgewogICovCiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMgogCiYjNDM7LyoqCiYjNDM7ICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGEKJiM0MzsgKiB3aXRoIGEgdmZpby1leHBvcnRlZCBkbWEtYnVmLiBUaGUgZG1hLWJ1ZiBtdXN0IGhhdmUgYmVlbiBjcmVhdGVkIGJ5CiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGIG9uIHRoaXMgZGV2aWNlLCBhbmQgdGhlIGRldmljZSBtdXN0IHJlcG9ydAomIzQzOyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0cwomIzQzOyAqIGNhcnJ5aW5nIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIGFkZGl0aW9uYWxseSByZXF1aXJlIHRoZSBkZXZpY2UgdG8KJiM0MzsgKiByZXBvcnQgdGhlIEV4dGVuZGVkIFRQSCBDb21wbGV0ZXIgZW5jb2RpbmcuIE90aGVyd2lzZSB0aGUgaW9jdGwKJiM0MzsgKiByZXR1cm5zIC1FT1BOT1RTVVBQLgomIzQzOyAqCiYjNDM7ICogQGRtYWJ1Zl9mZCBpcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHJldHVybmVkIGJ5IFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRi4KJiM0MzsgKgomIzQzOyAqIDgtYml0IFNUIChAc3RlZXJpbmdfdGFnKSBhbmQgMTYtYml0IEV4dGVuZGVkIFNUIChAc3RlZXJpbmdfdGFnX2V4dCkgYXJlCiYjNDM7ICogZGlzdGluY3QgbmFtZXNwYWNlcy4gQGZsYWdzIGlzIHRoZSBhdXRob3JpdGF0aXZlIHZhbGlkaXR5IG1hc2sgZm9yIHRoZQomIzQzOyAqIHR3byBuYW1lc3BhY2VzOiBWRklPX0RNQV9CVUZfVFBIX1NUIG1hcmtzIEBzdGVlcmluZ190YWcgdmFsaWQgYW5kCiYjNDM7ICogVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQgbWFya3MgQHN0ZWVyaW5nX3RhZ19leHQgdmFsaWQuIEFuIGltcG9ydGVyCiYjNDM7ICogcmVxdWVzdHMgb25lIG5hbWVzcGFjZSBhbmQgcmVjZWl2ZXMgdGhlIG1hdGNoaW5nIHZhbHVlLgomIzQzOyAqCiYjNDM7ICogRWFjaCBTRVQgZnVsbHkgcmVwbGFjZXMgdGhlIGRtYS1idWYmIzM5O3MgVFBIIHN0YXRlIGZvciBmdXR1cmUgcXVlcmllcwomIzQzOyAqIG9ubHkuIEEgbmFtZXNwYWNlIHdob3NlIGZsYWcgYml0IGlzIGNsZWFyIGlzIHJlcG9ydGVkIGFzIHVuc3VwcG9ydGVkCiYjNDM7ICogdG8gZnV0dXJlIGltcG9ydGVyczsgYW4gaW1wb3J0ZXIgdGhhdCBoYXMgYWxyZWFkeSByZXRyaWV2ZWQgYSB2YWx1ZQomIzQzOyAqIGlzIHVuYWZmZWN0ZWQuIEBmbGFncyA9PSAwIGxlYXZlcyBib3RoIG5hbWVzcGFjZXMgdW5zdXBwb3J0ZWQgZm9yCiYjNDM7ICogZnV0dXJlIGltcG9ydGVycy4KJiM0MzsgKgomIzQzOyAqIEBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLgomIzQzOyAqCiYjNDM7ICogVW5kZWZpbmVkIEBmbGFncyBhbmQgQHBoIGJpdHMgbXVzdCBhbHdheXMgYmUgemVyby4KJiM0MzsgKgomIzQzOyAqIFVzZXJzcGFjZSBtdXN0IGNvbmZpZ3VyZSBUUEggYmVmb3JlIGhhbmRpbmcgdGhlIGRtYS1idWYgZmQgdG8gYW4KJiM0MzsgKiBpbXBvcnRlci4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEggMTMKJiM0MzsKJiM0MzsjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1QJCSgxICZsdDsmbHQ7IDApCiYjNDM7I2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVAkJKDEgJmx0OyZsdDsgMSkKJiM0MzsKJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7CiYjNDM7CV9fczMyCWRtYWJ1Zl9mZDsKJiM0MzsJX191MzIJZmxhZ3M7CiYjNDM7CV9fdTE2CXN0ZWVyaW5nX3RhZ19leHQ7CiYjNDM7CV9fdTgJc3RlZXJpbmdfdGFnOwomIzQzOwlfX3U4CXBoOwomIzQzO307CiYjNDM7CiYjNDM7LyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBICQkxNAomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRQkxNQomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1QJMTYKJiM0MzsKJiM0MzsvKgomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIIC0gQ29udHJvbCBhbmQgcXVlcnkgUENJIFRQSCBjYXBhYmlsaXRpZXMKJiM0MzsgKgomIzQzOyAqIFNFVDogT3B0LWluIHRvIFRQSCBmZWF0dXJlIGZvciB0aGUgZGV2aWNlOyBmbGFncyBtdXN0IGJlIHplcm8uCiYjNDM7ICogR0VUOiBSZXR1cm4gc3VwcG9ydGVkIFRQSCBjYXBhYmlsaXR5IGJpdHMgKHNlZSBWRklPX0RFVklDRV9UUEhfQ0FQXyopCiYjNDM7ICogICAgICBpbiBmbGFncy4gUmV0dXJucyBlcnJvciBpZiBTRVQgaGFzIG5vdCBiZWVuIGludm9rZWQgZmlyc3QuCiYjNDM7ICoKJiM0MzsgKiBVc2Vyc3BhY2UgbXVzdCBmaXJzdCBpbnZva2UgU0VUIG9uIHRoaXMgZmVhdHVyZSB0byBlbmFibGUgVFBIIHN1cHBvcnQsCiYjNDM7ICogcmVjZWl2ZSB2YWxpZCBjYXBhYmlsaXR5IGJpdHMgdmlhIEdFVCwgZ2FpbiBwZXJtaXNzaW9uIGZvciB1c2luZwomIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkUgLyBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVCwgYW5kIGFjY2VzcwomIzQzOyAqIHRoZSB2aXJ0dWFsaXplZCBUUEggY2FwYWJpbGl0eSByZWdpc3RlcnMgdmlhIFZGSU8gY29uZmlnIHNwYWNlIGFjY2Vzc2VzLgomIzQzOyAqLwomIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB7CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzO307CiYjNDM7CiYjNDM7LyogRE1BQlVGIHNvdXJjZSByZXNvbHZlIHByb2Nlc3NpbmcgaGludCBzdXBwb3J0ZWQgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEgJKDF1ICZsdDsmbHQ7IDApCiYjNDM7LyogRE1BQlVGIHNvdXJjZSBUUEhfU1QgYmF0Y2ggcHJvZ3JhbW1pbmcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRgkJKDF1ICZsdDsmbHQ7IDEpCiYjNDM7LyogQ1BVIHNvdXJjZSBUUEhfU1QgYmF0Y2ggcHJvZ3JhbW1pbmcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVQkJKDF1ICZsdDsmbHQ7IDIpCiYjNDM7LyogTk9ORSBzb3VyY2UgKG1lYW5zIHN0ZWVyaW5nIHRhZyBpcyB6ZXJvKSBUUEhfU1QgYmF0Y2ggcHJvZ3JhbW1pbmcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkUJCSgxdSAmbHQ7Jmx0OyAzKQomIzQzOy8qIERNQUJVRiBzb3VyY2UgcmVzb2x2ZSBzdGVlcmluZyB0YWcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1NUCSgxdSAmbHQ7Jmx0OyA0KQomIzQzOy8qIENQVSBzb3VyY2UgcmVzb2x2ZSBzdGVlcmluZyB0YWcgc3VwcG9ydGVkICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUCSgxdSAmbHQ7Jmx0OyA1KQomIzQzOwomIzQzOy8qCiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgVFBIIGF0dHJpYnV0ZXMgZnJvbSBnaXZlbiBzb3VyY2UKJiM0MzsgKgomIzQzOyAqIEdFVCBvbmx5CiYjNDM7ICoKJiM0MzsgKiBSZXF1aXJlcyBwcmlvciBzdWNjZXNzZnVsIFNFVCBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCwgb3RoZXJ3aXNlCiYjNDM7ICogdGhpcyBmZWF0dXJlIHdpbGwgcmV0dXJuIGVycm9yLgomIzQzOyAqCiYjNDM7ICogQGZsYWdzOiBJTiAtIHNvdXJjZSB0eXBlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX1NSQ18qKQomIzQzOyAqICAgICAgICAgYW5kIHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2Ugc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpCiYjNDM7ICogQHNyYzogICBJTiAtIHNvdXJjZSBpZGVudGlmaWVyLCBlLmcuIGRtYWJ1ZiBmZCB3aGVuIFNSQ19ETUFCVUYgaXMgc2V0IGluCiYjNDM7ICogICAgICAgICBmbGFncwomIzQzOyAqIEB2YWxpZDogT1VUIC0gYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcywgc2VlCiYjNDM7ICogICAgICAgICBWRklPX0RFVklDRV9UUEhfVkFMSURfKgomIzQzOyAqIEBwaDogICAgT1VUIC0gVFBIIHByb2Nlc3NpbmcgaGludCAodmFsaWQgd2hlbiBWQUxJRF9QSCBpcyBzZXQgaW4gdmFsaWQpCiYjNDM7ICogQHN0OiAgICBPVVQgLSBUUEggc3RlZXJpbmcgdGFnICh2YWxpZCB3aGVuIFZBTElEX1NUIGlzIHNldCBpbiB2YWxpZCkKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzOwlfX3UzMiBzcmM7CiYjNDM7CV9fdTggIHZhbGlkOwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIICgxdSAmbHQ7Jmx0OyAwKSAvKiBwaCBob2xkcyB2YWxpZCBwcm9jZXNzaW5nIGhpbnQgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVCAoMXUgJmx0OyZsdDsgMSkgLyogc3QgaG9sZHMgdmFsaWQgc3RlZXJpbmcgdGFnICovCiYjNDM7CV9fdTggIHBoOwomIzQzOwlfX3UxNiBzdDsKJiM0Mzt9OwomIzQzOwomIzQzOy8qCiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1QgLSBCYXRjaCBwcm9ncmFtIGFyY2hpdGVjdGVkIHN0ZWVyaW5nIHRhZwomIzQzOyAqIHRhYmxlIGVudHJpZXMKJiM0MzsgKiBSZXR1cm4gdmFsdWU6ICZndDs9MCA9IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzOwomIzQzOyAqICAgICAgICAgICAgICAgJmx0OzAgID0gbmVnYXRpdmUgZXJybm8KJiM0MzsgKgomIzQzOyAqIFNFVCBvbmx5CiYjNDM7ICoKJiM0MzsgKiBBZGRpdGlvbmFsIGNvbnN0cmFpbnQ6IFVzZXJzcGFjZSBtdXN0IGNvbXBsZXRlIHR3byBwcmVyZXF1aXNpdGUgc3RlcHMKJiM0MzsgKiBiZWZvcmUgaW52b2tpbmcgdGhpcyBmZWF0dXJlOgomIzQzOyAqIDEuIENhbGwgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggd2l0aCBTRVQgdG8gZW5hYmxlIHZmaW8gVFBIIHBlcm1pc3Npb247CiYjNDM7ICogMi4gV3JpdGUgdGhlIFRQSCBjb250cm9sIHJlZ2lzdGVyIHRvIGFjdGl2YXRlIGRldmljZSBoYXJkd2FyZSBUUEggbG9naWMuCiYjNDM7ICoKJiM0MzsgKiBAZmxhZ3M6IElOIC0gc291cmNlIHR5cGUgc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfU1JDXyopIGFuZAomIzQzOyAqICAgICAgICAgc3RlZXJpbmcgdGFnIG5hbWVzcGFjZSBzZWxlY3RvciAoc2VlIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRCkgYW5kCiYjNDM7ICogICAgICAgICBmYWlsdXJlIHBvbGljeSAoc2VlIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUKQomIzQzOyAqIEBzdGFydDogSU4gLSBmaXJzdCBzdGVlcmluZyB0YWcgdGFibGUgaW5kZXggLyBNU0ktWCB2ZWN0b3IKJiM0MzsgKiBAY291bnQ6IElOIC0gbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byBwcm9ncmFtCiYjNDM7ICogQGRlc3RzOiBJTiAtIHVzZXIgcG9pbnRlciB0byBhcnJheSBvZiBzb3VyY2UgdTMyIHZhbHVlcwomIzQzOyAqLwomIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB7CiYjNDM7CV9fdTMyIGZsYWdzOwomIzQzOwlfX3UxNiBzdGFydDsKJiM0MzsJX191MTYgY291bnQ7CiYjNDM7CV9fYWxpZ25lZF91NjQgZGVzdHM7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBTb3VyY2UgaG9sZHMgZG1hLWJ1ZiBmZCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgICAgICAoMXUgJmx0OyZsdDsgMCkKJiM0MzsvKiBVc2UgZXh0ZW5kZWQgMTYtYml0IHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2UgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRAkoMXUgJmx0OyZsdDsgMSkKJiM0MzsvKiBTb3VyY2UgaG9sZHMgdm9sYXRpbGUgbWVtb3J5IENQVSBJRCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUJKDF1ICZsdDsmbHQ7IDIpCiYjNDM7LyogU291cmNlIGhvbGRzIHBlcnNpc3RlbnQgbWVtb3J5IENQVSBJRCAqLwomIzQzOyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVAkoMXUgJmx0OyZsdDsgMykKJiM0MzsvKiBUUEhfU1Qgb25seTogc2V0IHN0ZWVyaW5nIHRhZyB0byB6ZXJvICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUJKDF1ICZsdDsmbHQ7IDQpCiYjNDM7LyogVFBIX1NUIG9ubHk6IGZhaWwgaWYgcmVzb2x2ZWQgc3RlZXJpbmcgdGFnIGlzIHplcm8gKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUCSgxdSAmbHQ7Jmx0OyA1KQomIzQzOwogLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovCiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTM5MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDUwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpIGFuZCBETUEtQlVGIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCYjMzk7cyBhbGwgYWJvdXQgaW50ZWdyYXRpbmcgUENJZSBUUEggd2l0aCBETUEtQlVGLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBWRklPIGZyYW1ld29yay4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBub24tdHJpdmlhbCBwaWVjZSBvZiB3b3JrLCB0b3VjaGluZyBhIGdvb2QgY2h1bmsgb2YgdGhlIGtlcm5lbDogYGRtYS1idWYuY2AsIHRoZSBgcGNpL3RwaC5jYCBhbmQgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBWRklPIFBDSSBjb2RlLCBhcyB3ZWxsIGFzIHNldmVyYWwgaGVhZGVyIGZpbGVzLiBUaGUgYnJlYWR0aCBvZiB0aGUgY2hhbmdlcyBpbW1lZGlhdGVseSBzaWduYWxzIHNvbWUgY29tcGxleGl0eSBhbmQgdGhlIG5lZWQgZm9yIGNhcmVmdWwgc2NydXRpbnkuCgpJdCYjMzk7cyBjbGVhciB0aGF0IHRoZSBhaW0gaGVyZSBpcyB0byBleHBvc2UgVFBIIGZ1bmN0aW9uYWxpdHkgdG8gdXNlcnNwYWNlIHRocm91Z2ggVkZJTy4gSSBzZWUgbmV3IFZGSU8gaW9jdGxzIGJlaW5nIGludHJvZHVjZWQ6IGBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIYCwgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIYCwgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkVgLCBhbmQgYFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUYC4gVGhlIGFkZGl0aW9uIG9mIGBkbWFfYnVmX2dldF9wY2lfdHBoYCBpbiBgZG1hLWJ1Zi5jYCBhbmQgdGhlIG1vZGlmaWNhdGlvbnMgdG8gYHBjaS90cGguY2AgaW5jbHVkaW5nIG5ldyBmdW5jdGlvbnMgbGlrZSBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHRgLCBgcGNpZV90cGhfc2V0X3N0X2VudHJpZXNgLCBhbmQgdGhlIGVuYWJsZW1lbnQvc3VwcG9ydCBjaGVja3MsIGFsbCBzZWVtIHRvIGJlIHBsdW1iaW5nIHRoZSBuZWNlc3NhcnkgcGllY2VzIHRvZ2V0aGVyLiBJdCBhcHBlYXJzIGZ1bmN0aW9uYWwsIGFuZCByZWFjaGFibGUgdmlhIFZGSU8gaW9jdGxzLiBUaGlzIG1lYW5zIHdlICphYnNvbHV0ZWx5KiBuZWVkIHRvIGZ1enogdGhlIG5ldyBpb2N0bHMgYWdncmVzc2l2ZWx5OyBhIG1pc2ludGVycHJldGF0aW9uIGNvdWxkIGhhdmUgc2V2ZXJlIHJlcGVyY3Vzc2lvbnMuCgpCZWZvcmUgSSBkZWx2ZSBkZWVwZXIsIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgY29uZmlnIG9wdGlvbnMgd2UgbmVlZCB0byBrbm93IGFib3V0LiBUaGUgY29kZSB1c2VzIGBDT05GSUdfUENJRV9UUEhgIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBpbmNsdWRpbmcgdGhlIG1haW4gVkZJTyBQQ0kgZHJpdmVyLCBhcyB3ZWxsIGFzIHRoZSBwY2kgYW5kIHRwaCBoZWFkZXJzLiBgQ09ORklHX1ZGSU9fUENJYCBpcyBjbGVhcmx5IHRoZSBiYWNrYm9uZSBjb25maWcgZm9yIFZGSU8gUENJLCBhbmQgaXQmIzM5O3MgdW5zdXJwcmlzaW5nIHRvIHNlZSB0aGF0IGBDT05GSUdfRE1BX1NIQVJFRF9CVUZGRVJgIGlzIHJlcXVpcmVkLCBnaXZlbiB0aGUgRE1BLUJVRiBpbnRlZ3JhdGlvbi4gTmV4dCwgSSBzaG91bGQgbG9vayBhdCB3aGVyZSBgQ09ORklHX1BDSUVfVFBIYCBpcyBkZWZpbmVkIHdpdGhpbiB0aGUgS2NvbmZpZyBmaWxlcyB0byBmdWxseSB1bmRlcnN0YW5kIHdoYXQgaXMgbmVlZGVkIGZvciB0aGlzIG5ldyBmZWF0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQQ0lFX1RQSCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE4NT1jb25maWcgUENJX1BBU0lEXG4tLVxuZHJpdmVycy9wY2kvS2NvbmZpZy0xOTYtXG5kcml2ZXJzL3BjaS9LY29uZmlnOjE5Nzpjb25maWcgUENJRV9UUEhcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVx0Ym9vbCBcJiMzNDtUTFAgUHJvY2Vzc2luZyBIaW50c1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NDc1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKlBDSWUgVFBIIGFuZCBWRklPLVBDSSBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYFBDSUVfVFBIYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbi4gVGhhdCYjMzk7cyBnb29kIHRvIGtlZXAgaW4gbWluZCwgcmlnaHQ/IE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgbW9zdCBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGggYFZGSU9fUENJYC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgaG93IHRoZSB0cmFuc2xhdGlvbiBvZiB0aGUgUENJZSBUUEggaXMgaGFuZGxlZC4gUGVyaGFwcyBJIHNob3VsZCBhbHNvIGxvb2sgZm9yIFZGSU8tc3BlY2lmaWMgY29kZSBwYXRocywgdG8gc2VlIGhvdyB0byBkZWFsIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBhbHNvIGNoZWNrIGl0cyBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIHNlZSBpZiBJIGFtIG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFZGSU9fUENJJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yPW1lbnUgXCYjMzQ7VkZJTyBzdXBwb3J0IGZvciBQQ0kgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy02LVx0dHJpc3RhdGVcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctOS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxMDpjb25maWcgVkZJT19QQ0lfSU5UWFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVx0ZGVmX2Jvb2wgeSBpZiAhUzM5MFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzoxNDpjb25maWcgVkZJT19QQ0lcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xNS1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgVkZJTyBzdXBwb3J0IGZvciBhbnkgUENJIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz0yMz1pZiBWRklPX1BDSVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjI0OmNvbmZpZyBWRklPX1BDSV9WR0FcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cdGJvb2wgXCYjMzQ7R2VuZXJpYyBWRklPIFBDSSBzdXBwb3J0IGZvciBWR0EgZGV2aWNlc1wmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0zMy1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctMzUtXHRib29sIFwmIzM0O0dlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVwmIzM0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ2LVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjQ3OmNvbmZpZyBWRklPX1BDSV9aREVWX0tWTVxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtWRklPIFBDSSBleHRlbnNpb25zIGZvciBzMzkweCBLVk0gcGFzc3Rocm91Z2hcJiMzNDtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNTctXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTU5LVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjA1CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFZGSU8gQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBWRklPIHNldHVwIGhlcmUuIExvb2tzIGxpa2UgYFZGSU9fUENJYCBpcyB0aGUgY29yZSwgdGhlIG1haW4gbW9kdWxlIHdlIG5lZWQgZm9yIFBDSSBwYXNzdGhyb3VnaCwgbmF0dXJhbGx5LiBCdXQsIGlmIHdlIHdhbnQgdG8gbGV2ZXJhZ2UgdGhlIGRtYWJ1ZiBmZWF0dXJlcywgdGhlbiB3ZSYjMzk7bGwgZGVmaW5pdGVseSBuZWVkIGBWRklPX1BDSV9ETUFCVUZgIGFzIHdlbGwuIFRoYXQgb25lLCBJIHNlZSwgZGVwZW5kcyBvbiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4KClNvLCB0byBiZSBleHBsaWNpdCBhbmQgY292ZXIgYWxsIHRoZSBiYXNlcywgSSYjMzk7bSBnb2luZyB0byBtYWtlIHN1cmUgd2UgZW5hYmxlIGBQQ0lFX1RQSGAsIHRoZW4gZW5hYmxlIGBWRklPX1BDSWAsIGZvbGxvd2VkIGJ5IGBQQ0lfUDJQRE1BYCwgYW5kLCBmaW5hbGx5LCBgRE1BX1NIQVJFRF9CVUZGRVJgLiBJIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYFBDSV9QMlBETUFgIGlzIGV4YWN0bHkgd2hhdCBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUENJX1AyUERNQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS9LY29uZmlnPTE5Nz1jb25maWcgUENJRV9UUEhcbi0tXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvcGNpL0tjb25maWc6MjA2OmNvbmZpZyBQQ0lfUDJQRE1BXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cdGJvb2wgXCYjMzQ7UENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MDcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBUUEggSW1wbGVtZW50YXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGRyaXZpbmcgdGhpcyBUUEggaW1wbGVtZW50YXRpb24uIE15IGluaXRpYWwgc2NhbiBvZiB0aGUgY29kZSBzdWdnZXN0cyB0aGVzZSBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlczogYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AsIGFuZCBmaW5hbGx5IGBwY2llX2VuYWJsZV90cGhfZXh0YC4gVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRyb2wgZmxvdy4gRmlyc3QsIHRob3VnaCwgSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbmQgdGhhdCB0aGV5JiMzOTtyZSBjb3JyZWN0bHkgY29ubmVjdGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgYnVpbGRpbmcgYmxvY2tzIGFyZSBzb2xpZCBiZWZvcmUgSSBzdGFydCBhc3NlbWJsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE2NTY9c3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE2ODEtXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxNjgyOnN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjgzLVx0XHRcdFx0ICAgICB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTc1MD1zdGF0aWMgaW50IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3NS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3NzY6c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTc3Ny1cdFx0XHR1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTgzOD1zdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODUzLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTg1NDpzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTg1NS1cdFx0XHRcdHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xOTMxPWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTUyLVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSDpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE5NTM6XHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5NTQtXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkU6XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxOTU1Olx0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHZkZXYsIGZsYWdzLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTk1Ni1cdFx0XHRcdFx0XHRcdCBhcmcsIGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5NTctXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTk1ODpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3QodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTk1OS1cdGRlZmF1bHQ6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4OTQ0CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDb25maXJtaW5nIGFuZCBSZWZpbmluZzogQSBRdWljayBDaGVjayoqCgpSaWdodCwgKnRoZXkqIGFyZSB0aGVyZS4gSSBjYW4gc2Vuc2UgaXQuIE5vdywgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGh5cG90aGVzaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIGNvcnJlY3QgYW5kIEkgaGF2ZSBhbGwgdGhlIHBpZWNlcyBJIHJlcXVpcmUuCgpMZXQmIzM5O3MgY2hlY2sgdGhlIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgaW1wbGljYXRpb25zIG9mIGl0cyBwcmVzZW5jZSBhbmQgbWFraW5nIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGNydWNpYWwgY29tcG9uZW50IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlIGlzIHNvdW5kLiBJdCYjMzk7cyBhIGtleSBlbGVtZW50IGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gb24gc29saWQgZ3JvdW5kIHJlZ2FyZGluZyBpdHMgZnVuY3Rpb25hbGl0eSBhbmQgZXhwZWN0ZWQgYmVoYXZpb3IuIEl0JiMzOTtzIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGJ1dCBhIHZpdGFsIHN0ZXAgdG8gYXZvaWQgYW55IGZ1dHVyZSBzdXJwcmlzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xOTMxPWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTQ5LVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTk1MDpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTk1MS1cdFx0XHRcdFx0XHRcdCBhcmdzeik7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0yNTM9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzY3LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozNjg6aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM2OS1cdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMjQ9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyNi1cdFx0XHRcdCAgc2l6ZV90IGFyZ3N6KTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjEyNzppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTEyOC1cdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xNDI9c3RhdGljIGlubGluZSBpbnRcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjE0Mzp2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xNDQtXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTg1NQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDI4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFZGSU8gUENJZSBUUEggUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgZnVuY3Rpb25hbCBjaGFuZ2VzIHdpdGhpbiBWRklPIFBDSSBhbmQgRE1BLUJVRiB0byBlbmFibGUgc3VwcG9ydCBmb3IgUENJZSBUUEguIE15IGluaXRpYWwgZ3V0IGZlZWxpbmc/IFRoaXMgc2NyZWFtcyAmIzM0O2Z1enppbmcgdGFyZ2V0LiYjMzQ7IFdlJiMzOTtyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZGSU8gZHJpdmVyLCB0aGUgRE1BLUJVRiBmcmFtZXdvcmssIGFuZCB0aGUgUENJZSBoaWVyYXJjaHkuIEFueSBuZXcgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHNwYWNlIGlzIGFsd2F5cyB3b3J0aCBhIHRob3JvdWdoIGxvb2suCgpOb3csIGZvciB0aGUgc2V0dXAuIEkmIzM5O2xsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgY29uZmlncyBhcmUgZW5hYmxlZDogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYW5kLCBjcnVjaWFsbHksIGBWRklPX1BDSV9ETUFCVUZgLCB3aGljaCBtZWFucyBlbmFibGluZyB0aGUgZGVwZW5kZW5jaWVzLCBgUENJX1AyUERNQWAgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAuIFRoZXNlIGFyZSBteSBncm91bmQgemVyby4KCkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXNlIHN5bWJvbHMgc2VlbSBsaWtlIGdvb2QgcG9pbnRzIHRvIGNvbmNlbnRyYXRlIG9uOgoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RgIC0gVGhlc2UgbGlrZWx5IGRlYWwgd2l0aCB0aGUgY29yZSBUUEggZmVhdHVyZSBzZXR1cCBhbmQgaGFuZGxpbmcuCiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoYCwgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgLCBgZG1hX2J1Zl9nZXRfcGNpX3RwaGAgLSBUaGVzZSBmdW5jdGlvbnMgYXJlIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlZ3JhdGlvbiB3aXRoIERNQS1CVUYsIHdoaWNoIGlzIGdvaW5nIHRvIGJlIG15IHByaW1hcnkgYXJlYSBvZiBmb2N1cy4KKiAgIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AsIGBwY2llX2VuYWJsZV90cGhfZXh0YCAtIFBDSWUgc2lkZSBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uLiBUaGVzZSBhcmUgaW1wb3J0YW50IGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCiogICBgdmZpb190cGhfY29uZmlnX3dyaXRlYCwgYHZmaW9fdHBoX2NvbmZpZ19yZWFkYCAtIFRoZXNlIHJlcHJlc2VudCB0aGUgY3J1Y2lhbCBpbnRlcmZhY2UgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBUUEggY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGRpZ2dpbmcgaW50byBgdmZpb190cGhfY29uZmlnX3dyaXRlYCBmaXJzdC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb190cGhfY29uZmlnX3dyaXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM9MTE1Nj1zdGF0aWMgaW50IHZmaW9fdHBoX2NvbmZpZ19yZWFkKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExNzItXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jOjExNzM6c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMTc0LVx0XHRcdFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTEyNDc9aW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTI2Ni1cdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS5yZWFkZm4gPSB2ZmlvX3RwaF9jb25maWdfcmVhZDtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM6MTI2NzpcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMjY4LVx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk5MwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSYjMzk7bSBoYXZpbmcgaXQ6CgoqKlRQSCBDb25maWd1cmF0aW9uIEV4YW1pbmF0aW9uKioKClJpZ2h0LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgdmZpb190cGhfY29uZmlnX3dyaXRlYCBhbmQgYHZmaW9fdHBoX2NvbmZpZ19yZWFkYCBhcmUgaW5kZWVkIHByZXNlbnQuIEdvb2QsIGdvb2QuIFRoZXkgYXJlIHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MsIHNvIHRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gYmVnaW4uIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGZ1bmN0aW9uIHRoYXQgdWx0aW1hdGVseSBsZXZlcmFnZXMgb3IgdXRpbGl6ZXMgdGhvc2UgZnVuY3Rpb25zLiBUaGUga2V5IGFyZWEgb2YgaW50ZXJlc3QgYXQgdGhpcyBwb2ludCBpcyBnb2luZyB0byBiZSB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGludm9rZWQgaW4gcmVsYXRpb24gdG8gdGhlIFBDSWUgVHJhbnNsYXRpb24gUHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AgaGFzIHRvIHNheS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBuZXh0IGZ1bmN0aW9uIHRvIGludmVzdGlnYXRlIGluIG9yZGVyIHRvIGZpbmQgd2hlcmUgdGhlIGFjdHVhbCBQQ0llIHRyYW5zYWN0aW9ucyBhcmUgc2V0IHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2llX3RwaF9zZXRfc3RfZW50cmllcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3BjaS90cGguYz0zNTQ9RVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcbi0tXG5kcml2ZXJzL3BjaS90cGguYy0zNTYtLyoqXG5kcml2ZXJzL3BjaS90cGguYzozNTc6ICogcGNpZV90cGhfc2V0X3N0X2VudHJpZXMgLSBCYXRjaCBzZXQgU3RlZXJpbmcgVGFnIGVudHJpZXMgaW4gdGhlIFNUIHRhYmxlXG5kcml2ZXJzL3BjaS90cGguYy0zNTgtICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0tXG5kcml2ZXJzL3BjaS90cGguYy0zNjQtICovXG5kcml2ZXJzL3BjaS90cGguYzozNjU6aW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXG5kcml2ZXJzL3BjaS90cGguYy0zNjYtXHRcdFx0ICAgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTQxNC19XG5kcml2ZXJzL3BjaS90cGguYzo0MTU6RVhQT1JUX1NZTUJPTChwY2llX3RwaF9zZXRfc3RfZW50cmllcyk7XG5kcml2ZXJzL3BjaS90cGguYy00MTYtXG4tLVxuZHJpdmVycy9wY2kvdHBoLmM9NDI1PWludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbmRyaXZlcnMvcGNpL3RwaC5jLTQyNi17XG5kcml2ZXJzL3BjaS90cGguYzo0Mjc6XHRpbnQgcmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJpZXMocGRldiwgaW5kZXgsIDEsIFx1MDAyNnRhZyk7XG5kcml2ZXJzL3BjaS90cGguYy00MjgtXHRyZXR1cm4gcmV0ID09IDEgPyAwIDogcmV0O1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE4NTQ9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTIwLVx0XHRjbWQgPSB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHZkZXYpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTkyMTpcdFx0cmV0ID0gcGNpZV90cGhfc2V0X3N0X2VudHJpZXMocGRldiwgdHBoX3N0LnN0YXJ0LCBpLCB0YWdzKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5MjItXHRcdHZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaD0zOD1pbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtMzktXHRcdFx0ICB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpO1xuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6NDA6aW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC00MS1cdFx0XHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTU3PXN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC01OS17IHJldHVybiAtRUlOVkFMOyB9XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo2MDpzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTYxLVx0XHRcdFx0XHQgIHVuc2lnbmVkIGludCBzdGFydCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIxMDYKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgYW5kIFRhcmdldGVkIEZvY3VzKioKCkF3ZXNvbWUhIFRoYXQmIzM5O3MgdGhlIGZlZWxpbmcgd2hlbiB5b3UmIzM5O3JlIGFib3V0IHRvIGRpdmUgaW50byBhIHNwZWNpZmljIGFyZWEuIE5vdywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgcGNpZV9lbmFibGVfdHBoX2V4dGAuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGlzLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJJiMzOTttIGdvaW5nIHRvIGZvY3VzIG15IGVuZXJneS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHdpbGwgaW1tZWRpYXRlbHkgYmUgbG9va2luZyBhdCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIFRQSCAoVHJhbnNhY3Rpb24gUHJvY2Vzc2luZyBIaW50KSBleHRlbnNpb25zIGluIHJlbGF0aW9uIHRvIFBDSWUgZW5hYmxlbWVudC4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BjaWVfZW5hYmxlX3RwaF9leHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9wY2kvdHBoLmM9NDUyPUVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNDU0LS8qKlxuZHJpdmVycy9wY2kvdHBoLmM6NDU1OiAqIHBjaWVfZW5hYmxlX3RwaF9leHQgLSBFbmFibGUgVFBIIHN1cHBvcnQgd2l0aCBzcGVjaWZpYyBTVCBtb2RlIGFuZFxuZHJpdmVycy9wY2kvdHBoLmMtNDU2LSAqIHJlcXVlc3RlciB0eXBlXG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNDY1LSAqL1xuZHJpdmVycy9wY2kvdHBoLmM6NDY2OmludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLCB1OCByZXFfdHlwZSlcbmRyaXZlcnMvcGNpL3RwaC5jLTQ2Ny17XG4tLVxuZHJpdmVycy9wY2kvdHBoLmMtNTEwLX1cbmRyaXZlcnMvcGNpL3RwaC5jOjUxMTpFWFBPUlRfU1lNQk9MKHBjaWVfZW5hYmxlX3RwaF9leHQpO1xuZHJpdmVycy9wY2kvdHBoLmMtNTEyLVxuLS1cbmRyaXZlcnMvcGNpL3RwaC5jLTUxNy0gKlxuZHJpdmVycy9wY2kvdHBoLmM6NTE4OiAqIFdyYXBwZXIgZm9yIHBjaWVfZW5hYmxlX3RwaF9leHQoKSwgYXV0b21hdGljYWxseSB1c2VzIHRoZSBwcmUtY2FjaGVkXG5kcml2ZXJzL3BjaS90cGguYy01MTktICogdHBoX21heF90eXBlIHZhbHVlIChuZWdvdGlhdGVkIG1heGltdW0gcmVxdWVzdGVyIHR5cGUgYmV0d2VlbiBkZXZpY2UgYW5kXG4tLVxuZHJpdmVycy9wY2kvdHBoLmM9NTI0PWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXG5kcml2ZXJzL3BjaS90cGguYy01MjUte1xuZHJpdmVycy9wY2kvdHBoLmM6NTI2Olx0cmV0dXJuIHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcGRldi1cdTAwM2V0cGhfbWF4X3R5cGUpO1xuZHJpdmVycy9wY2kvdHBoLmMtNTI3LX1cbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTExNzM9c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTIxMi1cdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM6MTIxMzpcdFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCByZXEpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYy0xMjE0LVx0XHRpZiAocmV0KVxuLS1cbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTQ2PXZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo0NzppbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSwgdTggcmVxX3R5cGUpO1xuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNDgtaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSk7XG4tLVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg9NzM9c3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6NzQ6c3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTc1LVx0XHRcdFx0ICAgICAgdTggcmVxX3R5cGUpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMzMTI2CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRQSCBTeW1ib2xzIGFuZCBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBwdXR0aW5nIHRvZ2V0aGVyIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBUcmFuc2FjdGlvbiBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBkZWZpbml0ZWx5OgoKKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYAoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAKKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YAoqICAgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAKKiAgIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYAoqICAgYGRtYV9idWZfZ2V0X3BjaV90cGhgCiogICBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHRgCiogICBgcGNpZV90cGhfc2V0X3N0X2VudHJpZXNgCiogICBgcGNpZV9lbmFibGVfdHBoX2V4dGAKKiAgIGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgCiogICBgdmZpb190cGhfY29uZmlnX3JlYWRgCgpUaGVzZSBzZWVtIHByZXR0eSB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIHBhdGNoIGl0c2VsZiwgbm90IHBhcnQgb2YgdGhlIGNvcmUgaG90LXBhdGggY29kZSwgd2hpY2ggaXMgZ29vZC4KCkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gc3ltYm9scyB0aGF0IGFyZSByZWxldmFudC4gTGV0JiMzOTtzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBjb2RlLCBgQ09ORklHX0FDUElgIGNvbWVzIHVwIGluIGEgY291cGxlIG9mIHBsYWNlczogYHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0YCBhbmQgYHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWRgLiBIb3dldmVyLCBgQUNQSWAgaXMgYmFzaWNhbGx5IGEgZ2l2ZW4gb24geDg2LCBpc24mIzM5O3QgaXQ/IFNvLCBJIGRvbiYjMzk7dCB0aGluayBJIHJlYWxseSBuZWVkIHRvIGV4cGxpY2l0bHkgY2FsbCB0aGF0IG91dCB1bmxlc3MgaXQmIzM5O3MgKnNwZWNpZmljKiB0byB0aGlzIFRQSCBmZWF0dXJlLiBUaGUgZmVhdHVyZSBpdHNlbGYsIHRob3VnaCwgdGhhdCYjMzk7cyBgUENJRV9UUEhgLgoKQWxyaWdodCwgSSBuZWVkIHRvIHJldmlzaXQgdGhlIGBWRklPX1BDSV9ETUFCVUZgIHNldHRpbmcuIEkgcmVtZW1iZXIgdGhhdCYjMzk7cyBhIGJpdCBtb3JlIGludm9sdmVkLiBJdCYjMzk7cyBjb25maWd1cmVkIGFzIGBkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgJmFtcDsmYW1wOyBQQ0lfUDJQRE1BICZhbXA7JmFtcDsgRE1BX1NIQVJFRF9CVUZGRVJgLiBPa2F5LCBzbywgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2UgYFZGSU9fUENJYCwgSSBkZWZpbml0ZWx5IG5lZWQgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgYW5kIG1ha2Ugc3VyZSB0byBsaXN0IHRoZW0uCgpMZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgZGVmaW5pdGlvbiBmb3IgYERNQV9TSEFSRURfQlVGRkVSYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRE1BX1NIQVJFRF9CVUZGRVImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcJiMzNDtkcml2ZXJzL2Jhc2UvcmVnbWFwL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cbmRyaXZlcnMvYmFzZS9LY29uZmlnOjIxNTpjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQxMjkKCQkJCQkJCW91dHB1dDogMjc0CgkJCQkJCQl0aG91Z2h0czogNTM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFZGSU8tUENJIENvbmZpZ3VyYXRpb24gYW5kIEFzc29jaWF0ZWQgRnVuY3Rpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYm9vbGVhbiwgYW5kIHVzdWFsbHksIGl0JiMzOTtzIHNldCB2aWEgb3RoZXIgY29uZmlndXJhdGlvbnMuIE1ha2VzIHNlbnNlLiBUaGVuIHRoZXJlIGFyZSBzb21lIGNvbmZpZ3VyYXRpb25zIHRvIGxpc3QgLSBJJiMzOTtsbCBqb3QgdGhlbSBkb3duOiBgUENJRV9UUEhgLCBgVkZJT19QQ0lgLCBgUENJX1AyUERNQWAsIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhlaXIgdHlwZXMgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCBtZSBjaGVjay4gYFZGSU9fUENJYCBpcyBhIHRyaXN0YXRlLCBhbmQgdGhhdCBjaGVja3Mgb3V0LCBhcyBpcyBgVkZJT19QQ0lfQ09SRWAuIGBQQ0lFX1RQSGAgaXMgYSBib29sLiBHb29kLiBgUENJX1AyUERNQWAgaXMgYWxzbyBhIGJvb2wuIFJpZ2h0LiBBbmQgZmluYWxseSwgYERNQV9TSEFSRURfQlVGRkVSYCwgYWxzbyBhIGJvb2xlYW4uIFNvLCBhbGwgYm9vbGVhbnMgYW5kIHRyaXN0YXRlcywgY29uZmlybWVkLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyBtYWtlIGEgbm90ZSBvZiB0aG9zZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uczogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4KCk5vdyBJJiMzOTtsbCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBzdXBwb3J0aW5nIGZ1bmN0aW9ucy4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlIGEgYnVuY2ggb2YgZnVuY3Rpb25zIHN0YXJ0aW5nIHdpdGggYHZmaW9fcGNpXy4uLmAuIFRob3NlIGFyZSBzdGF0aWMgZnVuY3Rpb25zIGluc2lkZSBgdmZpb19wY2lfY29yZS5jYC4gTGlzdGluZyBhbGwgb2YgdGhvc2UgbWlnaHQgYmUgdG9vIGV4aGF1c3RpdmUsIHNvIEkmIzM5O2xsIGZvY3VzIG9uIHRoZSBwcmltYXJ5IElPQ1RMIGhhbmRsZXJzLgoKT2theSwgbGV0JiMzOTtzIHNlZSwgdGhlIGZvY3VzIHN5bWJvbHMgYXJlOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVgLCBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdGAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCwgYHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0YCwgYHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzYCwgYHBjaWVfZW5hYmxlX3RwaF9leHRgLCBhbmQgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAuCgpUaGlzIGFwcGVhcnMgcHJldHR5IGNvbXByZWhlbnNpdmUsIGNvdmVyaW5nIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgcmVsYXRlZCBmdW5jdGlvbmFsaXRpZXMuIEkgdGhpbmsgdGhpcyBpcyBhIHNvbGlkIHJldmlldy4gSSYjMzk7bGwgZ28gYWhlYWQgYW5kIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZ2V0X2NwdV9zdF9leHQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfc2V0X3N0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7cGNpZV9lbmFibGVfdHBoX2V4dCYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gc3VwcG9ydCBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBJdCBhZGRzIG5ldyBWRklPIGlvY3Rscy9mZWF0dXJlcyBmb3IgVFBIIGNvbmZpZ3VyYXRpb24gYW5kIHJlc29sdXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BDSUVfVFBIJiMzNDssCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7RE1BX1NIQVJFRF9CVUZGRVImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoJiMzNDssCiAgICAmIzM0O2RtYV9idWZfZ2V0X3BjaV90cGgmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfZ2V0X2NwdV9zdF9leHQmIzM0OywKICAgICYjMzQ7cGNpZV90cGhfc2V0X3N0X2VudHJpZXMmIzM0OywKICAgICYjMzQ7cGNpZV9lbmFibGVfdHBoX2V4dCYjMzQ7LAogICAgJiMzNDt2ZmlvX3RwaF9jb25maWdfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gc3VwcG9ydCBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBJdCBhZGRzIG5ldyBWRklPIGlvY3Rscy9mZWF0dXJlcyBmb3IgVFBIIGNvbmZpZ3VyYXRpb24gYW5kIHJlc29sdXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNTo0NS41MzQxNjA4MzNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTAzMDY2OTg1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQQ0lFX1RQSFwiLFxuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIkRNQV9TSEFSRURfQlVGRkVSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0XCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhcIixcbiAgICBcImRtYV9idWZfZ2V0X3BjaV90cGhcIixcbiAgICBcInBjaWVfdHBoX2dldF9jcHVfc3RfZXh0XCIsXG4gICAgXCJwY2llX3RwaF9zZXRfc3RfZW50cmllc1wiLFxuICAgIFwicGNpZV9lbmFibGVfdHBoX2V4dFwiLFxuICAgIFwidmZpb190cGhfY29uZmlnX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gc3VwcG9ydCBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnRzIChUUEgpLiBJdCBhZGRzIG5ldyBWRklPIGlvY3Rscy9mZWF0dXJlcyBmb3IgVFBIIGNvbmZpZ3VyYXRpb24gYW5kIHJlc29sdXRpb24sIHdoaWNoIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA1OjQ1LjUzNDE2NjA5M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTEyMDYxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGIwMGM2MjQ3NzFmYzA3NjRmNzc3MWY3MDVjMTU5MGY3ZjY0NGM3OVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1bCAxNCAxNjowNTo0MyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xcbmluZGV4IGQ1MDRjNjM2ZGMyOTRlLi5lODMxNGVkMjQwZDMzNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jXFxuKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xcbkBAIC05MzksNiArOTM5LDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcXG4gICogICAgIC0gZG1hX2J1Zl91bm1hcF9hdHRhY2htZW50KClcXG4gICogICAgIC0gZG1hX2J1Zl92bWFwKClcXG4gICogICAgIC0gZG1hX2J1Zl92dW5tYXAoKVxcbisgKiAgICAgLSBkbWFfYnVmX2dldF9wY2lfdHBoKClcXG4gICpcXG4gICogMi4gSW1wb3J0ZXJzIG11c3Qgbm90IGhvbGQgdGhlIGRtYS1idWYgcmVzZXJ2YXRpb24gbG9jayB3aGVuIGNhbGxpbmcgdGhlc2VcXG4gICogICAgZnVuY3Rpb25zOlxcbkBAIC05NzksNiArOTgwLDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcXG4gICogICAgIC0gXFx1MDAyNmRtYV9idWZfb3BzLnVubWFwX2RtYV9idWYoKVxcbiAgKiAgICAgLSBcXHUwMDI2ZG1hX2J1Zl9vcHMudm1hcCgpXFxuICAqICAgICAtIFxcdTAwMjZkbWFfYnVmX29wcy52dW5tYXAoKVxcbisgKiAgICAgLSBcXHUwMDI2ZG1hX2J1Zl9vcHMuZ2V0X3BjaV90cGgoKVxcbiAgKlxcbiAgKiAzLiBFeHBvcnRlcnMgbXVzdCBob2xkIHRoZSBkbWEtYnVmIHJlc2VydmF0aW9uIGxvY2sgd2hlbiBjYWxsaW5nIHRoZXNlXFxuICAqICAgIGZ1bmN0aW9uczpcXG5AQCAtMTE0NCw2ICsxMTQ2LDM2IEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl91bnBpbiwgXFxcIkRNQV9CVUZcXFwiKTtcXG4gXFxuKy8qKlxcbisgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXFxuKyAqIEBkbWFidWY6IERNQSBidWZmZXIgdG8gcXVlcnlcXG4rICogQGV4dGVuZGVkOiBmYWxzZSBmb3IgOC1iaXQgU1QsIHRydWUgZm9yIDE2LWJpdCBFeHRlbmRlZCBTVFxcbisgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxcbisgKiBAcGg6IHJldHVybnMgdGhlIFRQSCBwcm9jZXNzaW5nIGhpbnRcXG4rICpcXG4rICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFxcdTAwMjZkbWFfYnVmX29wcy5nZXRfcGNpX3RwaCBjYWxsYmFjay5cXG4rICpcXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcXHUwMDI2ZG1hX2J1Zi5yZXN2IGhlbGQuIFJldHVybnMgLUVPUE5PVFNVUFAgaWYgdGhlXFxuKyAqIGV4cG9ydGVyIGRvZXMgbm90IGltcGxlbWVudCB0aGUgY2FsbGJhY2sgb3IgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGVcXG4rICogcmVxdWVzdGVkIG5hbWVzcGFjZS5cXG4rICpcXG4rICogVGhlIHJldHVybmVkIHN0ZWVyaW5nIHRhZyBhbmQgcHJvY2Vzc2luZyBoaW50IGFyZSBvbmx5IHZhbGlkIHVudGlsIHRoZVxcbisgKiBleHBvcnRlciBpbnZhbGlkYXRlcyB0aGUgY3VycmVudCBtYXBwaW5nIChzaWduYWxsZWQgdG8gdGhlIGltcG9ydGVyIHZpYVxcbisgKiBcXHUwMDI2ZG1hX2J1Zl9hdHRhY2hfb3BzLm1vdmVfbm90aWZ5KS4gSW1wb3J0ZXJzIG11c3QgcmUtcXVlcnkgYWZ0ZXIgYSBuZXdcXG4rICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLlxcbisgKi9cXG4raW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcXG4re1xcbitcXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXG4rXFx0aWYgKCFkbWFidWYtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BjaV90cGgpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldHVybiBkbWFidWYtXFx1MDAzZW9wcy1cXHUwMDNlZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgc3RlZXJpbmdfdGFnLCBwaCk7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9OU19HUEwoZG1hX2J1Zl9nZXRfcGNpX3RwaCwgXFxcIkRNQV9CVUZcXFwiKTtcXG4rXFxuIC8qKlxcbiAgKiBkbWFfYnVmX21hcF9hdHRhY2htZW50IC0gUmV0dXJucyB0aGUgc2NhdHRlcmxpc3QgdGFibGUgb2YgdGhlIGF0dGFjaG1lbnQ7XFxuICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdHBoLmMgYi9kcml2ZXJzL3BjaS90cGguY1xcbmluZGV4IDY1NWZmZDYwZTYyZjZhLi5lNmE4NTBhYjJiMDM3ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xcbisrKyBiL2RyaXZlcnMvcGNpL3RwaC5jXFxuQEAgLTE2NSwxNCArMTY1LDYyIEBAIHN0YXRpYyB1OCBnZXRfc3RfbW9kZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuICAqL1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4ge1xcbi1cXHR1MzIgcmVnO1xcbitcXHR1MzIgcmVnID0gMDtcXG4rXFxuK1xcdGlmICghcGRldi1cXHUwMDNldHBoX2NhcClcXG4rXFx0XFx0cmV0dXJuIFBDSV9UUEhfTE9DX05PTkU7XFxuIFxcbiBcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2cmVnKTtcXG4gXFxuLVxcdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XFxuK1xcdHJldHVybiByZWcgXFx1MDAyNiBQQ0lfVFBIX0NBUF9MT0NfTUFTSztcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MpO1xcbiBcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIGVuYWJsZWQgVFBIIHJlcXVlc3RlciB0eXBlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XFxuKyAqXFxuKyAqIFJldHVybjogUENJX1RQSF9SRVFfRElTQUJMRSwgUENJX1RQSF9SRVFfVFBIX09OTFkgb3IgUENJX1RQSF9SRVFfRVhUX1RQSC5cXG4rICovXFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBUUEggQ29tcGxldGVyIHN1cHBvcnRcXG4rICogQHBkZXY6IFBDSSBkZXZpY2UgdG8gcXVlcnlcXG4rICpcXG4rICogUmVhZHMgdGhlIFxcXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFxcXCIgZmllbGQgKGJpdHMgMTM6MTIpIG9mIERldmljZVxcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cXG4rICogXFxcIm5vdCBzdXBwb3J0ZWRcXFwiIHNvIGNhbGxlcnMgb25seSBuZWVkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgdGhyZWVcXG4rICogZGVmaW5lZCB2YWx1ZXMuXFxuKyAqXFxuKyAqIFJldHVybjogb25lIG9mICVQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSxcXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXFxuKyAqICAgICAgICAgJVBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBILlxcbisgKi9cXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0dTMyIHJlZztcXG4rXFxuK1xcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFxcdTAwMjZyZWcpKVxcbitcXHRcXHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7XFxuK1xcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXG4rXFx0c3dpdGNoIChGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZykpIHtcXG4rXFx0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk6XFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfVFBIX09OTFk7XFxuK1xcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEg6XFxuK1xcdFxcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xcbitcXHR9XFxuK31cXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSk7XFxuK1xcbiAvKlxcbiAgKiBSZXR1cm4gdGhlIHNpemUgb2YgU1QgdGFibGUuIElmIFNUIHRhYmxlIGlzIG5vdCBpbiBUUEggUmVxdWVzdGVyIEV4dGVuZGVkXFxuICAqIENhcGFiaWxpdHkgc3BhY2UsIHJldHVybiAwLiBPdGhlcndpc2UgcmV0dXJuIHRoZSBTVCBUYWJsZSBTaXplICsgMS5cXG5AQCAtMTg0LDkgKzIzMiw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFxuIFxcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXFxuIFxcdGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7XFxuLVxcbi1cXHQvKiBDb252ZXJ0IGxvYyB0byBtYXRjaCB3aXRoIFBDSV9UUEhfTE9DXyogZGVmaW5lZCBpbiBwY2lfcmVncy5oICovXFxuLVxcdGxvYyA9IEZJRUxEX1BSRVAoUENJX1RQSF9DQVBfTE9DX01BU0ssIGxvYyk7XFxuIFxcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTIzMSwyMCArMjc2LDIyIEBAIHN0YXRpYyBpbnQgd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIH1cXG4gXFxuIC8qKlxcbi0gKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXFxuLSAqIHdpdGggYSBzcGVjaWZpYyBDUFVcXG4rICogcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5XFxuKyAqIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSwgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZSBzZWxlY3Rpb25cXG4gICogQHBkZXY6IFBDSSBkZXZpY2VcXG4gICogQG1lbV90eXBlOiB0YXJnZXQgbWVtb3J5IHR5cGUgKHZvbGF0aWxlIG9yIHBlcnNpc3RlbnQgUkFNKVxcbisgKiBAcmVxX3R5cGU6IFRQSCByZXF1ZXN0ZXIgdHlwZSB0byBzZWxlY3QgU1QgbmFtZXNwYWNlXFxuICAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXFxuICAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZFxcbiAgKlxcbi0gKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGFcXG4tICogc3BlY2lmaWMgQ1BVIGFzIGluZGljYXRlZCBieSBjcHUuXFxuKyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLFxcbisgKiB1c2luZyB0aGUgc3BlY2lmaWVkIFRQSCByZXF1ZXN0ZXIgdHlwZSB0byBzZWxlY3QgdGhlIGNvcnJlY3QgU1QgbmFtZXNwYWNlLlxcbisgKiBWYWxpZGF0ZXMgcmVxdWVzdGVyIHR5cGUgYWdhaW5zdCBoYXJkd2FyZSBuZWdvdGlhdGVkIGNhcGFiaWxpdHkgbGltaXRzLlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuICAqL1xcbi1pbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuLVxcdFxcdFxcdHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHQgICAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfQUNQSVxcbiBcXHRzdHJ1Y3QgcGNpX2RldiAqcnA7XFxuQEAgLTI1Myw2ICszMDAsMTAgQEAgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbiBcXHR1MzIgY3B1X3VpZDtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHxcXG4rXFx0XFx0cmVxX3R5cGUgXFx1MDAzZSBwZGV2LVxcdTAwM2V0cGhfbWF4X3R5cGUpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0cmV0ID0gYWNwaV9nZXRfY3B1X3VpZChjcHUsIFxcdTAwMjZjcHVfdWlkKTtcXG4gXFx0aWYgKHJldCAhPSAwKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC0yNjgsMzUgKzMxOSw1NCBAQCBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuIFxcbi1cXHQqdGFnID0gdHBoX2V4dHJhY3RfdGFnKG1lbV90eXBlLCBwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUsIFxcdTAwMjZpbmZvKTtcXG4rXFx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcmVxX3R5cGUsIFxcdTAwMjZpbmZvKTtcXG4gXFxuLVxcdHBjaV9kYmcocGRldiwgXFxcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcXFxuXFxcIixcXG4rXFx0cGNpX2RiZyhwZGV2LCBcXFwiZ2V0IHN0ZWVyaW5nIHRhZzogbWVtX3R5cGU9JXMsIHJlcV90eXBlPSV1LCBjcHU9JWQsIHRhZz0lIzA0eFxcXFxuXFxcIixcXG4gXFx0XFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcXFwidm9sYXRpbGVcXFwiIDogXFxcInBlcnNpc3RlbnRcXFwiLFxcbi1cXHRcXHRjcHUsICp0YWcpO1xcbitcXHRcXHRyZXFfdHlwZSwgY3B1LCAqdGFnKTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbiAjZWxzZVxcbiBcXHRyZXR1cm4gLUVOT0RFVjtcXG4gI2VuZGlmXFxuIH1cXG4tRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0KTtcXG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0X2V4dCk7XFxuIFxcbiAvKipcXG4tICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxcbisgKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXFxuKyAqIHdpdGggYSBzcGVjaWZpYyBDUFVcXG4gICogQHBkZXY6IFBDSSBkZXZpY2VcXG4tICogQGluZGV4OiBTVCB0YWJsZSBlbnRyeSBpbmRleFxcbi0gKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgd3JpdHRlblxcbisgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXFxuKyAqIEBjcHU6IGFzc29jaWF0ZWQgQ1BVIGlkXFxuKyAqIEB0YWc6IFN0ZWVyaW5nIFRhZyB0byBiZSByZXR1cm5lZFxcbiAgKlxcbi0gKiBGaWd1cmUgb3V0IHRoZSBwcm9wZXIgbG9jYXRpb24gb2YgU1QgdGFibGUsIGVpdGhlciBpbiB0aGUgTVNJLVggdGFibGUgb3JcXG4tICogaW4gdGhlIFRQSCBFeHRlbmRlZCBDYXBhYmlsaXR5IHNwYWNlLCBhbmQgd3JpdGUgdGhlIFN0ZWVyaW5nIFRhZyBpbnRvXFxuLSAqIHRoZSBTVCBlbnRyeSBwb2ludGVkIGJ5IGluZGV4LlxcbisgKiBSZXR1cm4gdGhlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSxcXG4rICogdXNpbmcgdGhlIGRlZmF1bHQgbmVnb3RpYXRlZCBUUEggcmVxdWVzdGVyIHR5cGUuXFxuICAqXFxuICAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcXG4gICovXFxuLWludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZylcXG4re1xcbitcXHRyZXR1cm4gcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQocGRldiwgbWVtX3R5cGUsIHBkZXYtXFx1MDAzZXRwaF9tYXhfdHlwZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNwdSwgdGFnKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzIC0gQmF0Y2ggc2V0IFN0ZWVyaW5nIFRhZyBlbnRyaWVzIGluIHRoZSBTVCB0YWJsZVxcbisgKiBAcGRldjogUENJIGRldmljZVxcbisgKiBAc3RhcnQ6IHN0YXJ0aW5nIFNUIHRhYmxlIGluZGV4XFxuKyAqIEBjb3VudDogbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZW50cmllcyB0byB3cml0ZVxcbisgKiBAdGFnczogYXJyYXkgb2YgdTE2IHRhZyB2YWx1ZXMgdG8gcHJvZ3JhbVxcbisgKlxcbisgKiBSZXR1cm46IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzLCBvciBuZWdhdGl2ZSBlcnJub1xcbisgKi9cXG4raW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgY291bnQsIGNvbnN0IHUxNiAqdGFncylcXG4ge1xcbi1cXHR1MzIgbG9jO1xcbiBcXHRpbnQgZXJyID0gMDtcXG4rXFx0dTMyIGxvYywgaTtcXG4gXFxuIFxcdGlmICghcGRldi1cXHUwMDNldHBoX2NhcClcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTMwNiw3ICszNzYsNyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIFxcbiBcXHQvKiBObyBuZWVkIHRvIHdyaXRlIHRhZyBpZiBkZXZpY2UgaXMgaW4gXFxcIk5vIFNUIE1vZGVcXFwiICovXFxuIFxcdGlmIChwZGV2LVxcdTAwM2V0cGhfbW9kZSA9PSBQQ0lfVFBIX1NUX05TX01PREUpXFxuLVxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gY291bnQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEaXNhYmxlIFRQSCBiZWZvcmUgdXBkYXRpbmcgU1QgdG8gYXZvaWQgcG90ZW50aWFsIGluc3RhYmlsaXR5IGFzXFxuQEAgLTMxNSwzMSArMzg1LDQ3IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcXG4gXFx0c2V0X2N0cmxfcmVnX3JlcV9lbihwZGV2LCBQQ0lfVFBIX1JFUV9ESVNBQkxFKTtcXG4gXFxuIFxcdGxvYyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9sb2MocGRldik7XFxuLVxcdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqL1xcbi1cXHRsb2MgPSBGSUVMRF9QUkVQKFBDSV9UUEhfQ0FQX0xPQ19NQVNLLCBsb2MpO1xcbi1cXG4tXFx0c3dpdGNoIChsb2MpIHtcXG4tXFx0Y2FzZSBQQ0lfVFBIX0xPQ19NU0lYOlxcbi1cXHRcXHRlcnIgPSBwY2lfbXNpeF93cml0ZV90cGhfdGFnKHBkZXYsIGluZGV4LCB0YWcpO1xcbi1cXHRcXHRicmVhaztcXG4tXFx0Y2FzZSBQQ0lfVFBIX0xPQ19DQVA6XFxuLVxcdFxcdGVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBpbmRleCwgdGFnKTtcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGRlZmF1bHQ6XFxuLVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0cGNpZV9kaXNhYmxlX3RwaChwZGV2KTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNvdW50OyBpKyspIHtcXG4rXFx0XFx0c3dpdGNoIChsb2MpIHtcXG4rXFx0XFx0Y2FzZSBQQ0lfVFBIX0xPQ19NU0lYOlxcbitcXHRcXHRcXHRlcnIgPSBwY2lfbXNpeF93cml0ZV90cGhfdGFnKHBkZXYsIHN0YXJ0ICsgaSwgdGFnc1tpXSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBDSV9UUEhfTE9DX0NBUDpcXG4rXFx0XFx0XFx0ZXJyID0gd3JpdGVfdGFnX3RvX3N0X3RhYmxlKHBkZXYsIHN0YXJ0ICsgaSwgdGFnc1tpXSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdGlmIChlcnIgIT0gMCkge1xcbitcXHRcXHRcXHRwY2lfZXJyKHBkZXYsIFxcXCJmYWlsZWQgdG8gc2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSV1LCB0YWdzPSV1LCByZXQ9JWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdChsb2MgPT0gUENJX1RQSF9MT0NfTVNJWCkgPyBcXFwiTVNJLVhcXFwiIDogXFxcIlNUXFxcIixcXG4rXFx0XFx0XFx0XFx0c3RhcnQgKyBpLCB0YWdzW2ldLCBlcnIpO1xcbitcXHRcXHRcXHRwY2llX2Rpc2FibGVfdHBoKHBkZXYpO1xcbitcXHRcXHRcXHRyZXR1cm4gaSBcXHUwMDNlIDAgPyBpIDogZXJyO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgcGRldi1cXHUwMDNldHBoX3JlcV90eXBlKTtcXG4gXFxuLVxcdHBjaV9kYmcocGRldiwgXFxcInNldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBpbmRleD0lZCwgdGFnPSUjMDR4XFxcXG5cXFwiLFxcbi1cXHRcXHQobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gXFxcIk1TSS1YXFxcIiA6IFxcXCJTVFxcXCIsIGluZGV4LCB0YWcpO1xcbitcXHRwY2lfZGJnKHBkZXYsIFxcXCJiYXRjaCBzZXQgc3RlZXJpbmcgdGFnOiAlcyB0YWJsZSwgc3RhcnQ9JXUsIGNvdW50PSV1IHN1Y2Nlc3MhXFxcXG5cXFwiLFxcbitcXHRcXHQobG9jID09IFBDSV9UUEhfTE9DX01TSVgpID8gXFxcIk1TSS1YXFxcIiA6IFxcXCJTVFxcXCIsIHN0YXJ0LCBjb3VudCk7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIGNvdW50O1xcbit9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfc2V0X3N0X2VudHJpZXMpO1xcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX3NldF9zdF9lbnRyeSgpIC0gU2V0IFN0ZWVyaW5nIFRhZyBpbiB0aGUgU1QgdGFibGUgZW50cnlcXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcXG4rICogQGluZGV4OiBTVCB0YWJsZSBlbnRyeSBpbmRleFxcbisgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgd3JpdHRlblxcbisgKlxcbisgKiBSZXR1cm46IDAgaWYgc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuKyAqL1xcbitpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuK3tcXG4rXFx0aW50IHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIGluZGV4LCAxLCBcXHUwMDI2dGFnKTtcXG4rXFx0cmV0dXJuIHJldCA9PSAxID8gMCA6IHJldDtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX3NldF9zdF9lbnRyeSk7XFxuIFxcbkBAIC0zNjYsMjYgKzQ1MiwyMSBAQCB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIEVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XFxuIFxcbiAvKipcXG4tICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXFxuKyAqIHBjaWVfZW5hYmxlX3RwaF9leHQgLSBFbmFibGUgVFBIIHN1cHBvcnQgd2l0aCBzcGVjaWZpYyBTVCBtb2RlIGFuZFxcbisgKiByZXF1ZXN0ZXIgdHlwZVxcbiAgKiBAcGRldjogUENJIGRldmljZVxcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XFxuLSAqXFxuLSAqICAgLSBQQ0lfVFBIX1NUX05TX01PREU6IE5PIFNUIE1vZGVcXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXFxuLSAqICAgLSBQQ0lfVFBIX1NUX0RTX01PREU6IERldmljZSBTcGVjaWZpYyBNb2RlXFxuKyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZTogUENJX1RQSF9TVF8oTlNfTU9ERSAvIElWX01PREUgLyBEU19NT0RFKVxcbisgKiBAcmVxX3R5cGU6IFJlcXVlc3RlciB0eXBlIHRvIGVuYWJsZTogUENJX1RQSF9SRVFfKFRQSF9PTkxZIC8gRVhUX1RQSClcXG4gICpcXG4tICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBiZWZvcmUgZW5hYmxpbmdcXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcXG4tICogVFBIIG9yIGV4dGVuZGVkIFRQSCwgY2FuIGJlIGlzc3VlZCBieSB0aGUgZGV2aWNlIGJhc2VkIG9uIGl0cyBUUEggcmVxdWVzdGVyXFxuLSAqIGNhcGFiaWxpdHkgYW5kIHRoZSBSb290IFBvcnQncyBjb21wbGV0ZXIgY2FwYWJpbGl0eS5cXG4rICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBhbmQgcmVxdWVzdGVyIHR5cGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZVxcbisgKiBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nIGFuZCByZXR1cm4gYW4gZXJyb3IgaWYgbm90LlxcbiAgKlxcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXFxuICAqL1xcbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKVxcbiB7XFxuIFxcdHUzMiByZWc7XFxuIFxcdHU4IGRldl9tb2RlcztcXG4tXFx0dTggcnBfcmVxX3R5cGU7XFxuIFxcbiBcXHQvKiBIb25vciBcXFwibm90cGhcXFwiIGtlcm5lbCBwYXJhbWV0ZXIgKi9cXG4gXFx0aWYgKHBjaV90cGhfZGlzYWJsZWQpXFxuQEAgLTM5Nyw2ICs0NzgsMTQgQEAgaW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXFxuIFxcdGlmIChwZGV2LVxcdTAwM2V0cGhfZW5hYmxlZClcXG4gXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuK1xcdGlmIChwZGV2LVxcdTAwM2V0cGhfbWF4X3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgVFBIIHJlcXVlc3RlciB0eXBlIGNvbXBhdGliaWxpdHkgKi9cXG4rXFx0aWYgKHJlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUgfHwgcmVxX3R5cGUgPT0gMiB8fFxcbitcXHRcXHRyZXFfdHlwZSBcXHUwMDNlIHBkZXYtXFx1MDAzZXRwaF9tYXhfdHlwZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgU1QgbW9kZSBjb21wYXRpYmlsaXR5ICovXFxuIFxcdG1vZGUgXFx1MDAyNj0gUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0s7XFxuIFxcdGRldl9tb2RlcyA9IGdldF9zdF9tb2RlcyhwZGV2KTtcXG5AQCAtNDA1LDIzICs0OTQsNyBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4gXFxuIFxcdHBkZXYtXFx1MDAzZXRwaF9tb2RlID0gbW9kZTtcXG4gXFxuLVxcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXFxuLVxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFxcdTAwMjZyZWcpO1xcbi1cXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXFxuLVxcdFxcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cGRldi1cXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuLVxcbi1cXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xcbi1cXHRpZiAocGNpX3BjaWVfdHlwZShwZGV2KSAhPSBQQ0lfRVhQX1RZUEVfUkNfRU5EKSB7XFxuLVxcdFxcdHJwX3JlcV90eXBlID0gZ2V0X3JwX2NvbXBsZXRlcl90eXBlKHBkZXYpO1xcbi1cXG4tXFx0XFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xcbi1cXHRcXHRwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPSBtaW4ocGRldi1cXHUwMDNldHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChwZGV2LVxcdTAwM2V0cGhfcmVxX3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9yZXFfdHlwZSA9IHJlcV90eXBlO1xcbiBcXG4gXFx0LyogV3JpdGUgdGhlbSBpbnRvIFRQSCBjb250cm9sIHJlZ2lzdGVyICovXFxuIFxcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVxcdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DVFJMLCBcXHUwMDI2cmVnKTtcXG5AQCAtNDM1LDYgKzUwOCwyMyBAQCBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSlcXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuK0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4dCk7XFxuK1xcbisvKipcXG4rICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlXFxuKyAqIEBtb2RlOiBTVCBtb2RlIHRvIGVuYWJsZTogUENJX1RQSF9TVF8oTlNfTU9ERSAvIElWX01PREUgLyBEU19NT0RFKVxcbisgKlxcbisgKiBXcmFwcGVyIGZvciBwY2llX2VuYWJsZV90cGhfZXh0KCksIGF1dG9tYXRpY2FsbHkgdXNlcyB0aGUgcHJlLWNhY2hlZFxcbisgKiB0cGhfbWF4X3R5cGUgdmFsdWUgKG5lZ290aWF0ZWQgbWF4aW11bSByZXF1ZXN0ZXIgdHlwZSBiZXR3ZWVuIGRldmljZSBhbmRcXG4rICogcm9vdCBwb3J0KS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxcbisgKi9cXG4raW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSlcXG4re1xcbitcXHRyZXR1cm4gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCBwZGV2LVxcdTAwM2V0cGhfbWF4X3R5cGUpO1xcbit9XFxuIEVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoKTtcXG4gXFxuIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbkBAIC01MDgsMTQgKzU5OCw2MCBAQCB2b2lkIHBjaV9ub190cGgodm9pZClcXG4gXFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiB7XFxuK1xcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XFxuIFxcdGludCBudW1fZW50cmllcztcXG4gXFx0dTMyIHNhdmVfc2l6ZTtcXG4rXFx0dTMyIHJlZyA9IDA7XFxuIFxcbiBcXHRwZGV2LVxcdTAwM2V0cGhfY2FwID0gcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkocGRldiwgUENJX0VYVF9DQVBfSURfVFBIKTtcXG4gXFx0aWYgKCFwZGV2LVxcdTAwM2V0cGhfY2FwKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbitcXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xcbitcXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcXHUwMDI2cmVnKTtcXG4rXFx0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxcbitcXHRcXHR0cGhfcmVxX3R5cGUgPSBQQ0lfVFBIX1JFUV9FWFRfVFBIO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xcbitcXG4rXFx0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cXG4rXFx0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xcbitcXHRcXHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcXG4rXFx0XFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xcbitcXHRcXHR0cGhfcmVxX3R5cGUgPSBtaW4odHBoX3JlcV90eXBlLCBycF9yZXFfdHlwZSk7XFxuK1xcdH1cXG4rXFxuK1xcdHBkZXYtXFx1MDAzZXRwaF9tYXhfdHlwZSA9IHRwaF9yZXFfdHlwZTtcXG4rXFxuIFxcdG51bV9lbnRyaWVzID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUocGRldik7XFxuIFxcdHNhdmVfc2l6ZSA9IHNpemVvZih1MzIpICsgbnVtX2VudHJpZXMgKiBzaXplb2YodTE2KTtcXG4gXFx0cGNpX2FkZF9leHRfY2FwX3NhdmVfYnVmZmVyKHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCwgc2F2ZV9zaXplKTtcXG4gfVxcbitcXG4rLyoqXFxuKyAqIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQgLSBDaGVjayBpZiByb290IHBvcnQgZXhwb3NlcyBUUEggU1QgX0RTTVxcbisgKiBAcGRldjogdGFyZ2V0IFBDSSBkZXZpY2VcXG4rICpcXG4rICogUmV0dXJuIHRydWUgaWYgcm9vdCBwb3J0IG9mIEBwZGV2IHByb3ZpZGVzIFRQSCBTVCBEU00gZnVuY3Rpb24sXFxuKyAqIGZhbHNlIG90aGVyd2lzZSAoQUNQSSBkaXNhYmxlZCBvciBEU00gbWlzc2luZykuXFxuKyAqL1xcbitib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rI2lmZGVmIENPTkZJR19BQ1BJXFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpycCA9IHBjaWVfZmluZF9yb290X3BvcnQocGRldik7XFxuK1xcdGFjcGlfaGFuZGxlIGhhbmRsZTtcXG4rXFxuK1xcdGlmICghcnAgfHwgIXJwLVxcdTAwM2VidXMgfHwgIXJwLVxcdTAwM2VidXMtXFx1MDAzZWJyaWRnZSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aGFuZGxlID0gQUNQSV9IQU5ETEUocnAtXFx1MDAzZWJ1cy1cXHUwMDNlYnJpZGdlKTtcXG4rXFx0aWYgKCFoYW5kbGUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldHVybiBhY3BpX2NoZWNrX2RzbShoYW5kbGUsIFxcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcXG4rXFx0XFx0XFx0ICAgICAgQklUKFRQSF9TVF9EU01fRlVOQ19JTkRFWCkpO1xcbisjZWxzZVxcbitcXHRyZXR1cm4gZmFsc2U7XFxuKyNlbmRpZlxcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcXG5pbmRleCA4MzAzNjlmZjg3OGRiZS4uYzQwN2MyMTdiNjQ5ZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXFxuQEAgLTYwLDYgKzYwLDI2IEBAIHN0YXRpYyBib29sIGRpc2FibGVfZGVueWxpc3Q7XFxuIG1vZHVsZV9wYXJhbShkaXNhYmxlX2RlbnlsaXN0LCBib29sLCAwNDQ0KTtcXG4gTU9EVUxFX1BBUk1fREVTQyhkaXNhYmxlX2RlbnlsaXN0LCBcXFwiRGlzYWJsZSB1c2Ugb2YgZGV2aWNlIGRlbnlsaXN0LiBEaXNhYmxpbmcgdGhlIGRlbnlsaXN0IGFsbG93cyBiaW5kaW5nIHRvIGRldmljZXMgd2l0aCBrbm93biBlcnJhdGEgdGhhdCBtYXkgbGVhZCB0byBleHBsb2l0YWJsZSBzdGFiaWxpdHkgb3Igc2VjdXJpdHkgaXNzdWVzIHdoZW4gYWNjZXNzZWQgYnkgdW50cnVzdGVkIHVzZXJzLlxcXCIpO1xcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCB0cGhfcG9saWN5O1xcbitzdGF0aWMgaW50IHRwaF9wb2xpY3lfc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuK3tcXG4rXFx0cmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULFxcbitcXHRcXHRcXHRcXHQgICAgIFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QpO1xcbit9XFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyB0cGhfcGFyYW1fb3BzID0ge1xcbitcXHQuc2V0ID0gdHBoX3BvbGljeV9zZXQsXFxuK1xcdC5nZXQgPSBwYXJhbV9nZXRfdWludCxcXG4rfTtcXG4rbW9kdWxlX3BhcmFtX2NiKHRwaF9wb2xpY3ksIFxcdTAwMjZ0cGhfcGFyYW1fb3BzLCBcXHUwMDI2dHBoX3BvbGljeSwgMDY0NCk7XFxuK01PRFVMRV9QQVJNX0RFU0ModHBoX3BvbGljeSxcXG4rXFx0XFxcIkdsb2JhbCBUUEggcG9saWN5IGxldmVsICgwPWRlZmF1bHQgTm8tU1QpOlxcXFxuXFxcIlxcbitcXHRcXFwiMCA9IE5vLVNUIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxcXG5cXFwiXFxuK1xcdFxcXCIxID0gQWRkIElWIG1vZGU6IFJFU09MVkUgb25seSByZXR1cm5zIFBIIGZvciBETUFCVUYgc291cmNlO1xcXFxuXFxcIlxcbitcXHRcXFwiICAgICAgICAgICAgICAgICBTVCBwcm9ncmFtIHN1cHBvcnRzIE5PTkUvRE1BQlVGL0NQVSBzb3VyY2VzXFxcXG5cXFwiXFxuK1xcdFxcXCIyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZSwgU1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcXFxcblxcXCJcXG4rXFx0XFxcIiAgICAgICAgICAgICAgICAgU1QgcHJvZ3JhbSBzdXBwb3J0cyBOT05FL0RNQUJVRi9DUFUgc291cmNlc1xcXFxuXFxcIik7XFxuK1xcbiBzdGF0aWMgYm9vbCB2ZmlvX3BjaV9kZXZfaW5fZGVueWxpc3Qoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3dpdGNoIChwZGV2LVxcdTAwM2V2ZW5kb3IpIHtcXG5AQCAtMTQyLDYgKzE2Miw5IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW5pdF9kZXYoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYpXFxuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfVkdBXFxuIFxcdHZkZXYtXFx1MDAzZWRpc2FibGVfdmdhID0gZGlzYWJsZV92Z2E7XFxuICNlbmRpZlxcbisjaWZkZWYgQ09ORklHX1BDSUVfVFBIXFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgPSB0cGhfcG9saWN5O1xcbisjZW5kaWZcXG4gXFxuIFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2luaXRfZGV2KGNvcmVfdmRldik7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uOTdkYWQ2ZGI2OWUzOWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG5AQCAtMjIsNiArMjIsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2kuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS10cGguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ZmaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NsYWIuaFxcdTAwM2VcXG5AQCAtMTA4NSw2ICsxMDg2LDE0NiBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9leHRfY2FwX3B3cl9wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKVxcbit7XFxuK1xcdHU4IGNhcDtcXG4rXFx0aW50IGJhc2UgPSAocG9zIFxcdTAwM2U9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOlxcbitcXHRcXHRcXHRcXHRcXHRcXHQgUENJX1NURF9IRUFERVJfU0laRU9GO1xcbitcXHRjYXAgPSB2ZGV2LVxcdTAwM2VwY2lfY29uZmlnX21hcFtwb3NdO1xcbitcXG4rXFx0aWYgKGNhcCA9PSBQQ0lfQ0FQX0lEX0JBU0lDKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qIFhYWCBDYW4gd2UgaGF2ZSB0byBhYnV0dGluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZT8gKi9cXG4rXFx0d2hpbGUgKHBvcyAtIDEgXFx1MDAzZT0gYmFzZSBcXHUwMDI2XFx1MDAyNiB2ZGV2LVxcdTAwM2VwY2lfY29uZmlnX21hcFtwb3MgLSAxXSA9PSBjYXApXFxuK1xcdFxcdHBvcy0tO1xcbitcXG4rXFx0cmV0dXJuIHBvcztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgdmZpb191cGRhdGVfdHBoX3Zjb25maWdfYnl0ZXMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGludCBwb3MpXFxuK3tcXG4rXFx0X19sZTMyICp2cHRyID0gKF9fbGUzMiAqKVxcdTAwMjZ2ZGV2LVxcdTAwM2V2Y29uZmlnW3BvcyArIFBDSV9UUEhfQ0FQXTtcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB2ZGV2LVxcdTAwM2VwZGV2O1xcbitcXHR1MzIgdmFsID0gbGUzMl90b19jcHUoKnZwdHIpO1xcbitcXG4rXFx0aWYgKCFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHBkZXYpKSB7XFxuK1xcdFxcdC8qIFJlbW92ZSBleHRlbmRlZCBUUEggaWYgcm9vdC1wb3J0IGRvZXNuJ3Qgc3VwcG9ydCAqL1xcbitcXHRcXHR2YWwgXFx1MDAyNj0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICh2ZGV2LVxcdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpIHtcXG4rXFx0XFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi9cXG4rXFx0XFx0dmFsIFxcdTAwMjY9IH4oUENJX1RQSF9DQVBfU1RfSVYgfCBQQ0lfVFBIX0NBUF9TVF9EUyB8XFxuK1xcdFxcdFxcdCBQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xcbitcXHR9IGVsc2UgaWYgKHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCkge1xcbitcXHRcXHQvKiBSZXBvcnQgb25seSBOby1TVCBhbmQgSVYgbW9kZXMgc3VwcG9ydGVkICovXFxuK1xcdFxcdHZhbCBcXHUwMDI2PSB+UENJX1RQSF9DQVBfU1RfRFM7XFxuK1xcdFxcdC8qIFJlbW92ZSBTVCBsb2NhdGlvbiBhbmQgc2l6ZSBpZiBkZXYgZG9lc24ndCBzdXBwb3J0IElWIG1vZGUgKi9cXG4rXFx0XFx0aWYgKCEodmFsIFxcdTAwMjYgUENJX1RQSF9DQVBfU1RfSVYpKVxcbitcXHRcXHRcXHR2YWwgXFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xcbitcXHR9XFxuK1xcbitcXHQqdnB0ciA9IGNwdV90b19sZTMyKHZhbCk7XFxuK1xcbitcXHQvKiBCYWNrdXAgdXBkYXRlZCBjYXBhYmlsaXR5IHJlZ2lzdGVyIHZhbHVlICovXFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9jYXBfdmlydCA9IHZhbDtcXG4rfVxcbitcXG4rLyogUGVybWlzc2lvbnMgZm9yIFRQSCBleHRlbmRlZCBjYXBhYmlsaXR5ICovXFxuK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcXG4re1xcbitcXHQvKlxcbitcXHQgKiBXZSBvbmx5IHZpcnR1YWxpemUgdGhlIFRQSCBoZWFkZXIgKGV4Y2x1ZGluZyB0aGUgU1QgdGFibGUpLlxcbitcXHQgKiBGb3IgdGhlIFNUIHRhYmxlIChpZiBhbnkpLCB0aGUgcmVhZCBvcGVyYXRpb24gcmV0dXJucyAwIGJ5XFxuK1xcdCAqIGRlZmF1bHQsIGFuZCB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIGRpc2NhcmRlZCBieSBkZWZhdWx0LlxcbitcXHQgKi9cXG4rXFx0aWYgKGFsbG9jX3Blcm1fYml0cyhwZXJtLCBQQ0lfVFBIX0JBU0VfU0laRU9GKSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwX3NldGQocGVybSwgMCwgQUxMX1ZJUlQsIE5PX1dSSVRFKTtcXG4rXFx0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ0FQLCBBTExfVklSVCwgTk9fV1JJVEUpO1xcbitcXG4rXFx0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsXFxuK1xcdCAgICAgICBQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSyB8IFBDSV9UUEhfQ1RSTF9SRVFfRU5fTUFTSyk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfcmVhZChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXFxuK1xcdFxcdFxcdFxcdGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4rXFx0XFx0XFx0XFx0aW50IG9mZnNldCwgX19sZTMyICp2YWwpXFxuK3tcXG4rXFx0aWYgKG9mZnNldCBcXHUwMDNlPSBQQ0lfVFBIX0JBU0VfU0laRU9GKSB7XFxuK1xcdFxcdCp2YWwgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob2Zmc2V0IFxcdTAwM2U9IFBDSV9UUEhfQ0FQIFxcdTAwMjZcXHUwMDI2ICF2ZGV2LVxcdTAwM2V0cGhfb3B0X2luKSB7XFxuK1xcdFxcdCp2YWwgPSBjcHVfdG9fbGUzMigwKTtcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxcbitcXHRcXHRcXHRcXHQgaW50IGNvdW50LCBzdHJ1Y3QgcGVybV9iaXRzICpwZXJtLFxcbitcXHRcXHRcXHRcXHQgaW50IG9mZnNldCwgX19sZTMyIHZhbClcXG4re1xcbitcXHR1MTYgc3RhcnQgPSB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHZkZXYsIHBvcyk7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cXHUwMDNlcGRldjtcXG4rXFx0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xcbitcXHR1OCBtb2RlLCByZXEsIG9yZ19yZXE7XFxuK1xcdF9fbGUzMiBvcmdfdmFsID0gMDtcXG4rXFx0dTE2IGNtZDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmICghdmRldi1cXHUwMDNldHBoX29wdF9pbiB8fCBvZmZzZXQgXFx1MDAzZT0gUENJX1RQSF9CQVNFX1NJWkVPRilcXG4rXFx0XFx0cmV0dXJuIGNvdW50O1xcbitcXG4rXFx0Y21kID0gdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZSh2ZGV2KTtcXG4rXFxuK1xcdG9yZ19jdHJsID0gbGUzMl90b19jcHUoKihfX2xlMzIgKilcXHUwMDI2dmRldi1cXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ1RSTF0pO1xcbitcXHR2ZmlvX2RlZmF1bHRfY29uZmlnX3JlYWQodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBcXHUwMDI2b3JnX3ZhbCk7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcXG4rXFx0aWYgKHJldCAhPSBjb3VudClcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRuZXdfY3RybCA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopXFx1MDAyNnZkZXYtXFx1MDAzZXZjb25maWdbc3RhcnQgKyBQQ0lfVFBIX0NUUkxdKTtcXG4rXFx0aWYgKG5ld19jdHJsID09IG9yZ19jdHJsKVxcbitcXHRcXHRnb3RvIG91dDsgLyogT25seSBjYXJlIGFib3V0IGNoYW5nZXMgaW4gVFBIX0NUUkwuICovXFxuK1xcbitcXHRjYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVxcdTAwMjZ2ZGV2LVxcdTAwM2V2Y29uZmlnW3N0YXJ0ICsgUENJX1RQSF9DQVBdKTtcXG4rXFx0bW9kZSA9IEZJRUxEX0dFVChQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSywgbmV3X2N0cmwpO1xcbitcXHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7XFxuK1xcdGlmIChtb2RlIFxcdTAwM2UgUENJX1RQSF9TVF9EU19NT0RFIHx8ICEoY2FwIFxcdTAwMjYgKDF1IFxcdTAwM2NcXHUwMDNjIG1vZGUpKSB8fCByZXEgPT0gMHgyIHx8XFxuK1xcdFxcdChyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcXHUwMDI2XFx1MDAyNiAhKGNhcCBcXHUwMDI2IFBDSV9UUEhfQ0FQX0VYVF9UUEgpKSlcXG4rXFx0XFx0Z290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi9cXG4rXFxuK1xcdG9yZ19yZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBvcmdfY3RybCk7XFxuK1xcdGlmIChyZXEgPT0gb3JnX3JlcSlcXG4rXFx0XFx0Z290byByZXN0b3JlOyAvKiBPbmx5IGNhcmUgYWJvdXQgcmVxdWVzdGVyIGVuYWJsZSAqL1xcbitcXG4rXFx0aWYgKHJlcSA9PSBQQ0lfVFBIX1JFUV9UUEhfT05MWSB8fCByZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCkge1xcbitcXHRcXHRyZXQgPSBwY2llX2VuYWJsZV90cGhfZXh0KHBkZXYsIG1vZGUsIHJlcSk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGdvdG8gcmVzdG9yZTtcXG4rXFx0fSBlbHNlIGlmIChyZXEgPT0gUENJX1RQSF9SRVFfRElTQUJMRSkge1xcbitcXHRcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHR9XFxuK1xcbitcXHRnb3RvIG91dDtcXG4rXFxuK3Jlc3RvcmU6XFxuK1xcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTtcXG4rb3V0OlxcbitcXHR2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHZkZXYsIGNtZCk7XFxuK1xcdHJldHVybiBjb3VudDtcXG4rfVxcbitcXG4gLypcXG4gICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIHBlcm1pc3Npb24gdGFibGVzXFxuICAqL1xcbkBAIC0xMTAwLDYgKzEyNDEsNyBAQCB2b2lkIHZmaW9fcGNpX3VuaW5pdF9wZXJtX2JpdHModm9pZClcXG4gXFxuIFxcdGZyZWVfcGVybV9iaXRzKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xcbiBcXHRmcmVlX3Blcm1fYml0cyhcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcXG4rXFx0ZnJlZV9wZXJtX2JpdHMoXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XFxuIH1cXG4gXFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcXG5AQCAtMTEyMCw2ICsxMjYyLDkgQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxcbiBcXHQvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgKi9cXG4gXFx0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfZXJyX3Blcm0oXFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XFxuIFxcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX3B3cl9wZXJtKFxcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xcbitcXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF90cGhfcGVybShcXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTtcXG4rXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdLnJlYWRmbiA9IHZmaW9fdHBoX2NvbmZpZ19yZWFkO1xcbitcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcXG4gXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcbiBcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0RWU0VDXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcbiBcXG5AQCAtMTEyOSwyMyArMTI3NCw2IEBAIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcylcXG4te1xcbi1cXHR1OCBjYXA7XFxuLVxcdGludCBiYXNlID0gKHBvcyBcXHUwMDNlPSBQQ0lfQ0ZHX1NQQUNFX1NJWkUpID8gUENJX0NGR19TUEFDRV9TSVpFIDpcXG4tXFx0XFx0XFx0XFx0XFx0XFx0IFBDSV9TVERfSEVBREVSX1NJWkVPRjtcXG4tXFx0Y2FwID0gdmRldi1cXHUwMDNlcGNpX2NvbmZpZ19tYXBbcG9zXTtcXG4tXFxuLVxcdGlmIChjYXAgPT0gUENJX0NBUF9JRF9CQVNJQylcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHQvKiBYWFggQ2FuIHdlIGhhdmUgdG8gYWJ1dHRpbmcgY2FwYWJpbGl0aWVzIG9mIHRoZSBzYW1lIHR5cGU/ICovXFxuLVxcdHdoaWxlIChwb3MgLSAxIFxcdTAwM2U9IGJhc2UgXFx1MDAyNlxcdTAwMjYgdmRldi1cXHUwMDNlcGNpX2NvbmZpZ19tYXBbcG9zIC0gMV0gPT0gY2FwKVxcbi1cXHRcXHRwb3MtLTtcXG4tXFxuLVxcdHJldHVybiBwb3M7XFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgdmZpb19tc2lfY29uZmlnX3JlYWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxcbiBcXHRcXHRcXHRcXHRpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXFxuIFxcdFxcdFxcdFxcdGludCBvZmZzZXQsIF9fbGUzMiAqdmFsKVxcbkBAIC0xNzAxLDYgKzE4MjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0XFx0cmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTtcXG4gXFx0XFx0aWYgKHJldClcXG4gXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKGVjYXAgPT0gUENJX0VYVF9DQVBfSURfVFBIKVxcbitcXHRcXHRcXHR2ZmlvX3VwZGF0ZV90cGhfdmNvbmZpZ19ieXRlcyh2ZGV2LCBlcG9zKTtcXG4gXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IDNmMTFhOTYyNGI5YzAzLi5iOGQ5ZDg0MGE5M2I1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTEzLDYgKzEzLDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2FwZXJ0dXJlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWJ1Z2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldmVudGZkLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG5AQCAtMzAsNiArMzIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvbW11ZmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS10cGguaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NlcV9maWxlLmhcXHUwMDNlXFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19FRUgpXFxuICNpbmNsdWRlIFxcdTAwM2Nhc20vZWVoLmhcXHUwMDNlXFxuQEAgLTEyNywxMCArMTMwLDIwIEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3RwaChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX3ByaXZhdGUoc2VxKTtcXG4rXFxuK1xcdHNlcV9wcmludGYoc2VxLCBcXFwicG9saWN5PSV1IGNhcC12aXJ0PTB4JXggb3B0LWluPSV1XFxcXG5cXFwiLFxcbitcXHRcXHR2ZGV2LVxcdTAwM2V0cGhfcG9saWN5LCB2ZGV2LVxcdTAwM2V0cGhfY2FwX3ZpcnQsIHZkZXYtXFx1MDAzZXRwaF9vcHRfaW4pO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gLypcXG4tICogZGlzYWJsZV9pZGxlX2QzIGFuZCBub2ludHhtYXNrIGFyZSB3cml0YWJsZSBtb2R1bGUgcGFyYW1ldGVycyBsYXRjaGVkXFxuLSAqIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UncyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tIHRoZVxcbi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xcbisgKiBkaXNhYmxlX2lkbGVfZDMsIG5vaW50eG1hc2sgYW5kIHRwaF9wb2xpY3kgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzXFxuKyAqIGxhdGNoZWQgcGVyIGRldmljZSBhdCBpbml0LCBzbyBhIGRldmljZSdzIGVmZmVjdGl2ZSB2YWx1ZSBjYW4gZGlmZmVyIGZyb21cXG4rICogdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzXFxuICAqIGhlcmUgZm9yIHZpc2liaWxpdHk7IHJlYWQtb25seSBwYXJhbWV0ZXJzIGNhbid0IGRyaWZ0IGFuZCBhcmUgb21pdHRlZC5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG5AQCAtMTQ2LDYgKzE1OSw4IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0XFx0XFx0XFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTtcXG4gXFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldiwgXFxcImRpc2FibGVfaWRsZV9kM1xcXCIsIHBjaV9kaXIsXFxuIFxcdFxcdFxcdFxcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfZGlzYWJsZV9pZGxlX2QzKTtcXG4rXFx0ZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldiwgXFxcInRwaFxcXCIsIHBjaV9kaXIsXFxuK1xcdFxcdFxcdFxcdCAgICB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoKTtcXG4gfVxcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbkBAIC02MTAsNiArNjI1LDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0XFx0Z290byBvdXRfZGlzYWJsZV9kZXZpY2U7XFxuIFxcbiBcXHR2ZGV2LVxcdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XFxuK1xcdHZkZXYtXFx1MDAzZXRwaF9vcHRfaW4gPSBmYWxzZTtcXG4rXFx0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBuZXcgdXNlciBzZXNzaW9uICovXFxuK1xcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cXHUwMDNlcGRldik7XFxuIFxcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xcbiBcXHR2ZGV2LVxcdTAwM2VwY2lfc2F2ZWRfc3RhdGUgPSBwY2lfc3RvcmVfc2F2ZWRfc3RhdGUocGRldik7XFxuIFxcdGlmICghdmRldi1cXHUwMDNlcGNpX3NhdmVkX3N0YXRlKVxcbkBAIC03NTcsNiArNzc1LDkgQEAgdm9pZCB2ZmlvX3BjaV9jb3JlX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXG4gXFx0dmZpb19wY2lfemRldl9jbG9zZV9kZXZpY2UodmRldik7XFxuIFxcbitcXHQvKiBSZXNldCBUUEggc3RhdHVzIG9uIGV4aXQgdXNlciBzZXNzaW9uICovXFxuK1xcdHBjaWVfZGlzYWJsZV90cGgodmRldi1cXHUwMDNlcGRldik7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBJZiB3ZSBoYXZlIHNhdmVkIHN0YXRlLCByZXN0b3JlIGl0LiAgSWYgd2UgY2FuIHJlc2V0IHRoZSBkZXZpY2UsXFxuIFxcdCAqIGV2ZW4gYmV0dGVyLiAgUmVzZXR0aW5nIHdpdGggY3VycmVudCBzdGF0ZSBzZWVtcyBiZXR0ZXIgdGhhblxcbkBAIC0xNTU4LDYgKzE1NzksNyBAQCBsb25nIHZmaW9fcGNpX2NvcmVfaW9jdGwoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHVuc2lnbmVkIGludCBjbWQsXFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9XFxuIFxcdFxcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSwgdmRldik7XFxuIFxcdHZvaWQgX191c2VyICp1YXJnID0gKHZvaWQgX191c2VyICopYXJnO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c3dpdGNoIChjbWQpIHtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9HRVRfSU5GTzpcXG5AQCAtMTU2OSw5ICsxNTkxLDE1IEBAIGxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9JT0VWRU5URkQ6XFxuIFxcdFxcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9pb2V2ZW50ZmQodmRldiwgdWFyZyk7XFxuIFxcdGNhc2UgVkZJT19ERVZJQ0VfUENJX0hPVF9SRVNFVDpcXG4tXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2lvY3RsX3BjaV9ob3RfcmVzZXQodmRldiwgdWFyZyk7XFxuK1xcdFxcdHJldCA9IHZmaW9fcGNpX2lvY3RsX3BjaV9ob3RfcmVzZXQodmRldiwgdWFyZyk7XFxuK1xcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXHRjYXNlIFZGSU9fREVWSUNFX1JFU0VUOlxcbi1cXHRcXHRyZXR1cm4gdmZpb19wY2lfaW9jdGxfcmVzZXQodmRldiwgdWFyZyk7XFxuK1xcdFxcdHJldCA9IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHZkZXYsIHVhcmcpO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVxcdTAwM2VwZGV2KTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9TRVRfSVJRUzpcXG4gXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2lvY3RsX3NldF9pcnFzKHZkZXYsIHVhcmcpO1xcbiBcXHRkZWZhdWx0OlxcbkBAIC0xNjA3LDYgKzE2MzUsMjk5IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB1MzIgdmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXFx1MDAzZXBkZXY7XFxuK1xcdHUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19DQVApIHtcXG4rXFx0XFx0cmV0dXJuIHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xcbitcXHR9IGVsc2UgaWYgKGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSB7XFxuK1xcdFxcdHJldCA9IHBjaV9tc2l4X3ZlY19jb3VudChwZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuK3tcXG4rXFx0dTMyIGZsYWdzID0gVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9QSDtcXG4rXFxuK1xcdGlmICh2ZGV2LVxcdTAwM2V0cGhfcG9saWN5IFxcdTAwM2U9IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KHZkZXYtXFx1MDAzZXRwaF9jYXBfdmlydCBcXHUwMDI2IFBDSV9UUEhfQ0FQX1NUX0lWKSkge1xcbitcXHRcXHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkU7XFxuK1xcdFxcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfRE1BQlVGO1xcbitcXHRcXHRpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2KSlcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7XFxuK1xcdH1cXG4rXFx0aWYgKHZkZXYtXFx1MDAzZXRwaF9wb2xpY3kgXFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQodmRldi1cXHUwMDNldHBoX2NhcF92aXJ0IFxcdTAwMjYgUENJX1RQSF9DQVBfU1RfRFMpKSB7XFxuK1xcdFxcdGlmICh2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUodmRldikgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTtcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUY7XFxuK1xcdFxcdFxcdGlmIChwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXFx1MDAzZXBkZXYpKVxcbitcXHRcXHRcXHRcXHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVTtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LVxcdTAwM2VwZGV2KSlcXG4rXFx0XFx0XFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0NQVV9TVDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZsYWdzO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGggX191c2VyICphcmcsXFxuK1xcdFxcdFxcdFxcdCAgICAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB0cGg7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXBjaWVfc3RkX3RwaF9zdXBwb3J0ZWQodmRldi1cXHUwMDNlcGRldikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXFxuK1xcdFxcdFxcdFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VUIHwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXFxuK1xcdFxcdFxcdHNpemVvZih0cGgpKTtcXG4rXFx0aWYgKHJldCAhPSAxKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZ0cGgsIGFyZywgc2l6ZW9mKHRwaCkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSB7XFxuK1xcdFxcdGlmICh0cGguZmxhZ3MgIT0gMClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdHZkZXYtXFx1MDAzZXRwaF9vcHRfaW4gPSAxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF2ZGV2LVxcdTAwM2V0cGhfb3B0X2luKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHRwaC5mbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTtcXG4rXFxuK1xcdHJldHVybiBjb3B5X3RvX3VzZXIoYXJnLCBcXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3Jlc29sdmVfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHR1MzIgZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XFxuK1xcdHUzMiBhbGxvd19zcmMgPSAwO1xcbitcXG4rXFx0aWYgKGZsYWdzIFxcdTAwMjYgKFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEggfFxcbitcXHRcXHQgICAgIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfU1QpKVxcbitcXHRcXHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XFxuK1xcdGlmIChmbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9DUFVfU1QpXFxuK1xcdFxcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XFxuK1xcdFxcdFxcdCAgICAgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVDtcXG4rXFxuK1xcdHJldHVybiBhbGxvd19zcmM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZ2V0X2RtYWJ1Zl90cGgoaW50IGZkLCBib29sIGV4dGVuZGVkLCB1MTYgKnN0LCB1OCAqcGgpXFxuK3tcXG4rXFx0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTtcXG4rXFx0aWYgKElTX0VSUihkbWFidWYpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xcbitcXG4rXFx0cmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuK1xcdGlmIChyZXQgPT0gMClcXG4rXFx0XFx0cmV0ID0gZG1hX2J1Zl9nZXRfcGNpX3RwaChkbWFidWYsIGV4dGVuZGVkLCBzdCwgcGgpO1xcbitcXHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZ2V0X3RwaF9zdF90YWcoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiBzcmNfYml0cyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyIHNyY19obmRsLCBib29sIGV4dGVuZGVkLCB1MTYgKnN0KVxcbit7XFxuK1xcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHR1OCBwaDtcXG4rXFxuK1xcdGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKVxcbitcXHRcXHRyZXQgPSB2ZmlvX3BjaV9nZXRfZG1hYnVmX3RwaChzcmNfaG5kbCwgZXh0ZW5kZWQsIHN0LCBcXHUwMDI2cGgpO1xcbitcXHRlbHNlIGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFKVxcbitcXHRcXHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHJlcV90eXBlLCBzcmNfaG5kbCwgc3QpO1xcbitcXHRlbHNlIGlmIChzcmNfYml0cyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQpXFxuK1xcdFxcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgcmVxX3R5cGUsIHNyY19obmRsLCBzdCk7XFxuK1xcdGVsc2UgaWYgKHNyY19iaXRzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKVxcbitcXHRcXHQqc3QgPSAwO1xcbitcXHRlbHNlXFxuK1xcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcbitcXHRpZiAocmV0ICE9IDApXFxuK1xcdFxcdCpzdCA9IDA7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuK1xcdFxcdFxcdHUzMiBmbGFncyxcXG4rXFx0XFx0XFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgX191c2VyICphcmcsXFxuK1xcdFxcdFxcdHNpemVfdCBhcmdzeilcXG4re1xcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSByZXNvbHZlO1xcbitcXHR1MzIgdXNlcl9mbGFncywgYWxsb3dfc3JjO1xcbitcXHRib29sIGV4dGVuZGVkO1xcbitcXHR1MTYgdGFnID0gMDtcXG4rXFx0dTggcGggPSAwO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCF2ZGV2LVxcdTAwM2V0cGhfb3B0X2luKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LCBWRklPX0RFVklDRV9GRUFUVVJFX0dFVCxcXG4rXFx0XFx0XFx0XFx0IHNpemVvZihyZXNvbHZlKSk7XFxuK1xcdGlmIChyZXQgIT0gMSlcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChjb3B5X2Zyb21fdXNlcihcXHUwMDI2cmVzb2x2ZSwgYXJnLCBzaXplb2YocmVzb2x2ZSkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdHVzZXJfZmxhZ3MgPSByZXNvbHZlLmZsYWdzO1xcbitcXHRleHRlbmRlZCA9ICEhKHVzZXJfZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xcbitcXHRpZiAoZXh0ZW5kZWQgXFx1MDAyNlxcdTAwMjYgIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQodmRldi1cXHUwMDNlcGRldikpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0dXNlcl9mbGFncyBcXHUwMDI2PSB+VkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEO1xcbitcXG4rXFx0YWxsb3dfc3JjID0gdmZpb19wY2lfZ2V0X3RwaF9yZXNvbHZlX2FsbG93X3NyYyh2ZGV2KTtcXG4rXFx0aWYgKHVzZXJfZmxhZ3MgXFx1MDAyNiB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHJlc29sdmUudmFsaWQgPSAwO1xcbitcXHRyZXNvbHZlLnBoID0gMDtcXG4rXFx0cmVzb2x2ZS5zdCA9IDA7XFxuK1xcbitcXHRpZiAodXNlcl9mbGFncyBcXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGKSB7XFxuK1xcdFxcdHJldCA9IHZmaW9fcGNpX2dldF9kbWFidWZfdHBoKHJlc29sdmUuc3JjLCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnRhZywgXFx1MDAyNnBoKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmVzb2x2ZS5waCA9IHBoO1xcbitcXHRcXHRyZXNvbHZlLnZhbGlkID0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIO1xcbitcXHRcXHRpZiAodmRldi1cXHUwMDNldHBoX3BvbGljeSBcXHUwMDNlPSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKSB7XFxuK1xcdFxcdFxcdHJlc29sdmUuc3QgPSB0YWc7XFxuK1xcdFxcdFxcdHJlc29sdmUudmFsaWQgfD0gVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1NUO1xcbitcXHRcXHR9XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyh2ZGV2LVxcdTAwM2VwZGV2LCB1c2VyX2ZsYWdzLCByZXNvbHZlLnNyYyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZXh0ZW5kZWQsIFxcdTAwMjZ0YWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcXG4rXFx0cmVzb2x2ZS5zdCA9IHRhZztcXG4rXFxuK291dDpcXG4rXFx0cmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsIFxcdTAwMjZyZXNvbHZlLCBzaXplb2YocmVzb2x2ZSkpID8gLUVGQVVMVCA6IDA7XFxuK31cXG4rXFxuK3N0YXRpYyB1MzIgdmZpb19wY2lfZ2V0X3RwaF9zdF9hbGxvd19zcmMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbit7XFxuK1xcdHUzMiBmbGFncyA9IHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eSh2ZGV2KTtcXG4rXFx0dTMyIGFsbG93X3NyYyA9IDA7XFxuK1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRilcXG4rXFx0XFx0YWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfRE1BQlVGO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVSlcXG4rXFx0XFx0YWxsb3dfc3JjIHw9IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFIHxcXG4rXFx0XFx0XFx0ICAgICBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UO1xcbitcXHRpZiAoZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkUpXFxuK1xcdFxcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX05PTkU7XFxuK1xcbitcXHRyZXR1cm4gYWxsb3dfc3JjO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHR1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0c2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCB0cGhfc3Q7XFxuK1xcdHUzMiB1c2VyX2ZsYWdzLCBhbGxvd19zcmMsIHN0X3NpemU7XFxuK1xcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cXHUwMDNlcGRldjtcXG4rXFx0Ym9vbCBleHRlbmRlZCwgc3RvcF9vbl96ZXJvO1xcbitcXHR1MzIgKnNyY19obmRsID0gTlVMTDtcXG4rXFx0dTE2ICp0YWdzID0gTlVMTDtcXG4rXFx0aW50IHJldCwgaTtcXG4rXFx0dTE2IGNtZDtcXG4rXFxuK1xcdGlmICghdmRldi1cXHUwMDNldHBoX29wdF9pbiB8fCB2ZGV2LVxcdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKHRwaF9zdCkpO1xcbitcXHRpZiAocmV0ICE9IDEpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnRwaF9zdCwgYXJnLCBzaXplb2YodHBoX3N0KSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0dXNlcl9mbGFncyA9IHRwaF9zdC5mbGFncztcXG4rXFx0ZXh0ZW5kZWQgPSAhISh1c2VyX2ZsYWdzIFxcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcXG4rXFx0aWYgKGV4dGVuZGVkIFxcdTAwMjZcXHUwMDI2ICFwY2llX2V4dF90cGhfc3VwcG9ydGVkKHZkZXYtXFx1MDAzZXBkZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdHVzZXJfZmxhZ3MgXFx1MDAyNj0gflZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcXG4rXFxuK1xcdHN0b3Bfb25femVybyA9ICEhKHVzZXJfZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfUkVRVUlSRV9TVCk7XFxuK1xcdGlmIChzdG9wX29uX3plcm8gXFx1MDAyNlxcdTAwMjYgKHVzZXJfZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0dXNlcl9mbGFncyBcXHUwMDI2PSB+VkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1Q7XFxuK1xcbitcXHRhbGxvd19zcmMgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X2FsbG93X3NyYyh2ZGV2KTtcXG4rXFx0aWYgKHVzZXJfZmxhZ3MgXFx1MDAyNiB+YWxsb3dfc3JjIHx8ICFpc19wb3dlcl9vZl8yKHVzZXJfZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHN0X3NpemUgPSB2ZmlvX3BjaV9nZXRfdHBoX3N0X3NpemUodmRldik7XFxuK1xcdGlmICh0cGhfc3Quc3RhcnQgXFx1MDAzZT0gc3Rfc2l6ZSB8fCB0cGhfc3QuY291bnQgXFx1MDAzZSBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8XFxuK1xcdFxcdHRwaF9zdC5jb3VudCA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmICghKHVzZXJfZmxhZ3MgXFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX05PTkUpKSB7XFxuK1xcdFxcdHNyY19obmRsID0gbWVtZHVwX2FycmF5X3VzZXIodTY0X3RvX3VzZXJfcHRyKHRwaF9zdC5kZXN0cyksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgdHBoX3N0LmNvdW50LCBzaXplb2YodTMyKSk7XFxuK1xcdFxcdGlmIChJU19FUlIoc3JjX2huZGwpKVxcbitcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzcmNfaG5kbCk7XFxuK1xcdH1cXG4rXFx0dGFncyA9IGtjYWxsb2ModHBoX3N0LmNvdW50LCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCF0YWdzKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdHBoX3N0LmNvdW50OyBpKyspIHtcXG4rXFx0XFx0cmV0ID0gdmZpb19wY2lfZ2V0X3RwaF9zdF90YWcocGRldiwgdXNlcl9mbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgc3JjX2huZGwgPyBzcmNfaG5kbFtpXSA6IDAsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGV4dGVuZGVkLCBcXHUwMDI2dGFnc1tpXSk7XFxuK1xcdFxcdGlmIChyZXQgfHwgKHN0b3Bfb25femVybyBcXHUwMDI2XFx1MDAyNiB0YWdzW2ldID09IDApKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGkgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGNtZCA9IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUodmRldik7XFxuK1xcdFxcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIHRwaF9zdC5zdGFydCwgaSwgdGFncyk7XFxuK1xcdFxcdHZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTtcXG4rXFx0fVxcbitcXG4rb3V0OlxcbitcXHRrZnJlZSh0YWdzKTtcXG4rXFx0a2ZyZWUoc3JjX2huZGwpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcXG4ge1xcbkBAIC0xNjI1LDYgKzE5NDYsMTYgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XFxuIFxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcXG4rXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIOlxcbitcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRTpcXG4rXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSh2ZGV2LCBmbGFncyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZywgYXJnc3opO1xcbitcXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUOlxcbitcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU5PVFRZO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXFxuaW5kZXggYzE2ZjQ2MGMwMWQ2ODEuLjUzNTE4MzljMTMzOGFmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXFxuQEAgLTMsNiArMyw3IEBAXFxuICAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2ktdHBoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtcmVzdi5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInZmaW9fcGNpX3ByaXYuaFxcXCJcXG5AQCAtMTksNyArMjAsMTcgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xcbiBcXHR1MzIgbnJfcmFuZ2VzO1xcbiBcXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbiBcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbi1cXHR1OCByZXZva2VkIDogMTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFVwZGF0ZXMgcHJvdGVjdGVkIGJ5IGRtYWJ1Zi1cXHUwMDNlcmVzdiwgQHJldm9rZWQgYWRkaXRpb25hbGx5XFxuK1xcdCAqIHByb3RlY3RlZCBieSBtZW1vcnlfbG9jay5cXG4rXFx0ICovXFxuK1xcdHUxNiB0cGhfc3RfZXh0O1xcbitcXHR1OCB0cGhfc3Q7XFxuK1xcdGJvb2wgcmV2b2tlZDtcXG4rXFx0dTggdHBoX3N0X3ZhbGlkOjE7XFxuK1xcdHU4IHRwaF9zdF9leHRfdmFsaWQ6MTtcXG4rXFx0dTggdHBoX3BoOjI7XFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXFxuQEAgLTMwLDcgKzQxLDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbiBcXHRpZiAoIWF0dGFjaG1lbnQtXFx1MDAzZXBlZXIycGVlcilcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0aWYgKHByaXYtXFx1MDAzZXJldm9rZWQpXFxuK1xcdGlmIChSRUFEX09OQ0UocHJpdi1cXHUwMDNlcmV2b2tlZCkpXFxuIFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4gXFx0aWYgKCFkbWFfYnVmX2F0dGFjaF9yZXZvY2FibGUoYXR0YWNobWVudCkpXFxuQEAgLTY5LDYgKzgwLDI2IEBAIHZmaW9fcGNpX2RtYV9idWZfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxcbitcXHRcXHRcXHRcXHRcXHR1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdGlmIChleHRlbmRlZCkge1xcbitcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXRwaF9zdF9leHRfdmFsaWQpXFxuK1xcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0XFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXFx1MDAzZXRwaF9zdF9leHQ7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmICghcHJpdi1cXHUwMDNldHBoX3N0X3ZhbGlkKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdCpzdGVlcmluZ190YWcgPSBwcml2LVxcdTAwM2V0cGhfc3Q7XFxuK1xcdH1cXG4rXFx0KnBoID0gcHJpdi1cXHUwMDNldHBoX3BoO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl91bm1hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcXG4gXFx0XFx0XFx0XFx0ICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKVxcbkBAIC0xMDEsNiArMTMyLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XFxuIFxcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcXG4rXFx0LmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCxcXG4gXFx0Lm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsXFxuIFxcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcXG4gXFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXFxuQEAgLTMzMyw2ICszNjUsNzIgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbitcXHR1OCBjb21wO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0Y29tcCA9IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHZkZXYtXFx1MDAzZXBkZXYpO1xcbitcXHRpZiAoY29tcCA9PSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXFxuK1xcdFxcdFxcdFxcdCBzaXplb2Yoc2V0X3RwaCkpO1xcbitcXHRpZiAocmV0ICE9IDEpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNnNldF90cGgsIGFyZywgc2l6ZW9mKHNldF90cGgpKSlcXG4rXFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuK1xcbitcXHRpZiAoc2V0X3RwaC5mbGFncyBcXHUwMDI2IH4oVkZJT19ETUFfQlVGX1RQSF9TVCB8IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRpZiAoc2V0X3RwaC5waCBcXHUwMDI2IH4weDMpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0aWYgKChzZXRfdHBoLmZsYWdzIFxcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBjb21wICE9IFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRkbWFidWYgPSBkbWFfYnVmX2dldChzZXRfdHBoLmRtYWJ1Zl9mZCk7XFxuK1xcdGlmIChJU19FUlIoZG1hYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcXG4rXFxuK1xcdGlmIChkbWFidWYtXFx1MDAzZW9wcyAhPSBcXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuK1xcdGlmIChwcml2LVxcdTAwM2V2ZGV2ICE9IHZkZXYpIHtcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBvdXRfcHV0O1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkbWFfcmVzdl9sb2NrX2ludGVycnVwdGlibGUoZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcHV0O1xcbitcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3N0X2V4dCAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZ19leHQ7XFxuK1xcdHByaXYtXFx1MDAzZXRwaF9waCAgICAgICAgID0gc2V0X3RwaC5waDtcXG4rXFx0cHJpdi1cXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFxcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVCk7XFxuK1xcdHByaXYtXFx1MDAzZXRwaF9zdF9leHRfdmFsaWQgPVxcbitcXHRcXHQhIShzZXRfdHBoLmZsYWdzIFxcdTAwMjYgVkZJT19ETUFfQlVGX1RQSF9TVF9FWFQpO1xcbitcXHRkbWFfcmVzdl91bmxvY2soZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFx0cmV0ID0gMDtcXG4rXFxuK291dF9wdXQ6XFxuK1xcdGRtYV9idWZfcHV0KGRtYWJ1Zik7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaCBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLjAzYzRhMDQxNDI2NGVmIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcXG5AQCAtMTEsNiArMTEsMTIgQEBcXG4gLyogQ2FwIG1heGltdW0gbnVtYmVyIG9mIGlvZXZlbnRmZHMgcGVyIGRldmljZSAoYXJiaXRyYXJ5KSAqL1xcbiAjZGVmaW5lIFZGSU9fUENJX0lPRVZFTlRGRF9NQVhcXHRcXHQxMDAwXFxuIFxcbitlbnVtIHZmaW9fcGNpX3RwaF9wb2xpY3kge1xcbitcXHRWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NUID0gMCxcXG4rXFx0VkZJT19QQ0lfVFBIX1BPTElDWV9JVl9TVCA9IDEsXFxuK1xcdFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QgPSAyLFxcbit9O1xcbitcXG4gc3RydWN0IHZmaW9fcGNpX2lvZXZlbnRmZCB7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRuZXh0O1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2VcXHQqdmRldjtcXG5AQCAtMTE4LDYgKzEyNCwxMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZyxcXG4gXFx0XFx0XFx0XFx0ICBzaXplX3QgYXJnc3opO1xcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgdTMyIGZsYWdzLFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCBfX3VzZXIgKmFyZyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgc2l6ZV90IGFyZ3N6KTtcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xcbiAjZWxzZVxcbkBAIC0xMjgsNiArMTM4LDE0IEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludFxcbit2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXFxuK1xcdFxcdFxcdFxcdCAgc2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHJldHVybiAtRU5PVFRZO1xcbit9XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiB7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxcbmluZGV4IGQxMjAzZGE1NmZjNWY3Li4xNGU4ZWI2MWE2MmMwNCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXFxuQEAgLTExMyw2ICsxMTMsMjkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHtcXG4gXFx0ICovXFxuIFxcdHZvaWQgKCp1bnBpbikoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcXG4gXFxuK1xcdC8qKlxcbitcXHQgKiBAZ2V0X3BjaV90cGg6XFxuK1xcdCAqXFxuK1xcdCAqIFJldHJpZXZlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludCAoVFBIKSBzdGVlcmluZyBtZXRhZGF0YSBmb3JcXG4rXFx0ICogdGhpcyBidWZmZXIgc28gYW4gaW1wb3J0ZXIgY2FuIHByb2dyYW0gYSBtYXRjaGluZyBTVC9QSCBoaW50IG9uXFxuK1xcdCAqIG91dGJvdW5kIFRMUHMgdGFyZ2V0aW5nIHRoZSBleHBvcnRlciBmb3IgcGVlci10by1wZWVyIERNQS5cXG4rXFx0ICpcXG4rXFx0ICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciBmb3Igd2hpY2ggdG8gcmV0cmlldmUgVFBIIG1ldGFkYXRhXFxuK1xcdCAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcXG4rXFx0ICogQHN0ZWVyaW5nX3RhZzogUmV0dXJucyB0aGUgcmF3IFRQSCBzdGVlcmluZyB0YWcgZm9yIHRoZSByZXF1ZXN0ZWRcXG4rXFx0ICogICAgICAgICAgICAgICAgbmFtZXNwYWNlXFxuK1xcdCAqIEBwaDogUmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludCAoMi1iaXQgdmFsdWUpXFxuK1xcdCAqXFxuK1xcdCAqIE9wdGlvbmFsIGNhbGxiYWNrIGZvciBkbWFfYnVmX2dldF9wY2lfdHBoKCkuIENhbGxlZCB3aXRoXFxuK1xcdCAqIFxcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVPUE5PVFNVUFAgd2hlblxcbitcXHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cXG4rXFx0ICpcXG4rXFx0ICogUmV0dXJuZWQgbWV0YWRhdGEgZm9sbG93cyB0aGUgbGlmZXRpbWUgcnVsZXMgZG9jdW1lbnRlZCBmb3JcXG4rXFx0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLlxcbitcXHQgKi9cXG4rXFx0aW50ICgqZ2V0X3BjaV90cGgpKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXFxuK1xcdFxcdFxcdCAgIHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xcbitcXG4gXFx0LyoqXFxuIFxcdCAqIEBtYXBfZG1hX2J1ZjpcXG4gXFx0ICpcXG5AQCAtNTYzLDYgKzU4Niw4IEBAIHZvaWQgZG1hX2J1Zl9kZXRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4gXFx0XFx0ICAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XFxuIGludCBkbWFfYnVmX3BpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpO1xcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcXG4raW50IGRtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcXG4rXFx0XFx0XFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaCk7XFxuIFxcbiBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0IGRtYV9idWZfZXhwb3J0X2luZm8gKmV4cF9pbmZvKTtcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG5pbmRleCBiZTY4Y2QxN2YyZjgzMy4uYWVhZjcwMWU3OTY1YjAgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxcbkBAIC05LDYgKzksOCBAQFxcbiAjaWZuZGVmIExJTlVYX1BDSV9UUEhfSFxcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxcbiBcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbitcXG4gLypcXG4gICogQWNjb3JkaW5nIHRvIHRoZSBFQ04gZm9yIFBDSSBGaXJtd2FyZSBTcGVjLCBTdGVlcmluZyBUYWcgY2FuIGJlIGRpZmZlcmVudFxcbiAgKiBkZXBlbmRpbmcgb24gdGhlIG1lbW9yeSB0eXBlOiBWb2xhdGlsZSBNZW1vcnkgb3IgUGVyc2lzdGVudCBNZW1vcnkuIFdoZW4gYVxcbkBAIC0yMSwyNiArMjMsNjkgQEAgZW51bSB0cGhfbWVtX3R5cGUge1xcbiB9O1xcbiBcXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxcbisvKipcXG4rICogcGNpZV9zdGRfdHBoX3N1cHBvcnRlZCAtIGNoZWNrIHN0YW5kYXJkIFRQSCByZXF1ZXN0ZXIgc3VwcG9ydFxcbisgKiBAcGRldjogUENJIGRldmljZVxcbisgKi9cXG4rI2RlZmluZSBwY2llX3N0ZF90cGhfc3VwcG9ydGVkKHBkZXYpIFxcXFxcXG4rXFx0KChwZGV2KS1cXHUwMDNldHBoX21heF90eXBlIFxcdTAwM2U9IFBDSV9UUEhfUkVRX1RQSF9PTkxZKVxcbisvKipcXG4rICogcGNpZV9leHRfdHBoX3N1cHBvcnRlZCAtIGNoZWNrIGV4dGVuZGVkIFRQSCByZXF1ZXN0ZXIgc3VwcG9ydFxcbisgKiBAcGRldjogUENJIGRldmljZVxcbisgKi9cXG4rI2RlZmluZSBwY2llX2V4dF90cGhfc3VwcG9ydGVkKHBkZXYpIFxcXFxcXG4rXFx0KChwZGV2KS1cXHUwMDNldHBoX21heF90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpXFxuIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuIFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKTtcXG4taW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcXG4tXFx0XFx0XFx0ZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK2ludCBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IHN0YXJ0LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHQoc3RydWN0IHBjaV9kZXYgKmRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdFxcdCAgICB1OCByZXFfdHlwZSwgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0XFx0XFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpO1xcbiB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XFxuK2ludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLCB1OCByZXFfdHlwZSk7XFxuK2ludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpO1xcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbiB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK3U4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xcbit1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuICNlbHNlXFxuKyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZVxcbisjZGVmaW5lIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikgZmFsc2VcXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4rc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IHN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxcbit7IHJldHVybiAtRUlOVkFMOyB9XFxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2ICp0YWcpXFxuK3sgcmV0dXJuIC1FSU5WQUw7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXFxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHBjaWVfZGlzYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYpIHsgfVxcbi1zdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxcbitzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLFxcbitcXHRcXHRcXHRcXHQgICAgICB1OCByZXFfdHlwZSlcXG4reyByZXR1cm4gLUVJTlZBTDsgfVxcbitzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXFxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cXG4rc3RhdGljIGlubGluZSB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIDA7IH1cXG4rc3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX1RQSF9MT0NfTk9ORTsgfVxcbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2VuYWJsZWRfcmVxX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cXG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4reyByZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkU7IH1cXG4rc3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3sgcmV0dXJuIGZhbHNlOyB9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmIC8qIExJTlVYX1BDSV9UUEhfSCAqL1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li41ZWQ1ODc5OWE5YjEyOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9wY2kuaFxcbkBAIC00NzIsNyArNDcyLDYgQEAgc3RydWN0IHBjaV9kZXYge1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRhdHNfZW5hYmxlZDoxO1xcdFxcdC8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU3ZjICovXFxuIFxcdHVuc2lnbmVkIGludFxcdHBhc2lkX2VuYWJsZWQ6MTtcXHQvKiBQcm9jZXNzIEFkZHJlc3MgU3BhY2UgSUQgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0cHJpX2VuYWJsZWQ6MTtcXHRcXHQvKiBQYWdlIFJlcXVlc3QgSW50ZXJmYWNlICovXFxuLVxcdHVuc2lnbmVkIGludFxcdHRwaF9lbmFibGVkOjE7XFx0XFx0LyogVExQIFByb2Nlc3NpbmcgSGludHMgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0Zm1fZW5hYmxlZDoxO1xcdFxcdC8qIEZsaXQgTW9kZSAoc2VnbWVudCBjYXB0dXJlZCkgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0aXNfbWFuYWdlZDoxO1xcdFxcdC8qIE1hbmFnZWQgdmlhIGRldnJlcyAqL1xcbiBcXHR1bnNpZ25lZCBpbnRcXHRpc19tc2lfbWFuYWdlZDoxO1xcdC8qIE1TSSByZWxlYXNlIHZpYSBkZXZyZXMgaW5zdGFsbGVkICovXFxuQEAgLTU4OCw3ICs1ODcsMTAgQEAgc3RydWN0IHBjaV9kZXYge1xcbiBcXHR1OCByZXNldF9tZXRob2RzW1BDSV9OVU1fUkVTRVRfTUVUSE9EU107IC8qIEluIHByaW9yaXR5IG9yZGVyICovXFxuIFxcbiAjaWZkZWYgQ09ORklHX1BDSUVfVFBIXFxuLVxcdHUxNlxcdFxcdHRwaF9jYXA7XFx0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXFxuK1xcdHUxNlxcdFxcdHRwaF9jYXA6MTM7XFx0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXFxuK1xcdHUxNlxcdFxcdHRwaF9tYXhfdHlwZToyOyAvKiBOZWdvdGlhdGVkIG1heCBUUEggcmVxdWVzdGVyIHR5cGVcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYmV0d2VlbiBkZXZpY2UgYW5kIHJvb3QgcG9ydCAqL1xcbitcXHR1MTZcXHRcXHR0cGhfZW5hYmxlZDoxO1xcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cXG4gXFx0dThcXHRcXHR0cGhfbW9kZTtcXHQvKiBUUEggbW9kZSAqL1xcbiBcXHR1OFxcdFxcdHRwaF9yZXFfdHlwZTtcXHQvKiBUUEggcmVxdWVzdGVyIHR5cGUgKi9cXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5pbmRleCA5YTE2NzRjMTUyYWEyOS4uZDYwNjRmYTllODBhNjkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbkBAIC0xNDksNiArMTQ5LDkgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcXG4gXFx0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXFx0bmI7XFxuIFxcdHN0cnVjdCByd19zZW1hcGhvcmVcXHRtZW1vcnlfbG9jaztcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGRtYWJ1ZnM7XFxuK1xcdHU4XFx0XFx0XFx0dHBoX29wdF9pbjtcXG4rXFx0dThcXHRcXHRcXHR0cGhfcG9saWN5O1xcbitcXHR1MzJcXHRcXHRcXHR0cGhfY2FwX3ZpcnQ7XFxuIH07XFxuIFxcbiBlbnVtIHZmaW9fcGNpX2lvX3dpZHRoIHtcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uOWJjM2NlZjdhODlhYzQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmhcXG5AQCAtMTUzNCw2ICsxNTM0LDE1MCBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcXG4gICovXFxuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXFxuIFxcbisvKipcXG4rICogVXBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCBhc3NvY2lhdGUgVFBIIChUTFAgUHJvY2Vzc2luZyBIaW50cykgbWV0YWRhdGFcXG4rICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieVxcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYgb24gdGhpcyBkZXZpY2UsIGFuZCB0aGUgZGV2aWNlIG11c3QgcmVwb3J0XFxuKyAqIFRQSCBDb21wbGV0ZXIgc3VwcG9ydCBpbiBEZXZpY2UgQ2FwYWJpbGl0aWVzIDIgKGJpdHMgMTM6MTIpOyByZXF1ZXN0c1xcbisgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvXFxuKyAqIHJlcG9ydCB0aGUgRXh0ZW5kZWQgVFBIIENvbXBsZXRlciBlbmNvZGluZy4gT3RoZXJ3aXNlIHRoZSBpb2N0bFxcbisgKiByZXR1cm5zIC1FT1BOT1RTVVBQLlxcbisgKlxcbisgKiBAZG1hYnVmX2ZkIGlzIHRoZSBmaWxlIGRlc2NyaXB0b3IgcmV0dXJuZWQgYnkgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLlxcbisgKlxcbisgKiA4LWJpdCBTVCAoQHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoQHN0ZWVyaW5nX3RhZ19leHQpIGFyZVxcbisgKiBkaXN0aW5jdCBuYW1lc3BhY2VzLiBAZmxhZ3MgaXMgdGhlIGF1dGhvcml0YXRpdmUgdmFsaWRpdHkgbWFzayBmb3IgdGhlXFxuKyAqIHR3byBuYW1lc3BhY2VzOiBWRklPX0RNQV9CVUZfVFBIX1NUIG1hcmtzIEBzdGVlcmluZ190YWcgdmFsaWQgYW5kXFxuKyAqIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIG1hcmtzIEBzdGVlcmluZ190YWdfZXh0IHZhbGlkLiBBbiBpbXBvcnRlclxcbisgKiByZXF1ZXN0cyBvbmUgbmFtZXNwYWNlIGFuZCByZWNlaXZlcyB0aGUgbWF0Y2hpbmcgdmFsdWUuXFxuKyAqXFxuKyAqIEVhY2ggU0VUIGZ1bGx5IHJlcGxhY2VzIHRoZSBkbWEtYnVmJ3MgVFBIIHN0YXRlIGZvciBmdXR1cmUgcXVlcmllc1xcbisgKiBvbmx5LiBBIG5hbWVzcGFjZSB3aG9zZSBmbGFnIGJpdCBpcyBjbGVhciBpcyByZXBvcnRlZCBhcyB1bnN1cHBvcnRlZFxcbisgKiB0byBmdXR1cmUgaW1wb3J0ZXJzOyBhbiBpbXBvcnRlciB0aGF0IGhhcyBhbHJlYWR5IHJldHJpZXZlZCBhIHZhbHVlXFxuKyAqIGlzIHVuYWZmZWN0ZWQuIEBmbGFncyA9PSAwIGxlYXZlcyBib3RoIG5hbWVzcGFjZXMgdW5zdXBwb3J0ZWQgZm9yXFxuKyAqIGZ1dHVyZSBpbXBvcnRlcnMuXFxuKyAqXFxuKyAqIEBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLlxcbisgKlxcbisgKiBVbmRlZmluZWQgQGZsYWdzIGFuZCBAcGggYml0cyBtdXN0IGFsd2F5cyBiZSB6ZXJvLlxcbisgKlxcbisgKiBVc2Vyc3BhY2UgbXVzdCBjb25maWd1cmUgVFBIIGJlZm9yZSBoYW5kaW5nIHRoZSBkbWEtYnVmIGZkIHRvIGFuXFxuKyAqIGltcG9ydGVyLlxcbisgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfVFBIIDEzXFxuK1xcbisjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RcXHRcXHQoMSBcXHUwMDNjXFx1MDAzYyAwKVxcbisjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgMSlcXG4rXFxuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHtcXG4rXFx0X19zMzJcXHRkbWFidWZfZmQ7XFxuK1xcdF9fdTMyXFx0ZmxhZ3M7XFxuK1xcdF9fdTE2XFx0c3RlZXJpbmdfdGFnX2V4dDtcXG4rXFx0X191OFxcdHN0ZWVyaW5nX3RhZztcXG4rXFx0X191OFxcdHBoO1xcbit9O1xcbitcXG4rLyogUENJZSBUUEggZGV2aWNlIGZlYXR1cmUgZGVmaW5pdGlvbnMgZm9yIFZGSU9fREVWSUNFX0ZFQVRVUkUgaW9jdGwgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFxcdFxcdDE0XFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRVxcdDE1XFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RcXHQxNlxcbitcXG4rLypcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggLSBDb250cm9sIGFuZCBxdWVyeSBQQ0kgVFBIIGNhcGFiaWxpdGllc1xcbisgKlxcbisgKiBTRVQ6IE9wdC1pbiB0byBUUEggZmVhdHVyZSBmb3IgdGhlIGRldmljZTsgZmxhZ3MgbXVzdCBiZSB6ZXJvLlxcbisgKiBHRVQ6IFJldHVybiBzdXBwb3J0ZWQgVFBIIGNhcGFiaWxpdHkgYml0cyAoc2VlIFZGSU9fREVWSUNFX1RQSF9DQVBfKilcXG4rICogICAgICBpbiBmbGFncy4gUmV0dXJucyBlcnJvciBpZiBTRVQgaGFzIG5vdCBiZWVuIGludm9rZWQgZmlyc3QuXFxuKyAqXFxuKyAqIFVzZXJzcGFjZSBtdXN0IGZpcnN0IGludm9rZSBTRVQgb24gdGhpcyBmZWF0dXJlIHRvIGVuYWJsZSBUUEggc3VwcG9ydCxcXG4rICogcmVjZWl2ZSB2YWxpZCBjYXBhYmlsaXR5IGJpdHMgdmlhIEdFVCwgZ2FpbiBwZXJtaXNzaW9uIGZvciB1c2luZ1xcbisgKiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9SRVNPTFZFIC8gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1QsIGFuZCBhY2Nlc3NcXG4rICogdGhlIHZpcnR1YWxpemVkIFRQSCBjYXBhYmlsaXR5IHJlZ2lzdGVycyB2aWEgVkZJTyBjb25maWcgc3BhY2UgYWNjZXNzZXMuXFxuKyAqL1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGgge1xcbitcXHRfX3UzMiBmbGFncztcXG4rfTtcXG4rXFxuKy8qIERNQUJVRiBzb3VyY2UgcmVzb2x2ZSBwcm9jZXNzaW5nIGhpbnQgc3VwcG9ydGVkICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0RNQUJVRl9QSFxcdCgxdSBcXHUwMDNjXFx1MDAzYyAwKVxcbisvKiBETUFCVUYgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRlxcdFxcdCgxdSBcXHUwMDNjXFx1MDAzYyAxKVxcbisvKiBDUFUgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0NQVVxcdFxcdCgxdSBcXHUwMDNjXFx1MDAzYyAyKVxcbisvKiBOT05FIHNvdXJjZSAobWVhbnMgc3RlZXJpbmcgdGFnIGlzIHplcm8pIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX05PTkVcXHRcXHQoMXUgXFx1MDAzY1xcdTAwM2MgMylcXG4rLyogRE1BQlVGIHNvdXJjZSByZXNvbHZlIHN0ZWVyaW5nIHRhZyBzdXBwb3J0ZWQgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1NUXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDQpXFxuKy8qIENQVSBzb3VyY2UgcmVzb2x2ZSBzdGVlcmluZyB0YWcgc3VwcG9ydGVkICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0NQVV9TVFxcdCgxdSBcXHUwMDNjXFx1MDAzYyA1KVxcbitcXG4rLypcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgVFBIIGF0dHJpYnV0ZXMgZnJvbSBnaXZlbiBzb3VyY2VcXG4rICpcXG4rICogR0VUIG9ubHlcXG4rICpcXG4rICogUmVxdWlyZXMgcHJpb3Igc3VjY2Vzc2Z1bCBTRVQgb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEgsIG90aGVyd2lzZVxcbisgKiB0aGlzIGZlYXR1cmUgd2lsbCByZXR1cm4gZXJyb3IuXFxuKyAqXFxuKyAqIEBmbGFnczogSU4gLSBzb3VyY2UgdHlwZSBzZWxlY3RvciAoc2VlIFZGSU9fREVWSUNFX1RQSF9TUkNfKilcXG4rICogICAgICAgICBhbmQgc3RlZXJpbmcgdGFnIG5hbWVzcGFjZSBzZWxlY3RvciAoc2VlIFZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRClcXG4rICogQHNyYzogICBJTiAtIHNvdXJjZSBpZGVudGlmaWVyLCBlLmcuIGRtYWJ1ZiBmZCB3aGVuIFNSQ19ETUFCVUYgaXMgc2V0IGluXFxuKyAqICAgICAgICAgZmxhZ3NcXG4rICogQHZhbGlkOiBPVVQgLSBiaXRtYXAgaW5kaWNhdGluZyB2YWxpZCBvdXRwdXQgZmllbGRzLCBzZWVcXG4rICogICAgICAgICBWRklPX0RFVklDRV9UUEhfVkFMSURfKlxcbisgKiBAcGg6ICAgIE9VVCAtIFRQSCBwcm9jZXNzaW5nIGhpbnQgKHZhbGlkIHdoZW4gVkFMSURfUEggaXMgc2V0IGluIHZhbGlkKVxcbisgKiBAc3Q6ICAgIE9VVCAtIFRQSCBzdGVlcmluZyB0YWcgKHZhbGlkIHdoZW4gVkFMSURfU1QgaXMgc2V0IGluIHZhbGlkKVxcbisgKi9cXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUge1xcbitcXHRfX3UzMiBmbGFncztcXG4rXFx0X191MzIgc3JjO1xcbitcXHRfX3U4ICB2YWxpZDtcXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEggKDF1IFxcdTAwM2NcXHUwMDNjIDApIC8qIHBoIGhvbGRzIHZhbGlkIHByb2Nlc3NpbmcgaGludCAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVCAoMXUgXFx1MDAzY1xcdTAwM2MgMSkgLyogc3QgaG9sZHMgdmFsaWQgc3RlZXJpbmcgdGFnICovXFxuK1xcdF9fdTggIHBoO1xcbitcXHRfX3UxNiBzdDtcXG4rfTtcXG4rXFxuKy8qXFxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUIC0gQmF0Y2ggcHJvZ3JhbSBhcmNoaXRlY3RlZCBzdGVlcmluZyB0YWdcXG4rICogdGFibGUgZW50cmllc1xcbisgKiBSZXR1cm4gdmFsdWU6IFxcdTAwM2U9MCA9IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzO1xcbisgKiAgICAgICAgICAgICAgIFxcdTAwM2MwICA9IG5lZ2F0aXZlIGVycm5vXFxuKyAqXFxuKyAqIFNFVCBvbmx5XFxuKyAqXFxuKyAqIEFkZGl0aW9uYWwgY29uc3RyYWludDogVXNlcnNwYWNlIG11c3QgY29tcGxldGUgdHdvIHByZXJlcXVpc2l0ZSBzdGVwc1xcbisgKiBiZWZvcmUgaW52b2tpbmcgdGhpcyBmZWF0dXJlOlxcbisgKiAxLiBDYWxsIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIIHdpdGggU0VUIHRvIGVuYWJsZSB2ZmlvIFRQSCBwZXJtaXNzaW9uO1xcbisgKiAyLiBXcml0ZSB0aGUgVFBIIGNvbnRyb2wgcmVnaXN0ZXIgdG8gYWN0aXZhdGUgZGV2aWNlIGhhcmR3YXJlIFRQSCBsb2dpYy5cXG4rICpcXG4rICogQGZsYWdzOiBJTiAtIHNvdXJjZSB0eXBlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX1NSQ18qKSBhbmRcXG4rICogICAgICAgICBzdGVlcmluZyB0YWcgbmFtZXNwYWNlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKSBhbmRcXG4rICogICAgICAgICBmYWlsdXJlIHBvbGljeSAoc2VlIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUKVxcbisgKiBAc3RhcnQ6IElOIC0gZmlyc3Qgc3RlZXJpbmcgdGFnIHRhYmxlIGluZGV4IC8gTVNJLVggdmVjdG9yXFxuKyAqIEBjb3VudDogSU4gLSBudW1iZXIgb2YgY29udGlndW91cyBlbnRyaWVzIHRvIHByb2dyYW1cXG4rICogQGRlc3RzOiBJTiAtIHVzZXIgcG9pbnRlciB0byBhcnJheSBvZiBzb3VyY2UgdTMyIHZhbHVlc1xcbisgKi9cXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHtcXG4rXFx0X191MzIgZmxhZ3M7XFxuK1xcdF9fdTE2IHN0YXJ0O1xcbitcXHRfX3UxNiBjb3VudDtcXG4rXFx0X19hbGlnbmVkX3U2NCBkZXN0cztcXG4rfTtcXG4rXFxuKy8qIFNvdXJjZSBob2xkcyBkbWEtYnVmIGZkICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgICAgICAoMXUgXFx1MDAzY1xcdTAwM2MgMClcXG4rLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBzdGVlcmluZyB0YWcgbmFtZXNwYWNlICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDEpXFxuKy8qIFNvdXJjZSBob2xkcyB2b2xhdGlsZSBtZW1vcnkgQ1BVIElEICovXFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEVcXHQoMXUgXFx1MDAzY1xcdTAwM2MgMilcXG4rLyogU291cmNlIGhvbGRzIHBlcnNpc3RlbnQgbWVtb3J5IENQVSBJRCAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlRcXHQoMXUgXFx1MDAzY1xcdTAwM2MgMylcXG4rLyogVFBIX1NUIG9ubHk6IHNldCBzdGVlcmluZyB0YWcgdG8gemVybyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORVxcdCgxdSBcXHUwMDNjXFx1MDAzYyA0KVxcbisvKiBUUEhfU1Qgb25seTogZmFpbCBpZiByZXNvbHZlZCBzdGVlcmluZyB0YWcgaXMgemVybyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUXFx0KDF1IFxcdTAwM2NcXHUwMDNjIDUpXFxuK1xcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cXG4gXFxuIC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNTo0Ni40NDc2NzkzOTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4MTE2MDkyNzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaFwiLFxuICAgIFwiZG1hX2J1Zl9nZXRfcGNpX3RwaFwiLFxuICAgIFwicGNpZV90cGhfZ2V0X2NwdV9zdF9leHRcIixcbiAgICBcInBjaWVfdHBoX3NldF9zdF9lbnRyaWVzXCIsXG4gICAgXCJwY2llX2VuYWJsZV90cGhfZXh0XCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBWRklPIFBDSSBhbmQgRE1BLUJVRiB0byBzdXBwb3J0IFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIEl0IGFkZHMgbmV3IFZGSU8gaW9jdGxzL2ZlYXR1cmVzIGZvciBUUEggY29uZmlndXJhdGlvbiBhbmQgcmVzb2x1dGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYjAwYzYyNDc3MWZjMDc2NGY3NzcxZjcwNWMxNTkwZjdmNjQ0Yzc5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTY6MDU6NDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuaW5kZXggZDUwNGM2MzZkYzI5NGUuLmU4MzE0ZWQyNDBkMzM2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuKysrIGIvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuY1xuQEAgLTkzOSw2ICs5MzksNyBAQCBkbWFfYnVmX3Bpbl9vbl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKVxuICAqICAgICAtIGRtYV9idWZfdW5tYXBfYXR0YWNobWVudCgpXG4gICogICAgIC0gZG1hX2J1Zl92bWFwKClcbiAgKiAgICAgLSBkbWFfYnVmX3Z1bm1hcCgpXG4rICogICAgIC0gZG1hX2J1Zl9nZXRfcGNpX3RwaCgpXG4gICpcbiAgKiAyLiBJbXBvcnRlcnMgbXVzdCBub3QgaG9sZCB0aGUgZG1hLWJ1ZiByZXNlcnZhdGlvbiBsb2NrIHdoZW4gY2FsbGluZyB0aGVzZVxuICAqICAgIGZ1bmN0aW9uczpcbkBAIC05NzksNiArOTgwLDcgQEAgZG1hX2J1Zl9waW5fb25fbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy51bm1hcF9kbWFfYnVmKClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy52bWFwKClcbiAgKiAgICAgLSBcdTAwMjZkbWFfYnVmX29wcy52dW5tYXAoKVxuKyAqICAgICAtIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoKClcbiAgKlxuICAqIDMuIEV4cG9ydGVycyBtdXN0IGhvbGQgdGhlIGRtYS1idWYgcmVzZXJ2YXRpb24gbG9jayB3aGVuIGNhbGxpbmcgdGhlc2VcbiAgKiAgICBmdW5jdGlvbnM6XG5AQCAtMTE0NCw2ICsxMTQ2LDM2IEBAIHZvaWQgZG1hX2J1Zl91bnBpbihzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpXG4gfVxuIEVYUE9SVF9TWU1CT0xfTlNfR1BMKGRtYV9idWZfdW5waW4sIFwiRE1BX0JVRlwiKTtcbiBcbisvKipcbisgKiBkbWFfYnVmX2dldF9wY2lfdHBoIC0gUmV0cmlldmUgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50IChUUEgpIG1ldGFkYXRhXG4rICogQGRtYWJ1ZjogRE1BIGJ1ZmZlciB0byBxdWVyeVxuKyAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbisgKiBAc3RlZXJpbmdfdGFnOiByZXR1cm5zIHRoZSByYXcgc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZVxuKyAqIEBwaDogcmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludFxuKyAqXG4rICogV3JhcHBlciBmb3IgdGhlIG9wdGlvbmFsIFx1MDAyNmRtYV9idWZfb3BzLmdldF9wY2lfdHBoIGNhbGxiYWNrLlxuKyAqXG4rICogTXVzdCBiZSBjYWxsZWQgd2l0aCBcdTAwMjZkbWFfYnVmLnJlc3YgaGVsZC4gUmV0dXJucyAtRU9QTk9UU1VQUCBpZiB0aGVcbisgKiBleHBvcnRlciBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrIG9yIGhhcyBubyBtZXRhZGF0YSBmb3IgdGhlXG4rICogcmVxdWVzdGVkIG5hbWVzcGFjZS5cbisgKlxuKyAqIFRoZSByZXR1cm5lZCBzdGVlcmluZyB0YWcgYW5kIHByb2Nlc3NpbmcgaGludCBhcmUgb25seSB2YWxpZCB1bnRpbCB0aGVcbisgKiBleHBvcnRlciBpbnZhbGlkYXRlcyB0aGUgY3VycmVudCBtYXBwaW5nIChzaWduYWxsZWQgdG8gdGhlIGltcG9ydGVyIHZpYVxuKyAqIFx1MDAyNmRtYV9idWZfYXR0YWNoX29wcy5tb3ZlX25vdGlmeSkuIEltcG9ydGVycyBtdXN0IHJlLXF1ZXJ5IGFmdGVyIGEgbmV3XG4rICogbWFwcGluZyBpcyBlc3RhYmxpc2hlZCBmb2xsb3dpbmcgaW52YWxpZGF0aW9uLlxuKyAqL1xuK2ludCBkbWFfYnVmX2dldF9wY2lfdHBoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsIGJvb2wgZXh0ZW5kZWQsXG4rXHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbit7XG4rXHRkbWFfcmVzdl9hc3NlcnRfaGVsZChkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRpZiAoIWRtYWJ1Zi1cdTAwM2VvcHMtXHUwMDNlZ2V0X3BjaV90cGgpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldHVybiBkbWFidWYtXHUwMDNlb3BzLVx1MDAzZWdldF9wY2lfdHBoKGRtYWJ1ZiwgZXh0ZW5kZWQsIHN0ZWVyaW5nX3RhZywgcGgpO1xuK31cbitFWFBPUlRfU1lNQk9MX05TX0dQTChkbWFfYnVmX2dldF9wY2lfdHBoLCBcIkRNQV9CVUZcIik7XG4rXG4gLyoqXG4gICogZG1hX2J1Zl9tYXBfYXR0YWNobWVudCAtIFJldHVybnMgdGhlIHNjYXR0ZXJsaXN0IHRhYmxlIG9mIHRoZSBhdHRhY2htZW50O1xuICAqIG1hcHBlZCBpbnRvIF9kZXZpY2VfIGFkZHJlc3Mgc3BhY2UuIElzIGEgd3JhcHBlciBmb3IgbWFwX2RtYV9idWYoKSBvZiB0aGVcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS90cGguYyBiL2RyaXZlcnMvcGNpL3RwaC5jXG5pbmRleCA2NTVmZmQ2MGU2MmY2YS4uZTZhODUwYWIyYjAzN2UgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS90cGguY1xuKysrIGIvZHJpdmVycy9wY2kvdHBoLmNcbkBAIC0xNjUsMTQgKzE2NSw2MiBAQCBzdGF0aWMgdTggZ2V0X3N0X21vZGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuICAqL1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbi1cdHUzMiByZWc7XG4rXHR1MzIgcmVnID0gMDtcbitcbitcdGlmICghcGRldi1cdTAwM2V0cGhfY2FwKVxuK1x0XHRyZXR1cm4gUENJX1RQSF9MT0NfTk9ORTtcbiBcbiBcdHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwZGV2LVx1MDAzZXRwaF9jYXAgKyBQQ0lfVFBIX0NBUCwgXHUwMDI2cmVnKTtcbiBcbi1cdHJldHVybiBGSUVMRF9HRVQoUENJX1RQSF9DQVBfTE9DX01BU0ssIHJlZyk7XG4rXHRyZXR1cm4gcmVnIFx1MDAyNiBQQ0lfVFBIX0NBUF9MT0NfTUFTSztcbiB9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKTtcbiBcbisvKipcbisgKiBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlIC0gUmV0dXJuIHRoZSBkZXZpY2UncyBlbmFibGVkIFRQSCByZXF1ZXN0ZXIgdHlwZVxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZXR1cm46IFBDSV9UUEhfUkVRX0RJU0FCTEUsIFBDSV9UUEhfUkVRX1RQSF9PTkxZIG9yIFBDSV9UUEhfUkVRX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRyZXR1cm4gcGRldi1cdTAwM2V0cGhfcmVxX3R5cGU7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZW5hYmxlZF9yZXFfdHlwZSk7XG4rXG4rLyoqXG4rICogcGNpZV90cGhfY29tcGxldGVyX3R5cGUgLSBSZXR1cm4gdGhlIGRldmljZSdzIFRQSCBDb21wbGV0ZXIgc3VwcG9ydFxuKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5XG4rICpcbisgKiBSZWFkcyB0aGUgXCJUUEggQ29tcGxldGVyIFN1cHBvcnRlZFwiIGZpZWxkIChiaXRzIDEzOjEyKSBvZiBEZXZpY2VcbisgKiBDYXBhYmlsaXRpZXMgMi4gVGhlIHJlc2VydmVkIDBiMTAgZW5jb2RpbmcgaXMgZm9sZGVkIGludG9cbisgKiBcIm5vdCBzdXBwb3J0ZWRcIiBzbyBjYWxsZXJzIG9ubHkgbmVlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHRocmVlXG4rICogZGVmaW5lZCB2YWx1ZXMuXG4rICpcbisgKiBSZXR1cm46IG9uZSBvZiAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUsXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZIG9yXG4rICogICAgICAgICAlUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX0VYVF9UUEguXG4rICovXG4rdTggcGNpZV90cGhfY29tcGxldGVyX3R5cGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0dTMyIHJlZztcbitcbitcdGlmIChwY2llX2NhcGFiaWxpdHlfcmVhZF9kd29yZChwZGV2LCBQQ0lfRVhQX0RFVkNBUDIsIFx1MDAyNnJlZykpXG4rXHRcdHJldHVybiBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfTk9ORTtcbitcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IocmVnKSlcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1xuK1x0c3dpdGNoIChGSUVMRF9HRVQoUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX01BU0ssIHJlZykpIHtcbitcdGNhc2UgUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZOlxuK1x0XHRyZXR1cm4gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX1RQSF9PTkxZO1xuK1x0Y2FzZSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSDpcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9FWFRfVFBIO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FO1xuK1x0fVxuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKTtcbitcbiAvKlxuICAqIFJldHVybiB0aGUgc2l6ZSBvZiBTVCB0YWJsZS4gSWYgU1QgdGFibGUgaXMgbm90IGluIFRQSCBSZXF1ZXN0ZXIgRXh0ZW5kZWRcbiAgKiBDYXBhYmlsaXR5IHNwYWNlLCByZXR1cm4gMC4gT3RoZXJ3aXNlIHJldHVybiB0aGUgU1QgVGFibGUgU2l6ZSArIDEuXG5AQCAtMTg0LDkgKzIzMiw2IEBAIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcbiBcdC8qIENoZWNrIFNUIHRhYmxlIGxvY2F0aW9uIGZpcnN0ICovXG4gXHRsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuLVxuLVx0LyogQ29udmVydCBsb2MgdG8gbWF0Y2ggd2l0aCBQQ0lfVFBIX0xPQ18qIGRlZmluZWQgaW4gcGNpX3JlZ3MuaCAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbiBcdGlmIChsb2MgIT0gUENJX1RQSF9MT0NfQ0FQKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC0yMzEsMjAgKzI3NiwyMiBAQCBzdGF0aWMgaW50IHdyaXRlX3RhZ190b19zdF90YWJsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGluZGV4LCB1MTYgdGFnKVxuIH1cbiBcbiAvKipcbi0gKiBwY2llX3RwaF9nZXRfY3B1X3N0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeSBhc3NvY2lhdGVkXG4tICogd2l0aCBhIHNwZWNpZmljIENQVVxuKyAqIHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KCkgLSBSZXRyaWV2ZSBTdGVlcmluZyBUYWcgZm9yIGEgdGFyZ2V0IG1lbW9yeVxuKyAqIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIENQVSwgd2l0aCBleHBsaWNpdCByZXF1ZXN0ZXIgdHlwZSBzZWxlY3Rpb25cbiAgKiBAcGRldjogUENJIGRldmljZVxuICAqIEBtZW1fdHlwZTogdGFyZ2V0IG1lbW9yeSB0eXBlICh2b2xhdGlsZSBvciBwZXJzaXN0ZW50IFJBTSlcbisgKiBAcmVxX3R5cGU6IFRQSCByZXF1ZXN0ZXIgdHlwZSB0byBzZWxlY3QgU1QgbmFtZXNwYWNlXG4gICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcbiAgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWRcbiAgKlxuLSAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYVxuLSAqIHNwZWNpZmljIENQVSBhcyBpbmRpY2F0ZWQgYnkgY3B1LlxuKyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLFxuKyAqIHVzaW5nIHRoZSBzcGVjaWZpZWQgVFBIIHJlcXVlc3RlciB0eXBlIHRvIHNlbGVjdCB0aGUgY29ycmVjdCBTVCBuYW1lc3BhY2UuXG4rICogVmFsaWRhdGVzIHJlcXVlc3RlciB0eXBlIGFnYWluc3QgaGFyZHdhcmUgbmVnb3RpYXRlZCBjYXBhYmlsaXR5IGxpbWl0cy5cbiAgKlxuICAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbiAgKi9cbi1pbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4tXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4raW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbitcdFx0XHQgICAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKVxuIHtcbiAjaWZkZWYgQ09ORklHX0FDUElcbiBcdHN0cnVjdCBwY2lfZGV2ICpycDtcbkBAIC0yNTMsNiArMzAwLDEwIEBAIGludCBwY2llX3RwaF9nZXRfY3B1X3N0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdHUzMiBjcHVfdWlkO1xuIFx0aW50IHJldDtcbiBcbitcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHxcbitcdFx0cmVxX3R5cGUgXHUwMDNlIHBkZXYtXHUwMDNldHBoX21heF90eXBlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdHJldCA9IGFjcGlfZ2V0X2NwdV91aWQoY3B1LCBcdTAwMjZjcHVfdWlkKTtcbiBcdGlmIChyZXQgIT0gMClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0yNjgsMzUgKzMxOSw1NCBAQCBpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuIFxuLVx0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuK1x0KnRhZyA9IHRwaF9leHRyYWN0X3RhZyhtZW1fdHlwZSwgcmVxX3R5cGUsIFx1MDAyNmluZm8pO1xuIFxuLVx0cGNpX2RiZyhwZGV2LCBcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCBjcHU9JWQsIHRhZz0lIzA0eFxcblwiLFxuK1x0cGNpX2RiZyhwZGV2LCBcImdldCBzdGVlcmluZyB0YWc6IG1lbV90eXBlPSVzLCByZXFfdHlwZT0ldSwgY3B1PSVkLCB0YWc9JSMwNHhcXG5cIixcbiBcdFx0KG1lbV90eXBlID09IFRQSF9NRU1fVFlQRV9WTSkgPyBcInZvbGF0aWxlXCIgOiBcInBlcnNpc3RlbnRcIixcbi1cdFx0Y3B1LCAqdGFnKTtcbitcdFx0cmVxX3R5cGUsIGNwdSwgKnRhZyk7XG4gXG4gXHRyZXR1cm4gMDtcbiAjZWxzZVxuIFx0cmV0dXJuIC1FTk9ERVY7XG4gI2VuZGlmXG4gfVxuLUVYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4rRVhQT1JUX1NZTUJPTChwY2llX3RwaF9nZXRfY3B1X3N0X2V4dCk7XG4gXG4gLyoqXG4tICogcGNpZV90cGhfc2V0X3N0X2VudHJ5KCkgLSBTZXQgU3RlZXJpbmcgVGFnIGluIHRoZSBTVCB0YWJsZSBlbnRyeVxuKyAqIHBjaWVfdHBoX2dldF9jcHVfc3QoKSAtIFJldHJpZXZlIFN0ZWVyaW5nIFRhZyBmb3IgYSB0YXJnZXQgbWVtb3J5IGFzc29jaWF0ZWRcbisgKiB3aXRoIGEgc3BlY2lmaWMgQ1BVXG4gICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4XG4tICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHdyaXR0ZW5cbisgKiBAbWVtX3R5cGU6IHRhcmdldCBtZW1vcnkgdHlwZSAodm9sYXRpbGUgb3IgcGVyc2lzdGVudCBSQU0pXG4rICogQGNwdTogYXNzb2NpYXRlZCBDUFUgaWRcbisgKiBAdGFnOiBTdGVlcmluZyBUYWcgdG8gYmUgcmV0dXJuZWRcbiAgKlxuLSAqIEZpZ3VyZSBvdXQgdGhlIHByb3BlciBsb2NhdGlvbiBvZiBTVCB0YWJsZSwgZWl0aGVyIGluIHRoZSBNU0ktWCB0YWJsZSBvclxuLSAqIGluIHRoZSBUUEggRXh0ZW5kZWQgQ2FwYWJpbGl0eSBzcGFjZSwgYW5kIHdyaXRlIHRoZSBTdGVlcmluZyBUYWcgaW50b1xuLSAqIHRoZSBTVCBlbnRyeSBwb2ludGVkIGJ5IGluZGV4LlxuKyAqIFJldHVybiB0aGUgU3RlZXJpbmcgVGFnIGZvciBhIHRhcmdldCBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgQ1BVLFxuKyAqIHVzaW5nIHRoZSBkZWZhdWx0IG5lZ290aWF0ZWQgVFBIIHJlcXVlc3RlciB0eXBlLlxuICAqXG4gICogUmV0dXJuOiAwIGlmIHN1Y2Nlc3MsIG90aGVyd2lzZSBuZWdhdGl2ZSB2YWx1ZSAoLWVycm5vKVxuICAqL1xuLWludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0dW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4re1xuK1x0cmV0dXJuIHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIG1lbV90eXBlLCBwZGV2LVx1MDAzZXRwaF9tYXhfdHlwZSxcbitcdFx0XHRcdCAgICAgICBjcHUsIHRhZyk7XG4rfVxuK0VYUE9SVF9TWU1CT0wocGNpZV90cGhfZ2V0X2NwdV9zdCk7XG4rXG4rLyoqXG4rICogcGNpZV90cGhfc2V0X3N0X2VudHJpZXMgLSBCYXRjaCBzZXQgU3RlZXJpbmcgVGFnIGVudHJpZXMgaW4gdGhlIFNUIHRhYmxlXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAc3RhcnQ6IHN0YXJ0aW5nIFNUIHRhYmxlIGluZGV4XG4rICogQGNvdW50OiBudW1iZXIgb2YgY29udGlndW91cyBlbnRyaWVzIHRvIHdyaXRlXG4rICogQHRhZ3M6IGFycmF5IG9mIHUxNiB0YWcgdmFsdWVzIHRvIHByb2dyYW1cbisgKlxuKyAqIFJldHVybjogbnVtYmVyIG9mIHN1Y2Nlc3NmdWxseSB3cml0dGVuIGVudHJpZXMsIG9yIG5lZ2F0aXZlIGVycm5vXG4rICovXG4raW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXG4rXHRcdFx0ICAgIHVuc2lnbmVkIGludCBjb3VudCwgY29uc3QgdTE2ICp0YWdzKVxuIHtcbi1cdHUzMiBsb2M7XG4gXHRpbnQgZXJyID0gMDtcbitcdHUzMiBsb2MsIGk7XG4gXG4gXHRpZiAoIXBkZXYtXHUwMDNldHBoX2NhcClcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMzA2LDcgKzM3Niw3IEBAIGludCBwY2llX3RwaF9zZXRfc3RfZW50cnkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZylcbiBcbiBcdC8qIE5vIG5lZWQgdG8gd3JpdGUgdGFnIGlmIGRldmljZSBpcyBpbiBcIk5vIFNUIE1vZGVcIiAqL1xuIFx0aWYgKHBkZXYtXHUwMDNldHBoX21vZGUgPT0gUENJX1RQSF9TVF9OU19NT0RFKVxuLVx0XHRyZXR1cm4gMDtcbitcdFx0cmV0dXJuIGNvdW50O1xuIFxuIFx0LypcbiBcdCAqIERpc2FibGUgVFBIIGJlZm9yZSB1cGRhdGluZyBTVCB0byBhdm9pZCBwb3RlbnRpYWwgaW5zdGFiaWxpdHkgYXNcbkBAIC0zMTUsMzEgKzM4NSw0NyBAQCBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4gXHRzZXRfY3RybF9yZWdfcmVxX2VuKHBkZXYsIFBDSV9UUEhfUkVRX0RJU0FCTEUpO1xuIFxuIFx0bG9jID0gcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhwZGV2KTtcbi1cdC8qIENvbnZlcnQgbG9jIHRvIG1hdGNoIHdpdGggUENJX1RQSF9MT0NfKiAqL1xuLVx0bG9jID0gRklFTERfUFJFUChQQ0lfVFBIX0NBUF9MT0NfTUFTSywgbG9jKTtcbi1cbi1cdHN3aXRjaCAobG9jKSB7XG4tXHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XG4tXHRcdGVyciA9IHBjaV9tc2l4X3dyaXRlX3RwaF90YWcocGRldiwgaW5kZXgsIHRhZyk7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBQQ0lfVFBIX0xPQ19DQVA6XG4tXHRcdGVyciA9IHdyaXRlX3RhZ190b19zdF90YWJsZShwZGV2LCBpbmRleCwgdGFnKTtcbi1cdFx0YnJlYWs7XG4tXHRkZWZhdWx0OlxuLVx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0fVxuLVxuLVx0aWYgKGVycikge1xuLVx0XHRwY2llX2Rpc2FibGVfdHBoKHBkZXYpO1xuLVx0XHRyZXR1cm4gZXJyO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuK1x0XHRzd2l0Y2ggKGxvYykge1xuK1x0XHRjYXNlIFBDSV9UUEhfTE9DX01TSVg6XG4rXHRcdFx0ZXJyID0gcGNpX21zaXhfd3JpdGVfdHBoX3RhZyhwZGV2LCBzdGFydCArIGksIHRhZ3NbaV0pO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFBDSV9UUEhfTE9DX0NBUDpcbitcdFx0XHRlcnIgPSB3cml0ZV90YWdfdG9fc3RfdGFibGUocGRldiwgc3RhcnQgKyBpLCB0YWdzW2ldKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHR9XG4rXHRcdGlmIChlcnIgIT0gMCkge1xuK1x0XHRcdHBjaV9lcnIocGRldiwgXCJmYWlsZWQgdG8gc2V0IHN0ZWVyaW5nIHRhZzogJXMgdGFibGUsIGluZGV4PSV1LCB0YWdzPSV1LCByZXQ9JWRcXG5cIixcbitcdFx0XHRcdChsb2MgPT0gUENJX1RQSF9MT0NfTVNJWCkgPyBcIk1TSS1YXCIgOiBcIlNUXCIsXG4rXHRcdFx0XHRzdGFydCArIGksIHRhZ3NbaV0sIGVycik7XG4rXHRcdFx0cGNpZV9kaXNhYmxlX3RwaChwZGV2KTtcbitcdFx0XHRyZXR1cm4gaSBcdTAwM2UgMCA/IGkgOiBlcnI7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHNldF9jdHJsX3JlZ19yZXFfZW4ocGRldiwgcGRldi1cdTAwM2V0cGhfcmVxX3R5cGUpO1xuIFxuLVx0cGNpX2RiZyhwZGV2LCBcInNldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBpbmRleD0lZCwgdGFnPSUjMDR4XFxuXCIsXG4tXHRcdChsb2MgPT0gUENJX1RQSF9MT0NfTVNJWCkgPyBcIk1TSS1YXCIgOiBcIlNUXCIsIGluZGV4LCB0YWcpO1xuK1x0cGNpX2RiZyhwZGV2LCBcImJhdGNoIHNldCBzdGVlcmluZyB0YWc6ICVzIHRhYmxlLCBzdGFydD0ldSwgY291bnQ9JXUgc3VjY2VzcyFcXG5cIixcbitcdFx0KGxvYyA9PSBQQ0lfVFBIX0xPQ19NU0lYKSA/IFwiTVNJLVhcIiA6IFwiU1RcIiwgc3RhcnQsIGNvdW50KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIGNvdW50O1xuK31cbitFWFBPUlRfU1lNQk9MKHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKTtcbitcbisvKipcbisgKiBwY2llX3RwaF9zZXRfc3RfZW50cnkoKSAtIFNldCBTdGVlcmluZyBUYWcgaW4gdGhlIFNUIHRhYmxlIGVudHJ5XG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAaW5kZXg6IFNUIHRhYmxlIGVudHJ5IGluZGV4XG4rICogQHRhZzogU3RlZXJpbmcgVGFnIHRvIGJlIHdyaXR0ZW5cbisgKlxuKyAqIFJldHVybjogMCBpZiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbisgKi9cbitpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXG4re1xuK1x0aW50IHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIGluZGV4LCAxLCBcdTAwMjZ0YWcpO1xuK1x0cmV0dXJuIHJldCA9PSAxID8gMCA6IHJldDtcbiB9XG4gRVhQT1JUX1NZTUJPTChwY2llX3RwaF9zZXRfc3RfZW50cnkpO1xuIFxuQEAgLTM2NiwyNiArNDUyLDIxIEBAIHZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBFWFBPUlRfU1lNQk9MKHBjaWVfZGlzYWJsZV90cGgpO1xuIFxuIC8qKlxuLSAqIHBjaWVfZW5hYmxlX3RwaCAtIEVuYWJsZSBUUEggc3VwcG9ydCBmb3IgZGV2aWNlIHVzaW5nIGEgc3BlY2lmaWMgU1QgbW9kZVxuKyAqIHBjaWVfZW5hYmxlX3RwaF9leHQgLSBFbmFibGUgVFBIIHN1cHBvcnQgd2l0aCBzcGVjaWZpYyBTVCBtb2RlIGFuZFxuKyAqIHJlcXVlc3RlciB0eXBlXG4gICogQHBkZXY6IFBDSSBkZXZpY2Vcbi0gKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGUuIEN1cnJlbnQgc3VwcG9ydGVkIG1vZGVzIGluY2x1ZGU6XG4tICpcbi0gKiAgIC0gUENJX1RQSF9TVF9OU19NT0RFOiBOTyBTVCBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfSVZfTU9ERTogSW50ZXJydXB0IFZlY3RvciBNb2RlXG4tICogICAtIFBDSV9UUEhfU1RfRFNfTU9ERTogRGV2aWNlIFNwZWNpZmljIE1vZGVcbisgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGU6IFBDSV9UUEhfU1RfKE5TX01PREUgLyBJVl9NT0RFIC8gRFNfTU9ERSlcbisgKiBAcmVxX3R5cGU6IFJlcXVlc3RlciB0eXBlIHRvIGVuYWJsZTogUENJX1RQSF9SRVFfKFRQSF9PTkxZIC8gRVhUX1RQSClcbiAgKlxuLSAqIENoZWNrIHdoZXRoZXIgdGhlIG1vZGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UgYmVmb3JlIGVuYWJsaW5nXG4tICogYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuIEFkZGl0aW9uYWxseSBkZXRlcm1pbmUgd2hhdCB0eXBlcyBvZiByZXF1ZXN0cyxcbi0gKiBUUEggb3IgZXh0ZW5kZWQgVFBILCBjYW4gYmUgaXNzdWVkIGJ5IHRoZSBkZXZpY2UgYmFzZWQgb24gaXRzIFRQSCByZXF1ZXN0ZXJcbi0gKiBjYXBhYmlsaXR5IGFuZCB0aGUgUm9vdCBQb3J0J3MgY29tcGxldGVyIGNhcGFiaWxpdHkuXG4rICogQ2hlY2sgd2hldGhlciB0aGUgbW9kZSBhbmQgcmVxdWVzdGVyIHR5cGUgaXMgYWN0dWFsbHkgc3VwcG9ydGVkIGJ5IHRoZVxuKyAqIGRldmljZSBiZWZvcmUgZW5hYmxpbmcgYW5kIHJldHVybiBhbiBlcnJvciBpZiBub3QuXG4gICpcbiAgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIG5lZ2F0aXZlIHZhbHVlICgtZXJybm8pXG4gICovXG4taW50IHBjaWVfZW5hYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG1vZGUpXG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKVxuIHtcbiBcdHUzMiByZWc7XG4gXHR1OCBkZXZfbW9kZXM7XG4tXHR1OCBycF9yZXFfdHlwZTtcbiBcbiBcdC8qIEhvbm9yIFwibm90cGhcIiBrZXJuZWwgcGFyYW1ldGVyICovXG4gXHRpZiAocGNpX3RwaF9kaXNhYmxlZClcbkBAIC0zOTcsNiArNDc4LDE0IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFx0aWYgKHBkZXYtXHUwMDNldHBoX2VuYWJsZWQpXG4gXHRcdHJldHVybiAtRUJVU1k7XG4gXG4rXHRpZiAocGRldi1cdTAwM2V0cGhfbWF4X3R5cGUgPT0gUENJX1RQSF9SRVFfRElTQUJMRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBTYW5pdGl6ZSBhbmQgY2hlY2sgVFBIIHJlcXVlc3RlciB0eXBlIGNvbXBhdGliaWxpdHkgKi9cbitcdGlmIChyZXFfdHlwZSA9PSBQQ0lfVFBIX1JFUV9ESVNBQkxFIHx8IHJlcV90eXBlID09IDIgfHxcbitcdFx0cmVxX3R5cGUgXHUwMDNlIHBkZXYtXHUwMDNldHBoX21heF90eXBlKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdC8qIFNhbml0aXplIGFuZCBjaGVjayBTVCBtb2RlIGNvbXBhdGliaWxpdHkgKi9cbiBcdG1vZGUgXHUwMDI2PSBQQ0lfVFBIX0NUUkxfTU9ERV9TRUxfTUFTSztcbiBcdGRldl9tb2RlcyA9IGdldF9zdF9tb2RlcyhwZGV2KTtcbkBAIC00MDUsMjMgKzQ5NCw3IEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cGRldi1cdTAwM2V0cGhfbW9kZSA9IG1vZGU7XG4gXG4tXHQvKiBHZXQgcmVxX3R5cGUgc3VwcG9ydGVkIGJ5IGRldmljZSBhbmQgaXRzIFJvb3QgUG9ydCAqL1xuLVx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ0FQLCBcdTAwMjZyZWcpO1xuLVx0aWYgKEZJRUxEX0dFVChQQ0lfVFBIX0NBUF9FWFRfVFBILCByZWcpKVxuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4tXHRlbHNlXG4tXHRcdHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID0gUENJX1RQSF9SRVFfVFBIX09OTFk7XG4tXG4tXHQvKiBDaGVjayBpZiB0aGUgZGV2aWNlIGlzIGJlaGluZCBhIFJvb3QgUG9ydCAqL1xuLVx0aWYgKHBjaV9wY2llX3R5cGUocGRldikgIT0gUENJX0VYUF9UWVBFX1JDX0VORCkge1xuLVx0XHRycF9yZXFfdHlwZSA9IGdldF9ycF9jb21wbGV0ZXJfdHlwZShwZGV2KTtcbi1cbi1cdFx0LyogRmluYWwgcmVxX3R5cGUgaXMgdGhlIHNtYWxsZXN0IHZhbHVlIG9mIHR3byAqL1xuLVx0XHRwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSA9IG1pbihwZGV2LVx1MDAzZXRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuLVx0fVxuLVxuLVx0aWYgKHBkZXYtXHUwMDNldHBoX3JlcV90eXBlID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0cGRldi1cdTAwM2V0cGhfcmVxX3R5cGUgPSByZXFfdHlwZTtcbiBcbiBcdC8qIFdyaXRlIHRoZW0gaW50byBUUEggY29udHJvbCByZWdpc3RlciAqL1xuIFx0cGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIHBkZXYtXHUwMDNldHBoX2NhcCArIFBDSV9UUEhfQ1RSTCwgXHUwMDI2cmVnKTtcbkBAIC00MzUsNiArNTA4LDIzIEBAIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuK0VYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4dCk7XG4rXG4rLyoqXG4rICogcGNpZV9lbmFibGVfdHBoIC0gRW5hYmxlIFRQSCBzdXBwb3J0IGZvciBkZXZpY2UgdXNpbmcgYSBzcGVjaWZpYyBTVCBtb2RlXG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKiBAbW9kZTogU1QgbW9kZSB0byBlbmFibGU6IFBDSV9UUEhfU1RfKE5TX01PREUgLyBJVl9NT0RFIC8gRFNfTU9ERSlcbisgKlxuKyAqIFdyYXBwZXIgZm9yIHBjaWVfZW5hYmxlX3RwaF9leHQoKSwgYXV0b21hdGljYWxseSB1c2VzIHRoZSBwcmUtY2FjaGVkXG4rICogdHBoX21heF90eXBlIHZhbHVlIChuZWdvdGlhdGVkIG1heGltdW0gcmVxdWVzdGVyIHR5cGUgYmV0d2VlbiBkZXZpY2UgYW5kXG4rICogcm9vdCBwb3J0KS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgbmVnYXRpdmUgdmFsdWUgKC1lcnJubylcbisgKi9cbitpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKVxuK3tcbitcdHJldHVybiBwY2llX2VuYWJsZV90cGhfZXh0KHBkZXYsIG1vZGUsIHBkZXYtXHUwMDNldHBoX21heF90eXBlKTtcbit9XG4gRVhQT1JUX1NZTUJPTChwY2llX2VuYWJsZV90cGgpO1xuIFxuIHZvaWQgcGNpX3Jlc3RvcmVfdHBoX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuQEAgLTUwOCwxNCArNTk4LDYwIEBAIHZvaWQgcGNpX25vX3RwaCh2b2lkKVxuIFxuIHZvaWQgcGNpX3RwaF9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbitcdHU4IHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGU7XG4gXHRpbnQgbnVtX2VudHJpZXM7XG4gXHR1MzIgc2F2ZV9zaXplO1xuK1x0dTMyIHJlZyA9IDA7XG4gXG4gXHRwZGV2LVx1MDAzZXRwaF9jYXAgPSBwY2lfZmluZF9leHRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfRVhUX0NBUF9JRF9UUEgpO1xuIFx0aWYgKCFwZGV2LVx1MDAzZXRwaF9jYXApXG4gXHRcdHJldHVybjtcbiBcbitcdC8qIEdldCByZXFfdHlwZSBzdXBwb3J0ZWQgYnkgZGV2aWNlIGFuZCBpdHMgUm9vdCBQb3J0ICovXG4rXHRwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcGRldi1cdTAwM2V0cGhfY2FwICsgUENJX1RQSF9DQVAsIFx1MDAyNnJlZyk7XG4rXHRpZiAoRklFTERfR0VUKFBDSV9UUEhfQ0FQX0VYVF9UUEgsIHJlZykpXG4rXHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX0VYVF9UUEg7XG4rXHRlbHNlXG4rXHRcdHRwaF9yZXFfdHlwZSA9IFBDSV9UUEhfUkVRX1RQSF9PTkxZO1xuK1xuK1x0LyogQ2hlY2sgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBSb290IFBvcnQgKi9cbitcdGlmIChwY2lfcGNpZV90eXBlKHBkZXYpICE9IFBDSV9FWFBfVFlQRV9SQ19FTkQpIHtcbitcdFx0cnBfcmVxX3R5cGUgPSBnZXRfcnBfY29tcGxldGVyX3R5cGUocGRldik7XG4rXHRcdC8qIEZpbmFsIHJlcV90eXBlIGlzIHRoZSBzbWFsbGVzdCB2YWx1ZSBvZiB0d28gKi9cbitcdFx0dHBoX3JlcV90eXBlID0gbWluKHRwaF9yZXFfdHlwZSwgcnBfcmVxX3R5cGUpO1xuK1x0fVxuK1xuK1x0cGRldi1cdTAwM2V0cGhfbWF4X3R5cGUgPSB0cGhfcmVxX3R5cGU7XG4rXG4gXHRudW1fZW50cmllcyA9IHBjaWVfdHBoX2dldF9zdF90YWJsZV9zaXplKHBkZXYpO1xuIFx0c2F2ZV9zaXplID0gc2l6ZW9mKHUzMikgKyBudW1fZW50cmllcyAqIHNpemVvZih1MTYpO1xuIFx0cGNpX2FkZF9leHRfY2FwX3NhdmVfYnVmZmVyKHBkZXYsIFBDSV9FWFRfQ0FQX0lEX1RQSCwgc2F2ZV9zaXplKTtcbiB9XG4rXG4rLyoqXG4rICogcGNpZV90cGhfZHNtX3N1cHBvcnRlZCAtIENoZWNrIGlmIHJvb3QgcG9ydCBleHBvc2VzIFRQSCBTVCBfRFNNXG4rICogQHBkZXY6IHRhcmdldCBQQ0kgZGV2aWNlXG4rICpcbisgKiBSZXR1cm4gdHJ1ZSBpZiByb290IHBvcnQgb2YgQHBkZXYgcHJvdmlkZXMgVFBIIFNUIERTTSBmdW5jdGlvbixcbisgKiBmYWxzZSBvdGhlcndpc2UgKEFDUEkgZGlzYWJsZWQgb3IgRFNNIG1pc3NpbmcpLlxuKyAqL1xuK2Jvb2wgcGNpZV90cGhfZHNtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rI2lmZGVmIENPTkZJR19BQ1BJXG4rXHRzdHJ1Y3QgcGNpX2RldiAqcnAgPSBwY2llX2ZpbmRfcm9vdF9wb3J0KHBkZXYpO1xuK1x0YWNwaV9oYW5kbGUgaGFuZGxlO1xuK1xuK1x0aWYgKCFycCB8fCAhcnAtXHUwMDNlYnVzIHx8ICFycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRoYW5kbGUgPSBBQ1BJX0hBTkRMRShycC1cdTAwM2VidXMtXHUwMDNlYnJpZGdlKTtcbitcdGlmICghaGFuZGxlKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXR1cm4gYWNwaV9jaGVja19kc20oaGFuZGxlLCBcdTAwMjZwY2lfYWNwaV9kc21fZ3VpZCwgNyxcbitcdFx0XHQgICAgICBCSVQoVFBIX1NUX0RTTV9GVU5DX0lOREVYKSk7XG4rI2Vsc2VcbitcdHJldHVybiBmYWxzZTtcbisjZW5kaWZcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpZV90cGhfZHNtX3N1cHBvcnRlZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaS5jXG5pbmRleCA4MzAzNjlmZjg3OGRiZS4uYzQwN2MyMTdiNjQ5ZmEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2kuY1xuQEAgLTYwLDYgKzYwLDI2IEBAIHN0YXRpYyBib29sIGRpc2FibGVfZGVueWxpc3Q7XG4gbW9kdWxlX3BhcmFtKGRpc2FibGVfZGVueWxpc3QsIGJvb2wsIDA0NDQpO1xuIE1PRFVMRV9QQVJNX0RFU0MoZGlzYWJsZV9kZW55bGlzdCwgXCJEaXNhYmxlIHVzZSBvZiBkZXZpY2UgZGVueWxpc3QuIERpc2FibGluZyB0aGUgZGVueWxpc3QgYWxsb3dzIGJpbmRpbmcgdG8gZGV2aWNlcyB3aXRoIGtub3duIGVycmF0YSB0aGF0IG1heSBsZWFkIHRvIGV4cGxvaXRhYmxlIHN0YWJpbGl0eSBvciBzZWN1cml0eSBpc3N1ZXMgd2hlbiBhY2Nlc3NlZCBieSB1bnRydXN0ZWQgdXNlcnMuXCIpO1xuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHBoX3BvbGljeTtcbitzdGF0aWMgaW50IHRwaF9wb2xpY3lfc2V0KGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG4re1xuK1x0cmV0dXJuIHBhcmFtX3NldF91aW50X21pbm1heCh2YWwsIGtwLCBWRklPX1BDSV9UUEhfUE9MSUNZX05PX1NULFxuK1x0XHRcdFx0ICAgICBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKTtcbit9XG4rc3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIHRwaF9wYXJhbV9vcHMgPSB7XG4rXHQuc2V0ID0gdHBoX3BvbGljeV9zZXQsXG4rXHQuZ2V0ID0gcGFyYW1fZ2V0X3VpbnQsXG4rfTtcbittb2R1bGVfcGFyYW1fY2IodHBoX3BvbGljeSwgXHUwMDI2dHBoX3BhcmFtX29wcywgXHUwMDI2dHBoX3BvbGljeSwgMDY0NCk7XG4rTU9EVUxFX1BBUk1fREVTQyh0cGhfcG9saWN5LFxuK1x0XCJHbG9iYWwgVFBIIHBvbGljeSBsZXZlbCAoMD1kZWZhdWx0IE5vLVNUKTpcXG5cIlxuK1x0XCIwID0gTm8tU1QgbW9kZTogUkVTT0xWRSBvbmx5IHJldHVybnMgUEggZm9yIERNQUJVRiBzb3VyY2U7XFxuXCJcbitcdFwiICAgICAgICAgICAgICAgIFNUIHByb2dyYW1taW5nIHVuYXZhaWxhYmxlXFxuXCJcbitcdFwiMSA9IEFkZCBJViBtb2RlOiBSRVNPTFZFIG9ubHkgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZTtcXG5cIlxuK1x0XCIgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cIlxuK1x0XCIyID0gQWRkIERTIG1vZGU6IFJFU09MVkUgcmV0dXJucyBQSCBmb3IgRE1BQlVGIHNvdXJjZSwgU1QgZm9yIERNQUJVRi9DUFUgc291cmNlcztcXG5cIlxuK1x0XCIgICAgICAgICAgICAgICAgIFNUIHByb2dyYW0gc3VwcG9ydHMgTk9ORS9ETUFCVUYvQ1BVIHNvdXJjZXNcXG5cIik7XG4rXG4gc3RhdGljIGJvb2wgdmZpb19wY2lfZGV2X2luX2RlbnlsaXN0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN3aXRjaCAocGRldi1cdTAwM2V2ZW5kb3IpIHtcbkBAIC0xNDIsNiArMTYyLDkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pbml0X2RldihzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldilcbiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX1ZHQVxuIFx0dmRldi1cdTAwM2VkaXNhYmxlX3ZnYSA9IGRpc2FibGVfdmdhO1xuICNlbmRpZlxuKyNpZmRlZiBDT05GSUdfUENJRV9UUEhcbitcdHZkZXYtXHUwMDNldHBoX3BvbGljeSA9IHRwaF9wb2xpY3k7XG4rI2VuZGlmXG4gXG4gXHRyZXR1cm4gdmZpb19wY2lfY29yZV9pbml0X2Rldihjb3JlX3ZkZXYpO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuaW5kZXggYTEwZWQ3MzNmMGUzYWYuLjk3ZGFkNmRiNjllMzlkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9mcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91YWNjZXNzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92ZmlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbkBAIC0xMDg1LDYgKzEwODYsMTQ2IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfcHdyX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IHZmaW9fZmluZF9jYXBfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zKVxuK3tcbitcdHU4IGNhcDtcbitcdGludCBiYXNlID0gKHBvcyBcdTAwM2U9IFBDSV9DRkdfU1BBQ0VfU0laRSkgPyBQQ0lfQ0ZHX1NQQUNFX1NJWkUgOlxuK1x0XHRcdFx0XHRcdCBQQ0lfU1REX0hFQURFUl9TSVpFT0Y7XG4rXHRjYXAgPSB2ZGV2LVx1MDAzZXBjaV9jb25maWdfbWFwW3Bvc107XG4rXG4rXHRpZiAoY2FwID09IFBDSV9DQVBfSURfQkFTSUMpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LyogWFhYIENhbiB3ZSBoYXZlIHRvIGFidXR0aW5nIGNhcGFiaWxpdGllcyBvZiB0aGUgc2FtZSB0eXBlPyAqL1xuK1x0d2hpbGUgKHBvcyAtIDEgXHUwMDNlPSBiYXNlIFx1MDAyNlx1MDAyNiB2ZGV2LVx1MDAzZXBjaV9jb25maWdfbWFwW3BvcyAtIDFdID09IGNhcClcbitcdFx0cG9zLS07XG4rXG4rXHRyZXR1cm4gcG9zO1xuK31cbitcbitzdGF0aWMgdm9pZCB2ZmlvX3VwZGF0ZV90cGhfdmNvbmZpZ19ieXRlcyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHRcdCAgaW50IHBvcylcbit7XG4rXHRfX2xlMzIgKnZwdHIgPSAoX19sZTMyICopXHUwMDI2dmRldi1cdTAwM2V2Y29uZmlnW3BvcyArIFBDSV9UUEhfQ0FQXTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0dTMyIHZhbCA9IGxlMzJfdG9fY3B1KCp2cHRyKTtcbitcbitcdGlmICghcGNpZV9leHRfdHBoX3N1cHBvcnRlZChwZGV2KSkge1xuK1x0XHQvKiBSZW1vdmUgZXh0ZW5kZWQgVFBIIGlmIHJvb3QtcG9ydCBkb2Vzbid0IHN1cHBvcnQgKi9cbitcdFx0dmFsIFx1MDAyNj0gflBDSV9UUEhfQ0FQX0VYVF9UUEg7XG4rXHR9XG4rXG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfTk9fU1QpIHtcbitcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgbW9kZSBzdXBwb3J0ZWQgKi9cbitcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9TVF9JViB8IFBDSV9UUEhfQ0FQX1NUX0RTIHxcbitcdFx0XHQgUENJX1RQSF9DQVBfTE9DX01BU0sgfCBQQ0lfVFBIX0NBUF9TVF9NQVNLKTtcbitcdH0gZWxzZSBpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5ID09IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QpIHtcbitcdFx0LyogUmVwb3J0IG9ubHkgTm8tU1QgYW5kIElWIG1vZGVzIHN1cHBvcnRlZCAqL1xuK1x0XHR2YWwgXHUwMDI2PSB+UENJX1RQSF9DQVBfU1RfRFM7XG4rXHRcdC8qIFJlbW92ZSBTVCBsb2NhdGlvbiBhbmQgc2l6ZSBpZiBkZXYgZG9lc24ndCBzdXBwb3J0IElWIG1vZGUgKi9cbitcdFx0aWYgKCEodmFsIFx1MDAyNiBQQ0lfVFBIX0NBUF9TVF9JVikpXG4rXHRcdFx0dmFsIFx1MDAyNj0gfihQQ0lfVFBIX0NBUF9MT0NfTUFTSyB8IFBDSV9UUEhfQ0FQX1NUX01BU0spO1xuK1x0fVxuK1xuK1x0KnZwdHIgPSBjcHVfdG9fbGUzMih2YWwpO1xuK1xuK1x0LyogQmFja3VwIHVwZGF0ZWQgY2FwYWJpbGl0eSByZWdpc3RlciB2YWx1ZSAqL1xuK1x0dmRldi1cdTAwM2V0cGhfY2FwX3ZpcnQgPSB2YWw7XG4rfVxuK1xuKy8qIFBlcm1pc3Npb25zIGZvciBUUEggZXh0ZW5kZWQgY2FwYWJpbGl0eSAqL1xuK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbit7XG4rXHQvKlxuK1x0ICogV2Ugb25seSB2aXJ0dWFsaXplIHRoZSBUUEggaGVhZGVyIChleGNsdWRpbmcgdGhlIFNUIHRhYmxlKS5cbitcdCAqIEZvciB0aGUgU1QgdGFibGUgKGlmIGFueSksIHRoZSByZWFkIG9wZXJhdGlvbiByZXR1cm5zIDAgYnlcbitcdCAqIGRlZmF1bHQsIGFuZCB0aGUgd3JpdGUgb3BlcmF0aW9uIGlzIGRpc2NhcmRlZCBieSBkZWZhdWx0LlxuK1x0ICovXG4rXHRpZiAoYWxsb2NfcGVybV9iaXRzKHBlcm0sIFBDSV9UUEhfQkFTRV9TSVpFT0YpKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdHBfc2V0ZChwZXJtLCAwLCBBTExfVklSVCwgTk9fV1JJVEUpO1xuK1x0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ0FQLCBBTExfVklSVCwgTk9fV1JJVEUpO1xuK1xuK1x0cF9zZXRkKHBlcm0sIFBDSV9UUEhfQ1RSTCwgQUxMX1ZJUlQsXG4rXHQgICAgICAgUENJX1RQSF9DVFJMX01PREVfU0VMX01BU0sgfCBQQ0lfVFBIX0NUUkxfUkVRX0VOX01BU0spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3JlYWQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuK1x0XHRcdFx0aW50IGNvdW50LCBzdHJ1Y3QgcGVybV9iaXRzICpwZXJtLFxuK1x0XHRcdFx0aW50IG9mZnNldCwgX19sZTMyICp2YWwpXG4re1xuK1x0aWYgKG9mZnNldCBcdTAwM2U9IFBDSV9UUEhfQkFTRV9TSVpFT0YpIHtcbitcdFx0KnZhbCA9IGNwdV90b19sZTMyKDApO1xuK1x0XHRyZXR1cm4gY291bnQ7XG4rXHR9XG4rXG4rXHRpZiAob2Zmc2V0IFx1MDAzZT0gUENJX1RQSF9DQVAgXHUwMDI2XHUwMDI2ICF2ZGV2LVx1MDAzZXRwaF9vcHRfaW4pIHtcbitcdFx0KnZhbCA9IGNwdV90b19sZTMyKDApO1xuK1x0XHRyZXR1cm4gY291bnQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuK1x0XHRcdFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcbitcdFx0XHRcdCBpbnQgb2Zmc2V0LCBfX2xlMzIgdmFsKVxuK3tcbitcdHUxNiBzdGFydCA9IHZmaW9fZmluZF9jYXBfc3RhcnQodmRldiwgcG9zKTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0dTMyIG9yZ19jdHJsLCBuZXdfY3RybCwgY2FwO1xuK1x0dTggbW9kZSwgcmVxLCBvcmdfcmVxO1xuK1x0X19sZTMyIG9yZ192YWwgPSAwO1xuK1x0dTE2IGNtZDtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbiB8fCBvZmZzZXQgXHUwMDNlPSBQQ0lfVFBIX0JBU0VfU0laRU9GKVxuK1x0XHRyZXR1cm4gY291bnQ7XG4rXG4rXHRjbWQgPSB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHZkZXYpO1xuK1xuK1x0b3JnX2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ1RSTF0pO1xuK1x0dmZpb19kZWZhdWx0X2NvbmZpZ19yZWFkKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgXHUwMDI2b3JnX3ZhbCk7XG4rXG4rXHRyZXQgPSB2ZmlvX2RlZmF1bHRfY29uZmlnX3dyaXRlKHZkZXYsIHBvcywgY291bnQsIHBlcm0sIG9mZnNldCwgdmFsKTtcbitcdGlmIChyZXQgIT0gY291bnQpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0bmV3X2N0cmwgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ1RSTF0pO1xuK1x0aWYgKG5ld19jdHJsID09IG9yZ19jdHJsKVxuK1x0XHRnb3RvIG91dDsgLyogT25seSBjYXJlIGFib3V0IGNoYW5nZXMgaW4gVFBIX0NUUkwuICovXG4rXG4rXHRjYXAgPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKVx1MDAyNnZkZXYtXHUwMDNldmNvbmZpZ1tzdGFydCArIFBDSV9UUEhfQ0FQXSk7XG4rXHRtb2RlID0gRklFTERfR0VUKFBDSV9UUEhfQ1RSTF9NT0RFX1NFTF9NQVNLLCBuZXdfY3RybCk7XG4rXHRyZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBuZXdfY3RybCk7XG4rXHRpZiAobW9kZSBcdTAwM2UgUENJX1RQSF9TVF9EU19NT0RFIHx8ICEoY2FwIFx1MDAyNiAoMXUgXHUwMDNjXHUwMDNjIG1vZGUpKSB8fCByZXEgPT0gMHgyIHx8XG4rXHRcdChyZXEgPT0gUENJX1RQSF9SRVFfRVhUX1RQSCBcdTAwMjZcdTAwMjYgIShjYXAgXHUwMDI2IFBDSV9UUEhfQ0FQX0VYVF9UUEgpKSlcbitcdFx0Z290byByZXN0b3JlOyAvKiBEcm9wIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgd3JpdGUgdmFsdWUgKi9cbitcbitcdG9yZ19yZXEgPSBGSUVMRF9HRVQoUENJX1RQSF9DVFJMX1JFUV9FTl9NQVNLLCBvcmdfY3RybCk7XG4rXHRpZiAocmVxID09IG9yZ19yZXEpXG4rXHRcdGdvdG8gcmVzdG9yZTsgLyogT25seSBjYXJlIGFib3V0IHJlcXVlc3RlciBlbmFibGUgKi9cbitcbitcdGlmIChyZXEgPT0gUENJX1RQSF9SRVFfVFBIX09OTFkgfHwgcmVxID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpIHtcbitcdFx0cmV0ID0gcGNpZV9lbmFibGVfdHBoX2V4dChwZGV2LCBtb2RlLCByZXEpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZTtcbitcdH0gZWxzZSBpZiAocmVxID09IFBDSV9UUEhfUkVRX0RJU0FCTEUpIHtcbitcdFx0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuK1x0fVxuK1xuK1x0Z290byBvdXQ7XG4rXG4rcmVzdG9yZTpcbitcdHZmaW9fZGVmYXVsdF9jb25maWdfd3JpdGUodmRldiwgcG9zLCBjb3VudCwgcGVybSwgb2Zmc2V0LCBvcmdfdmFsKTtcbitvdXQ6XG4rXHR2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHZkZXYsIGNtZCk7XG4rXHRyZXR1cm4gY291bnQ7XG4rfVxuK1xuIC8qXG4gICogSW5pdGlhbGl6ZSB0aGUgc2hhcmVkIHBlcm1pc3Npb24gdGFibGVzXG4gICovXG5AQCAtMTEwMCw2ICsxMjQxLDcgQEAgdm9pZCB2ZmlvX3BjaV91bmluaXRfcGVybV9iaXRzKHZvaWQpXG4gXG4gXHRmcmVlX3Blcm1fYml0cyhcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX0VSUl0pO1xuIFx0ZnJlZV9wZXJtX2JpdHMoXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9QV1JdKTtcbitcdGZyZWVfcGVybV9iaXRzKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXSk7XG4gfVxuIFxuIGludCBfX2luaXQgdmZpb19wY2lfaW5pdF9wZXJtX2JpdHModm9pZClcbkBAIC0xMTIwLDYgKzEyNjIsOSBAQCBpbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXG4gXHQvKiBFeHRlbmRlZCBjYXBhYmlsaXRpZXMgKi9cbiBcdHJldCB8PSBpbml0X3BjaV9leHRfY2FwX2Vycl9wZXJtKFx1MDAyNmVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfRVJSXSk7XG4gXHRyZXQgfD0gaW5pdF9wY2lfZXh0X2NhcF9wd3JfcGVybShcdTAwMjZlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1BXUl0pO1xuK1x0cmV0IHw9IGluaXRfcGNpX2V4dF9jYXBfdHBoX3Blcm0oXHUwMDI2ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdKTtcbitcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS5yZWFkZm4gPSB2ZmlvX3RwaF9jb25maWdfcmVhZDtcbitcdGVjYXBfcGVybXNbUENJX0VYVF9DQVBfSURfVFBIXS53cml0ZWZuID0gdmZpb190cGhfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xuIFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9EVlNFQ10ud3JpdGVmbiA9IHZmaW9fcmF3X2NvbmZpZ193cml0ZTtcbiBcbkBAIC0xMTI5LDIzICsxMjc0LDYgQEAgaW50IF9faW5pdCB2ZmlvX3BjaV9pbml0X3Blcm1fYml0cyh2b2lkKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tc3RhdGljIGludCB2ZmlvX2ZpbmRfY2FwX3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcylcbi17XG4tXHR1OCBjYXA7XG4tXHRpbnQgYmFzZSA9IChwb3MgXHUwMDNlPSBQQ0lfQ0ZHX1NQQUNFX1NJWkUpID8gUENJX0NGR19TUEFDRV9TSVpFIDpcbi1cdFx0XHRcdFx0XHQgUENJX1NURF9IRUFERVJfU0laRU9GO1xuLVx0Y2FwID0gdmRldi1cdTAwM2VwY2lfY29uZmlnX21hcFtwb3NdO1xuLVxuLVx0aWYgKGNhcCA9PSBQQ0lfQ0FQX0lEX0JBU0lDKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdC8qIFhYWCBDYW4gd2UgaGF2ZSB0byBhYnV0dGluZyBjYXBhYmlsaXRpZXMgb2YgdGhlIHNhbWUgdHlwZT8gKi9cbi1cdHdoaWxlIChwb3MgLSAxIFx1MDAzZT0gYmFzZSBcdTAwMjZcdTAwMjYgdmRldi1cdTAwM2VwY2lfY29uZmlnX21hcFtwb3MgLSAxXSA9PSBjYXApXG4tXHRcdHBvcy0tO1xuLVxuLVx0cmV0dXJuIHBvcztcbi19XG4tXG4gc3RhdGljIGludCB2ZmlvX21zaV9jb25maWdfcmVhZChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXG4gXHRcdFx0XHRpbnQgY291bnQsIHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0sXG4gXHRcdFx0XHRpbnQgb2Zmc2V0LCBfX2xlMzIgKnZhbClcbkBAIC0xNzAxLDYgKzE4MjksOCBAQCBzdGF0aWMgaW50IHZmaW9fZWNhcF9pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdFx0cmV0ID0gdmZpb19maWxsX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcywgbGVuKTtcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoZWNhcCA9PSBQQ0lfRVhUX0NBUF9JRF9UUEgpXG4rXHRcdFx0dmZpb191cGRhdGVfdHBoX3Zjb25maWdfYnl0ZXModmRldiwgZXBvcyk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHdlJ3JlIGp1c3QgdXNpbmcgdGhpcyBjYXBhYmlsaXR5IHRvIGFuY2hvciB0aGUgbGlzdCxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCAzZjExYTk2MjRiOWMwMy4uYjhkOWQ4NDBhOTNiNTcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xMyw2ICsxMyw4IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXBlcnR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlYnVnZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG5AQCAtMzAsNiArMzIsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21tdWZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktdHBoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZXFfZmlsZS5oXHUwMDNlXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0VFSClcbiAjaW5jbHVkZSBcdTAwM2Nhc20vZWVoLmhcdTAwM2VcbkBAIC0xMjcsMTAgKzEzMCwyMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZGVidWdmc19kaXNhYmxlX2lkbGVfZDMoc3RydWN0IHNlcV9maWxlICpzZXEsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfdHBoKHN0cnVjdCBzZXFfZmlsZSAqc2VxLFxuK1x0XHRcdFx0XHQgICAgdm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPSB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfcHJpdmF0ZShzZXEpO1xuK1xuK1x0c2VxX3ByaW50ZihzZXEsIFwicG9saWN5PSV1IGNhcC12aXJ0PTB4JXggb3B0LWluPSV1XFxuXCIsXG4rXHRcdHZkZXYtXHUwMDNldHBoX3BvbGljeSwgdmRldi1cdTAwM2V0cGhfY2FwX3ZpcnQsIHZkZXYtXHUwMDNldHBoX29wdF9pbik7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gLypcbi0gKiBkaXNhYmxlX2lkbGVfZDMgYW5kIG5vaW50eG1hc2sgYXJlIHdyaXRhYmxlIG1vZHVsZSBwYXJhbWV0ZXJzIGxhdGNoZWRcbi0gKiBwZXIgZGV2aWNlIGF0IGluaXQsIHNvIGEgZGV2aWNlJ3MgZWZmZWN0aXZlIHZhbHVlIGNhbiBkaWZmZXIgZnJvbSB0aGVcbi0gKiBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5nLiAgRXhwb3NlIHRoZSBwZXItZGV2aWNlIChyZWFkLW9ubHkpIHZhbHVlc1xuKyAqIGRpc2FibGVfaWRsZV9kMywgbm9pbnR4bWFzayBhbmQgdHBoX3BvbGljeSBhcmUgd3JpdGFibGUgbW9kdWxlIHBhcmFtZXRlcnNcbisgKiBsYXRjaGVkIHBlciBkZXZpY2UgYXQgaW5pdCwgc28gYSBkZXZpY2UncyBlZmZlY3RpdmUgdmFsdWUgY2FuIGRpZmZlciBmcm9tXG4rICogdGhlIGN1cnJlbnQgcGFyYW1ldGVyIHNldHRpbmcuICBFeHBvc2UgdGhlIHBlci1kZXZpY2UgKHJlYWQtb25seSkgdmFsdWVzXG4gICogaGVyZSBmb3IgdmlzaWJpbGl0eTsgcmVhZC1vbmx5IHBhcmFtZXRlcnMgY2FuJ3QgZHJpZnQgYW5kIGFyZSBvbWl0dGVkLlxuICAqL1xuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2NvcmVfZGVidWdmc19pbml0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNDYsNiArMTU5LDggQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2luaXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0XHRcdFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc19ub2ludHhtYXNrKTtcbiBcdGRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYsIFwiZGlzYWJsZV9pZGxlX2QzXCIsIHBjaV9kaXIsXG4gXHRcdFx0XHQgICAgdmZpb19wY2lfY29yZV9kZWJ1Z2ZzX2Rpc2FibGVfaWRsZV9kMyk7XG4rXHRkZWJ1Z2ZzX2NyZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LCBcInRwaFwiLCBwY2lfZGlyLFxuK1x0XHRcdFx0ICAgIHZmaW9fcGNpX2NvcmVfZGVidWdmc190cGgpO1xuIH1cbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jb3JlX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG5AQCAtNjEwLDYgKzYyNSw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRcdGdvdG8gb3V0X2Rpc2FibGVfZGV2aWNlO1xuIFxuIFx0dmRldi1cdTAwM2VyZXNldF93b3JrcyA9ICFyZXQ7XG4rXHR2ZGV2LVx1MDAzZXRwaF9vcHRfaW4gPSBmYWxzZTtcbitcdC8qIFJlc2V0IFRQSCBzdGF0dXMgb24gbmV3IHVzZXIgc2Vzc2lvbiAqL1xuK1x0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuIFx0cGNpX3NhdmVfc3RhdGUocGRldik7XG4gXHR2ZGV2LVx1MDAzZXBjaV9zYXZlZF9zdGF0ZSA9IHBjaV9zdG9yZV9zYXZlZF9zdGF0ZShwZGV2KTtcbiBcdGlmICghdmRldi1cdTAwM2VwY2lfc2F2ZWRfc3RhdGUpXG5AQCAtNzU3LDYgKzc3NSw5IEBAIHZvaWQgdmZpb19wY2lfY29yZV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcbiBcdHZmaW9fcGNpX3pkZXZfY2xvc2VfZGV2aWNlKHZkZXYpO1xuIFxuK1x0LyogUmVzZXQgVFBIIHN0YXR1cyBvbiBleGl0IHVzZXIgc2Vzc2lvbiAqL1xuK1x0cGNpZV9kaXNhYmxlX3RwaCh2ZGV2LVx1MDAzZXBkZXYpO1xuK1xuIFx0LypcbiBcdCAqIElmIHdlIGhhdmUgc2F2ZWQgc3RhdGUsIHJlc3RvcmUgaXQuICBJZiB3ZSBjYW4gcmVzZXQgdGhlIGRldmljZSxcbiBcdCAqIGV2ZW4gYmV0dGVyLiAgUmVzZXR0aW5nIHdpdGggY3VycmVudCBzdGF0ZSBzZWVtcyBiZXR0ZXIgdGhhblxuQEAgLTE1NTgsNiArMTU3OSw3IEBAIGxvbmcgdmZpb19wY2lfY29yZV9pb2N0bChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgdW5zaWduZWQgaW50IGNtZCxcbiBcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9XG4gXHRcdGNvbnRhaW5lcl9vZihjb3JlX3ZkZXYsIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSwgdmRldik7XG4gXHR2b2lkIF9fdXNlciAqdWFyZyA9ICh2b2lkIF9fdXNlciAqKWFyZztcbitcdGludCByZXQ7XG4gXG4gXHRzd2l0Y2ggKGNtZCkge1xuIFx0Y2FzZSBWRklPX0RFVklDRV9HRVRfSU5GTzpcbkBAIC0xNTY5LDkgKzE1OTEsMTUgQEAgbG9uZyB2ZmlvX3BjaV9jb3JlX2lvY3RsKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCB1bnNpZ25lZCBpbnQgY21kLFxuIFx0Y2FzZSBWRklPX0RFVklDRV9JT0VWRU5URkQ6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9pb2V2ZW50ZmQodmRldiwgdWFyZyk7XG4gXHRjYXNlIFZGSU9fREVWSUNFX1BDSV9IT1RfUkVTRVQ6XG4tXHRcdHJldHVybiB2ZmlvX3BjaV9pb2N0bF9wY2lfaG90X3Jlc2V0KHZkZXYsIHVhcmcpO1xuK1x0XHRyZXQgPSB2ZmlvX3BjaV9pb2N0bF9wY2lfaG90X3Jlc2V0KHZkZXYsIHVhcmcpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHRcdHJldHVybiByZXQ7XG4gXHRjYXNlIFZGSU9fREVWSUNFX1JFU0VUOlxuLVx0XHRyZXR1cm4gdmZpb19wY2lfaW9jdGxfcmVzZXQodmRldiwgdWFyZyk7XG4rXHRcdHJldCA9IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHZkZXYsIHVhcmcpO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRwY2llX2Rpc2FibGVfdHBoKHZkZXYtXHUwMDNlcGRldik7XG4rXHRcdHJldHVybiByZXQ7XG4gXHRjYXNlIFZGSU9fREVWSUNFX1NFVF9JUlFTOlxuIFx0XHRyZXR1cm4gdmZpb19wY2lfaW9jdGxfc2V0X2lycXModmRldiwgdWFyZyk7XG4gXHRkZWZhdWx0OlxuQEAgLTE2MDcsNiArMTYzNSwyOTkgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4oc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyB1MzIgdmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHZkZXYtXHUwMDNlcGRldjtcbitcdHUzMiBsb2MgPSBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHBkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChsb2MgPT0gUENJX1RQSF9MT0NfQ0FQKSB7XG4rXHRcdHJldHVybiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShwZGV2KTtcbitcdH0gZWxzZSBpZiAobG9jID09IFBDSV9UUEhfTE9DX01TSVgpIHtcbitcdFx0cmV0ID0gcGNpX21zaXhfdmVjX2NvdW50KHBkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAwO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB1MzIgdmZpb19wY2lfZ2V0X3RwaF9jYXBhYmlsaXR5KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbit7XG4rXHR1MzIgZmxhZ3MgPSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfRE1BQlVGX1BIO1xuK1xuK1x0aWYgKHZkZXYtXHUwMDNldHBoX3BvbGljeSBcdTAwM2U9IFZGSU9fUENJX1RQSF9QT0xJQ1lfSVZfU1QgXHUwMDI2XHUwMDI2XG4rXHRcdCh2ZGV2LVx1MDAzZXRwaF9jYXBfdmlydCBcdTAwMjYgUENJX1RQSF9DQVBfU1RfSVYpKSB7XG4rXHRcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTtcbitcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9ETUFCVUY7XG4rXHRcdGlmIChwY2llX3RwaF9kc21fc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4rXHRcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7XG4rXHR9XG4rXHRpZiAodmRldi1cdTAwM2V0cGhfcG9saWN5IFx1MDAzZT0gVkZJT19QQ0lfVFBIX1BPTElDWV9EU19TVCBcdTAwMjZcdTAwMjZcbitcdFx0KHZkZXYtXHUwMDNldHBoX2NhcF92aXJ0IFx1MDAyNiBQQ0lfVFBIX0NBUF9TVF9EUykpIHtcbitcdFx0aWYgKHZmaW9fcGNpX2dldF90cGhfc3Rfc2l6ZSh2ZGV2KSBcdTAwM2UgMCkge1xuK1x0XHRcdGZsYWdzIHw9IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORTtcbitcdFx0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1NUX0RNQUJVRjtcbitcdFx0XHRpZiAocGNpZV90cGhfZHNtX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuK1x0XHRcdFx0ZmxhZ3MgfD0gVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9DUFU7XG4rXHRcdH1cbitcdFx0aWYgKHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbitcdFx0XHRmbGFncyB8PSBWRklPX0RFVklDRV9UUEhfQ0FQX1JFU09MVkVfQ1BVX1NUO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZsYWdzO1xuK31cbitcbitzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdFx0ICAgICB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdCAgICAgc2l6ZV90IGFyZ3N6KVxuK3tcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaCB0cGg7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFwY2llX3N0ZF90cGhfc3VwcG9ydGVkKHZkZXYtXHUwMDNlcGRldikpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXG4rXHRcdFx0VkZJT19ERVZJQ0VfRkVBVFVSRV9HRVQgfCBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCxcbitcdFx0XHRzaXplb2YodHBoKSk7XG4rXHRpZiAocmV0ICE9IDEpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2dHBoLCBhcmcsIHNpemVvZih0cGgpKSlcbitcdFx0cmV0dXJuIC1FRkFVTFQ7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VUKSB7XG4rXHRcdGlmICh0cGguZmxhZ3MgIT0gMClcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0dmRldi1cdTAwM2V0cGhfb3B0X2luID0gMTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHR0cGguZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XG4rXG4rXHRyZXR1cm4gY29weV90b191c2VyKGFyZywgXHUwMDI2dHBoLCBzaXplb2YodHBoKSkgPyAtRUZBVUxUIDogMDtcbit9XG4rXG4rc3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3Jlc29sdmVfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbit7XG4rXHR1MzIgZmxhZ3MgPSB2ZmlvX3BjaV9nZXRfdHBoX2NhcGFiaWxpdHkodmRldik7XG4rXHR1MzIgYWxsb3dfc3JjID0gMDtcbitcbitcdGlmIChmbGFncyBcdTAwMjYgKFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEggfFxuK1x0XHQgICAgIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfU1QpKVxuK1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9DUFVfU1QpXG4rXHRcdGFsbG93X3NyYyB8PSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9WT0xBVElMRSB8XG4rXHRcdFx0ICAgICBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UO1xuK1xuK1x0cmV0dXJuIGFsbG93X3NyYztcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9nZXRfZG1hYnVmX3RwaChpbnQgZmQsIGJvb2wgZXh0ZW5kZWQsIHUxNiAqc3QsIHU4ICpwaClcbit7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0aW50IHJldDtcbitcbitcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGZkKTtcbitcdGlmIChJU19FUlIoZG1hYnVmKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbitcbitcdHJldCA9IGRtYV9yZXN2X2xvY2tfaW50ZXJydXB0aWJsZShkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXHRpZiAocmV0ID09IDApXG4rXHRcdHJldCA9IGRtYV9idWZfZ2V0X3BjaV90cGgoZG1hYnVmLCBleHRlbmRlZCwgc3QsIHBoKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9nZXRfdHBoX3N0X3RhZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHNyY19iaXRzLFxuK1x0XHRcdFx0ICAgdTMyIHNyY19obmRsLCBib29sIGV4dGVuZGVkLCB1MTYgKnN0KVxuK3tcbitcdHU4IHJlcV90eXBlID0gZXh0ZW5kZWQgPyBQQ0lfVFBIX1JFUV9FWFRfVFBIIDogUENJX1RQSF9SRVFfVFBIX09OTFk7XG4rXHRpbnQgcmV0ID0gMDtcbitcdHU4IHBoO1xuK1xuK1x0aWYgKHNyY19iaXRzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfU1JDX0RNQUJVRilcbitcdFx0cmV0ID0gdmZpb19wY2lfZ2V0X2RtYWJ1Zl90cGgoc3JjX2huZGwsIGV4dGVuZGVkLCBzdCwgXHUwMDI2cGgpO1xuK1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1ZPTEFUSUxFKVxuK1x0XHRyZXQgPSBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChwZGV2LCBUUEhfTUVNX1RZUEVfVk0sXG4rXHRcdFx0XHRcdCAgICAgIHJlcV90eXBlLCBzcmNfaG5kbCwgc3QpO1xuK1x0ZWxzZSBpZiAoc3JjX2JpdHMgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfQ1BVX1BFUlNJU1RFTlQpXG4rXHRcdHJldCA9IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHBkZXYsIFRQSF9NRU1fVFlQRV9QTSxcbitcdFx0XHRcdFx0ICAgICAgcmVxX3R5cGUsIHNyY19obmRsLCBzdCk7XG4rXHRlbHNlIGlmIChzcmNfYml0cyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKVxuK1x0XHQqc3QgPSAwO1xuK1x0ZWxzZVxuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1xuK1x0aWYgKHJldCAhPSAwKVxuK1x0XHQqc3QgPSAwO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdHUzMiBmbGFncyxcbitcdFx0XHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSBfX3VzZXIgKmFyZyxcbitcdFx0XHRzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3Jlc29sdmUgcmVzb2x2ZTtcbitcdHUzMiB1c2VyX2ZsYWdzLCBhbGxvd19zcmM7XG4rXHRib29sIGV4dGVuZGVkO1xuK1x0dTE2IHRhZyA9IDA7XG4rXHR1OCBwaCA9IDA7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXRwaF9vcHRfaW4pXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfR0VULFxuK1x0XHRcdFx0IHNpemVvZihyZXNvbHZlKSk7XG4rXHRpZiAocmV0ICE9IDEpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2cmVzb2x2ZSwgYXJnLCBzaXplb2YocmVzb2x2ZSkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdHVzZXJfZmxhZ3MgPSByZXNvbHZlLmZsYWdzO1xuK1x0ZXh0ZW5kZWQgPSAhISh1c2VyX2ZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpO1xuK1x0aWYgKGV4dGVuZGVkIFx1MDAyNlx1MDAyNiAhcGNpZV9leHRfdHBoX3N1cHBvcnRlZCh2ZGV2LVx1MDAzZXBkZXYpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR1c2VyX2ZsYWdzIFx1MDAyNj0gflZGSU9fREVWSUNFX1RQSF9FWFRFTkRFRDtcbitcbitcdGFsbG93X3NyYyA9IHZmaW9fcGNpX2dldF90cGhfcmVzb2x2ZV9hbGxvd19zcmModmRldik7XG4rXHRpZiAodXNlcl9mbGFncyBcdTAwMjYgfmFsbG93X3NyYyB8fCAhaXNfcG93ZXJfb2ZfMih1c2VyX2ZsYWdzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXNvbHZlLnZhbGlkID0gMDtcbitcdHJlc29sdmUucGggPSAwO1xuK1x0cmVzb2x2ZS5zdCA9IDA7XG4rXG4rXHRpZiAodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYpIHtcbitcdFx0cmV0ID0gdmZpb19wY2lfZ2V0X2RtYWJ1Zl90cGgocmVzb2x2ZS5zcmMsIGV4dGVuZGVkLFxuK1x0XHRcdFx0XHQgICAgICBcdTAwMjZ0YWcsIFx1MDAyNnBoKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXNvbHZlLnBoID0gcGg7XG4rXHRcdHJlc29sdmUudmFsaWQgPSBWRklPX0RFVklDRV9UUEhfVkFMSURfUEg7XG4rXHRcdGlmICh2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgXHUwMDNlPSBWRklPX1BDSV9UUEhfUE9MSUNZX0RTX1NUKSB7XG4rXHRcdFx0cmVzb2x2ZS5zdCA9IHRhZztcbitcdFx0XHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbitcdFx0fVxuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdHJldCA9IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHZkZXYtXHUwMDNlcGRldiwgdXNlcl9mbGFncywgcmVzb2x2ZS5zcmMsXG4rXHRcdFx0XHQgICAgICBleHRlbmRlZCwgXHUwMDI2dGFnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXNvbHZlLnZhbGlkIHw9IFZGSU9fREVWSUNFX1RQSF9WQUxJRF9TVDtcbitcdHJlc29sdmUuc3QgPSB0YWc7XG4rXG4rb3V0OlxuK1x0cmV0dXJuIGNvcHlfdG9fdXNlcihhcmcsIFx1MDAyNnJlc29sdmUsIHNpemVvZihyZXNvbHZlKSkgPyAtRUZBVUxUIDogMDtcbit9XG4rXG4rc3RhdGljIHUzMiB2ZmlvX3BjaV9nZXRfdHBoX3N0X2FsbG93X3NyYyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4re1xuK1x0dTMyIGZsYWdzID0gdmZpb19wY2lfZ2V0X3RwaF9jYXBhYmlsaXR5KHZkZXYpO1xuK1x0dTMyIGFsbG93X3NyYyA9IDA7XG4rXG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfRE1BQlVGKVxuK1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUY7XG4rXHRpZiAoZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfQ1BVKVxuK1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEUgfFxuK1x0XHRcdCAgICAgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfUEVSU0lTVEVOVDtcbitcdGlmIChmbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0NBUF9TVF9OT05FKVxuK1x0XHRhbGxvd19zcmMgfD0gVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FO1xuK1xuK1x0cmV0dXJuIGFsbG93X3NyYztcbit9XG4rXG4rc3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHRcdHUzMiBmbGFncyxcbitcdFx0XHRcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX3RwaF9zdCBfX3VzZXIgKmFyZyxcbitcdFx0XHRcdHNpemVfdCBhcmdzeilcbit7XG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfc3QgdHBoX3N0O1xuK1x0dTMyIHVzZXJfZmxhZ3MsIGFsbG93X3NyYywgc3Rfc2l6ZTtcbitcdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdmRldi1cdTAwM2VwZGV2O1xuK1x0Ym9vbCBleHRlbmRlZCwgc3RvcF9vbl96ZXJvO1xuK1x0dTMyICpzcmNfaG5kbCA9IE5VTEw7XG4rXHR1MTYgKnRhZ3MgPSBOVUxMO1xuK1x0aW50IHJldCwgaTtcbitcdHUxNiBjbWQ7XG4rXG4rXHRpZiAoIXZkZXYtXHUwMDNldHBoX29wdF9pbiB8fCB2ZGV2LVx1MDAzZXRwaF9wb2xpY3kgPT0gVkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeiwgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4rXHRcdFx0XHQgc2l6ZW9mKHRwaF9zdCkpO1xuK1x0aWYgKHJldCAhPSAxKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNnRwaF9zdCwgYXJnLCBzaXplb2YodHBoX3N0KSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0dXNlcl9mbGFncyA9IHRwaF9zdC5mbGFncztcbitcdGV4dGVuZGVkID0gISEodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKTtcbitcdGlmIChleHRlbmRlZCBcdTAwMjZcdTAwMjYgIXBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQodmRldi1cdTAwM2VwZGV2KSlcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0dXNlcl9mbGFncyBcdTAwMjY9IH5WRklPX0RFVklDRV9UUEhfRVhURU5ERUQ7XG4rXG4rXHRzdG9wX29uX3plcm8gPSAhISh1c2VyX2ZsYWdzIFx1MDAyNiBWRklPX0RFVklDRV9UUEhfUkVRVUlSRV9TVCk7XG4rXHRpZiAoc3RvcF9vbl96ZXJvIFx1MDAyNlx1MDAyNiAodXNlcl9mbGFncyBcdTAwMjYgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR1c2VyX2ZsYWdzIFx1MDAyNj0gflZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUO1xuK1xuK1x0YWxsb3dfc3JjID0gdmZpb19wY2lfZ2V0X3RwaF9zdF9hbGxvd19zcmModmRldik7XG4rXHRpZiAodXNlcl9mbGFncyBcdTAwMjYgfmFsbG93X3NyYyB8fCAhaXNfcG93ZXJfb2ZfMih1c2VyX2ZsYWdzKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRzdF9zaXplID0gdmZpb19wY2lfZ2V0X3RwaF9zdF9zaXplKHZkZXYpO1xuK1x0aWYgKHRwaF9zdC5zdGFydCBcdTAwM2U9IHN0X3NpemUgfHwgdHBoX3N0LmNvdW50IFx1MDAzZSBzdF9zaXplIC0gdHBoX3N0LnN0YXJ0IHx8XG4rXHRcdHRwaF9zdC5jb3VudCA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmICghKHVzZXJfZmxhZ3MgXHUwMDI2IFZGSU9fREVWSUNFX1RQSF9TUkNfTk9ORSkpIHtcbitcdFx0c3JjX2huZGwgPSBtZW1kdXBfYXJyYXlfdXNlcih1NjRfdG9fdXNlcl9wdHIodHBoX3N0LmRlc3RzKSxcbitcdFx0XHRcdFx0ICAgICB0cGhfc3QuY291bnQsIHNpemVvZih1MzIpKTtcbitcdFx0aWYgKElTX0VSUihzcmNfaG5kbCkpXG4rXHRcdFx0cmV0dXJuIFBUUl9FUlIoc3JjX2huZGwpO1xuK1x0fVxuK1x0dGFncyA9IGtjYWxsb2ModHBoX3N0LmNvdW50LCBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbitcdGlmICghdGFncykge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHRwaF9zdC5jb3VudDsgaSsrKSB7XG4rXHRcdHJldCA9IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHBkZXYsIHVzZXJfZmxhZ3MsXG4rXHRcdFx0XHRcdCAgICAgIHNyY19obmRsID8gc3JjX2huZGxbaV0gOiAwLFxuK1x0XHRcdFx0XHQgICAgICBleHRlbmRlZCwgXHUwMDI2dGFnc1tpXSk7XG4rXHRcdGlmIChyZXQgfHwgKHN0b3Bfb25femVybyBcdTAwMjZcdTAwMjYgdGFnc1tpXSA9PSAwKSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmIChpIFx1MDAzZSAwKSB7XG4rXHRcdGNtZCA9IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUodmRldik7XG4rXHRcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIHRwaF9zdC5zdGFydCwgaSwgdGFncyk7XG4rXHRcdHZmaW9fcGNpX21lbW9yeV91bmxvY2tfYW5kX3Jlc3RvcmUodmRldiwgY21kKTtcbitcdH1cbitcbitvdXQ6XG4rXHRrZnJlZSh0YWdzKTtcbitcdGtmcmVlKHNyY19obmRsKTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0XHRcdHZvaWQgX191c2VyICphcmcsIHNpemVfdCBhcmdzeilcbiB7XG5AQCAtMTYyNSw2ICsxOTQ2LDE2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4gXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcbitcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaCh2ZGV2LCBmbGFncywgYXJnLFxuK1x0XHRcdFx0XHRcdFx0IGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRTpcbitcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZSh2ZGV2LCBmbGFncyxcbitcdFx0XHRcdFx0XHRcdCBhcmcsIGFyZ3N6KTtcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1Q6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiBcdGRlZmF1bHQ6XG4gXHRcdHJldHVybiAtRU5PVFRZO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5pbmRleCBjMTZmNDYwYzAxZDY4MS4uNTM1MTgzOWMxMzM4YWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5AQCAtMyw2ICszLDcgQEBcbiAgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtYnVmLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS10cGguaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInZmaW9fcGNpX3ByaXYuaFwiXG5AQCAtMTksNyArMjAsMTcgQEAgc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xuIFx0dTMyIG5yX3JhbmdlcztcbiBcdHN0cnVjdCBrcmVmIGtyZWY7XG4gXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuLVx0dTggcmV2b2tlZCA6IDE7XG4rXG4rXHQvKlxuK1x0ICogVXBkYXRlcyBwcm90ZWN0ZWQgYnkgZG1hYnVmLVx1MDAzZXJlc3YsIEByZXZva2VkIGFkZGl0aW9uYWxseVxuK1x0ICogcHJvdGVjdGVkIGJ5IG1lbW9yeV9sb2NrLlxuK1x0ICovXG4rXHR1MTYgdHBoX3N0X2V4dDtcbitcdHU4IHRwaF9zdDtcbitcdGJvb2wgcmV2b2tlZDtcbitcdHU4IHRwaF9zdF92YWxpZDoxO1xuK1x0dTggdHBoX3N0X2V4dF92YWxpZDoxO1xuK1x0dTggdHBoX3BoOjI7XG4gfTtcbiBcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG5AQCAtMzAsNyArNDEsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRpZiAoIWF0dGFjaG1lbnQtXHUwMDNlcGVlcjJwZWVyKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuK1x0aWYgKFJFQURfT05DRShwcml2LVx1MDAzZXJldm9rZWQpKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdGlmICghZG1hX2J1Zl9hdHRhY2hfcmV2b2NhYmxlKGF0dGFjaG1lbnQpKVxuQEAgLTY5LDYgKzgwLDI2IEBAIHZmaW9fcGNpX2RtYV9idWZfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGgoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHRcdFx0dTE2ICpzdGVlcmluZ190YWcsIHU4ICpwaClcbit7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuK1xuK1x0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1xuK1x0aWYgKGV4dGVuZGVkKSB7XG4rXHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfZXh0X3ZhbGlkKVxuK1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdFx0KnN0ZWVyaW5nX3RhZyA9IHByaXYtXHUwMDNldHBoX3N0X2V4dDtcbitcdH0gZWxzZSB7XG4rXHRcdGlmICghcHJpdi1cdTAwM2V0cGhfc3RfdmFsaWQpXG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHQqc3RlZXJpbmdfdGFnID0gcHJpdi1cdTAwM2V0cGhfc3Q7XG4rXHR9XG4rXHQqcGggPSBwcml2LVx1MDAzZXRwaF9waDtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgc2dfdGFibGUgKnNndCxcbiBcdFx0XHRcdCAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcilcbkBAIC0xMDEsNiArMTMyLDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0ge1xuIFx0LmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLFxuK1x0LmdldF9wY2lfdHBoID0gdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaCxcbiBcdC5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfbWFwLFxuIFx0LnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLFxuIFx0LnJlbGVhc2UgPSB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2UsXG5AQCAtMzMzLDYgKzM2NSw3MiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbitcdFx0XHRcdCAgICAgIHUzMiBmbGFncyxcbitcdFx0XHRcdCAgICAgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuK1x0XHRcdFx0ICAgICAgc2l6ZV90IGFyZ3N6KVxuK3tcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIHNldF90cGg7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcbitcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4rXHR1OCBjb21wO1xuK1x0aW50IHJldDtcbitcbitcdGNvbXAgPSBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZSh2ZGV2LVx1MDAzZXBkZXYpO1xuK1x0aWYgKGNvbXAgPT0gUENJX0VYUF9ERVZDQVAyX1RQSF9DT01QX05PTkUpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osIFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuK1x0XHRcdFx0IHNpemVvZihzZXRfdHBoKSk7XG4rXHRpZiAocmV0ICE9IDEpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAoY29weV9mcm9tX3VzZXIoXHUwMDI2c2V0X3RwaCwgYXJnLCBzaXplb2Yoc2V0X3RwaCkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGlmIChzZXRfdHBoLmZsYWdzIFx1MDAyNiB+KFZGSU9fRE1BX0JVRl9UUEhfU1QgfCBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKHNldF90cGgucGggXHUwMDI2IH4weDMpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0aWYgKChzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCkgXHUwMDI2XHUwMDI2XG4rXHQgICAgY29tcCAhPSBQQ0lfRVhQX0RFVkNBUDJfVFBIX0NPTVBfRVhUX1RQSClcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1xuK1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoc2V0X3RwaC5kbWFidWZfZmQpO1xuK1x0aWYgKElTX0VSUihkbWFidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuK1xuK1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcykge1xuK1x0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIG91dF9wdXQ7XG4rXHR9XG4rXG4rXHRwcml2ID0gZG1hYnVmLVx1MDAzZXByaXY7XG4rXHRpZiAocHJpdi1cdTAwM2V2ZGV2ICE9IHZkZXYpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfcHV0O1xuK1x0fVxuK1xuK1x0cmV0ID0gZG1hX3Jlc3ZfbG9ja19pbnRlcnJ1cHRpYmxlKGRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbitcdGlmIChyZXQpXG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcbitcdHByaXYtXHUwMDNldHBoX3N0ICAgICAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZztcbitcdHByaXYtXHUwMDNldHBoX3N0X2V4dCAgICAgPSBzZXRfdHBoLnN0ZWVyaW5nX3RhZ19leHQ7XG4rXHRwcml2LVx1MDAzZXRwaF9waCAgICAgICAgID0gc2V0X3RwaC5waDtcbitcdHByaXYtXHUwMDNldHBoX3N0X3ZhbGlkICAgPSAhIShzZXRfdHBoLmZsYWdzIFx1MDAyNiBWRklPX0RNQV9CVUZfVFBIX1NUKTtcbitcdHByaXYtXHUwMDNldHBoX3N0X2V4dF92YWxpZCA9XG4rXHRcdCEhKHNldF90cGguZmxhZ3MgXHUwMDI2IFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUKTtcbitcdGRtYV9yZXN2X3VubG9jayhkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRyZXQgPSAwO1xuK1xuK291dF9wdXQ6XG4rXHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLjAzYzRhMDQxNDI2NGVmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMTEsNiArMTEsMTIgQEBcbiAvKiBDYXAgbWF4aW11bSBudW1iZXIgb2YgaW9ldmVudGZkcyBwZXIgZGV2aWNlIChhcmJpdHJhcnkpICovXG4gI2RlZmluZSBWRklPX1BDSV9JT0VWRU5URkRfTUFYXHRcdDEwMDBcbiBcbitlbnVtIHZmaW9fcGNpX3RwaF9wb2xpY3kge1xuK1x0VkZJT19QQ0lfVFBIX1BPTElDWV9OT19TVCA9IDAsXG4rXHRWRklPX1BDSV9UUEhfUE9MSUNZX0lWX1NUID0gMSxcbitcdFZGSU9fUENJX1RQSF9QT0xJQ1lfRFNfU1QgPSAyLFxuK307XG4rXG4gc3RydWN0IHZmaW9fcGNpX2lvZXZlbnRmZCB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRuZXh0O1xuIFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlXHQqdmRldjtcbkBAIC0xMTgsNiArMTI0LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxuIFx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdFx0ICAgICAgdTMyIGZsYWdzLFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXG4rXHRcdFx0XHQgICAgICBzaXplX3QgYXJnc3opO1xuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuICNlbHNlXG5AQCAtMTI4LDYgKzEzOCwxNCBAQCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiB7XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBpbnRcbit2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4rXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfdHBoIF9fdXNlciAqYXJnLFxuK1x0XHRcdFx0ICBzaXplX3QgYXJnc3opXG4re1xuK1x0cmV0dXJuIC1FTk9UVFk7XG4rfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIHtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaFxuaW5kZXggZDEyMDNkYTU2ZmM1ZjcuLjE0ZThlYjYxYTYyYzA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtYnVmLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oXG5AQCAtMTEzLDYgKzExMywyOSBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMge1xuIFx0ICovXG4gXHR2b2lkICgqdW5waW4pKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCk7XG4gXG4rXHQvKipcbitcdCAqIEBnZXRfcGNpX3RwaDpcbitcdCAqXG4rXHQgKiBSZXRyaWV2ZSBQQ0llIFRMUCBQcm9jZXNzaW5nIEhpbnQgKFRQSCkgc3RlZXJpbmcgbWV0YWRhdGEgZm9yXG4rXHQgKiB0aGlzIGJ1ZmZlciBzbyBhbiBpbXBvcnRlciBjYW4gcHJvZ3JhbSBhIG1hdGNoaW5nIFNUL1BIIGhpbnQgb25cbitcdCAqIG91dGJvdW5kIFRMUHMgdGFyZ2V0aW5nIHRoZSBleHBvcnRlciBmb3IgcGVlci10by1wZWVyIERNQS5cbitcdCAqXG4rXHQgKiBAZG1hYnVmOiBETUEgYnVmZmVyIGZvciB3aGljaCB0byByZXRyaWV2ZSBUUEggbWV0YWRhdGFcbitcdCAqIEBleHRlbmRlZDogZmFsc2UgZm9yIDgtYml0IFNULCB0cnVlIGZvciAxNi1iaXQgRXh0ZW5kZWQgU1RcbitcdCAqIEBzdGVlcmluZ190YWc6IFJldHVybnMgdGhlIHJhdyBUUEggc3RlZXJpbmcgdGFnIGZvciB0aGUgcmVxdWVzdGVkXG4rXHQgKiAgICAgICAgICAgICAgICBuYW1lc3BhY2VcbitcdCAqIEBwaDogUmV0dXJucyB0aGUgVFBIIHByb2Nlc3NpbmcgaGludCAoMi1iaXQgdmFsdWUpXG4rXHQgKlxuK1x0ICogT3B0aW9uYWwgY2FsbGJhY2sgZm9yIGRtYV9idWZfZ2V0X3BjaV90cGgoKS4gQ2FsbGVkIHdpdGhcbitcdCAqIFx1MDAyNmRtYV9idWYucmVzdiBoZWxkLiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRU9QTk9UU1VQUCB3aGVuXG4rXHQgKiB0aGUgZXhwb3J0ZXIgaGFzIG5vIG1ldGFkYXRhIGZvciB0aGUgcmVxdWVzdGVkIG5hbWVzcGFjZS5cbitcdCAqXG4rXHQgKiBSZXR1cm5lZCBtZXRhZGF0YSBmb2xsb3dzIHRoZSBsaWZldGltZSBydWxlcyBkb2N1bWVudGVkIGZvclxuK1x0ICogZG1hX2J1Zl9nZXRfcGNpX3RwaCgpLlxuK1x0ICovXG4rXHRpbnQgKCpnZXRfcGNpX3RwaCkoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwgYm9vbCBleHRlbmRlZCxcbitcdFx0XHQgICB1MTYgKnN0ZWVyaW5nX3RhZywgdTggKnBoKTtcbitcbiBcdC8qKlxuIFx0ICogQG1hcF9kbWFfYnVmOlxuIFx0ICpcbkBAIC01NjMsNiArNTg2LDggQEAgdm9pZCBkbWFfYnVmX2RldGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHQgICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiBpbnQgZG1hX2J1Zl9waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbiB2b2lkIGRtYV9idWZfdW5waW4oc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKTtcbitpbnQgZG1hX2J1Zl9nZXRfcGNpX3RwaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBib29sIGV4dGVuZGVkLFxuK1x0XHRcdHUxNiAqc3RlZXJpbmdfdGFnLCB1OCAqcGgpO1xuIFxuIHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oIGIvaW5jbHVkZS9saW51eC9wY2ktdHBoLmhcbmluZGV4IGJlNjhjZDE3ZjJmODMzLi5hZWFmNzAxZTc5NjViMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXRwaC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS10cGguaFxuQEAgLTksNiArOSw4IEBAXG4gI2lmbmRlZiBMSU5VWF9QQ0lfVFBIX0hcbiAjZGVmaW5lIExJTlVYX1BDSV9UUEhfSFxuIFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4rXG4gLypcbiAgKiBBY2NvcmRpbmcgdG8gdGhlIEVDTiBmb3IgUENJIEZpcm13YXJlIFNwZWMsIFN0ZWVyaW5nIFRhZyBjYW4gYmUgZGlmZmVyZW50XG4gICogZGVwZW5kaW5nIG9uIHRoZSBtZW1vcnkgdHlwZTogVm9sYXRpbGUgTWVtb3J5IG9yIFBlcnNpc3RlbnQgTWVtb3J5LiBXaGVuIGFcbkBAIC0yMSwyNiArMjMsNjkgQEAgZW51bSB0cGhfbWVtX3R5cGUge1xuIH07XG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuKy8qKlxuKyAqIHBjaWVfc3RkX3RwaF9zdXBwb3J0ZWQgLSBjaGVjayBzdGFuZGFyZCBUUEggcmVxdWVzdGVyIHN1cHBvcnRcbisgKiBAcGRldjogUENJIGRldmljZVxuKyAqL1xuKyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBcXFxuK1x0KChwZGV2KS1cdTAwM2V0cGhfbWF4X3R5cGUgXHUwMDNlPSBQQ0lfVFBIX1JFUV9UUEhfT05MWSlcbisvKipcbisgKiBwY2llX2V4dF90cGhfc3VwcG9ydGVkIC0gY2hlY2sgZXh0ZW5kZWQgVFBIIHJlcXVlc3RlciBzdXBwb3J0XG4rICogQHBkZXY6IFBDSSBkZXZpY2VcbisgKi9cbisjZGVmaW5lIHBjaWVfZXh0X3RwaF9zdXBwb3J0ZWQocGRldikgXFxcbitcdCgocGRldiktXHUwMDNldHBoX21heF90eXBlID09IFBDSV9UUEhfUkVRX0VYVF9UUEgpXG4gaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHQgIHVuc2lnbmVkIGludCBpbmRleCwgdTE2IHRhZyk7XG4taW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcbi1cdFx0XHRlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbitpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCxcbitcdFx0XHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xuK2ludCBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbitcdFx0XHQgICAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsIHUxNiAqdGFnKTtcbitpbnQgcGNpZV90cGhfZ2V0X2NwdV9zdChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBlbnVtIHRwaF9tZW1fdHlwZSBtZW1fdHlwZSxcbiBcdFx0XHR1bnNpZ25lZCBpbnQgY3B1LCB1MTYgKnRhZyk7XG4gdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbi1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbW9kZSk7XG4raW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKTtcbitpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKTtcbiB1MTYgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX3NpemUoc3RydWN0IHBjaV9kZXYgKnBkZXYpO1xuIHUzMiBwY2llX3RwaF9nZXRfc3RfdGFibGVfbG9jKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbit1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbit1OCBwY2llX3RwaF9jb21wbGV0ZXJfdHlwZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4rYm9vbCBwY2llX3RwaF9kc21fc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiAjZWxzZVxuKyNkZWZpbmUgcGNpZV9zdGRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZVxuKyNkZWZpbmUgcGNpZV9leHRfdHBoX3N1cHBvcnRlZChwZGV2KSBmYWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyeShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbitzdGF0aWMgaW5saW5lIGludCBwY2llX3RwaF9zZXRfc3RfZW50cmllcyhzdHJ1Y3QgcGNpX2RldiAqcGRldixcbitcdFx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgc3RhcnQsXG4rXHRcdFx0XHRcdCAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpXG4reyByZXR1cm4gLUVJTlZBTDsgfVxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0KHN0cnVjdCBwY2lfZGV2ICpkZXYsXG4rXHRcdFx0XHRcdCAgZW51bSB0cGhfbWVtX3R5cGUgbWVtX3R5cGUsXG4rXHRcdFx0XHRcdCAgdTggcmVxX3R5cGUsIHVuc2lnbmVkIGludCBjcHUsXG4rXHRcdFx0XHRcdCAgdTE2ICp0YWcpXG4reyByZXR1cm4gLUVJTlZBTDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX2dldF9jcHVfc3Qoc3RydWN0IHBjaV9kZXYgKmRldixcbiBcdFx0XHRcdCAgICAgIGVudW0gdHBoX21lbV90eXBlIG1lbV90eXBlLFxuIFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IGNwdSwgdTE2ICp0YWcpXG4geyByZXR1cm4gLUVJTlZBTDsgfVxuIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cbi1zdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBtb2RlKVxuK3N0YXRpYyBpbmxpbmUgaW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsXG4rXHRcdFx0XHQgICAgICB1OCByZXFfdHlwZSlcbit7IHJldHVybiAtRUlOVkFMOyB9XG4rc3RhdGljIGlubGluZSBpbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKVxuIHsgcmV0dXJuIC1FSU5WQUw7IH1cbitzdGF0aWMgaW5saW5lIHUxNiBwY2llX3RwaF9nZXRfc3RfdGFibGVfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiAwOyB9XG4rc3RhdGljIGlubGluZSB1MzIgcGNpZV90cGhfZ2V0X3N0X3RhYmxlX2xvYyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7IHJldHVybiBQQ0lfVFBIX0xPQ19OT05FOyB9XG4rc3RhdGljIGlubGluZSB1OCBwY2llX3RwaF9lbmFibGVkX3JlcV90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9UUEhfUkVRX0RJU0FCTEU7IH1cbitzdGF0aWMgaW5saW5lIHU4IHBjaWVfdHBoX2NvbXBsZXRlcl90eXBlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3sgcmV0dXJuIFBDSV9FWFBfREVWQ0FQMl9UUEhfQ09NUF9OT05FOyB9XG4rc3RhdGljIGlubGluZSBib29sIHBjaWVfdHBoX2RzbV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4reyByZXR1cm4gZmFsc2U7IH1cbiAjZW5kaWZcbiBcbiAjZW5kaWYgLyogTElOVVhfUENJX1RQSF9IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDY0YjMwOGI2ZTYxYzE5Li41ZWQ1ODc5OWE5YjEyOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC00NzIsNyArNDcyLDYgQEAgc3RydWN0IHBjaV9kZXYge1xuIFx0dW5zaWduZWQgaW50XHRhdHNfZW5hYmxlZDoxO1x0XHQvKiBBZGRyZXNzIFRyYW5zbGF0aW9uIFN2YyAqL1xuIFx0dW5zaWduZWQgaW50XHRwYXNpZF9lbmFibGVkOjE7XHQvKiBQcm9jZXNzIEFkZHJlc3MgU3BhY2UgSUQgKi9cbiBcdHVuc2lnbmVkIGludFx0cHJpX2VuYWJsZWQ6MTtcdFx0LyogUGFnZSBSZXF1ZXN0IEludGVyZmFjZSAqL1xuLVx0dW5zaWduZWQgaW50XHR0cGhfZW5hYmxlZDoxO1x0XHQvKiBUTFAgUHJvY2Vzc2luZyBIaW50cyAqL1xuIFx0dW5zaWduZWQgaW50XHRmbV9lbmFibGVkOjE7XHRcdC8qIEZsaXQgTW9kZSAoc2VnbWVudCBjYXB0dXJlZCkgKi9cbiBcdHVuc2lnbmVkIGludFx0aXNfbWFuYWdlZDoxO1x0XHQvKiBNYW5hZ2VkIHZpYSBkZXZyZXMgKi9cbiBcdHVuc2lnbmVkIGludFx0aXNfbXNpX21hbmFnZWQ6MTtcdC8qIE1TSSByZWxlYXNlIHZpYSBkZXZyZXMgaW5zdGFsbGVkICovXG5AQCAtNTg4LDcgKzU4NywxMCBAQCBzdHJ1Y3QgcGNpX2RldiB7XG4gXHR1OCByZXNldF9tZXRob2RzW1BDSV9OVU1fUkVTRVRfTUVUSE9EU107IC8qIEluIHByaW9yaXR5IG9yZGVyICovXG4gXG4gI2lmZGVmIENPTkZJR19QQ0lFX1RQSFxuLVx0dTE2XHRcdHRwaF9jYXA7XHQvKiBUUEggY2FwYWJpbGl0eSBvZmZzZXQgKi9cbitcdHUxNlx0XHR0cGhfY2FwOjEzO1x0LyogVFBIIGNhcGFiaWxpdHkgb2Zmc2V0ICovXG4rXHR1MTZcdFx0dHBoX21heF90eXBlOjI7IC8qIE5lZ290aWF0ZWQgbWF4IFRQSCByZXF1ZXN0ZXIgdHlwZVxuK1x0XHRcdFx0XHQgICBiZXR3ZWVuIGRldmljZSBhbmQgcm9vdCBwb3J0ICovXG4rXHR1MTZcdFx0dHBoX2VuYWJsZWQ6MTtcdC8qIFdoZXRoZXIgVFBIIGlzIGVuYWJsZWQgKi9cbiBcdHU4XHRcdHRwaF9tb2RlO1x0LyogVFBIIG1vZGUgKi9cbiBcdHU4XHRcdHRwaF9yZXFfdHlwZTtcdC8qIFRQSCByZXF1ZXN0ZXIgdHlwZSAqL1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbmluZGV4IDlhMTY3NGMxNTJhYTI5Li5kNjA2NGZhOWU4MGE2OSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuQEAgLTE0OSw2ICsxNDksOSBAQCBzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2Uge1xuIFx0c3RydWN0IG5vdGlmaWVyX2Jsb2NrXHRuYjtcbiBcdHN0cnVjdCByd19zZW1hcGhvcmVcdG1lbW9yeV9sb2NrO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0ZG1hYnVmcztcbitcdHU4XHRcdFx0dHBoX29wdF9pbjtcbitcdHU4XHRcdFx0dHBoX3BvbGljeTtcbitcdHUzMlx0XHRcdHRwaF9jYXBfdmlydDtcbiB9O1xuIFxuIGVudW0gdmZpb19wY2lfaW9fd2lkdGgge1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uOWJjM2NlZjdhODlhYzQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICsxNTM0LDE1MCBAQCBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIHtcbiAgKi9cbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxuIFxuKy8qKlxuKyAqIFVwb24gVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQgYXNzb2NpYXRlIFRQSCAoVExQIFByb2Nlc3NpbmcgSGludHMpIG1ldGFkYXRhXG4rICogd2l0aCBhIHZmaW8tZXhwb3J0ZWQgZG1hLWJ1Zi4gVGhlIGRtYS1idWYgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCBieVxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiBvbiB0aGlzIGRldmljZSwgYW5kIHRoZSBkZXZpY2UgbXVzdCByZXBvcnRcbisgKiBUUEggQ29tcGxldGVyIHN1cHBvcnQgaW4gRGV2aWNlIENhcGFiaWxpdGllcyAyIChiaXRzIDEzOjEyKTsgcmVxdWVzdHNcbisgKiBjYXJyeWluZyBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVCBhZGRpdGlvbmFsbHkgcmVxdWlyZSB0aGUgZGV2aWNlIHRvXG4rICogcmVwb3J0IHRoZSBFeHRlbmRlZCBUUEggQ29tcGxldGVyIGVuY29kaW5nLiBPdGhlcndpc2UgdGhlIGlvY3RsXG4rICogcmV0dXJucyAtRU9QTk9UU1VQUC5cbisgKlxuKyAqIEBkbWFidWZfZmQgaXMgdGhlIGZpbGUgZGVzY3JpcHRvciByZXR1cm5lZCBieSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUYuXG4rICpcbisgKiA4LWJpdCBTVCAoQHN0ZWVyaW5nX3RhZykgYW5kIDE2LWJpdCBFeHRlbmRlZCBTVCAoQHN0ZWVyaW5nX3RhZ19leHQpIGFyZVxuKyAqIGRpc3RpbmN0IG5hbWVzcGFjZXMuIEBmbGFncyBpcyB0aGUgYXV0aG9yaXRhdGl2ZSB2YWxpZGl0eSBtYXNrIGZvciB0aGVcbisgKiB0d28gbmFtZXNwYWNlczogVkZJT19ETUFfQlVGX1RQSF9TVCBtYXJrcyBAc3RlZXJpbmdfdGFnIHZhbGlkIGFuZFxuKyAqIFZGSU9fRE1BX0JVRl9UUEhfU1RfRVhUIG1hcmtzIEBzdGVlcmluZ190YWdfZXh0IHZhbGlkLiBBbiBpbXBvcnRlclxuKyAqIHJlcXVlc3RzIG9uZSBuYW1lc3BhY2UgYW5kIHJlY2VpdmVzIHRoZSBtYXRjaGluZyB2YWx1ZS5cbisgKlxuKyAqIEVhY2ggU0VUIGZ1bGx5IHJlcGxhY2VzIHRoZSBkbWEtYnVmJ3MgVFBIIHN0YXRlIGZvciBmdXR1cmUgcXVlcmllc1xuKyAqIG9ubHkuIEEgbmFtZXNwYWNlIHdob3NlIGZsYWcgYml0IGlzIGNsZWFyIGlzIHJlcG9ydGVkIGFzIHVuc3VwcG9ydGVkXG4rICogdG8gZnV0dXJlIGltcG9ydGVyczsgYW4gaW1wb3J0ZXIgdGhhdCBoYXMgYWxyZWFkeSByZXRyaWV2ZWQgYSB2YWx1ZVxuKyAqIGlzIHVuYWZmZWN0ZWQuIEBmbGFncyA9PSAwIGxlYXZlcyBib3RoIG5hbWVzcGFjZXMgdW5zdXBwb3J0ZWQgZm9yXG4rICogZnV0dXJlIGltcG9ydGVycy5cbisgKlxuKyAqIEBwaCBpcyB0aGUgMi1iaXQgVExQIFByb2Nlc3NpbmcgSGludCBhbmQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAsIDNdLlxuKyAqXG4rICogVW5kZWZpbmVkIEBmbGFncyBhbmQgQHBoIGJpdHMgbXVzdCBhbHdheXMgYmUgemVyby5cbisgKlxuKyAqIFVzZXJzcGFjZSBtdXN0IGNvbmZpZ3VyZSBUUEggYmVmb3JlIGhhbmRpbmcgdGhlIGRtYS1idWYgZmQgdG8gYW5cbisgKiBpbXBvcnRlci5cbisgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEggMTNcbitcbisjZGVmaW5lIFZGSU9fRE1BX0JVRl9UUEhfU1RcdFx0KDEgXHUwMDNjXHUwMDNjIDApXG4rI2RlZmluZSBWRklPX0RNQV9CVUZfVFBIX1NUX0VYVFx0XHQoMSBcdTAwM2NcdTAwM2MgMSlcbitcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3RwaCB7XG4rXHRfX3MzMlx0ZG1hYnVmX2ZkO1xuK1x0X191MzJcdGZsYWdzO1xuK1x0X191MTZcdHN0ZWVyaW5nX3RhZ19leHQ7XG4rXHRfX3U4XHRzdGVlcmluZ190YWc7XG4rXHRfX3U4XHRwaDtcbit9O1xuK1xuKy8qIFBDSWUgVFBIIGRldmljZSBmZWF0dXJlIGRlZmluaXRpb25zIGZvciBWRklPX0RFVklDRV9GRUFUVVJFIGlvY3RsICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSFx0XHQxNFxuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRVx0MTVcbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUXHQxNlxuK1xuKy8qXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEggLSBDb250cm9sIGFuZCBxdWVyeSBQQ0kgVFBIIGNhcGFiaWxpdGllc1xuKyAqXG4rICogU0VUOiBPcHQtaW4gdG8gVFBIIGZlYXR1cmUgZm9yIHRoZSBkZXZpY2U7IGZsYWdzIG11c3QgYmUgemVyby5cbisgKiBHRVQ6IFJldHVybiBzdXBwb3J0ZWQgVFBIIGNhcGFiaWxpdHkgYml0cyAoc2VlIFZGSU9fREVWSUNFX1RQSF9DQVBfKilcbisgKiAgICAgIGluIGZsYWdzLiBSZXR1cm5zIGVycm9yIGlmIFNFVCBoYXMgbm90IGJlZW4gaW52b2tlZCBmaXJzdC5cbisgKlxuKyAqIFVzZXJzcGFjZSBtdXN0IGZpcnN0IGludm9rZSBTRVQgb24gdGhpcyBmZWF0dXJlIHRvIGVuYWJsZSBUUEggc3VwcG9ydCxcbisgKiByZWNlaXZlIHZhbGlkIGNhcGFiaWxpdHkgYml0cyB2aWEgR0VULCBnYWluIHBlcm1pc3Npb24gZm9yIHVzaW5nXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAvIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NULCBhbmQgYWNjZXNzXG4rICogdGhlIHZpcnR1YWxpemVkIFRQSCBjYXBhYmlsaXR5IHJlZ2lzdGVycyB2aWEgVkZJTyBjb25maWcgc3BhY2UgYWNjZXNzZXMuXG4rICovXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoIHtcbitcdF9fdTMyIGZsYWdzO1xuK307XG4rXG4rLyogRE1BQlVGIHNvdXJjZSByZXNvbHZlIHByb2Nlc3NpbmcgaGludCBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfUEhcdCgxdSBcdTAwM2NcdTAwM2MgMClcbisvKiBETUFCVUYgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfRE1BQlVGXHRcdCgxdSBcdTAwM2NcdTAwM2MgMSlcbisvKiBDUFUgc291cmNlIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfQ1BVXHRcdCgxdSBcdTAwM2NcdTAwM2MgMilcbisvKiBOT05FIHNvdXJjZSAobWVhbnMgc3RlZXJpbmcgdGFnIGlzIHplcm8pIFRQSF9TVCBiYXRjaCBwcm9ncmFtbWluZyBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfU1RfTk9ORVx0XHQoMXUgXHUwMDNjXHUwMDNjIDMpXG4rLyogRE1BQlVGIHNvdXJjZSByZXNvbHZlIHN0ZWVyaW5nIHRhZyBzdXBwb3J0ZWQgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9DQVBfUkVTT0xWRV9ETUFCVUZfU1RcdCgxdSBcdTAwM2NcdTAwM2MgNClcbisvKiBDUFUgc291cmNlIHJlc29sdmUgc3RlZXJpbmcgdGFnIHN1cHBvcnRlZCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX0NBUF9SRVNPTFZFX0NQVV9TVFx0KDF1IFx1MDAzY1x1MDAzYyA1KVxuK1xuKy8qXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRSAtIFJlc29sdmUgVFBIIGF0dHJpYnV0ZXMgZnJvbSBnaXZlbiBzb3VyY2VcbisgKlxuKyAqIEdFVCBvbmx5XG4rICpcbisgKiBSZXF1aXJlcyBwcmlvciBzdWNjZXNzZnVsIFNFVCBvbiBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCwgb3RoZXJ3aXNlXG4rICogdGhpcyBmZWF0dXJlIHdpbGwgcmV0dXJuIGVycm9yLlxuKyAqXG4rICogQGZsYWdzOiBJTiAtIHNvdXJjZSB0eXBlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX1NSQ18qKVxuKyAqICAgICAgICAgYW5kIHN0ZWVyaW5nIHRhZyBuYW1lc3BhY2Ugc2VsZWN0b3IgKHNlZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERUQpXG4rICogQHNyYzogICBJTiAtIHNvdXJjZSBpZGVudGlmaWVyLCBlLmcuIGRtYWJ1ZiBmZCB3aGVuIFNSQ19ETUFCVUYgaXMgc2V0IGluXG4rICogICAgICAgICBmbGFnc1xuKyAqIEB2YWxpZDogT1VUIC0gYml0bWFwIGluZGljYXRpbmcgdmFsaWQgb3V0cHV0IGZpZWxkcywgc2VlXG4rICogICAgICAgICBWRklPX0RFVklDRV9UUEhfVkFMSURfKlxuKyAqIEBwaDogICAgT1VUIC0gVFBIIHByb2Nlc3NpbmcgaGludCAodmFsaWQgd2hlbiBWQUxJRF9QSCBpcyBzZXQgaW4gdmFsaWQpXG4rICogQHN0OiAgICBPVVQgLSBUUEggc3RlZXJpbmcgdGFnICh2YWxpZCB3aGVuIFZBTElEX1NUIGlzIHNldCBpbiB2YWxpZClcbisgKi9cbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV90cGhfcmVzb2x2ZSB7XG4rXHRfX3UzMiBmbGFncztcbitcdF9fdTMyIHNyYztcbitcdF9fdTggIHZhbGlkO1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1ZBTElEX1BIICgxdSBcdTAwM2NcdTAwM2MgMCkgLyogcGggaG9sZHMgdmFsaWQgcHJvY2Vzc2luZyBoaW50ICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfVkFMSURfU1QgKDF1IFx1MDAzY1x1MDAzYyAxKSAvKiBzdCBob2xkcyB2YWxpZCBzdGVlcmluZyB0YWcgKi9cbitcdF9fdTggIHBoO1xuK1x0X191MTYgc3Q7XG4rfTtcbitcbisvKlxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1NUIC0gQmF0Y2ggcHJvZ3JhbSBhcmNoaXRlY3RlZCBzdGVlcmluZyB0YWdcbisgKiB0YWJsZSBlbnRyaWVzXG4rICogUmV0dXJuIHZhbHVlOiBcdTAwM2U9MCA9IG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBlbnRyaWVzO1xuKyAqICAgICAgICAgICAgICAgXHUwMDNjMCAgPSBuZWdhdGl2ZSBlcnJub1xuKyAqXG4rICogU0VUIG9ubHlcbisgKlxuKyAqIEFkZGl0aW9uYWwgY29uc3RyYWludDogVXNlcnNwYWNlIG11c3QgY29tcGxldGUgdHdvIHByZXJlcXVpc2l0ZSBzdGVwc1xuKyAqIGJlZm9yZSBpbnZva2luZyB0aGlzIGZlYXR1cmU6XG4rICogMS4gQ2FsbCBWRklPX0RFVklDRV9GRUFUVVJFX1RQSCB3aXRoIFNFVCB0byBlbmFibGUgdmZpbyBUUEggcGVybWlzc2lvbjtcbisgKiAyLiBXcml0ZSB0aGUgVFBIIGNvbnRyb2wgcmVnaXN0ZXIgdG8gYWN0aXZhdGUgZGV2aWNlIGhhcmR3YXJlIFRQSCBsb2dpYy5cbisgKlxuKyAqIEBmbGFnczogSU4gLSBzb3VyY2UgdHlwZSBzZWxlY3RvciAoc2VlIFZGSU9fREVWSUNFX1RQSF9TUkNfKikgYW5kXG4rICogICAgICAgICBzdGVlcmluZyB0YWcgbmFtZXNwYWNlIHNlbGVjdG9yIChzZWUgVkZJT19ERVZJQ0VfVFBIX0VYVEVOREVEKSBhbmRcbisgKiAgICAgICAgIGZhaWx1cmUgcG9saWN5IChzZWUgVkZJT19ERVZJQ0VfVFBIX1JFUVVJUkVfU1QpXG4rICogQHN0YXJ0OiBJTiAtIGZpcnN0IHN0ZWVyaW5nIHRhZyB0YWJsZSBpbmRleCAvIE1TSS1YIHZlY3RvclxuKyAqIEBjb3VudDogSU4gLSBudW1iZXIgb2YgY29udGlndW91cyBlbnRyaWVzIHRvIHByb2dyYW1cbisgKiBAZGVzdHM6IElOIC0gdXNlciBwb2ludGVyIHRvIGFycmF5IG9mIHNvdXJjZSB1MzIgdmFsdWVzXG4rICovXG4rc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfdHBoX3N0IHtcbitcdF9fdTMyIGZsYWdzO1xuK1x0X191MTYgc3RhcnQ7XG4rXHRfX3UxNiBjb3VudDtcbitcdF9fYWxpZ25lZF91NjQgZGVzdHM7XG4rfTtcbitcbisvKiBTb3VyY2UgaG9sZHMgZG1hLWJ1ZiBmZCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19ETUFCVUYgICAgICAoMXUgXHUwMDNjXHUwMDNjIDApXG4rLyogVXNlIGV4dGVuZGVkIDE2LWJpdCBzdGVlcmluZyB0YWcgbmFtZXNwYWNlICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfRVhURU5ERURcdCgxdSBcdTAwM2NcdTAwM2MgMSlcbisvKiBTb3VyY2UgaG9sZHMgdm9sYXRpbGUgbWVtb3J5IENQVSBJRCAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19DUFVfVk9MQVRJTEVcdCgxdSBcdTAwM2NcdTAwM2MgMilcbisvKiBTb3VyY2UgaG9sZHMgcGVyc2lzdGVudCBtZW1vcnkgQ1BVIElEICovXG4rI2RlZmluZSBWRklPX0RFVklDRV9UUEhfU1JDX0NQVV9QRVJTSVNURU5UXHQoMXUgXHUwMDNjXHUwMDNjIDMpXG4rLyogVFBIX1NUIG9ubHk6IHNldCBzdGVlcmluZyB0YWcgdG8gemVybyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfVFBIX1NSQ19OT05FXHQoMXUgXHUwMDNjXHUwMDNjIDQpXG4rLyogVFBIX1NUIG9ubHk6IGZhaWwgaWYgcmVzb2x2ZWQgc3RlZXJpbmcgdGFnIGlzIHplcm8gKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX1RQSF9SRVFVSVJFX1NUXHQoMXUgXHUwMDNjXHUwMDNjIDUpXG4rXG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNTo0Ni40NDc2ODIzODRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3ODc1OTAxMjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkgYW5kIERNQS1CVUYgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIGFsbCBhYm91dCBpbnRlZ3JhdGluZyBQQ0llIFRQSCB3aXRoIERNQS1CVUYsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIFZGSU8gZnJhbWV3b3JrLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCBpdCdzIGEgbm9uLXRyaXZpYWwgcGllY2Ugb2Ygd29yaywgdG91Y2hpbmcgYSBnb29kIGNodW5rIG9mIHRoZSBrZXJuZWw6IGBkbWEtYnVmLmNgLCB0aGUgYHBjaS90cGguY2AgYW5kIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiB0aGUgVkZJTyBQQ0kgY29kZSwgYXMgd2VsbCBhcyBzZXZlcmFsIGhlYWRlciBmaWxlcy4gVGhlIGJyZWFkdGggb2YgdGhlIGNoYW5nZXMgaW1tZWRpYXRlbHkgc2lnbmFscyBzb21lIGNvbXBsZXhpdHkgYW5kIHRoZSBuZWVkIGZvciBjYXJlZnVsIHNjcnV0aW55LlxuXG5JdCdzIGNsZWFyIHRoYXQgdGhlIGFpbSBoZXJlIGlzIHRvIGV4cG9zZSBUUEggZnVuY3Rpb25hbGl0eSB0byB1c2Vyc3BhY2UgdGhyb3VnaCBWRklPLiBJIHNlZSBuZXcgVkZJTyBpb2N0bHMgYmVpbmcgaW50cm9kdWNlZDogYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9UUEhgLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhgLCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfUkVTT0xWRWAsIGFuZCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEhfU1RgLiBUaGUgYWRkaXRpb24gb2YgYGRtYV9idWZfZ2V0X3BjaV90cGhgIGluIGBkbWEtYnVmLmNgIGFuZCB0aGUgbW9kaWZpY2F0aW9ucyB0byBgcGNpL3RwaC5jYCBpbmNsdWRpbmcgbmV3IGZ1bmN0aW9ucyBsaWtlIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AsIGFuZCB0aGUgZW5hYmxlbWVudC9zdXBwb3J0IGNoZWNrcywgYWxsIHNlZW0gdG8gYmUgcGx1bWJpbmcgdGhlIG5lY2Vzc2FyeSBwaWVjZXMgdG9nZXRoZXIuIEl0IGFwcGVhcnMgZnVuY3Rpb25hbCwgYW5kIHJlYWNoYWJsZSB2aWEgVkZJTyBpb2N0bHMuIFRoaXMgbWVhbnMgd2UgKmFic29sdXRlbHkqIG5lZWQgdG8gZnV6eiB0aGUgbmV3IGlvY3RscyBhZ2dyZXNzaXZlbHk7IGEgbWlzaW50ZXJwcmV0YXRpb24gY291bGQgaGF2ZSBzZXZlcmUgcmVwZXJjdXNzaW9ucy5cblxuQmVmb3JlIEkgZGVsdmUgZGVlcGVyLCBsZXQncyBpZGVudGlmeSB0aGUgY29uZmlnIG9wdGlvbnMgd2UgbmVlZCB0byBrbm93IGFib3V0LiBUaGUgY29kZSB1c2VzIGBDT05GSUdfUENJRV9UUEhgIGFjcm9zcyBzZXZlcmFsIGZpbGVzLCBpbmNsdWRpbmcgdGhlIG1haW4gVkZJTyBQQ0kgZHJpdmVyLCBhcyB3ZWxsIGFzIHRoZSBwY2kgYW5kIHRwaCBoZWFkZXJzLiBgQ09ORklHX1ZGSU9fUENJYCBpcyBjbGVhcmx5IHRoZSBiYWNrYm9uZSBjb25maWcgZm9yIFZGSU8gUENJLCBhbmQgaXQncyB1bnN1cnByaXNpbmcgdG8gc2VlIHRoYXQgYENPTkZJR19ETUFfU0hBUkVEX0JVRkZFUmAgaXMgcmVxdWlyZWQsIGdpdmVuIHRoZSBETUEtQlVGIGludGVncmF0aW9uLiBOZXh0LCBJIHNob3VsZCBsb29rIGF0IHdoZXJlIGBDT05GSUdfUENJRV9UUEhgIGlzIGRlZmluZWQgd2l0aGluIHRoZSBLY29uZmlnIGZpbGVzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgd2hhdCBpcyBuZWVkZWQgZm9yIHRoaXMgbmV3IGZlYXR1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MzkxLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDU6NTQuMzIzNTg2Mjg1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTA0MDg2NTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBDSUVfVFBIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTg1PWNvbmZpZyBQQ0lfUEFTSURcXG4tLVxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk2LVxcbmRyaXZlcnMvcGNpL0tjb25maWc6MTk3OmNvbmZpZyBQQ0lFX1RQSFxcbmRyaXZlcnMvcGNpL0tjb25maWctMTk4LVxcdGJvb2wgXFxcIlRMUCBQcm9jZXNzaW5nIEhpbnRzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNjowMS40NzQwMDA4ODFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA3MTA0NzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqUENJZSBUUEggYW5kIFZGSU8tUENJIENvbnNpZGVyYXRpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBmaXJzdCB0aGluZywgYFBDSUVfVFBIYCBpcyBkZWZpbmVkIGFzIGEgYm9vbGVhbi4gVGhhdCdzIGdvb2QgdG8ga2VlcCBpbiBtaW5kLCByaWdodD8gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmVzdCBvZiB0aGUgc3lzdGVtLiBMZXQncyBzZWUuLi4gdGhlIG1vc3Qgb2J2aW91cyBwbGFjZSB0byBzdGFydCBpcyB3aXRoIGBWRklPX1BDSWAuIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIFBDSWUgVFBIIGlzIGhhbmRsZWQuIFBlcmhhcHMgSSBzaG91bGQgYWxzbyBsb29rIGZvciBWRklPLXNwZWNpZmljIGNvZGUgcGF0aHMsIHRvIHNlZSBob3cgdG8gZGVhbCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgYWxzbyBjaGVjayBpdHMgYXNzb2NpYXRlZCBjb25maWd1cmF0aW9ucyB0byBzZWUgaWYgSSBhbSBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjQ3NSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjA1LjM4MTEwODU3MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA0Nzg2MjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBWRklPX1BDSVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9Mj1tZW51IFxcXCJWRklPIHN1cHBvcnQgZm9yIFBDSSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQtXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjU6Y29uZmlnIFZGSU9fUENJX0NPUkVcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWctNi1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTktXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnOjEwOmNvbmZpZyBWRklPX1BDSV9JTlRYXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTExLVxcdGRlZl9ib29sIHkgaWYgIVMzOTBcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MTQ6Y29uZmlnIFZGSU9fUENJXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIFZGSU8gc3VwcG9ydCBmb3IgYW55IFBDSSBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc9MjM9aWYgVkZJT19QQ0lcXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6MjQ6Y29uZmlnIFZGSU9fUENJX1ZHQVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy0yNS1cXHRib29sIFxcXCJHZW5lcmljIFZGSU8gUENJIHN1cHBvcnQgZm9yIFZHQSBkZXZpY2VzXFxcIlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTMzLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZzozNDpjb25maWcgVkZJT19QQ0lfSUdEXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkdlbmVyaWMgVkZJTyBQQ0kgZXh0ZW5zaW9ucyBmb3IgSW50ZWwgZ3JhcGhpY3MgKEdWVC1kKVxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZz00NT1lbmRpZlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy00Ni1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NDc6Y29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlZGSU8gUENJIGV4dGVuc2lvbnMgZm9yIHMzOTB4IEtWTSBwYXNzdGhyb3VnaFxcXCJcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWc6NTg6Y29uZmlnIFZGSU9fUENJX0RNQUJVRlxcbmRyaXZlcnMvdmZpby9wY2kvS2NvbmZpZy01OS1cXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXFx1MDAyNlxcdTAwMjYgUENJX1AyUERNQSBcXHUwMDI2XFx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNjoxMC40ODU5MDQ0MDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTI3MTU2NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFZGSU8gQ29uZmlndXJhdGlvbiBUaG91Z2h0cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGUgVkZJTyBzZXR1cCBoZXJlLiBMb29rcyBsaWtlIGBWRklPX1BDSWAgaXMgdGhlIGNvcmUsIHRoZSBtYWluIG1vZHVsZSB3ZSBuZWVkIGZvciBQQ0kgcGFzc3Rocm91Z2gsIG5hdHVyYWxseS4gQnV0LCBpZiB3ZSB3YW50IHRvIGxldmVyYWdlIHRoZSBkbWFidWYgZmVhdHVyZXMsIHRoZW4gd2UnbGwgZGVmaW5pdGVseSBuZWVkIGBWRklPX1BDSV9ETUFCVUZgIGFzIHdlbGwuIFRoYXQgb25lLCBJIHNlZSwgZGVwZW5kcyBvbiBgVkZJT19QQ0lfQ09SRWAsIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC5cblxuU28sIHRvIGJlIGV4cGxpY2l0IGFuZCBjb3ZlciBhbGwgdGhlIGJhc2VzLCBJJ20gZ29pbmcgdG8gbWFrZSBzdXJlIHdlIGVuYWJsZSBgUENJRV9UUEhgLCB0aGVuIGVuYWJsZSBgVkZJT19QQ0lgLCBmb2xsb3dlZCBieSBgUENJX1AyUERNQWAsIGFuZCwgZmluYWxseSwgYERNQV9TSEFSRURfQlVGRkVSYC4gSSB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGF0IGBQQ0lfUDJQRE1BYCBpcyBleGFjdGx5IHdoYXQgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3MjA1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjE1LjQxMzA2NTU5OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyNDUwMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQ0lfUDJQRE1BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL0tjb25maWc9MTk3PWNvbmZpZyBQQ0lFX1RQSFxcbi0tXFxuZHJpdmVycy9wY2kvS2NvbmZpZy0yMDUtXFxuZHJpdmVycy9wY2kvS2NvbmZpZzoyMDY6Y29uZmlnIFBDSV9QMlBETUFcXG5kcml2ZXJzL3BjaS9LY29uZmlnLTIwNy1cXHRib29sIFxcXCJQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjIwLjM0NTUyMTIxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MjczODU2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBUUEggSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUga2V5IGZ1bmN0aW9ucyBkcml2aW5nIHRoaXMgVFBIIGltcGxlbWVudGF0aW9uLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIGNvZGUgc3VnZ2VzdHMgdGhlc2UgYXJlIHRoZSBjcml0aWNhbCBwaWVjZXM6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHRgLCBgcGNpZV90cGhfc2V0X3N0X2VudHJpZXNgLCBhbmQgZmluYWxseSBgcGNpZV9lbmFibGVfdHBoX2V4dGAuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIEknbGwgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdG8gZnVsbHkgZ3Jhc3AgdGhlIGNvbnRyb2wgZmxvdy4gRmlyc3QsIHRob3VnaCwgSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGltcGxlbWVudGVkIGFuZCB0aGF0IHRoZXkncmUgY29ycmVjdGx5IGNvbm5lY3RlZCB3aXRoaW4gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhcmUgc29saWQgYmVmb3JlIEkgc3RhcnQgYXNzZW1ibGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2MDcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDY6MjQuOTcyOTExMjc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDU1MTYwOTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTY1Nj1zdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfY2FwYWJpbGl0eShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjgxLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE2ODI6c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNjgzLVxcdFxcdFxcdFxcdCAgICAgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTc1MD1zdGF0aWMgaW50IHZmaW9fcGNpX2dldF90cGhfc3RfdGFnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1MzIgc3JjX2JpdHMsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNzc1LVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE3NzY6c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE3NzctXFx0XFx0XFx0dTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTgzOD1zdGF0aWMgdTMyIHZmaW9fcGNpX2dldF90cGhfc3RfYWxsb3dfc3JjKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NTMtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTg1NDpzdGF0aWMgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3Qoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE4NTUtXFx0XFx0XFx0XFx0dTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTkzMT1pbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTUyLVxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9UUEg6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTk1MzpcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaCh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTk1NC1cXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfVFBIX1JFU09MVkU6XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTk1NTpcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlKHZkZXYsIGZsYWdzLFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5NTYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFyZywgYXJnc3opO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5NTctXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX1RQSF9TVDpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxOTU4OlxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTU5LVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjMwLjAyODA4NTEzNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTYyODg4NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkNvbmZpcm1pbmcgYW5kIFJlZmluaW5nOiBBIFF1aWNrIENoZWNrKipcblxuUmlnaHQsICp0aGV5KiBhcmUgdGhlcmUuIEkgY2FuIHNlbnNlIGl0LiBOb3csIGxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IGluaXRpYWwgYXNzZXNzbWVudCBpcyBjb3JyZWN0IGFuZCBJIGhhdmUgYWxsIHRoZSBwaWVjZXMgSSByZXF1aXJlLlxuXG5MZXQncyBjaGVjayB0aGUgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAgc3RydWN0dXJlLiBTcGVjaWZpY2FsbHksIEknbSB2ZXJpZnlpbmcgdGhlIGltcGxpY2F0aW9ucyBvZiBpdHMgcHJlc2VuY2UgYW5kIG1ha2luZyBzdXJlIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBjcnVjaWFsIGNvbXBvbmVudCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIGFyY2hpdGVjdHVyZSBpcyBzb3VuZC4gSXQncyBhIGtleSBlbGVtZW50IGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBvbiBzb2xpZCBncm91bmQgcmVnYXJkaW5nIGl0cyBmdW5jdGlvbmFsaXR5IGFuZCBleHBlY3RlZCBiZWhhdmlvci4gSXQncyBhIHF1aWNrIHNhbml0eSBjaGVjayBidXQgYSB2aXRhbCBzdGVwIHRvIGF2b2lkIGFueSBmdXR1cmUgc3VycHJpc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODk0NCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjM0LjE5MDk3NjkxOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzMjI1Mzg5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM9MTkzMT1pbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTQ5LVxcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1RQSDpcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxOTUwOlxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgodmRldiwgZmxhZ3MsIGFyZyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xOTUxLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBhcmdzeik7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTI1Mz1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM2Ny1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjM2ODppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTM2OS1cXHRcXHRcXHRcXHQgICAgICB1MzIgZmxhZ3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xMjQ9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTI2LVxcdFxcdFxcdFxcdCAgc2l6ZV90IGFyZ3N6KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaDoxMjc6aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTI4LVxcdFxcdFxcdFxcdCAgICAgIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTE0Mj1zdGF0aWMgaW5saW5lIGludFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjE0Mzp2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGgoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTQ0LVxcdFxcdFxcdFxcdCAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl90cGggX191c2VyICphcmcsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA2OjM5LjMyMzI0MTE5NloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODE0Njk3NDYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgVkZJTyBQQ0llIFRQSCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBzb21lIGZ1bmN0aW9uYWwgY2hhbmdlcyB3aXRoaW4gVkZJTyBQQ0kgYW5kIERNQS1CVUYgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFBDSWUgVFBILiBNeSBpbml0aWFsIGd1dCBmZWVsaW5nPyBUaGlzIHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldC5cIiBXZSdyZSBsaWtlbHkgZGVhbGluZyB3aXRoIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIFZGSU8gZHJpdmVyLCB0aGUgRE1BLUJVRiBmcmFtZXdvcmssIGFuZCB0aGUgUENJZSBoaWVyYXJjaHkuIEFueSBuZXcgZnVuY3Rpb25hbGl0eSBpbiB0aGlzIHNwYWNlIGlzIGFsd2F5cyB3b3J0aCBhIHRob3JvdWdoIGxvb2suXG5cbk5vdywgZm9yIHRoZSBzZXR1cC4gSSdsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3MgYXJlIGVuYWJsZWQ6IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGFuZCwgY3J1Y2lhbGx5LCBgVkZJT19QQ0lfRE1BQlVGYCwgd2hpY2ggbWVhbnMgZW5hYmxpbmcgdGhlIGRlcGVuZGVuY2llcywgYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLiBUaGVzZSBhcmUgbXkgZ3JvdW5kIHplcm8uXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUsIHRoZXNlIHN5bWJvbHMgc2VlbSBsaWtlIGdvb2QgcG9pbnRzIHRvIGNvbmNlbnRyYXRlIG9uOlxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCAtIFRoZXNlIGxpa2VseSBkZWFsIHdpdGggdGhlIGNvcmUgVFBIIGZlYXR1cmUgc2V0dXAgYW5kIGhhbmRsaW5nLlxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgLCBgdmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaGAsIGBkbWFfYnVmX2dldF9wY2lfdHBoYCAtIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVncmF0aW9uIHdpdGggRE1BLUJVRiwgd2hpY2ggaXMgZ29pbmcgdG8gYmUgbXkgcHJpbWFyeSBhcmVhIG9mIGZvY3VzLlxuKiAgIGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAsIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AsIGBwY2llX2VuYWJsZV90cGhfZXh0YCAtIFBDSWUgc2lkZSBjb250cm9sIGFuZCBjb25maWd1cmF0aW9uLiBUaGVzZSBhcmUgaW1wb3J0YW50IGZvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG4qICAgYHZmaW9fdHBoX2NvbmZpZ193cml0ZWAsIGB2ZmlvX3RwaF9jb25maWdfcmVhZGAgLSBUaGVzZSByZXByZXNlbnQgdGhlIGNydWNpYWwgaW50ZXJmYWNlIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgVFBIIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGRpZ2dpbmcgaW50byBgdmZpb190cGhfY29uZmlnX3dyaXRlYCBmaXJzdC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4NTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDY6NDUuMTM3OTU5MDE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDg2MzIzODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fdHBoX2NvbmZpZ193cml0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jPTExNTY9c3RhdGljIGludCB2ZmlvX3RwaF9jb25maWdfcmVhZChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExNzItXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYzoxMTczOnN0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTExNzQtXFx0XFx0XFx0XFx0IGludCBjb3VudCwgc3RydWN0IHBlcm1fYml0cyAqcGVybSxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM9MTI0Nz1pbnQgX19pbml0IHZmaW9fcGNpX2luaXRfcGVybV9iaXRzKHZvaWQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTEyNjYtXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9UUEhdLnJlYWRmbiA9IHZmaW9fdHBoX2NvbmZpZ19yZWFkO1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmM6MTI2NzpcXHRlY2FwX3Blcm1zW1BDSV9FWFRfQ0FQX0lEX1RQSF0ud3JpdGVmbiA9IHZmaW9fdHBoX2NvbmZpZ193cml0ZTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTEyNjgtXFx0ZWNhcF9wZXJtc1tQQ0lfRVhUX0NBUF9JRF9WTkRSXS53cml0ZWZuID0gdmZpb19yYXdfY29uZmlnX3dyaXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNjo0OS42MjQyODk0ODhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2NzQ2NDU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBwcmVzZW50ZWQgYXMgaWYgSSdtIGhhdmluZyBpdDpcblxuKipUUEggQ29uZmlndXJhdGlvbiBFeGFtaW5hdGlvbioqXG5cblJpZ2h0LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGB2ZmlvX3RwaF9jb25maWdfd3JpdGVgIGFuZCBgdmZpb190cGhfY29uZmlnX3JlYWRgIGFyZSBpbmRlZWQgcHJlc2VudC4gR29vZCwgZ29vZC4gVGhleSBhcmUgdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2Nrcywgc28gdGhpcyBpcyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGJlZ2luLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBmdW5jdGlvbiB0aGF0IHVsdGltYXRlbHkgbGV2ZXJhZ2VzIG9yIHV0aWxpemVzIHRob3NlIGZ1bmN0aW9ucy4gVGhlIGtleSBhcmVhIG9mIGludGVyZXN0IGF0IHRoaXMgcG9pbnQgaXMgZ29pbmcgdG8gYmUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBpbnZva2VkIGluIHJlbGF0aW9uIHRvIHRoZSBQQ0llIFRyYW5zbGF0aW9uIFByb2Nlc3MuIExldCdzIHNlZSB3aGF0IGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2AgaGFzIHRvIHNheS4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgZnVuY3Rpb24gdG8gaW52ZXN0aWdhdGUgaW4gb3JkZXIgdG8gZmluZCB3aGVyZSB0aGUgYWN0dWFsIFBDSWUgdHJhbnNhY3Rpb25zIGFyZSBzZXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTkzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDY6NTIuNzkxNzU3MTM0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzQ4MTkzNTkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaWVfdHBoX3NldF9zdF9lbnRyaWVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvcGNpL3RwaC5jPTM1ND1FWFBPUlRfU1lNQk9MKHBjaWVfdHBoX2dldF9jcHVfc3QpO1xcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtMzU2LS8qKlxcbmRyaXZlcnMvcGNpL3RwaC5jOjM1NzogKiBwY2llX3RwaF9zZXRfc3RfZW50cmllcyAtIEJhdGNoIHNldCBTdGVlcmluZyBUYWcgZW50cmllcyBpbiB0aGUgU1QgdGFibGVcXG5kcml2ZXJzL3BjaS90cGguYy0zNTgtICogQHBkZXY6IFBDSSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTM2NC0gKi9cXG5kcml2ZXJzL3BjaS90cGguYzozNjU6aW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgc3RhcnQsXFxuZHJpdmVycy9wY2kvdHBoLmMtMzY2LVxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgY291bnQsIGNvbnN0IHUxNiAqdGFncylcXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTQxNC19XFxuZHJpdmVycy9wY2kvdHBoLmM6NDE1OkVYUE9SVF9TWU1CT0wocGNpZV90cGhfc2V0X3N0X2VudHJpZXMpO1xcbmRyaXZlcnMvcGNpL3RwaC5jLTQxNi1cXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jPTQyNT1pbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaW5kZXgsIHUxNiB0YWcpXFxuZHJpdmVycy9wY2kvdHBoLmMtNDI2LXtcXG5kcml2ZXJzL3BjaS90cGguYzo0Mjc6XFx0aW50IHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIGluZGV4LCAxLCBcXHUwMDI2dGFnKTtcXG5kcml2ZXJzL3BjaS90cGguYy00MjgtXFx0cmV0dXJuIHJldCA9PSAxID8gMCA6IHJldDtcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE4NTQ9c3RhdGljIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE5MjAtXFx0XFx0Y21kID0gdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZSh2ZGV2KTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxOTIxOlxcdFxcdHJldCA9IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHBkZXYsIHRwaF9zdC5zdGFydCwgaSwgdGFncyk7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTkyMi1cXHRcXHR2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHZkZXYsIGNtZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaD0zOD1pbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTM5LVxcdFxcdFxcdCAgdW5zaWduZWQgaW50IGluZGV4LCB1MTYgdGFnKTtcXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo0MDppbnQgcGNpZV90cGhfc2V0X3N0X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHVuc2lnbmVkIGludCBzdGFydCxcXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC00MS1cXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCB1MTYgKnRhZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg9NTc9c3RhdGljIGlubGluZSBpbnQgcGNpZV90cGhfc2V0X3N0X2VudHJ5KHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmgtNTkteyByZXR1cm4gLUVJTlZBTDsgfVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oOjYwOnN0YXRpYyBpbmxpbmUgaW50IHBjaWVfdHBoX3NldF9zdF9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTYxLVxcdFxcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IHN0YXJ0LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNjo1Ny4xMzk5NTc0NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjYyNjMyMzY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50IGFuZCBUYXJnZXRlZCBGb2N1cyoqXG5cbkF3ZXNvbWUhIFRoYXQncyB0aGUgZmVlbGluZyB3aGVuIHlvdSdyZSBhYm91dCB0byBkaXZlIGludG8gYSBzcGVjaWZpYyBhcmVhLiBOb3csIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYHBjaWVfZW5hYmxlX3RwaF9leHRgLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhpcywgYW5kIHRoYXQncyB3aGVyZSBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgZW5lcmd5LiBHaXZlbiBteSBleHBlcnRpc2UsIEkgd2lsbCBpbW1lZGlhdGVseSBiZSBsb29raW5nIGF0IHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSBUUEggKFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludCkgZXh0ZW5zaW9ucyBpbiByZWxhdGlvbiB0byBQQ0llIGVuYWJsZW1lbnQuIEl0J3MgdGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyMTA2LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDY6NTkuNzY2Mjg2MjAzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzU0NjI3NzAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaWVfZW5hYmxlX3RwaF9leHRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9wY2kvdHBoLmM9NDUyPUVYUE9SVF9TWU1CT0wocGNpZV9kaXNhYmxlX3RwaCk7XFxuLS1cXG5kcml2ZXJzL3BjaS90cGguYy00NTQtLyoqXFxuZHJpdmVycy9wY2kvdHBoLmM6NDU1OiAqIHBjaWVfZW5hYmxlX3RwaF9leHQgLSBFbmFibGUgVFBIIHN1cHBvcnQgd2l0aCBzcGVjaWZpYyBTVCBtb2RlIGFuZFxcbmRyaXZlcnMvcGNpL3RwaC5jLTQ1Ni0gKiByZXF1ZXN0ZXIgdHlwZVxcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtNDY1LSAqL1xcbmRyaXZlcnMvcGNpL3RwaC5jOjQ2NjppbnQgcGNpZV9lbmFibGVfdHBoX2V4dChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggbW9kZSwgdTggcmVxX3R5cGUpXFxuZHJpdmVycy9wY2kvdHBoLmMtNDY3LXtcXG4tLVxcbmRyaXZlcnMvcGNpL3RwaC5jLTUxMC19XFxuZHJpdmVycy9wY2kvdHBoLmM6NTExOkVYUE9SVF9TWU1CT0wocGNpZV9lbmFibGVfdHBoX2V4dCk7XFxuZHJpdmVycy9wY2kvdHBoLmMtNTEyLVxcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmMtNTE3LSAqXFxuZHJpdmVycy9wY2kvdHBoLmM6NTE4OiAqIFdyYXBwZXIgZm9yIHBjaWVfZW5hYmxlX3RwaF9leHQoKSwgYXV0b21hdGljYWxseSB1c2VzIHRoZSBwcmUtY2FjaGVkXFxuZHJpdmVycy9wY2kvdHBoLmMtNTE5LSAqIHRwaF9tYXhfdHlwZSB2YWx1ZSAobmVnb3RpYXRlZCBtYXhpbXVtIHJlcXVlc3RlciB0eXBlIGJldHdlZW4gZGV2aWNlIGFuZFxcbi0tXFxuZHJpdmVycy9wY2kvdHBoLmM9NTI0PWludCBwY2llX2VuYWJsZV90cGgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUpXFxuZHJpdmVycy9wY2kvdHBoLmMtNTI1LXtcXG5kcml2ZXJzL3BjaS90cGguYzo1MjY6XFx0cmV0dXJuIHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcGRldi1cXHUwMDNldHBoX21heF90eXBlKTtcXG5kcml2ZXJzL3BjaS90cGguYy01MjctfVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYz0xMTczPXN0YXRpYyBpbnQgdmZpb190cGhfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMtMTIxMi1cXHRpZiAocmVxID09IFBDSV9UUEhfUkVRX1RQSF9PTkxZIHx8IHJlcSA9PSBQQ0lfVFBIX1JFUV9FWFRfVFBIKSB7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYzoxMjEzOlxcdFxcdHJldCA9IHBjaWVfZW5hYmxlX3RwaF9leHQocGRldiwgbW9kZSwgcmVxKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jLTEyMTQtXFx0XFx0aWYgKHJldClcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTQ2PXZvaWQgcGNpZV9kaXNhYmxlX3RwaChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XFxuaW5jbHVkZS9saW51eC9wY2ktdHBoLmg6NDc6aW50IHBjaWVfZW5hYmxlX3RwaF9leHQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IG1vZGUsIHU4IHJlcV90eXBlKTtcXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaC00OC1pbnQgcGNpZV9lbmFibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oPTczPXN0YXRpYyBpbmxpbmUgdm9pZCBwY2llX2Rpc2FibGVfdHBoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KSB7IH1cXG5pbmNsdWRlL2xpbnV4L3BjaS10cGguaDo3NDpzdGF0aWMgaW5saW5lIGludCBwY2llX2VuYWJsZV90cGhfZXh0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBtb2RlLFxcbmluY2x1ZGUvbGludXgvcGNpLXRwaC5oLTc1LVxcdFxcdFxcdFxcdCAgICAgIHU4IHJlcV90eXBlKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjowNzowNC4xMjA5MjE2ODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQwMjU1MDI0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUUEggU3ltYm9scyBhbmQgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIHB1dHRpbmcgdG9nZXRoZXIgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhpcyBwYXRjaCByZWxhdGVkIHRvIFRyYW5zYWN0aW9uIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIE15IGZvY3VzIHN5bWJvbHMgYXJlIGRlZmluaXRlbHk6XG5cbiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaGBcbiogICBgdmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9yZXNvbHZlYFxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YFxuKiAgIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl90cGhgXG4qICAgYHZmaW9fcGNpX2RtYV9idWZfZ2V0X3BjaV90cGhgXG4qICAgYGRtYV9idWZfZ2V0X3BjaV90cGhgXG4qICAgYHBjaWVfdHBoX2dldF9jcHVfc3RfZXh0YFxuKiAgIGBwY2llX3RwaF9zZXRfc3RfZW50cmllc2BcbiogICBgcGNpZV9lbmFibGVfdHBoX2V4dGBcbiogICBgdmZpb190cGhfY29uZmlnX3dyaXRlYFxuKiAgIGB2ZmlvX3RwaF9jb25maWdfcmVhZGBcblxuVGhlc2Ugc2VlbSBwcmV0dHkgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBwYXRjaCBpdHNlbGYsIG5vdCBwYXJ0IG9mIHRoZSBjb3JlIGhvdC1wYXRoIGNvZGUsIHdoaWNoIGlzIGdvb2QuXG5cbkkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBzeW1ib2xzIHRoYXQgYXJlIHJlbGV2YW50LiBMZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29kZSwgYENPTkZJR19BQ1BJYCBjb21lcyB1cCBpbiBhIGNvdXBsZSBvZiBwbGFjZXM6IGBwY2llX3RwaF9nZXRfY3B1X3N0X2V4dGAgYW5kIGBwY2llX3RwaF9kc21fc3VwcG9ydGVkYC4gSG93ZXZlciwgYEFDUElgIGlzIGJhc2ljYWxseSBhIGdpdmVuIG9uIHg4NiwgaXNuJ3QgaXQ/IFNvLCBJIGRvbid0IHRoaW5rIEkgcmVhbGx5IG5lZWQgdG8gZXhwbGljaXRseSBjYWxsIHRoYXQgb3V0IHVubGVzcyBpdCdzICpzcGVjaWZpYyogdG8gdGhpcyBUUEggZmVhdHVyZS4gVGhlIGZlYXR1cmUgaXRzZWxmLCB0aG91Z2gsIHRoYXQncyBgUENJRV9UUEhgLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gcmV2aXNpdCB0aGUgYFZGSU9fUENJX0RNQUJVRmAgc2V0dGluZy4gSSByZW1lbWJlciB0aGF0J3MgYSBiaXQgbW9yZSBpbnZvbHZlZC4gSXQncyBjb25maWd1cmVkIGFzIGBkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSYC4gT2theSwgc28sIGluIGFkZGl0aW9uIHRvIHRoZSBiYXNlIGBWRklPX1BDSWAsIEkgZGVmaW5pdGVseSBuZWVkIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC4gSSBzaG91bGQgZG91YmxlLWNoZWNrIGFuZCBtYWtlIHN1cmUgdG8gbGlzdCB0aGVtLlxuXG5MZXQncyBxdWlja2x5IGNoZWNrIHRoZSBkZWZpbml0aW9uIGZvciBgRE1BX1NIQVJFRF9CVUZGRVJgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMTI2LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA3OjEwLjUyMzQ3NDUxNloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU4NjI4MDM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRE1BX1NIQVJFRF9CVUZGRVJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9iYXNlL0tjb25maWc9MjEzPXNvdXJjZSBcXFwiZHJpdmVycy9iYXNlL3JlZ21hcC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvYmFzZS9LY29uZmlnLTIxNC1cXG5kcml2ZXJzL2Jhc2UvS2NvbmZpZzoyMTU6Y29uZmlnIERNQV9TSEFSRURfQlVGRkVSXFxuZHJpdmVycy9iYXNlL0tjb25maWctMjE2LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6MDc6MTUuMTA5NzY4NTkzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyMDk3Njg4NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVkZJTy1QQ0kgQ29uZmlndXJhdGlvbiBhbmQgQXNzb2NpYXRlZCBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSBgRE1BX1NIQVJFRF9CVUZGRVJgIGlzIGEgYm9vbGVhbiwgYW5kIHVzdWFsbHksIGl0J3Mgc2V0IHZpYSBvdGhlciBjb25maWd1cmF0aW9ucy4gTWFrZXMgc2Vuc2UuIFRoZW4gdGhlcmUgYXJlIHNvbWUgY29uZmlndXJhdGlvbnMgdG8gbGlzdCAtIEknbGwgam90IHRoZW0gZG93bjogYFBDSUVfVFBIYCwgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlaXIgdHlwZXMgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuIEFscmlnaHQsIGxldCBtZSBjaGVjay4gYFZGSU9fUENJYCBpcyBhIHRyaXN0YXRlLCBhbmQgdGhhdCBjaGVja3Mgb3V0LCBhcyBpcyBgVkZJT19QQ0lfQ09SRWAuIGBQQ0lFX1RQSGAgaXMgYSBib29sLiBHb29kLiBgUENJX1AyUERNQWAgaXMgYWxzbyBhIGJvb2wuIFJpZ2h0LiBBbmQgZmluYWxseSwgYERNQV9TSEFSRURfQlVGRkVSYCwgYWxzbyBhIGJvb2xlYW4uIFNvLCBhbGwgYm9vbGVhbnMgYW5kIHRyaXN0YXRlcywgY29uZmlybWVkLlxuXG5BbHJpZ2h0LCBub3cgbGV0J3MgbWFrZSBhIG5vdGUgb2YgdGhvc2Ugc3BlY2lmaWMgY29uZmlndXJhdGlvbnM6IGBQQ0lFX1RQSGAsIGBWRklPX1BDSWAsIGBQQ0lfUDJQRE1BYCwgYW5kIGBETUFfU0hBUkVEX0JVRkZFUmAuXG5cbk5vdyBJJ2xsIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHN1cHBvcnRpbmcgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBidW5jaCBvZiBmdW5jdGlvbnMgc3RhcnRpbmcgd2l0aCBgdmZpb19wY2lfLi4uYC4gVGhvc2UgYXJlIHN0YXRpYyBmdW5jdGlvbnMgaW5zaWRlIGB2ZmlvX3BjaV9jb3JlLmNgLiBMaXN0aW5nIGFsbCBvZiB0aG9zZSBtaWdodCBiZSB0b28gZXhoYXVzdGl2ZSwgc28gSSdsbCBmb2N1cyBvbiB0aGUgcHJpbWFyeSBJT0NUTCBoYW5kbGVycy5cblxuT2theSwgbGV0J3Mgc2VlLCB0aGUgZm9jdXMgc3ltYm9scyBhcmU6IGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3N0YCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaGAsIGB2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoYCwgYGRtYV9idWZfZ2V0X3BjaV90cGhgLCBgcGNpZV90cGhfZ2V0X2NwdV9zdF9leHRgLCBgcGNpZV90cGhfc2V0X3N0X2VudHJpZXNgLCBgcGNpZV9lbmFibGVfdHBoX2V4dGAsIGFuZCBgdmZpb190cGhfY29uZmlnX3dyaXRlYC5cblxuVGhpcyBhcHBlYXJzIHByZXR0eSBjb21wcmVoZW5zaXZlLCBjb3ZlcmluZyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0aWVzLiBJIHRoaW5rIHRoaXMgaXMgYSBzb2xpZCByZXZpZXcuIEknbGwgZ28gYWhlYWQgYW5kIGV4ZWN1dGUgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxMjksIk91dHB1dFRva2VucyI6Mjc0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjA3OjI0LjMxOTU0MTA2N1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDIyMTk2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUENJRV9UUEhcIixcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJETUFfU0hBUkVEX0JVRkZFUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfcmVzb2x2ZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX3RwaF9zdFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJkbWFfYnVmX2dldF9wY2lfdHBoXCIsXG4gICAgXCJwY2llX3RwaF9nZXRfY3B1X3N0X2V4dFwiLFxuICAgIFwicGNpZV90cGhfc2V0X3N0X2VudHJpZXNcIixcbiAgICBcInBjaWVfZW5hYmxlX3RwaF9leHRcIixcbiAgICBcInZmaW9fdHBoX2NvbmZpZ193cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIFZGSU8gUENJIGFuZCBETUEtQlVGIHRvIHN1cHBvcnQgUENJZSBUTFAgUHJvY2Vzc2luZyBIaW50cyAoVFBIKS4gSXQgYWRkcyBuZXcgVkZJTyBpb2N0bHMvZmVhdHVyZXMgZm9yIFRQSCBjb25maWd1cmF0aW9uIGFuZCByZXNvbHV0aW9uLCB3aGljaCBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBDSUVfVFBIXCIsXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiRE1BX1NIQVJFRF9CVUZGRVJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdHBoX3Jlc29sdmVcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV90cGhfc3RcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3RwaFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9nZXRfcGNpX3RwaFwiLFxuICAgIFwiZG1hX2J1Zl9nZXRfcGNpX3RwaFwiLFxuICAgIFwicGNpZV90cGhfZ2V0X2NwdV9zdF9leHRcIixcbiAgICBcInBjaWVfdHBoX3NldF9zdF9lbnRyaWVzXCIsXG4gICAgXCJwY2llX2VuYWJsZV90cGhfZXh0XCIsXG4gICAgXCJ2ZmlvX3RwaF9jb25maWdfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBWRklPIFBDSSBhbmQgRE1BLUJVRiB0byBzdXBwb3J0IFBDSWUgVExQIFByb2Nlc3NpbmcgSGludHMgKFRQSCkuIEl0IGFkZHMgbmV3IFZGSU8gaW9jdGxzL2ZlYXR1cmVzIGZvciBUUEggY29uZmlndXJhdGlvbiBhbmQgcmVzb2x1dGlvbiwgd2hpY2ggYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcljd[1] Phase: Succeeded StartedAt: 2026-07-14 16:07:38 +0000 UTC FinishedAt: 2026-07-14 16:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 16:07:38 +0000 UTC FinishedAt: 2026-07-14 16:07:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2] Phase: Succeeded StartedAt: 2026-07-14 16:07:38 +0000 UTC FinishedAt: 2026-07-14 17:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-14 16:07:39 +0000 UTC FinishedAt: 2026-07-14 17:31:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 16:07:39 +0000 UTC FinishedAt: 2026-07-14 16:08:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 16:07:39 +0000 UTC FinishedAt: 2026-07-14 16:08:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-convert-artifact-2525271304/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 16:08:29 +0000 UTC FinishedAt: 2026-07-14 17:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 16:08:29 +0000 UTC FinishedAt: 2026-07-14 17:04:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*369122a1-1fc5-4460-9074-23b2be69aa85,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-convert-artifact-2525271304/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "dd31d665-d0a2-4089-86ba-f4ba3d213974", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-build-action-988704638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 16:08:29 +0000 UTC FinishedAt: 2026-07-14 17:04:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*369122a1-1fc5-4460-9074-23b2be69aa85,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-convert-artifact-2525271304/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "dd31d665-d0a2-4089-86ba-f4ba3d213974", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-build-action-988704638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-14 17:04:27 +0000 UTC FinishedAt: 2026-07-14 17:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-14 17:04:27 +0000 UTC FinishedAt: 2026-07-14 17:04:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-14 17:04:27 +0000 UTC FinishedAt: 2026-07-14 17:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-14 17:04:27 +0000 UTC FinishedAt: 2026-07-14 17:04:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-convert-artifact-2256133103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-14 17:04:49 +0000 UTC FinishedAt: 2026-07-14 17:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-14 17:04:49 +0000 UTC FinishedAt: 2026-07-14 17:06:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dd31d665-d0a2-4089-86ba-f4ba3d213974,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-build-action-988704638/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-14 17:07:02 +0000 UTC FinishedAt: 2026-07-14 17:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-14 17:07:02 +0000 UTC FinishedAt: 2026-07-14 17:07:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-14 17:07:02 +0000 UTC FinishedAt: 2026-07-14 17:31:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-14 17:07:02 +0000 UTC FinishedAt: 2026-07-14 17:31:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*369122a1-1fc5-4460-9074-23b2be69aa85,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-convert-artifact-2256133103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "528f90fe-1e76-4f13-85af-dd4514b529b0", "success": false },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-build-action-3550039939/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-14 17:07:02 +0000 UTC FinishedAt: 2026-07-14 17:31:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*369122a1-1fc5-4460-9074-23b2be69aa85,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-convert-artifact-2256133103/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "528f90fe-1e76-4f13-85af-dd4514b529b0", "success": false },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrcljd/series-workflowrcljd-build-action-3550039939/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Failed StartedAt: 2026-07-14 17:31:32 +0000 UTC FinishedAt: 2026-07-14 17:31:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrcljd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_tph","vfio_pci_core_feature_tph_resolve","vfio_pci_core_feature_tph_st","vfio_pci_core_feature_dma_buf_tph","vfio_pci_dma_buf_get_pci_tph","dma_buf_get_pci_tph","pcie_tph_get_cpu_st_ext","pcie_tph_set_st_entries","pcie_enable_tph_ext","vfio_tph_config_write"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3b029c035b34bbc693405ddf759f0e9b920c27f1","config_name":"upstream-apparmor-kasan.config","enable_configs":["PCIE_TPH","VFIO_PCI","PCI_P2PDMA","DMA_SHARED_BUFFER"],"series_id":"111f70c0-3cc4-4dd6-8e1e-4e1bd05c02f5","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Failed StartedAt: 2026-07-14 17:31:32 +0000 UTC FinishedAt: 2026-07-14 17:31:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}