Name: series-workflow9sl9q Phase: Succeeded StartedAt: 2026-07-02 00:07:40 +0000 UTC FinishedAt: 2026-07-02 01:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[0] Phase: Succeeded StartedAt: 2026-07-02 00:07:40 +0000 UTC FinishedAt: 2026-07-02 00:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 00:07:40 +0000 UTC FinishedAt: 2026-07-02 00:21:49 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO_PCI", "PCI_P2PDMA", "ZONE_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO_PCI", "PCI_P2PDMA", "ZONE_DEVICE" ], "series_id": "be016584-b668-49a5-9a4e-17d653b9f658" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_dma_buf_revoke", "vfio_pci_core_feature_dma_buf_memattr", "vfio_pci_dma_buf_mmap", "vfio_pci_dma_buf_find_pfn", "vfio_pci_dmabuf_export", "vfio_pci_core_mmap_prep_dmabuf", "vfio_pci_dma_buf_set_status" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX21tYXAmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbiYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFidWZfZXhwb3J0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZJTyBmZWF0dXJlcyAoVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1JFVk9LRSBhbmQgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFIpIGFuZCBtb2RpZmllcyB0aGUgbW1hcCBoYW5kbGluZyB0byB1c2UgRE1BQlVGLWJhY2tlZCBtbWFwcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZTMwNzk3N2I2MTQ5MzU1MDg5YmEwODMxMzNhZjIxMzdkZDE0NWIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMDoyMDowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBjOGQ0YjkxM2YyNmMxMi4uNzEzODYxYWY0NDg0NmEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0yMDYyNiw3ICYjNDM7MjA2MjYsNyBAQCBCOlx0aHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnXG4gQzpcdGlyYzovL2lyYy5vZnRjLm5ldC9saW51eC1wY2lcbiBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9wY2kvcGNpLmdpdFxuIEY6XHREb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcGNpL3AycGRtYS5yc3Rcbi1GOlx0ZHJpdmVycy9wY2kvcDJwZG1hLmNcbiYjNDM7RjpcdGRyaXZlcnMvcGNpL3AycGRtYSpcbiBGOlx0aW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcbiBcbiBQQ0kgUE9XRVIgQ09OVFJPTFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5pbmRleCAzM2M4ODQzMmI3Mjg3NS4uNTlkNzBiYzg0Y2M5YWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5AQCAtMjA2LDExICYjNDM7MjA2LDcgQEAgY29uZmlnIFBDSUVfVFBIXG4gY29uZmlnIFBDSV9QMlBETUFcbiBcdGJvb2wgXCYjMzQ7UENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XCYjMzQ7XG4gXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4tXHQjXG4tXHQjIFRoZSBuZWVkIGZvciB0aGUgc2NhdHRlcmxpc3QgRE1BIGJ1cyBhZGRyZXNzIGZsYWcgbWVhbnMgUENJIFAyUERNQVxuLVx0IyByZXF1aXJlcyA2NGJpdFxuLVx0I1xuLVx0ZGVwZW5kcyBvbiA2NEJJVFxuJiM0MztcdHNlbGVjdCBQQ0lfUDJQRE1BX0NPUkVcbiBcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuIFx0c2VsZWN0IE5FRURfU0dfRE1BX0ZMQUdTXG4gXHRoZWxwXG5AQCAtMjI2LDYgJiM0MzsyMjIsMTAgQEAgY29uZmlnIFBDSV9QMlBETUFcbiBcbiBcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbiYjNDM7Y29uZmlnIFBDSV9QMlBETUFfQ09SRVxuJiM0MztcdGRlZmF1bHQgblxuJiM0MztcdGJvb2xcbiYjNDM7XG4gY29uZmlnIFBDSV9MQUJFTFxuIFx0ZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpXG4gXHRzZWxlY3QgTkxTXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxuaW5kZXggNDFlYmMzYjlhNTE4MjQuLjBiMzI1NzJkNTdhMTU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEAgb2JqLSQoQ09ORklHX1BDSV9TWVNDQUxMKVx0JiM0Mzs9IHN5c2NhbGwub1xuIG9iai0kKENPTkZJR19QQ0lfU1RVQilcdFx0JiM0Mzs9IHBjaS1zdHViLm9cbiBvYmotJChDT05GSUdfUENJX1BGX1NUVUIpXHQmIzQzOz0gcGNpLXBmLXN0dWIub1xuIG9iai0kKENPTkZJR19QQ0lfRUNBTSlcdFx0JiM0Mzs9IGVjYW0ub1xuJiM0MztvYmotJChDT05GSUdfUENJX1AyUERNQV9DT1JFKVx0JiM0Mzs9IHAycGRtYV9jb3JlLm9cbiBvYmotJChDT05GSUdfUENJX1AyUERNQSlcdCYjNDM7PSBwMnBkbWEub1xuIG9iai0kKENPTkZJR19YRU5fUENJREVWX0ZST05URU5EKSAmIzQzOz0geGVuLXBjaWZyb250Lm9cbiBvYmotJChDT05GSUdfVkdBX0FSQilcdFx0JiM0Mzs9IHZnYWFyYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmMgYi9kcml2ZXJzL3BjaS9wMnBkbWEuY1xuaW5kZXggN2M4OTg1NDJhZjhkNWUuLjUwYjFhN2RhZjU1Y2M0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcDJwZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jXG5AQCAtMjEsMTIgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2J1Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbi1zdHJ1Y3QgcGNpX3AycGRtYSB7XG4tXHRzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2w7XG4tXHRib29sIHAycG1lbV9wdWJsaXNoZWQ7XG4tXHRzdHJ1Y3QgeGFycmF5IG1hcF90eXBlcztcbi1cdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgbWVtW1BDSV9TVERfTlVNX0JBUlNdO1xuLX07XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3AycGRtYS5oXCYjMzQ7XG4gXG4gc3RydWN0IHBjaV9wMnBkbWFfcGFnZW1hcCB7XG4gXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgcGdtYXA7XG5AQCAtMjI2LDExMCAmIzQzOzIyMSwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBwMnBkbWFfcGdtYXBfb3BzID0ge1xuIFx0LmZvbGlvX2ZyZWUgPSBwMnBkbWFfZm9saW9fZnJlZSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwZG1hKVxuIHtcbi1cdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGF0YTtcbi1cdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG4tXG4tXHRwMnBkbWEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXHUwMDNlcDJwZG1hLCAxKTtcbi1cdGlmICghcDJwZG1hKVxuLVx0XHRyZXR1cm47XG4tXG4tXHQvKiBGbHVzaCBhbmQgZGlzYWJsZSBwY2lfYWxsb2NfcDJwX21lbSgpICovXG4tXHRwZGV2LVx1MDAzZXAycGRtYSA9IE5VTEw7XG4tXHRpZiAocDJwZG1hLVx1MDAzZXBvb2wpXG4tXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuLVx0eGFfZGVzdHJveShcdTAwMjZwMnBkbWEtXHUwMDNlbWFwX3R5cGVzKTtcbi1cbiBcdGlmICghcDJwZG1hLVx1MDAzZXBvb2wpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiBcdGdlbl9wb29sX2Rlc3Ryb3kocDJwZG1hLVx1MDAzZXBvb2wpO1xuIFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNnBkZXYtXHUwMDNlZGV2LmtvYmosIFx1MDAyNnAycG1lbV9ncm91cCk7XG4gfVxuIFxuLS8qKlxuLSAqIHBjaW1fcDJwZG1hX2luaXQgLSBJbml0aWFsaXNlIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXJzXG4tICogQHBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGVuYWJsZSBQMlBETUEgZm9yXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBwZWVyLXRvLXBlZXIgRE1BIGluZnJhc3RydWN0dXJlXG4tICogZm9yIGEgUENJIGRldmljZS4gSXQgYWxsb2NhdGVzIGFuZCBzZXRzIHVwIHRoZSBuZWNlc3NhcnkgZGF0YVxuLSAqIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBQMlBETUEgb3BlcmF0aW9ucywgaW5jbHVkaW5nIG1hcHBpbmcgdHlwZVxuLSAqIHRyYWNraW5nLlxuLSAqL1xuLWludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLXtcbi1cdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XG4tXHRpbnQgaSwgcmV0O1xuLVxuLVx0cDJwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LVx1MDAzZXAycGRtYSwgMSk7XG4tXHRpZiAocDJwKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHAycCA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwMnApLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghcDJwKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHhhX2luaXQoXHUwMDI2cDJwLVx1MDAzZW1hcF90eXBlcyk7XG4tXHQvKlxuLVx0ICogSXRlcmF0ZSBvdmVyIGFsbCBzdGFuZGFyZCBQQ0kgQkFScyBhbmQgcmVjb3JkIG9ubHkgdGhvc2UgdGhhdFxuLVx0ICogY29ycmVzcG9uZCB0byBNTUlPIHJlZ2lvbnMuIFNraXAgbm9uLW1lbW9yeSByZXNvdXJjZXMgKGUuZy4gSS9PXG4tXHQgKiBwb3J0IEJBUnMpIHNpbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgZm9yIHBlZXItdG8tcGVlciAoUDJQKVxuLVx0ICogdHJhbnNhY3Rpb25zLlxuLVx0ICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQQ0lfU1REX05VTV9CQVJTOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0cDJwLVx1MDAzZW1lbVtpXS5vd25lciA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuLVx0XHRwMnAtXHUwMDNlbWVtW2ldLmJ1c19vZmZzZXQgPVxuLVx0XHRcdHBjaV9idXNfYWRkcmVzcyhwZGV2LCBpKSAtIHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTtcbi1cdH1cbi1cbi1cdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3AycDtcbi1cbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihwZGV2LVx1MDAzZXAycGRtYSwgcDJwKTtcbi1cdHJldHVybiAwO1xuLVxuLW91dF9wMnA6XG4tXHRkZXZtX2tmcmVlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwMnApO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfaW5pdCk7XG4tXG4tLyoqXG4tICogcGNpbV9wMnBkbWFfcHJvdmlkZXIgLSBHZXQgcGVlci10by1wZWVyIERNQSBwcm92aWRlclxuLSAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvclxuLSAqIEBiYXI6IEJBUiBpbmRleCB0byBnZXQgcHJvdmlkZXJcbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyIGZvciBhIFBDSSBkZXZpY2UuIFRoZSBsaWZldGltZVxuLSAqIG9mIHRoZSBwcm92aWRlciAoYW5kIG9mIGNvdXJzZSB0aGUgTU1JTykgaXMgYm91bmQgdG8gdGhlIGxpZmV0aW1lIG9mIHRoZVxuLSAqIGRyaXZlci4gQSBkcml2ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlXG4tICogcHJvdmlkZXIsIGFuZCBhbnkgRE1BIG1hcHBpbmdzIGNyZWF0ZWQgZm9yIGFueSBNTUlPLCBhcmUgYWxsIGNsZWFuZWQgdXBcbi0gKiBiZWZvcmUgdGhlIGRyaXZlciByZW1vdmUoKSBjb21wbGV0ZXMuXG4tICpcbi0gKiBTaW5jZSBQMlAgaXMgYWxtb3N0IGFsd2F5cyBzaGFyZWQgd2l0aCBhIHNlY29uZCBkcml2ZXIgdGhpcyBtZWFucyBzb21lIHN5c3RlbVxuLSAqIHRvIG5vdGlmeSwgaW52YWxpZGF0ZSBhbmQgcmV2b2tlIHRoZSBNTUlPJiMzOTtzIERNQSBtdXN0IGJlIGluIHBsYWNlIHRvIHVzZSB0aGlzXG4tICogZnVuY3Rpb24uIEZvciBleGFtcGxlIGEgcmV2b2tlIGNhbiBiZSBidWlsdCB1c2luZyBETUFCVUYuXG4tICovXG4tc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpXG4te1xuLVx0c3RydWN0IHBjaV9wMnBkbWEgKnAycDtcbi1cbi1cdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cDJwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LVx1MDAzZXAycGRtYSwgMSk7XG4tXHRpZiAoV0FSTl9PTighcDJwKSlcbi1cdFx0LyogU29tZW9uZSBmb3Jnb3QgdG8gY2FsbCB0byBwY2ltX3AycGRtYV9pbml0KCkgYmVmb3JlICovXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cmV0dXJuIFx1MDAyNnAycC1cdTAwM2VtZW1bYmFyXTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfcHJvdmlkZXIpO1xuLVxuIHN0YXRpYyBpbnQgcGNpX3AycGRtYV9zZXR1cF9wb29sKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG5AQCAtOTMyLDggJiM0Mzs4MzMsOCBAQCB2b2lkICpwY2lfYWxsb2NfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSlcbiBcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG4gXG4gXHQvKlxuLVx0ICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2UoKSB0b1xuLVx0ICogZW5zdXJlIHBkZXYtXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4mIzQzO1x0ICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbCgpXG4mIzQzO1x0ICogdG8gZW5zdXJlIHBkZXYtXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4gXHQgKiByZWFkLWxvY2suXG4gXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wMnBkbWEuaCBiL2RyaXZlcnMvcGNpL3AycGRtYS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjk0NjM4MzgwOTk4MTQ5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wMnBkbWEuaFxuQEAgLTAsMCAmIzQzOzEsMjkgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydC5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9QQ0lfUDJQRE1BX0hcbiYjNDM7I2RlZmluZSBfUENJX1AyUERNQV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9nZW5hbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IHBjaV9wMnBkbWEge1xuJiM0MztcdHN0cnVjdCBnZW5fcG9vbCAqcG9vbDtcbiYjNDM7XHRib29sIHAycG1lbV9wdWJsaXNoZWQ7XG4mIzQzO1x0c3RydWN0IHhhcnJheSBtYXBfdHlwZXM7XG4mIzQzO1x0c3RydWN0IHAycGRtYV9wcm92aWRlciBtZW1bUENJX1NURF9OVU1fQkFSU107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcbiYjNDM7dm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3AycGRtYV9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJiMjEzOGJmMmJjN2I3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jXG5AQCAtMCwwICYjNDM7MSwxMTggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydCBjb3JlLCBwcm92aWRpbmcgYSBiYXJlLWJvbmVzXG4mIzQzOyAqIHBjaW1fcDJwZG1hX3Byb3ZpZGVyKCkgaW50ZXJmYWNlIHRvIGRyaXZlcnMgZXZlbiBpZiBmdWxsIFAyUERNQVxuJiM0MzsgKiBpc24mIzM5O3QgcHJlc2VudC4gIFRoZSBmdWxsIFAyUERNQSBmZWF0dXJlIGlzIGluIHAycGRtYS5jIChzZWVcbiYjNDM7ICogQ09ORklHX1BDSV9QMlBETUEpLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgTG9nYW4gR3VudGhvcnBlXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBNaWNyb3NlbWkgQ29ycG9yYXRpb25cbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE3LCBDaHJpc3RvcGggSGVsbHdpZ1xuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEVpZGV0aWNvbSBJbmMuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtwY2ktcDJwZG1hOiBcJiMzNDsgZm10XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ2VuYWxsb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cDJwZG1hLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhO1xuJiM0MztcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG4mIzQzO1xuJiM0MztcdHAycGRtYSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuJiM0MztcdGlmICghcDJwZG1hKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBGbHVzaCBhbmQgZGlzYWJsZSBwY2lfYWxsb2NfcDJwX21lbSgpICovXG4mIzQzO1x0cGRldi1cdTAwM2VwMnBkbWEgPSBOVUxMO1xuJiM0MztcdHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKHBkZXYsIHAycGRtYSk7XG4mIzQzO1x0eGFfZGVzdHJveShcdTAwMjZwMnBkbWEtXHUwMDNlbWFwX3R5cGVzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaW1fcDJwZG1hX2luaXQgLSBJbml0aWFsaXNlIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXJzXG4mIzQzOyAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBwZWVyLXRvLXBlZXIgRE1BIGluZnJhc3RydWN0dXJlXG4mIzQzOyAqIGZvciBhIFBDSSBkZXZpY2UuIEl0IGFsbG9jYXRlcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGFcbiYjNDM7ICogc3RydWN0dXJlcyB0byBzdXBwb3J0IFAyUERNQSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgbWFwcGluZyB0eXBlXG4mIzQzOyAqIHRyYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBjaW1fcDJwZG1hX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuJiM0MztcdGlmIChwMnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cDJwID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnAycCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcDJwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHhhX2luaXQoXHUwMDI2cDJwLVx1MDAzZW1hcF90eXBlcyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJdGVyYXRlIG92ZXIgYWxsIHN0YW5kYXJkIFBDSSBCQVJzIGFuZCByZWNvcmQgb25seSB0aG9zZSB0aGF0XG4mIzQzO1x0ICogY29ycmVzcG9uZCB0byBNTUlPIHJlZ2lvbnMuIFNraXAgbm9uLW1lbW9yeSByZXNvdXJjZXMgKGUuZy4gSS9PXG4mIzQzO1x0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcbiYjNDM7XHQgKiB0cmFuc2FjdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwMnAtXHUwMDNlbWVtW2ldLm93bmVyID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0XHRwMnAtXHUwMDNlbWVtW2ldLmJ1c19vZmZzZXQgPVxuJiM0MztcdFx0XHRwY2lfYnVzX2FkZHJlc3MocGRldiwgaSkgLSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBjaV9wMnBkbWFfcmVsZWFzZSwgcGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3AycDtcbiYjNDM7XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXHUwMDNlcDJwZG1hLCBwMnApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X3AycDpcbiYjNDM7XHRkZXZtX2tmcmVlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwMnApO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfaW5pdCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpbV9wMnBkbWFfcHJvdmlkZXIgLSBHZXQgcGVlci10by1wZWVyIERNQSBwcm92aWRlclxuJiM0MzsgKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcbiYjNDM7ICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGdldHMgcGVlci10by1wZWVyIERNQSBwcm92aWRlciBmb3IgYSBQQ0kgZGV2aWNlLiBUaGUgbGlmZXRpbWVcbiYjNDM7ICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXG4mIzQzOyAqIGRyaXZlci4gQSBkcml2ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlXG4mIzQzOyAqIHByb3ZpZGVyLCBhbmQgYW55IERNQSBtYXBwaW5ncyBjcmVhdGVkIGZvciBhbnkgTU1JTywgYXJlIGFsbCBjbGVhbmVkIHVwXG4mIzQzOyAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cbiYjNDM7ICpcbiYjNDM7ICogU2luY2UgUDJQIGlzIGFsbW9zdCBhbHdheXMgc2hhcmVkIHdpdGggYSBzZWNvbmQgZHJpdmVyIHRoaXMgbWVhbnMgc29tZSBzeXN0ZW1cbiYjNDM7ICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8mIzM5O3MgRE1BIG11c3QgYmUgaW4gcGxhY2UgdG8gdXNlIHRoaXNcbiYjNDM7ICogZnVuY3Rpb24uIEZvciBleGFtcGxlIGEgcmV2b2tlIGNhbiBiZSBidWlsdCB1c2luZyBETUFCVUYuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XG4mIzQzO1xuJiM0MztcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cDJwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LVx1MDAzZXAycGRtYSwgMSk7XG4mIzQzO1x0aWYgKFdBUk5fT04oIXAycCkpXG4mIzQzO1x0XHQvKiBTb21lb25lIGZvcmdvdCB0byBjYWxsIHRvIHBjaW1fcDJwZG1hX2luaXQoKSBiZWZvcmUgKi9cbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cDJwLVx1MDAzZW1lbVtiYXJdO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX3Byb3ZpZGVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcgYi9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdcbmluZGV4IDI5NmJmMDFlMTg1ZWNhLi42N2EyYWUxZmJjMDRiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXG5AQCAtNiw2ICYjNDM7Niw4IEBAIGNvbmZpZyBWRklPX1BDSV9DT1JFXG4gXHR0cmlzdGF0ZVxuIFx0c2VsZWN0IFZGSU9fVklSUUZEXG4gXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXG4mIzQzO1x0c2VsZWN0IFBDSV9QMlBETUFfQ09SRVxuJiM0MztcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuIFxuIGNvbmZpZyBWRklPX1BDSV9JTlRYXG4gXHRkZWZfYm9vbCB5IGlmICFTMzkwXG5AQCAtNTYsNyAmIzQzOzU4LDggQEAgY29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG4gXHQgIFRvIGVuYWJsZSBzMzkweCBLVk0gdmZpby1wY2kgZXh0ZW5zaW9ucywgc2F5IFkuXG4gXG4gY29uZmlnIFZGSU9fUENJX0RNQUJVRlxuLVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiM0MztcdGRlZl9ib29sIHkgaWYgUENJX1AyUERNQVxuJiM0MztcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL21seDUvS2NvbmZpZ1wmIzM0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXG5pbmRleCA2MTM4ZjFiZjI0MWRmMC4uODgxNDUyZWE4OWJlMGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXG5AQCAtMSw4ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gXG4tdmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcub1xuJiM0Mzt2ZmlvLXBjaS1jb3JlLXkgOj0gdmZpb19wY2lfY29yZS5vIHZmaW9fcGNpX2ludHJzLm8gdmZpb19wY2lfcmR3ci5vIHZmaW9fcGNpX2NvbmZpZy5vIHZmaW9fcGNpX2RtYWJ1Zi5vXG4gdmZpby1wY2ktY29yZS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHZmaW9fcGNpX3pkZXYub1xuLXZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSAmIzQzOz0gdmZpb19wY2lfZG1hYnVmLm9cbiBvYmotJChDT05GSUdfVkZJT19QQ0lfQ09SRSkgJiM0Mzs9IHZmaW8tcGNpLWNvcmUub1xuIFxuIHZmaW8tcGNpLXkgOj0gdmZpb19wY2kub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXG5pbmRleCBiYjEyMWY2MzViOWY3Zi4uZDlmMjZiMGNlOTkxZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXG5AQCAtMTcyNSw2ICYjNDM7MTcyNSwxNCBAQCBzdGF0aWMgaW50IGhpc2lfYWNjX3ZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3ZkZXY7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBoaXNpX2FjY192ZmlvX3BjaV9tbWFwKCkgY2FsbHMgZG93biB0b1xuJiM0MztcdCAqIHZmaW9fcGNpX2NvcmVfbW1hcCgpLCBzbyBCQVIgbWFwcGluZ3MgYXJlIHN0aWxsXG4mIzQzO1x0ICogRE1BQlVGLWJhY2tlZC4gIFRoZXkgZG9uJiMzOTt0IHJlcXVpcmUgYSB6YXAgb24gcmV2b2tlLCBzbyBvcHRcbiYjNDM7XHQgKiBvdXQ6XG4mIzQzO1x0ICovXG4mIzQzO1x0aGlzaV9hY2NfdmRldi1cdTAwM2Vjb3JlX2RldmljZS56YXBfYmFyc19vbl9yZXZva2UgPSBmYWxzZTtcbiYjNDM7XG4gXHRoaXNpX2FjY192ZmlvX2RlYnVnX2luaXQoaGlzaV9hY2NfdmRldik7XG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuaW5kZXggYTEwZWQ3MzNmMGUzYWYuLmJjNmNjYjJlMTM1YzNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuQEAgLTU5MCwxMiAmIzQzOzU5MCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fYmFzaWNfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0dmlydF9tZW0gPSAhIShsZTE2X3RvX2NwdSgqdmlydF9jbWQpIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuIFx0XHRuZXdfbWVtID0gISEobmV3X2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKTtcbiBcbi1cdFx0aWYgKCFuZXdfbWVtKSB7XG4tXHRcdFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuLVx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbi1cdFx0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghbmV3X21lbSlcbiYjNDM7XHRcdFx0dmZpb19wY2lfbG9ja19yZXZva2VfYmFycyh2ZGV2KTtcbiYjNDM7XHRcdGVsc2VcbiBcdFx0XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuLVx0XHR9XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZSB1c2VyIGlzIHdyaXRpbmcgbWVtL2lvIGVuYWJsZSAobmV3X21lbS9pbykgYW5kIHdlXG5AQCAtNjMxLDcgJiM0Mzs2MjksNyBAQCBzdGF0aWMgaW50IHZmaW9fYmFzaWNfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0KnZpcnRfY21kIHw9IGNwdV90b19sZTE2KG5ld19jbWQgXHUwMDI2IG1hc2spO1xuIFxuIFx0XHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuJiM0MztcdFx0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcdH1cbiBcbkBAIC03MTIsMTYgJiM0Mzs3MTAsMTQgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfY2FwX2Jhc2ljX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiBzdGF0aWMgdm9pZCB2ZmlvX2xvY2tfYW5kX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHRcdCAgcGNpX3Bvd2VyX3Qgc3RhdGUpXG4ge1xuLVx0aWYgKHN0YXRlIFx1MDAzZT0gUENJX0QzaG90KSB7XG4tXHRcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuLVx0fSBlbHNlIHtcbiYjNDM7XHRpZiAoc3RhdGUgXHUwMDNlPSBQQ0lfRDNob3QpXG4mIzQzO1x0XHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xuJiM0MztcdGVsc2VcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cdH1cbiBcbiBcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBzdGF0ZSk7XG4gXHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XG4gXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiB9XG4gXG5AQCAtOTA4LDExICYjNDM7OTA0LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19leHBfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0XHRcdFx0XHQgXHUwMDI2Y2FwKTtcbiBcbiBcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IChjYXAgXHUwMDI2IFBDSV9FWFBfREVWQ0FQX0ZMUikpIHtcbi1cdFx0XHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG4tXHRcdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuJiM0MztcdFx0XHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHRcdHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cdTAwM2VwZGV2KTtcbiBcdFx0XHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdFx0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTk5MywxMSAmIzQzOzk4OCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fYWZfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0XHRcdFx0XHRcdTAwMjZjYXApO1xuIFxuIFx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgKGNhcCBcdTAwMjYgUENJX0FGX0NBUF9GTFIpIFx1MDAyNlx1MDAyNiAoY2FwIFx1MDAyNiBQQ0lfQUZfQ0FQX1RQKSkge1xuLVx0XHRcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbi1cdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XG4mIzQzO1x0XHRcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XG4gXHRcdFx0cGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LVx1MDAzZXBkZXYpO1xuIFx0XHRcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHRcdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdFx0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggMDUwZTc1NDI5NTJlZDEuLjAwNTljMTc2ZDYyNzA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtMTIsNiAmIzQzOzEyLDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hcGVydHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuQEAgLTMxOSw4ICYjNDM7MzIxLDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9ydW50aW1lX3BtX2VudHJ5KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdCAqIFRoZSB2ZGV2IHBvd2VyIHJlbGF0ZWQgZmxhZ3MgYXJlIHByb3RlY3RlZCB3aXRoICYjMzk7bWVtb3J5X2xvY2smIzM5O1xuIFx0ICogc2VtYXBob3JlLlxuIFx0ICovXG4tXHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG4tXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XG4mIzQzO1x0dmZpb19wY2lfbG9ja19yZXZva2VfYmFycyh2ZGV2KTtcbiBcbiBcdGlmICh2ZGV2LVx1MDAzZXBtX3J1bnRpbWVfZW5nYWdlZCkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbkBAIC00MDYsNyAmIzQzOzQwNyw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX3J1bnRpbWVfcG1fZXhpdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0X192ZmlvX3BjaV9ydW50aW1lX3BtX2V4aXQodmRldik7XG4gXHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XG4gXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiB9XG4gXG5AQCAtMTI1Niw2ICYjNDM7MTI1Nyw4IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfc2V0X2lycXMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHZmaW9fcGNpX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZylcbiB7XG5AQCAtMTI2NCw3ICYjNDM7MTI2Nyw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0aWYgKCF2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgd2hpbGUgdGhlIHBvd2VyIHN0YXRlIGlzIG5vbi1EMC4gSWZcbkBAIC0xMjc0LDEzICYjNDM7MTI3NywxOCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdCAqIGhhdmUgTm9Tb2Z0UnN0LSwgdGhlIHJlc2V0IGZ1bmN0aW9uIGNhbiBjYXVzZSB0aGUgUENJIGNvbmZpZyBzcGFjZVxuIFx0ICogcmVzZXQgd2l0aG91dCByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIHN0YXRlIChzYXZlZCBsb2NhbGx5IGluXG4gXHQgKiAmIzM5O3ZkZXYtXHUwMDNlcG1fc2F2ZSYjMzk7KS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSB6YXAgaXMgZG9uZSBhZnRlciBtYWtpbmcgdGhlIGRldmljZSBhY2Nlc3NpYmxlIGluIEQwLFxuJiM0MztcdCAqIGJlY2F1c2UgYSBETUFCVUYgaW1wb3J0ZXIgY291bGQgYWNjZXNzIHRoZSBkZXZpY2UgYXMgcGFydFxuJiM0MztcdCAqIG9mIGl0cyByZXZvY2F0aW9uIGNsZWFudXAuXG4gXHQgKi9cbiBcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuIFxuLVx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuJiM0MztcdHZmaW9fcGNpX3Jldm9rZV9iYXJzKHZkZXYpO1xuJiM0MztcbiBcdHJldCA9IHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cdTAwM2VwZGV2KTtcbiBcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuJiM0MztcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNTY5LDYgJiM0MzsxNTc3LDEwIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4gXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0U6XG4mIzQzO1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSOlxuJiM0MztcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5AQCAtMTY0OCwyMCAmIzQzOzE2NjAsMzcgQEAgc3NpemVfdCB2ZmlvX3BjaV9jb3JlX3dyaXRlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCBjb25zdCBjaGFyIF9fdXNlciAqYnVcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV93cml0ZSk7XG4gXG4tc3RhdGljIHZvaWQgdmZpb19wY2lfemFwX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3BjaV9yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4ge1xuLVx0c3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYgPSBcdTAwMjZ2ZGV2LVx1MDAzZXZkZXY7XG4tXHRsb2ZmX3Qgc3RhcnQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfQkFSMF9SRUdJT05fSU5ERVgpO1xuLVx0bG9mZl90IGVuZCA9IFZGSU9fUENJX0lOREVYX1RPX09GRlNFVChWRklPX1BDSV9ST01fUkVHSU9OX0lOREVYKTtcbi1cdGxvZmZfdCBsZW4gPSBlbmQgLSBzdGFydDtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbiBcbi1cdHVubWFwX21hcHBpbmdfcmFuZ2UoY29yZV92ZGV2LVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZywgc3RhcnQsIGxlbiwgdHJ1ZSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBhIGRyaXZlciBjb3VsZCBwb3NzaWJseSBjcmVhdGUgQkFSIG1hcHBpbmdzIGluIHRoZVxuJiM0MztcdCAqIHZkZXYmIzM5O3MgYWRkcmVzc19zcGFjZSwgZG8gYW4gYWRkaXRpb25hbCB6YXAgb24gcmV2b2tlLiAgU2VlXG4mIzQzO1x0ICogdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodmRldi1cdTAwM2V6YXBfYmFyc19vbl9yZXZva2UpIHtcbiYjNDM7XHRcdHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2ID0gXHUwMDI2dmRldi1cdTAwM2V2ZGV2O1xuJiM0MztcdFx0bG9mZl90IHN0YXJ0ID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYKTtcbiYjNDM7XHRcdGxvZmZfdCBlbmQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfUk9NX1JFR0lPTl9JTkRFWCk7XG4mIzQzO1x0XHRsb2ZmX3QgbGVuID0gZW5kIC0gc3RhcnQ7XG4mIzQzO1xuJiM0MztcdFx0dW5tYXBfbWFwcGluZ19yYW5nZShjb3JlX3ZkZXYtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nLFxuJiM0MztcdFx0XHRcdCAgICBzdGFydCwgbGVuLCB0cnVlKTtcbiYjNDM7XHR9XG4gfVxuIFxuLXZvaWQgdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiYjNDM7dm9pZCB2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuLVx0dmZpb19wY2lfemFwX2JhcnModmRldik7XG4mIzQzO1x0dmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdmZpb19wY2lfdW5yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4gfVxuIFxuIHUxNiB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNjgzLDE4ICYjNDM7MTcxMiw2IEBAIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUxNiBjXG4gXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgdm1hX3RvX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi17XG4tXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPSB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuLVx0aW50IGluZGV4ID0gdm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAzZVx1MDAzZSAoVkZJT19QQ0lfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCk7XG4tXHR1NjQgcGdvZmY7XG4tXG4tXHRwZ29mZiA9IHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwMjZcbi1cdFx0KCgxVSBcdTAwM2NcdTAwM2MgKFZGSU9fUENJX09GRlNFVF9TSElGVCAtIFBBR0VfU0hJRlQpKSAtIDEpO1xuLVxuLVx0cmV0dXJuIChwY2lfcmVzb3VyY2Vfc3RhcnQodmRldi1cdTAwM2VwZGV2LCBpbmRleCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpICYjNDM7IHBnb2ZmO1xuLX1cbi1cbiB2bV9mYXVsdF90IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBwZm4sXG5AQCAtMTcyMiwyNCAmIzQzOzE3MzksMTAzIEBAIHN0YXRpYyB2bV9mYXVsdF90IHZmaW9fcGNpX21tYXBfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbi1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXHR1bnNpZ25lZCBsb25nIGFkZHIgPSB2bWYtXHUwMDNlYWRkcmVzcyBcdTAwMjYgfigoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxKTtcbi1cdHVuc2lnbmVkIGxvbmcgcGdvZmYgPSAoYWRkciAtIHZtYS1cdTAwM2V2bV9zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHR1bnNpZ25lZCBsb25nIHBmbiA9IHZtYV90b19wZm4odm1hKSAmIzQzOyBwZ29mZjtcbi1cdHZtX2ZhdWx0X3QgcmV0ID0gVk1fRkFVTFRfRkFMTEJBQ0s7XG4tXG4tXHRpZiAoaXNfYWxpZ25lZF9mb3Jfb3JkZXIodm1hLCBhZGRyLCBwZm4sIG9yZGVyKSkge1xuLVx0XHRzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jaylcbi1cdFx0XHRyZXQgPSB2ZmlvX3BjaV92bWZfaW5zZXJ0X3Bmbih2ZGV2LCB2bWYsIHBmbiwgb3JkZXIpO1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm4gPSAwO1xuJiM0MztcdHZtX2ZhdWx0X3QgcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBvbmx5IHRoaW5nIHRoaXMgY2FuIHJlbHkgb24gaXMgdGhhdCB0aGUgRE1BQlVGIHJlbGF0aW5nXG4mIzQzO1x0ICogdG8gdGhlIFZNQSYjMzk7cyB2bV9maWxlIGV4aXN0cyAocHJpdikuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBBIERNQUJVRiBmb3IgYSBWRklPIGRldmljZSBmZCBtbWFwKCkgaG9sZHMgYSByZWZlcmVuY2UgdG9cbiYjNDM7XHQgKiB0aGUgb3JpZ2luYWwgVkZJTyBkZXZpY2UgZmQsIGJ1dCBhbiBleHBsaWNpdGx5LWV4cG9ydGVkXG4mIzQzO1x0ICogRE1BQlVGIGRvZXMgbm90LiAgVGhlIG9yaWdpbmFsIGZkIG1pZ2h0IGhhdmUgY2xvc2VkLFxuJiM0MztcdCAqIG1lYW5pbmcgdGhpcyBmYXVsdCBjYW4gcmFjZSB3aXRoXG4mIzQzO1x0ICogdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKCksIG1lYW5pbmcgdGhlIGJ1ZmZlciBjb3VsZCBoYXZlXG4mIzQzO1x0ICogYmVlbiByZXZva2VkIChpbiB3aGljaCBjYXNlIHByaXYtXHUwMDNldmRldiBtaWdodCBiZSBOVUxMKSwgYW5kXG4mIzQzO1x0ICogdGhlIFZGSU8gZGV2aWNlIHJlZ2lzdHJhdGlvbiBtaWdodCBoYXZlIGJlZW4gZHJvcHBlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdpdGggdGhlIGdvYWwgb2YgdGFraW5nIHZkZXYtXHUwMDNlbWVtb3J5X2xvY2sgaW4gYSB3b3JsZCB3aGVyZVxuJiM0MztcdCAqIHZkZXYgbWlnaHQgbm90IHN0aWxsIGV4aXN0OlxuJiM0MztcdCAqXG4mIzQzO1x0ICogMS4gVGFrZSB0aGUgcmVzdiBsb2NrIG9uIHRoZSBETUFCVUY6XG4mIzQzO1x0ICogIC0gSWYgcmFjaW5nIGNsZWFudXAgZ290IGluIGZpcnN0LCB0aGUgYnVmZmVyIGlzIHJldm9rZWQ7XG4mIzQzO1x0ICogICAgc3RvcC9leGl0IGlmIHNvLlxuJiM0MztcdCAqICAtIElmIHdlIGdvdCBpbiBmaXJzdCwgdGhlIGJ1ZmZlciBpcyBub3QgcmV2b2tlZCBzbyB2ZGV2IGlzXG4mIzQzO1x0ICogICAgbm9uLU5VTEwsIGFjY2Vzc2libGUsIGFuZCBjbGVhbnVwIF9oYXMgbm90IHlldCBwdXQgdGhlXG4mIzQzO1x0ICogICAgVkZJTyBkZXZpY2UgcmVnaXN0cmF0aW9uXy4gIFNvLCB0aGUgZGV2aWNlIHJlZmNvdW50IG11c3RcbiYjNDM7XHQgKiAgICBiZSBcdTAwM2UwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogMi4gVGFrZSB2ZmlvX2RldmljZSByZWdpc3RyYXRpb24gKHJlZmNvdW50IGd1YXJhbnRlZWQgXHUwMDNlMFxuJiM0MztcdCAqICAgIGhlcmVhZnRlcikuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiAzLiBVbmxvY2sgdGhlIERNQUJVRiYjMzk7cyByZXN2IGxvY2s6XG4mIzQzO1x0ICogIC0gQSByYWNpbmcgY2xlYW51cCBjYW4gbm93IGNvbXBsZXRlLlxuJiM0MztcdCAqICAtIEJ1dCwgdGhlIGRldmljZSByZWZjb3VudCBcdTAwM2UwLCBtZWFuaW5nIHRoZSB2ZmlvX2RldmljZVxuJiM0MztcdCAqICAgIChhbmQgdmZpb19wY2llX2NvcmUgZGV2aWNlIHZkZXYpIGhhdmUgbm90IHlldCBiZWVuXG4mIzQzO1x0ICogICAgZnJlZWQuICB2ZGV2IGlzIGFjY2Vzc2libGUsIGV2ZW4gaWYgdGhlIERNQUJVRiBoYXMgYmVlblxuJiM0MztcdCAqICAgIHJldm9rZWQgb3IgY2xlYW51cCBoYXMgaGFwcGVuZWQsIGJlY2F1c2VcbiYjNDM7XHQgKiAgICB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KCkgY2FuJiMzOTt0IGNvbXBsZXRlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogNC4gVGFrZSB0aGUgdmRldi1cdTAwM2VtZW1vcnlfbG9ja1xuJiM0MztcdCAqICAtIEVpdGhlciB0aGUgRE1BQlVGIGlzIHVzYWJsZSwgb3IgaGFzIGJlZW4gY2xlYW5lZCB1cC5cbiYjNDM7XHQgKiAgICBXaGljaGV2ZXIsIGl0IGNhbiBubyBsb25nZXIgY2hhbmdlIHVuZGVyIHVzLlxuJiM0MztcdCAqICAtIFRlc3QgdGhlIERNQUJVRiByZXZvY2F0aW9uIHN0YXR1cyBhZ2FpbjogaWYgaXQgd2FzXG4mIzQzO1x0ICogICAgcmV2b2tlZCBiZXR3ZWVuIDEgYW5kIDQgcmV0dXJuIGEgU0lHQlVTLiBPdGhlcndpc2UsXG4mIzQzO1x0ICogICAgcmV0dXJuIGEgUEZOLlxuJiM0MztcdCAqICAtIEl0JiMzOTtzIG5vdCBuZWNlc3NhcnkgdG8gYWxzbyB0YWtlIHRoZSByZXN2IGxvY2ssIGJlY2F1c2VcbiYjNDM7XHQgKiAgICB0aGUgc3RhdHVzL3ZkZXYgY2FuJiMzOTt0IGNoYW5nZSB3aGlsZSBtZW1vcnlfbG9jayBpcyBoZWxkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogNS4gVW5sb2NrLCBkb25lLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgIT0gVkZJT19QQ0lfRE1BQlVGX09LKSB7XG4mIzQzO1x0XHRwcl9kZWJ1Z19yYXRlbGltaXRlZChcJiMzNDslcyBWQSAweCVseCwgcGdvZmYgMHglbHg6IERNQUJVRiByZXZva2VkL2NsZWFuZWQgdXBcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBfX2Z1bmNfXywgdm1mLVx1MDAzZWFkZHJlc3MsIHZtYS1cdTAwM2V2bV9wZ29mZik7XG4mIzQzO1x0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogSWYgdGhlIGJ1ZmZlciBpc24mIzM5O3QgcmV2b2tlZCwgdmRldiBpcyB2YWxpZCAqL1xuJiM0MztcdHZkZXYgPSBwcml2LVx1MDAzZXZkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghdmZpb19kZXZpY2VfdHJ5X2dldF9yZWdpc3RyYXRpb24oXHUwMDI2dmRldi1cdTAwM2V2ZGV2KSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIHZkZXYgIT0gTlVMTCAoYWJvdmUpLCB0aGUgcmVnaXN0cmF0aW9uIHNob3VsZFxuJiM0MztcdFx0ICogYWxyZWFkeSBiZSBcdTAwM2UwIGFuZCBzbyB0aGlzIHRyeV9nZXQgc2hvdWxkIG5ldmVyXG4mIzQzO1x0XHQgKiBmYWlsLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZ2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDslczogVW5leHBlY3RlZCByZWdpc3RyYXRpb24gZmFpbHVyZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IF9fZnVuY19fKTtcbiYjNDM7XHRcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0fVxuJiM0MztcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spIHtcbiYjNDM7XHRcdC8qIFJldm9jYXRpb24gc3RhdHVzIG11c3QgYmUgcmUtcmVhZCwgdW5kZXIgbWVtb3J5X2xvY2sgKi9cbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfT0spIHtcbiYjNDM7XHRcdFx0aW50IHByZXMgPSB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHByaXYsIHZtYSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIHZtZi1cdTAwM2VhZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgb3JkZXIsIFx1MDAyNnBmbik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocHJlcyA9PSAwKVxuJiM0MztcdFx0XHRcdHJldCA9IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHZkZXYsIHZtZixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBwZm4sIG9yZGVyKTtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAocHJlcyA9PSAtRUFHQUlOKVxuJiM0MztcdFx0XHRcdHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0ZGV2X2RiZ19yYXRlbGltaXRlZChcdTAwMjZ2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCAgIFwmIzM0OyVzKCxvcmRlciA9ICVkKSBCQVIgJWxkIHBhZ2Ugb2Zmc2V0IDB4JWx4OiAweCV4XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICBfX2Z1bmNfXywgb3JkZXIsXG4tXHRcdFx0ICAgIHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwM2VcdTAwM2Vcbi1cdFx0XHRcdChWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSxcbi1cdFx0XHQgICAgcGdvZmYsICh1bnNpZ25lZCBpbnQpcmV0KTtcbiYjNDM7XHRcdFx0ICAgIFwmIzM0OyVzKG9yZGVyID0gJWQpIFBGTiAweCVseCwgVkEgMHglbHgsIHBnb2ZmIDB4JWx4OiAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgX19mdW5jX18sIG9yZGVyLCBwZm4sIHZtZi1cdTAwM2VhZGRyZXNzLFxuJiM0MztcdFx0XHQgICAgdm1hLVx1MDAzZXZtX3Bnb2ZmLCAodW5zaWduZWQgaW50KXJldCk7XG4gXG4mIzQzO1x0dmZpb19kZXZpY2VfcHV0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTc1NSw2ICYjNDM7MTg1MSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZmaW9fcGNpX21tYXBfb3BzID0ge1xuICNlbmRpZlxuIH07XG4gXG4mIzQzO3ZvaWQgdmZpb19wY2lfc2V0X3ZtYV9vcHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dmZpb19wY2lfbW1hcF9vcHM7XG4mIzQzO31cbiYjNDM7XG4gaW50IHZmaW9fcGNpX2NvcmVfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID1cbkBAIC0xODAzLDcgJiM0MzsxOTA0LDEyIEBAIGludCB2ZmlvX3BjaV9jb3JlX21tYXAoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHZkZXY7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHZkZXYsIHZtYSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGluZGV4KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVxX2xlbiwgaW5kZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG5AQCAtMjIyMiw2ICYjNDM7MjMyOCwxNyBAQCBpbnQgdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfdmY7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBhIGRyaXZlciBvdmVycmlkZXMgLm1tYXAsIGl0IGhhcyB0byBiZSBhc3N1bWVkIHRoYXQgaXRcbiYjNDM7XHQgKiBtaWdodCBub3QgdXNlIHRoZSBETUFCVUYtYmFja2VkIGNvcmUgbW1hcDsgdGhpcyBmbGFnXG4mIzQzO1x0ICogZW5hYmxlcyBhIHphcCBhdCByZXZva2UgdGltZS4gIERyaXZlcnMgY2FuIG9wdCBvdXQgYnlcbiYjNDM7XHQgKiBjbGVhcmluZyB0aGlzIGZsYWcgYWZ0ZXIgcmVnaXN0cmF0aW9uLCBlLmcuIGlmIHRoZWlyIC5tbWFwXG4mIzQzO1x0ICogb3ZlcnJpZGUgY2FsbHMgZG93biB0byB2ZmlvX3BjaV9jb3JlX21tYXAoKSBzbyB0aGF0IG1hcHNcbiYjNDM7XHQgKiBhcmUgRE1BQlVGLWJhY2tlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodmRldi1cdTAwM2V2ZGV2Lm9wcy1cdTAwM2VtbWFwICE9IHZmaW9fcGNpX2NvcmVfbW1hcClcbiYjNDM7XHRcdHZkZXYtXHUwMDNlemFwX2JhcnNfb25fcmV2b2tlID0gdHJ1ZTtcbiYjNDM7XG4gXHR2ZmlvX3BjaV9wcm9iZV9wb3dlcl9zdGF0ZSh2ZGV2KTtcbiBcbiBcdC8qXG5AQCAtMjQ5Nyw5ICYjNDM7MjYxNCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsXG4gXHRcdH1cbiBcbiBcdFx0Lypcbi1cdFx0ICogVGFrZSB0aGUgbWVtb3J5IHdyaXRlIGxvY2sgZm9yIGVhY2ggZGV2aWNlIGFuZCB6YXAgQkFSXG4tXHRcdCAqIG1hcHBpbmdzIHRvIHByZXZlbnQgdGhlIHVzZXIgYWNjZXNzaW5nIHRoZSBkZXZpY2Ugd2hpbGUgaW5cbi1cdFx0ICogcmVzZXQuICBMb2NraW5nIG11bHRpcGxlIGRldmljZXMgaXMgcHJvbmUgdG8gZGVhZGxvY2ssXG4mIzQzO1x0XHQgKiBUYWtlIHRoZSBtZW1vcnkgd3JpdGUgbG9jayBmb3IgZWFjaCBkZXZpY2UgYW5kXG4mIzQzO1x0XHQgKiB6YXAvcmV2b2tlIEJBUiBtYXBwaW5ncyB0byBwcmV2ZW50IHRoZSB1c2VyIChvclxuJiM0MztcdFx0ICogcGVlcnMpIGFjY2Vzc2luZyB0aGUgZGV2aWNlIHdoaWxlIGluIHJlc2V0LlxuJiM0MztcdFx0ICogTG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIGlzIHByb25lIHRvIGRlYWRsb2NrLFxuIFx0XHQgKiBydW5hd2F5IGFuZCB1bndpbmQgaWYgd2UgaGl0IGNvbnRlbnRpb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIWRvd25fd3JpdGVfdHJ5bG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKSkge1xuQEAgLTI1MDcsOCAmIzQzOzI2MjUsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuLVx0XHR2ZmlvX3BjaV96YXBfYmFycyh2ZGV2KTtcbiYjNDM7XHRcdHZmaW9fcGNpX3Jldm9rZV9iYXJzKHZkZXYpO1xuIFx0fVxuIFxuIFx0aWYgKCFsaXN0X2VudHJ5X2lzX2hlYWQodmRldixcbkBAIC0yNTM4LDcgJiM0MzsyNjU1LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UodmRldiwgXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCxcbiBcdFx0XHRcdFx0IHZkZXYuZGV2X3NldF9saXN0KSB7XG4gXHRcdGlmICh2ZGV2LVx1MDAzZXZkZXYub3Blbl9jb3VudCBcdTAwMjZcdTAwMjYgX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuJiM0MztcdFx0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuaW5kZXggMWExNzdjZTdkZTU0NmEuLjMxZmJhZDkzZjg5YjFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuQEAgLTQsMjQgJiM0Mzs0LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtcmVzdi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dmZpb19wY2lfcHJpdi5oXCYjMzQ7XG4gXG4gTU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtETUFfQlVGXCYjMzQ7KTtcbiBcbi1zdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4tXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuLVx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2O1xuLVx0c3RydWN0IGxpc3RfaGVhZCBkbWFidWZzX2VsbTtcbi1cdHNpemVfdCBzaXplO1xuLVx0c3RydWN0IHBoeXNfdmVjICpwaHlzX3ZlYztcbi1cdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyO1xuLVx0dTMyIG5yX3Jhbmdlcztcbi1cdHN0cnVjdCBrcmVmIGtyZWY7XG4tXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuLVx0dTggcmV2b2tlZCA6IDE7XG4tfTtcbi1cbiYjNDM7I2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50KVxuIHtcbkBAIC0zMCw3ICYjNDM7MTksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRpZiAoIWF0dGFjaG1lbnQtXHUwMDNlcGVlcjJwZWVyKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuJiM0MztcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKCFkbWFfYnVmX2F0dGFjaF9yZXZvY2FibGUoYXR0YWNobWVudCkpXG5AQCAtMzksNiAmIzQzOzI4LDQzIEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGRtYV9idWZfbW1hcF9pbnRlcm5hbCgpIGhhcyBhc3NlcnRlZCB0aGF0IHRoZSBWTUEgaXNcbiYjNDM7XHQgKiBjb250YWluZWQgd2l0aGluIHRoZSBETUFCVUYgc2l6ZSBiZWZvcmUgY2FsbGluZyB0aGlzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQWxzbywgaWYgd2Ugb2JzZXJ2ZSB0aGF0IHRoZSBidWZmZXIgaXMgcmV2b2tlZCBub3cgdGhlblxuJiM0MztcdCAqIHJlZnVzZSB0aGUgbW1hcCgpLiAgVGhpcyBpcyBhIGJlbHQtYW5kLWJyYWNlcyBlYXJseSBmYWlsdXJlXG4mIzQzO1x0ICogdG8gZWFzZSBkZWJ1Z2dpbmcgYSByZXZva2VkIGJ1ZmZlciBiZWluZyB1c2VkLiAgVXNlcnNwYWNlXG4mIzQzO1x0ICogbWlnaHQgYWxzbyByYWNlIGFuIG1tYXAoKSBhZ2FpbnN0IGFuIGV4cGxpY2l0IHJldm9jYXRpb24sXG4mIzQzO1x0ICogb3IgYW4gYWN0aW9uIGRvaW5nIGEgdGVtcG9yYXJ5IHJldm9rZTsgcmFjZSBzY2VuYXJpb3MgYXJlXG4mIzQzO1x0ICogc3RpbGwgc2FmZSBiZWNhdXNlIHRoZSBmYXVsdCBoYW5kbGVyIHVsdGltYXRlbHkgcHJldmVudHNcbiYjNDM7XHQgKiBhY2Nlc3MgdG8gYSByZXZva2VkIGJ1ZmZlciBpZiBpdCBpc24mIzM5O3QgY2F1Z2h0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFJFQURfT05DRShwcml2LVx1MDAzZXN0YXR1cykgIT0gVkZJT19QQ0lfRE1BQlVGX09LKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0aWYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkgPT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHByaXYtXHUwMDNlbWVtYXR0cikgPT0gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MpXG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiYjNDM7XG4mIzQzO1x0LyogU2VlIGNvbW1lbnRzIGluIHZmaW9fcGNpX2NvcmVfbW1hcCgpIHJlIFZNX0FMTE9XX0FOWV9VTkNBQ0hFRC4gKi9cbiYjNDM7XHR2bV9mbGFnc19zZXQodm1hLCBWTV9BTExPV19BTllfVU5DQUNIRUQgfCBWTV9JTyB8IFZNX1BGTk1BUCB8XG4mIzQzO1x0XHQgICAgIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG4mIzQzO1x0dmZpb19wY2lfc2V0X3ZtYV9vcHModm1hKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi9cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9kb25lKHN0cnVjdCBrcmVmICprcmVmKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID1cbkBAIC01Niw3ICYjNDM7ODIsNyBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFxuIFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuJiM0MztcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIFxuIFx0cmV0ID0gZG1hX2J1Zl9waHlzX3ZlY190b19zZ3QoYXR0YWNobWVudCwgcHJpdi1cdTAwM2Vwcm92aWRlcixcbkBAIC05NSwxNyAmIzQzOzEyMSwyMDMgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXG4gXHRcdHVwX3dyaXRlKFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gXHRcdHZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oXHUwMDI2cHJpdi1cdTAwM2V2ZGV2LVx1MDAzZXZkZXYpO1xuIFx0fVxuJiM0MztcdGlmIChwcml2LVx1MDAzZXZmaWxlKVxuJiM0MztcdFx0ZnB1dChwcml2LVx1MDAzZXZmaWxlKTtcbiBcdGtmcmVlKHByaXYtXHUwMDNlcGh5c192ZWMpO1xuIFx0a2ZyZWUocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbiYjNDM7I2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiBcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbiYjNDM7XHQubW1hcCA9IHZmaW9fcGNpX2RtYV9idWZfbW1hcCxcbiYjNDM7I2VuZGlmXG4gXHQubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCxcbiBcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcbiBcdC5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLFxuIH07XG4gXG4mIzQzO2ludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLFxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKm91dF9wZm4pXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEdpdmVuIGEgVk1BIChzdGFydCwgZW5kLCBwZ29mZnMpIGFuZCBhIGZhdWx0IGFkZHJlc3MsXG4mIzQzO1x0ICogc2VhcmNoIHRoZSBjb3JyZXNwb25kaW5nIERNQUJVRiYjMzk7cyBwaHlzX3ZlY1tdIHRvIGZpbmQgdGhlXG4mIzQzO1x0ICogcmFuZ2UgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzJiMzOTtzIG9mZnNldCBpbnRvIHRoZSBWTUEsIGFuZFxuJiM0MztcdCAqIGl0cyBQRk4uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgcGh5c192ZWNbXSByYW5nZXMgcmVwcmVzZW50IGNvbnRpZ3VvdXMgc3BhbnMgb2YgVkFzXG4mIzQzO1x0ICogdXB3YXJkcyBmcm9tIHRoZSBidWZmZXIgb2Zmc2V0IDA7IHRoZSBhY3R1YWwgUEZOcyBtaWdodCBiZVxuJiM0MztcdCAqIGluIGFueSBvcmRlciwgb3ZlcmxhcC9hbGlhcywgZXRjLiAgQ2FsY3VsYXRlIGFuIG9mZnNldCBvZlxuJiM0MztcdCAqIHRoZSBkZXNpcmVkIHBhZ2UgZ2l2ZW4gVk1BIHN0YXJ0L3Bnb2ZmIGFuZCBhZGRyZXNzLCB0aGVuXG4mIzQzO1x0ICogc2VhcmNoIHVwd2FyZHMgZnJvbSAwIHRvIGZpbmQgd2hpY2ggc3BhbiBjb250YWlucyBpdC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9uIHN1Y2Nlc3MsIGEgdmFsaWQgUEZOIGZvciBhIHBhZ2Ugc2l6ZWQgYnkgJiMzOTtvcmRlciYjMzk7IGlzXG4mIzQzO1x0ICogcmV0dXJuZWQgaW50byBvdXRfcGZuLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRmFpbHVyZSBvY2N1cnMgaWY6XG4mIzQzO1x0ICogLSBBIGh1Z2VwYWdlIHdvdWxkIGNyb3NzIHRoZSBlZGdlIG9mIHRoZSBWTUEsXG4mIzQzO1x0ICogLSBBIGh1Z2VwYWdlIGlzbiYjMzk7dCBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIGEgcmFuZ2VcbiYjNDM7XHQgKiAgIChpbmNsdWRpbmcgd2hlcmUgaXQgc3RyYWRkbGVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuXG4mIzQzO1x0ICogICByYW5nZXMpLFxuJiM0MztcdCAqIC0gV2UgZmluZCBhIHJhbmdlLCBidXQgdGhlIGZpbmFsIFBGTiBpc24mIzM5O3QgYWxpZ25lZCB0byB0aGVcbiYjNDM7XHQgKiAgIHJlcXVlc3RlZCBvcmRlci5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFVwb24gZmFpbHVyZSwgLUVBR0FJTiBpcyByZXR1cm5lZCBhbmQgdGhlIGNhbGxlciBpc1xuJiM0MztcdCAqIGV4cGVjdGVkIHRvIHRyeSBhZ2FpbiB3aXRoIGEgc21hbGxlciBvcmRlciwgd2hpY2ggd2lsbFxuJiM0MztcdCAqIGV2ZW50dWFsbHkgc3VjY2VlZCAob3JkZXI9MCB3aWxsIGFsd2F5cyB3b3JrKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEl0JiMzOTtzIHN1Ym9wdGltYWwgaWYgRE1BQlVGcyBhcmUgY3JlYXRlZCB3aXRoIG5laWdoYm91cmluZ1xuJiM0MztcdCAqIHJhbmdlcyB0aGF0IGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHNpbmNlIGh1Z2VwYWdlc1xuJiM0MztcdCAqIGNhbiYjMzk7dCBzdHJhZGRsZSByYW5nZSBib3VuZGFyaWVzLiAgKFRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlXG4mIzQzO1x0ICogcmFuZ2VzIHNob3VsZCBtZXJnZSB0aGVtIGluIHRoaXMgY2FzZS4pXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBGaW5hbGx5LCB2bWFfcGdvZmZfYWRqdXN0IGlzIHVzZWQgd2l0aCBhIERNQUJVRiBjcmVhdGVkIGZvclxuJiM0MztcdCAqIGEgVkZJTyBCQVIgbW1hcDogYSBCQVIgbWFwcGVkIHdpdGggdm1fcGdvZmYgXHUwMDNlIDAgY3JlYXRlcyBhXG4mIzQzO1x0ICogRE1BQlVGIHN1Y2ggdGhhdCBieXRlIDAgb2YgdGhlIFZNQSBjb3JyZXNwb25kcyB0byBieXRlIDAgb2ZcbiYjNDM7XHQgKiB0aGUgRE1BQlVGIGFuZCBieXRlICYjMzk7dm1fcGdvZmYgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQmIzM5OyBpbnRvIHRoZSBCQVIuXG4mIzQzO1x0ICogVG8gYXZvaWQgZG91YmxlLW9mZnNldHRpbmcgaW4gdGhpcyBzY2VuYXJpbywgc3VidHJhY3RpbmdcbiYjNDM7XHQgKiB2bWFfcGdvZmZfYWRqdXN0IGZyb20gdGhpcyAobm9uLXplcm8pIHZtX3Bnb2ZmIGdlbmVyYXRlc1xuJiM0MztcdCAqIHRoZSBlZmZlY3RpdmUgb2Zmc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2VzaXplID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtYV9vZmYgPSAoKHZtYS1cdTAwM2V2bV9wZ29mZiAtIHByaXYtXHUwMDNldm1hX3Bnb2ZmX2FkanVzdCkgXHUwMDNjXHUwMDNjXG4mIzQzO1x0XHRcdFx0IFBBR0VfU0hJRlQpIFx1MDAyNiBWRklPX1BDSV9PRkZTRVRfTUFTSztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHJvdW5kZWRfcGFnZV9hZGRyID0gQUxJR05fRE9XTihmYXVsdF9hZGRyLCBwYWdlc2l6ZSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByb3VuZGVkX3BhZ2VfZW5kID0gcm91bmRlZF9wYWdlX2FkZHIgJiM0MzsgcGFnZXNpemU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmYXVsdF9vZmZzZXQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmYXVsdF9vZmZzZXRfZW5kO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnRfb2Zmc2V0ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocm91bmRlZF9wYWdlX2FkZHIgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCByb3VuZGVkX3BhZ2VfZW5kIFx1MDAzZSB2bWEtXHUwMDNldm1fZW5kKSB7XG4mIzQzO1x0XHRpZiAob3JkZXIgXHUwMDNlIDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiYjNDM7XHRcdC8qIEEgZmF1bHQgYWRkcmVzcyBvdXRzaWRlIG9mIHRoZSBWTUEgaXMgYWJzdXJkLiAqL1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXG4mIzQzO1x0XHRcdFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7RmF1bHQgYWRkciAweCVseCBvdXRzaWRlIFZNQSAweCVseC0weCVseFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZmF1bHRfYWRkciwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kKTtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBmYXVsdF9vZmZzZXRbX2VuZF0gaXMgdGhlIHNwYW4gd2l0aGluIHRoZSBETUFCVUZcbiYjNDM7XHQgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBwYWdlOlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShjaGVja19hZGRfb3ZlcmZsb3cocm91bmRlZF9wYWdlX2FkZHIgLSB2bWEtXHUwMDNldm1fc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHR2bWFfb2ZmLCBcdTAwMjZmYXVsdF9vZmZzZXQpIHx8XG4mIzQzO1x0XHQgICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhmYXVsdF9vZmZzZXQsIHBhZ2VzaXplLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2ZmF1bHRfb2Zmc2V0X2VuZCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSXRlcmF0ZSBvdmVyIHJhbmdlcyBpbiB0aGUgYnVmZmVyLCBzdW1taW5nIHRoZWlyIGxlbmd0aHM6XG4mIzQzO1x0ICogcmFuZ2Vfc3RhcnRfb2Zmc2V0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcmFuZ2UmIzM5O3Mgc3RhcnRpbmdcbiYjNDM7XHQgKiBvZmZzZXQgaW4gdGhlIGJ1ZmZlciAoZnJvbSAwIHVwd2FyZHMpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBmYWlsdXJlIGZvciBvcmRlciA9PSAwIGlzIHVuZXhwZWN0ZWQsIGFuZCB0cmlnZ2VycyBhXG4mIzQzO1x0ICogZmF1bHQvd2Fybi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSAob3JkZXIgPT0gMCkgPyAtRUZBVUxUIDogLUVBR0FJTjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2Vucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzaXplX3QgcmFuZ2VfbGVuID0gcHJpdi1cdTAwM2VwaHlzX3ZlY1tpXS5sZW47XG4mIzQzO1xuJiM0MztcdFx0LyogRWFybHkgZXhpdCBpZiByYW5nZSBzdGFydHMgYWZ0ZXIgdGhlIHBhZ2UgZW5kICovXG4mIzQzO1x0XHRpZiAoZmF1bHRfb2Zmc2V0X2VuZCBcdTAwM2M9IHJhbmdlX3N0YXJ0X29mZnNldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZhdWx0X29mZnNldCBcdTAwM2U9IHJhbmdlX3N0YXJ0X29mZnNldCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBmYXVsdF9vZmZzZXRfZW5kIFx1MDAzYz0gcmFuZ2Vfc3RhcnRfb2Zmc2V0ICYjNDM7IHJhbmdlX2xlbikge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBUaGUgZmF1bHRpbmcgcGFnZSBpcyB3aG9sbHkgY29udGFpbmVkXG4mIzQzO1x0XHRcdCAqIHdpdGhpbiB0aGUgc3BhbiByZXByZXNlbnRlZCBieSB0aGlzIHJhbmdlLFxuJiM0MztcdFx0XHQgKiBzbyB2YWxpZGF0ZSBQRk4gYWxpZ25tZW50IGZvciB0aGUgb3JkZXIuXG4mIzQzO1x0XHRcdCAqIFRoZSBpZigpIGNvbmRpdGlvbiBlbnN1cmVzIHRoZSBwZm5cbiYjNDM7XHRcdFx0ICogYXJpdGhtZXRpYyB3b24mIzM5O3Qgb3ZlcmZsb3cuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9XG4mIzQzO1x0XHRcdFx0KChmYXVsdF9vZmZzZXQgLSByYW5nZV9zdGFydF9vZmZzZXQpICYjNDM7XG4mIzQzO1x0XHRcdFx0IHByaXYtXHUwMDNlcGh5c192ZWNbaV0ucGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKElTX0FMSUdORUQocGZuLCAxIFx1MDAzY1x1MDAzYyBvcmRlcikpIHtcbiYjNDM7XHRcdFx0XHQqb3V0X3BmbiA9IHBmbjtcbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEVsc2Ugb3JkZXIgXHUwMDNlIDA7IEVBR0FJTiByZXRyaWVzIHdpdGggc21hbGxlclxuJiM0MztcdFx0XHQgKiBvcmRlclxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyYW5nZV9zdGFydF9vZmZzZXQgJiM0Mzs9IHJhbmdlX2xlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcmRlciA9PSAwIFx1MDAyNlx1MDAyNiByZXQgIT0gMClcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgYWRkcmVzcyBmZWxsIG91dHNpZGUgb2YgdGhlIHNwYW4gcmVwcmVzZW50ZWQgYnlcbiYjNDM7XHRcdCAqIHRoZSAoY29uY2F0ZW5hdGVkKSByYW5nZXMuICBBcyBzZXR1cCBvZiBhIG1hcHBpbmdcbiYjNDM7XHRcdCAqIGVuc3VyZXMgdGhhdCB0aGUgVk1BIGlzIFx1MDAzYz0gdGhlIHRvdGFsIHNpemUgb2YgdGhlXG4mIzQzO1x0XHQgKiByYW5nZXMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSWYgaXQgZG9lcywgd2FyblxuJiM0MztcdFx0ICogYW5kIFNJR0JVUy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXG4mIzQzO1x0XHRcdFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Tm8gcmFuZ2UgZm9yIGFkZHIgMHglbHgsIG9yZGVyICVkOiBWTUEgMHglbHgtMHglbHggcGdvZmYgMHglbHgsICV1IHJhbmdlcywgc2l6ZSAweCV6eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZmF1bHRfYWRkciwgb3JkZXIsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCxcbiYjNDM7XHRcdFx0dm1hLVx1MDAzZXZtX3Bnb2ZmLCBwcml2LVx1MDAzZW5yX3JhbmdlcywgcHJpdi1cdTAwM2VzaXplKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ3JlYXRlIGEgRE1BQlVGIGNvcnJlc3BvbmRpbmcgdG8gcHJpdiwgYWRkIGl0IHRvIHZkZXYtXHUwMDNlZG1hYnVmcyBsaXN0XG4mIzQzOyAqIGZvciB0cmFja2luZyAobWVhbmluZyBjbGVhbnVwIG9yIHJldm9jYXRpb24gd2lsbCB6YXAgaXQpLCBhbmQgdGFrZVxuJiM0MzsgKiBhIHZmaW9fZGV2aWNlIHJlZ2lzdHJhdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hYnVmX2V4cG9ydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwgdTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xuJiM0MztcbiYjNDM7XHRpZiAoIXZmaW9fZGV2aWNlX3RyeV9nZXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0ZXhwX2luZm8ub3BzID0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcztcbiYjNDM7XHRleHBfaW5mby5zaXplID0gcHJpdi1cdTAwM2VzaXplO1xuJiM0MztcdGV4cF9pbmZvLmZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0ZXhwX2luZm8ucHJpdiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlZG1hYnVmID0gZG1hX2J1Zl9leHBvcnQoXHUwMDI2ZXhwX2luZm8pO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2VkbWFidWYpKSB7XG4mIzQzO1x0XHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZWRtYWJ1Zik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrcmVmX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2Vjb21wKTtcbiYjNDM7XG4mIzQzO1x0LyogZG1hX2J1Zl9wdXQoKSBub3cgZnJlZXMgcHJpdiAqL1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmc19lbG0pO1xuJiM0MztcdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0ZG1hX3Jlc3ZfbG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbiYjNDM7XHRwcml2LVx1MDAzZXN0YXR1cyA9IF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikgPyBWRklPX1BDSV9ETUFCVUZfT0sgOlxuJiM0MztcdFx0VkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRDtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmc19lbG0sIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcyk7XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiAvKlxuICAqIFRoaXMgaXMgYSB0ZW1wb3JhcnkgXCYjMzQ7cHJpdmF0ZSBpbnRlcmNvbm5lY3RcJiMzNDsgYmV0d2VlbiBWRklPIERNQUJVRiBhbmQgaW9tbXVmZC5cbiAgKiBJdCBhbGxvd3MgdGhlIHR3byBjby1vcGVyYXRpbmcgZHJpdmVycyB0byBleGNoYW5nZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZlxuQEAgLTEyOCw3ICYjNDM7MzQwLDcgQEAgaW50IHZmaW9fcGNpX2RtYV9idWZfaW9tbXVmZF9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cHJpdiA9IGF0dGFjaG1lbnQtXHUwMDNlZG1hYnVmLVx1MDAzZXByaXY7XG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuJiM0MztcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0LyogTW9yZSB0aGFuIG9uZSByYW5nZSB0byBpb21tdWZkIHdpbGwgcmVxdWlyZSBwcm9wZXIgRE1BQlVGIHN1cHBvcnQgKi9cbkBAIC0yMjQsNyAmIzQzOzQzNiw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiB7XG4gXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIGdldF9kbWFfYnVmID0ge307XG4gXHRzdHJ1Y3QgdmZpb19yZWdpb25fZG1hX3JhbmdlICpkbWFfcmFuZ2VzO1xuLVx0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4gXHRzaXplX3QgbGVuZ3RoO1xuIFx0aW50IHJldDtcbkBAIC0yNzQsNiAmIzQzOzQ4NSw3IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdHByaXYtXHUwMDNldmRldiA9IHZkZXY7XG4gXHRwcml2LVx1MDAzZW5yX3JhbmdlcyA9IGdldF9kbWFfYnVmLm5yX3JhbmdlcztcbiBcdHByaXYtXHUwMDNlc2l6ZSA9IGxlbmd0aDtcbiYjNDM7XHRwcml2LVx1MDAzZW1lbWF0dHIgPSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQztcbiBcdHJldCA9IHZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXModmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vwcm92aWRlcixcbiBcdFx0XHRcdFx0ICAgICBnZXRfZG1hX2J1Zi5yZWdpb25faW5kZXgsXG4gXHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VwaHlzX3ZlYywgZG1hX3JhbmdlcyxcbkBAIC0yODQsMzQgJiM0Mzs0OTYsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRrZnJlZShkbWFfcmFuZ2VzKTtcbiBcdGRtYV9yYW5nZXMgPSBOVUxMO1xuIFxuLVx0aWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpKSB7XG4tXHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBnZXRfZG1hX2J1Zi5vcGVuX2ZsYWdzKTtcbiYjNDM7XHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycl9mcmVlX3BoeXM7XG4tXHR9XG4tXG4tXHRleHBfaW5mby5vcHMgPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzO1xuLVx0ZXhwX2luZm8uc2l6ZSA9IHByaXYtXHUwMDNlc2l6ZTtcbi1cdGV4cF9pbmZvLmZsYWdzID0gZ2V0X2RtYV9idWYub3Blbl9mbGFncztcbi1cdGV4cF9pbmZvLnByaXYgPSBwcml2O1xuLVxuLVx0cHJpdi1cdTAwM2VkbWFidWYgPSBkbWFfYnVmX2V4cG9ydChcdTAwMjZleHBfaW5mbyk7XG4tXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlZG1hYnVmKSkge1xuLVx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlZG1hYnVmKTtcbi1cdFx0Z290byBlcnJfZGV2X3B1dDtcbi1cdH1cbi1cbi1cdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuLVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4tXG4tXHQvKiBkbWFfYnVmX3B1dCgpIG5vdyBmcmVlcyBwcml2ICovXG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWRtYWJ1ZnNfZWxtKTtcbi1cdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4tXHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuLVx0cHJpdi1cdTAwM2VyZXZva2VkID0gIV9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldik7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmc19lbG0sIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcyk7XG4tXHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4tXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cbiBcdC8qXG4gXHQgKiBkbWFfYnVmX2ZkKCkgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgd2hlbiB0aGUgZmlsZSBjbG9zZXMgdGhlIGRtYWJ1ZlxuIFx0ICogd2lsbCBiZSByZWxlYXNlZC5cbkBAIC0zMjIsOCAmIzQzOzUwOSw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcbiBcdHJldHVybiByZXQ7XG4gXG4tZXJyX2Rldl9wdXQ6XG4tXHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4gZXJyX2ZyZWVfcGh5czpcbiBcdGtmcmVlKHByaXYtXHUwMDNlcGh5c192ZWMpO1xuIGVycl9mcmVlX3ByaXY6XG5AQCAtMzMyLDQ3ICYjNDM7NTE3LDE2NCBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRrZnJlZShkbWFfcmFuZ2VzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1ZGSU9fUENJX0RNQUJVRiAqL1xuJiM0MztcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRcdFx0ICAgdTY0IHBoeXNfc3RhcnQsIHU2NCByZXFfbGVuLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZXNfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtYV9wZ29mZiA9IHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwMjYgKFZGSU9fUENJX09GRlNFVF9NQVNLIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiYjNDM7XHRjaGFyICpidWZuYW1lO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlcGh5c192ZWMgPSBremFsbG9jX29iaigqcHJpdi1cdTAwM2VwaHlzX3ZlYyk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXBoeXNfdmVjKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9wcml2O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnVmbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCBcJiMzNDslczolcy8leFwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGRldl9uYW1lKFx1MDAyNnZkZXYtXHUwMDNldmRldi5kZXZpY2UpLCBwY2lfbmFtZSh2ZGV2LVx1MDAzZXBkZXYpLFxuJiM0MztcdFx0XHQgICAgcmVzX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFidWZuYW1lKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9waHlzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgRE1BQlVGIGJlZ2lucyBmcm9tIHRoZSBtbWFwKCkmIzM5O3MgQkFSIG9mZnNldCwgaS5lLiB0aGVcbiYjNDM7XHQgKiBzdGFydCBvZiB0aGUgVk1BIGNvcnJlc3BvbmRzIHRvIGJ5dGUgMCBvZiB0aGUgRE1BQlVGIGFuZFxuJiM0MztcdCAqIGJ5dGUgKHZtYV9wZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgb2YgdGhlIEJBUi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oKSByZXZlcnNlcyB0aGlzIG9mZnNldCB1c2luZ1xuJiM0MztcdCAqIHZtYV9wZ29mZl9hZGp1c3QsIHNvIHRoYXQgdWx0aW1hdGVseSBhIGZhdWx0JiMzOTtzIG9mZnNldCBmcm9tXG4mIzQzO1x0ICogdGhlIHN0YXJ0IG9mIHRoZSBfVk1BXyBoYXMgYSBjb25zaXN0ZW50IHVzYWdlIHdoZXRoZXIgdGhlXG4mIzQzO1x0ICogVk1BIG9yaWdpbmF0ZXMgZnJvbSBhbiBtbWFwKCkgb2YgdGhlIFZGSU8gZGV2aWNlIGhlcmUgb3IgYVxuJiM0MztcdCAqIGRpcmVjdCBETUFCVUYgbW1hcCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHByaXYtXHUwMDNldmRldiA9IHZkZXY7XG4mIzQzO1x0cHJpdi1cdTAwM2VzaXplID0gcmVxX2xlbjtcbiYjNDM7XHRwcml2LVx1MDAzZW5yX3JhbmdlcyA9IDE7XG4mIzQzO1x0cHJpdi1cdTAwM2V2bWFfcGdvZmZfYWRqdXN0ID0gdm1hX3Bnb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlcHJvdmlkZXIgPSBwY2ltX3AycGRtYV9wcm92aWRlcih2ZGV2LVx1MDAzZXBkZXYsIHJlc19pbmRleCk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXByb3ZpZGVyKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9uYW1lO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlzX3ZlY1swXS5wYWRkciA9IHBoeXNfc3RhcnQgJiM0MzsgKCh1NjQpdm1hX3Bnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbiYjNDM7XHRwcml2LVx1MDAzZXBoeXNfdmVjWzBdLmxlbiA9IHByaXYtXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBPX0NMT0VYRUMgfCBPX1JEV1IpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX25hbWU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT3duZXJzaGlwIG9mIHRoZSBETUFCVUYgZmlsZSB0cmFuc2ZlcnMgdG8gdGhlIFZNQSBzbyB0aGF0XG4mIzQzO1x0ICogb3RoZXIgdXNlcnMgY2FuIGxvY2F0ZSB0aGUgRE1BQlVGIHZpYSBhIFZBLiAgT3duZXJzaGlwIG9mXG4mIzQzO1x0ICogdGhlIG9yaWdpbmFsIFZGSU8gZGV2aWNlIGZpbGUgYmVpbmcgbW1hcCgpZWQgdHJhbnNmZXJzIHRvXG4mIzQzO1x0ICogcHJpdiwgYW5kIGlzIHB1dCB3aGVuIHRoZSBETUFCVUYgaXMgcmVsZWFzZWQuICBUaGlzXG4mIzQzO1x0ICogaW50ZW50aW9uYWxseSBkb2VzIG5vdCB1c2UgZ2V0X2ZpbGUoKS92bWFfc2V0X2ZpbGUoKVxuJiM0MztcdCAqIGJlY2F1c2UgdGhlIHJlZmVyZW5jZXMgYXJlIGFscmVhZHkgaGVsZCwgYW5kIG93bmVyc2hpcFxuJiM0MztcdCAqIG1vdmVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHByaXYtXHUwMDNldmZpbGUgPSB2bWEtXHUwMDNldm1fZmlsZTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fZmlsZSA9IHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZWZpbGU7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VuYW1lX2xvY2spO1xuJiM0MztcdGtmcmVlKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZW5hbWUpO1xuJiM0MztcdHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZW5hbWUgPSBidWZuYW1lO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZW5hbWVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWVfbmFtZTpcbiYjNDM7XHRrZnJlZShidWZuYW1lKTtcbiYjNDM7ZXJyX2ZyZWVfcGh5czpcbiYjNDM7XHRrZnJlZShwcml2LVx1MDAzZXBoeXNfdmVjKTtcbiYjNDM7ZXJyX2ZyZWVfcHJpdjpcbiYjNDM7XHRrZnJlZShwcml2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZXQgdGhlIERNQUJVRiYjMzk7cyByZXZvY2F0aW9uIHN0YXR1cyAoT0sgb3IgdGVtcG9yYXJpbHkvcGVybWFuZW50bHkgcmV2b2tlZCkgKi9cbiYjNDM7c3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LFxuJiM0MztcdFx0XHRcdFx0ZW51bSB2ZmlvX3BjaV9kbWFfYnVmX3N0YXR1cyBuZXdfc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB3YXNfcmV2b2tlZDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZwcml2LVx1MDAzZXZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCB8fFxuJiM0MztcdCAgICBwcml2LVx1MDAzZXN0YXR1cyA9PSBuZXdfc3RhdHVzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcdHdhc19yZXZva2VkID0gKHByaXYtXHUwMDNlc3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQpO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3X3N0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3RhdHVzID0gbmV3X3N0YXR1czsgLyogVGVtcCBvciBwZXJtYW5lbnRseSByZXZva2VkICovXG4mIzQzO1xuJiM0MztcdFx0aWYgKHdhc19yZXZva2VkKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRFTVBfUkVWT0tFRCBpcyBiZWluZyB1cGdyYWRlZCB0b1xuJiM0MztcdFx0XHQgKiBQRVJNX1JFVk9LRUQuICBUaGUgYnVmZmVyIGlzIGFscmVhZHkgZ29uZSxcbiYjNDM7XHRcdFx0ICogZG9uJiMzOTt0IHdhaXQgb24gaXQgYWdhaW4uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGRtYV9idWZfaW52YWxpZGF0ZV9tYXBwaW5ncyhwcml2LVx1MDAzZWRtYWJ1Zik7XG4mIzQzO1x0XHRkbWFfcmVzdl93YWl0X3RpbWVvdXQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdixcbiYjNDM7XHRcdFx0XHQgICAgICBETUFfUkVTVl9VU0FHRV9CT09LS0VFUCwgZmFsc2UsXG4mIzQzO1x0XHRcdFx0ICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuJiM0MztcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcdFx0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpO1xuJiM0MztcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuJiM0MztcdFx0dW5tYXBfbWFwcGluZ19yYW5nZShwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlLVx1MDAzZWZfbWFwcGluZyxcbiYjNDM7XHRcdFx0XHQgICAgMCwgcHJpdi1cdTAwM2VzaXplLCB0cnVlKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBSZS1hcm0gdGhlIHJlZ2lzdGVyZWQga3JlZiByZWZlcmVuY2UgYW5kIHRoZVxuJiM0MztcdFx0ICogY29tcGxldGlvbiBzbyB0aGUgcG9zdC1yZXZva2Ugc3RhdGUgbWF0Y2hlcyB0aGVcbiYjNDM7XHRcdCAqIHBvc3QtY3JlYXRpb24gc3RhdGUuICBBbiB1bi1yZXZva2UgZm9sbG93ZWQgYnkgYVxuJiM0MztcdFx0ICogbmV3IG1hcHBpbmcgbmVlZHMgdGhlIGtyZWYgdG8gYmUgbm9uLXplcm8gYmVmb3JlXG4mIzQzO1x0XHQgKiBrcmVmX2dldCgpLCBhbmQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKClcbiYjNDM7XHRcdCAqIGRlbGVnYXRlcyBpdHMgZHJhaW4gYmFjayB0aHJvdWdoIHRoaXMgcmV2b2tlXG4mIzQzO1x0XHQgKiBwYXRoIG9uIGEgcG9zc2libHktYWxyZWFkeS1yZXZva2VkIGRtYS1idWYuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuJiM0MztcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2Vjb21wKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cHJpdi1cdTAwM2VzdGF0dXMgPSBWRklPX1BDSV9ETUFCVUZfT0s7XG4mIzQzO1x0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4gXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4gXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdG1wO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSG9sZGluZyBtZW1vcnlfbG9jayBlbnN1cmVzIGEgcmFjaW5nIFZNQSBmYXVsdCBvYnNlcnZlc1xuJiM0MztcdCAqIHByaXYtXHUwMDNlc3RhdHVzIHByb3Blcmx5LlxuJiM0MztcdCAqL1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcywgZG1hYnVmc19lbG0pIHtcbiBcdFx0aWYgKCFnZXRfZmlsZV9hY3RpdmUoXHUwMDI2cHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlZmlsZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChwcml2LVx1MDAzZXJldm9rZWQgIT0gcmV2b2tlZCkge1xuLVx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4tXHRcdFx0aWYgKHJldm9rZWQpXG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSB0cnVlO1xuLVx0XHRcdGRtYV9idWZfaW52YWxpZGF0ZV9tYXBwaW5ncyhwcml2LVx1MDAzZWRtYWJ1Zik7XG4tXHRcdFx0ZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsXG4tXHRcdFx0XHRcdCAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSxcbi1cdFx0XHRcdFx0ICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuLVx0XHRcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbi1cdFx0XHRpZiAocmV2b2tlZCkge1xuLVx0XHRcdFx0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpO1xuLVx0XHRcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIFJlLWFybSB0aGUgcmVnaXN0ZXJlZCBrcmVmIHJlZmVyZW5jZSBhbmQgdGhlXG4tXHRcdFx0XHQgKiBjb21wbGV0aW9uIHNvIHRoZSBwb3N0LXJldm9rZSBzdGF0ZSBtYXRjaGVzIHRoZVxuLVx0XHRcdFx0ICogcG9zdC1jcmVhdGlvbiBzdGF0ZS4gIEFuIHVuLXJldm9rZSBmb2xsb3dlZCBieSBhXG4tXHRcdFx0XHQgKiBuZXcgbWFwcGluZyBuZWVkcyB0aGUga3JlZiB0byBiZSBub24temVybyBiZWZvcmVcbi1cdFx0XHRcdCAqIGtyZWZfZ2V0KCksIGFuZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKVxuLVx0XHRcdFx0ICogZGVsZWdhdGVzIGl0cyBkcmFpbiBiYWNrIHRocm91Z2ggdGhpcyByZXZva2Vcbi1cdFx0XHRcdCAqIHBhdGggb24gYSBwb3NzaWJseS1hbHJlYWR5LXJldm9rZWQgZG1hLWJ1Zi5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0a3JlZl9pbml0KFx1MDAyNnByaXYtXHUwMDNla3JlZik7XG4tXHRcdFx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuLVx0XHRcdFx0cHJpdi1cdTAwM2VyZXZva2VkID0gZmFsc2U7XG4tXHRcdFx0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4tXHRcdFx0fVxuLVx0XHR9XG4mIzQzO1x0XHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdiwgcmV2b2tlZCA/XG4mIzQzO1x0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCA6XG4mIzQzO1x0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX09LKTtcbiBcdFx0ZnB1dChwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlKTtcbiBcdH1cbiB9XG5AQCAtNDA0LDMgJiM0Mzs3MDYsMTE3IEBAIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdH1cbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4mIzQzO1x0c2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgZGJfcmV2b2tlO1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2ZGV2LVx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXG4mIzQzO1x0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuJiM0MztcdFx0XHRcdCBzaXplb2YoZGJfcmV2b2tlKSk7XG4mIzQzO1x0aWYgKHJldCAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmRiX3Jldm9rZSwgYXJnLCBzaXplb2YoZGJfcmV2b2tlKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfcmV2b2tlLmRtYWJ1Zl9mZCk7XG4mIzQzO1x0aWYgKElTX0VSUihkbWFidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2FuaXR5LWNoZWNrIHRoZSBETUFCVUYgaXMgcmVhbGx5IGEgdmZpb19wY2lfZG1hX2J1ZiBfYW5kX1xuJiM0MztcdCAqIHJlbGF0ZXMgdG8gdGhlIFZGSU8gZGV2aWNlIGl0IHdhcyBwcm92aWRlZCB3aXRoLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSWYgdGhlIERNQUJVRiByZWxhdGVzIHRvIHRoaXMgdmRldiB0aGVuIHByaXYtXHUwMDNldmRldiBpc1xuJiM0MztcdCAqIHN0YWJsZSBiZWNhdXNlIHRoaXMgb3BlbiBmZCBwcmV2ZW50cyBjbGVhbnVwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSWYgaXQgcmVsYXRlcyB0byBhIGRpZmZlcmVudCB2ZGV2LCByZWFkaW5nIHByaXYtXHUwMDNldmRldiBtaWdodFxuJiM0MztcdCAqIHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgY2xlYW51cCBvbiB0aGF0IGRldmljZS4gIEJ1dCBpZiBzbyxcbiYjNDM7XHQgKiBpdCBwb2ludHMgdG8gYSBub24tbWF0Y2hpbmcgdmRldiBvciBOVUxMIGFuZCBpcyB1bnVzYWJsZVxuJiM0MztcdCAqIGVpdGhlciB3YXkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcyB8fFxuJiM0MztcdCAgICBSRUFEX09OQ0UocHJpdi1cdTAwM2V2ZGV2KSAhPSB2ZGV2KSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X2J1ZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChyd3NlbV93cml0ZSwgXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jaykge1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlc3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVCQURGRDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhwcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCk7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X3B1dF9idWY6XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIF9fdXNlciAqYXJnLFxuJiM0MztcdHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBkYl9hdHRyO1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2ZGV2LVx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXG4mIzQzO1x0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuJiM0MztcdFx0XHRcdCBzaXplb2YoZGJfYXR0cikpO1xuJiM0MztcdGlmIChyZXQgIT0gMSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkYl9hdHRyLCBhcmcsIHNpemVvZihkYl9hdHRyKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfYXR0ci5kbWFidWZfZmQpO1xuJiM0MztcdGlmIChJU19FUlIoZG1hYnVmKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XG4mIzQzO1xuJiM0MztcdC8qIFZlcmlmeSBETUFCVUY6IHNlZSBjb21tZW50cyBpbiB2ZmlvX3BjaV9kbWFfYnVmX3Jldm9rZSgpICovXG4mIzQzO1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcdGlmIChkbWFidWYtXHUwMDNlb3BzICE9IFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHxcbiYjNDM7XHQgICAgUkVBRF9PTkNFKHByaXYtXHUwMDNldmRldikgIT0gdmRldikge1xuJiM0MztcdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9idWY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGRiX2F0dHIubWVtYXR0cikge1xuJiM0MztcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfTkM6XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQzpcbiYjNDM7XHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VtZW1hdHRyLCBkYl9hdHRyLm1lbWF0dHIpO1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gLUVOT0VOVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXRfcHV0X2J1ZjpcbiYjNDM7XHRkbWFfYnVmX3B1dChkbWFidWYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLmIzYzcyZGYwMDJjNDQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMjMsNiAmIzQzOzIzLDI4IEBAIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQge1xuIFx0Ym9vbFx0XHRcdHRlc3RfbWVtO1xuIH07XG4gXG4mIzQzO2VudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMge1xuJiM0MztcdFZGSU9fUENJX0RNQUJVRl9PSyA9IDAsXG4mIzQzO1x0VkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCA9IDEsXG4mIzQzO1x0VkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCA9IDIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBkbWFidWZzX2VsbTtcbiYjNDM7XHRzaXplX3Qgc2l6ZTtcbiYjNDM7XHRzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjO1xuJiM0MztcdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyO1xuJiM0MztcdHN0cnVjdCBmaWxlICp2ZmlsZTtcbiYjNDM7XHR1MzIgbnJfcmFuZ2VzO1xuJiM0MztcdHN0cnVjdCBrcmVmIGtyZWY7XG4mIzQzO1x0c3RydWN0IGNvbXBsZXRpb24gY29tcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtYV9wZ29mZl9hZGp1c3Q7XG4mIzQzO1x0dTMyIG1lbWF0dHI7XG4mIzQzO1x0ZW51bSB2ZmlvX3BjaV9kbWFfYnVmX3N0YXR1cyBzdGF0dXM7XG4mIzQzO307XG4mIzQzO1xuIGJvb2wgdmZpb19wY2lfaW50eF9tYXNrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9pbnR4X3VubWFzayhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIFxuQEAgLTY4LDcgJiM0Mzs5MCw4IEBAIHZvaWQgdmZpb19jb25maWdfZnJlZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIGludCB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0XHRcdCAgICAgcGNpX3Bvd2VyX3Qgc3RhdGUpO1xuIFxuLXZvaWQgdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4mIzQzO3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuJiM0Mzt2b2lkIHZmaW9fcGNpX3VucmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB1MTYgdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHRcdHUxNiBjbWQpO1xuQEAgLTExNCwxMiAmIzQzOzEzNywzMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0cmV0dXJuIChwZGV2LVx1MDAzZWNsYXNzIFx1MDAzZVx1MDAzZSA4KSA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0E7XG4gfVxuIFxuJiM0MztpbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdnBkbWFidWYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3Bmbik7XG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCAgIHU2NCBwaHlzX3N0YXJ0LCB1NjQgcmVxX2xlbixcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcmVzX2luZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuJiM0Mzt2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgX191c2VyICphcmcsXG4gXHRcdFx0XHQgIHNpemVfdCBhcmdzeik7XG4tdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbi12b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4mIzQzO1x0c2l6ZV90IGFyZ3N6KTtcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIF9fdXNlciAqYXJnLFxuJiM0MztcdHNpemVfdCBhcmdzeik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludFxuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuQEAgLTEyOCwxMiAmIzQzOzE3MCwyMSBAQCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiB7XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4mIzQzO1x0c2l6ZV90IGFyZ3N6KVxuIHtcbiYjNDM7XHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4tXHRcdFx0XHRcdCBib29sIHJldm9rZWQpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKFxuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBfX3VzZXIgKmFyZyxcbiYjNDM7XHRzaXplX3QgYXJnc3opXG4ge1xuJiM0MztcdHJldHVybiAtRU5PVFRZO1xuIH1cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaCBiL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oXG5pbmRleCA4NzNkZTIwYTIyNDc1OS4uNGM0MmE3YjJlZTg1NTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcbkBAIC02Nyw5ICYjNDM7NjcsMjIgQEAgZW51bSBwY2lfcDJwZG1hX21hcF90eXBlIHtcbiBcdFBDSV9QMlBETUFfTUFQX1RIUlVfSE9TVF9CUklER0UsXG4gfTtcbiBcbi0jaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcbiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BX0NPUkVcbiBpbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgaW50IGJhcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXG4gaW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbiBcdFx0dTY0IG9mZnNldCk7XG4gaW50IHBjaV9wMnBkbWFfZGlzdGFuY2VfbWFueShzdHJ1Y3QgcGNpX2RldiAqcHJvdmlkZXIsIHN0cnVjdCBkZXZpY2UgKipjbGllbnRzLFxuQEAgLTg5LDE1ICYjNDM7MTAyLDYgQEAgc3NpemVfdCBwY2lfcDJwZG1hX2VuYWJsZV9zaG93KGNoYXIgKnBhZ2UsIHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2LFxuIGVudW0gcGNpX3AycGRtYV9tYXBfdHlwZSBwY2lfcDJwZG1hX21hcF90eXBlKHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2UgKmRldik7XG4gI2Vsc2UgLyogQ09ORklHX1BDSV9QMlBETUEgKi9cbi1zdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLXtcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi19XG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi1cdFx0XHRcdFx0XHRcdCAgIGludCBiYXIpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLFxuIFx0XHRzaXplX3Qgc2l6ZSwgdTY0IG9mZnNldClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDJjNDQ1NDU4M2MxMTViLi41MzFhZWMzNTU2ODZiMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC01NTcsNyAmIzQzOzU1Nyw3IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHUxNlx0XHRwYXNpZF9jYXA7XHQvKiBQQVNJRCBDYXBhYmlsaXR5IG9mZnNldCAqL1xuIFx0dTE2XHRcdHBhc2lkX2ZlYXR1cmVzO1xuICNlbmRpZlxuLSNpZmRlZiBDT05GSUdfUENJX1AyUERNQVxuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFfQ09SRVxuIFx0c3RydWN0IHBjaV9wMnBkbWEgX19yY3UgKnAycGRtYTtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX1BDSV9ET0VcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5pbmRleCA4OTE2NWI3NjllNWMxNi4uYTJmNTg2ZTRmY2Q4ZDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XG4gXHRib29sXHRcdFx0bmVlZHNfcG1fcmVzdG9yZToxO1xuIFx0Ym9vbFx0XHRcdHBtX2ludHhfbWFza2VkOjE7XG4gXHRib29sXHRcdFx0cG1fcnVudGltZV9lbmdhZ2VkOjE7XG4mIzQzO1x0Ym9vbFx0XHRcdHphcF9iYXJzX29uX3Jldm9rZToxO1xuIFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVx0KnBjaV9zYXZlZF9zdGF0ZTtcbiBcdHN0cnVjdCBwY2lfc2F2ZWRfc3RhdGVcdCpwbV9zYXZlO1xuIFx0aW50XHRcdFx0aW9ldmVudGZkc19ucjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZWUuLmFiMzBiODkzOTlkMDM4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuQEAgLTE1MzQsNiAmIzQzOzE1MzQsNTMgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XG4gICovXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIEdpdmVuIGEgZG1hX2J1ZiBmZCBwcmV2aW91c2x5IGNyZWF0ZWQgYnlcbiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBhIFNFVCBvZiB0aGlzIGZlYXR1cmUgcmVxdWVzdHMgdGhhdFxuJiM0MzsgKiBhY2Nlc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgRE1BQlVGIGlzIGltbWVkaWF0ZWx5IGFuZCBwZXJtYW5lbnRseVxuJiM0MzsgKiByZXZva2VkLiAgT24gc3VjY2Vzc2Z1bCByZXR1cm4sIHRoZSBidWZmZXIgaXMgbm90IGFjY2Vzc2libGVcbiYjNDM7ICogdGhyb3VnaCBhbnkgbW1hcCgpIG9yIGRtYS1idWYgaW1wb3J0LiAgVGhlIGJ1ZmZlciBpcyBwZXJtYW5lbnRseVxuJiM0MzsgKiBkaXNhYmxlZCwgYW5kIFZGSU8gcmVmdXNlcyBhbGwgbWFwLCBtbWFwLCBhdHRhY2gsIGV0Yy4gcmVxdWVzdHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6XG4mIzQzOyAqXG4mIzQzOyAqICBFQkFERiwgRUlOVkFMOiBkbWFidWZfZmQgaXMgbm90IGEgRE1BQlVGIGZkLlxuJiM0MzsgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuXG4mIzQzOyAqICBFQkFERkQ6IFRoZSBETUFCVUYgaXMgYWxyZWFkeSByZXZva2VkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIDEzXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSB7XG4mIzQzO1x0X19zMzJcdGRtYWJ1Zl9mZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBHaXZlbiBhIGRtYV9idWYgZmQgcHJldmlvdXNseSBjcmVhdGVkIGJ5XG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiwgU0VUIHRoZSBtZW1vcnkgYXR0cmlidXRlIHRoYXQgd2lsbCBiZVxuJiM0MzsgKiB1c2VkIGJ5IGZ1dHVyZSBtbWFwKClzIG9mIHRoYXQgZmQuICBTRVR0aW5nIGEgbmV3IGF0dHJpYnV0ZSBkb2VzXG4mIzQzOyAqIG5vdCBhZmZlY3QgZXhpc3RpbmcgVk1Bcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGRlZmF1bHQsIGlmIG5vIHByZXZpb3VzIFNFVCBoYXMgYmVlbiBwZXJmb3JtZWQsIGlzIE5DLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEgYW5kIGVycm5vIGlzIHNldCBvbiBmYWlsdXJlOlxuJiM0MzsgKlxuJiM0MzsgKiAgRUJBREYsIEVJTlZBTDogZG1hYnVmX2ZkIGlzIG5vdCBhIERNQUJVRiBmZC5cbiYjNDM7ICogIEVOT0RFVjogVGhlIGRtYWJ1Zl9mZCBkb2VzIG5vdCBtYXRjaCB0aGlzIFZGSU8gZGV2aWNlLlxuJiM0MzsgKiAgRU5PRU5UOiBUaGUgZ2l2ZW4gbWVtYXR0ciBpcyBub3Qgc3VwcG9ydGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUiAxNFxuJiM0MztcbiYjNDM7LyogVmFsaWQgbWVtb3J5IGF0dHJpYnV0ZXMgZm9yIHRoZSBtZW1hdHRyIGZpZWxkICovXG4mIzQzO2VudW0gdmZpb19kZXZpY2VfZG1hX2J1Zl9tZW1hdHRyIHtcbiYjNDM7XHRWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQyA9IDAsIC8qIHBncHJvdF9ub25jYWNoZWQgKi9cbiYjNDM7XHRWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQyA9IDEsIC8qIHBncHJvdF93cml0ZWNvbWJpbmUgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciB7XG4mIzQzO1x0X19zMzJcdGRtYWJ1Zl9mZDtcbiYjNDM7XHRfX3UzMlx0bWVtYXR0cjtcbiYjNDM7fTtcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfbW1hcCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRklPIGZlYXR1cmVzIChWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIGFuZCBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUikgYW5kIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsaW5nIHRvIHVzZSBETUFCVUYtYmFja2VkIG1tYXBzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmUzMDc5NzdiNjE0OTM1NTA4OWJhMDgzMTMzYWYyMTM3ZGQxNDViMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMDA6MjA6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGM4ZDRiOTEzZjI2YzEyLi43MTM4NjFhZjQ0ODQ2YSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIwNjI2LDcgJiM0MzsyMDYyNiw3IEBAIEI6CWh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZwogQzoJaXJjOi8vaXJjLm9mdGMubmV0L2xpbnV4LXBjaQogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9wY2kvcGNpLmdpdAogRjoJRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BjaS9wMnBkbWEucnN0Ci1GOglkcml2ZXJzL3BjaS9wMnBkbWEuYwomIzQzO0Y6CWRyaXZlcnMvcGNpL3AycGRtYSoKIEY6CWluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oCiAKIFBDSSBQT1dFUiBDT05UUk9MCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9LY29uZmlnIGIvZHJpdmVycy9wY2kvS2NvbmZpZwppbmRleCAzM2M4ODQzMmI3Mjg3NS4uNTlkNzBiYzg0Y2M5YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvS2NvbmZpZwpAQCAtMjA2LDExICYjNDM7MjA2LDcgQEAgY29uZmlnIFBDSUVfVFBICiBjb25maWcgUENJX1AyUERNQQogCWJvb2wgJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnQmIzM0OwogCWRlcGVuZHMgb24gWk9ORV9ERVZJQ0UKLQkjCi0JIyBUaGUgbmVlZCBmb3IgdGhlIHNjYXR0ZXJsaXN0IERNQSBidXMgYWRkcmVzcyBmbGFnIG1lYW5zIFBDSSBQMlBETUEKLQkjIHJlcXVpcmVzIDY0Yml0Ci0JIwotCWRlcGVuZHMgb24gNjRCSVQKJiM0MzsJc2VsZWN0IFBDSV9QMlBETUFfQ09SRQogCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUgogCXNlbGVjdCBORUVEX1NHX0RNQV9GTEFHUwogCWhlbHAKQEAgLTIyNiw2ICYjNDM7MjIyLDEwIEBAIGNvbmZpZyBQQ0lfUDJQRE1BCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKJiM0Mztjb25maWcgUENJX1AyUERNQV9DT1JFCiYjNDM7CWRlZmF1bHQgbgomIzQzOwlib29sCiYjNDM7CiBjb25maWcgUENJX0xBQkVMCiAJZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpCiAJc2VsZWN0IE5MUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCA0MWViYzNiOWE1MTgyNC4uMGIzMjU3MmQ1N2ExNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBvYmotJChDT05GSUdfUENJX1NZU0NBTEwpCSYjNDM7PSBzeXNjYWxsLm8KIG9iai0kKENPTkZJR19QQ0lfU1RVQikJCSYjNDM7PSBwY2ktc3R1Yi5vCiBvYmotJChDT05GSUdfUENJX1BGX1NUVUIpCSYjNDM7PSBwY2ktcGYtc3R1Yi5vCiBvYmotJChDT05GSUdfUENJX0VDQU0pCQkmIzQzOz0gZWNhbS5vCiYjNDM7b2JqLSQoQ09ORklHX1BDSV9QMlBETUFfQ09SRSkJJiM0Mzs9IHAycGRtYV9jb3JlLm8KIG9iai0kKENPTkZJR19QQ0lfUDJQRE1BKQkmIzQzOz0gcDJwZG1hLm8KIG9iai0kKENPTkZJR19YRU5fUENJREVWX0ZST05URU5EKSAmIzQzOz0geGVuLXBjaWZyb250Lm8KIG9iai0kKENPTkZJR19WR0FfQVJCKQkJJiM0Mzs9IHZnYWFyYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wMnBkbWEuYyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jCmluZGV4IDdjODk4NTQyYWY4ZDVlLi41MGIxYTdkYWY1NWNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcDJwZG1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcDJwZG1hLmMKQEAgLTIxLDEyICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9idWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKIAotc3RydWN0IHBjaV9wMnBkbWEgewotCXN0cnVjdCBnZW5fcG9vbCAqcG9vbDsKLQlib29sIHAycG1lbV9wdWJsaXNoZWQ7Ci0Jc3RydWN0IHhhcnJheSBtYXBfdHlwZXM7Ci0Jc3RydWN0IHAycGRtYV9wcm92aWRlciBtZW1bUENJX1NURF9OVU1fQkFSU107Ci19OwomIzQzOyNpbmNsdWRlICYjMzQ7cDJwZG1hLmgmIzM0OwogCiBzdHJ1Y3QgcGNpX3AycGRtYV9wYWdlbWFwIHsKIAlzdHJ1Y3QgZGV2X3BhZ2VtYXAgcGdtYXA7CkBAIC0yMjYsMTEwICYjNDM7MjIxLDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHAycGRtYV9wZ21hcF9vcHMgPSB7CiAJLmZvbGlvX2ZyZWUgPSBwMnBkbWFfZm9saW9fZnJlZSwKIH07CiAKLXN0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZSh2b2lkICpkYXRhKQomIzQzO3ZvaWQgcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhOwotCXN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7Ci0KLQlwMnBkbWEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtJmd0O3AycGRtYSwgMSk7Ci0JaWYgKCFwMnBkbWEpCi0JCXJldHVybjsKLQotCS8qIEZsdXNoIGFuZCBkaXNhYmxlIHBjaV9hbGxvY19wMnBfbWVtKCkgKi8KLQlwZGV2LSZndDtwMnBkbWEgPSBOVUxMOwotCWlmIChwMnBkbWEtJmd0O3Bvb2wpCi0JCXN5bmNocm9uaXplX3JjdSgpOwotCXhhX2Rlc3Ryb3koJmFtcDtwMnBkbWEtJmd0O21hcF90eXBlcyk7Ci0KIAlpZiAoIXAycGRtYS0mZ3Q7cG9vbCkKIAkJcmV0dXJuOwogCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwogCWdlbl9wb29sX2Rlc3Ryb3kocDJwZG1hLSZndDtwb29sKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDtwZGV2LSZndDtkZXYua29iaiwgJmFtcDtwMnBtZW1fZ3JvdXApOwogfQogCi0vKioKLSAqIHBjaW1fcDJwZG1hX2luaXQgLSBJbml0aWFsaXNlIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXJzCi0gKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3IKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBwZWVyLXRvLXBlZXIgRE1BIGluZnJhc3RydWN0dXJlCi0gKiBmb3IgYSBQQ0kgZGV2aWNlLiBJdCBhbGxvY2F0ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhCi0gKiBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgUDJQRE1BIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBtYXBwaW5nIHR5cGUKLSAqIHRyYWNraW5nLgotICovCi1pbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwOwotCWludCBpLCByZXQ7Ci0KLQlwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtJmd0O3AycGRtYSwgMSk7Ci0JaWYgKHAycCkKLQkJcmV0dXJuIDA7Ci0KLQlwMnAgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwMnApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JeGFfaW5pdCgmYW1wO3AycC0mZ3Q7bWFwX3R5cGVzKTsKLQkvKgotCSAqIEl0ZXJhdGUgb3ZlciBhbGwgc3RhbmRhcmQgUENJIEJBUnMgYW5kIHJlY29yZCBvbmx5IHRob3NlIHRoYXQKLQkgKiBjb3JyZXNwb25kIHRvIE1NSU8gcmVnaW9ucy4gU2tpcCBub24tbWVtb3J5IHJlc291cmNlcyAoZS5nLiBJL08KLQkgKiBwb3J0IEJBUnMpIHNpbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgZm9yIHBlZXItdG8tcGVlciAoUDJQKQotCSAqIHRyYW5zYWN0aW9ucy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgUENJX1NURF9OVU1fQkFSUzsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICZhbXA7IElPUkVTT1VSQ0VfTUVNKSkKLQkJCWNvbnRpbnVlOwotCi0JCXAycC0mZ3Q7bWVtW2ldLm93bmVyID0gJmFtcDtwZGV2LSZndDtkZXY7Ci0JCXAycC0mZ3Q7bWVtW2ldLmJ1c19vZmZzZXQgPQotCQkJcGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOwotCX0KLQotCXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCgmYW1wO3BkZXYtJmd0O2RldiwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9wMnA7Ci0KLQlyY3VfYXNzaWduX3BvaW50ZXIocGRldi0mZ3Q7cDJwZG1hLCBwMnApOwotCXJldHVybiAwOwotCi1vdXRfcDJwOgotCWRldm1fa2ZyZWUoJmFtcDtwZGV2LSZndDtkZXYsIHAycCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX2luaXQpOwotCi0vKioKLSAqIHBjaW1fcDJwZG1hX3Byb3ZpZGVyIC0gR2V0IHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXIKLSAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvcgotICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlcgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyIGZvciBhIFBDSSBkZXZpY2UuIFRoZSBsaWZldGltZQotICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlCi0gKiBkcml2ZXIuIEEgZHJpdmVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBtdXN0IGVuc3VyZSB0aGF0IGFsbCByZWZlcmVuY2VzIHRvIHRoZQotICogcHJvdmlkZXIsIGFuZCBhbnkgRE1BIG1hcHBpbmdzIGNyZWF0ZWQgZm9yIGFueSBNTUlPLCBhcmUgYWxsIGNsZWFuZWQgdXAKLSAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy4KLSAqCi0gKiBTaW5jZSBQMlAgaXMgYWxtb3N0IGFsd2F5cyBzaGFyZWQgd2l0aCBhIHNlY29uZCBkcml2ZXIgdGhpcyBtZWFucyBzb21lIHN5c3RlbQotICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8mIzM5O3MgRE1BIG11c3QgYmUgaW4gcGxhY2UgdG8gdXNlIHRoaXMKLSAqIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSBhIHJldm9rZSBjYW4gYmUgYnVpbHQgdXNpbmcgRE1BQlVGLgotICovCi1zdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcikKLXsKLQlzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwOwotCi0JaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgJmFtcDsgSU9SRVNPVVJDRV9NRU0pKQotCQlyZXR1cm4gTlVMTDsKLQotCXAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi0mZ3Q7cDJwZG1hLCAxKTsKLQlpZiAoV0FSTl9PTighcDJwKSkKLQkJLyogU29tZW9uZSBmb3Jnb3QgdG8gY2FsbCB0byBwY2ltX3AycGRtYV9pbml0KCkgYmVmb3JlICovCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuICZhbXA7cDJwLSZndDttZW1bYmFyXTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX3Byb3ZpZGVyKTsKLQogc3RhdGljIGludCBwY2lfcDJwZG1hX3NldHVwX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTsKQEAgLTkzMiw4ICYjNDM7ODMzLDggQEAgdm9pZCAqcGNpX2FsbG9jX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUpCiAJc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTsKIAogCS8qCi0JICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2UoKSB0bwotCSAqIGVuc3VyZSBwZGV2LSZndDtwMnBkbWEgaXMgbm9uLU5VTEwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKJiM0MzsJICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbCgpCiYjNDM7CSAqIHRvIGVuc3VyZSBwZGV2LSZndDtwMnBkbWEgaXMgbm9uLU5VTEwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKIAkgKiByZWFkLWxvY2suCiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmggYi9kcml2ZXJzL3BjaS9wMnBkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOTQ2MzgzODA5OTgxNDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wMnBkbWEuaApAQCAtMCwwICYjNDM7MSwyOSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBQQ0kgcGVlci10by1wZWVyIERNQSBzdXBwb3J0LgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1BDSV9QMlBETUFfSAomIzQzOyNkZWZpbmUgX1BDSV9QMlBETUFfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9nZW5hbGxvYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2ktcDJwZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBwY2lfcDJwZG1hIHsKJiM0MzsJc3RydWN0IGdlbl9wb29sICpwb29sOwomIzQzOwlib29sIHAycG1lbV9wdWJsaXNoZWQ7CiYjNDM7CXN0cnVjdCB4YXJyYXkgbWFwX3R5cGVzOwomIzQzOwlzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyIG1lbVtQQ0lfU1REX05VTV9CQVJTXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUENJX1AyUERNQQomIzQzO3ZvaWQgcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkJICAgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSkKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuYyBiL2RyaXZlcnMvcGNpL3AycGRtYV9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJiMjEzOGJmMmJjN2I3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuYwpAQCAtMCwwICYjNDM7MSwxMTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydCBjb3JlLCBwcm92aWRpbmcgYSBiYXJlLWJvbmVzCiYjNDM7ICogcGNpbV9wMnBkbWFfcHJvdmlkZXIoKSBpbnRlcmZhY2UgdG8gZHJpdmVycyBldmVuIGlmIGZ1bGwgUDJQRE1BCiYjNDM7ICogaXNuJiMzOTt0IHByZXNlbnQuICBUaGUgZnVsbCBQMlBETUEgZmVhdHVyZSBpcyBpbiBwMnBkbWEuYyAoc2VlCiYjNDM7ICogQ09ORklHX1BDSV9QMlBETUEpLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIExvZ2FuIEd1bnRob3JwZQomIzQzOyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBNaWNyb3NlbWkgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIENocmlzdG9waCBIZWxsd2lnCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE4LCBFaWRldGljb20gSW5jLgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtwY2ktcDJwZG1hOiAmIzM0OyBmbXQKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3R5cGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZ2VuYWxsb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXAycGRtYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3AycGRtYS5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGF0YTsKJiM0MzsJc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTsKJiM0MzsKJiM0MzsJcDJwZG1hID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LSZndDtwMnBkbWEsIDEpOwomIzQzOwlpZiAoIXAycGRtYSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRmx1c2ggYW5kIGRpc2FibGUgcGNpX2FsbG9jX3AycF9tZW0oKSAqLwomIzQzOwlwZGV2LSZndDtwMnBkbWEgPSBOVUxMOwomIzQzOwlwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChwZGV2LCBwMnBkbWEpOwomIzQzOwl4YV9kZXN0cm95KCZhbXA7cDJwZG1hLSZndDttYXBfdHlwZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVycwomIzQzOyAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvcgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZQomIzQzOyAqIGZvciBhIFBDSSBkZXZpY2UuIEl0IGFsbG9jYXRlcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEKJiM0MzsgKiBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgUDJQRE1BIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBtYXBwaW5nIHR5cGUKJiM0MzsgKiB0cmFja2luZy4KJiM0MzsgKi8KJiM0MztpbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfcDJwZG1hICpwMnA7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CXAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi0mZ3Q7cDJwZG1hLCAxKTsKJiM0MzsJaWYgKHAycCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwMnAgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcDJwKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXhhX2luaXQoJmFtcDtwMnAtJmd0O21hcF90eXBlcyk7CiYjNDM7CS8qCiYjNDM7CSAqIEl0ZXJhdGUgb3ZlciBhbGwgc3RhbmRhcmQgUENJIEJBUnMgYW5kIHJlY29yZCBvbmx5IHRob3NlIHRoYXQKJiM0MzsJICogY29ycmVzcG9uZCB0byBNTUlPIHJlZ2lvbnMuIFNraXAgbm9uLW1lbW9yeSByZXNvdXJjZXMgKGUuZy4gSS9PCiYjNDM7CSAqIHBvcnQgQkFScykgc2luY2UgdGhleSBjYW5ub3QgYmUgdXNlZCBmb3IgcGVlci10by1wZWVyIChQMlApCiYjNDM7CSAqIHRyYW5zYWN0aW9ucy4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBQQ0lfU1REX05VTV9CQVJTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICZhbXA7IElPUkVTT1VSQ0VfTUVNKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXAycC0mZ3Q7bWVtW2ldLm93bmVyID0gJmFtcDtwZGV2LSZndDtkZXY7CiYjNDM7CQlwMnAtJmd0O21lbVtpXS5idXNfb2Zmc2V0ID0KJiM0MzsJCQlwY2lfYnVzX2FkZHJlc3MocGRldiwgaSkgLSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KCZhbXA7cGRldi0mZ3Q7ZGV2LCBwY2lfcDJwZG1hX3JlbGVhc2UsIHBkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcDJwOwomIzQzOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIocGRldi0mZ3Q7cDJwZG1hLCBwMnApOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfcDJwOgomIzQzOwlkZXZtX2tmcmVlKCZhbXA7cGRldi0mZ3Q7ZGV2LCBwMnApOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2ltX3AycGRtYV9pbml0KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2ltX3AycGRtYV9wcm92aWRlciAtIEdldCBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyCiYjNDM7ICogQHBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGVuYWJsZSBQMlBETUEgZm9yCiYjNDM7ICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlcgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBnZXRzIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXIgZm9yIGEgUENJIGRldmljZS4gVGhlIGxpZmV0aW1lCiYjNDM7ICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlCiYjNDM7ICogZHJpdmVyLiBBIGRyaXZlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byB0aGUKJiM0MzsgKiBwcm92aWRlciwgYW5kIGFueSBETUEgbWFwcGluZ3MgY3JlYXRlZCBmb3IgYW55IE1NSU8sIGFyZSBhbGwgY2xlYW5lZCB1cAomIzQzOyAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy4KJiM0MzsgKgomIzQzOyAqIFNpbmNlIFAyUCBpcyBhbG1vc3QgYWx3YXlzIHNoYXJlZCB3aXRoIGEgc2Vjb25kIGRyaXZlciB0aGlzIG1lYW5zIHNvbWUgc3lzdGVtCiYjNDM7ICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8mIzM5O3MgRE1BIG11c3QgYmUgaW4gcGxhY2UgdG8gdXNlIHRoaXMKJiM0MzsgKiBmdW5jdGlvbi4gRm9yIGV4YW1wbGUgYSByZXZva2UgY2FuIGJlIGJ1aWx0IHVzaW5nIERNQUJVRi4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfcDJwZG1hICpwMnA7CiYjNDM7CiYjNDM7CWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpICZhbXA7IElPUkVTT1VSQ0VfTUVNKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtJmd0O3AycGRtYSwgMSk7CiYjNDM7CWlmIChXQVJOX09OKCFwMnApKQomIzQzOwkJLyogU29tZW9uZSBmb3Jnb3QgdG8gY2FsbCB0byBwY2ltX3AycGRtYV9pbml0KCkgYmVmb3JlICovCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cDJwLSZndDttZW1bYmFyXTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfcHJvdmlkZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnIGIvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnCmluZGV4IDI5NmJmMDFlMTg1ZWNhLi42N2EyYWUxZmJjMDRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZwpAQCAtNiw2ICYjNDM7Niw4IEBAIGNvbmZpZyBWRklPX1BDSV9DT1JFCiAJdHJpc3RhdGUKIAlzZWxlY3QgVkZJT19WSVJRRkQKIAlzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSCiYjNDM7CXNlbGVjdCBQQ0lfUDJQRE1BX0NPUkUKJiM0MzsJc2VsZWN0IERNQV9TSEFSRURfQlVGRkVSCiAKIGNvbmZpZyBWRklPX1BDSV9JTlRYCiAJZGVmX2Jvb2wgeSBpZiAhUzM5MApAQCAtNTYsNyAmIzQzOzU4LDggQEAgY29uZmlnIFZGSU9fUENJX1pERVZfS1ZNCiAJICBUbyBlbmFibGUgczM5MHggS1ZNIHZmaW8tcGNpIGV4dGVuc2lvbnMsIHNheSBZLgogCiBjb25maWcgVkZJT19QQ0lfRE1BQlVGCi0JZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFICZhbXA7JmFtcDsgUENJX1AyUERNQSAmYW1wOyZhbXA7IERNQV9TSEFSRURfQlVGRkVSCiYjNDM7CWRlZl9ib29sIHkgaWYgUENJX1AyUERNQQomIzQzOwlkZXBlbmRzIG9uIFZGSU9fUENJX0NPUkUKIAogc291cmNlICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9tbHg1L0tjb25maWcmIzM0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlIGIvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZQppbmRleCA2MTM4ZjFiZjI0MWRmMC4uODgxNDUyZWE4OWJlMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZQpAQCAtMSw4ICYjNDM7MSw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIAotdmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcubwomIzQzO3ZmaW8tcGNpLWNvcmUteSA6PSB2ZmlvX3BjaV9jb3JlLm8gdmZpb19wY2lfaW50cnMubyB2ZmlvX3BjaV9yZHdyLm8gdmZpb19wY2lfY29uZmlnLm8gdmZpb19wY2lfZG1hYnVmLm8KIHZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk0pICYjNDM7PSB2ZmlvX3BjaV96ZGV2Lm8KLXZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSAmIzQzOz0gdmZpb19wY2lfZG1hYnVmLm8KIG9iai0kKENPTkZJR19WRklPX1BDSV9DT1JFKSAmIzQzOz0gdmZpby1wY2ktY29yZS5vCiAKIHZmaW8tcGNpLXkgOj0gdmZpb19wY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMKaW5kZXggYmIxMjFmNjM1YjlmN2YuLmQ5ZjI2YjBjZTk5MWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMKQEAgLTE3MjUsNiAmIzQzOzE3MjUsMTQgQEAgc3RhdGljIGludCBoaXNpX2FjY192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2UKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXRfdmRldjsKIAomIzQzOwkvKgomIzQzOwkgKiBoaXNpX2FjY192ZmlvX3BjaV9tbWFwKCkgY2FsbHMgZG93biB0bwomIzQzOwkgKiB2ZmlvX3BjaV9jb3JlX21tYXAoKSwgc28gQkFSIG1hcHBpbmdzIGFyZSBzdGlsbAomIzQzOwkgKiBETUFCVUYtYmFja2VkLiAgVGhleSBkb24mIzM5O3QgcmVxdWlyZSBhIHphcCBvbiByZXZva2UsIHNvIG9wdAomIzQzOwkgKiBvdXQ6CiYjNDM7CSAqLwomIzQzOwloaXNpX2FjY192ZGV2LSZndDtjb3JlX2RldmljZS56YXBfYmFyc19vbl9yZXZva2UgPSBmYWxzZTsKJiM0MzsKIAloaXNpX2FjY192ZmlvX2RlYnVnX2luaXQoaGlzaV9hY2NfdmRldik7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jCmluZGV4IGExMGVkNzMzZjBlM2FmLi5iYzZjY2IyZTEzNWMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jCkBAIC01OTAsMTIgJiM0Mzs1OTAsMTAgQEAgc3RhdGljIGludCB2ZmlvX2Jhc2ljX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsCiAJCXZpcnRfbWVtID0gISEobGUxNl90b19jcHUoKnZpcnRfY21kKSAmYW1wOyBQQ0lfQ09NTUFORF9NRU1PUlkpOwogCQluZXdfbWVtID0gISEobmV3X2NtZCAmYW1wOyBQQ0lfQ09NTUFORF9NRU1PUlkpOwogCi0JCWlmICghbmV3X21lbSkgewotCQkJdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwotCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpOwotCQl9IGVsc2UgewomIzQzOwkJaWYgKCFuZXdfbWVtKQomIzQzOwkJCXZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7CiYjNDM7CQllbHNlCiAJCQlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwotCQl9CiAKIAkJLyoKIAkJICogSWYgdGhlIHVzZXIgaXMgd3JpdGluZyBtZW0vaW8gZW5hYmxlIChuZXdfbWVtL2lvKSBhbmQgd2UKQEAgLTYzMSw3ICYjNDM7NjI5LDcgQEAgc3RhdGljIGludCB2ZmlvX2Jhc2ljX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsCiAJCSp2aXJ0X2NtZCB8PSBjcHVfdG9fbGUxNihuZXdfY21kICZhbXA7IG1hc2spOwogCiAJCWlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKQotCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTsKJiM0MzsJCQl2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpOwogCQl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIAl9CiAKQEAgLTcxMiwxNiAmIzQzOzcxMCwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9jYXBfYmFzaWNfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKQogc3RhdGljIHZvaWQgdmZpb19sb2NrX2FuZF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAogCQkJCQkgIHBjaV9wb3dlcl90IHN0YXRlKQogewotCWlmIChzdGF0ZSAmZ3Q7PSBQQ0lfRDNob3QpIHsKLQkJdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwotCQl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7Ci0JfSBlbHNlIHsKJiM0MzsJaWYgKHN0YXRlICZndDs9IFBDSV9EM2hvdCkKJiM0MzsJCXZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7CiYjNDM7CWVsc2UKIAkJZG93bl93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKLQl9CiAKIAl2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgc3RhdGUpOwogCWlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKQotCQl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpOwomIzQzOwkJdmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTsKIAl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIH0KIApAQCAtOTA4LDExICYjNDM7OTA0LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19leHBfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcywKIAkJCQkJCSAmYW1wO2NhcCk7CiAKIAkJaWYgKCFyZXQgJmFtcDsmYW1wOyAoY2FwICZhbXA7IFBDSV9FWFBfREVWQ0FQX0ZMUikpIHsKLQkJCXZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTsKLQkJCXZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTsKJiM0MzsJCQl2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpOwogCQkJcGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LSZndDtwZGV2KTsKIAkJCWlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKQotCQkJCXZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7CiYjNDM7CQkJCXZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7CiAJCQl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIAkJfQogCX0KQEAgLTk5MywxMSAmIzQzOzk4OCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fYWZfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcywKIAkJCQkJCSZhbXA7Y2FwKTsKIAogCQlpZiAoIXJldCAmYW1wOyZhbXA7IChjYXAgJmFtcDsgUENJX0FGX0NBUF9GTFIpICZhbXA7JmFtcDsgKGNhcCAmYW1wOyBQQ0lfQUZfQ0FQX1RQKSkgewotCQkJdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwotCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpOwomIzQzOwkJCXZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7CiAJCQlwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHZkZXYtJmd0O3BkZXYpOwogCQkJaWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpCi0JCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTsKJiM0MzsJCQkJdmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTsKIAkJCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwppbmRleCAwNTBlNzU0Mjk1MmVkMS4uMDA1OWMxNzZkNjI3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYXBlcnR1cmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V2ZW50ZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CkBAIC0zMTksOCAmIzQzOzMyMSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfcnVudGltZV9wbV9lbnRyeShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJICogVGhlIHZkZXYgcG93ZXIgcmVsYXRlZCBmbGFncyBhcmUgcHJvdGVjdGVkIHdpdGggJiMzOTttZW1vcnlfbG9jayYjMzk7CiAJICogc2VtYXBob3JlLgogCSAqLwotCXZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTsKLQl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7CiYjNDM7CXZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7CiAKIAlpZiAodmRldi0mZ3Q7cG1fcnVudGltZV9lbmdhZ2VkKSB7CiAJCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwpAQCAtNDA2LDcgJiM0Mzs0MDcsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9ydW50aW1lX3BtX2V4aXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCWRvd25fd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiAJX192ZmlvX3BjaV9ydW50aW1lX3BtX2V4aXQodmRldik7CiAJaWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpCi0JCXZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7CiYjNDM7CQl2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpOwogCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwogfQogCkBAIC0xMjU2LDYgJiM0MzsxMjU3LDggQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9zZXRfaXJxcyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHZmaW9fcGNpX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7CiYjNDM7CiBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAkJCQl2b2lkIF9fdXNlciAqYXJnKQogewpAQCAtMTI2NCw3ICYjNDM7MTI2Nyw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAogCWlmICghdmRldi0mZ3Q7cmVzZXRfd29ya3MpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwogCiAJLyoKIAkgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdoaWxlIHRoZSBwb3dlciBzdGF0ZSBpcyBub24tRDAuIElmCkBAIC0xMjc0LDEzICYjNDM7MTI3NywxOCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAkgKiBoYXZlIE5vU29mdFJzdC0sIHRoZSByZXNldCBmdW5jdGlvbiBjYW4gY2F1c2UgdGhlIFBDSSBjb25maWcgc3BhY2UKIAkgKiByZXNldCB3aXRob3V0IHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgc3RhdGUgKHNhdmVkIGxvY2FsbHkgaW4KIAkgKiAmIzM5O3ZkZXYtJmd0O3BtX3NhdmUmIzM5OykuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSB6YXAgaXMgZG9uZSBhZnRlciBtYWtpbmcgdGhlIGRldmljZSBhY2Nlc3NpYmxlIGluIEQwLAomIzQzOwkgKiBiZWNhdXNlIGEgRE1BQlVGIGltcG9ydGVyIGNvdWxkIGFjY2VzcyB0aGUgZGV2aWNlIGFzIHBhcnQKJiM0MzsJICogb2YgaXRzIHJldm9jYXRpb24gY2xlYW51cC4KIAkgKi8KIAl2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTsKIAotCXZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTsKJiM0MzsJdmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7CiYjNDM7CiAJcmV0ID0gcGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LSZndDtwZGV2KTsKIAlpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSkKLQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTsKJiM0MzsJCXZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7CiAJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTU2OSw2ICYjNDM7MTU3NywxMCBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwogCWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOgogCQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwomIzQzOwljYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0U6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUjoKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CkBAIC0xNjQ4LDIwICYjNDM7MTY2MCwzNyBAQCBzc2l6ZV90IHZmaW9fcGNpX2NvcmVfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNvbnN0IGNoYXIgX191c2VyICpidQogfQogRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV93cml0ZSk7CiAKLXN0YXRpYyB2b2lkIHZmaW9fcGNpX3phcF9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3BjaV9yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7Ci0Jc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYgPSAmYW1wO3ZkZXYtJmd0O3ZkZXY7Ci0JbG9mZl90IHN0YXJ0ID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYKTsKLQlsb2ZmX3QgZW5kID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX1JPTV9SRUdJT05fSU5ERVgpOwotCWxvZmZfdCBsZW4gPSBlbmQgLSBzdGFydDsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKJiM0MzsJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpOwogCi0JdW5tYXBfbWFwcGluZ19yYW5nZShjb3JlX3ZkZXYtJmd0O2lub2RlLSZndDtpX21hcHBpbmcsIHN0YXJ0LCBsZW4sIHRydWUpOwomIzQzOwkvKgomIzQzOwkgKiBJZiBhIGRyaXZlciBjb3VsZCBwb3NzaWJseSBjcmVhdGUgQkFSIG1hcHBpbmdzIGluIHRoZQomIzQzOwkgKiB2ZGV2JiMzOTtzIGFkZHJlc3Nfc3BhY2UsIGRvIGFuIGFkZGl0aW9uYWwgemFwIG9uIHJldm9rZS4gIFNlZQomIzQzOwkgKiB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZSgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZkZXYtJmd0O3phcF9iYXJzX29uX3Jldm9rZSkgewomIzQzOwkJc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYgPSAmYW1wO3ZkZXYtJmd0O3ZkZXY7CiYjNDM7CQlsb2ZmX3Qgc3RhcnQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfQkFSMF9SRUdJT05fSU5ERVgpOwomIzQzOwkJbG9mZl90IGVuZCA9IFZGSU9fUENJX0lOREVYX1RPX09GRlNFVChWRklPX1BDSV9ST01fUkVHSU9OX0lOREVYKTsKJiM0MzsJCWxvZmZfdCBsZW4gPSBlbmQgLSBzdGFydDsKJiM0MzsKJiM0MzsJCXVubWFwX21hcHBpbmdfcmFuZ2UoY29yZV92ZGV2LSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nLAomIzQzOwkJCQkgICAgc3RhcnQsIGxlbiwgdHJ1ZSk7CiYjNDM7CX0KIH0KIAotdm9pZCB2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQomIzQzO3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7CiAJZG93bl93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKLQl2ZmlvX3BjaV96YXBfYmFycyh2ZGV2KTsKJiM0MzsJdmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdmZpb19wY2lfdW5yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpOwogfQogCiB1MTYgdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCkBAIC0xNjgzLDE4ICYjNDM7MTcxMiw2IEBAIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUxNiBjCiAJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYV90b19wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdm1hLSZndDt2bV9wcml2YXRlX2RhdGE7Ci0JaW50IGluZGV4ID0gdm1hLSZndDt2bV9wZ29mZiAmZ3Q7Jmd0OyAoVkZJT19QQ0lfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JdTY0IHBnb2ZmOwotCi0JcGdvZmYgPSB2bWEtJmd0O3ZtX3Bnb2ZmICZhbXA7Ci0JCSgoMVUgJmx0OyZsdDsgKFZGSU9fUENJX09GRlNFVF9TSElGVCAtIFBBR0VfU0hJRlQpKSAtIDEpOwotCi0JcmV0dXJuIChwY2lfcmVzb3VyY2Vfc3RhcnQodmRldi0mZ3Q7cGRldiwgaW5kZXgpICZndDsmZ3Q7IFBBR0VfU0hJRlQpICYjNDM7IHBnb2ZmOwotfQotCiB2bV9mYXVsdF90IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAkJCQkgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKIAkJCQkgICB1bnNpZ25lZCBsb25nIHBmbiwKQEAgLTE3MjIsMjQgJiM0MzsxNzM5LDEwMyBAQCBzdGF0aWMgdm1fZmF1bHRfdCB2ZmlvX3BjaV9tbWFwX2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAJCQkJCSAgIHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0mZ3Q7dm1hOwotCXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IHZtZi0mZ3Q7YWRkcmVzcyAmYW1wOyB+KChQQUdFX1NJWkUgJmx0OyZsdDsgb3JkZXIpIC0gMSk7Ci0JdW5zaWduZWQgbG9uZyBwZ29mZiA9IChhZGRyIC0gdm1hLSZndDt2bV9zdGFydCkgJmd0OyZndDsgUEFHRV9TSElGVDsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHZtYV90b19wZm4odm1hKSAmIzQzOyBwZ29mZjsKLQl2bV9mYXVsdF90IHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLOwotCi0JaWYgKGlzX2FsaWduZWRfZm9yX29yZGVyKHZtYSwgYWRkciwgcGZuLCBvcmRlcikpIHsKLQkJc2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsICZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spCi0JCQlyZXQgPSB2ZmlvX3BjaV92bWZfaW5zZXJ0X3Bmbih2ZGV2LCB2bWYsIHBmbiwgb3JkZXIpOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuID0gMDsKJiM0MzsJdm1fZmF1bHRfdCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBvbmx5IHRoaW5nIHRoaXMgY2FuIHJlbHkgb24gaXMgdGhhdCB0aGUgRE1BQlVGIHJlbGF0aW5nCiYjNDM7CSAqIHRvIHRoZSBWTUEmIzM5O3Mgdm1fZmlsZSBleGlzdHMgKHByaXYpLgomIzQzOwkgKgomIzQzOwkgKiBBIERNQUJVRiBmb3IgYSBWRklPIGRldmljZSBmZCBtbWFwKCkgaG9sZHMgYSByZWZlcmVuY2UgdG8KJiM0MzsJICogdGhlIG9yaWdpbmFsIFZGSU8gZGV2aWNlIGZkLCBidXQgYW4gZXhwbGljaXRseS1leHBvcnRlZAomIzQzOwkgKiBETUFCVUYgZG9lcyBub3QuICBUaGUgb3JpZ2luYWwgZmQgbWlnaHQgaGF2ZSBjbG9zZWQsCiYjNDM7CSAqIG1lYW5pbmcgdGhpcyBmYXVsdCBjYW4gcmFjZSB3aXRoCiYjNDM7CSAqIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cCgpLCBtZWFuaW5nIHRoZSBidWZmZXIgY291bGQgaGF2ZQomIzQzOwkgKiBiZWVuIHJldm9rZWQgKGluIHdoaWNoIGNhc2UgcHJpdi0mZ3Q7dmRldiBtaWdodCBiZSBOVUxMKSwgYW5kCiYjNDM7CSAqIHRoZSBWRklPIGRldmljZSByZWdpc3RyYXRpb24gbWlnaHQgaGF2ZSBiZWVuIGRyb3BwZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFdpdGggdGhlIGdvYWwgb2YgdGFraW5nIHZkZXYtJmd0O21lbW9yeV9sb2NrIGluIGEgd29ybGQgd2hlcmUKJiM0MzsJICogdmRldiBtaWdodCBub3Qgc3RpbGwgZXhpc3Q6CiYjNDM7CSAqCiYjNDM7CSAqIDEuIFRha2UgdGhlIHJlc3YgbG9jayBvbiB0aGUgRE1BQlVGOgomIzQzOwkgKiAgLSBJZiByYWNpbmcgY2xlYW51cCBnb3QgaW4gZmlyc3QsIHRoZSBidWZmZXIgaXMgcmV2b2tlZDsKJiM0MzsJICogICAgc3RvcC9leGl0IGlmIHNvLgomIzQzOwkgKiAgLSBJZiB3ZSBnb3QgaW4gZmlyc3QsIHRoZSBidWZmZXIgaXMgbm90IHJldm9rZWQgc28gdmRldiBpcwomIzQzOwkgKiAgICBub24tTlVMTCwgYWNjZXNzaWJsZSwgYW5kIGNsZWFudXAgX2hhcyBub3QgeWV0IHB1dCB0aGUKJiM0MzsJICogICAgVkZJTyBkZXZpY2UgcmVnaXN0cmF0aW9uXy4gIFNvLCB0aGUgZGV2aWNlIHJlZmNvdW50IG11c3QKJiM0MzsJICogICAgYmUgJmd0OzAuCiYjNDM7CSAqCiYjNDM7CSAqIDIuIFRha2UgdmZpb19kZXZpY2UgcmVnaXN0cmF0aW9uIChyZWZjb3VudCBndWFyYW50ZWVkICZndDswCiYjNDM7CSAqICAgIGhlcmVhZnRlcikuCiYjNDM7CSAqCiYjNDM7CSAqIDMuIFVubG9jayB0aGUgRE1BQlVGJiMzOTtzIHJlc3YgbG9jazoKJiM0MzsJICogIC0gQSByYWNpbmcgY2xlYW51cCBjYW4gbm93IGNvbXBsZXRlLgomIzQzOwkgKiAgLSBCdXQsIHRoZSBkZXZpY2UgcmVmY291bnQgJmd0OzAsIG1lYW5pbmcgdGhlIHZmaW9fZGV2aWNlCiYjNDM7CSAqICAgIChhbmQgdmZpb19wY2llX2NvcmUgZGV2aWNlIHZkZXYpIGhhdmUgbm90IHlldCBiZWVuCiYjNDM7CSAqICAgIGZyZWVkLiAgdmRldiBpcyBhY2Nlc3NpYmxlLCBldmVuIGlmIHRoZSBETUFCVUYgaGFzIGJlZW4KJiM0MzsJICogICAgcmV2b2tlZCBvciBjbGVhbnVwIGhhcyBoYXBwZW5lZCwgYmVjYXVzZQomIzQzOwkgKiAgICB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KCkgY2FuJiMzOTt0IGNvbXBsZXRlLgomIzQzOwkgKgomIzQzOwkgKiA0LiBUYWtlIHRoZSB2ZGV2LSZndDttZW1vcnlfbG9jawomIzQzOwkgKiAgLSBFaXRoZXIgdGhlIERNQUJVRiBpcyB1c2FibGUsIG9yIGhhcyBiZWVuIGNsZWFuZWQgdXAuCiYjNDM7CSAqICAgIFdoaWNoZXZlciwgaXQgY2FuIG5vIGxvbmdlciBjaGFuZ2UgdW5kZXIgdXMuCiYjNDM7CSAqICAtIFRlc3QgdGhlIERNQUJVRiByZXZvY2F0aW9uIHN0YXR1cyBhZ2FpbjogaWYgaXQgd2FzCiYjNDM7CSAqICAgIHJldm9rZWQgYmV0d2VlbiAxIGFuZCA0IHJldHVybiBhIFNJR0JVUy4gT3RoZXJ3aXNlLAomIzQzOwkgKiAgICByZXR1cm4gYSBQRk4uCiYjNDM7CSAqICAtIEl0JiMzOTtzIG5vdCBuZWNlc3NhcnkgdG8gYWxzbyB0YWtlIHRoZSByZXN2IGxvY2ssIGJlY2F1c2UKJiM0MzsJICogICAgdGhlIHN0YXR1cy92ZGV2IGNhbiYjMzk7dCBjaGFuZ2Ugd2hpbGUgbWVtb3J5X2xvY2sgaXMgaGVsZC4KJiM0MzsJICoKJiM0MzsJICogNS4gVW5sb2NrLCBkb25lLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJZG1hX3Jlc3ZfbG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSykgewomIzQzOwkJcHJfZGVidWdfcmF0ZWxpbWl0ZWQoJiMzNDslcyBWQSAweCVseCwgcGdvZmYgMHglbHg6IERNQUJVRiByZXZva2VkL2NsZWFuZWQgdXBcbiYjMzQ7LAomIzQzOwkJCQkgICAgIF9fZnVuY19fLCB2bWYtJmd0O2FkZHJlc3MsIHZtYS0mZ3Q7dm1fcGdvZmYpOwomIzQzOwkJZG1hX3Jlc3ZfdW5sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIElmIHRoZSBidWZmZXIgaXNuJiMzOTt0IHJldm9rZWQsIHZkZXYgaXMgdmFsaWQgKi8KJiM0MzsJdmRldiA9IHByaXYtJmd0O3ZkZXY7CiYjNDM7CiYjNDM7CWlmICghdmZpb19kZXZpY2VfdHJ5X2dldF9yZWdpc3RyYXRpb24oJmFtcDt2ZGV2LSZndDt2ZGV2KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHZkZXYgIT0gTlVMTCAoYWJvdmUpLCB0aGUgcmVnaXN0cmF0aW9uIHNob3VsZAomIzQzOwkJICogYWxyZWFkeSBiZSAmZ3Q7MCBhbmQgc28gdGhpcyB0cnlfZ2V0IHNob3VsZCBuZXZlcgomIzQzOwkJICogZmFpbC4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X3dhcm4oJmFtcDt2ZGV2LSZndDtwZGV2LSZndDtkZXYsICYjMzQ7JXM6IFVuZXhwZWN0ZWQgcmVnaXN0cmF0aW9uIGZhaWx1cmVcbiYjMzQ7LAomIzQzOwkJCSBfX2Z1bmNfXyk7CiYjNDM7CQlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CXNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCAmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKSB7CiYjNDM7CQkvKiBSZXZvY2F0aW9uIHN0YXR1cyBtdXN0IGJlIHJlLXJlYWQsIHVuZGVyIG1lbW9yeV9sb2NrICovCiYjNDM7CQlpZiAocHJpdi0mZ3Q7c3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9PSykgewomIzQzOwkJCWludCBwcmVzID0gdmZpb19wY2lfZG1hX2J1Zl9maW5kX3Bmbihwcml2LCB2bWEsCiYjNDM7CQkJCQkJCSAgICAgdm1mLSZndDthZGRyZXNzLAomIzQzOwkJCQkJCQkgICAgIG9yZGVyLCAmYW1wO3Bmbik7CiYjNDM7CiYjNDM7CQkJaWYgKHByZXMgPT0gMCkKJiM0MzsJCQkJcmV0ID0gdmZpb19wY2lfdm1mX2luc2VydF9wZm4odmRldiwgdm1mLAomIzQzOwkJCQkJCQkgICAgICBwZm4sIG9yZGVyKTsKJiM0MzsJCQllbHNlIGlmIChwcmVzID09IC1FQUdBSU4pCiYjNDM7CQkJCXJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLOwomIzQzOwkJfQogCX0KIAogCWRldl9kYmdfcmF0ZWxpbWl0ZWQoJmFtcDt2ZGV2LSZndDtwZGV2LSZndDtkZXYsCi0JCQkgICAmIzM0OyVzKCxvcmRlciA9ICVkKSBCQVIgJWxkIHBhZ2Ugb2Zmc2V0IDB4JWx4OiAweCV4XG4mIzM0OywKLQkJCSAgICBfX2Z1bmNfXywgb3JkZXIsCi0JCQkgICAgdm1hLSZndDt2bV9wZ29mZiAmZ3Q7Jmd0OwotCQkJCShWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSwKLQkJCSAgICBwZ29mZiwgKHVuc2lnbmVkIGludClyZXQpOwomIzQzOwkJCSAgICAmIzM0OyVzKG9yZGVyID0gJWQpIFBGTiAweCVseCwgVkEgMHglbHgsIHBnb2ZmIDB4JWx4OiAweCV4XG4mIzM0OywKJiM0MzsJCQkgICAgX19mdW5jX18sIG9yZGVyLCBwZm4sIHZtZi0mZ3Q7YWRkcmVzcywKJiM0MzsJCQkgICAgdm1hLSZndDt2bV9wZ29mZiwgKHVuc2lnbmVkIGludClyZXQpOwogCiYjNDM7CXZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oJmFtcDt2ZGV2LSZndDt2ZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzU1LDYgJiM0MzsxODUxLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmZpb19wY2lfbW1hcF9vcHMgPSB7CiAjZW5kaWYKIH07CiAKJiM0Mzt2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZmaW9fcGNpX21tYXBfb3BzOwomIzQzO30KJiM0MzsKIGludCB2ZmlvX3BjaV9jb3JlX21tYXAoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9CkBAIC0xODAzLDcgJiM0MzsxOTA0LDEyIEBAIGludCB2ZmlvX3BjaV9jb3JlX21tYXAoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gdmRldjsKJiM0MzsJcmV0ID0gdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHZkZXYsIHZtYSwKJiM0MzsJCQkJCSAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGluZGV4KSwKJiM0MzsJCQkJCSAgICAgcmVxX2xlbiwgaW5kZXgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwogCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtJmd0O3ZtX3BhZ2VfcHJvdCk7CiAKQEAgLTIyMjIsNiAmIzQzOzIzMjgsMTcgQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAlpZiAocmV0KQogCQlnb3RvIG91dF92ZjsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiBhIGRyaXZlciBvdmVycmlkZXMgLm1tYXAsIGl0IGhhcyB0byBiZSBhc3N1bWVkIHRoYXQgaXQKJiM0MzsJICogbWlnaHQgbm90IHVzZSB0aGUgRE1BQlVGLWJhY2tlZCBjb3JlIG1tYXA7IHRoaXMgZmxhZwomIzQzOwkgKiBlbmFibGVzIGEgemFwIGF0IHJldm9rZSB0aW1lLiAgRHJpdmVycyBjYW4gb3B0IG91dCBieQomIzQzOwkgKiBjbGVhcmluZyB0aGlzIGZsYWcgYWZ0ZXIgcmVnaXN0cmF0aW9uLCBlLmcuIGlmIHRoZWlyIC5tbWFwCiYjNDM7CSAqIG92ZXJyaWRlIGNhbGxzIGRvd24gdG8gdmZpb19wY2lfY29yZV9tbWFwKCkgc28gdGhhdCBtYXBzCiYjNDM7CSAqIGFyZSBETUFCVUYtYmFja2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZkZXYtJmd0O3ZkZXYub3BzLSZndDttbWFwICE9IHZmaW9fcGNpX2NvcmVfbW1hcCkKJiM0MzsJCXZkZXYtJmd0O3phcF9iYXJzX29uX3Jldm9rZSA9IHRydWU7CiYjNDM7CiAJdmZpb19wY2lfcHJvYmVfcG93ZXJfc3RhdGUodmRldik7CiAKIAkvKgpAQCAtMjQ5Nyw5ICYjNDM7MjYxNCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsCiAJCX0KIAogCQkvKgotCQkgKiBUYWtlIHRoZSBtZW1vcnkgd3JpdGUgbG9jayBmb3IgZWFjaCBkZXZpY2UgYW5kIHphcCBCQVIKLQkJICogbWFwcGluZ3MgdG8gcHJldmVudCB0aGUgdXNlciBhY2Nlc3NpbmcgdGhlIGRldmljZSB3aGlsZSBpbgotCQkgKiByZXNldC4gIExvY2tpbmcgbXVsdGlwbGUgZGV2aWNlcyBpcyBwcm9uZSB0byBkZWFkbG9jaywKJiM0MzsJCSAqIFRha2UgdGhlIG1lbW9yeSB3cml0ZSBsb2NrIGZvciBlYWNoIGRldmljZSBhbmQKJiM0MzsJCSAqIHphcC9yZXZva2UgQkFSIG1hcHBpbmdzIHRvIHByZXZlbnQgdGhlIHVzZXIgKG9yCiYjNDM7CQkgKiBwZWVycykgYWNjZXNzaW5nIHRoZSBkZXZpY2Ugd2hpbGUgaW4gcmVzZXQuCiYjNDM7CQkgKiBMb2NraW5nIG11bHRpcGxlIGRldmljZXMgaXMgcHJvbmUgdG8gZGVhZGxvY2ssCiAJCSAqIHJ1bmF3YXkgYW5kIHVud2luZCBpZiB3ZSBoaXQgY29udGVudGlvbi4KIAkJICovCiAJCWlmICghZG93bl93cml0ZV90cnlsb2NrKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spKSB7CkBAIC0yNTA3LDggJiM0MzsyNjI1LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LAogCQkJYnJlYWs7CiAJCX0KIAotCQl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7Ci0JCXZmaW9fcGNpX3phcF9iYXJzKHZkZXYpOwomIzQzOwkJdmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7CiAJfQogCiAJaWYgKCFsaXN0X2VudHJ5X2lzX2hlYWQodmRldiwKQEAgLTI1MzgsNyAmIzQzOzI2NTUsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UodmRldiwgJmFtcDtkZXZfc2V0LSZndDtkZXZpY2VfbGlzdCwKIAkJCQkJIHZkZXYuZGV2X3NldF9saXN0KSB7CiAJCWlmICh2ZGV2LSZndDt2ZGV2Lm9wZW5fY291bnQgJmFtcDsmYW1wOyBfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKQotCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTsKJiM0MzsJCQl2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpOwogCQl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCmluZGV4IDFhMTc3Y2U3ZGU1NDZhLi4zMWZiYWQ5M2Y4OWIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCkBAIC00LDI0ICYjNDM7NCwxMyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYtbWFwcGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS1wMnBkbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2RtYS1idWYuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt2ZmlvX3BjaV9wcml2LmgmIzM0OwogCiBNT0RVTEVfSU1QT1JUX05TKCYjMzQ7RE1BX0JVRiYjMzQ7KTsKIAotc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgewotCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7Ci0Jc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgZG1hYnVmc19lbG07Ci0Jc2l6ZV90IHNpemU7Ci0Jc3RydWN0IHBoeXNfdmVjICpwaHlzX3ZlYzsKLQlzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwcm92aWRlcjsKLQl1MzIgbnJfcmFuZ2VzOwotCXN0cnVjdCBrcmVmIGtyZWY7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY29tcDsKLQl1OCByZXZva2VkIDogMTsKLX07Ci0KJiM0MzsjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgogc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCQkJCSAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpCiB7CkBAIC0zMCw3ICYjNDM7MTksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJaWYgKCFhdHRhY2htZW50LSZndDtwZWVyMnBlZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChwcml2LSZndDtyZXZva2VkKQomIzQzOwlpZiAocHJpdi0mZ3Q7c3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIWRtYV9idWZfYXR0YWNoX3Jldm9jYWJsZShhdHRhY2htZW50KSkKQEAgLTM5LDYgJiM0MzsyOCw0MyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLSZndDtwcml2OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBkbWFfYnVmX21tYXBfaW50ZXJuYWwoKSBoYXMgYXNzZXJ0ZWQgdGhhdCB0aGUgVk1BIGlzCiYjNDM7CSAqIGNvbnRhaW5lZCB3aXRoaW4gdGhlIERNQUJVRiBzaXplIGJlZm9yZSBjYWxsaW5nIHRoaXMuCiYjNDM7CSAqCiYjNDM7CSAqIEFsc28sIGlmIHdlIG9ic2VydmUgdGhhdCB0aGUgYnVmZmVyIGlzIHJldm9rZWQgbm93IHRoZW4KJiM0MzsJICogcmVmdXNlIHRoZSBtbWFwKCkuICBUaGlzIGlzIGEgYmVsdC1hbmQtYnJhY2VzIGVhcmx5IGZhaWx1cmUKJiM0MzsJICogdG8gZWFzZSBkZWJ1Z2dpbmcgYSByZXZva2VkIGJ1ZmZlciBiZWluZyB1c2VkLiAgVXNlcnNwYWNlCiYjNDM7CSAqIG1pZ2h0IGFsc28gcmFjZSBhbiBtbWFwKCkgYWdhaW5zdCBhbiBleHBsaWNpdCByZXZvY2F0aW9uLAomIzQzOwkgKiBvciBhbiBhY3Rpb24gZG9pbmcgYSB0ZW1wb3JhcnkgcmV2b2tlOyByYWNlIHNjZW5hcmlvcyBhcmUKJiM0MzsJICogc3RpbGwgc2FmZSBiZWNhdXNlIHRoZSBmYXVsdCBoYW5kbGVyIHVsdGltYXRlbHkgcHJldmVudHMKJiM0MzsJICogYWNjZXNzIHRvIGEgcmV2b2tlZCBidWZmZXIgaWYgaXQgaXNuJiMzOTt0IGNhdWdodCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKFJFQURfT05DRShwcml2LSZndDtzdGF0dXMpICE9IFZGSU9fUENJX0RNQUJVRl9PSykKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwlpZiAoKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEKSA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChSRUFEX09OQ0UocHJpdi0mZ3Q7bWVtYXR0cikgPT0gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MpCiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLSZndDt2bV9wYWdlX3Byb3QpOwomIzQzOwllbHNlCiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwomIzQzOwl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwomIzQzOwomIzQzOwkvKiBTZWUgY29tbWVudHMgaW4gdmZpb19wY2lfY29yZV9tbWFwKCkgcmUgVk1fQUxMT1dfQU5ZX1VOQ0FDSEVELiAqLwomIzQzOwl2bV9mbGFnc19zZXQodm1hLCBWTV9BTExPV19BTllfVU5DQUNIRUQgfCBWTV9JTyB8IFZNX1BGTk1BUCB8CiYjNDM7CQkgICAgIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7CiYjNDM7CXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gcHJpdjsKJiM0MzsJdmZpb19wY2lfc2V0X3ZtYV9vcHModm1hKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGICovCiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPQpAQCAtNTYsNyAmIzQzOzgyLDcgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKIAogCWRtYV9yZXN2X2Fzc2VydF9oZWxkKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiAKLQlpZiAocHJpdi0mZ3Q7cmV2b2tlZCkKJiM0MzsJaWYgKHByaXYtJmd0O3N0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spCiAJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogCiAJcmV0ID0gZG1hX2J1Zl9waHlzX3ZlY190b19zZ3QoYXR0YWNobWVudCwgcHJpdi0mZ3Q7cHJvdmlkZXIsCkBAIC05NSwxNyAmIzQzOzEyMSwyMDMgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCiAJCXVwX3dyaXRlKCZhbXA7cHJpdi0mZ3Q7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwogCQl2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKCZhbXA7cHJpdi0mZ3Q7dmRldi0mZ3Q7dmRldik7CiAJfQomIzQzOwlpZiAocHJpdi0mZ3Q7dmZpbGUpCiYjNDM7CQlmcHV0KHByaXYtJmd0O3ZmaWxlKTsKIAlrZnJlZShwcml2LSZndDtwaHlzX3ZlYyk7CiAJa2ZyZWUocHJpdik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHsKJiM0MzsjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgogCS5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCwKJiM0MzsJLm1tYXAgPSB2ZmlvX3BjaV9kbWFfYnVmX21tYXAsCiYjNDM7I2VuZGlmCiAJLm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsCiAJLnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLAogCS5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLAogfTsKIAomIzQzO2ludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LAomIzQzOwkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkciwKJiM0MzsJCQkgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3BmbikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEdpdmVuIGEgVk1BIChzdGFydCwgZW5kLCBwZ29mZnMpIGFuZCBhIGZhdWx0IGFkZHJlc3MsCiYjNDM7CSAqIHNlYXJjaCB0aGUgY29ycmVzcG9uZGluZyBETUFCVUYmIzM5O3MgcGh5c192ZWNbXSB0byBmaW5kIHRoZQomIzQzOwkgKiByYW5nZSByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MmIzM5O3Mgb2Zmc2V0IGludG8gdGhlIFZNQSwgYW5kCiYjNDM7CSAqIGl0cyBQRk4uCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBwaHlzX3ZlY1tdIHJhbmdlcyByZXByZXNlbnQgY29udGlndW91cyBzcGFucyBvZiBWQXMKJiM0MzsJICogdXB3YXJkcyBmcm9tIHRoZSBidWZmZXIgb2Zmc2V0IDA7IHRoZSBhY3R1YWwgUEZOcyBtaWdodCBiZQomIzQzOwkgKiBpbiBhbnkgb3JkZXIsIG92ZXJsYXAvYWxpYXMsIGV0Yy4gIENhbGN1bGF0ZSBhbiBvZmZzZXQgb2YKJiM0MzsJICogdGhlIGRlc2lyZWQgcGFnZSBnaXZlbiBWTUEgc3RhcnQvcGdvZmYgYW5kIGFkZHJlc3MsIHRoZW4KJiM0MzsJICogc2VhcmNoIHVwd2FyZHMgZnJvbSAwIHRvIGZpbmQgd2hpY2ggc3BhbiBjb250YWlucyBpdC4KJiM0MzsJICoKJiM0MzsJICogT24gc3VjY2VzcywgYSB2YWxpZCBQRk4gZm9yIGEgcGFnZSBzaXplZCBieSAmIzM5O29yZGVyJiMzOTsgaXMKJiM0MzsJICogcmV0dXJuZWQgaW50byBvdXRfcGZuLgomIzQzOwkgKgomIzQzOwkgKiBGYWlsdXJlIG9jY3VycyBpZjoKJiM0MzsJICogLSBBIGh1Z2VwYWdlIHdvdWxkIGNyb3NzIHRoZSBlZGdlIG9mIHRoZSBWTUEsCiYjNDM7CSAqIC0gQSBodWdlcGFnZSBpc24mIzM5O3QgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBhIHJhbmdlCiYjNDM7CSAqICAgKGluY2x1ZGluZyB3aGVyZSBpdCBzdHJhZGRsZXMgdGhlIGJvdW5kYXJ5IGJldHdlZW4KJiM0MzsJICogICByYW5nZXMpLAomIzQzOwkgKiAtIFdlIGZpbmQgYSByYW5nZSwgYnV0IHRoZSBmaW5hbCBQRk4gaXNuJiMzOTt0IGFsaWduZWQgdG8gdGhlCiYjNDM7CSAqICAgcmVxdWVzdGVkIG9yZGVyLgomIzQzOwkgKgomIzQzOwkgKiBVcG9uIGZhaWx1cmUsIC1FQUdBSU4gaXMgcmV0dXJuZWQgYW5kIHRoZSBjYWxsZXIgaXMKJiM0MzsJICogZXhwZWN0ZWQgdG8gdHJ5IGFnYWluIHdpdGggYSBzbWFsbGVyIG9yZGVyLCB3aGljaCB3aWxsCiYjNDM7CSAqIGV2ZW50dWFsbHkgc3VjY2VlZCAob3JkZXI9MCB3aWxsIGFsd2F5cyB3b3JrKS4KJiM0MzsJICoKJiM0MzsJICogSXQmIzM5O3Mgc3Vib3B0aW1hbCBpZiBETUFCVUZzIGFyZSBjcmVhdGVkIHdpdGggbmVpZ2hib3VyaW5nCiYjNDM7CSAqIHJhbmdlcyB0aGF0IGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHNpbmNlIGh1Z2VwYWdlcwomIzQzOwkgKiBjYW4mIzM5O3Qgc3RyYWRkbGUgcmFuZ2UgYm91bmRhcmllcy4gIChUaGUgY29uc3RydWN0aW9uIG9mIHRoZQomIzQzOwkgKiByYW5nZXMgc2hvdWxkIG1lcmdlIHRoZW0gaW4gdGhpcyBjYXNlLikKJiM0MzsJICoKJiM0MzsJICogRmluYWxseSwgdm1hX3Bnb2ZmX2FkanVzdCBpcyB1c2VkIHdpdGggYSBETUFCVUYgY3JlYXRlZCBmb3IKJiM0MzsJICogYSBWRklPIEJBUiBtbWFwOiBhIEJBUiBtYXBwZWQgd2l0aCB2bV9wZ29mZiAmZ3Q7IDAgY3JlYXRlcyBhCiYjNDM7CSAqIERNQUJVRiBzdWNoIHRoYXQgYnl0ZSAwIG9mIHRoZSBWTUEgY29ycmVzcG9uZHMgdG8gYnl0ZSAwIG9mCiYjNDM7CSAqIHRoZSBETUFCVUYgYW5kIGJ5dGUgJiMzOTt2bV9wZ29mZiAmbHQ7Jmx0OyBQQUdFX1NISUZUJiMzOTsgaW50byB0aGUgQkFSLgomIzQzOwkgKiBUbyBhdm9pZCBkb3VibGUtb2Zmc2V0dGluZyBpbiB0aGlzIHNjZW5hcmlvLCBzdWJ0cmFjdGluZwomIzQzOwkgKiB2bWFfcGdvZmZfYWRqdXN0IGZyb20gdGhpcyAobm9uLXplcm8pIHZtX3Bnb2ZmIGdlbmVyYXRlcwomIzQzOwkgKiB0aGUgZWZmZWN0aXZlIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZXNpemUgPSBQQUdFX1NJWkUgJmx0OyZsdDsgb3JkZXI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdm1hX29mZiA9ICgodm1hLSZndDt2bV9wZ29mZiAtIHByaXYtJmd0O3ZtYV9wZ29mZl9hZGp1c3QpICZsdDsmbHQ7CiYjNDM7CQkJCSBQQUdFX1NISUZUKSAmYW1wOyBWRklPX1BDSV9PRkZTRVRfTUFTSzsKJiM0MzsJdW5zaWduZWQgbG9uZyByb3VuZGVkX3BhZ2VfYWRkciA9IEFMSUdOX0RPV04oZmF1bHRfYWRkciwgcGFnZXNpemUpOwomIzQzOwl1bnNpZ25lZCBsb25nIHJvdW5kZWRfcGFnZV9lbmQgPSByb3VuZGVkX3BhZ2VfYWRkciAmIzQzOyBwYWdlc2l6ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmYXVsdF9vZmZzZXQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmF1bHRfb2Zmc2V0X2VuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydF9vZmZzZXQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHJvdW5kZWRfcGFnZV9hZGRyICZsdDsgdm1hLSZndDt2bV9zdGFydCB8fCByb3VuZGVkX3BhZ2VfZW5kICZndDsgdm1hLSZndDt2bV9lbmQpIHsKJiM0MzsJCWlmIChvcmRlciAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiYjNDM7CQkvKiBBIGZhdWx0IGFkZHJlc3Mgb3V0c2lkZSBvZiB0aGUgVk1BIGlzIGFic3VyZC4gKi8KJiM0MzsJCWRldl93YXJuX3JhdGVsaW1pdGVkKAomIzQzOwkJCSZhbXA7cHJpdi0mZ3Q7dmRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7RmF1bHQgYWRkciAweCVseCBvdXRzaWRlIFZNQSAweCVseC0weCVseFxuJiMzNDssCiYjNDM7CQkJZmF1bHRfYWRkciwgdm1hLSZndDt2bV9zdGFydCwgdm1hLSZndDt2bV9lbmQpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogZmF1bHRfb2Zmc2V0W19lbmRdIGlzIHRoZSBzcGFuIHdpdGhpbiB0aGUgRE1BQlVGCiYjNDM7CSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZhdWx0aW5nIHBhZ2U6CiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkoY2hlY2tfYWRkX292ZXJmbG93KHJvdW5kZWRfcGFnZV9hZGRyIC0gdm1hLSZndDt2bV9zdGFydCwKJiM0MzsJCQkJCXZtYV9vZmYsICZhbXA7ZmF1bHRfb2Zmc2V0KSB8fAomIzQzOwkJICAgICBjaGVja19hZGRfb3ZlcmZsb3coZmF1bHRfb2Zmc2V0LCBwYWdlc2l6ZSwKJiM0MzsJCQkJCSZhbXA7ZmF1bHRfb2Zmc2V0X2VuZCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEl0ZXJhdGUgb3ZlciByYW5nZXMgaW4gdGhlIGJ1ZmZlciwgc3VtbWluZyB0aGVpciBsZW5ndGhzOgomIzQzOwkgKiByYW5nZV9zdGFydF9vZmZzZXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCByYW5nZSYjMzk7cyBzdGFydGluZwomIzQzOwkgKiBvZmZzZXQgaW4gdGhlIGJ1ZmZlciAoZnJvbSAwIHVwd2FyZHMpLgomIzQzOwkgKgomIzQzOwkgKiBBIGZhaWx1cmUgZm9yIG9yZGVyID09IDAgaXMgdW5leHBlY3RlZCwgYW5kIHRyaWdnZXJzIGEKJiM0MzsJICogZmF1bHQvd2Fybi4KJiM0MzsJICovCiYjNDM7CXJldCA9IChvcmRlciA9PSAwKSA/IC1FRkFVTFQgOiAtRUFHQUlOOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcHJpdi0mZ3Q7bnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc2l6ZV90IHJhbmdlX2xlbiA9IHByaXYtJmd0O3BoeXNfdmVjW2ldLmxlbjsKJiM0MzsKJiM0MzsJCS8qIEVhcmx5IGV4aXQgaWYgcmFuZ2Ugc3RhcnRzIGFmdGVyIHRoZSBwYWdlIGVuZCAqLwomIzQzOwkJaWYgKGZhdWx0X29mZnNldF9lbmQgJmx0Oz0gcmFuZ2Vfc3RhcnRfb2Zmc2V0KQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKGZhdWx0X29mZnNldCAmZ3Q7PSByYW5nZV9zdGFydF9vZmZzZXQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGZhdWx0X29mZnNldF9lbmQgJmx0Oz0gcmFuZ2Vfc3RhcnRfb2Zmc2V0ICYjNDM7IHJhbmdlX2xlbikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogVGhlIGZhdWx0aW5nIHBhZ2UgaXMgd2hvbGx5IGNvbnRhaW5lZAomIzQzOwkJCSAqIHdpdGhpbiB0aGUgc3BhbiByZXByZXNlbnRlZCBieSB0aGlzIHJhbmdlLAomIzQzOwkJCSAqIHNvIHZhbGlkYXRlIFBGTiBhbGlnbm1lbnQgZm9yIHRoZSBvcmRlci4KJiM0MzsJCQkgKiBUaGUgaWYoKSBjb25kaXRpb24gZW5zdXJlcyB0aGUgcGZuCiYjNDM7CQkJICogYXJpdGhtZXRpYyB3b24mIzM5O3Qgb3ZlcmZsb3cuCiYjNDM7CQkJICovCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBwZm4gPQomIzQzOwkJCQkoKGZhdWx0X29mZnNldCAtIHJhbmdlX3N0YXJ0X29mZnNldCkgJiM0MzsKJiM0MzsJCQkJIHByaXYtJmd0O3BoeXNfdmVjW2ldLnBhZGRyKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwomIzQzOwkJCWlmIChJU19BTElHTkVEKHBmbiwgMSAmbHQ7Jmx0OyBvcmRlcikpIHsKJiM0MzsJCQkJKm91dF9wZm4gPSBwZm47CiYjNDM7CQkJCXJldCA9IDA7CiYjNDM7CQkJfQomIzQzOwkJCS8qCiYjNDM7CQkJICogRWxzZSBvcmRlciAmZ3Q7IDA7IEVBR0FJTiByZXRyaWVzIHdpdGggc21hbGxlcgomIzQzOwkJCSAqIG9yZGVyCiYjNDM7CQkJICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlyYW5nZV9zdGFydF9vZmZzZXQgJiM0Mzs9IHJhbmdlX2xlbjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3JkZXIgPT0gMCAmYW1wOyZhbXA7IHJldCAhPSAwKQomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBhZGRyZXNzIGZlbGwgb3V0c2lkZSBvZiB0aGUgc3BhbiByZXByZXNlbnRlZCBieQomIzQzOwkJICogdGhlIChjb25jYXRlbmF0ZWQpIHJhbmdlcy4gIEFzIHNldHVwIG9mIGEgbWFwcGluZwomIzQzOwkJICogZW5zdXJlcyB0aGF0IHRoZSBWTUEgaXMgJmx0Oz0gdGhlIHRvdGFsIHNpemUgb2YgdGhlCiYjNDM7CQkgKiByYW5nZXMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSWYgaXQgZG9lcywgd2FybgomIzQzOwkJICogYW5kIFNJR0JVUy4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoCiYjNDM7CQkJJmFtcDtwcml2LSZndDt2ZGV2LSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtObyByYW5nZSBmb3IgYWRkciAweCVseCwgb3JkZXIgJWQ6IFZNQSAweCVseC0weCVseCBwZ29mZiAweCVseCwgJXUgcmFuZ2VzLCBzaXplIDB4JXp4XG4mIzM0OywKJiM0MzsJCQlmYXVsdF9hZGRyLCBvcmRlciwgdm1hLSZndDt2bV9zdGFydCwgdm1hLSZndDt2bV9lbmQsCiYjNDM7CQkJdm1hLSZndDt2bV9wZ29mZiwgcHJpdi0mZ3Q7bnJfcmFuZ2VzLCBwcml2LSZndDtzaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDcmVhdGUgYSBETUFCVUYgY29ycmVzcG9uZGluZyB0byBwcml2LCBhZGQgaXQgdG8gdmRldi0mZ3Q7ZG1hYnVmcyBsaXN0CiYjNDM7ICogZm9yIHRyYWNraW5nIChtZWFuaW5nIGNsZWFudXAgb3IgcmV2b2NhdGlvbiB3aWxsIHphcCBpdCksIGFuZCB0YWtlCiYjNDM7ICogYSB2ZmlvX2RldmljZSByZWdpc3RyYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwgdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJREVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOwomIzQzOwomIzQzOwlpZiAoIXZmaW9fZGV2aWNlX3RyeV9nZXRfcmVnaXN0cmF0aW9uKCZhbXA7dmRldi0mZ3Q7dmRldikpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZXhwX2luZm8ub3BzID0gJmFtcDt2ZmlvX3BjaV9kbWFidWZfb3BzOwomIzQzOwlleHBfaW5mby5zaXplID0gcHJpdi0mZ3Q7c2l6ZTsKJiM0MzsJZXhwX2luZm8uZmxhZ3MgPSBmbGFnczsKJiM0MzsJZXhwX2luZm8ucHJpdiA9IHByaXY7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2RtYWJ1ZiA9IGRtYV9idWZfZXhwb3J0KCZhbXA7ZXhwX2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O2RtYWJ1ZikpIHsKJiM0MzsJCXZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oJmFtcDt2ZGV2LSZndDt2ZGV2KTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHByaXYtJmd0O2RtYWJ1Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3JlZl9pbml0KCZhbXA7cHJpdi0mZ3Q7a3JlZik7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO3ByaXYtJmd0O2NvbXApOwomIzQzOwomIzQzOwkvKiBkbWFfYnVmX3B1dCgpIG5vdyBmcmVlcyBwcml2ICovCiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7cHJpdi0mZ3Q7ZG1hYnVmc19lbG0pOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwlkbWFfcmVzdl9sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdiwgTlVMTCk7CiYjNDM7CXByaXYtJmd0O3N0YXR1cyA9IF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikgPyBWRklPX1BDSV9ETUFCVUZfT0sgOgomIzQzOwkJVkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRDsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO3ByaXYtJmd0O2RtYWJ1ZnNfZWxtLCAmYW1wO3ZkZXYtJmd0O2RtYWJ1ZnMpOwomIzQzOwlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgogLyoKICAqIFRoaXMgaXMgYSB0ZW1wb3JhcnkgJiMzNDtwcml2YXRlIGludGVyY29ubmVjdCYjMzQ7IGJldHdlZW4gVkZJTyBETUFCVUYgYW5kIGlvbW11ZmQuCiAgKiBJdCBhbGxvd3MgdGhlIHR3byBjby1vcGVyYXRpbmcgZHJpdmVycyB0byBleGNoYW5nZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZgpAQCAtMTI4LDcgJiM0MzszNDAsNyBAQCBpbnQgdmZpb19wY2lfZG1hX2J1Zl9pb21tdWZkX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlwcml2ID0gYXR0YWNobWVudC0mZ3Q7ZG1hYnVmLSZndDtwcml2OwotCWlmIChwcml2LSZndDtyZXZva2VkKQomIzQzOwlpZiAocHJpdi0mZ3Q7c3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBNb3JlIHRoYW4gb25lIHJhbmdlIHRvIGlvbW11ZmQgd2lsbCByZXF1aXJlIHByb3BlciBETUFCVUYgc3VwcG9ydCAqLwpAQCAtMjI0LDcgJiM0Mzs0MzYsNiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiB7CiAJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBnZXRfZG1hX2J1ZiA9IHt9OwogCXN0cnVjdCB2ZmlvX3JlZ2lvbl9kbWFfcmFuZ2UgKmRtYV9yYW5nZXM7Ci0JREVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOwogCXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2OwogCXNpemVfdCBsZW5ndGg7CiAJaW50IHJldDsKQEAgLTI3NCw2ICYjNDM7NDg1LDcgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCXByaXYtJmd0O3ZkZXYgPSB2ZGV2OwogCXByaXYtJmd0O25yX3JhbmdlcyA9IGdldF9kbWFfYnVmLm5yX3JhbmdlczsKIAlwcml2LSZndDtzaXplID0gbGVuZ3RoOwomIzQzOwlwcml2LSZndDttZW1hdHRyID0gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfTkM7CiAJcmV0ID0gdmRldi0mZ3Q7cGNpX29wcy0mZ3Q7Z2V0X2RtYWJ1Zl9waHlzKHZkZXYsICZhbXA7cHJpdi0mZ3Q7cHJvdmlkZXIsCiAJCQkJCSAgICAgZ2V0X2RtYV9idWYucmVnaW9uX2luZGV4LAogCQkJCQkgICAgIHByaXYtJmd0O3BoeXNfdmVjLCBkbWFfcmFuZ2VzLApAQCAtMjg0LDM0ICYjNDM7NDk2LDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCWtmcmVlKGRtYV9yYW5nZXMpOwogCWRtYV9yYW5nZXMgPSBOVUxMOwogCi0JaWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbigmYW1wO3ZkZXYtJmd0O3ZkZXYpKSB7Ci0JCXJldCA9IC1FTk9ERVY7CiYjNDM7CXJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgZ2V0X2RtYV9idWYub3Blbl9mbGFncyk7CiYjNDM7CWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWVfcGh5czsKLQl9Ci0KLQlleHBfaW5mby5vcHMgPSAmYW1wO3ZmaW9fcGNpX2RtYWJ1Zl9vcHM7Ci0JZXhwX2luZm8uc2l6ZSA9IHByaXYtJmd0O3NpemU7Ci0JZXhwX2luZm8uZmxhZ3MgPSBnZXRfZG1hX2J1Zi5vcGVuX2ZsYWdzOwotCWV4cF9pbmZvLnByaXYgPSBwcml2OwotCi0JcHJpdi0mZ3Q7ZG1hYnVmID0gZG1hX2J1Zl9leHBvcnQoJmFtcDtleHBfaW5mbyk7Ci0JaWYgKElTX0VSUihwcml2LSZndDtkbWFidWYpKSB7Ci0JCXJldCA9IFBUUl9FUlIocHJpdi0mZ3Q7ZG1hYnVmKTsKLQkJZ290byBlcnJfZGV2X3B1dDsKLQl9Ci0KLQlrcmVmX2luaXQoJmFtcDtwcml2LSZndDtrcmVmKTsKLQlpbml0X2NvbXBsZXRpb24oJmFtcDtwcml2LSZndDtjb21wKTsKLQotCS8qIGRtYV9idWZfcHV0KCkgbm93IGZyZWVzIHByaXYgKi8KLQlJTklUX0xJU1RfSEVBRCgmYW1wO3ByaXYtJmd0O2RtYWJ1ZnNfZWxtKTsKLQlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwotCWRtYV9yZXN2X2xvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKLQlwcml2LSZndDtyZXZva2VkID0gIV9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldik7Ci0JbGlzdF9hZGRfdGFpbCgmYW1wO3ByaXYtJmd0O2RtYWJ1ZnNfZWxtLCAmYW1wO3ZkZXYtJmd0O2RtYWJ1ZnMpOwotCWRtYV9yZXN2X3VubG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YpOwotCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwotCiAJLyoKIAkgKiBkbWFfYnVmX2ZkKCkgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgd2hlbiB0aGUgZmlsZSBjbG9zZXMgdGhlIGRtYWJ1ZgogCSAqIHdpbGwgYmUgcmVsZWFzZWQuCkBAIC0zMjIsOCAmIzQzOzUwOSw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncywKIAogCXJldHVybiByZXQ7CiAKLWVycl9kZXZfcHV0OgotCXZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oJmFtcDt2ZGV2LSZndDt2ZGV2KTsKIGVycl9mcmVlX3BoeXM6CiAJa2ZyZWUocHJpdi0mZ3Q7cGh5c192ZWMpOwogZXJyX2ZyZWVfcHJpdjoKQEAgLTMzMiw0NyAmIzQzOzUxNywxNjQgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCWtmcmVlKGRtYV9yYW5nZXMpOwogCXJldHVybiByZXQ7CiB9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi8KJiM0MzsKJiM0MztpbnQgdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSAgIHU2NCBwaHlzX3N0YXJ0LCB1NjQgcmVxX2xlbiwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHJlc19pbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2OwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYV9wZ29mZiA9IHZtYS0mZ3Q7dm1fcGdvZmYgJmFtcDsgKFZGSU9fUENJX09GRlNFVF9NQVNLICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwljaGFyICpidWZuYW1lOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwcml2ID0ga3phbGxvY19vYmooKnByaXYpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cGh5c192ZWMgPSBremFsbG9jX29iaigqcHJpdi0mZ3Q7cGh5c192ZWMpOwomIzQzOwlpZiAoIXByaXYtJmd0O3BoeXNfdmVjKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfZnJlZV9wcml2OwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Zm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgJiMzNDslczolcy8leCYjMzQ7LAomIzQzOwkJCSAgICBkZXZfbmFtZSgmYW1wO3ZkZXYtJmd0O3ZkZXYuZGV2aWNlKSwgcGNpX25hbWUodmRldi0mZ3Q7cGRldiksCiYjNDM7CQkJICAgIHJlc19pbmRleCk7CiYjNDM7CiYjNDM7CWlmICghYnVmbmFtZSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfcGh5czsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgRE1BQlVGIGJlZ2lucyBmcm9tIHRoZSBtbWFwKCkmIzM5O3MgQkFSIG9mZnNldCwgaS5lLiB0aGUKJiM0MzsJICogc3RhcnQgb2YgdGhlIFZNQSBjb3JyZXNwb25kcyB0byBieXRlIDAgb2YgdGhlIERNQUJVRiBhbmQKJiM0MzsJICogYnl0ZSAodm1hX3Bnb2ZmICZsdDsmbHQ7IFBBR0VfU0hJRlQpIG9mIHRoZSBCQVIuCiYjNDM7CSAqCiYjNDM7CSAqIHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oKSByZXZlcnNlcyB0aGlzIG9mZnNldCB1c2luZwomIzQzOwkgKiB2bWFfcGdvZmZfYWRqdXN0LCBzbyB0aGF0IHVsdGltYXRlbHkgYSBmYXVsdCYjMzk7cyBvZmZzZXQgZnJvbQomIzQzOwkgKiB0aGUgc3RhcnQgb2YgdGhlIF9WTUFfIGhhcyBhIGNvbnNpc3RlbnQgdXNhZ2Ugd2hldGhlciB0aGUKJiM0MzsJICogVk1BIG9yaWdpbmF0ZXMgZnJvbSBhbiBtbWFwKCkgb2YgdGhlIFZGSU8gZGV2aWNlIGhlcmUgb3IgYQomIzQzOwkgKiBkaXJlY3QgRE1BQlVGIG1tYXAoKS4KJiM0MzsJICovCiYjNDM7CXByaXYtJmd0O3ZkZXYgPSB2ZGV2OwomIzQzOwlwcml2LSZndDtzaXplID0gcmVxX2xlbjsKJiM0MzsJcHJpdi0mZ3Q7bnJfcmFuZ2VzID0gMTsKJiM0MzsJcHJpdi0mZ3Q7dm1hX3Bnb2ZmX2FkanVzdCA9IHZtYV9wZ29mZjsKJiM0MzsJcHJpdi0mZ3Q7cHJvdmlkZXIgPSBwY2ltX3AycGRtYV9wcm92aWRlcih2ZGV2LSZndDtwZGV2LCByZXNfaW5kZXgpOwomIzQzOwlpZiAoIXByaXYtJmd0O3Byb3ZpZGVyKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfZnJlZV9uYW1lOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYtJmd0O3BoeXNfdmVjWzBdLnBhZGRyID0gcGh5c19zdGFydCAmIzQzOyAoKHU2NCl2bWFfcGdvZmYgJmx0OyZsdDsgUEFHRV9TSElGVCk7CiYjNDM7CXByaXYtJmd0O3BoeXNfdmVjWzBdLmxlbiA9IHByaXYtJmd0O3NpemU7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgT19DTE9FWEVDIHwgT19SRFdSKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbmFtZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3duZXJzaGlwIG9mIHRoZSBETUFCVUYgZmlsZSB0cmFuc2ZlcnMgdG8gdGhlIFZNQSBzbyB0aGF0CiYjNDM7CSAqIG90aGVyIHVzZXJzIGNhbiBsb2NhdGUgdGhlIERNQUJVRiB2aWEgYSBWQS4gIE93bmVyc2hpcCBvZgomIzQzOwkgKiB0aGUgb3JpZ2luYWwgVkZJTyBkZXZpY2UgZmlsZSBiZWluZyBtbWFwKCllZCB0cmFuc2ZlcnMgdG8KJiM0MzsJICogcHJpdiwgYW5kIGlzIHB1dCB3aGVuIHRoZSBETUFCVUYgaXMgcmVsZWFzZWQuICBUaGlzCiYjNDM7CSAqIGludGVudGlvbmFsbHkgZG9lcyBub3QgdXNlIGdldF9maWxlKCkvdm1hX3NldF9maWxlKCkKJiM0MzsJICogYmVjYXVzZSB0aGUgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLCBhbmQgb3duZXJzaGlwCiYjNDM7CSAqIG1vdmVzLgomIzQzOwkgKi8KJiM0MzsJcHJpdi0mZ3Q7dmZpbGUgPSB2bWEtJmd0O3ZtX2ZpbGU7CiYjNDM7CXZtYS0mZ3Q7dm1fZmlsZSA9IHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7ZmlsZTsKJiM0MzsJdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBwcml2OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtwcml2LSZndDtkbWFidWYtJmd0O25hbWVfbG9jayk7CiYjNDM7CWtmcmVlKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7bmFtZSk7CiYjNDM7CXByaXYtJmd0O2RtYWJ1Zi0mZ3Q7bmFtZSA9IGJ1Zm5hbWU7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7ZG1hYnVmLSZndDtuYW1lX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfZnJlZV9uYW1lOgomIzQzOwlrZnJlZShidWZuYW1lKTsKJiM0MztlcnJfZnJlZV9waHlzOgomIzQzOwlrZnJlZShwcml2LSZndDtwaHlzX3ZlYyk7CiYjNDM7ZXJyX2ZyZWVfcHJpdjoKJiM0MzsJa2ZyZWUocHJpdik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNldCB0aGUgRE1BQlVGJiMzOTtzIHJldm9jYXRpb24gc3RhdHVzIChPSyBvciB0ZW1wb3JhcmlseS9wZXJtYW5lbnRseSByZXZva2VkKSAqLwomIzQzO3N0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwKJiM0MzsJCQkJCWVudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMgbmV3X3N0YXR1cykKJiM0Mzt7CiYjNDM7CWJvb2wgd2FzX3Jldm9rZWQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtwcml2LSZndDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCB8fAomIzQzOwkgICAgcHJpdi0mZ3Q7c3RhdHVzID09IG5ld19zdGF0dXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2xvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJd2FzX3Jldm9rZWQgPSAocHJpdi0mZ3Q7c3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQpOwomIzQzOwomIzQzOwlpZiAobmV3X3N0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spIHsKJiM0MzsJCXByaXYtJmd0O3N0YXR1cyA9IG5ld19zdGF0dXM7IC8qIFRlbXAgb3IgcGVybWFuZW50bHkgcmV2b2tlZCAqLwomIzQzOwomIzQzOwkJaWYgKHdhc19yZXZva2VkKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBURU1QX1JFVk9LRUQgaXMgYmVpbmcgdXBncmFkZWQgdG8KJiM0MzsJCQkgKiBQRVJNX1JFVk9LRUQuICBUaGUgYnVmZmVyIGlzIGFscmVhZHkgZ29uZSwKJiM0MzsJCQkgKiBkb24mIzM5O3Qgd2FpdCBvbiBpdCBhZ2Fpbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQlkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi0mZ3Q7ZG1hYnVmKTsKJiM0MzsJCWRtYV9yZXN2X3dhaXRfdGltZW91dChwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsCiYjNDM7CQkJCSAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSwKJiM0MzsJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwomIzQzOwkJZG1hX3Jlc3ZfdW5sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3ByaXYtJmd0O2tyZWYsIHZmaW9fcGNpX2RtYV9idWZfZG9uZSk7CiYjNDM7CQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7cHJpdi0mZ3Q7Y29tcCk7CiYjNDM7CQl1bm1hcF9tYXBwaW5nX3JhbmdlKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7ZmlsZS0mZ3Q7Zl9tYXBwaW5nLAomIzQzOwkJCQkgICAgMCwgcHJpdi0mZ3Q7c2l6ZSwgdHJ1ZSk7CiYjNDM7CQkvKgomIzQzOwkJICogUmUtYXJtIHRoZSByZWdpc3RlcmVkIGtyZWYgcmVmZXJlbmNlIGFuZCB0aGUKJiM0MzsJCSAqIGNvbXBsZXRpb24gc28gdGhlIHBvc3QtcmV2b2tlIHN0YXRlIG1hdGNoZXMgdGhlCiYjNDM7CQkgKiBwb3N0LWNyZWF0aW9uIHN0YXRlLiAgQW4gdW4tcmV2b2tlIGZvbGxvd2VkIGJ5IGEKJiM0MzsJCSAqIG5ldyBtYXBwaW5nIG5lZWRzIHRoZSBrcmVmIHRvIGJlIG5vbi16ZXJvIGJlZm9yZQomIzQzOwkJICoga3JlZl9nZXQoKSwgYW5kIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cCgpCiYjNDM7CQkgKiBkZWxlZ2F0ZXMgaXRzIGRyYWluIGJhY2sgdGhyb3VnaCB0aGlzIHJldm9rZQomIzQzOwkJICogcGF0aCBvbiBhIHBvc3NpYmx5LWFscmVhZHktcmV2b2tlZCBkbWEtYnVmLgomIzQzOwkJICovCiYjNDM7CQlrcmVmX2luaXQoJmFtcDtwcml2LSZndDtrcmVmKTsKJiM0MzsJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7cHJpdi0mZ3Q7Y29tcCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwcml2LSZndDtzdGF0dXMgPSBWRklPX1BDSV9ETUFCVUZfT0s7CiYjNDM7CQlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsJfQomIzQzO30KIAogdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpCiB7CiAJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7CiAJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnRtcDsKIAomIzQzOwkvKgomIzQzOwkgKiBIb2xkaW5nIG1lbW9yeV9sb2NrIGVuc3VyZXMgYSByYWNpbmcgVk1BIGZhdWx0IG9ic2VydmVzCiYjNDM7CSAqIHByaXYtJmd0O3N0YXR1cyBwcm9wZXJseS4KJiM0MzsJICovCiAJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsICZhbXA7dmRldi0mZ3Q7ZG1hYnVmcywgZG1hYnVmc19lbG0pIHsKIAkJaWYgKCFnZXRfZmlsZV9hY3RpdmUoJmFtcDtwcml2LSZndDtkbWFidWYtJmd0O2ZpbGUpKQogCQkJY29udGludWU7Ci0KLQkJaWYgKHByaXYtJmd0O3Jldm9rZWQgIT0gcmV2b2tlZCkgewotCQkJZG1hX3Jlc3ZfbG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwotCQkJaWYgKHJldm9rZWQpCi0JCQkJcHJpdi0mZ3Q7cmV2b2tlZCA9IHRydWU7Ci0JCQlkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi0mZ3Q7ZG1hYnVmKTsKLQkJCWRtYV9yZXN2X3dhaXRfdGltZW91dChwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsCi0JCQkJCSAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSwKLQkJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCQkJZG1hX3Jlc3ZfdW5sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7Ci0JCQlpZiAocmV2b2tlZCkgewotCQkJCWtyZWZfcHV0KCZhbXA7cHJpdi0mZ3Q7a3JlZiwgdmZpb19wY2lfZG1hX2J1Zl9kb25lKTsKLQkJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7cHJpdi0mZ3Q7Y29tcCk7Ci0JCQkJLyoKLQkJCQkgKiBSZS1hcm0gdGhlIHJlZ2lzdGVyZWQga3JlZiByZWZlcmVuY2UgYW5kIHRoZQotCQkJCSAqIGNvbXBsZXRpb24gc28gdGhlIHBvc3QtcmV2b2tlIHN0YXRlIG1hdGNoZXMgdGhlCi0JCQkJICogcG9zdC1jcmVhdGlvbiBzdGF0ZS4gIEFuIHVuLXJldm9rZSBmb2xsb3dlZCBieSBhCi0JCQkJICogbmV3IG1hcHBpbmcgbmVlZHMgdGhlIGtyZWYgdG8gYmUgbm9uLXplcm8gYmVmb3JlCi0JCQkJICoga3JlZl9nZXQoKSwgYW5kIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cCgpCi0JCQkJICogZGVsZWdhdGVzIGl0cyBkcmFpbiBiYWNrIHRocm91Z2ggdGhpcyByZXZva2UKLQkJCQkgKiBwYXRoIG9uIGEgcG9zc2libHktYWxyZWFkeS1yZXZva2VkIGRtYS1idWYuCi0JCQkJICovCi0JCQkJa3JlZl9pbml0KCZhbXA7cHJpdi0mZ3Q7a3JlZik7Ci0JCQkJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtwcml2LSZndDtjb21wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZG1hX3Jlc3ZfbG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwotCQkJCXByaXYtJmd0O3Jldm9rZWQgPSBmYWxzZTsKLQkJCQlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKLQkJCX0KLQkJfQomIzQzOwkJdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzKHByaXYsIHJldm9rZWQgPwomIzQzOwkJCQkJICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOgomIzQzOwkJCQkJICAgIFZGSU9fUENJX0RNQUJVRl9PSyk7CiAJCWZwdXQocHJpdi0mZ3Q7ZG1hYnVmLSZndDtmaWxlKTsKIAl9CiB9CkBAIC00MDQsMyAmIzQzOzcwNiwxMTcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCX0KIAl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgomIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoCiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSBfX3VzZXIgKmFyZywKJiM0MzsJc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgZGJfcmV2b2tlOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjsKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDtwY2lfb3BzIHx8ICF2ZGV2LSZndDtwY2lfb3BzLSZndDtnZXRfZG1hYnVmX3BoeXMpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osCiYjNDM7CQkJCSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQkJIHNpemVvZihkYl9yZXZva2UpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7ZGJfcmV2b2tlLCBhcmcsIHNpemVvZihkYl9yZXZva2UpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlkbWFidWYgPSBkbWFfYnVmX2dldChkYl9yZXZva2UuZG1hYnVmX2ZkKTsKJiM0MzsJaWYgKElTX0VSUihkbWFidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZG1hYnVmKTsKJiM0MzsKJiM0MzsJcHJpdiA9IGRtYWJ1Zi0mZ3Q7cHJpdjsKJiM0MzsJLyoKJiM0MzsJICogU2FuaXR5LWNoZWNrIHRoZSBETUFCVUYgaXMgcmVhbGx5IGEgdmZpb19wY2lfZG1hX2J1ZiBfYW5kXwomIzQzOwkgKiByZWxhdGVzIHRvIHRoZSBWRklPIGRldmljZSBpdCB3YXMgcHJvdmlkZWQgd2l0aC4KJiM0MzsJICoKJiM0MzsJICogSWYgdGhlIERNQUJVRiByZWxhdGVzIHRvIHRoaXMgdmRldiB0aGVuIHByaXYtJmd0O3ZkZXYgaXMKJiM0MzsJICogc3RhYmxlIGJlY2F1c2UgdGhpcyBvcGVuIGZkIHByZXZlbnRzIGNsZWFudXAuCiYjNDM7CSAqCiYjNDM7CSAqIElmIGl0IHJlbGF0ZXMgdG8gYSBkaWZmZXJlbnQgdmRldiwgcmVhZGluZyBwcml2LSZndDt2ZGV2IG1pZ2h0CiYjNDM7CSAqIHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgY2xlYW51cCBvbiB0aGF0IGRldmljZS4gIEJ1dCBpZiBzbywKJiM0MzsJICogaXQgcG9pbnRzIHRvIGEgbm9uLW1hdGNoaW5nIHZkZXYgb3IgTlVMTCBhbmQgaXMgdW51c2FibGUKJiM0MzsJICogZWl0aGVyIHdheS4KJiM0MzsJICovCiYjNDM7CWlmIChkbWFidWYtJmd0O29wcyAhPSAmYW1wO3ZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHwKJiM0MzsJICAgIFJFQURfT05DRShwcml2LSZndDt2ZGV2KSAhPSB2ZGV2KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJZ290byBvdXRfcHV0X2J1ZjsKJiM0MzsJfQomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQocndzZW1fd3JpdGUsICZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spIHsKJiM0MzsJCWlmIChwcml2LSZndDtzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCkgewomIzQzOwkJCXJldCA9IC1FQkFERkQ7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhwcml2LAomIzQzOwkJCQkJCSAgICBWRklPX1BDSV9ETUFCVUZfUEVSTV9SRVZPS0VEKTsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3B1dF9idWY6CiYjNDM7CWRtYV9idWZfcHV0KGRtYWJ1Zik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKAomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncywKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIF9fdXNlciAqYXJnLAomIzQzOwlzaXplX3QgYXJnc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgZGJfYXR0cjsKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7cGNpX29wcyB8fCAhdmRldi0mZ3Q7cGNpX29wcy0mZ3Q7Z2V0X2RtYWJ1Zl9waHlzKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LAomIzQzOwkJCQkgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsCiYjNDM7CQkJCSBzaXplb2YoZGJfYXR0cikpOwomIzQzOwlpZiAocmV0ICE9IDEpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtkYl9hdHRyLCBhcmcsIHNpemVvZihkYl9hdHRyKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfYXR0ci5kbWFidWZfZmQpOwomIzQzOwlpZiAoSVNfRVJSKGRtYWJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkbWFidWYpOwomIzQzOwomIzQzOwkvKiBWZXJpZnkgRE1BQlVGOiBzZWUgY29tbWVudHMgaW4gdmZpb19wY2lfZG1hX2J1Zl9yZXZva2UoKSAqLwomIzQzOwlwcml2ID0gZG1hYnVmLSZndDtwcml2OwomIzQzOwlpZiAoZG1hYnVmLSZndDtvcHMgIT0gJmFtcDt2ZmlvX3BjaV9kbWFidWZfb3BzIHx8CiYjNDM7CSAgICBSRUFEX09OQ0UocHJpdi0mZ3Q7dmRldikgIT0gdmRldikgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0X3B1dF9idWY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3dpdGNoIChkYl9hdHRyLm1lbWF0dHIpIHsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQzoKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQzoKJiM0MzsJCVdSSVRFX09OQ0UocHJpdi0mZ3Q7bWVtYXR0ciwgZGJfYXR0ci5tZW1hdHRyKTsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MztvdXRfcHV0X2J1ZjoKJiM0MzsJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKaW5kZXggZmNhOWQwZGZhYzkwZjguLmIzYzcyZGYwMDJjNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaApAQCAtMjMsNiAmIzQzOzIzLDI4IEBAIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQgewogCWJvb2wJCQl0ZXN0X21lbTsKIH07CiAKJiM0MztlbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHsKJiM0MzsJVkZJT19QQ0lfRE1BQlVGX09LID0gMCwKJiM0MzsJVkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCA9IDEsCiYjNDM7CVZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQgPSAyLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgewomIzQzOwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgZG1hYnVmc19lbG07CiYjNDM7CXNpemVfdCBzaXplOwomIzQzOwlzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjOwomIzQzOwlzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwcm92aWRlcjsKJiM0MzsJc3RydWN0IGZpbGUgKnZmaWxlOwomIzQzOwl1MzIgbnJfcmFuZ2VzOwomIzQzOwlzdHJ1Y3Qga3JlZiBrcmVmOwomIzQzOwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYV9wZ29mZl9hZGp1c3Q7CiYjNDM7CXUzMiBtZW1hdHRyOwomIzQzOwllbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHN0YXR1czsKJiM0Mzt9OwomIzQzOwogYm9vbCB2ZmlvX3BjaV9pbnR4X21hc2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTsKIHZvaWQgdmZpb19wY2lfaW50eF91bm1hc2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTsKIApAQCAtNjgsNyAmIzQzOzkwLDggQEAgdm9pZCB2ZmlvX2NvbmZpZ19mcmVlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7CiBpbnQgdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAkJCSAgICAgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogCi12b2lkIHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwomIzQzO3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwomIzQzO3ZvaWQgdmZpb19wY2lfdW5yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwogdTE2IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTsKIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJCQkJCXUxNiBjbWQpOwpAQCAtMTE0LDEyICYjNDM7MTM3LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJcmV0dXJuIChwZGV2LSZndDtjbGFzcyAmZ3Q7Jmd0OyA4KSA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0E7CiB9CiAKJiM0MztpbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdnBkbWFidWYsCiYjNDM7CQkJICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGludCBvcmRlciwKJiM0MzsJCQkgICAgICB1bnNpZ25lZCBsb25nICpvdXRfcGZuKTsKJiM0MztpbnQgdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSAgIHU2NCBwaHlzX3N0YXJ0LCB1NjQgcmVxX2xlbiwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHJlc19pbmRleCk7CiYjNDM7dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTsKJiM0Mzt2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7CiYjNDM7dm9pZCB2ZmlvX3BjaV9zZXRfdm1hX29wcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgogaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCQkJCSAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZywKIAkJCQkgIHNpemVfdCBhcmdzeik7Ci12b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwotdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpOwomIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoCiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSBfX3VzZXIgKmFyZywKJiM0MzsJc2l6ZV90IGFyZ3N6KTsKJiM0MztpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0cigKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiYjNDM7CXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBfX3VzZXIgKmFyZywKJiM0MzsJc2l6ZV90IGFyZ3N6KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludAogdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCkBAIC0xMjgsMTIgJiM0MzsxNzAsMjEgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiB7CiAJcmV0dXJuIC1FTk9UVFk7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoCiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSBfX3VzZXIgKmFyZywKJiM0MzsJc2l6ZV90IGFyZ3N6KQogewomIzQzOwlyZXR1cm4gLUVOT1RUWTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAotCQkJCQkgYm9vbCByZXZva2VkKQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoCiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgX191c2VyICphcmcsCiYjNDM7CXNpemVfdCBhcmdzeikKIHsKJiM0MzsJcmV0dXJuIC1FTk9UVFk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaAppbmRleCA4NzNkZTIwYTIyNDc1OS4uNGM0MmE3YjJlZTg1NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oCkBAIC02Nyw5ICYjNDM7NjcsMjIgQEAgZW51bSBwY2lfcDJwZG1hX21hcF90eXBlIHsKIAlQQ0lfUDJQRE1BX01BUF9USFJVX0hPU1RfQlJJREdFLAogfTsKIAotI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BCiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BX0NPUkUKIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaW1fcDJwZG1hX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiYjNDM7CQkJCQkJCSAgIGludCBiYXIpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BCiBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLAogCQl1NjQgb2Zmc2V0KTsKIGludCBwY2lfcDJwZG1hX2Rpc3RhbmNlX21hbnkoc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLCBzdHJ1Y3QgZGV2aWNlICoqY2xpZW50cywKQEAgLTg5LDE1ICYjNDM7MTAyLDYgQEAgc3NpemVfdCBwY2lfcDJwZG1hX2VuYWJsZV9zaG93KGNoYXIgKnBhZ2UsIHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2LAogZW51bSBwY2lfcDJwZG1hX21hcF90eXBlIHBjaV9wMnBkbWFfbWFwX3R5cGUoc3RydWN0IHAycGRtYV9wcm92aWRlciAqcHJvdmlkZXIsCiAJCQkJCSAgICAgc3RydWN0IGRldmljZSAqZGV2KTsKICNlbHNlIC8qIENPTkZJR19QQ0lfUDJQRE1BICovCi1zdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCQkJICAgaW50IGJhcikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLAogCQlzaXplX3Qgc2l6ZSwgdTY0IG9mZnNldCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDJjNDQ1NDU4M2MxMTViLi41MzFhZWMzNTU2ODZiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC01NTcsNyAmIzQzOzU1Nyw3IEBAIHN0cnVjdCBwY2lfZGV2IHsKIAl1MTYJCXBhc2lkX2NhcDsJLyogUEFTSUQgQ2FwYWJpbGl0eSBvZmZzZXQgKi8KIAl1MTYJCXBhc2lkX2ZlYXR1cmVzOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BDSV9QMlBETUEKJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFfQ09SRQogCXN0cnVjdCBwY2lfcDJwZG1hIF9fcmN1ICpwMnBkbWE7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUENJX0RPRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaAppbmRleCA4OTE2NWI3NjllNWMxNi4uYTJmNTg2ZTRmY2Q4ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7CiAJYm9vbAkJCW5lZWRzX3BtX3Jlc3RvcmU6MTsKIAlib29sCQkJcG1faW50eF9tYXNrZWQ6MTsKIAlib29sCQkJcG1fcnVudGltZV9lbmdhZ2VkOjE7CiYjNDM7CWJvb2wJCQl6YXBfYmFyc19vbl9yZXZva2U6MTsKIAlzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlCSpwY2lfc2F2ZWRfc3RhdGU7CiAJc3RydWN0IHBjaV9zYXZlZF9zdGF0ZQkqcG1fc2F2ZTsKIAlpbnQJCQlpb2V2ZW50ZmRzX25yOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKaW5kZXggNWRlNjE4YTNhNWVlZWUuLmFiMzBiODkzOTlkMDM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKQEAgLTE1MzQsNiAmIzQzOzE1MzQsNTMgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7CiAgKi8KICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyCiAKJiM0MzsvKioKJiM0MzsgKiBHaXZlbiBhIGRtYV9idWYgZmQgcHJldmlvdXNseSBjcmVhdGVkIGJ5CiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBhIFNFVCBvZiB0aGlzIGZlYXR1cmUgcmVxdWVzdHMgdGhhdAomIzQzOyAqIGFjY2VzcyB0byB0aGUgY29ycmVzcG9uZGluZyBETUFCVUYgaXMgaW1tZWRpYXRlbHkgYW5kIHBlcm1hbmVudGx5CiYjNDM7ICogcmV2b2tlZC4gIE9uIHN1Y2Nlc3NmdWwgcmV0dXJuLCB0aGUgYnVmZmVyIGlzIG5vdCBhY2Nlc3NpYmxlCiYjNDM7ICogdGhyb3VnaCBhbnkgbW1hcCgpIG9yIGRtYS1idWYgaW1wb3J0LiAgVGhlIGJ1ZmZlciBpcyBwZXJtYW5lbnRseQomIzQzOyAqIGRpc2FibGVkLCBhbmQgVkZJTyByZWZ1c2VzIGFsbCBtYXAsIG1tYXAsIGF0dGFjaCwgZXRjLiByZXF1ZXN0cy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6CiYjNDM7ICoKJiM0MzsgKiAgRUJBREYsIEVJTlZBTDogZG1hYnVmX2ZkIGlzIG5vdCBhIERNQUJVRiBmZC4KJiM0MzsgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuCiYjNDM7ICogIEVCQURGRDogVGhlIERNQUJVRiBpcyBhbHJlYWR5IHJldm9rZWQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIDEzCiYjNDM7CiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgewomIzQzOwlfX3MzMglkbWFidWZfZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBHaXZlbiBhIGRtYV9idWYgZmQgcHJldmlvdXNseSBjcmVhdGVkIGJ5CiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBTRVQgdGhlIG1lbW9yeSBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlCiYjNDM7ICogdXNlZCBieSBmdXR1cmUgbW1hcCgpcyBvZiB0aGF0IGZkLiAgU0VUdGluZyBhIG5ldyBhdHRyaWJ1dGUgZG9lcwomIzQzOyAqIG5vdCBhZmZlY3QgZXhpc3RpbmcgVk1Bcy4KJiM0MzsgKgomIzQzOyAqIFRoZSBkZWZhdWx0LCBpZiBubyBwcmV2aW91cyBTRVQgaGFzIGJlZW4gcGVyZm9ybWVkLCBpcyBOQy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6CiYjNDM7ICoKJiM0MzsgKiAgRUJBREYsIEVJTlZBTDogZG1hYnVmX2ZkIGlzIG5vdCBhIERNQUJVRiBmZC4KJiM0MzsgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuCiYjNDM7ICogIEVOT0VOVDogVGhlIGdpdmVuIG1lbWF0dHIgaXMgbm90IHN1cHBvcnRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSIDE0CiYjNDM7CiYjNDM7LyogVmFsaWQgbWVtb3J5IGF0dHJpYnV0ZXMgZm9yIHRoZSBtZW1hdHRyIGZpZWxkICovCiYjNDM7ZW51bSB2ZmlvX2RldmljZV9kbWFfYnVmX21lbWF0dHIgewomIzQzOwlWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQyA9IDAsIC8qIHBncHJvdF9ub25jYWNoZWQgKi8KJiM0MzsJVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MgPSAxLCAvKiBwZ3Byb3Rfd3JpdGVjb21iaW5lICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgewomIzQzOwlfX3MzMglkbWFidWZfZmQ7CiYjNDM7CV9fdTMyCW1lbWF0dHI7CiYjNDM7fTsKJiM0MzsKIC8qIC0tLS0tLS0tIEFQSSBmb3IgVHlwZTEgVkZJTyBJT01NVSAtLS0tLS0tLSAqLwogCiAvKioKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3OTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgVkZJTyBQQ0kgRE1BLUJVRiBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgVkZJTyBpbnRlcmFjdHMgd2l0aCBQQ0kgUDJQRE1BIGFuZCBETUEtQlVGLiAgVGhlIGdvYWwsIGl0IHNlZW1zLCBpcyB0byBpbXByb3ZlIERNQS1CVUYgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBWRklPIGZyYW1ld29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvZGUgaXMgdG91Y2hlZCBhbmQgaWYgaXTigJlzIGludGVyZXN0aW5nIGVub3VnaCBmb3IgZnV6emluZy4KCkZpcnN0bHksIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYENPTkZJR19QQ0lfUDJQRE1BX0NPUkVgLCBhbmQgY3J1Y2lhbGx5LCB0aGV5JiMzOTt2ZSBzaGlmdGVkIGBDT05GSUdfVkZJT19QQ0lfRE1BQlVGYCB0byBub3cgKmRlcGVuZCogb24gYFBDSV9QMlBETUFgIHJhdGhlciB0aGFuIHJlcXVpcmluZyAqYm90aCogYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8gaW1tZWRpYXRlbHkgbm90ZS4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCB0aGVzZSBuZXcgVkZJTyBmZWF0dXJlczogYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0VgIGFuZCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJgLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0aGVzZSBmZWF0dXJlcyBzdWdnZXN0IGVuaGFuY2VkIGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgb3ZlciBETUEtQlVGcy4KClRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGhhcHBlbmluZyBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNgLCBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY2AsIGFuZCBgZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuY2AuIFdlIGtub3cgVkZJTyBpdHNlbGYgaXMgcmVhY2hhYmxlIGFuZCBpcyBhY3RpdmVseSBmdXp6ZWQgYnkgc3l6a2FsbGVyLCBzbyB0aGF04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHNlZSB0aGUgbmV3IGZlYXR1cmVzIGFyZSBoYW5kbGVkIGluIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgLCB3aGljaCBhbHNvIGhhbmRsZXMgb3RoZXIgaW9jdGxzIHRoYXQgbWF5IGJlIGdvb2QgdG8gZnV6ei4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBXZSBuZWVkOiBgQ09ORklHX1ZGSU9fUENJX0NPUkVgLCBgQ09ORklHX1ZGSU9fUENJYCwgYENPTkZJR19QQ0lfUDJQRE1BYCwgYW5kIGBDT05GSUdfVkZJT19QQ0lfRE1BQlVGYC4gIGBWRklPX1BDSV9ETUFCVUZgIGlzIHNwZWNpZmljYWxseSBjb25kaXRpb25hbCBpbiB0aGUgS2NvbmZpZyB3aXRoOiBgZGVmX2Jvb2wgeSBpZiBQQ0lfUDJQRE1BYCwgYW5kIGRlcGVuZGVudCBvbiBgVkZJT19QQ0lfQ09SRWAsIHNvIHRvIGVuYWJsZSBldmVyeXRoaW5nIGl0IHNlZW1zIHdlIG5lZWQgYFZGSU9fUENJYCBhcyB0aGF0IGJyaW5ncyBpbiBgVkZJT19QQ0lfQ09SRWAgd2hpY2ggdGhlbiBwdWxscyBpbiBgVkZJT19QQ0lfRE1BQlVGYC4gYFBDSV9QMlBETUFgLCBpbiB0aGUgUENJIEtjb25maWcsIHJlcXVpcmVzIGBaT05FX0RFVklDRWAuIFNvLCB0aGUgbWluaW1hbCBzZXQgaXM6IGBQQ0lfUDJQRE1BYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBWRklPX1BDSWAuCgpUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIHRoZSBuZXcgZmVhdHVyZSBoYW5kbGVyczogYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyYCwgYW5kIHRoZSBjaGFuZ2VzIHRvIGB2ZmlvX3BjaV9jb3JlX21tYXBgLiAgQWxzbywgdGhlIG5ldyBmdW5jdGlvbiBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYCBhbmQgc3VwcG9ydGluZyBmdW5jdGlvbnMgbGlrZSBgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbmAsIGB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0YCwgYHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZmAsIGFuZCBgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzYC4gIFRoZXnigJlyZSBhbGwgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAgYW5kIHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uIGFuZCBmdXp6aW5nLiBOb3csIGxldOKAmXMgZ2V0IHRoZSB0ZXN0aW5nIHRvb2xzIHJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTYyPWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTgwLVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTU4MTpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTgyLVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUjpcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTY4Mj12b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy03MTAtI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NzExOmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTcxMi1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTE1ND1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTU2LVx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTU3OmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xNTgtXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xNjc9dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTczLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTc0OnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTE3NS1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDg3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBWRklPIFBDSSBMYW5kc2NhcGU6IEZlYXR1cmUgQWNjZXNzIGFuZCBETUEgQnVmZmVyIE1hcHBpbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IFZGSU8tUENJJiMzOTtzIGlubmVyIHdvcmtpbmdzLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGZlYXR1cmVzIGFyZSBhY2Nlc3NlZC4gSXQgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgbWFuYWdpbmcgdGhvc2UgZmVhdHVyZXMgaXMgdGhlIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGludGVyYWN0aW9uIGZsb3cgcHJlY2lzZWx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBzZXQgYW5kIGdldCB0aGluZ3MgdXNpbmcgdGhpcyBtZXRob2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBhcmUgYWJsZSB0byBkbyB0aGF0LCBhbmQgaW4gd2hhdCBzaXR1YXRpb25zLgoKQmV5b25kIHRoYXQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgRE1BIGJ1ZmZlciBtYXBwaW5nLCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byB0aGUgZmVhdHVyZXMgb2YgdGhlIGRldmljZSB0aGF0IHdlIGFyZSBhY2Nlc3NpbmcuIEkmIzM5O20gZ29pbmcgdG8gdHVybiBteSBhdHRlbnRpb24gdG8gYHZmaW9fcGNpX2RtYV9idWZfbW1hcGAuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb24gb2YgdGhhdCBmdW5jdGlvbmFsaXR5LiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIGludG8gd2hhdCBkYXRhIHN0cnVjdHVyZXMgc3VwcG9ydCB0aGUgaW50ZXJhY3Rpb24uIEhvdyBkb2VzIHRoaXMgZml0IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHNlY3VyZSBETUEgYWNjZXNzIHdpdGhpbiBWRklPPyBBcmUgdGhlcmUgc3BlY2lmaWMgcHJvdGVjdGlvbnMgaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGRvIHRoZXkgd29yaz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSB3b3JraW5nIGFzIHRoZXkgc2hvdWxkIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTE0PXN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Zixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTMwLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozMTpzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzIte1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzMi1cdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MTMzOlx0Lm1tYXAgPSB2ZmlvX3BjaV9kbWFfYnVmX21tYXAsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzNC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODc0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5gKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuYC4gSXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBkdWcgaW50byB0aGUgRE1BIGJ1ZmZlciBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgVkZJTy1QQ0kgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MsIHBhcnRpY3VsYXJseSBpdHMgcm9sZSBpbiBsb2NhdGluZyB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGFzc29jaWF0ZWQgd2l0aCBhIERNQSBidWZmZXIuIFRoaXMgaXMga2V5IGZvciBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9mIG1lbW9yeSBtYXBwaW5nIG9yIERNQSBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIGRyaXZlci4gS25vd2luZyBpdHMgYmVoYXZpb3Igd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IFZGSU8gaW50ZXJhY3RzIHdpdGggRE1BIGFuZCBwYWdlIGFsbG9jYXRpb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGUgYXJndW1lbnRzLCB0aGUgcmV0dXJuIHZhbHVlcywgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGFjY29tcGxpc2guIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIHdpZGVyIFZGSU8tUENJIGZyYW1ld29yay4gV2hhdCBvdGhlciBWRklPIGZ1bmN0aW9ucyBkb2VzIGl0IGRlcGVuZCBvbiBvciBjb29yZGluYXRlIHdpdGg/IFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBjb2RlIGFuZCB0aGUgY29tbWl0IGxvZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNzM4PXN0YXRpYyB2bV9mYXVsdF90IHZmaW9fcGNpX21tYXBfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODIwLVx0XHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX09LKSB7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxODIxOlx0XHRcdGludCBwcmVzID0gdmZpb19wY2lfZG1hX2J1Zl9maW5kX3Bmbihwcml2LCB2bWEsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODIyLVx0XHRcdFx0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xMzktXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjE0MDppbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMTQxLVx0XHRcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NTIyPWludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNTU1LVx0ICpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NTU2Olx0ICogdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbigpIHJldmVyc2VzIHRoaXMgb2Zmc2V0IHVzaW5nXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTU1Ny1cdCAqIHZtYV9wZ29mZl9hZGp1c3QsIHNvIHRoYXQgdWx0aW1hdGVseSBhIGZhdWx0JiMzOTtzIG9mZnNldCBmcm9tXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTM1PXN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTM5LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTQwOmludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICp2cGRtYWJ1ZixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTE0MS1cdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcyMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnRgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBtaW5kJiMzOTtzIGF1dG9tYXRpY2FsbHkganVtcGluZyB0byBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAuIFRoaXMgZnVuY3Rpb24sIG1vcmUgdGhhbiBsaWtlbHksIGlzIHRoZSBsaW5jaHBpbiB3ZSYjMzk7cmUgZ29pbmcgdG8gYmUgZm9jdXNpbmcgb24uIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCB0aGUgcGxhY2Ugd2hlcmUgd2UgdHJhbnNpdGlvbiBkYXRhLCBhbmQgaXQgaXMgZ29pbmcgdG8gc2V0IHVwIHdoZXJlIGFsbCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgaGFuZGxlZC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiBETUEtQlVGIGV4cG9ydCB3aXRoaW4gdGhlIFZGSU8gY29udGV4dC4gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucz8gTWVtb3J5IG1hcHBpbmdzLCBhY2Nlc3MgcGVybWlzc2lvbnMsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIOKAkyB0aG9zZSBhcmUgdGhlIHR5cGVzIG9mIHRoaW5ncyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgYXMgSSBnby4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGF0LCBhbmQgaG93IGl0IGlzIGFsbCBwbHVtYmVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHRoaXMgZXhwb3J0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTt2ZSBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX3BjaV9kbWFidWZfZXhwb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MTQwPWludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjg0LSAqL1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoyODU6c3RhdGljIGludCB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjg2LVx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NDMzPWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTQ5OC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NDk5Olx0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBnZXRfZG1hX2J1Zi5vcGVuX2ZsYWdzKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNTAwLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTUyMj1pbnQgdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTU3NC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NTc1Olx0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBPX0NMT0VYRUMgfCBPX1JEV1IpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy01NzYtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUyMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgbWFuYWdpbmcgRE1BIGJ1ZmZlciBzdGF0dXMgd2l0aGluIHRoZSBWRklPLVBDSSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIERNQSBidWZmZXIgaXRzZWxmLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXMgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5OyBob3cgaXMgdGhpcyBoYW5kbGVkIGhlcmU/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IGJhcnJpZXJzLCBjYWNoZSBjb2hlcmVuY3ksIGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMg4oCTIHRoaXMgYXJlYSBpcyBub3RvcmlvdXNseSB0cmlja3kuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzLCBlc3BlY2lhbGx5IHRoZSBvbmVzIHJlbGF0ZWQgdG8gc2V0dGluZyBmbGFncyBvciB1cGRhdGluZyBzdGF0ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHJvYnVzdCwgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZCB0byB0aGUgdmFyaW91cyBwb3NzaWJsZSBndWVzdCBPUyBiZWhhdmlvcnMgYW5kIHBvdGVudGlhbCBtYWxpY2lvdXMgYXR0ZW1wdHMgYXQgYWNjZXNzaW5nIGRhdGEgdGhleSBzaG91bGRuJiMzOTt0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRlYWwgd2l0aCB0aGUgYnVmZmVyIHN0YXR1cyBhbmQgaG93IHRoZXkgZG8gZXJyb3IgaGFuZGxpbmcsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NTIyPWludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNjA4LS8qIFNldCB0aGUgRE1BQlVGJiMzOTtzIHJldm9jYXRpb24gc3RhdHVzIChPSyBvciB0ZW1wb3JhcmlseS9wZXJtYW5lbnRseSByZXZva2VkKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzo2MDk6c3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy02MTAtXHRcdFx0XHRcdGVudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMgbmV3X3N0YXR1cylcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTY2MT12b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTY3NC1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6Njc1Olx0XHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdiwgcmV2b2tlZCA/XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTY3Ni1cdFx0XHRcdFx0ICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NzExPWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy03NTktXHRcdH0gZWxzZSB7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjc2MDpcdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNzYxLVx0XHRcdFx0XHRcdCAgICBWRklPX1BDSV9ETUFCVUZfUEVSTV9SRVZPS0VEKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzNDEKCQkJCQkJCW91dHB1dDogMjQyCgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZGSU8gUENJIERNQS1CVUYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIFZGSU8gUENJIERNQS1CVUYgc3VwcG9ydC4gV2UmIzM5O3JlIHRhbGtpbmcgbmV3IGlvY3RscyBhbmQgbW1hcCBoYW5kbGluZyBoZXJlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIGFkZCB0aGF0IHRvIHRoZSBmdXp6aW5nIHF1ZXVlLgoKTm93LCBmb3IgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHJgLCBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYCwgYHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5gLCBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAsIGB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWZgLCBhbmQgYHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYFpPTkVfREVWSUNFYC4gSG1tLCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgYFpPTkVfREVWSUNFYCBpcyBpbmRlZWQgYSBoYXJkIHJlcXVpcmVtZW50LiBBaCwgeWVzLCBgUENJX1AyUERNQWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLCBzbyB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gaGF2ZSB0aGF0IGVuYWJsZWQuIEdvb2QsIGRvdWJsZS1jaGVja2VkLgoKTm93LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGp1c3QgYFZGSU9fUENJYCBpcyBzdWZmaWNpZW50LCBvciBpZiBgVkZJT19QQ0lfQ09SRWAgaXMgYWxzbyBuZWNlc3NhcnkuIEV4Y2VsbGVudCwgYFZGSU9fUENJYCBzZWxlY3RzIGBWRklPX1BDSV9DT1JFYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gV2UmIzM5O3JlIGdvb2Qgd2l0aCBqdXN0IGVuYWJsaW5nIGBWRklPX1BDSWAuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGFib3V0IGBWRklPX1BDSV9ETUFCVUZgPyBJcyB0aGF0IGEgc2VwYXJhdGUgY29uZmlnIG9wdGlvbj8gWWVzLCBpdCBpcyEgV2FpdC4uLiBpdCYjMzk7cyBhIGBkZWZfYm9vbCB5IGlmIFBDSV9QMlBETUFgLiBTbywgaXQmIzM5O3MgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIGBQQ0lfUDJQRE1BYCBpcyBlbmFibGVkLiBPa2F5LCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gV2UgZG9uJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgZW5hYmxpbmcgdGhhdCBleHBsaWNpdGx5LgoKTGV0IG1lIHNlZSwgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgYW4gZXllIG9uPyBgUENJX1AyUERNQV9DT1JFYCBsb29rcyByZWxldmFudCwgYnV0IGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGJvdGggYFBDSV9QMlBETUFgIGFuZCBgVkZJT19QQ0lfQ09SRWAuIFNpbmNlIHdlIGFscmVhZHkga25vdyB0aGF0IHRoZXNlIGNvbmZpZ3MgYXJlIGFscmVhZHkgYWN0aXZhdGVkLCBpdCYjMzk7cyBlbmFibGVkIGF1dG9tYXRpY2FsbHkuIEdvb2QuCgpBbHJpZ2h0LCB3aXRoIGFsbCB0aGF0IG91dCBvZiB0aGUgd2F5LCBJIHRoaW5rIEkmIzM5O20gcmVhZHkgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZG9jdW1lbnQgdGhlc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHImIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9tbWFwJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4mIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hYnVmX2V4cG9ydCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGSU8gZmVhdHVyZXMgKFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0UgYW5kIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSKSBhbmQgbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxpbmcgdG8gdXNlIERNQUJVRi1iYWNrZWQgbW1hcHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHImIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9tbWFwJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4mIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hYnVmX2V4cG9ydCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGSU8gZmVhdHVyZXMgKFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0UgYW5kIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSKSBhbmQgbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxpbmcgdG8gdXNlIERNQUJVRi1iYWNrZWQgbW1hcHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDA6MjA6MDUuNzYzMDE2MzI4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MDM0NjU3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX21tYXBcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5cIixcbiAgICBcInZmaW9fcGNpX2RtYWJ1Zl9leHBvcnRcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZlwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZJTyBmZWF0dXJlcyAoVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1JFVk9LRSBhbmQgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFIpIGFuZCBtb2RpZmllcyB0aGUgbW1hcCBoYW5kbGluZyB0byB1c2UgRE1BQlVGLWJhY2tlZCBtbWFwcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjA1Ljc2MzAyNDc4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDkwNDU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJlMzA3OTc3YjYxNDkzNTUwODliYTA4MzEzM2FmMjEzN2RkMTQ1YjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAwMDoyMDowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggYzhkNGI5MTNmMjZjMTIuLjcxMzg2MWFmNDQ4NDZhIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjA2MjYsNyArMjA2MjYsNyBAQCBCOlxcdGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZ1xcbiBDOlxcdGlyYzovL2lyYy5vZnRjLm5ldC9saW51eC1wY2lcXG4gVDpcXHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3BjaS9wY2kuZ2l0XFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BjaS9wMnBkbWEucnN0XFxuLUY6XFx0ZHJpdmVycy9wY2kvcDJwZG1hLmNcXG4rRjpcXHRkcml2ZXJzL3BjaS9wMnBkbWEqXFxuIEY6XFx0aW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcXG4gXFxuIFBDSSBQT1dFUiBDT05UUk9MXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXFxuaW5kZXggMzNjODg0MzJiNzI4NzUuLjU5ZDcwYmM4NGNjOWFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnXFxuQEAgLTIwNiwxMSArMjA2LDcgQEAgY29uZmlnIFBDSUVfVFBIXFxuIGNvbmZpZyBQQ0lfUDJQRE1BXFxuIFxcdGJvb2wgXFxcIlBDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbi1cXHQjXFxuLVxcdCMgVGhlIG5lZWQgZm9yIHRoZSBzY2F0dGVybGlzdCBETUEgYnVzIGFkZHJlc3MgZmxhZyBtZWFucyBQQ0kgUDJQRE1BXFxuLVxcdCMgcmVxdWlyZXMgNjRiaXRcXG4tXFx0I1xcbi1cXHRkZXBlbmRzIG9uIDY0QklUXFxuK1xcdHNlbGVjdCBQQ0lfUDJQRE1BX0NPUkVcXG4gXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuIFxcdHNlbGVjdCBORUVEX1NHX0RNQV9GTEFHU1xcbiBcXHRoZWxwXFxuQEAgLTIyNiw2ICsyMjIsMTAgQEAgY29uZmlnIFBDSV9QMlBETUFcXG4gXFxuIFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gXFxuK2NvbmZpZyBQQ0lfUDJQRE1BX0NPUkVcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGJvb2xcXG4rXFxuIGNvbmZpZyBQQ0lfTEFCRUxcXG4gXFx0ZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpXFxuIFxcdHNlbGVjdCBOTFNcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxcbmluZGV4IDQxZWJjM2I5YTUxODI0Li4wYjMyNTcyZDU3YTE1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlXFxuQEAgLTMwLDYgKzMwLDcgQEAgb2JqLSQoQ09ORklHX1BDSV9TWVNDQUxMKVxcdCs9IHN5c2NhbGwub1xcbiBvYmotJChDT05GSUdfUENJX1NUVUIpXFx0XFx0Kz0gcGNpLXN0dWIub1xcbiBvYmotJChDT05GSUdfUENJX1BGX1NUVUIpXFx0Kz0gcGNpLXBmLXN0dWIub1xcbiBvYmotJChDT05GSUdfUENJX0VDQU0pXFx0XFx0Kz0gZWNhbS5vXFxuK29iai0kKENPTkZJR19QQ0lfUDJQRE1BX0NPUkUpXFx0Kz0gcDJwZG1hX2NvcmUub1xcbiBvYmotJChDT05GSUdfUENJX1AyUERNQSlcXHQrPSBwMnBkbWEub1xcbiBvYmotJChDT05GSUdfWEVOX1BDSURFVl9GUk9OVEVORCkgKz0geGVuLXBjaWZyb250Lm9cXG4gb2JqLSQoQ09ORklHX1ZHQV9BUkIpXFx0XFx0Kz0gdmdhYXJiLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmMgYi9kcml2ZXJzL3BjaS9wMnBkbWEuY1xcbmluZGV4IDdjODk4NTQyYWY4ZDVlLi41MGIxYTdkYWY1NWNjNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9wMnBkbWEuY1xcbisrKyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jXFxuQEAgLTIxLDEyICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfYnVmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXJyYXkuaFxcdTAwM2VcXG4gXFxuLXN0cnVjdCBwY2lfcDJwZG1hIHtcXG4tXFx0c3RydWN0IGdlbl9wb29sICpwb29sO1xcbi1cXHRib29sIHAycG1lbV9wdWJsaXNoZWQ7XFxuLVxcdHN0cnVjdCB4YXJyYXkgbWFwX3R5cGVzO1xcbi1cXHRzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyIG1lbVtQQ0lfU1REX05VTV9CQVJTXTtcXG4tfTtcXG4rI2luY2x1ZGUgXFxcInAycGRtYS5oXFxcIlxcbiBcXG4gc3RydWN0IHBjaV9wMnBkbWFfcGFnZW1hcCB7XFxuIFxcdHN0cnVjdCBkZXZfcGFnZW1hcCBwZ21hcDtcXG5AQCAtMjI2LDExMCArMjIxLDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHAycGRtYV9wZ21hcF9vcHMgPSB7XFxuIFxcdC5mb2xpb19mcmVlID0gcDJwZG1hX2ZvbGlvX2ZyZWUsXFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG4rdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSlcXG4ge1xcbi1cXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRhdGE7XFxuLVxcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XFxuLVxcbi1cXHRwMnBkbWEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuLVxcdGlmICghcDJwZG1hKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHQvKiBGbHVzaCBhbmQgZGlzYWJsZSBwY2lfYWxsb2NfcDJwX21lbSgpICovXFxuLVxcdHBkZXYtXFx1MDAzZXAycGRtYSA9IE5VTEw7XFxuLVxcdGlmIChwMnBkbWEtXFx1MDAzZXBvb2wpXFxuLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbi1cXHR4YV9kZXN0cm95KFxcdTAwMjZwMnBkbWEtXFx1MDAzZW1hcF90eXBlcyk7XFxuLVxcbiBcXHRpZiAoIXAycGRtYS1cXHUwMDNlcG9vbClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuIFxcdGdlbl9wb29sX2Rlc3Ryb3kocDJwZG1hLVxcdTAwM2Vwb29sKTtcXG4gXFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYua29iaiwgXFx1MDAyNnAycG1lbV9ncm91cCk7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyc1xcbi0gKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZVxcbi0gKiBmb3IgYSBQQ0kgZGV2aWNlLiBJdCBhbGxvY2F0ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhXFxuLSAqIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBQMlBETUEgb3BlcmF0aW9ucywgaW5jbHVkaW5nIG1hcHBpbmcgdHlwZVxcbi0gKiB0cmFja2luZy5cXG4tICovXFxuLWludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XFxuLVxcdGludCBpLCByZXQ7XFxuLVxcbi1cXHRwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuLVxcdGlmIChwMnApXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cDJwID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghcDJwKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuLVxcdHhhX2luaXQoXFx1MDAyNnAycC1cXHUwMDNlbWFwX3R5cGVzKTtcXG4tXFx0LypcXG4tXFx0ICogSXRlcmF0ZSBvdmVyIGFsbCBzdGFuZGFyZCBQQ0kgQkFScyBhbmQgcmVjb3JkIG9ubHkgdGhvc2UgdGhhdFxcbi1cXHQgKiBjb3JyZXNwb25kIHRvIE1NSU8gcmVnaW9ucy4gU2tpcCBub24tbWVtb3J5IHJlc291cmNlcyAoZS5nLiBJL09cXG4tXFx0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcXG4tXFx0ICogdHJhbnNhY3Rpb25zLlxcbi1cXHQgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkrKykge1xcbi1cXHRcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0cDJwLVxcdTAwM2VtZW1baV0ub3duZXIgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbi1cXHRcXHRwMnAtXFx1MDAzZW1lbVtpXS5idXNfb2Zmc2V0ID1cXG4tXFx0XFx0XFx0cGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXRfcDJwO1xcbi1cXG4tXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXFx1MDAzZXAycGRtYSwgcDJwKTtcXG4tXFx0cmV0dXJuIDA7XFxuLVxcbi1vdXRfcDJwOlxcbi1cXHRkZXZtX2tmcmVlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHAycCk7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfaW5pdCk7XFxuLVxcbi0vKipcXG4tICogcGNpbV9wMnBkbWFfcHJvdmlkZXIgLSBHZXQgcGVlci10by1wZWVyIERNQSBwcm92aWRlclxcbi0gKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcXG4tICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgcGVlci10by1wZWVyIERNQSBwcm92aWRlciBmb3IgYSBQQ0kgZGV2aWNlLiBUaGUgbGlmZXRpbWVcXG4tICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXFxuLSAqIGRyaXZlci4gQSBkcml2ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlXFxuLSAqIHByb3ZpZGVyLCBhbmQgYW55IERNQSBtYXBwaW5ncyBjcmVhdGVkIGZvciBhbnkgTU1JTywgYXJlIGFsbCBjbGVhbmVkIHVwXFxuLSAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cXG4tICpcXG4tICogU2luY2UgUDJQIGlzIGFsbW9zdCBhbHdheXMgc2hhcmVkIHdpdGggYSBzZWNvbmQgZHJpdmVyIHRoaXMgbWVhbnMgc29tZSBzeXN0ZW1cXG4tICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8ncyBETUEgbXVzdCBiZSBpbiBwbGFjZSB0byB1c2UgdGhpc1xcbi0gKiBmdW5jdGlvbi4gRm9yIGV4YW1wbGUgYSByZXZva2UgY2FuIGJlIGJ1aWx0IHVzaW5nIERNQUJVRi5cXG4tICovXFxuLXN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKVxcbi17XFxuLVxcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XFxuLVxcbi1cXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuLVxcdGlmIChXQVJOX09OKCFwMnApKVxcbi1cXHRcXHQvKiBTb21lb25lIGZvcmdvdCB0byBjYWxsIHRvIHBjaW1fcDJwZG1hX2luaXQoKSBiZWZvcmUgKi9cXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRyZXR1cm4gXFx1MDAyNnAycC1cXHUwMDNlbWVtW2Jhcl07XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfcHJvdmlkZXIpO1xcbi1cXG4gc3RhdGljIGludCBwY2lfcDJwZG1hX3NldHVwX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTtcXG5AQCAtOTMyLDggKzgzMyw4IEBAIHZvaWQgKnBjaV9hbGxvY19wMnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplKVxcbiBcXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwZG1hO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2UoKSB0b1xcbi1cXHQgKiBlbnN1cmUgcGRldi1cXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXFxuK1xcdCAqIFBhaXJzIHdpdGggc3luY2hyb25pemVfcmN1KCkgaW4gcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woKVxcbitcXHQgKiB0byBlbnN1cmUgcGRldi1cXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXFxuIFxcdCAqIHJlYWQtbG9jay5cXG4gXFx0ICovXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmggYi9kcml2ZXJzL3BjaS9wMnBkbWEuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjk0NjM4MzgwOTk4MTQ5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcGNpL3AycGRtYS5oXFxuQEAgLTAsMCArMSwyOSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBQQ0kgcGVlci10by1wZWVyIERNQSBzdXBwb3J0LlxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1BDSV9QMlBETUFfSFxcbisjZGVmaW5lIF9QQ0lfUDJQRE1BX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZW5hbGxvYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgcGNpX3AycGRtYSB7XFxuK1xcdHN0cnVjdCBnZW5fcG9vbCAqcG9vbDtcXG4rXFx0Ym9vbCBwMnBtZW1fcHVibGlzaGVkO1xcbitcXHRzdHJ1Y3QgeGFycmF5IG1hcF90eXBlcztcXG4rXFx0c3RydWN0IHAycGRtYV9wcm92aWRlciBtZW1bUENJX1NURF9OVU1fQkFSU107XFxuK307XFxuK1xcbisjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcXG4rdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSlcXG4re1xcbit9XFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3AycGRtYV9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmIyMTM4YmYyYmM3YjdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuY1xcbkBAIC0wLDAgKzEsMTE4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFBDSSBwZWVyLXRvLXBlZXIgRE1BIHN1cHBvcnQgY29yZSwgcHJvdmlkaW5nIGEgYmFyZS1ib25lc1xcbisgKiBwY2ltX3AycGRtYV9wcm92aWRlcigpIGludGVyZmFjZSB0byBkcml2ZXJzIGV2ZW4gaWYgZnVsbCBQMlBETUFcXG4rICogaXNuJ3QgcHJlc2VudC4gIFRoZSBmdWxsIFAyUERNQSBmZWF0dXJlIGlzIGluIHAycGRtYS5jIChzZWVcXG4rICogQ09ORklHX1BDSV9QMlBETUEpLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgTG9nYW4gR3VudGhvcnBlXFxuKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBNaWNyb3NlbWkgQ29ycG9yYXRpb25cXG4rICogQ29weXJpZ2h0IChjKSAyMDE3LCBDaHJpc3RvcGggSGVsbHdpZ1xcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEVpZGV0aWNvbSBJbmMuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwicGNpLXAycGRtYTogXFxcIiBmbXRcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2N0eXBlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZW5hbGxvYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInAycGRtYS5oXFxcIlxcbitcXG4rc3RhdGljIHZvaWQgcGNpX3AycGRtYV9yZWxlYXNlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwZG1hO1xcbitcXG4rXFx0cDJwZG1hID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LVxcdTAwM2VwMnBkbWEsIDEpO1xcbitcXHRpZiAoIXAycGRtYSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogRmx1c2ggYW5kIGRpc2FibGUgcGNpX2FsbG9jX3AycF9tZW0oKSAqL1xcbitcXHRwZGV2LVxcdTAwM2VwMnBkbWEgPSBOVUxMO1xcbitcXHRwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChwZGV2LCBwMnBkbWEpO1xcbitcXHR4YV9kZXN0cm95KFxcdTAwMjZwMnBkbWEtXFx1MDAzZW1hcF90eXBlcyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyc1xcbisgKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZVxcbisgKiBmb3IgYSBQQ0kgZGV2aWNlLiBJdCBhbGxvY2F0ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhXFxuKyAqIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBQMlBETUEgb3BlcmF0aW9ucywgaW5jbHVkaW5nIG1hcHBpbmcgdHlwZVxcbisgKiB0cmFja2luZy5cXG4rICovXFxuK2ludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbitcXHRwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuK1xcdGlmIChwMnApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cDJwID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcDJwKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHhhX2luaXQoXFx1MDAyNnAycC1cXHUwMDNlbWFwX3R5cGVzKTtcXG4rXFx0LypcXG4rXFx0ICogSXRlcmF0ZSBvdmVyIGFsbCBzdGFuZGFyZCBQQ0kgQkFScyBhbmQgcmVjb3JkIG9ubHkgdGhvc2UgdGhhdFxcbitcXHQgKiBjb3JyZXNwb25kIHRvIE1NSU8gcmVnaW9ucy4gU2tpcCBub24tbWVtb3J5IHJlc291cmNlcyAoZS5nLiBJL09cXG4rXFx0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcXG4rXFx0ICogdHJhbnNhY3Rpb25zLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkrKykge1xcbitcXHRcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0cDJwLVxcdTAwM2VtZW1baV0ub3duZXIgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRcXHRwMnAtXFx1MDAzZW1lbVtpXS5idXNfb2Zmc2V0ID1cXG4rXFx0XFx0XFx0cGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcDJwO1xcbitcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXFx1MDAzZXAycGRtYSwgcDJwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfcDJwOlxcbitcXHRkZXZtX2tmcmVlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHAycCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfaW5pdCk7XFxuK1xcbisvKipcXG4rICogcGNpbV9wMnBkbWFfcHJvdmlkZXIgLSBHZXQgcGVlci10by1wZWVyIERNQSBwcm92aWRlclxcbisgKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcXG4rICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgcGVlci10by1wZWVyIERNQSBwcm92aWRlciBmb3IgYSBQQ0kgZGV2aWNlLiBUaGUgbGlmZXRpbWVcXG4rICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXFxuKyAqIGRyaXZlci4gQSBkcml2ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlXFxuKyAqIHByb3ZpZGVyLCBhbmQgYW55IERNQSBtYXBwaW5ncyBjcmVhdGVkIGZvciBhbnkgTU1JTywgYXJlIGFsbCBjbGVhbmVkIHVwXFxuKyAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cXG4rICpcXG4rICogU2luY2UgUDJQIGlzIGFsbW9zdCBhbHdheXMgc2hhcmVkIHdpdGggYSBzZWNvbmQgZHJpdmVyIHRoaXMgbWVhbnMgc29tZSBzeXN0ZW1cXG4rICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8ncyBETUEgbXVzdCBiZSBpbiBwbGFjZSB0byB1c2UgdGhpc1xcbisgKiBmdW5jdGlvbi4gRm9yIGV4YW1wbGUgYSByZXZva2UgY2FuIGJlIGJ1aWx0IHVzaW5nIERNQUJVRi5cXG4rICovXFxuK3N0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XFxuK1xcbitcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuK1xcdGlmIChXQVJOX09OKCFwMnApKVxcbitcXHRcXHQvKiBTb21lb25lIGZvcmdvdCB0byBjYWxsIHRvIHBjaW1fcDJwZG1hX2luaXQoKSBiZWZvcmUgKi9cXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnAycC1cXHUwMDNlbWVtW2Jhcl07XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfcHJvdmlkZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcgYi9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdcXG5pbmRleCAyOTZiZjAxZTE4NWVjYS4uNjdhMmFlMWZiYzA0YmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXFxuQEAgLTYsNiArNiw4IEBAIGNvbmZpZyBWRklPX1BDSV9DT1JFXFxuIFxcdHRyaXN0YXRlXFxuIFxcdHNlbGVjdCBWRklPX1ZJUlFGRFxcbiBcXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXFxuK1xcdHNlbGVjdCBQQ0lfUDJQRE1BX0NPUkVcXG4rXFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuIFxcbiBjb25maWcgVkZJT19QQ0lfSU5UWFxcbiBcXHRkZWZfYm9vbCB5IGlmICFTMzkwXFxuQEAgLTU2LDcgKzU4LDggQEAgY29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuIFxcdCAgVG8gZW5hYmxlIHMzOTB4IEtWTSB2ZmlvLXBjaSBleHRlbnNpb25zLCBzYXkgWS5cXG4gXFxuIGNvbmZpZyBWRklPX1BDSV9ETUFCVUZcXG4tXFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG4rXFx0ZGVmX2Jvb2wgeSBpZiBQQ0lfUDJQRE1BXFxuK1xcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL3ZmaW8vcGNpL21seDUvS2NvbmZpZ1xcXCJcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXFxuaW5kZXggNjEzOGYxYmYyNDFkZjAuLjg4MTQ1MmVhODliZTBjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXFxuQEAgLTEsOCArMSw3IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiBcXG4tdmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcub1xcbit2ZmlvLXBjaS1jb3JlLXkgOj0gdmZpb19wY2lfY29yZS5vIHZmaW9fcGNpX2ludHJzLm8gdmZpb19wY2lfcmR3ci5vIHZmaW9fcGNpX2NvbmZpZy5vIHZmaW9fcGNpX2RtYWJ1Zi5vXFxuIHZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk0pICs9IHZmaW9fcGNpX3pkZXYub1xcbi12ZmlvLXBjaS1jb3JlLSQoQ09ORklHX1ZGSU9fUENJX0RNQUJVRikgKz0gdmZpb19wY2lfZG1hYnVmLm9cXG4gb2JqLSQoQ09ORklHX1ZGSU9fUENJX0NPUkUpICs9IHZmaW8tcGNpLWNvcmUub1xcbiBcXG4gdmZpby1wY2kteSA6PSB2ZmlvX3BjaS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXFxuaW5kZXggYmIxMjFmNjM1YjlmN2YuLmQ5ZjI2YjBjZTk5MWQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXFxuQEAgLTE3MjUsNiArMTcyNSwxNCBAQCBzdGF0aWMgaW50IGhpc2lfYWNjX3ZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9wdXRfdmRldjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGhpc2lfYWNjX3ZmaW9fcGNpX21tYXAoKSBjYWxscyBkb3duIHRvXFxuK1xcdCAqIHZmaW9fcGNpX2NvcmVfbW1hcCgpLCBzbyBCQVIgbWFwcGluZ3MgYXJlIHN0aWxsXFxuK1xcdCAqIERNQUJVRi1iYWNrZWQuICBUaGV5IGRvbid0IHJlcXVpcmUgYSB6YXAgb24gcmV2b2tlLCBzbyBvcHRcXG4rXFx0ICogb3V0OlxcbitcXHQgKi9cXG4rXFx0aGlzaV9hY2NfdmRldi1cXHUwMDNlY29yZV9kZXZpY2UuemFwX2JhcnNfb25fcmV2b2tlID0gZmFsc2U7XFxuK1xcbiBcXHRoaXNpX2FjY192ZmlvX2RlYnVnX2luaXQoaGlzaV9hY2NfdmRldik7XFxuIFxcdHJldHVybiAwO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uYmM2Y2NiMmUxMzVjM2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG5AQCAtNTkwLDEyICs1OTAsMTAgQEAgc3RhdGljIGludCB2ZmlvX2Jhc2ljX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXFxuIFxcdFxcdHZpcnRfbWVtID0gISEobGUxNl90b19jcHUoKnZpcnRfY21kKSBcXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuIFxcdFxcdG5ld19tZW0gPSAhIShuZXdfY21kIFxcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKTtcXG4gXFxuLVxcdFxcdGlmICghbmV3X21lbSkge1xcbi1cXHRcXHRcXHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XFxuLVxcdFxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCFuZXdfbWVtKVxcbitcXHRcXHRcXHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xcbitcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSWYgdGhlIHVzZXIgaXMgd3JpdGluZyBtZW0vaW8gZW5hYmxlIChuZXdfbWVtL2lvKSBhbmQgd2VcXG5AQCAtNjMxLDcgKzYyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19iYXNpY19jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxcbiBcXHRcXHQqdmlydF9jbWQgfD0gY3B1X3RvX2xlMTYobmV3X2NtZCBcXHUwMDI2IG1hc2spO1xcbiBcXG4gXFx0XFx0aWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpXFxuLVxcdFxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdFxcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcdH1cXG4gXFxuQEAgLTcxMiwxNiArNzEwLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2NhcF9iYXNpY19wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXFxuIHN0YXRpYyB2b2lkIHZmaW9fbG9ja19hbmRfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBwY2lfcG93ZXJfdCBzdGF0ZSlcXG4ge1xcbi1cXHRpZiAoc3RhdGUgXFx1MDAzZT0gUENJX0QzaG90KSB7XFxuLVxcdFxcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcXG4tXFx0XFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xcbi1cXHR9IGVsc2Uge1xcbitcXHRpZiAoc3RhdGUgXFx1MDAzZT0gUENJX0QzaG90KVxcbitcXHRcXHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xcbitcXHRlbHNlXFxuIFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4tXFx0fVxcbiBcXG4gXFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIHN0YXRlKTtcXG4gXFx0aWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpXFxuLVxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIH1cXG4gXFxuQEAgLTkwOCwxMSArOTA0LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19leHBfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjYXApO1xcbiBcXG4gXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgKGNhcCBcXHUwMDI2IFBDSV9FWFBfREVWQ0FQX0ZMUikpIHtcXG4tXFx0XFx0XFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xcbi1cXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XFxuK1xcdFxcdFxcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XFxuIFxcdFxcdFxcdHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cXHUwMDNlcGRldik7XFxuIFxcdFxcdFxcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxcbi1cXHRcXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xcbiBcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtOTkzLDExICs5ODgsMTAgQEAgc3RhdGljIGludCB2ZmlvX2FmX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjYXApO1xcbiBcXG4gXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgKGNhcCBcXHUwMDI2IFBDSV9BRl9DQVBfRkxSKSBcXHUwMDI2XFx1MDAyNiAoY2FwIFxcdTAwMjYgUENJX0FGX0NBUF9UUCkpIHtcXG4tXFx0XFx0XFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xcbi1cXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XFxuK1xcdFxcdFxcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XFxuIFxcdFxcdFxcdHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cXHUwMDNlcGRldik7XFxuIFxcdFxcdFxcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxcbi1cXHRcXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xcbiBcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IDA1MGU3NTQyOTUyZWQxLi4wMDU5YzE3NmQ2MjcwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTEyLDYgKzEyLDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hcGVydHVyZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtYnVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtcmVzdi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXZlbnRmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuQEAgLTMxOSw4ICszMjEsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX3J1bnRpbWVfcG1fZW50cnkoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbiBcXHQgKiBUaGUgdmRldiBwb3dlciByZWxhdGVkIGZsYWdzIGFyZSBwcm90ZWN0ZWQgd2l0aCAnbWVtb3J5X2xvY2snXFxuIFxcdCAqIHNlbWFwaG9yZS5cXG4gXFx0ICovXFxuLVxcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcXG4tXFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xcbitcXHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xcbiBcXG4gXFx0aWYgKHZkZXYtXFx1MDAzZXBtX3J1bnRpbWVfZW5nYWdlZCkge1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbkBAIC00MDYsNyArNDA3LDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfcnVudGltZV9wbV9leGl0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbiBcXHRfX3ZmaW9fcGNpX3J1bnRpbWVfcG1fZXhpdCh2ZGV2KTtcXG4gXFx0aWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpXFxuLVxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIH1cXG4gXFxuQEAgLTEyNTYsNiArMTI1Nyw4IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfc2V0X2lycXMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB2ZmlvX3BjaV9yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xcbitcXG4gc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9yZXNldChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcpXFxuIHtcXG5AQCAtMTI2NCw3ICsxMjY3LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9yZXNldChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcdGlmICghdmRldi1cXHUwMDNlcmVzZXRfd29ya3MpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xcbitcXHRkb3duX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdoaWxlIHRoZSBwb3dlciBzdGF0ZSBpcyBub24tRDAuIElmXFxuQEAgLTEyNzQsMTMgKzEyNzcsMTggQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9yZXNldChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcdCAqIGhhdmUgTm9Tb2Z0UnN0LSwgdGhlIHJlc2V0IGZ1bmN0aW9uIGNhbiBjYXVzZSB0aGUgUENJIGNvbmZpZyBzcGFjZVxcbiBcXHQgKiByZXNldCB3aXRob3V0IHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgc3RhdGUgKHNhdmVkIGxvY2FsbHkgaW5cXG4gXFx0ICogJ3ZkZXYtXFx1MDAzZXBtX3NhdmUnKS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIHphcCBpcyBkb25lIGFmdGVyIG1ha2luZyB0aGUgZGV2aWNlIGFjY2Vzc2libGUgaW4gRDAsXFxuK1xcdCAqIGJlY2F1c2UgYSBETUFCVUYgaW1wb3J0ZXIgY291bGQgYWNjZXNzIHRoZSBkZXZpY2UgYXMgcGFydFxcbitcXHQgKiBvZiBpdHMgcmV2b2NhdGlvbiBjbGVhbnVwLlxcbiBcXHQgKi9cXG4gXFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XFxuIFxcbi1cXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XFxuK1xcdHZmaW9fcGNpX3Jldm9rZV9iYXJzKHZkZXYpO1xcbitcXG4gXFx0cmV0ID0gcGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LVxcdTAwM2VwZGV2KTtcXG4gXFx0aWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpXFxuLVxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0xNTY5LDYgKzE1NzcsMTAgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XFxuIFxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1JFVk9LRTpcXG4rXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFI6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5AQCAtMTY0OCwyMCArMTY2MCwzNyBAQCBzc2l6ZV90IHZmaW9fcGNpX2NvcmVfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNvbnN0IGNoYXIgX191c2VyICpidVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfd3JpdGUpO1xcbiBcXG4tc3RhdGljIHZvaWQgdmZpb19wY2lfemFwX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbitzdGF0aWMgdm9pZCB2ZmlvX3BjaV9yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIHtcXG4tXFx0c3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYgPSBcXHUwMDI2dmRldi1cXHUwMDNldmRldjtcXG4tXFx0bG9mZl90IHN0YXJ0ID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYKTtcXG4tXFx0bG9mZl90IGVuZCA9IFZGSU9fUENJX0lOREVYX1RPX09GRlNFVChWRklPX1BDSV9ST01fUkVHSU9OX0lOREVYKTtcXG4tXFx0bG9mZl90IGxlbiA9IGVuZCAtIHN0YXJ0O1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuK1xcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcXG4gXFxuLVxcdHVubWFwX21hcHBpbmdfcmFuZ2UoY29yZV92ZGV2LVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBzdGFydCwgbGVuLCB0cnVlKTtcXG4rXFx0LypcXG4rXFx0ICogSWYgYSBkcml2ZXIgY291bGQgcG9zc2libHkgY3JlYXRlIEJBUiBtYXBwaW5ncyBpbiB0aGVcXG4rXFx0ICogdmRldidzIGFkZHJlc3Nfc3BhY2UsIGRvIGFuIGFkZGl0aW9uYWwgemFwIG9uIHJldm9rZS4gIFNlZVxcbitcXHQgKiB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZSgpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHZkZXYtXFx1MDAzZXphcF9iYXJzX29uX3Jldm9rZSkge1xcbitcXHRcXHRzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiA9IFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2O1xcbitcXHRcXHRsb2ZmX3Qgc3RhcnQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfQkFSMF9SRUdJT05fSU5ERVgpO1xcbitcXHRcXHRsb2ZmX3QgZW5kID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX1JPTV9SRUdJT05fSU5ERVgpO1xcbitcXHRcXHRsb2ZmX3QgbGVuID0gZW5kIC0gc3RhcnQ7XFxuK1xcbitcXHRcXHR1bm1hcF9tYXBwaW5nX3JhbmdlKGNvcmVfdmRldi1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0YXJ0LCBsZW4sIHRydWUpO1xcbitcXHR9XFxuIH1cXG4gXFxuLXZvaWQgdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4rdm9pZCB2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4ge1xcbiBcXHRkb3duX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuLVxcdHZmaW9fcGNpX3phcF9iYXJzKHZkZXYpO1xcbitcXHR2ZmlvX3BjaV9yZXZva2VfYmFycyh2ZGV2KTtcXG4rfVxcbitcXG4rdm9pZCB2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuK1xcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuIH1cXG4gXFxuIHUxNiB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG5AQCAtMTY4MywxOCArMTcxMiw2IEBAIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUxNiBjXFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYV90b19wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLXtcXG4tXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuLVxcdGludCBpbmRleCA9IHZtYS1cXHUwMDNldm1fcGdvZmYgXFx1MDAzZVxcdTAwM2UgKFZGSU9fUENJX09GRlNFVF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbi1cXHR1NjQgcGdvZmY7XFxuLVxcbi1cXHRwZ29mZiA9IHZtYS1cXHUwMDNldm1fcGdvZmYgXFx1MDAyNlxcbi1cXHRcXHQoKDFVIFxcdTAwM2NcXHUwMDNjIChWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSkgLSAxKTtcXG4tXFxuLVxcdHJldHVybiAocGNpX3Jlc291cmNlX3N0YXJ0KHZkZXYtXFx1MDAzZXBkZXYsIGluZGV4KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSArIHBnb2ZmO1xcbi19XFxuLVxcbiB2bV9mYXVsdF90IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuIFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgcGZuLFxcbkBAIC0xNzIyLDI0ICsxNzM5LDEwMyBAQCBzdGF0aWMgdm1fZmF1bHRfdCB2ZmlvX3BjaV9tbWFwX2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbi1cXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG4tXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gdm1mLVxcdTAwM2VhZGRyZXNzIFxcdTAwMjYgfigoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSAtIDEpO1xcbi1cXHR1bnNpZ25lZCBsb25nIHBnb2ZmID0gKGFkZHIgLSB2bWEtXFx1MDAzZXZtX3N0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHR1bnNpZ25lZCBsb25nIHBmbiA9IHZtYV90b19wZm4odm1hKSArIHBnb2ZmO1xcbi1cXHR2bV9mYXVsdF90IHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLO1xcbi1cXG4tXFx0aWYgKGlzX2FsaWduZWRfZm9yX29yZGVyKHZtYSwgYWRkciwgcGZuLCBvcmRlcikpIHtcXG4tXFx0XFx0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jaylcXG4tXFx0XFx0XFx0cmV0ID0gdmZpb19wY2lfdm1mX2luc2VydF9wZm4odmRldiwgdm1mLCBwZm4sIG9yZGVyKTtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbiA9IDA7XFxuK1xcdHZtX2ZhdWx0X3QgcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIG9ubHkgdGhpbmcgdGhpcyBjYW4gcmVseSBvbiBpcyB0aGF0IHRoZSBETUFCVUYgcmVsYXRpbmdcXG4rXFx0ICogdG8gdGhlIFZNQSdzIHZtX2ZpbGUgZXhpc3RzIChwcml2KS5cXG4rXFx0ICpcXG4rXFx0ICogQSBETUFCVUYgZm9yIGEgVkZJTyBkZXZpY2UgZmQgbW1hcCgpIGhvbGRzIGEgcmVmZXJlbmNlIHRvXFxuK1xcdCAqIHRoZSBvcmlnaW5hbCBWRklPIGRldmljZSBmZCwgYnV0IGFuIGV4cGxpY2l0bHktZXhwb3J0ZWRcXG4rXFx0ICogRE1BQlVGIGRvZXMgbm90LiAgVGhlIG9yaWdpbmFsIGZkIG1pZ2h0IGhhdmUgY2xvc2VkLFxcbitcXHQgKiBtZWFuaW5nIHRoaXMgZmF1bHQgY2FuIHJhY2Ugd2l0aFxcbitcXHQgKiB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKSwgbWVhbmluZyB0aGUgYnVmZmVyIGNvdWxkIGhhdmVcXG4rXFx0ICogYmVlbiByZXZva2VkIChpbiB3aGljaCBjYXNlIHByaXYtXFx1MDAzZXZkZXYgbWlnaHQgYmUgTlVMTCksIGFuZFxcbitcXHQgKiB0aGUgVkZJTyBkZXZpY2UgcmVnaXN0cmF0aW9uIG1pZ2h0IGhhdmUgYmVlbiBkcm9wcGVkLlxcbitcXHQgKlxcbitcXHQgKiBXaXRoIHRoZSBnb2FsIG9mIHRha2luZyB2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayBpbiBhIHdvcmxkIHdoZXJlXFxuK1xcdCAqIHZkZXYgbWlnaHQgbm90IHN0aWxsIGV4aXN0OlxcbitcXHQgKlxcbitcXHQgKiAxLiBUYWtlIHRoZSByZXN2IGxvY2sgb24gdGhlIERNQUJVRjpcXG4rXFx0ICogIC0gSWYgcmFjaW5nIGNsZWFudXAgZ290IGluIGZpcnN0LCB0aGUgYnVmZmVyIGlzIHJldm9rZWQ7XFxuK1xcdCAqICAgIHN0b3AvZXhpdCBpZiBzby5cXG4rXFx0ICogIC0gSWYgd2UgZ290IGluIGZpcnN0LCB0aGUgYnVmZmVyIGlzIG5vdCByZXZva2VkIHNvIHZkZXYgaXNcXG4rXFx0ICogICAgbm9uLU5VTEwsIGFjY2Vzc2libGUsIGFuZCBjbGVhbnVwIF9oYXMgbm90IHlldCBwdXQgdGhlXFxuK1xcdCAqICAgIFZGSU8gZGV2aWNlIHJlZ2lzdHJhdGlvbl8uICBTbywgdGhlIGRldmljZSByZWZjb3VudCBtdXN0XFxuK1xcdCAqICAgIGJlIFxcdTAwM2UwLlxcbitcXHQgKlxcbitcXHQgKiAyLiBUYWtlIHZmaW9fZGV2aWNlIHJlZ2lzdHJhdGlvbiAocmVmY291bnQgZ3VhcmFudGVlZCBcXHUwMDNlMFxcbitcXHQgKiAgICBoZXJlYWZ0ZXIpLlxcbitcXHQgKlxcbitcXHQgKiAzLiBVbmxvY2sgdGhlIERNQUJVRidzIHJlc3YgbG9jazpcXG4rXFx0ICogIC0gQSByYWNpbmcgY2xlYW51cCBjYW4gbm93IGNvbXBsZXRlLlxcbitcXHQgKiAgLSBCdXQsIHRoZSBkZXZpY2UgcmVmY291bnQgXFx1MDAzZTAsIG1lYW5pbmcgdGhlIHZmaW9fZGV2aWNlXFxuK1xcdCAqICAgIChhbmQgdmZpb19wY2llX2NvcmUgZGV2aWNlIHZkZXYpIGhhdmUgbm90IHlldCBiZWVuXFxuK1xcdCAqICAgIGZyZWVkLiAgdmRldiBpcyBhY2Nlc3NpYmxlLCBldmVuIGlmIHRoZSBETUFCVUYgaGFzIGJlZW5cXG4rXFx0ICogICAgcmV2b2tlZCBvciBjbGVhbnVwIGhhcyBoYXBwZW5lZCwgYmVjYXVzZVxcbitcXHQgKiAgICB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KCkgY2FuJ3QgY29tcGxldGUuXFxuK1xcdCAqXFxuK1xcdCAqIDQuIFRha2UgdGhlIHZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrXFxuK1xcdCAqICAtIEVpdGhlciB0aGUgRE1BQlVGIGlzIHVzYWJsZSwgb3IgaGFzIGJlZW4gY2xlYW5lZCB1cC5cXG4rXFx0ICogICAgV2hpY2hldmVyLCBpdCBjYW4gbm8gbG9uZ2VyIGNoYW5nZSB1bmRlciB1cy5cXG4rXFx0ICogIC0gVGVzdCB0aGUgRE1BQlVGIHJldm9jYXRpb24gc3RhdHVzIGFnYWluOiBpZiBpdCB3YXNcXG4rXFx0ICogICAgcmV2b2tlZCBiZXR3ZWVuIDEgYW5kIDQgcmV0dXJuIGEgU0lHQlVTLiBPdGhlcndpc2UsXFxuK1xcdCAqICAgIHJldHVybiBhIFBGTi5cXG4rXFx0ICogIC0gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGFsc28gdGFrZSB0aGUgcmVzdiBsb2NrLCBiZWNhdXNlXFxuK1xcdCAqICAgIHRoZSBzdGF0dXMvdmRldiBjYW4ndCBjaGFuZ2Ugd2hpbGUgbWVtb3J5X2xvY2sgaXMgaGVsZC5cXG4rXFx0ICpcXG4rXFx0ICogNS4gVW5sb2NrLCBkb25lLlxcbitcXHQgKi9cXG4rXFxuK1xcdGRtYV9yZXN2X2xvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdGF0dXMgIT0gVkZJT19QQ0lfRE1BQlVGX09LKSB7XFxuK1xcdFxcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFxcXCIlcyBWQSAweCVseCwgcGdvZmYgMHglbHg6IERNQUJVRiByZXZva2VkL2NsZWFuZWQgdXBcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgX19mdW5jX18sIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1hLVxcdTAwM2V2bV9wZ29mZik7XFxuK1xcdFxcdGRtYV9yZXN2X3VubG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHR9XFxuK1xcbitcXHQvKiBJZiB0aGUgYnVmZmVyIGlzbid0IHJldm9rZWQsIHZkZXYgaXMgdmFsaWQgKi9cXG4rXFx0dmRldiA9IHByaXYtXFx1MDAzZXZkZXY7XFxuK1xcbitcXHRpZiAoIXZmaW9fZGV2aWNlX3RyeV9nZXRfcmVnaXN0cmF0aW9uKFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB2ZGV2ICE9IE5VTEwgKGFib3ZlKSwgdGhlIHJlZ2lzdHJhdGlvbiBzaG91bGRcXG4rXFx0XFx0ICogYWxyZWFkeSBiZSBcXHUwMDNlMCBhbmQgc28gdGhpcyB0cnlfZ2V0IHNob3VsZCBuZXZlclxcbitcXHRcXHQgKiBmYWlsLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBVbmV4cGVjdGVkIHJlZ2lzdHJhdGlvbiBmYWlsdXJlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgX19mdW5jX18pO1xcbitcXHRcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0fVxcbitcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spIHtcXG4rXFx0XFx0LyogUmV2b2NhdGlvbiBzdGF0dXMgbXVzdCBiZSByZS1yZWFkLCB1bmRlciBtZW1vcnlfbG9jayAqL1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9PSykge1xcbitcXHRcXHRcXHRpbnQgcHJlcyA9IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4ocHJpdiwgdm1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZtZi1cXHUwMDNlYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcmRlciwgXFx1MDAyNnBmbik7XFxuK1xcbitcXHRcXHRcXHRpZiAocHJlcyA9PSAwKVxcbitcXHRcXHRcXHRcXHRyZXQgPSB2ZmlvX3BjaV92bWZfaW5zZXJ0X3Bmbih2ZGV2LCB2bWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBmbiwgb3JkZXIpO1xcbitcXHRcXHRcXHRlbHNlIGlmIChwcmVzID09IC1FQUdBSU4pXFxuK1xcdFxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGRldl9kYmdfcmF0ZWxpbWl0ZWQoXFx1MDAyNnZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0ICAgXFxcIiVzKCxvcmRlciA9ICVkKSBCQVIgJWxkIHBhZ2Ugb2Zmc2V0IDB4JWx4OiAweCV4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgX19mdW5jX18sIG9yZGVyLFxcbi1cXHRcXHRcXHQgICAgdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDNlXFx1MDAzZVxcbi1cXHRcXHRcXHRcXHQoVkZJT19QQ0lfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCksXFxuLVxcdFxcdFxcdCAgICBwZ29mZiwgKHVuc2lnbmVkIGludClyZXQpO1xcbitcXHRcXHRcXHQgICAgXFxcIiVzKG9yZGVyID0gJWQpIFBGTiAweCVseCwgVkEgMHglbHgsIHBnb2ZmIDB4JWx4OiAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgX19mdW5jX18sIG9yZGVyLCBwZm4sIHZtZi1cXHUwMDNlYWRkcmVzcyxcXG4rXFx0XFx0XFx0ICAgIHZtYS1cXHUwMDNldm1fcGdvZmYsICh1bnNpZ25lZCBpbnQpcmV0KTtcXG4gXFxuK1xcdHZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oXFx1MDAyNnZkZXYtXFx1MDAzZXZkZXYpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0xNzU1LDYgKzE4NTEsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2ZmlvX3BjaV9tbWFwX29wcyA9IHtcXG4gI2VuZGlmXFxuIH07XFxuIFxcbit2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZmaW9fcGNpX21tYXBfb3BzO1xcbit9XFxuK1xcbiBpbnQgdmZpb19wY2lfY29yZV9tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPVxcbkBAIC0xODAzLDcgKzE5MDQsMTIgQEAgaW50IHZmaW9fcGNpX2NvcmVfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gdmRldjtcXG4rXFx0cmV0ID0gdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHZkZXYsIHZtYSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaW5kZXgpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlcV9sZW4sIGluZGV4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIFxcbkBAIC0yMjIyLDYgKzIzMjgsMTcgQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXRfdmY7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJZiBhIGRyaXZlciBvdmVycmlkZXMgLm1tYXAsIGl0IGhhcyB0byBiZSBhc3N1bWVkIHRoYXQgaXRcXG4rXFx0ICogbWlnaHQgbm90IHVzZSB0aGUgRE1BQlVGLWJhY2tlZCBjb3JlIG1tYXA7IHRoaXMgZmxhZ1xcbitcXHQgKiBlbmFibGVzIGEgemFwIGF0IHJldm9rZSB0aW1lLiAgRHJpdmVycyBjYW4gb3B0IG91dCBieVxcbitcXHQgKiBjbGVhcmluZyB0aGlzIGZsYWcgYWZ0ZXIgcmVnaXN0cmF0aW9uLCBlLmcuIGlmIHRoZWlyIC5tbWFwXFxuK1xcdCAqIG92ZXJyaWRlIGNhbGxzIGRvd24gdG8gdmZpb19wY2lfY29yZV9tbWFwKCkgc28gdGhhdCBtYXBzXFxuK1xcdCAqIGFyZSBETUFCVUYtYmFja2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHZkZXYtXFx1MDAzZXZkZXYub3BzLVxcdTAwM2VtbWFwICE9IHZmaW9fcGNpX2NvcmVfbW1hcClcXG4rXFx0XFx0dmRldi1cXHUwMDNlemFwX2JhcnNfb25fcmV2b2tlID0gdHJ1ZTtcXG4rXFxuIFxcdHZmaW9fcGNpX3Byb2JlX3Bvd2VyX3N0YXRlKHZkZXYpO1xcbiBcXG4gXFx0LypcXG5AQCAtMjQ5Nyw5ICsyNjE0LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogVGFrZSB0aGUgbWVtb3J5IHdyaXRlIGxvY2sgZm9yIGVhY2ggZGV2aWNlIGFuZCB6YXAgQkFSXFxuLVxcdFxcdCAqIG1hcHBpbmdzIHRvIHByZXZlbnQgdGhlIHVzZXIgYWNjZXNzaW5nIHRoZSBkZXZpY2Ugd2hpbGUgaW5cXG4tXFx0XFx0ICogcmVzZXQuICBMb2NraW5nIG11bHRpcGxlIGRldmljZXMgaXMgcHJvbmUgdG8gZGVhZGxvY2ssXFxuK1xcdFxcdCAqIFRha2UgdGhlIG1lbW9yeSB3cml0ZSBsb2NrIGZvciBlYWNoIGRldmljZSBhbmRcXG4rXFx0XFx0ICogemFwL3Jldm9rZSBCQVIgbWFwcGluZ3MgdG8gcHJldmVudCB0aGUgdXNlciAob3JcXG4rXFx0XFx0ICogcGVlcnMpIGFjY2Vzc2luZyB0aGUgZGV2aWNlIHdoaWxlIGluIHJlc2V0LlxcbitcXHRcXHQgKiBMb2NraW5nIG11bHRpcGxlIGRldmljZXMgaXMgcHJvbmUgdG8gZGVhZGxvY2ssXFxuIFxcdFxcdCAqIHJ1bmF3YXkgYW5kIHVud2luZCBpZiB3ZSBoaXQgY29udGVudGlvbi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghZG93bl93cml0ZV90cnlsb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jaykpIHtcXG5AQCAtMjUwNyw4ICsyNjI1LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xcbi1cXHRcXHR2ZmlvX3BjaV96YXBfYmFycyh2ZGV2KTtcXG4rXFx0XFx0dmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghbGlzdF9lbnRyeV9pc19oZWFkKHZkZXYsXFxuQEAgLTI1MzgsNyArMjY1NSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UodmRldiwgXFx1MDAyNmRldl9zZXQtXFx1MDAzZWRldmljZV9saXN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgdmRldi5kZXZfc2V0X2xpc3QpIHtcXG4gXFx0XFx0aWYgKHZkZXYtXFx1MDAzZXZkZXYub3Blbl9jb3VudCBcXHUwMDI2XFx1MDAyNiBfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxcbi1cXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xcbitcXHRcXHRcXHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xcbmluZGV4IDFhMTc3Y2U3ZGU1NDZhLi4zMWZiYWQ5M2Y4OWIxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xcbkBAIC00LDI0ICs0LDEzIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtYnVmLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2ZmlvX3BjaV9wcml2LmhcXFwiXFxuIFxcbiBNT0RVTEVfSU1QT1JUX05TKFxcXCJETUFfQlVGXFxcIik7XFxuIFxcbi1zdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XFxuLVxcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuLVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldjtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBkbWFidWZzX2VsbTtcXG4tXFx0c2l6ZV90IHNpemU7XFxuLVxcdHN0cnVjdCBwaHlzX3ZlYyAqcGh5c192ZWM7XFxuLVxcdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyO1xcbi1cXHR1MzIgbnJfcmFuZ2VzO1xcbi1cXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbi1cXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbi1cXHR1OCByZXZva2VkIDogMTtcXG4tfTtcXG4tXFxuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudClcXG4ge1xcbkBAIC0zMCw3ICsxOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4gXFx0aWYgKCFhdHRhY2htZW50LVxcdTAwM2VwZWVyMnBlZXIpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdGlmIChwcml2LVxcdTAwM2VyZXZva2VkKVxcbitcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSylcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHRpZiAoIWRtYV9idWZfYXR0YWNoX3Jldm9jYWJsZShhdHRhY2htZW50KSlcXG5AQCAtMzksNiArMjgsNDMgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBkbWFfYnVmX21tYXBfaW50ZXJuYWwoKSBoYXMgYXNzZXJ0ZWQgdGhhdCB0aGUgVk1BIGlzXFxuK1xcdCAqIGNvbnRhaW5lZCB3aXRoaW4gdGhlIERNQUJVRiBzaXplIGJlZm9yZSBjYWxsaW5nIHRoaXMuXFxuK1xcdCAqXFxuK1xcdCAqIEFsc28sIGlmIHdlIG9ic2VydmUgdGhhdCB0aGUgYnVmZmVyIGlzIHJldm9rZWQgbm93IHRoZW5cXG4rXFx0ICogcmVmdXNlIHRoZSBtbWFwKCkuICBUaGlzIGlzIGEgYmVsdC1hbmQtYnJhY2VzIGVhcmx5IGZhaWx1cmVcXG4rXFx0ICogdG8gZWFzZSBkZWJ1Z2dpbmcgYSByZXZva2VkIGJ1ZmZlciBiZWluZyB1c2VkLiAgVXNlcnNwYWNlXFxuK1xcdCAqIG1pZ2h0IGFsc28gcmFjZSBhbiBtbWFwKCkgYWdhaW5zdCBhbiBleHBsaWNpdCByZXZvY2F0aW9uLFxcbitcXHQgKiBvciBhbiBhY3Rpb24gZG9pbmcgYSB0ZW1wb3JhcnkgcmV2b2tlOyByYWNlIHNjZW5hcmlvcyBhcmVcXG4rXFx0ICogc3RpbGwgc2FmZSBiZWNhdXNlIHRoZSBmYXVsdCBoYW5kbGVyIHVsdGltYXRlbHkgcHJldmVudHNcXG4rXFx0ICogYWNjZXNzIHRvIGEgcmV2b2tlZCBidWZmZXIgaWYgaXQgaXNuJ3QgY2F1Z2h0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoUkVBRF9PTkNFKHByaXYtXFx1MDAzZXN0YXR1cykgIT0gVkZJT19QQ0lfRE1BQlVGX09LKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0aWYgKCh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChSRUFEX09OQ0UocHJpdi1cXHUwMDNlbWVtYXR0cikgPT0gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MpXFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS1cXHUwMDNldm1fcGFnZV9wcm90KTtcXG4rXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cXHUwMDNldm1fcGFnZV9wcm90KTtcXG4rXFxuK1xcdC8qIFNlZSBjb21tZW50cyBpbiB2ZmlvX3BjaV9jb3JlX21tYXAoKSByZSBWTV9BTExPV19BTllfVU5DQUNIRUQuICovXFxuK1xcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0FMTE9XX0FOWV9VTkNBQ0hFRCB8IFZNX0lPIHwgVk1fUEZOTUFQIHxcXG4rXFx0XFx0ICAgICBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbitcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XFxuK1xcdHZmaW9fcGNpX3NldF92bWFfb3BzKHZtYSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZW5kaWYgLyogQ09ORklHX1ZGSU9fUENJX0RNQUJVRiAqL1xcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9kb25lKHN0cnVjdCBrcmVmICprcmVmKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID1cXG5AQCAtNTYsNyArODIsNyBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxcbiBcXG4gXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQocHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4gXFxuLVxcdGlmIChwcml2LVxcdTAwM2VyZXZva2VkKVxcbitcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuIFxcbiBcXHRyZXQgPSBkbWFfYnVmX3BoeXNfdmVjX3RvX3NndChhdHRhY2htZW50LCBwcml2LVxcdTAwM2Vwcm92aWRlcixcXG5AQCAtOTUsMTcgKzEyMSwyMDMgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZwcml2LVxcdTAwM2V2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcdFxcdHZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZXZkZXYtXFx1MDAzZXZkZXYpO1xcbiBcXHR9XFxuK1xcdGlmIChwcml2LVxcdTAwM2V2ZmlsZSlcXG4rXFx0XFx0ZnB1dChwcml2LVxcdTAwM2V2ZmlsZSk7XFxuIFxcdGtmcmVlKHByaXYtXFx1MDAzZXBoeXNfdmVjKTtcXG4gXFx0a2ZyZWUocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcXG4rI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcXG4gXFx0LmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLFxcbitcXHQubW1hcCA9IHZmaW9fcGNpX2RtYV9idWZfbW1hcCxcXG4rI2VuZGlmXFxuIFxcdC5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfbWFwLFxcbiBcXHQudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsXFxuIFxcdC5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLFxcbiB9O1xcbiBcXG4raW50IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsXFxuK1xcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3BmbilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBHaXZlbiBhIFZNQSAoc3RhcnQsIGVuZCwgcGdvZmZzKSBhbmQgYSBmYXVsdCBhZGRyZXNzLFxcbitcXHQgKiBzZWFyY2ggdGhlIGNvcnJlc3BvbmRpbmcgRE1BQlVGJ3MgcGh5c192ZWNbXSB0byBmaW5kIHRoZVxcbitcXHQgKiByYW5nZSByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MncyBvZmZzZXQgaW50byB0aGUgVk1BLCBhbmRcXG4rXFx0ICogaXRzIFBGTi5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIHBoeXNfdmVjW10gcmFuZ2VzIHJlcHJlc2VudCBjb250aWd1b3VzIHNwYW5zIG9mIFZBc1xcbitcXHQgKiB1cHdhcmRzIGZyb20gdGhlIGJ1ZmZlciBvZmZzZXQgMDsgdGhlIGFjdHVhbCBQRk5zIG1pZ2h0IGJlXFxuK1xcdCAqIGluIGFueSBvcmRlciwgb3ZlcmxhcC9hbGlhcywgZXRjLiAgQ2FsY3VsYXRlIGFuIG9mZnNldCBvZlxcbitcXHQgKiB0aGUgZGVzaXJlZCBwYWdlIGdpdmVuIFZNQSBzdGFydC9wZ29mZiBhbmQgYWRkcmVzcywgdGhlblxcbitcXHQgKiBzZWFyY2ggdXB3YXJkcyBmcm9tIDAgdG8gZmluZCB3aGljaCBzcGFuIGNvbnRhaW5zIGl0LlxcbitcXHQgKlxcbitcXHQgKiBPbiBzdWNjZXNzLCBhIHZhbGlkIFBGTiBmb3IgYSBwYWdlIHNpemVkIGJ5ICdvcmRlcicgaXNcXG4rXFx0ICogcmV0dXJuZWQgaW50byBvdXRfcGZuLlxcbitcXHQgKlxcbitcXHQgKiBGYWlsdXJlIG9jY3VycyBpZjpcXG4rXFx0ICogLSBBIGh1Z2VwYWdlIHdvdWxkIGNyb3NzIHRoZSBlZGdlIG9mIHRoZSBWTUEsXFxuK1xcdCAqIC0gQSBodWdlcGFnZSBpc24ndCBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIGEgcmFuZ2VcXG4rXFx0ICogICAoaW5jbHVkaW5nIHdoZXJlIGl0IHN0cmFkZGxlcyB0aGUgYm91bmRhcnkgYmV0d2VlblxcbitcXHQgKiAgIHJhbmdlcyksXFxuK1xcdCAqIC0gV2UgZmluZCBhIHJhbmdlLCBidXQgdGhlIGZpbmFsIFBGTiBpc24ndCBhbGlnbmVkIHRvIHRoZVxcbitcXHQgKiAgIHJlcXVlc3RlZCBvcmRlci5cXG4rXFx0ICpcXG4rXFx0ICogVXBvbiBmYWlsdXJlLCAtRUFHQUlOIGlzIHJldHVybmVkIGFuZCB0aGUgY2FsbGVyIGlzXFxuK1xcdCAqIGV4cGVjdGVkIHRvIHRyeSBhZ2FpbiB3aXRoIGEgc21hbGxlciBvcmRlciwgd2hpY2ggd2lsbFxcbitcXHQgKiBldmVudHVhbGx5IHN1Y2NlZWQgKG9yZGVyPTAgd2lsbCBhbHdheXMgd29yaykuXFxuK1xcdCAqXFxuK1xcdCAqIEl0J3Mgc3Vib3B0aW1hbCBpZiBETUFCVUZzIGFyZSBjcmVhdGVkIHdpdGggbmVpZ2hib3VyaW5nXFxuK1xcdCAqIHJhbmdlcyB0aGF0IGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHNpbmNlIGh1Z2VwYWdlc1xcbitcXHQgKiBjYW4ndCBzdHJhZGRsZSByYW5nZSBib3VuZGFyaWVzLiAgKFRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlXFxuK1xcdCAqIHJhbmdlcyBzaG91bGQgbWVyZ2UgdGhlbSBpbiB0aGlzIGNhc2UuKVxcbitcXHQgKlxcbitcXHQgKiBGaW5hbGx5LCB2bWFfcGdvZmZfYWRqdXN0IGlzIHVzZWQgd2l0aCBhIERNQUJVRiBjcmVhdGVkIGZvclxcbitcXHQgKiBhIFZGSU8gQkFSIG1tYXA6IGEgQkFSIG1hcHBlZCB3aXRoIHZtX3Bnb2ZmIFxcdTAwM2UgMCBjcmVhdGVzIGFcXG4rXFx0ICogRE1BQlVGIHN1Y2ggdGhhdCBieXRlIDAgb2YgdGhlIFZNQSBjb3JyZXNwb25kcyB0byBieXRlIDAgb2ZcXG4rXFx0ICogdGhlIERNQUJVRiBhbmQgYnl0ZSAndm1fcGdvZmYgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCcgaW50byB0aGUgQkFSLlxcbitcXHQgKiBUbyBhdm9pZCBkb3VibGUtb2Zmc2V0dGluZyBpbiB0aGlzIHNjZW5hcmlvLCBzdWJ0cmFjdGluZ1xcbitcXHQgKiB2bWFfcGdvZmZfYWRqdXN0IGZyb20gdGhpcyAobm9uLXplcm8pIHZtX3Bnb2ZmIGdlbmVyYXRlc1xcbitcXHQgKiB0aGUgZWZmZWN0aXZlIG9mZnNldC5cXG4rXFx0ICovXFxuK1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2VzaXplID0gUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbitcXHR1bnNpZ25lZCBsb25nIHZtYV9vZmYgPSAoKHZtYS1cXHUwMDNldm1fcGdvZmYgLSBwcml2LVxcdTAwM2V2bWFfcGdvZmZfYWRqdXN0KSBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHRcXHRcXHQgUEFHRV9TSElGVCkgXFx1MDAyNiBWRklPX1BDSV9PRkZTRVRfTUFTSztcXG4rXFx0dW5zaWduZWQgbG9uZyByb3VuZGVkX3BhZ2VfYWRkciA9IEFMSUdOX0RPV04oZmF1bHRfYWRkciwgcGFnZXNpemUpO1xcbitcXHR1bnNpZ25lZCBsb25nIHJvdW5kZWRfcGFnZV9lbmQgPSByb3VuZGVkX3BhZ2VfYWRkciArIHBhZ2VzaXplO1xcbitcXHR1bnNpZ25lZCBsb25nIGZhdWx0X29mZnNldDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmYXVsdF9vZmZzZXRfZW5kO1xcbitcXHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0X29mZnNldCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHJvdW5kZWRfcGFnZV9hZGRyIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9zdGFydCB8fCByb3VuZGVkX3BhZ2VfZW5kIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9lbmQpIHtcXG4rXFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbitcXHRcXHQvKiBBIGZhdWx0IGFkZHJlc3Mgb3V0c2lkZSBvZiB0aGUgVk1BIGlzIGFic3VyZC4gKi9cXG4rXFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXFxuK1xcdFxcdFxcdFxcdTAwMjZwcml2LVxcdTAwM2V2ZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJGYXVsdCBhZGRyIDB4JWx4IG91dHNpZGUgVk1BIDB4JWx4LTB4JWx4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRmYXVsdF9hZGRyLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCB2bWEtXFx1MDAzZXZtX2VuZCk7XFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBmYXVsdF9vZmZzZXRbX2VuZF0gaXMgdGhlIHNwYW4gd2l0aGluIHRoZSBETUFCVUZcXG4rXFx0ICogY29ycmVzcG9uZGluZyB0byB0aGUgZmF1bHRpbmcgcGFnZTpcXG4rXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShjaGVja19hZGRfb3ZlcmZsb3cocm91bmRlZF9wYWdlX2FkZHIgLSB2bWEtXFx1MDAzZXZtX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHR2bWFfb2ZmLCBcXHUwMDI2ZmF1bHRfb2Zmc2V0KSB8fFxcbitcXHRcXHQgICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhmYXVsdF9vZmZzZXQsIHBhZ2VzaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmF1bHRfb2Zmc2V0X2VuZCkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEl0ZXJhdGUgb3ZlciByYW5nZXMgaW4gdGhlIGJ1ZmZlciwgc3VtbWluZyB0aGVpciBsZW5ndGhzOlxcbitcXHQgKiByYW5nZV9zdGFydF9vZmZzZXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCByYW5nZSdzIHN0YXJ0aW5nXFxuK1xcdCAqIG9mZnNldCBpbiB0aGUgYnVmZmVyIChmcm9tIDAgdXB3YXJkcykuXFxuK1xcdCAqXFxuK1xcdCAqIEEgZmFpbHVyZSBmb3Igb3JkZXIgPT0gMCBpcyB1bmV4cGVjdGVkLCBhbmQgdHJpZ2dlcnMgYVxcbitcXHQgKiBmYXVsdC93YXJuLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gKG9yZGVyID09IDApID8gLUVGQVVMVCA6IC1FQUdBSU47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnJfcmFuZ2VzOyBpKyspIHtcXG4rXFx0XFx0c2l6ZV90IHJhbmdlX2xlbiA9IHByaXYtXFx1MDAzZXBoeXNfdmVjW2ldLmxlbjtcXG4rXFxuK1xcdFxcdC8qIEVhcmx5IGV4aXQgaWYgcmFuZ2Ugc3RhcnRzIGFmdGVyIHRoZSBwYWdlIGVuZCAqL1xcbitcXHRcXHRpZiAoZmF1bHRfb2Zmc2V0X2VuZCBcXHUwMDNjPSByYW5nZV9zdGFydF9vZmZzZXQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKGZhdWx0X29mZnNldCBcXHUwMDNlPSByYW5nZV9zdGFydF9vZmZzZXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGZhdWx0X29mZnNldF9lbmQgXFx1MDAzYz0gcmFuZ2Vfc3RhcnRfb2Zmc2V0ICsgcmFuZ2VfbGVuKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSBmYXVsdGluZyBwYWdlIGlzIHdob2xseSBjb250YWluZWRcXG4rXFx0XFx0XFx0ICogd2l0aGluIHRoZSBzcGFuIHJlcHJlc2VudGVkIGJ5IHRoaXMgcmFuZ2UsXFxuK1xcdFxcdFxcdCAqIHNvIHZhbGlkYXRlIFBGTiBhbGlnbm1lbnQgZm9yIHRoZSBvcmRlci5cXG4rXFx0XFx0XFx0ICogVGhlIGlmKCkgY29uZGl0aW9uIGVuc3VyZXMgdGhlIHBmblxcbitcXHRcXHRcXHQgKiBhcml0aG1ldGljIHdvbid0IG92ZXJmbG93LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm4gPVxcbitcXHRcXHRcXHRcXHQoKGZhdWx0X29mZnNldCAtIHJhbmdlX3N0YXJ0X29mZnNldCkgK1xcbitcXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlcGh5c192ZWNbaV0ucGFkZHIpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcbitcXHRcXHRcXHRpZiAoSVNfQUxJR05FRChwZm4sIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpKSB7XFxuK1xcdFxcdFxcdFxcdCpvdXRfcGZuID0gcGZuO1xcbitcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEVsc2Ugb3JkZXIgXFx1MDAzZSAwOyBFQUdBSU4gcmV0cmllcyB3aXRoIHNtYWxsZXJcXG4rXFx0XFx0XFx0ICogb3JkZXJcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJhbmdlX3N0YXJ0X29mZnNldCArPSByYW5nZV9sZW47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcmRlciA9PSAwIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAwKVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgYWRkcmVzcyBmZWxsIG91dHNpZGUgb2YgdGhlIHNwYW4gcmVwcmVzZW50ZWQgYnlcXG4rXFx0XFx0ICogdGhlIChjb25jYXRlbmF0ZWQpIHJhbmdlcy4gIEFzIHNldHVwIG9mIGEgbWFwcGluZ1xcbitcXHRcXHQgKiBlbnN1cmVzIHRoYXQgdGhlIFZNQSBpcyBcXHUwMDNjPSB0aGUgdG90YWwgc2l6ZSBvZiB0aGVcXG4rXFx0XFx0ICogcmFuZ2VzIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIElmIGl0IGRvZXMsIHdhcm5cXG4rXFx0XFx0ICogYW5kIFNJR0JVUy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcbitcXHRcXHRcXHRcXHUwMDI2cHJpdi1cXHUwMDNldmRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiTm8gcmFuZ2UgZm9yIGFkZHIgMHglbHgsIG9yZGVyICVkOiBWTUEgMHglbHgtMHglbHggcGdvZmYgMHglbHgsICV1IHJhbmdlcywgc2l6ZSAweCV6eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZmF1bHRfYWRkciwgb3JkZXIsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLFxcbitcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX3Bnb2ZmLCBwcml2LVxcdTAwM2Vucl9yYW5nZXMsIHByaXYtXFx1MDAzZXNpemUpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLypcXG4rICogQ3JlYXRlIGEgRE1BQlVGIGNvcnJlc3BvbmRpbmcgdG8gcHJpdiwgYWRkIGl0IHRvIHZkZXYtXFx1MDAzZWRtYWJ1ZnMgbGlzdFxcbisgKiBmb3IgdHJhY2tpbmcgKG1lYW5pbmcgY2xlYW51cCBvciByZXZvY2F0aW9uIHdpbGwgemFwIGl0KSwgYW5kIHRha2VcXG4rICogYSB2ZmlvX2RldmljZSByZWdpc3RyYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LCB1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xcbitcXG4rXFx0aWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbihcXHUwMDI2dmRldi1cXHUwMDNldmRldikpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0ZXhwX2luZm8ub3BzID0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHM7XFxuK1xcdGV4cF9pbmZvLnNpemUgPSBwcml2LVxcdTAwM2VzaXplO1xcbitcXHRleHBfaW5mby5mbGFncyA9IGZsYWdzO1xcbitcXHRleHBfaW5mby5wcml2ID0gcHJpdjtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWRtYWJ1ZiA9IGRtYV9idWZfZXhwb3J0KFxcdTAwMjZleHBfaW5mbyk7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlZG1hYnVmKSkge1xcbitcXHRcXHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KTtcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlZG1hYnVmKTtcXG4rXFx0fVxcbitcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VrcmVmKTtcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wKTtcXG4rXFxuK1xcdC8qIGRtYV9idWZfcHV0KCkgbm93IGZyZWVzIHByaXYgKi9cXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnByaXYtXFx1MDAzZWRtYWJ1ZnNfZWxtKTtcXG4rXFx0ZG93bl93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXHRkbWFfcmVzdl9sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuK1xcdHByaXYtXFx1MDAzZXN0YXR1cyA9IF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikgPyBWRklPX1BDSV9ETUFCVUZfT0sgOlxcbitcXHRcXHRWRklPX1BDSV9ETUFCVUZfVEVNUF9SRVZPS0VEO1xcbitcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFidWZzX2VsbSwgXFx1MDAyNnZkZXYtXFx1MDAzZWRtYWJ1ZnMpO1xcbitcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxcbiAvKlxcbiAgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IFxcXCJwcml2YXRlIGludGVyY29ubmVjdFxcXCIgYmV0d2VlbiBWRklPIERNQUJVRiBhbmQgaW9tbXVmZC5cXG4gICogSXQgYWxsb3dzIHRoZSB0d28gY28tb3BlcmF0aW5nIGRyaXZlcnMgdG8gZXhjaGFuZ2UgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2ZcXG5AQCAtMTI4LDcgKzM0MCw3IEBAIGludCB2ZmlvX3BjaV9kbWFfYnVmX2lvbW11ZmRfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdHByaXYgPSBhdHRhY2htZW50LVxcdTAwM2VkbWFidWYtXFx1MDAzZXByaXY7XFxuLVxcdGlmIChwcml2LVxcdTAwM2VyZXZva2VkKVxcbitcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSylcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHQvKiBNb3JlIHRoYW4gb25lIHJhbmdlIHRvIGlvbW11ZmQgd2lsbCByZXF1aXJlIHByb3BlciBETUFCVUYgc3VwcG9ydCAqL1xcbkBAIC0yMjQsNyArNDM2LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgZ2V0X2RtYV9idWYgPSB7fTtcXG4gXFx0c3RydWN0IHZmaW9fcmVnaW9uX2RtYV9yYW5nZSAqZG1hX3JhbmdlcztcXG4tXFx0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcXG4gXFx0c2l6ZV90IGxlbmd0aDtcXG4gXFx0aW50IHJldDtcXG5AQCAtMjc0LDYgKzQ4NSw3IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4gXFx0cHJpdi1cXHUwMDNldmRldiA9IHZkZXY7XFxuIFxcdHByaXYtXFx1MDAzZW5yX3JhbmdlcyA9IGdldF9kbWFfYnVmLm5yX3JhbmdlcztcXG4gXFx0cHJpdi1cXHUwMDNlc2l6ZSA9IGxlbmd0aDtcXG4rXFx0cHJpdi1cXHUwMDNlbWVtYXR0ciA9IFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSX05DO1xcbiBcXHRyZXQgPSB2ZGV2LVxcdTAwM2VwY2lfb3BzLVxcdTAwM2VnZXRfZG1hYnVmX3BoeXModmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXByb3ZpZGVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGdldF9kbWFfYnVmLnJlZ2lvbl9pbmRleCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBwcml2LVxcdTAwM2VwaHlzX3ZlYywgZG1hX3JhbmdlcyxcXG5AQCAtMjg0LDM0ICs0OTYsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIFxcdGtmcmVlKGRtYV9yYW5nZXMpO1xcbiBcXHRkbWFfcmFuZ2VzID0gTlVMTDtcXG4gXFxuLVxcdGlmICghdmZpb19kZXZpY2VfdHJ5X2dldF9yZWdpc3RyYXRpb24oXFx1MDAyNnZkZXYtXFx1MDAzZXZkZXYpKSB7XFxuLVxcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdHJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgZ2V0X2RtYV9idWYub3Blbl9mbGFncyk7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfcGh5cztcXG4tXFx0fVxcbi1cXG4tXFx0ZXhwX2luZm8ub3BzID0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHM7XFxuLVxcdGV4cF9pbmZvLnNpemUgPSBwcml2LVxcdTAwM2VzaXplO1xcbi1cXHRleHBfaW5mby5mbGFncyA9IGdldF9kbWFfYnVmLm9wZW5fZmxhZ3M7XFxuLVxcdGV4cF9pbmZvLnByaXYgPSBwcml2O1xcbi1cXG4tXFx0cHJpdi1cXHUwMDNlZG1hYnVmID0gZG1hX2J1Zl9leHBvcnQoXFx1MDAyNmV4cF9pbmZvKTtcXG4tXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VkbWFidWYpKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIocHJpdi1cXHUwMDNlZG1hYnVmKTtcXG4tXFx0XFx0Z290byBlcnJfZGV2X3B1dDtcXG4tXFx0fVxcbi1cXG4tXFx0a3JlZl9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VrcmVmKTtcXG4tXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wKTtcXG4tXFxuLVxcdC8qIGRtYV9idWZfcHV0KCkgbm93IGZyZWVzIHByaXYgKi9cXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnByaXYtXFx1MDAzZWRtYWJ1ZnNfZWxtKTtcXG4tXFx0ZG93bl93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbi1cXHRkbWFfcmVzdl9sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuLVxcdHByaXYtXFx1MDAzZXJldm9rZWQgPSAhX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KTtcXG4tXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cHJpdi1cXHUwMDNlZG1hYnVmc19lbG0sIFxcdTAwMjZ2ZGV2LVxcdTAwM2VkbWFidWZzKTtcXG4tXFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuLVxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBkbWFfYnVmX2ZkKCkgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgd2hlbiB0aGUgZmlsZSBjbG9zZXMgdGhlIGRtYWJ1ZlxcbiBcXHQgKiB3aWxsIGJlIHJlbGVhc2VkLlxcbkBAIC0zMjIsOCArNTA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gXFxuLWVycl9kZXZfcHV0Olxcbi1cXHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KTtcXG4gZXJyX2ZyZWVfcGh5czpcXG4gXFx0a2ZyZWUocHJpdi1cXHUwMDNlcGh5c192ZWMpO1xcbiBlcnJfZnJlZV9wcml2OlxcbkBAIC0zMzIsNDcgKzUxNywxNjQgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXHRrZnJlZShkbWFfcmFuZ2VzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbisjZW5kaWYgLyogQ09ORklHX1ZGSU9fUENJX0RNQUJVRiAqL1xcbitcXG4raW50IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHQgICB1NjQgcGh5c19zdGFydCwgdTY0IHJlcV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCByZXNfaW5kZXgpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdm1hX3Bnb2ZmID0gdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDI2IChWRklPX1BDSV9PRkZTRVRfTUFTSyBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFx0Y2hhciAqYnVmbmFtZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VwaHlzX3ZlYyA9IGt6YWxsb2Nfb2JqKCpwcml2LVxcdTAwM2VwaHlzX3ZlYyk7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcGh5c192ZWMpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9wcml2O1xcbitcXHR9XFxuK1xcbitcXHRidWZuYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFxcXCIlczolcy8leFxcXCIsXFxuK1xcdFxcdFxcdCAgICBkZXZfbmFtZShcXHUwMDI2dmRldi1cXHUwMDNldmRldi5kZXZpY2UpLCBwY2lfbmFtZSh2ZGV2LVxcdTAwM2VwZGV2KSxcXG4rXFx0XFx0XFx0ICAgIHJlc19pbmRleCk7XFxuK1xcbitcXHRpZiAoIWJ1Zm5hbWUpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9waHlzO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgRE1BQlVGIGJlZ2lucyBmcm9tIHRoZSBtbWFwKCkncyBCQVIgb2Zmc2V0LCBpLmUuIHRoZVxcbitcXHQgKiBzdGFydCBvZiB0aGUgVk1BIGNvcnJlc3BvbmRzIHRvIGJ5dGUgMCBvZiB0aGUgRE1BQlVGIGFuZFxcbitcXHQgKiBieXRlICh2bWFfcGdvZmYgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgb2YgdGhlIEJBUi5cXG4rXFx0ICpcXG4rXFx0ICogdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbigpIHJldmVyc2VzIHRoaXMgb2Zmc2V0IHVzaW5nXFxuK1xcdCAqIHZtYV9wZ29mZl9hZGp1c3QsIHNvIHRoYXQgdWx0aW1hdGVseSBhIGZhdWx0J3Mgb2Zmc2V0IGZyb21cXG4rXFx0ICogdGhlIHN0YXJ0IG9mIHRoZSBfVk1BXyBoYXMgYSBjb25zaXN0ZW50IHVzYWdlIHdoZXRoZXIgdGhlXFxuK1xcdCAqIFZNQSBvcmlnaW5hdGVzIGZyb20gYW4gbW1hcCgpIG9mIHRoZSBWRklPIGRldmljZSBoZXJlIG9yIGFcXG4rXFx0ICogZGlyZWN0IERNQUJVRiBtbWFwKCkuXFxuK1xcdCAqL1xcbitcXHRwcml2LVxcdTAwM2V2ZGV2ID0gdmRldjtcXG4rXFx0cHJpdi1cXHUwMDNlc2l6ZSA9IHJlcV9sZW47XFxuK1xcdHByaXYtXFx1MDAzZW5yX3JhbmdlcyA9IDE7XFxuK1xcdHByaXYtXFx1MDAzZXZtYV9wZ29mZl9hZGp1c3QgPSB2bWFfcGdvZmY7XFxuK1xcdHByaXYtXFx1MDAzZXByb3ZpZGVyID0gcGNpbV9wMnBkbWFfcHJvdmlkZXIodmRldi1cXHUwMDNlcGRldiwgcmVzX2luZGV4KTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vwcm92aWRlcikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX25hbWU7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBoeXNfdmVjWzBdLnBhZGRyID0gcGh5c19zdGFydCArICgodTY0KXZtYV9wZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4rXFx0cHJpdi1cXHUwMDNlcGh5c192ZWNbMF0ubGVuID0gcHJpdi1cXHUwMDNlc2l6ZTtcXG4rXFxuK1xcdHJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgT19DTE9FWEVDIHwgT19SRFdSKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9uYW1lO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT3duZXJzaGlwIG9mIHRoZSBETUFCVUYgZmlsZSB0cmFuc2ZlcnMgdG8gdGhlIFZNQSBzbyB0aGF0XFxuK1xcdCAqIG90aGVyIHVzZXJzIGNhbiBsb2NhdGUgdGhlIERNQUJVRiB2aWEgYSBWQS4gIE93bmVyc2hpcCBvZlxcbitcXHQgKiB0aGUgb3JpZ2luYWwgVkZJTyBkZXZpY2UgZmlsZSBiZWluZyBtbWFwKCllZCB0cmFuc2ZlcnMgdG9cXG4rXFx0ICogcHJpdiwgYW5kIGlzIHB1dCB3aGVuIHRoZSBETUFCVUYgaXMgcmVsZWFzZWQuICBUaGlzXFxuK1xcdCAqIGludGVudGlvbmFsbHkgZG9lcyBub3QgdXNlIGdldF9maWxlKCkvdm1hX3NldF9maWxlKClcXG4rXFx0ICogYmVjYXVzZSB0aGUgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLCBhbmQgb3duZXJzaGlwXFxuK1xcdCAqIG1vdmVzLlxcbitcXHQgKi9cXG4rXFx0cHJpdi1cXHUwMDNldmZpbGUgPSB2bWEtXFx1MDAzZXZtX2ZpbGU7XFxuK1xcdHZtYS1cXHUwMDNldm1fZmlsZSA9IHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlZmlsZTtcXG4rXFx0dm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBwcml2O1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZW5hbWVfbG9jayk7XFxuK1xcdGtmcmVlKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlbmFtZSk7XFxuK1xcdHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlbmFtZSA9IGJ1Zm5hbWU7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZW5hbWVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlX25hbWU6XFxuK1xcdGtmcmVlKGJ1Zm5hbWUpO1xcbitlcnJfZnJlZV9waHlzOlxcbitcXHRrZnJlZShwcml2LVxcdTAwM2VwaHlzX3ZlYyk7XFxuK2Vycl9mcmVlX3ByaXY6XFxuK1xcdGtmcmVlKHByaXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBTZXQgdGhlIERNQUJVRidzIHJldm9jYXRpb24gc3RhdHVzIChPSyBvciB0ZW1wb3JhcmlseS9wZXJtYW5lbnRseSByZXZva2VkKSAqL1xcbitzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMoc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdGVudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMgbmV3X3N0YXR1cylcXG4re1xcbitcXHRib29sIHdhc19yZXZva2VkO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2cHJpdi1cXHUwMDNldmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfUEVSTV9SRVZPS0VEIHx8XFxuK1xcdCAgICBwcml2LVxcdTAwM2VzdGF0dXMgPT0gbmV3X3N0YXR1cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZG1hX3Jlc3ZfbG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbitcXHR3YXNfcmV2b2tlZCA9IChwcml2LVxcdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCk7XFxuK1xcbitcXHRpZiAobmV3X3N0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3RhdHVzID0gbmV3X3N0YXR1czsgLyogVGVtcCBvciBwZXJtYW5lbnRseSByZXZva2VkICovXFxuK1xcbitcXHRcXHRpZiAod2FzX3Jldm9rZWQpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVEVNUF9SRVZPS0VEIGlzIGJlaW5nIHVwZ3JhZGVkIHRvXFxuK1xcdFxcdFxcdCAqIFBFUk1fUkVWT0tFRC4gIFRoZSBidWZmZXIgaXMgYWxyZWFkeSBnb25lLFxcbitcXHRcXHRcXHQgKiBkb24ndCB3YWl0IG9uIGl0IGFnYWluLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi1cXHUwMDNlZG1hYnVmKTtcXG4rXFx0XFx0ZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdixcXG4rXFx0XFx0XFx0XFx0ICAgICAgRE1BX1JFU1ZfVVNBR0VfQk9PS0tFRVAsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHQgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7XFxuK1xcdFxcdGRtYV9yZXN2X3VubG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRcXHRrcmVmX3B1dChcXHUwMDI2cHJpdi1cXHUwMDNla3JlZiwgdmZpb19wY2lfZG1hX2J1Zl9kb25lKTtcXG4rXFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2cHJpdi1cXHUwMDNlY29tcCk7XFxuK1xcdFxcdHVubWFwX21hcHBpbmdfcmFuZ2UocHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VmaWxlLVxcdTAwM2VmX21hcHBpbmcsXFxuK1xcdFxcdFxcdFxcdCAgICAwLCBwcml2LVxcdTAwM2VzaXplLCB0cnVlKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmUtYXJtIHRoZSByZWdpc3RlcmVkIGtyZWYgcmVmZXJlbmNlIGFuZCB0aGVcXG4rXFx0XFx0ICogY29tcGxldGlvbiBzbyB0aGUgcG9zdC1yZXZva2Ugc3RhdGUgbWF0Y2hlcyB0aGVcXG4rXFx0XFx0ICogcG9zdC1jcmVhdGlvbiBzdGF0ZS4gIEFuIHVuLXJldm9rZSBmb2xsb3dlZCBieSBhXFxuK1xcdFxcdCAqIG5ldyBtYXBwaW5nIG5lZWRzIHRoZSBrcmVmIHRvIGJlIG5vbi16ZXJvIGJlZm9yZVxcbitcXHRcXHQgKiBrcmVmX2dldCgpLCBhbmQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKClcXG4rXFx0XFx0ICogZGVsZWdhdGVzIGl0cyBkcmFpbiBiYWNrIHRocm91Z2ggdGhpcyByZXZva2VcXG4rXFx0XFx0ICogcGF0aCBvbiBhIHBvc3NpYmx5LWFscmVhZHktcmV2b2tlZCBkbWEtYnVmLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0a3JlZl9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VrcmVmKTtcXG4rXFx0XFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZWNvbXApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdGF0dXMgPSBWRklPX1BDSV9ETUFCVUZfT0s7XFxuK1xcdFxcdGRtYV9yZXN2X3VubG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHR9XFxuK31cXG4gXFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdG1wO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogSG9sZGluZyBtZW1vcnlfbG9jayBlbnN1cmVzIGEgcmFjaW5nIFZNQSBmYXVsdCBvYnNlcnZlc1xcbitcXHQgKiBwcml2LVxcdTAwM2VzdGF0dXMgcHJvcGVybHkuXFxuK1xcdCAqL1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCBcXHUwMDI2dmRldi1cXHUwMDNlZG1hYnVmcywgZG1hYnVmc19lbG0pIHtcXG4gXFx0XFx0aWYgKCFnZXRfZmlsZV9hY3RpdmUoXFx1MDAyNnByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlZmlsZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0aWYgKHByaXYtXFx1MDAzZXJldm9rZWQgIT0gcmV2b2tlZCkge1xcbi1cXHRcXHRcXHRkbWFfcmVzdl9sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuLVxcdFxcdFxcdGlmIChyZXZva2VkKVxcbi1cXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyZXZva2VkID0gdHJ1ZTtcXG4tXFx0XFx0XFx0ZG1hX2J1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHByaXYtXFx1MDAzZWRtYWJ1Zik7XFxuLVxcdFxcdFxcdGRtYV9yZXN2X3dhaXRfdGltZW91dChwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xcbi1cXHRcXHRcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4tXFx0XFx0XFx0aWYgKHJldm9rZWQpIHtcXG4tXFx0XFx0XFx0XFx0a3JlZl9wdXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYsIHZmaW9fcGNpX2RtYV9idWZfZG9uZSk7XFxuLVxcdFxcdFxcdFxcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZWNvbXApO1xcbi1cXHRcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHRcXHQgKiBSZS1hcm0gdGhlIHJlZ2lzdGVyZWQga3JlZiByZWZlcmVuY2UgYW5kIHRoZVxcbi1cXHRcXHRcXHRcXHQgKiBjb21wbGV0aW9uIHNvIHRoZSBwb3N0LXJldm9rZSBzdGF0ZSBtYXRjaGVzIHRoZVxcbi1cXHRcXHRcXHRcXHQgKiBwb3N0LWNyZWF0aW9uIHN0YXRlLiAgQW4gdW4tcmV2b2tlIGZvbGxvd2VkIGJ5IGFcXG4tXFx0XFx0XFx0XFx0ICogbmV3IG1hcHBpbmcgbmVlZHMgdGhlIGtyZWYgdG8gYmUgbm9uLXplcm8gYmVmb3JlXFxuLVxcdFxcdFxcdFxcdCAqIGtyZWZfZ2V0KCksIGFuZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKVxcbi1cXHRcXHRcXHRcXHQgKiBkZWxlZ2F0ZXMgaXRzIGRyYWluIGJhY2sgdGhyb3VnaCB0aGlzIHJldm9rZVxcbi1cXHRcXHRcXHRcXHQgKiBwYXRoIG9uIGEgcG9zc2libHktYWxyZWFkeS1yZXZva2VkIGRtYS1idWYuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRrcmVmX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYpO1xcbi1cXHRcXHRcXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2cHJpdi1cXHUwMDNlY29tcCk7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdGRtYV9yZXN2X2xvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4tXFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcmV2b2tlZCA9IGZhbHNlO1xcbi1cXHRcXHRcXHRcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuK1xcdFxcdHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhwcml2LCByZXZva2VkID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOlxcbitcXHRcXHRcXHRcXHRcXHQgICAgVkZJT19QQ0lfRE1BQlVGX09LKTtcXG4gXFx0XFx0ZnB1dChwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZWZpbGUpO1xcbiBcXHR9XFxuIH1cXG5AQCAtNDA0LDMgKzcwNiwxMTcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHR9XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIH1cXG4rXFxuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXFxuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSBfX3VzZXIgKmFyZyxcXG4rXFx0c2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlIGRiX3Jldm9rZTtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXFx1MDAzZXBjaV9vcHMtXFx1MDAzZWdldF9kbWFidWZfcGh5cylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeixcXG4rXFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKGRiX3Jldm9rZSkpO1xcbitcXHRpZiAocmV0ICE9IDEpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmRiX3Jldm9rZSwgYXJnLCBzaXplb2YoZGJfcmV2b2tlKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfcmV2b2tlLmRtYWJ1Zl9mZCk7XFxuK1xcdGlmIChJU19FUlIoZG1hYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcXG4rXFxuK1xcdHByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuK1xcdC8qXFxuK1xcdCAqIFNhbml0eS1jaGVjayB0aGUgRE1BQlVGIGlzIHJlYWxseSBhIHZmaW9fcGNpX2RtYV9idWYgX2FuZF9cXG4rXFx0ICogcmVsYXRlcyB0byB0aGUgVkZJTyBkZXZpY2UgaXQgd2FzIHByb3ZpZGVkIHdpdGguXFxuK1xcdCAqXFxuK1xcdCAqIElmIHRoZSBETUFCVUYgcmVsYXRlcyB0byB0aGlzIHZkZXYgdGhlbiBwcml2LVxcdTAwM2V2ZGV2IGlzXFxuK1xcdCAqIHN0YWJsZSBiZWNhdXNlIHRoaXMgb3BlbiBmZCBwcmV2ZW50cyBjbGVhbnVwLlxcbitcXHQgKlxcbitcXHQgKiBJZiBpdCByZWxhdGVzIHRvIGEgZGlmZmVyZW50IHZkZXYsIHJlYWRpbmcgcHJpdi1cXHUwMDNldmRldiBtaWdodFxcbitcXHQgKiByYWNlIHdpdGggYSBjb25jdXJyZW50IGNsZWFudXAgb24gdGhhdCBkZXZpY2UuICBCdXQgaWYgc28sXFxuK1xcdCAqIGl0IHBvaW50cyB0byBhIG5vbi1tYXRjaGluZyB2ZGV2IG9yIE5VTEwgYW5kIGlzIHVudXNhYmxlXFxuK1xcdCAqIGVpdGhlciB3YXkuXFxuK1xcdCAqL1xcbitcXHRpZiAoZG1hYnVmLVxcdTAwM2VvcHMgIT0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHxcXG4rXFx0ICAgIFJFQURfT05DRShwcml2LVxcdTAwM2V2ZGV2KSAhPSB2ZGV2KSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9idWY7XFxuK1xcdH1cXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChyd3NlbV93cml0ZSwgXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKSB7XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUJBREZEO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQpO1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK291dF9wdXRfYnVmOlxcbitcXHRkbWFfYnVmX3B1dChkbWFidWYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgX191c2VyICphcmcsXFxuK1xcdHNpemVfdCBhcmdzeilcXG4re1xcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgZGJfYXR0cjtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXFx1MDAzZXBjaV9vcHMtXFx1MDAzZWdldF9kbWFidWZfcGh5cylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeixcXG4rXFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKGRiX2F0dHIpKTtcXG4rXFx0aWYgKHJldCAhPSAxKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZkYl9hdHRyLCBhcmcsIHNpemVvZihkYl9hdHRyKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfYXR0ci5kbWFidWZfZmQpO1xcbitcXHRpZiAoSVNfRVJSKGRtYWJ1ZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XFxuK1xcbitcXHQvKiBWZXJpZnkgRE1BQlVGOiBzZWUgY29tbWVudHMgaW4gdmZpb19wY2lfZG1hX2J1Zl9yZXZva2UoKSAqL1xcbitcXHRwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXHRpZiAoZG1hYnVmLVxcdTAwM2VvcHMgIT0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHxcXG4rXFx0ICAgIFJFQURfT05DRShwcml2LVxcdTAwM2V2ZGV2KSAhPSB2ZGV2KSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9idWY7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZGJfYXR0ci5tZW1hdHRyKSB7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfTkM6XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0M6XFxuK1xcdFxcdFdSSVRFX09OQ0UocHJpdi1cXHUwMDNlbWVtYXR0ciwgZGJfYXR0ci5tZW1hdHRyKTtcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHR9XFxuK1xcbitvdXRfcHV0X2J1ZjpcXG4rXFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxcbmluZGV4IGZjYTlkMGRmYWM5MGY4Li5iM2M3MmRmMDAyYzQ0OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXFxuQEAgLTIzLDYgKzIzLDI4IEBAIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQge1xcbiBcXHRib29sXFx0XFx0XFx0dGVzdF9tZW07XFxuIH07XFxuIFxcbitlbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHtcXG4rXFx0VkZJT19QQ0lfRE1BQlVGX09LID0gMCxcXG4rXFx0VkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCA9IDEsXFxuK1xcdFZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQgPSAyLFxcbit9O1xcbitcXG4rc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbitcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgZG1hYnVmc19lbG07XFxuK1xcdHNpemVfdCBzaXplO1xcbitcXHRzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjO1xcbitcXHRzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwcm92aWRlcjtcXG4rXFx0c3RydWN0IGZpbGUgKnZmaWxlO1xcbitcXHR1MzIgbnJfcmFuZ2VzO1xcbitcXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbitcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbitcXHR1bnNpZ25lZCBsb25nIHZtYV9wZ29mZl9hZGp1c3Q7XFxuK1xcdHUzMiBtZW1hdHRyO1xcbitcXHRlbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHN0YXR1cztcXG4rfTtcXG4rXFxuIGJvb2wgdmZpb19wY2lfaW50eF9tYXNrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuIHZvaWQgdmZpb19wY2lfaW50eF91bm1hc2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gXFxuQEAgLTY4LDcgKzkwLDggQEAgdm9pZCB2ZmlvX2NvbmZpZ19mcmVlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuIGludCB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbiBcXHRcXHRcXHQgICAgIHBjaV9wb3dlcl90IHN0YXRlKTtcXG4gXFxuLXZvaWQgdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuK3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xcbit2b2lkIHZmaW9fcGNpX3VucmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gdTE2IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gdm9pZCB2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0XFx0XFx0XFx0XFx0dTE2IGNtZCk7XFxuQEAgLTExNCwxMiArMTM3LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdHJldHVybiAocGRldi1cXHUwMDNlY2xhc3MgXFx1MDAzZVxcdTAwM2UgOCkgPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBO1xcbiB9XFxuIFxcbitpbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdnBkbWFidWYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuK1xcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3Bmbik7XFxuK2ludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0XFx0ICAgdTY0IHBoeXNfc3RhcnQsIHU2NCByZXFfbGVuLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcmVzX2luZGV4KTtcXG4rdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4rdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xcbit2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXFxuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuLXZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuLXZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcXG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlIF9fdXNlciAqYXJnLFxcbitcXHRzaXplX3QgYXJnc3opO1xcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0cihcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBfX3VzZXIgKmFyZyxcXG4rXFx0c2l6ZV90IGFyZ3N6KTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnRcXG4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuQEAgLTEyOCwxMiArMTcwLDIxIEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlKFxcbitcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4rXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXFxuK1xcdHNpemVfdCBhcmdzeilcXG4ge1xcbitcXHRyZXR1cm4gLUVOT1RUWTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tXFx0XFx0XFx0XFx0XFx0IGJvb2wgcmV2b2tlZClcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgX191c2VyICphcmcsXFxuK1xcdHNpemVfdCBhcmdzeilcXG4ge1xcbitcXHRyZXR1cm4gLUVOT1RUWTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oIGIvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcXG5pbmRleCA4NzNkZTIwYTIyNDc1OS4uNGM0MmE3YjJlZTg1NTggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaFxcbkBAIC02Nyw5ICs2NywyMiBAQCBlbnVtIHBjaV9wMnBkbWFfbWFwX3R5cGUge1xcbiBcXHRQQ0lfUDJQRE1BX01BUF9USFJVX0hPU1RfQlJJREdFLFxcbiB9O1xcbiBcXG4tI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXFxuKyNpZmRlZiBDT05GSUdfUENJX1AyUERNQV9DT1JFXFxuIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbnQgYmFyKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXFxuIGludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdHU2NCBvZmZzZXQpO1xcbiBpbnQgcGNpX3AycGRtYV9kaXN0YW5jZV9tYW55KHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwgc3RydWN0IGRldmljZSAqKmNsaWVudHMsXFxuQEAgLTg5LDE1ICsxMDIsNiBAQCBzc2l6ZV90IHBjaV9wMnBkbWFfZW5hYmxlX3Nob3coY2hhciAqcGFnZSwgc3RydWN0IHBjaV9kZXYgKnAycF9kZXYsXFxuIGVudW0gcGNpX3AycGRtYV9tYXBfdHlwZSBwY2lfcDJwZG1hX21hcF90eXBlKHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2UgKmRldik7XFxuICNlbHNlIC8qIENPTkZJR19QQ0lfUDJQRE1BICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IHBjaW1fcDJwZG1hX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLXtcXG4tXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi19XFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBiYXIpXFxuLXtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuLX1cXG4gc3RhdGljIGlubGluZSBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsXFxuIFxcdFxcdHNpemVfdCBzaXplLCB1NjQgb2Zmc2V0KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuaW5kZXggMmM0NDU0NTgzYzExNWIuLjUzMWFlYzM1NTY4NmIwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuQEAgLTU1Nyw3ICs1NTcsNyBAQCBzdHJ1Y3QgcGNpX2RldiB7XFxuIFxcdHUxNlxcdFxcdHBhc2lkX2NhcDtcXHQvKiBQQVNJRCBDYXBhYmlsaXR5IG9mZnNldCAqL1xcbiBcXHR1MTZcXHRcXHRwYXNpZF9mZWF0dXJlcztcXG4gI2VuZGlmXFxuLSNpZmRlZiBDT05GSUdfUENJX1AyUERNQVxcbisjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFfQ09SRVxcbiBcXHRzdHJ1Y3QgcGNpX3AycGRtYSBfX3JjdSAqcDJwZG1hO1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19QQ0lfRE9FXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5pbmRleCA4OTE2NWI3NjllNWMxNi4uYTJmNTg2ZTRmY2Q4ZDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbkBAIC0xMjcsNiArMTI3LDcgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcXG4gXFx0Ym9vbFxcdFxcdFxcdG5lZWRzX3BtX3Jlc3RvcmU6MTtcXG4gXFx0Ym9vbFxcdFxcdFxcdHBtX2ludHhfbWFza2VkOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRwbV9ydW50aW1lX2VuZ2FnZWQ6MTtcXG4rXFx0Ym9vbFxcdFxcdFxcdHphcF9iYXJzX29uX3Jldm9rZToxO1xcbiBcXHRzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlXFx0KnBjaV9zYXZlZF9zdGF0ZTtcXG4gXFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVxcdCpwbV9zYXZlO1xcbiBcXHRpbnRcXHRcXHRcXHRpb2V2ZW50ZmRzX25yO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbmluZGV4IDVkZTYxOGEzYTVlZWVlLi5hYjMwYjg5Mzk5ZDAzOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbkBAIC0xNTM0LDYgKzE1MzQsNTMgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XFxuICAqL1xcbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbiBcXG4rLyoqXFxuKyAqIEdpdmVuIGEgZG1hX2J1ZiBmZCBwcmV2aW91c2x5IGNyZWF0ZWQgYnlcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBhIFNFVCBvZiB0aGlzIGZlYXR1cmUgcmVxdWVzdHMgdGhhdFxcbisgKiBhY2Nlc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgRE1BQlVGIGlzIGltbWVkaWF0ZWx5IGFuZCBwZXJtYW5lbnRseVxcbisgKiByZXZva2VkLiAgT24gc3VjY2Vzc2Z1bCByZXR1cm4sIHRoZSBidWZmZXIgaXMgbm90IGFjY2Vzc2libGVcXG4rICogdGhyb3VnaCBhbnkgbW1hcCgpIG9yIGRtYS1idWYgaW1wb3J0LiAgVGhlIGJ1ZmZlciBpcyBwZXJtYW5lbnRseVxcbisgKiBkaXNhYmxlZCwgYW5kIFZGSU8gcmVmdXNlcyBhbGwgbWFwLCBtbWFwLCBhdHRhY2gsIGV0Yy4gcmVxdWVzdHMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6XFxuKyAqXFxuKyAqICBFQkFERiwgRUlOVkFMOiBkbWFidWZfZmQgaXMgbm90IGEgRE1BQlVGIGZkLlxcbisgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuXFxuKyAqICBFQkFERkQ6IFRoZSBETUFCVUYgaXMgYWxyZWFkeSByZXZva2VkLlxcbisgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIDEzXFxuK1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSB7XFxuK1xcdF9fczMyXFx0ZG1hYnVmX2ZkO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIEdpdmVuIGEgZG1hX2J1ZiBmZCBwcmV2aW91c2x5IGNyZWF0ZWQgYnlcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBTRVQgdGhlIG1lbW9yeSBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlXFxuKyAqIHVzZWQgYnkgZnV0dXJlIG1tYXAoKXMgb2YgdGhhdCBmZC4gIFNFVHRpbmcgYSBuZXcgYXR0cmlidXRlIGRvZXNcXG4rICogbm90IGFmZmVjdCBleGlzdGluZyBWTUFzLlxcbisgKlxcbisgKiBUaGUgZGVmYXVsdCwgaWYgbm8gcHJldmlvdXMgU0VUIGhhcyBiZWVuIHBlcmZvcm1lZCwgaXMgTkMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6XFxuKyAqXFxuKyAqICBFQkFERiwgRUlOVkFMOiBkbWFidWZfZmQgaXMgbm90IGEgRE1BQlVGIGZkLlxcbisgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuXFxuKyAqICBFTk9FTlQ6IFRoZSBnaXZlbiBtZW1hdHRyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuKyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSIDE0XFxuK1xcbisvKiBWYWxpZCBtZW1vcnkgYXR0cmlidXRlcyBmb3IgdGhlIG1lbWF0dHIgZmllbGQgKi9cXG4rZW51bSB2ZmlvX2RldmljZV9kbWFfYnVmX21lbWF0dHIge1xcbitcXHRWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQyA9IDAsIC8qIHBncHJvdF9ub25jYWNoZWQgKi9cXG4rXFx0VkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MgPSAxLCAvKiBwZ3Byb3Rfd3JpdGVjb21iaW5lICovXFxuK307XFxuK1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIge1xcbitcXHRfX3MzMlxcdGRtYWJ1Zl9mZDtcXG4rXFx0X191MzJcXHRtZW1hdHRyO1xcbit9O1xcbitcXG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXFxuIFxcbiAvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDA6MjA6MDYuNzg4ODE3ODQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3NzY0Nzg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2VcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHJcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfbW1hcFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmblwiLFxuICAgIFwidmZpb19wY2lfZG1hYnVmX2V4cG9ydFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRklPIGZlYXR1cmVzIChWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIGFuZCBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUikgYW5kIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsaW5nIHRvIHVzZSBETUFCVUYtYmFja2VkIG1tYXBzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTMwNzk3N2I2MTQ5MzU1MDg5YmEwODMxMzNhZjIxMzdkZDE0NWIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMDoyMDowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGM4ZDRiOTEzZjI2YzEyLi43MTM4NjFhZjQ0ODQ2YSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTIwNjI2LDcgKzIwNjI2LDcgQEAgQjpcdGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZ1xuIEM6XHRpcmM6Ly9pcmMub2Z0Yy5uZXQvbGludXgtcGNpXG4gVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcGNpL3BjaS5naXRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BjaS9wMnBkbWEucnN0XG4tRjpcdGRyaXZlcnMvcGNpL3AycGRtYS5jXG4rRjpcdGRyaXZlcnMvcGNpL3AycGRtYSpcbiBGOlx0aW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcbiBcbiBQQ0kgUE9XRVIgQ09OVFJPTFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5pbmRleCAzM2M4ODQzMmI3Mjg3NS4uNTlkNzBiYzg0Y2M5YWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5AQCAtMjA2LDExICsyMDYsNyBAQCBjb25maWcgUENJRV9UUEhcbiBjb25maWcgUENJX1AyUERNQVxuIFx0Ym9vbCBcIlBDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFwiXG4gXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4tXHQjXG4tXHQjIFRoZSBuZWVkIGZvciB0aGUgc2NhdHRlcmxpc3QgRE1BIGJ1cyBhZGRyZXNzIGZsYWcgbWVhbnMgUENJIFAyUERNQVxuLVx0IyByZXF1aXJlcyA2NGJpdFxuLVx0I1xuLVx0ZGVwZW5kcyBvbiA2NEJJVFxuK1x0c2VsZWN0IFBDSV9QMlBETUFfQ09SRVxuIFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gXHRzZWxlY3QgTkVFRF9TR19ETUFfRkxBR1NcbiBcdGhlbHBcbkBAIC0yMjYsNiArMjIyLDEwIEBAIGNvbmZpZyBQQ0lfUDJQRE1BXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4rY29uZmlnIFBDSV9QMlBETUFfQ09SRVxuK1x0ZGVmYXVsdCBuXG4rXHRib29sXG4rXG4gY29uZmlnIFBDSV9MQUJFTFxuIFx0ZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpXG4gXHRzZWxlY3QgTkxTXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxuaW5kZXggNDFlYmMzYjlhNTE4MjQuLjBiMzI1NzJkNTdhMTU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlXG5AQCAtMzAsNiArMzAsNyBAQCBvYmotJChDT05GSUdfUENJX1NZU0NBTEwpXHQrPSBzeXNjYWxsLm9cbiBvYmotJChDT05GSUdfUENJX1NUVUIpXHRcdCs9IHBjaS1zdHViLm9cbiBvYmotJChDT05GSUdfUENJX1BGX1NUVUIpXHQrPSBwY2ktcGYtc3R1Yi5vXG4gb2JqLSQoQ09ORklHX1BDSV9FQ0FNKVx0XHQrPSBlY2FtLm9cbitvYmotJChDT05GSUdfUENJX1AyUERNQV9DT1JFKVx0Kz0gcDJwZG1hX2NvcmUub1xuIG9iai0kKENPTkZJR19QQ0lfUDJQRE1BKVx0Kz0gcDJwZG1hLm9cbiBvYmotJChDT05GSUdfWEVOX1BDSURFVl9GUk9OVEVORCkgKz0geGVuLXBjaWZyb250Lm9cbiBvYmotJChDT05GSUdfVkdBX0FSQilcdFx0Kz0gdmdhYXJiLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wMnBkbWEuYyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jXG5pbmRleCA3Yzg5ODU0MmFmOGQ1ZS4uNTBiMWE3ZGFmNTVjYzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wMnBkbWEuY1xuKysrIGIvZHJpdmVycy9wY2kvcDJwZG1hLmNcbkBAIC0yMSwxMiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4gXG4tc3RydWN0IHBjaV9wMnBkbWEge1xuLVx0c3RydWN0IGdlbl9wb29sICpwb29sO1xuLVx0Ym9vbCBwMnBtZW1fcHVibGlzaGVkO1xuLVx0c3RydWN0IHhhcnJheSBtYXBfdHlwZXM7XG4tXHRzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyIG1lbVtQQ0lfU1REX05VTV9CQVJTXTtcbi19O1xuKyNpbmNsdWRlIFwicDJwZG1hLmhcIlxuIFxuIHN0cnVjdCBwY2lfcDJwZG1hX3BhZ2VtYXAge1xuIFx0c3RydWN0IGRldl9wYWdlbWFwIHBnbWFwO1xuQEAgLTIyNiwxMTAgKzIyMSwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBwMnBkbWFfcGdtYXBfb3BzID0ge1xuIFx0LmZvbGlvX2ZyZWUgPSBwMnBkbWFfZm9saW9fZnJlZSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3ZvaWQgcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpXG4ge1xuLVx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhO1xuLVx0c3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTtcbi1cbi1cdHAycGRtYSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuLVx0aWYgKCFwMnBkbWEpXG4tXHRcdHJldHVybjtcbi1cbi1cdC8qIEZsdXNoIGFuZCBkaXNhYmxlIHBjaV9hbGxvY19wMnBfbWVtKCkgKi9cbi1cdHBkZXYtXHUwMDNlcDJwZG1hID0gTlVMTDtcbi1cdGlmIChwMnBkbWEtXHUwMDNlcG9vbClcbi1cdFx0c3luY2hyb25pemVfcmN1KCk7XG4tXHR4YV9kZXN0cm95KFx1MDAyNnAycGRtYS1cdTAwM2VtYXBfdHlwZXMpO1xuLVxuIFx0aWYgKCFwMnBkbWEtXHUwMDNlcG9vbClcbiBcdFx0cmV0dXJuO1xuIFxuK1x0c3luY2hyb25pemVfcmN1KCk7XG4gXHRnZW5fcG9vbF9kZXN0cm95KHAycGRtYS1cdTAwM2Vwb29sKTtcbiBcdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZwZGV2LVx1MDAzZWRldi5rb2JqLCBcdTAwMjZwMnBtZW1fZ3JvdXApO1xuIH1cbiBcbi0vKipcbi0gKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyc1xuLSAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvclxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZVxuLSAqIGZvciBhIFBDSSBkZXZpY2UuIEl0IGFsbG9jYXRlcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGFcbi0gKiBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgUDJQRE1BIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBtYXBwaW5nIHR5cGVcbi0gKiB0cmFja2luZy5cbi0gKi9cbi1pbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi17XG4tXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwO1xuLVx0aW50IGksIHJldDtcbi1cbi1cdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuLVx0aWYgKHAycClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRwMnAgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXAycClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHR4YV9pbml0KFx1MDAyNnAycC1cdTAwM2VtYXBfdHlwZXMpO1xuLVx0Lypcbi1cdCAqIEl0ZXJhdGUgb3ZlciBhbGwgc3RhbmRhcmQgUENJIEJBUnMgYW5kIHJlY29yZCBvbmx5IHRob3NlIHRoYXRcbi1cdCAqIGNvcnJlc3BvbmQgdG8gTU1JTyByZWdpb25zLiBTa2lwIG5vbi1tZW1vcnkgcmVzb3VyY2VzIChlLmcuIEkvT1xuLVx0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcbi1cdCAqIHRyYW5zYWN0aW9ucy5cbi1cdCAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSsrKSB7XG4tXHRcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRwMnAtXHUwMDNlbWVtW2ldLm93bmVyID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tXHRcdHAycC1cdTAwM2VtZW1baV0uYnVzX29mZnNldCA9XG4tXHRcdFx0cGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpO1xuLVx0fVxuLVxuLVx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwY2lfcDJwZG1hX3JlbGVhc2UsIHBkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0Z290byBvdXRfcDJwO1xuLVxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXHUwMDNlcDJwZG1hLCBwMnApO1xuLVx0cmV0dXJuIDA7XG4tXG4tb3V0X3AycDpcbi1cdGRldm1fa2ZyZWUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHAycCk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChwY2ltX3AycGRtYV9pbml0KTtcbi1cbi0vKipcbi0gKiBwY2ltX3AycGRtYV9wcm92aWRlciAtIEdldCBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyXG4tICogQHBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGVuYWJsZSBQMlBETUEgZm9yXG4tICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBnZXRzIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXIgZm9yIGEgUENJIGRldmljZS4gVGhlIGxpZmV0aW1lXG4tICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXG4tICogZHJpdmVyLiBBIGRyaXZlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byB0aGVcbi0gKiBwcm92aWRlciwgYW5kIGFueSBETUEgbWFwcGluZ3MgY3JlYXRlZCBmb3IgYW55IE1NSU8sIGFyZSBhbGwgY2xlYW5lZCB1cFxuLSAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cbi0gKlxuLSAqIFNpbmNlIFAyUCBpcyBhbG1vc3QgYWx3YXlzIHNoYXJlZCB3aXRoIGEgc2Vjb25kIGRyaXZlciB0aGlzIG1lYW5zIHNvbWUgc3lzdGVtXG4tICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8ncyBETUEgbXVzdCBiZSBpbiBwbGFjZSB0byB1c2UgdGhpc1xuLSAqIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSBhIHJldm9rZSBjYW4gYmUgYnVpbHQgdXNpbmcgRE1BQlVGLlxuLSAqL1xuLXN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKVxuLXtcbi1cdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XG4tXG4tXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuLVx0aWYgKFdBUk5fT04oIXAycCkpXG4tXHRcdC8qIFNvbWVvbmUgZm9yZ290IHRvIGNhbGwgdG8gcGNpbV9wMnBkbWFfaW5pdCgpIGJlZm9yZSAqL1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHJldHVybiBcdTAwMjZwMnAtXHUwMDNlbWVtW2Jhcl07XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX3Byb3ZpZGVyKTtcbi1cbiBzdGF0aWMgaW50IHBjaV9wMnBkbWFfc2V0dXBfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwZG1hO1xuQEAgLTkzMiw4ICs4MzMsOCBAQCB2b2lkICpwY2lfYWxsb2NfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSlcbiBcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG4gXG4gXHQvKlxuLVx0ICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2UoKSB0b1xuLVx0ICogZW5zdXJlIHBkZXYtXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4rXHQgKiBQYWlycyB3aXRoIHN5bmNocm9uaXplX3JjdSgpIGluIHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKClcbitcdCAqIHRvIGVuc3VyZSBwZGV2LVx1MDAzZXAycGRtYSBpcyBub24tTlVMTCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZVxuIFx0ICogcmVhZC1sb2NrLlxuIFx0ICovXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmggYi9kcml2ZXJzL3BjaS9wMnBkbWEuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NDYzODM4MDk5ODE0OVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9wY2kvcDJwZG1hLmhcbkBAIC0wLDAgKzEsMjkgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydC5cbisgKi9cbitcbisjaWZuZGVmIF9QQ0lfUDJQRE1BX0hcbisjZGVmaW5lIF9QQ0lfUDJQRE1BX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9nZW5hbGxvYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbitcbitzdHJ1Y3QgcGNpX3AycGRtYSB7XG4rXHRzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2w7XG4rXHRib29sIHAycG1lbV9wdWJsaXNoZWQ7XG4rXHRzdHJ1Y3QgeGFycmF5IG1hcF90eXBlcztcbitcdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgbWVtW1BDSV9TVERfTlVNX0JBUlNdO1xuK307XG4rXG4rI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXG4rdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpXG4re1xuK31cbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jIGIvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iYjIxMzhiZjJiYzdiN1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuY1xuQEAgLTAsMCArMSwxMTggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydCBjb3JlLCBwcm92aWRpbmcgYSBiYXJlLWJvbmVzXG4rICogcGNpbV9wMnBkbWFfcHJvdmlkZXIoKSBpbnRlcmZhY2UgdG8gZHJpdmVycyBldmVuIGlmIGZ1bGwgUDJQRE1BXG4rICogaXNuJ3QgcHJlc2VudC4gIFRoZSBmdWxsIFAyUERNQSBmZWF0dXJlIGlzIGluIHAycGRtYS5jIChzZWVcbisgKiBDT05GSUdfUENJX1AyUERNQSkuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgTG9nYW4gR3VudGhvcnBlXG4rICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIE1pY3Jvc2VtaSBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoYykgMjAxNywgQ2hyaXN0b3BoIEhlbGx3aWdcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEVpZGV0aWNvbSBJbmMuXG4rICovXG4rXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcInBjaS1wMnBkbWE6IFwiIGZtdFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9nZW5hbGxvYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJwMnBkbWEuaFwiXG4rXG4rc3RhdGljIHZvaWQgcGNpX3AycGRtYV9yZWxlYXNlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhO1xuK1x0c3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTtcbitcbitcdHAycGRtYSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuK1x0aWYgKCFwMnBkbWEpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEZsdXNoIGFuZCBkaXNhYmxlIHBjaV9hbGxvY19wMnBfbWVtKCkgKi9cbitcdHBkZXYtXHUwMDNlcDJwZG1hID0gTlVMTDtcbitcdHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKHBkZXYsIHAycGRtYSk7XG4rXHR4YV9kZXN0cm95KFx1MDAyNnAycGRtYS1cdTAwM2VtYXBfdHlwZXMpO1xuK31cbitcbisvKipcbisgKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyc1xuKyAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvclxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZVxuKyAqIGZvciBhIFBDSSBkZXZpY2UuIEl0IGFsbG9jYXRlcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGFcbisgKiBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgUDJQRE1BIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBtYXBwaW5nIHR5cGVcbisgKiB0cmFja2luZy5cbisgKi9cbitpbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwO1xuK1x0aW50IGksIHJldDtcbitcbitcdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuK1x0aWYgKHAycClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwMnAgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXAycClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHR4YV9pbml0KFx1MDAyNnAycC1cdTAwM2VtYXBfdHlwZXMpO1xuK1x0LypcbitcdCAqIEl0ZXJhdGUgb3ZlciBhbGwgc3RhbmRhcmQgUENJIEJBUnMgYW5kIHJlY29yZCBvbmx5IHRob3NlIHRoYXRcbitcdCAqIGNvcnJlc3BvbmQgdG8gTU1JTyByZWdpb25zLiBTa2lwIG5vbi1tZW1vcnkgcmVzb3VyY2VzIChlLmcuIEkvT1xuK1x0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcbitcdCAqIHRyYW5zYWN0aW9ucy5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSsrKSB7XG4rXHRcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRwMnAtXHUwMDNlbWVtW2ldLm93bmVyID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4rXHRcdHAycC1cdTAwM2VtZW1baV0uYnVzX29mZnNldCA9XG4rXHRcdFx0cGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpO1xuK1x0fVxuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwY2lfcDJwZG1hX3JlbGVhc2UsIHBkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcDJwO1xuK1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXHUwMDNlcDJwZG1hLCBwMnApO1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0X3AycDpcbitcdGRldm1fa2ZyZWUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHAycCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2ltX3AycGRtYV9pbml0KTtcbitcbisvKipcbisgKiBwY2ltX3AycGRtYV9wcm92aWRlciAtIEdldCBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyXG4rICogQHBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGVuYWJsZSBQMlBETUEgZm9yXG4rICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBnZXRzIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXIgZm9yIGEgUENJIGRldmljZS4gVGhlIGxpZmV0aW1lXG4rICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXG4rICogZHJpdmVyLiBBIGRyaXZlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byB0aGVcbisgKiBwcm92aWRlciwgYW5kIGFueSBETUEgbWFwcGluZ3MgY3JlYXRlZCBmb3IgYW55IE1NSU8sIGFyZSBhbGwgY2xlYW5lZCB1cFxuKyAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cbisgKlxuKyAqIFNpbmNlIFAyUCBpcyBhbG1vc3QgYWx3YXlzIHNoYXJlZCB3aXRoIGEgc2Vjb25kIGRyaXZlciB0aGlzIG1lYW5zIHNvbWUgc3lzdGVtXG4rICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8ncyBETUEgbXVzdCBiZSBpbiBwbGFjZSB0byB1c2UgdGhpc1xuKyAqIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSBhIHJldm9rZSBjYW4gYmUgYnVpbHQgdXNpbmcgRE1BQlVGLlxuKyAqL1xuK3N0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKVxuK3tcbitcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XG4rXG4rXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuK1x0aWYgKFdBUk5fT04oIXAycCkpXG4rXHRcdC8qIFNvbWVvbmUgZm9yZ290IHRvIGNhbGwgdG8gcGNpbV9wMnBkbWFfaW5pdCgpIGJlZm9yZSAqL1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBcdTAwMjZwMnAtXHUwMDNlbWVtW2Jhcl07XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX3Byb3ZpZGVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcgYi9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdcbmluZGV4IDI5NmJmMDFlMTg1ZWNhLi42N2EyYWUxZmJjMDRiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXG5AQCAtNiw2ICs2LDggQEAgY29uZmlnIFZGSU9fUENJX0NPUkVcbiBcdHRyaXN0YXRlXG4gXHRzZWxlY3QgVkZJT19WSVJRRkRcbiBcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbitcdHNlbGVjdCBQQ0lfUDJQRE1BX0NPUkVcbitcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuIFxuIGNvbmZpZyBWRklPX1BDSV9JTlRYXG4gXHRkZWZfYm9vbCB5IGlmICFTMzkwXG5AQCAtNTYsNyArNTgsOCBAQCBjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cbiBcdCAgVG8gZW5hYmxlIHMzOTB4IEtWTSB2ZmlvLXBjaSBleHRlbnNpb25zLCBzYXkgWS5cbiBcbiBjb25maWcgVkZJT19QQ0lfRE1BQlVGXG4tXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4rXHRkZWZfYm9vbCB5IGlmIFBDSV9QMlBETUFcbitcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxuIFxuIHNvdXJjZSBcImRyaXZlcnMvdmZpby9wY2kvbWx4NS9LY29uZmlnXCJcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlIGIvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZVxuaW5kZXggNjEzOGYxYmYyNDFkZjAuLjg4MTQ1MmVhODliZTBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZVxuQEAgLTEsOCArMSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gXG4tdmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcub1xuK3ZmaW8tcGNpLWNvcmUteSA6PSB2ZmlvX3BjaV9jb3JlLm8gdmZpb19wY2lfaW50cnMubyB2ZmlvX3BjaV9yZHdyLm8gdmZpb19wY2lfY29uZmlnLm8gdmZpb19wY2lfZG1hYnVmLm9cbiB2ZmlvLXBjaS1jb3JlLSQoQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNKSArPSB2ZmlvX3BjaV96ZGV2Lm9cbi12ZmlvLXBjaS1jb3JlLSQoQ09ORklHX1ZGSU9fUENJX0RNQUJVRikgKz0gdmZpb19wY2lfZG1hYnVmLm9cbiBvYmotJChDT05GSUdfVkZJT19QQ0lfQ09SRSkgKz0gdmZpby1wY2ktY29yZS5vXG4gXG4gdmZpby1wY2kteSA6PSB2ZmlvX3BjaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmNcbmluZGV4IGJiMTIxZjYzNWI5ZjdmLi5kOWYyNmIwY2U5OTFkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmNcbkBAIC0xNzI1LDYgKzE3MjUsMTQgQEAgc3RhdGljIGludCBoaXNpX2FjY192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3B1dF92ZGV2O1xuIFxuK1x0LypcbitcdCAqIGhpc2lfYWNjX3ZmaW9fcGNpX21tYXAoKSBjYWxscyBkb3duIHRvXG4rXHQgKiB2ZmlvX3BjaV9jb3JlX21tYXAoKSwgc28gQkFSIG1hcHBpbmdzIGFyZSBzdGlsbFxuK1x0ICogRE1BQlVGLWJhY2tlZC4gIFRoZXkgZG9uJ3QgcmVxdWlyZSBhIHphcCBvbiByZXZva2UsIHNvIG9wdFxuK1x0ICogb3V0OlxuK1x0ICovXG4rXHRoaXNpX2FjY192ZGV2LVx1MDAzZWNvcmVfZGV2aWNlLnphcF9iYXJzX29uX3Jldm9rZSA9IGZhbHNlO1xuK1xuIFx0aGlzaV9hY2NfdmZpb19kZWJ1Z19pbml0KGhpc2lfYWNjX3ZkZXYpO1xuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbmluZGV4IGExMGVkNzMzZjBlM2FmLi5iYzZjY2IyZTEzNWMzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbkBAIC01OTAsMTIgKzU5MCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fYmFzaWNfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0dmlydF9tZW0gPSAhIShsZTE2X3RvX2NwdSgqdmlydF9jbWQpIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuIFx0XHRuZXdfbWVtID0gISEobmV3X2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKTtcbiBcbi1cdFx0aWYgKCFuZXdfbWVtKSB7XG4tXHRcdFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuLVx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbi1cdFx0fSBlbHNlIHtcbitcdFx0aWYgKCFuZXdfbWVtKVxuK1x0XHRcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XG4rXHRcdGVsc2VcbiBcdFx0XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuLVx0XHR9XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZSB1c2VyIGlzIHdyaXRpbmcgbWVtL2lvIGVuYWJsZSAobmV3X21lbS9pbykgYW5kIHdlXG5AQCAtNjMxLDcgKzYyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19iYXNpY19jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuIFx0XHQqdmlydF9jbWQgfD0gY3B1X3RvX2xlMTYobmV3X2NtZCBcdTAwMjYgbWFzayk7XG4gXG4gXHRcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4rXHRcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gXHR9XG4gXG5AQCAtNzEyLDE2ICs3MTAsMTQgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfY2FwX2Jhc2ljX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiBzdGF0aWMgdm9pZCB2ZmlvX2xvY2tfYW5kX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHRcdCAgcGNpX3Bvd2VyX3Qgc3RhdGUpXG4ge1xuLVx0aWYgKHN0YXRlIFx1MDAzZT0gUENJX0QzaG90KSB7XG4tXHRcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuLVx0fSBlbHNlIHtcbitcdGlmIChzdGF0ZSBcdTAwM2U9IFBDSV9EM2hvdClcbitcdFx0dmZpb19wY2lfbG9ja19yZXZva2VfYmFycyh2ZGV2KTtcbitcdGVsc2VcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cdH1cbiBcbiBcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBzdGF0ZSk7XG4gXHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbitcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIH1cbiBcbkBAIC05MDgsMTEgKzkwNCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fZXhwX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNmNhcCk7XG4gXG4gXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAoY2FwIFx1MDAyNiBQQ0lfRVhQX0RFVkNBUF9GTFIpKSB7XG4tXHRcdFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuLVx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbitcdFx0XHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHRcdHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cdTAwM2VwZGV2KTtcbiBcdFx0XHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4rXHRcdFx0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTkzLDExICs5ODgsMTAgQEAgc3RhdGljIGludCB2ZmlvX2FmX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXG4gXHRcdFx0XHRcdFx0XHUwMDI2Y2FwKTtcbiBcbiBcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IChjYXAgXHUwMDI2IFBDSV9BRl9DQVBfRkxSKSBcdTAwMjZcdTAwMjYgKGNhcCBcdTAwMjYgUENJX0FGX0NBUF9UUCkpIHtcbi1cdFx0XHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG4tXHRcdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuK1x0XHRcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XG4gXHRcdFx0cGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LVx1MDAzZXBkZXYpO1xuIFx0XHRcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHRcdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbitcdFx0XHRcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XG4gXHRcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCAwNTBlNzU0Mjk1MmVkMS4uMDA1OWMxNzZkNjI3MDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xMiw2ICsxMiw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXBlcnR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG5AQCAtMzE5LDggKzMyMSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfcnVudGltZV9wbV9lbnRyeShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHQgKiBUaGUgdmRldiBwb3dlciByZWxhdGVkIGZsYWdzIGFyZSBwcm90ZWN0ZWQgd2l0aCAnbWVtb3J5X2xvY2snXG4gXHQgKiBzZW1hcGhvcmUuXG4gXHQgKi9cbi1cdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbi1cdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbitcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XG4gXG4gXHRpZiAodmRldi1cdTAwM2VwbV9ydW50aW1lX2VuZ2FnZWQpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG5AQCAtNDA2LDcgKzQwNyw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX3J1bnRpbWVfcG1fZXhpdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0X192ZmlvX3BjaV9ydW50aW1lX3BtX2V4aXQodmRldik7XG4gXHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbitcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIH1cbiBcbkBAIC0xMjU2LDYgKzEyNTcsOCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3NldF9pcnFzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHZmaW9fcGNpX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4rXG4gc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9yZXNldChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHR2b2lkIF9fdXNlciAqYXJnKVxuIHtcbkBAIC0xMjY0LDcgKzEyNjcsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdGlmICghdmRldi1cdTAwM2VyZXNldF93b3JrcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG4rXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgd2hpbGUgdGhlIHBvd2VyIHN0YXRlIGlzIG5vbi1EMC4gSWZcbkBAIC0xMjc0LDEzICsxMjc3LDE4IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0ICogaGF2ZSBOb1NvZnRSc3QtLCB0aGUgcmVzZXQgZnVuY3Rpb24gY2FuIGNhdXNlIHRoZSBQQ0kgY29uZmlnIHNwYWNlXG4gXHQgKiByZXNldCB3aXRob3V0IHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgc3RhdGUgKHNhdmVkIGxvY2FsbHkgaW5cbiBcdCAqICd2ZGV2LVx1MDAzZXBtX3NhdmUnKS5cbitcdCAqXG4rXHQgKiBUaGUgemFwIGlzIGRvbmUgYWZ0ZXIgbWFraW5nIHRoZSBkZXZpY2UgYWNjZXNzaWJsZSBpbiBEMCxcbitcdCAqIGJlY2F1c2UgYSBETUFCVUYgaW1wb3J0ZXIgY291bGQgYWNjZXNzIHRoZSBkZXZpY2UgYXMgcGFydFxuK1x0ICogb2YgaXRzIHJldm9jYXRpb24gY2xlYW51cC5cbiBcdCAqL1xuIFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4gXG4tXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XG4rXHR2ZmlvX3BjaV9yZXZva2VfYmFycyh2ZGV2KTtcbitcbiBcdHJldCA9IHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cdTAwM2VwZGV2KTtcbiBcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuK1x0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE1NjksNiArMTU3NywxMCBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0U6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuK1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUjpcbitcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5AQCAtMTY0OCwyMCArMTY2MCwzNyBAQCBzc2l6ZV90IHZmaW9fcGNpX2NvcmVfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNvbnN0IGNoYXIgX191c2VyICpidVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX3dyaXRlKTtcbiBcbi1zdGF0aWMgdm9pZCB2ZmlvX3BjaV96YXBfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4rc3RhdGljIHZvaWQgdmZpb19wY2lfcmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIHtcbi1cdHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2ID0gXHUwMDI2dmRldi1cdTAwM2V2ZGV2O1xuLVx0bG9mZl90IHN0YXJ0ID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYKTtcbi1cdGxvZmZfdCBlbmQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfUk9NX1JFR0lPTl9JTkRFWCk7XG4tXHRsb2ZmX3QgbGVuID0gZW5kIC0gc3RhcnQ7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuIFxuLVx0dW5tYXBfbWFwcGluZ19yYW5nZShjb3JlX3ZkZXYtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBzdGFydCwgbGVuLCB0cnVlKTtcbitcdC8qXG4rXHQgKiBJZiBhIGRyaXZlciBjb3VsZCBwb3NzaWJseSBjcmVhdGUgQkFSIG1hcHBpbmdzIGluIHRoZVxuK1x0ICogdmRldidzIGFkZHJlc3Nfc3BhY2UsIGRvIGFuIGFkZGl0aW9uYWwgemFwIG9uIHJldm9rZS4gIFNlZVxuK1x0ICogdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoKS5cbitcdCAqL1xuK1x0aWYgKHZkZXYtXHUwMDNlemFwX2JhcnNfb25fcmV2b2tlKSB7XG4rXHRcdHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2ID0gXHUwMDI2dmRldi1cdTAwM2V2ZGV2O1xuK1x0XHRsb2ZmX3Qgc3RhcnQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfQkFSMF9SRUdJT05fSU5ERVgpO1xuK1x0XHRsb2ZmX3QgZW5kID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX1JPTV9SRUdJT05fSU5ERVgpO1xuK1x0XHRsb2ZmX3QgbGVuID0gZW5kIC0gc3RhcnQ7XG4rXG4rXHRcdHVubWFwX21hcHBpbmdfcmFuZ2UoY29yZV92ZGV2LVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyxcbitcdFx0XHRcdCAgICBzdGFydCwgbGVuLCB0cnVlKTtcbitcdH1cbiB9XG4gXG4tdm9pZCB2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuK3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4ge1xuIFx0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cdHZmaW9fcGNpX3phcF9iYXJzKHZkZXYpO1xuK1x0dmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7XG4rfVxuK1xuK3ZvaWQgdmZpb19wY2lfdW5yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbitcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4gfVxuIFxuIHUxNiB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNjgzLDE4ICsxNzEyLDYgQEAgdm9pZCB2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGNcbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFfdG9fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXHRpbnQgaW5kZXggPSB2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDNlXHUwMDNlIChWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKTtcbi1cdHU2NCBwZ29mZjtcbi1cbi1cdHBnb2ZmID0gdm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAyNlxuLVx0XHQoKDFVIFx1MDAzY1x1MDAzYyAoVkZJT19QQ0lfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCkpIC0gMSk7XG4tXG4tXHRyZXR1cm4gKHBjaV9yZXNvdXJjZV9zdGFydCh2ZGV2LVx1MDAzZXBkZXYsIGluZGV4KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgKyBwZ29mZjtcbi19XG4tXG4gdm1fZmF1bHRfdCB2ZmlvX3BjaV92bWZfaW5zZXJ0X3BmbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcGZuLFxuQEAgLTE3MjIsMjQgKzE3MzksMTAzIEBAIHN0YXRpYyB2bV9mYXVsdF90IHZmaW9fcGNpX21tYXBfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbi1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXHR1bnNpZ25lZCBsb25nIGFkZHIgPSB2bWYtXHUwMDNlYWRkcmVzcyBcdTAwMjYgfigoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxKTtcbi1cdHVuc2lnbmVkIGxvbmcgcGdvZmYgPSAoYWRkciAtIHZtYS1cdTAwM2V2bV9zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHR1bnNpZ25lZCBsb25nIHBmbiA9IHZtYV90b19wZm4odm1hKSArIHBnb2ZmO1xuLVx0dm1fZmF1bHRfdCByZXQgPSBWTV9GQVVMVF9GQUxMQkFDSztcbi1cbi1cdGlmIChpc19hbGlnbmVkX2Zvcl9vcmRlcih2bWEsIGFkZHIsIHBmbiwgb3JkZXIpKSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKVxuLVx0XHRcdHJldCA9IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHZkZXYsIHZtZiwgcGZuLCBvcmRlcik7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiA9IDA7XG4rXHR2bV9mYXVsdF90IHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcbitcdC8qXG4rXHQgKiBUaGUgb25seSB0aGluZyB0aGlzIGNhbiByZWx5IG9uIGlzIHRoYXQgdGhlIERNQUJVRiByZWxhdGluZ1xuK1x0ICogdG8gdGhlIFZNQSdzIHZtX2ZpbGUgZXhpc3RzIChwcml2KS5cbitcdCAqXG4rXHQgKiBBIERNQUJVRiBmb3IgYSBWRklPIGRldmljZSBmZCBtbWFwKCkgaG9sZHMgYSByZWZlcmVuY2UgdG9cbitcdCAqIHRoZSBvcmlnaW5hbCBWRklPIGRldmljZSBmZCwgYnV0IGFuIGV4cGxpY2l0bHktZXhwb3J0ZWRcbitcdCAqIERNQUJVRiBkb2VzIG5vdC4gIFRoZSBvcmlnaW5hbCBmZCBtaWdodCBoYXZlIGNsb3NlZCxcbitcdCAqIG1lYW5pbmcgdGhpcyBmYXVsdCBjYW4gcmFjZSB3aXRoXG4rXHQgKiB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKSwgbWVhbmluZyB0aGUgYnVmZmVyIGNvdWxkIGhhdmVcbitcdCAqIGJlZW4gcmV2b2tlZCAoaW4gd2hpY2ggY2FzZSBwcml2LVx1MDAzZXZkZXYgbWlnaHQgYmUgTlVMTCksIGFuZFxuK1x0ICogdGhlIFZGSU8gZGV2aWNlIHJlZ2lzdHJhdGlvbiBtaWdodCBoYXZlIGJlZW4gZHJvcHBlZC5cbitcdCAqXG4rXHQgKiBXaXRoIHRoZSBnb2FsIG9mIHRha2luZyB2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrIGluIGEgd29ybGQgd2hlcmVcbitcdCAqIHZkZXYgbWlnaHQgbm90IHN0aWxsIGV4aXN0OlxuK1x0ICpcbitcdCAqIDEuIFRha2UgdGhlIHJlc3YgbG9jayBvbiB0aGUgRE1BQlVGOlxuK1x0ICogIC0gSWYgcmFjaW5nIGNsZWFudXAgZ290IGluIGZpcnN0LCB0aGUgYnVmZmVyIGlzIHJldm9rZWQ7XG4rXHQgKiAgICBzdG9wL2V4aXQgaWYgc28uXG4rXHQgKiAgLSBJZiB3ZSBnb3QgaW4gZmlyc3QsIHRoZSBidWZmZXIgaXMgbm90IHJldm9rZWQgc28gdmRldiBpc1xuK1x0ICogICAgbm9uLU5VTEwsIGFjY2Vzc2libGUsIGFuZCBjbGVhbnVwIF9oYXMgbm90IHlldCBwdXQgdGhlXG4rXHQgKiAgICBWRklPIGRldmljZSByZWdpc3RyYXRpb25fLiAgU28sIHRoZSBkZXZpY2UgcmVmY291bnQgbXVzdFxuK1x0ICogICAgYmUgXHUwMDNlMC5cbitcdCAqXG4rXHQgKiAyLiBUYWtlIHZmaW9fZGV2aWNlIHJlZ2lzdHJhdGlvbiAocmVmY291bnQgZ3VhcmFudGVlZCBcdTAwM2UwXG4rXHQgKiAgICBoZXJlYWZ0ZXIpLlxuK1x0ICpcbitcdCAqIDMuIFVubG9jayB0aGUgRE1BQlVGJ3MgcmVzdiBsb2NrOlxuK1x0ICogIC0gQSByYWNpbmcgY2xlYW51cCBjYW4gbm93IGNvbXBsZXRlLlxuK1x0ICogIC0gQnV0LCB0aGUgZGV2aWNlIHJlZmNvdW50IFx1MDAzZTAsIG1lYW5pbmcgdGhlIHZmaW9fZGV2aWNlXG4rXHQgKiAgICAoYW5kIHZmaW9fcGNpZV9jb3JlIGRldmljZSB2ZGV2KSBoYXZlIG5vdCB5ZXQgYmVlblxuK1x0ICogICAgZnJlZWQuICB2ZGV2IGlzIGFjY2Vzc2libGUsIGV2ZW4gaWYgdGhlIERNQUJVRiBoYXMgYmVlblxuK1x0ICogICAgcmV2b2tlZCBvciBjbGVhbnVwIGhhcyBoYXBwZW5lZCwgYmVjYXVzZVxuK1x0ICogICAgdmZpb191bnJlZ2lzdGVyX2dyb3VwX2RldigpIGNhbid0IGNvbXBsZXRlLlxuK1x0ICpcbitcdCAqIDQuIFRha2UgdGhlIHZkZXYtXHUwMDNlbWVtb3J5X2xvY2tcbitcdCAqICAtIEVpdGhlciB0aGUgRE1BQlVGIGlzIHVzYWJsZSwgb3IgaGFzIGJlZW4gY2xlYW5lZCB1cC5cbitcdCAqICAgIFdoaWNoZXZlciwgaXQgY2FuIG5vIGxvbmdlciBjaGFuZ2UgdW5kZXIgdXMuXG4rXHQgKiAgLSBUZXN0IHRoZSBETUFCVUYgcmV2b2NhdGlvbiBzdGF0dXMgYWdhaW46IGlmIGl0IHdhc1xuK1x0ICogICAgcmV2b2tlZCBiZXR3ZWVuIDEgYW5kIDQgcmV0dXJuIGEgU0lHQlVTLiBPdGhlcndpc2UsXG4rXHQgKiAgICByZXR1cm4gYSBQRk4uXG4rXHQgKiAgLSBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gYWxzbyB0YWtlIHRoZSByZXN2IGxvY2ssIGJlY2F1c2VcbitcdCAqICAgIHRoZSBzdGF0dXMvdmRldiBjYW4ndCBjaGFuZ2Ugd2hpbGUgbWVtb3J5X2xvY2sgaXMgaGVsZC5cbitcdCAqXG4rXHQgKiA1LiBVbmxvY2ssIGRvbmUuXG4rXHQgKi9cbitcbitcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgIT0gVkZJT19QQ0lfRE1BQlVGX09LKSB7XG4rXHRcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFwiJXMgVkEgMHglbHgsIHBnb2ZmIDB4JWx4OiBETUFCVUYgcmV2b2tlZC9jbGVhbmVkIHVwXFxuXCIsXG4rXHRcdFx0XHQgICAgIF9fZnVuY19fLCB2bWYtXHUwMDNlYWRkcmVzcywgdm1hLVx1MDAzZXZtX3Bnb2ZmKTtcbitcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1x0fVxuK1xuK1x0LyogSWYgdGhlIGJ1ZmZlciBpc24ndCByZXZva2VkLCB2ZGV2IGlzIHZhbGlkICovXG4rXHR2ZGV2ID0gcHJpdi1cdTAwM2V2ZGV2O1xuK1xuK1x0aWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHZkZXYgIT0gTlVMTCAoYWJvdmUpLCB0aGUgcmVnaXN0cmF0aW9uIHNob3VsZFxuK1x0XHQgKiBhbHJlYWR5IGJlIFx1MDAzZTAgYW5kIHNvIHRoaXMgdHJ5X2dldCBzaG91bGQgbmV2ZXJcbitcdFx0ICogZmFpbC5cbitcdFx0ICovXG4rXHRcdGRldl93YXJuKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiJXM6IFVuZXhwZWN0ZWQgcmVnaXN0cmF0aW9uIGZhaWx1cmVcXG5cIixcbitcdFx0XHQgX19mdW5jX18pO1xuK1x0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4rXHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jaykge1xuK1x0XHQvKiBSZXZvY2F0aW9uIHN0YXR1cyBtdXN0IGJlIHJlLXJlYWQsIHVuZGVyIG1lbW9yeV9sb2NrICovXG4rXHRcdGlmIChwcml2LVx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfT0spIHtcbitcdFx0XHRpbnQgcHJlcyA9IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4ocHJpdiwgdm1hLFxuK1x0XHRcdFx0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyxcbitcdFx0XHRcdFx0XHRcdCAgICAgb3JkZXIsIFx1MDAyNnBmbik7XG4rXG4rXHRcdFx0aWYgKHByZXMgPT0gMClcbitcdFx0XHRcdHJldCA9IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHZkZXYsIHZtZixcbitcdFx0XHRcdFx0XHRcdCAgICAgIHBmbiwgb3JkZXIpO1xuK1x0XHRcdGVsc2UgaWYgKHByZXMgPT0gLUVBR0FJTilcbitcdFx0XHRcdHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRkZXZfZGJnX3JhdGVsaW1pdGVkKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0ICAgXCIlcygsb3JkZXIgPSAlZCkgQkFSICVsZCBwYWdlIG9mZnNldCAweCVseDogMHgleFxcblwiLFxuLVx0XHRcdCAgICBfX2Z1bmNfXywgb3JkZXIsXG4tXHRcdFx0ICAgIHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwM2VcdTAwM2Vcbi1cdFx0XHRcdChWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSxcbi1cdFx0XHQgICAgcGdvZmYsICh1bnNpZ25lZCBpbnQpcmV0KTtcbitcdFx0XHQgICAgXCIlcyhvcmRlciA9ICVkKSBQRk4gMHglbHgsIFZBIDB4JWx4LCBwZ29mZiAweCVseDogMHgleFxcblwiLFxuK1x0XHRcdCAgICBfX2Z1bmNfXywgb3JkZXIsIHBmbiwgdm1mLVx1MDAzZWFkZHJlc3MsXG4rXHRcdFx0ICAgIHZtYS1cdTAwM2V2bV9wZ29mZiwgKHVuc2lnbmVkIGludClyZXQpO1xuIFxuK1x0dmZpb19kZXZpY2VfcHV0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTc1NSw2ICsxODUxLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmZpb19wY2lfbW1hcF9vcHMgPSB7XG4gI2VuZGlmXG4gfTtcbiBcbit2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuK3tcbitcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2ZmlvX3BjaV9tbWFwX29wcztcbit9XG4rXG4gaW50IHZmaW9fcGNpX2NvcmVfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID1cbkBAIC0xODAzLDcgKzE5MDQsMTIgQEAgaW50IHZmaW9fcGNpX2NvcmVfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gdmRldjtcbitcdHJldCA9IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1Zih2ZGV2LCB2bWEsXG4rXHRcdFx0XHRcdCAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGluZGV4KSxcbitcdFx0XHRcdFx0ICAgICByZXFfbGVuLCBpbmRleCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiBcbkBAIC0yMjIyLDYgKzIzMjgsMTcgQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3ZmO1xuIFxuK1x0LypcbitcdCAqIElmIGEgZHJpdmVyIG92ZXJyaWRlcyAubW1hcCwgaXQgaGFzIHRvIGJlIGFzc3VtZWQgdGhhdCBpdFxuK1x0ICogbWlnaHQgbm90IHVzZSB0aGUgRE1BQlVGLWJhY2tlZCBjb3JlIG1tYXA7IHRoaXMgZmxhZ1xuK1x0ICogZW5hYmxlcyBhIHphcCBhdCByZXZva2UgdGltZS4gIERyaXZlcnMgY2FuIG9wdCBvdXQgYnlcbitcdCAqIGNsZWFyaW5nIHRoaXMgZmxhZyBhZnRlciByZWdpc3RyYXRpb24sIGUuZy4gaWYgdGhlaXIgLm1tYXBcbitcdCAqIG92ZXJyaWRlIGNhbGxzIGRvd24gdG8gdmZpb19wY2lfY29yZV9tbWFwKCkgc28gdGhhdCBtYXBzXG4rXHQgKiBhcmUgRE1BQlVGLWJhY2tlZC5cbitcdCAqL1xuK1x0aWYgKHZkZXYtXHUwMDNldmRldi5vcHMtXHUwMDNlbW1hcCAhPSB2ZmlvX3BjaV9jb3JlX21tYXApXG4rXHRcdHZkZXYtXHUwMDNlemFwX2JhcnNfb25fcmV2b2tlID0gdHJ1ZTtcbitcbiBcdHZmaW9fcGNpX3Byb2JlX3Bvd2VyX3N0YXRlKHZkZXYpO1xuIFxuIFx0LypcbkBAIC0yNDk3LDkgKzI2MTQsMTAgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxuIFx0XHR9XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFRha2UgdGhlIG1lbW9yeSB3cml0ZSBsb2NrIGZvciBlYWNoIGRldmljZSBhbmQgemFwIEJBUlxuLVx0XHQgKiBtYXBwaW5ncyB0byBwcmV2ZW50IHRoZSB1c2VyIGFjY2Vzc2luZyB0aGUgZGV2aWNlIHdoaWxlIGluXG4tXHRcdCAqIHJlc2V0LiAgTG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIGlzIHByb25lIHRvIGRlYWRsb2NrLFxuK1x0XHQgKiBUYWtlIHRoZSBtZW1vcnkgd3JpdGUgbG9jayBmb3IgZWFjaCBkZXZpY2UgYW5kXG4rXHRcdCAqIHphcC9yZXZva2UgQkFSIG1hcHBpbmdzIHRvIHByZXZlbnQgdGhlIHVzZXIgKG9yXG4rXHRcdCAqIHBlZXJzKSBhY2Nlc3NpbmcgdGhlIGRldmljZSB3aGlsZSBpbiByZXNldC5cbitcdFx0ICogTG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIGlzIHByb25lIHRvIGRlYWRsb2NrLFxuIFx0XHQgKiBydW5hd2F5IGFuZCB1bndpbmQgaWYgd2UgaGl0IGNvbnRlbnRpb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIWRvd25fd3JpdGVfdHJ5bG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKSkge1xuQEAgLTI1MDcsOCArMjYyNSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XG4tXHRcdHZmaW9fcGNpX3phcF9iYXJzKHZkZXYpO1xuK1x0XHR2ZmlvX3BjaV9yZXZva2VfYmFycyh2ZGV2KTtcbiBcdH1cbiBcbiBcdGlmICghbGlzdF9lbnRyeV9pc19oZWFkKHZkZXYsXG5AQCAtMjUzOCw3ICsyNjU1LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UodmRldiwgXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCxcbiBcdFx0XHRcdFx0IHZkZXYuZGV2X3NldF9saXN0KSB7XG4gXHRcdGlmICh2ZGV2LVx1MDAzZXZkZXYub3Blbl9jb3VudCBcdTAwMjZcdTAwMjYgX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuK1x0XHRcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5pbmRleCAxYTE3N2NlN2RlNTQ2YS4uMzFmYmFkOTNmODliMWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5AQCAtNCwyNCArNCwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJ2ZmlvX3BjaV9wcml2LmhcIlxuIFxuIE1PRFVMRV9JTVBPUlRfTlMoXCJETUFfQlVGXCIpO1xuIFxuLXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmIHtcbi1cdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4tXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGRtYWJ1ZnNfZWxtO1xuLVx0c2l6ZV90IHNpemU7XG4tXHRzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjO1xuLVx0c3RydWN0IHAycGRtYV9wcm92aWRlciAqcHJvdmlkZXI7XG4tXHR1MzIgbnJfcmFuZ2VzO1xuLVx0c3RydWN0IGtyZWYga3JlZjtcbi1cdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbi19O1xuLVxuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4gc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHRcdFx0ICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudClcbiB7XG5AQCAtMzAsNyArMTksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRpZiAoIWF0dGFjaG1lbnQtXHUwMDNlcGVlcjJwZWVyKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuK1x0aWYgKHByaXYtXHUwMDNlc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSylcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRpZiAoIWRtYV9idWZfYXR0YWNoX3Jldm9jYWJsZShhdHRhY2htZW50KSlcbkBAIC0zOSw2ICsyOCw0MyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbitcbitcdC8qXG4rXHQgKiBkbWFfYnVmX21tYXBfaW50ZXJuYWwoKSBoYXMgYXNzZXJ0ZWQgdGhhdCB0aGUgVk1BIGlzXG4rXHQgKiBjb250YWluZWQgd2l0aGluIHRoZSBETUFCVUYgc2l6ZSBiZWZvcmUgY2FsbGluZyB0aGlzLlxuK1x0ICpcbitcdCAqIEFsc28sIGlmIHdlIG9ic2VydmUgdGhhdCB0aGUgYnVmZmVyIGlzIHJldm9rZWQgbm93IHRoZW5cbitcdCAqIHJlZnVzZSB0aGUgbW1hcCgpLiAgVGhpcyBpcyBhIGJlbHQtYW5kLWJyYWNlcyBlYXJseSBmYWlsdXJlXG4rXHQgKiB0byBlYXNlIGRlYnVnZ2luZyBhIHJldm9rZWQgYnVmZmVyIGJlaW5nIHVzZWQuICBVc2Vyc3BhY2VcbitcdCAqIG1pZ2h0IGFsc28gcmFjZSBhbiBtbWFwKCkgYWdhaW5zdCBhbiBleHBsaWNpdCByZXZvY2F0aW9uLFxuK1x0ICogb3IgYW4gYWN0aW9uIGRvaW5nIGEgdGVtcG9yYXJ5IHJldm9rZTsgcmFjZSBzY2VuYXJpb3MgYXJlXG4rXHQgKiBzdGlsbCBzYWZlIGJlY2F1c2UgdGhlIGZhdWx0IGhhbmRsZXIgdWx0aW1hdGVseSBwcmV2ZW50c1xuK1x0ICogYWNjZXNzIHRvIGEgcmV2b2tlZCBidWZmZXIgaWYgaXQgaXNuJ3QgY2F1Z2h0IGhlcmUuXG4rXHQgKi9cbitcdGlmIChSRUFEX09OQ0UocHJpdi1cdTAwM2VzdGF0dXMpICE9IFZGSU9fUENJX0RNQUJVRl9PSylcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChSRUFEX09OQ0UocHJpdi1cdTAwM2VtZW1hdHRyKSA9PSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQylcbitcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4rXHRlbHNlXG4rXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuK1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4rXG4rXHQvKiBTZWUgY29tbWVudHMgaW4gdmZpb19wY2lfY29yZV9tbWFwKCkgcmUgVk1fQUxMT1dfQU5ZX1VOQ0FDSEVELiAqL1xuK1x0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fQUxMT1dfQU5ZX1VOQ0FDSEVEIHwgVk1fSU8gfCBWTV9QRk5NQVAgfFxuK1x0XHQgICAgIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4rXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gcHJpdjtcbitcdHZmaW9fcGNpX3NldF92bWFfb3BzKHZtYSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi9cbitcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUoc3RydWN0IGtyZWYgKmtyZWYpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPVxuQEAgLTU2LDcgKzgyLDcgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcbiBcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlcmV2b2tlZClcbitcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIFxuIFx0cmV0ID0gZG1hX2J1Zl9waHlzX3ZlY190b19zZ3QoYXR0YWNobWVudCwgcHJpdi1cdTAwM2Vwcm92aWRlcixcbkBAIC05NSwxNyArMTIxLDIwMyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcbiBcdFx0dXBfd3JpdGUoXHUwMDI2cHJpdi1cdTAwM2V2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcdFx0dmZpb19kZXZpY2VfcHV0X3JlZ2lzdHJhdGlvbihcdTAwMjZwcml2LVx1MDAzZXZkZXYtXHUwMDNldmRldik7XG4gXHR9XG4rXHRpZiAocHJpdi1cdTAwM2V2ZmlsZSlcbitcdFx0ZnB1dChwcml2LVx1MDAzZXZmaWxlKTtcbiBcdGtmcmVlKHByaXYtXHUwMDNlcGh5c192ZWMpO1xuIFx0a2ZyZWUocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbisjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxuIFx0LmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLFxuK1x0Lm1tYXAgPSB2ZmlvX3BjaV9kbWFfYnVmX21tYXAsXG4rI2VuZGlmXG4gXHQubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCxcbiBcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcbiBcdC5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLFxuIH07XG4gXG4raW50IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nICpvdXRfcGZuKVxuK3tcbitcdC8qXG4rXHQgKiBHaXZlbiBhIFZNQSAoc3RhcnQsIGVuZCwgcGdvZmZzKSBhbmQgYSBmYXVsdCBhZGRyZXNzLFxuK1x0ICogc2VhcmNoIHRoZSBjb3JyZXNwb25kaW5nIERNQUJVRidzIHBoeXNfdmVjW10gdG8gZmluZCB0aGVcbitcdCAqIHJhbmdlIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcydzIG9mZnNldCBpbnRvIHRoZSBWTUEsIGFuZFxuK1x0ICogaXRzIFBGTi5cbitcdCAqXG4rXHQgKiBUaGUgcGh5c192ZWNbXSByYW5nZXMgcmVwcmVzZW50IGNvbnRpZ3VvdXMgc3BhbnMgb2YgVkFzXG4rXHQgKiB1cHdhcmRzIGZyb20gdGhlIGJ1ZmZlciBvZmZzZXQgMDsgdGhlIGFjdHVhbCBQRk5zIG1pZ2h0IGJlXG4rXHQgKiBpbiBhbnkgb3JkZXIsIG92ZXJsYXAvYWxpYXMsIGV0Yy4gIENhbGN1bGF0ZSBhbiBvZmZzZXQgb2ZcbitcdCAqIHRoZSBkZXNpcmVkIHBhZ2UgZ2l2ZW4gVk1BIHN0YXJ0L3Bnb2ZmIGFuZCBhZGRyZXNzLCB0aGVuXG4rXHQgKiBzZWFyY2ggdXB3YXJkcyBmcm9tIDAgdG8gZmluZCB3aGljaCBzcGFuIGNvbnRhaW5zIGl0LlxuK1x0ICpcbitcdCAqIE9uIHN1Y2Nlc3MsIGEgdmFsaWQgUEZOIGZvciBhIHBhZ2Ugc2l6ZWQgYnkgJ29yZGVyJyBpc1xuK1x0ICogcmV0dXJuZWQgaW50byBvdXRfcGZuLlxuK1x0ICpcbitcdCAqIEZhaWx1cmUgb2NjdXJzIGlmOlxuK1x0ICogLSBBIGh1Z2VwYWdlIHdvdWxkIGNyb3NzIHRoZSBlZGdlIG9mIHRoZSBWTUEsXG4rXHQgKiAtIEEgaHVnZXBhZ2UgaXNuJ3QgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBhIHJhbmdlXG4rXHQgKiAgIChpbmNsdWRpbmcgd2hlcmUgaXQgc3RyYWRkbGVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuXG4rXHQgKiAgIHJhbmdlcyksXG4rXHQgKiAtIFdlIGZpbmQgYSByYW5nZSwgYnV0IHRoZSBmaW5hbCBQRk4gaXNuJ3QgYWxpZ25lZCB0byB0aGVcbitcdCAqICAgcmVxdWVzdGVkIG9yZGVyLlxuK1x0ICpcbitcdCAqIFVwb24gZmFpbHVyZSwgLUVBR0FJTiBpcyByZXR1cm5lZCBhbmQgdGhlIGNhbGxlciBpc1xuK1x0ICogZXhwZWN0ZWQgdG8gdHJ5IGFnYWluIHdpdGggYSBzbWFsbGVyIG9yZGVyLCB3aGljaCB3aWxsXG4rXHQgKiBldmVudHVhbGx5IHN1Y2NlZWQgKG9yZGVyPTAgd2lsbCBhbHdheXMgd29yaykuXG4rXHQgKlxuK1x0ICogSXQncyBzdWJvcHRpbWFsIGlmIERNQUJVRnMgYXJlIGNyZWF0ZWQgd2l0aCBuZWlnaGJvdXJpbmdcbitcdCAqIHJhbmdlcyB0aGF0IGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHNpbmNlIGh1Z2VwYWdlc1xuK1x0ICogY2FuJ3Qgc3RyYWRkbGUgcmFuZ2UgYm91bmRhcmllcy4gIChUaGUgY29uc3RydWN0aW9uIG9mIHRoZVxuK1x0ICogcmFuZ2VzIHNob3VsZCBtZXJnZSB0aGVtIGluIHRoaXMgY2FzZS4pXG4rXHQgKlxuK1x0ICogRmluYWxseSwgdm1hX3Bnb2ZmX2FkanVzdCBpcyB1c2VkIHdpdGggYSBETUFCVUYgY3JlYXRlZCBmb3JcbitcdCAqIGEgVkZJTyBCQVIgbW1hcDogYSBCQVIgbWFwcGVkIHdpdGggdm1fcGdvZmYgXHUwMDNlIDAgY3JlYXRlcyBhXG4rXHQgKiBETUFCVUYgc3VjaCB0aGF0IGJ5dGUgMCBvZiB0aGUgVk1BIGNvcnJlc3BvbmRzIHRvIGJ5dGUgMCBvZlxuK1x0ICogdGhlIERNQUJVRiBhbmQgYnl0ZSAndm1fcGdvZmYgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQnIGludG8gdGhlIEJBUi5cbitcdCAqIFRvIGF2b2lkIGRvdWJsZS1vZmZzZXR0aW5nIGluIHRoaXMgc2NlbmFyaW8sIHN1YnRyYWN0aW5nXG4rXHQgKiB2bWFfcGdvZmZfYWRqdXN0IGZyb20gdGhpcyAobm9uLXplcm8pIHZtX3Bnb2ZmIGdlbmVyYXRlc1xuK1x0ICogdGhlIGVmZmVjdGl2ZSBvZmZzZXQuXG4rXHQgKi9cbitcbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZXNpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1x0dW5zaWduZWQgbG9uZyB2bWFfb2ZmID0gKCh2bWEtXHUwMDNldm1fcGdvZmYgLSBwcml2LVx1MDAzZXZtYV9wZ29mZl9hZGp1c3QpIFx1MDAzY1x1MDAzY1xuK1x0XHRcdFx0IFBBR0VfU0hJRlQpIFx1MDAyNiBWRklPX1BDSV9PRkZTRVRfTUFTSztcbitcdHVuc2lnbmVkIGxvbmcgcm91bmRlZF9wYWdlX2FkZHIgPSBBTElHTl9ET1dOKGZhdWx0X2FkZHIsIHBhZ2VzaXplKTtcbitcdHVuc2lnbmVkIGxvbmcgcm91bmRlZF9wYWdlX2VuZCA9IHJvdW5kZWRfcGFnZV9hZGRyICsgcGFnZXNpemU7XG4rXHR1bnNpZ25lZCBsb25nIGZhdWx0X29mZnNldDtcbitcdHVuc2lnbmVkIGxvbmcgZmF1bHRfb2Zmc2V0X2VuZDtcbitcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnRfb2Zmc2V0ID0gMDtcbitcdHVuc2lnbmVkIGludCBpO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChyb3VuZGVkX3BhZ2VfYWRkciBcdTAwM2Mgdm1hLVx1MDAzZXZtX3N0YXJ0IHx8IHJvdW5kZWRfcGFnZV9lbmQgXHUwMDNlIHZtYS1cdTAwM2V2bV9lbmQpIHtcbitcdFx0aWYgKG9yZGVyIFx1MDAzZSAwKVxuK1x0XHRcdHJldHVybiAtRUFHQUlOO1xuK1xuK1x0XHQvKiBBIGZhdWx0IGFkZHJlc3Mgb3V0c2lkZSBvZiB0aGUgVk1BIGlzIGFic3VyZC4gKi9cbitcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXG4rXHRcdFx0XHUwMDI2cHJpdi1cdTAwM2V2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmF1bHQgYWRkciAweCVseCBvdXRzaWRlIFZNQSAweCVseC0weCVseFxcblwiLFxuK1x0XHRcdGZhdWx0X2FkZHIsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIGZhdWx0X29mZnNldFtfZW5kXSBpcyB0aGUgc3BhbiB3aXRoaW4gdGhlIERNQUJVRlxuK1x0ICogY29ycmVzcG9uZGluZyB0byB0aGUgZmF1bHRpbmcgcGFnZTpcbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KGNoZWNrX2FkZF9vdmVyZmxvdyhyb3VuZGVkX3BhZ2VfYWRkciAtIHZtYS1cdTAwM2V2bV9zdGFydCxcbitcdFx0XHRcdFx0dm1hX29mZiwgXHUwMDI2ZmF1bHRfb2Zmc2V0KSB8fFxuK1x0XHQgICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhmYXVsdF9vZmZzZXQsIHBhZ2VzaXplLFxuK1x0XHRcdFx0XHRcdTAwMjZmYXVsdF9vZmZzZXRfZW5kKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0LypcbitcdCAqIEl0ZXJhdGUgb3ZlciByYW5nZXMgaW4gdGhlIGJ1ZmZlciwgc3VtbWluZyB0aGVpciBsZW5ndGhzOlxuK1x0ICogcmFuZ2Vfc3RhcnRfb2Zmc2V0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcmFuZ2UncyBzdGFydGluZ1xuK1x0ICogb2Zmc2V0IGluIHRoZSBidWZmZXIgKGZyb20gMCB1cHdhcmRzKS5cbitcdCAqXG4rXHQgKiBBIGZhaWx1cmUgZm9yIG9yZGVyID09IDAgaXMgdW5leHBlY3RlZCwgYW5kIHRyaWdnZXJzIGFcbitcdCAqIGZhdWx0L3dhcm4uXG4rXHQgKi9cbitcdHJldCA9IChvcmRlciA9PSAwKSA/IC1FRkFVTFQgOiAtRUFHQUlOO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2Vucl9yYW5nZXM7IGkrKykge1xuK1x0XHRzaXplX3QgcmFuZ2VfbGVuID0gcHJpdi1cdTAwM2VwaHlzX3ZlY1tpXS5sZW47XG4rXG4rXHRcdC8qIEVhcmx5IGV4aXQgaWYgcmFuZ2Ugc3RhcnRzIGFmdGVyIHRoZSBwYWdlIGVuZCAqL1xuK1x0XHRpZiAoZmF1bHRfb2Zmc2V0X2VuZCBcdTAwM2M9IHJhbmdlX3N0YXJ0X29mZnNldClcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKGZhdWx0X29mZnNldCBcdTAwM2U9IHJhbmdlX3N0YXJ0X29mZnNldCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGZhdWx0X29mZnNldF9lbmQgXHUwMDNjPSByYW5nZV9zdGFydF9vZmZzZXQgKyByYW5nZV9sZW4pIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBmYXVsdGluZyBwYWdlIGlzIHdob2xseSBjb250YWluZWRcbitcdFx0XHQgKiB3aXRoaW4gdGhlIHNwYW4gcmVwcmVzZW50ZWQgYnkgdGhpcyByYW5nZSxcbitcdFx0XHQgKiBzbyB2YWxpZGF0ZSBQRk4gYWxpZ25tZW50IGZvciB0aGUgb3JkZXIuXG4rXHRcdFx0ICogVGhlIGlmKCkgY29uZGl0aW9uIGVuc3VyZXMgdGhlIHBmblxuK1x0XHRcdCAqIGFyaXRobWV0aWMgd29uJ3Qgb3ZlcmZsb3cuXG4rXHRcdFx0ICovXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBwZm4gPVxuK1x0XHRcdFx0KChmYXVsdF9vZmZzZXQgLSByYW5nZV9zdGFydF9vZmZzZXQpICtcbitcdFx0XHRcdCBwcml2LVx1MDAzZXBoeXNfdmVjW2ldLnBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcbitcdFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIDEgXHUwMDNjXHUwMDNjIG9yZGVyKSkge1xuK1x0XHRcdFx0Km91dF9wZm4gPSBwZm47XG4rXHRcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdH1cbitcdFx0XHQvKlxuK1x0XHRcdCAqIEVsc2Ugb3JkZXIgXHUwMDNlIDA7IEVBR0FJTiByZXRyaWVzIHdpdGggc21hbGxlclxuK1x0XHRcdCAqIG9yZGVyXG4rXHRcdFx0ICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0cmFuZ2Vfc3RhcnRfb2Zmc2V0ICs9IHJhbmdlX2xlbjtcbitcdH1cbitcbitcdGlmIChvcmRlciA9PSAwIFx1MDAyNlx1MDAyNiByZXQgIT0gMClcbitcdFx0LypcbitcdFx0ICogVGhlIGFkZHJlc3MgZmVsbCBvdXRzaWRlIG9mIHRoZSBzcGFuIHJlcHJlc2VudGVkIGJ5XG4rXHRcdCAqIHRoZSAoY29uY2F0ZW5hdGVkKSByYW5nZXMuICBBcyBzZXR1cCBvZiBhIG1hcHBpbmdcbitcdFx0ICogZW5zdXJlcyB0aGF0IHRoZSBWTUEgaXMgXHUwMDNjPSB0aGUgdG90YWwgc2l6ZSBvZiB0aGVcbitcdFx0ICogcmFuZ2VzIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIElmIGl0IGRvZXMsIHdhcm5cbitcdFx0ICogYW5kIFNJR0JVUy5cbitcdFx0ICovXG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxuK1x0XHRcdFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcIk5vIHJhbmdlIGZvciBhZGRyIDB4JWx4LCBvcmRlciAlZDogVk1BIDB4JWx4LTB4JWx4IHBnb2ZmIDB4JWx4LCAldSByYW5nZXMsIHNpemUgMHglenhcXG5cIixcbitcdFx0XHRmYXVsdF9hZGRyLCBvcmRlciwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLFxuK1x0XHRcdHZtYS1cdTAwM2V2bV9wZ29mZiwgcHJpdi1cdTAwM2Vucl9yYW5nZXMsIHByaXYtXHUwMDNlc2l6ZSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKlxuKyAqIENyZWF0ZSBhIERNQUJVRiBjb3JyZXNwb25kaW5nIHRvIHByaXYsIGFkZCBpdCB0byB2ZGV2LVx1MDAzZWRtYWJ1ZnMgbGlzdFxuKyAqIGZvciB0cmFja2luZyAobWVhbmluZyBjbGVhbnVwIG9yIHJldm9jYXRpb24gd2lsbCB6YXAgaXQpLCBhbmQgdGFrZVxuKyAqIGEgdmZpb19kZXZpY2UgcmVnaXN0cmF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hYnVmX2V4cG9ydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LCB1MzIgZmxhZ3MpXG4re1xuK1x0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xuK1xuK1x0aWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGV4cF9pbmZvLm9wcyA9IFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHM7XG4rXHRleHBfaW5mby5zaXplID0gcHJpdi1cdTAwM2VzaXplO1xuK1x0ZXhwX2luZm8uZmxhZ3MgPSBmbGFncztcbitcdGV4cF9pbmZvLnByaXYgPSBwcml2O1xuK1xuK1x0cHJpdi1cdTAwM2VkbWFidWYgPSBkbWFfYnVmX2V4cG9ydChcdTAwMjZleHBfaW5mbyk7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlZG1hYnVmKSkge1xuK1x0XHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4rXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlZG1hYnVmKTtcbitcdH1cbitcbitcdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4rXG4rXHQvKiBkbWFfYnVmX3B1dCgpIG5vdyBmcmVlcyBwcml2ICovXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWRtYWJ1ZnNfZWxtKTtcbitcdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuK1x0cHJpdi1cdTAwM2VzdGF0dXMgPSBfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpID8gVkZJT19QQ0lfRE1BQlVGX09LIDpcbitcdFx0VkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRDtcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHJpdi1cdTAwM2VkbWFidWZzX2VsbSwgXHUwMDI2dmRldi1cdTAwM2VkbWFidWZzKTtcbitcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4gLypcbiAgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IFwicHJpdmF0ZSBpbnRlcmNvbm5lY3RcIiBiZXR3ZWVuIFZGSU8gRE1BQlVGIGFuZCBpb21tdWZkLlxuICAqIEl0IGFsbG93cyB0aGUgdHdvIGNvLW9wZXJhdGluZyBkcml2ZXJzIHRvIGV4Y2hhbmdlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mXG5AQCAtMTI4LDcgKzM0MCw3IEBAIGludCB2ZmlvX3BjaV9kbWFfYnVmX2lvbW11ZmRfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHByaXYgPSBhdHRhY2htZW50LVx1MDAzZWRtYWJ1Zi1cdTAwM2Vwcml2O1xuLVx0aWYgKHByaXYtXHUwMDNlcmV2b2tlZClcbitcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0LyogTW9yZSB0aGFuIG9uZSByYW5nZSB0byBpb21tdWZkIHdpbGwgcmVxdWlyZSBwcm9wZXIgRE1BQlVGIHN1cHBvcnQgKi9cbkBAIC0yMjQsNyArNDM2LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIHtcbiBcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgZ2V0X2RtYV9idWYgPSB7fTtcbiBcdHN0cnVjdCB2ZmlvX3JlZ2lvbl9kbWFfcmFuZ2UgKmRtYV9yYW5nZXM7XG4tXHRERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhleHBfaW5mbyk7XG4gXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcbiBcdHNpemVfdCBsZW5ndGg7XG4gXHRpbnQgcmV0O1xuQEAgLTI3NCw2ICs0ODUsNyBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRwcml2LVx1MDAzZXZkZXYgPSB2ZGV2O1xuIFx0cHJpdi1cdTAwM2Vucl9yYW5nZXMgPSBnZXRfZG1hX2J1Zi5ucl9yYW5nZXM7XG4gXHRwcml2LVx1MDAzZXNpemUgPSBsZW5ndGg7XG4rXHRwcml2LVx1MDAzZW1lbWF0dHIgPSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQztcbiBcdHJldCA9IHZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXModmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vwcm92aWRlcixcbiBcdFx0XHRcdFx0ICAgICBnZXRfZG1hX2J1Zi5yZWdpb25faW5kZXgsXG4gXHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VwaHlzX3ZlYywgZG1hX3JhbmdlcyxcbkBAIC0yODQsMzQgKzQ5Niw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdGtmcmVlKGRtYV9yYW5nZXMpO1xuIFx0ZG1hX3JhbmdlcyA9IE5VTEw7XG4gXG4tXHRpZiAoIXZmaW9fZGV2aWNlX3RyeV9nZXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldikpIHtcbi1cdFx0cmV0ID0gLUVOT0RFVjtcbitcdHJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgZ2V0X2RtYV9idWYub3Blbl9mbGFncyk7XG4rXHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycl9mcmVlX3BoeXM7XG4tXHR9XG4tXG4tXHRleHBfaW5mby5vcHMgPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzO1xuLVx0ZXhwX2luZm8uc2l6ZSA9IHByaXYtXHUwMDNlc2l6ZTtcbi1cdGV4cF9pbmZvLmZsYWdzID0gZ2V0X2RtYV9idWYub3Blbl9mbGFncztcbi1cdGV4cF9pbmZvLnByaXYgPSBwcml2O1xuLVxuLVx0cHJpdi1cdTAwM2VkbWFidWYgPSBkbWFfYnVmX2V4cG9ydChcdTAwMjZleHBfaW5mbyk7XG4tXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlZG1hYnVmKSkge1xuLVx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlZG1hYnVmKTtcbi1cdFx0Z290byBlcnJfZGV2X3B1dDtcbi1cdH1cbi1cbi1cdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuLVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4tXG4tXHQvKiBkbWFfYnVmX3B1dCgpIG5vdyBmcmVlcyBwcml2ICovXG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWRtYWJ1ZnNfZWxtKTtcbi1cdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4tXHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuLVx0cHJpdi1cdTAwM2VyZXZva2VkID0gIV9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldik7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmc19lbG0sIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcyk7XG4tXHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4tXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cbiBcdC8qXG4gXHQgKiBkbWFfYnVmX2ZkKCkgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgd2hlbiB0aGUgZmlsZSBjbG9zZXMgdGhlIGRtYWJ1ZlxuIFx0ICogd2lsbCBiZSByZWxlYXNlZC5cbkBAIC0zMjIsOCArNTA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFxuIFx0cmV0dXJuIHJldDtcbiBcbi1lcnJfZGV2X3B1dDpcbi1cdHZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oXHUwMDI2dmRldi1cdTAwM2V2ZGV2KTtcbiBlcnJfZnJlZV9waHlzOlxuIFx0a2ZyZWUocHJpdi1cdTAwM2VwaHlzX3ZlYyk7XG4gZXJyX2ZyZWVfcHJpdjpcbkBAIC0zMzIsNDcgKzUxNywxNjQgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0a2ZyZWUoZG1hX3Jhbmdlcyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbisjZW5kaWYgLyogQ09ORklHX1ZGSU9fUENJX0RNQUJVRiAqL1xuK1xuK2ludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0XHQgICB1NjQgcGh5c19zdGFydCwgdTY0IHJlcV9sZW4sXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcmVzX2luZGV4KVxuK3tcbitcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuK1x0dW5zaWduZWQgbG9uZyB2bWFfcGdvZmYgPSB2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDI2IChWRklPX1BDSV9PRkZTRVRfTUFTSyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRjaGFyICpidWZuYW1lO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cHJpdi1cdTAwM2VwaHlzX3ZlYyA9IGt6YWxsb2Nfb2JqKCpwcml2LVx1MDAzZXBoeXNfdmVjKTtcbitcdGlmICghcHJpdi1cdTAwM2VwaHlzX3ZlYykge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9mcmVlX3ByaXY7XG4rXHR9XG4rXG4rXHRidWZuYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFwiJXM6JXMvJXhcIixcbitcdFx0XHQgICAgZGV2X25hbWUoXHUwMDI2dmRldi1cdTAwM2V2ZGV2LmRldmljZSksIHBjaV9uYW1lKHZkZXYtXHUwMDNlcGRldiksXG4rXHRcdFx0ICAgIHJlc19pbmRleCk7XG4rXG4rXHRpZiAoIWJ1Zm5hbWUpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfZnJlZV9waHlzO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZSBETUFCVUYgYmVnaW5zIGZyb20gdGhlIG1tYXAoKSdzIEJBUiBvZmZzZXQsIGkuZS4gdGhlXG4rXHQgKiBzdGFydCBvZiB0aGUgVk1BIGNvcnJlc3BvbmRzIHRvIGJ5dGUgMCBvZiB0aGUgRE1BQlVGIGFuZFxuK1x0ICogYnl0ZSAodm1hX3Bnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSBvZiB0aGUgQkFSLlxuK1x0ICpcbitcdCAqIHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oKSByZXZlcnNlcyB0aGlzIG9mZnNldCB1c2luZ1xuK1x0ICogdm1hX3Bnb2ZmX2FkanVzdCwgc28gdGhhdCB1bHRpbWF0ZWx5IGEgZmF1bHQncyBvZmZzZXQgZnJvbVxuK1x0ICogdGhlIHN0YXJ0IG9mIHRoZSBfVk1BXyBoYXMgYSBjb25zaXN0ZW50IHVzYWdlIHdoZXRoZXIgdGhlXG4rXHQgKiBWTUEgb3JpZ2luYXRlcyBmcm9tIGFuIG1tYXAoKSBvZiB0aGUgVkZJTyBkZXZpY2UgaGVyZSBvciBhXG4rXHQgKiBkaXJlY3QgRE1BQlVGIG1tYXAoKS5cbitcdCAqL1xuK1x0cHJpdi1cdTAwM2V2ZGV2ID0gdmRldjtcbitcdHByaXYtXHUwMDNlc2l6ZSA9IHJlcV9sZW47XG4rXHRwcml2LVx1MDAzZW5yX3JhbmdlcyA9IDE7XG4rXHRwcml2LVx1MDAzZXZtYV9wZ29mZl9hZGp1c3QgPSB2bWFfcGdvZmY7XG4rXHRwcml2LVx1MDAzZXByb3ZpZGVyID0gcGNpbV9wMnBkbWFfcHJvdmlkZXIodmRldi1cdTAwM2VwZGV2LCByZXNfaW5kZXgpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXByb3ZpZGVyKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfbmFtZTtcbitcdH1cbitcbitcdHByaXYtXHUwMDNlcGh5c192ZWNbMF0ucGFkZHIgPSBwaHlzX3N0YXJ0ICsgKCh1NjQpdm1hX3Bnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcdHByaXYtXHUwMDNlcGh5c192ZWNbMF0ubGVuID0gcHJpdi1cdTAwM2VzaXplO1xuK1xuK1x0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBPX0NMT0VYRUMgfCBPX1JEV1IpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfZnJlZV9uYW1lO1xuK1xuK1x0LypcbitcdCAqIE93bmVyc2hpcCBvZiB0aGUgRE1BQlVGIGZpbGUgdHJhbnNmZXJzIHRvIHRoZSBWTUEgc28gdGhhdFxuK1x0ICogb3RoZXIgdXNlcnMgY2FuIGxvY2F0ZSB0aGUgRE1BQlVGIHZpYSBhIFZBLiAgT3duZXJzaGlwIG9mXG4rXHQgKiB0aGUgb3JpZ2luYWwgVkZJTyBkZXZpY2UgZmlsZSBiZWluZyBtbWFwKCllZCB0cmFuc2ZlcnMgdG9cbitcdCAqIHByaXYsIGFuZCBpcyBwdXQgd2hlbiB0aGUgRE1BQlVGIGlzIHJlbGVhc2VkLiAgVGhpc1xuK1x0ICogaW50ZW50aW9uYWxseSBkb2VzIG5vdCB1c2UgZ2V0X2ZpbGUoKS92bWFfc2V0X2ZpbGUoKVxuK1x0ICogYmVjYXVzZSB0aGUgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLCBhbmQgb3duZXJzaGlwXG4rXHQgKiBtb3Zlcy5cbitcdCAqL1xuK1x0cHJpdi1cdTAwM2V2ZmlsZSA9IHZtYS1cdTAwM2V2bV9maWxlO1xuK1x0dm1hLVx1MDAzZXZtX2ZpbGUgPSBwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlO1xuK1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlbmFtZV9sb2NrKTtcbitcdGtmcmVlKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZW5hbWUpO1xuK1x0cHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlbmFtZSA9IGJ1Zm5hbWU7XG4rXHRzcGluX3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VuYW1lX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWVfbmFtZTpcbitcdGtmcmVlKGJ1Zm5hbWUpO1xuK2Vycl9mcmVlX3BoeXM6XG4rXHRrZnJlZShwcml2LVx1MDAzZXBoeXNfdmVjKTtcbitlcnJfZnJlZV9wcml2OlxuK1x0a2ZyZWUocHJpdik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKiBTZXQgdGhlIERNQUJVRidzIHJldm9jYXRpb24gc3RhdHVzIChPSyBvciB0ZW1wb3JhcmlseS9wZXJtYW5lbnRseSByZXZva2VkKSAqL1xuK3N0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdixcbitcdFx0XHRcdFx0ZW51bSB2ZmlvX3BjaV9kbWFfYnVmX3N0YXR1cyBuZXdfc3RhdHVzKVxuK3tcbitcdGJvb2wgd2FzX3Jldm9rZWQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCB8fFxuK1x0ICAgIHByaXYtXHUwMDNlc3RhdHVzID09IG5ld19zdGF0dXMpXG4rXHRcdHJldHVybjtcbitcbitcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXHR3YXNfcmV2b2tlZCA9IChwcml2LVx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfVEVNUF9SRVZPS0VEKTtcbitcbitcdGlmIChuZXdfc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSykge1xuK1x0XHRwcml2LVx1MDAzZXN0YXR1cyA9IG5ld19zdGF0dXM7IC8qIFRlbXAgb3IgcGVybWFuZW50bHkgcmV2b2tlZCAqL1xuK1xuK1x0XHRpZiAod2FzX3Jldm9rZWQpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRFTVBfUkVWT0tFRCBpcyBiZWluZyB1cGdyYWRlZCB0b1xuK1x0XHRcdCAqIFBFUk1fUkVWT0tFRC4gIFRoZSBidWZmZXIgaXMgYWxyZWFkeSBnb25lLFxuK1x0XHRcdCAqIGRvbid0IHdhaXQgb24gaXQgYWdhaW4uXG4rXHRcdFx0ICovXG4rXHRcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi1cdTAwM2VkbWFidWYpO1xuK1x0XHRkbWFfcmVzdl93YWl0X3RpbWVvdXQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdixcbitcdFx0XHRcdCAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSxcbitcdFx0XHRcdCAgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbitcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRrcmVmX3B1dChcdTAwMjZwcml2LVx1MDAzZWtyZWYsIHZmaW9fcGNpX2RtYV9idWZfZG9uZSk7XG4rXHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2Vjb21wKTtcbitcdFx0dW5tYXBfbWFwcGluZ19yYW5nZShwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlLVx1MDAzZWZfbWFwcGluZyxcbitcdFx0XHRcdCAgICAwLCBwcml2LVx1MDAzZXNpemUsIHRydWUpO1xuK1x0XHQvKlxuK1x0XHQgKiBSZS1hcm0gdGhlIHJlZ2lzdGVyZWQga3JlZiByZWZlcmVuY2UgYW5kIHRoZVxuK1x0XHQgKiBjb21wbGV0aW9uIHNvIHRoZSBwb3N0LXJldm9rZSBzdGF0ZSBtYXRjaGVzIHRoZVxuK1x0XHQgKiBwb3N0LWNyZWF0aW9uIHN0YXRlLiAgQW4gdW4tcmV2b2tlIGZvbGxvd2VkIGJ5IGFcbitcdFx0ICogbmV3IG1hcHBpbmcgbmVlZHMgdGhlIGtyZWYgdG8gYmUgbm9uLXplcm8gYmVmb3JlXG4rXHRcdCAqIGtyZWZfZ2V0KCksIGFuZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKVxuK1x0XHQgKiBkZWxlZ2F0ZXMgaXRzIGRyYWluIGJhY2sgdGhyb3VnaCB0aGlzIHJldm9rZVxuK1x0XHQgKiBwYXRoIG9uIGEgcG9zc2libHktYWxyZWFkeS1yZXZva2VkIGRtYS1idWYuXG4rXHRcdCAqL1xuK1x0XHRrcmVmX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmKTtcbitcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2Vjb21wKTtcbitcdH0gZWxzZSB7XG4rXHRcdHByaXYtXHUwMDNlc3RhdHVzID0gVkZJT19QQ0lfRE1BQlVGX09LO1xuK1x0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXHR9XG4rfVxuIFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnRtcDtcbiBcbitcdC8qXG4rXHQgKiBIb2xkaW5nIG1lbW9yeV9sb2NrIGVuc3VyZXMgYSByYWNpbmcgVk1BIGZhdWx0IG9ic2VydmVzXG4rXHQgKiBwcml2LVx1MDAzZXN0YXR1cyBwcm9wZXJseS5cbitcdCAqL1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcywgZG1hYnVmc19lbG0pIHtcbiBcdFx0aWYgKCFnZXRfZmlsZV9hY3RpdmUoXHUwMDI2cHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlZmlsZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChwcml2LVx1MDAzZXJldm9rZWQgIT0gcmV2b2tlZCkge1xuLVx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4tXHRcdFx0aWYgKHJldm9rZWQpXG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSB0cnVlO1xuLVx0XHRcdGRtYV9idWZfaW52YWxpZGF0ZV9tYXBwaW5ncyhwcml2LVx1MDAzZWRtYWJ1Zik7XG4tXHRcdFx0ZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsXG4tXHRcdFx0XHRcdCAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSxcbi1cdFx0XHRcdFx0ICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuLVx0XHRcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbi1cdFx0XHRpZiAocmV2b2tlZCkge1xuLVx0XHRcdFx0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpO1xuLVx0XHRcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIFJlLWFybSB0aGUgcmVnaXN0ZXJlZCBrcmVmIHJlZmVyZW5jZSBhbmQgdGhlXG4tXHRcdFx0XHQgKiBjb21wbGV0aW9uIHNvIHRoZSBwb3N0LXJldm9rZSBzdGF0ZSBtYXRjaGVzIHRoZVxuLVx0XHRcdFx0ICogcG9zdC1jcmVhdGlvbiBzdGF0ZS4gIEFuIHVuLXJldm9rZSBmb2xsb3dlZCBieSBhXG4tXHRcdFx0XHQgKiBuZXcgbWFwcGluZyBuZWVkcyB0aGUga3JlZiB0byBiZSBub24temVybyBiZWZvcmVcbi1cdFx0XHRcdCAqIGtyZWZfZ2V0KCksIGFuZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKVxuLVx0XHRcdFx0ICogZGVsZWdhdGVzIGl0cyBkcmFpbiBiYWNrIHRocm91Z2ggdGhpcyByZXZva2Vcbi1cdFx0XHRcdCAqIHBhdGggb24gYSBwb3NzaWJseS1hbHJlYWR5LXJldm9rZWQgZG1hLWJ1Zi5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0a3JlZl9pbml0KFx1MDAyNnByaXYtXHUwMDNla3JlZik7XG4tXHRcdFx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuLVx0XHRcdFx0cHJpdi1cdTAwM2VyZXZva2VkID0gZmFsc2U7XG4tXHRcdFx0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRcdHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhwcml2LCByZXZva2VkID9cbitcdFx0XHRcdFx0ICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOlxuK1x0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX09LKTtcbiBcdFx0ZnB1dChwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlKTtcbiBcdH1cbiB9XG5AQCAtNDA0LDMgKzcwNiwxMTcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0fVxuIFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gfVxuK1xuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcbitcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4rXHRzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgZGJfcmV2b2tlO1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghdmRldi1cdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVx1MDAzZXBjaV9vcHMtXHUwMDNlZ2V0X2RtYWJ1Zl9waHlzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuK1x0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuK1x0XHRcdFx0IHNpemVvZihkYl9yZXZva2UpKTtcbitcdGlmIChyZXQgIT0gMSlcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkYl9yZXZva2UsIGFyZywgc2l6ZW9mKGRiX3Jldm9rZSkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGRiX3Jldm9rZS5kbWFidWZfZmQpO1xuK1x0aWYgKElTX0VSUihkbWFidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuK1xuK1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuK1x0LypcbitcdCAqIFNhbml0eS1jaGVjayB0aGUgRE1BQlVGIGlzIHJlYWxseSBhIHZmaW9fcGNpX2RtYV9idWYgX2FuZF9cbitcdCAqIHJlbGF0ZXMgdG8gdGhlIFZGSU8gZGV2aWNlIGl0IHdhcyBwcm92aWRlZCB3aXRoLlxuK1x0ICpcbitcdCAqIElmIHRoZSBETUFCVUYgcmVsYXRlcyB0byB0aGlzIHZkZXYgdGhlbiBwcml2LVx1MDAzZXZkZXYgaXNcbitcdCAqIHN0YWJsZSBiZWNhdXNlIHRoaXMgb3BlbiBmZCBwcmV2ZW50cyBjbGVhbnVwLlxuK1x0ICpcbitcdCAqIElmIGl0IHJlbGF0ZXMgdG8gYSBkaWZmZXJlbnQgdmRldiwgcmVhZGluZyBwcml2LVx1MDAzZXZkZXYgbWlnaHRcbitcdCAqIHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgY2xlYW51cCBvbiB0aGF0IGRldmljZS4gIEJ1dCBpZiBzbyxcbitcdCAqIGl0IHBvaW50cyB0byBhIG5vbi1tYXRjaGluZyB2ZGV2IG9yIE5VTEwgYW5kIGlzIHVudXNhYmxlXG4rXHQgKiBlaXRoZXIgd2F5LlxuK1x0ICovXG4rXHRpZiAoZG1hYnVmLVx1MDAzZW9wcyAhPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzIHx8XG4rXHQgICAgUkVBRF9PTkNFKHByaXYtXHUwMDNldmRldikgIT0gdmRldikge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dF9wdXRfYnVmO1xuK1x0fVxuK1xuK1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3dyaXRlLCBcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKSB7XG4rXHRcdGlmIChwcml2LVx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfUEVSTV9SRVZPS0VEKSB7XG4rXHRcdFx0cmV0ID0gLUVCQURGRDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdixcbitcdFx0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCk7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fVxuK1x0fVxuK1xuK291dF9wdXRfYnVmOlxuK1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKFxuK1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgX191c2VyICphcmcsXG4rXHRzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIGRiX2F0dHI7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcbitcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXMpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXG4rXHRcdFx0XHQgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4rXHRcdFx0XHQgc2l6ZW9mKGRiX2F0dHIpKTtcbitcdGlmIChyZXQgIT0gMSlcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkYl9hdHRyLCBhcmcsIHNpemVvZihkYl9hdHRyKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfYXR0ci5kbWFidWZfZmQpO1xuK1x0aWYgKElTX0VSUihkbWFidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuK1xuK1x0LyogVmVyaWZ5IERNQUJVRjogc2VlIGNvbW1lbnRzIGluIHZmaW9fcGNpX2RtYV9idWZfcmV2b2tlKCkgKi9cbitcdHByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbitcdGlmIChkbWFidWYtXHUwMDNlb3BzICE9IFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHxcbitcdCAgICBSRUFEX09OQ0UocHJpdi1cdTAwM2V2ZGV2KSAhPSB2ZGV2KSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdGdvdG8gb3V0X3B1dF9idWY7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKGRiX2F0dHIubWVtYXR0cikge1xuK1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQzpcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0M6XG4rXHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VtZW1hdHRyLCBkYl9hdHRyLm1lbWF0dHIpO1xuK1x0XHRyZXQgPSAwO1xuK1x0XHRicmVhaztcbitcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IC1FTk9FTlQ7XG4rXHR9XG4rXG4rb3V0X3B1dF9idWY6XG4rXHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaCBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5pbmRleCBmY2E5ZDBkZmFjOTBmOC4uYjNjNzJkZjAwMmM0NDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbkBAIC0yMyw2ICsyMywyOCBAQCBzdHJ1Y3QgdmZpb19wY2lfaW9ldmVudGZkIHtcbiBcdGJvb2xcdFx0XHR0ZXN0X21lbTtcbiB9O1xuIFxuK2VudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMge1xuK1x0VkZJT19QQ0lfRE1BQlVGX09LID0gMCxcbitcdFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgPSAxLFxuK1x0VkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCA9IDIsXG4rfTtcbitcbitzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2O1xuK1x0c3RydWN0IGxpc3RfaGVhZCBkbWFidWZzX2VsbTtcbitcdHNpemVfdCBzaXplO1xuK1x0c3RydWN0IHBoeXNfdmVjICpwaHlzX3ZlYztcbitcdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyO1xuK1x0c3RydWN0IGZpbGUgKnZmaWxlO1xuK1x0dTMyIG5yX3JhbmdlcztcbitcdHN0cnVjdCBrcmVmIGtyZWY7XG4rXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuK1x0dW5zaWduZWQgbG9uZyB2bWFfcGdvZmZfYWRqdXN0O1xuK1x0dTMyIG1lbWF0dHI7XG4rXHRlbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHN0YXR1cztcbit9O1xuK1xuIGJvb2wgdmZpb19wY2lfaW50eF9tYXNrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9pbnR4X3VubWFzayhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIFxuQEAgLTY4LDcgKzkwLDggQEAgdm9pZCB2ZmlvX2NvbmZpZ19mcmVlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gaW50IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0ICAgICBwY2lfcG93ZXJfdCBzdGF0ZSk7XG4gXG4tdm9pZCB2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbit2b2lkIHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbit2b2lkIHZmaW9fcGNpX3VucmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB1MTYgdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHRcdHUxNiBjbWQpO1xuQEAgLTExNCwxMiArMTM3LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRyZXR1cm4gKHBkZXYtXHUwMDNlY2xhc3MgXHUwMDNlXHUwMDNlIDgpID09IFBDSV9DTEFTU19ESVNQTEFZX1ZHQTtcbiB9XG4gXG4raW50IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnZwZG1hYnVmLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbitcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsXG4rXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3Bmbik7XG4raW50IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCAgIHU2NCBwaHlzX3N0YXJ0LCB1NjQgcmVxX2xlbixcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZXNfaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4rdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuK3ZvaWQgdmZpb19wY2lfc2V0X3ZtYV9vcHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuK1xuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4gaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxuIFx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuLXZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4tdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4rXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlIF9fdXNlciAqYXJnLFxuK1x0c2l6ZV90IGFyZ3N6KTtcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0cihcbitcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIF9fdXNlciAqYXJnLFxuK1x0c2l6ZV90IGFyZ3N6KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50XG4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG5AQCAtMTI4LDEyICsxNzAsMjEgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcbitcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4rXHRzaXplX3QgYXJnc3opXG4ge1xuK1x0cmV0dXJuIC1FTk9UVFk7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLVx0XHRcdFx0XHQgYm9vbCByZXZva2VkKVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXG4rXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBfX3VzZXIgKmFyZyxcbitcdHNpemVfdCBhcmdzeilcbiB7XG4rXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaFxuaW5kZXggODczZGUyMGEyMjQ3NTkuLjRjNDJhN2IyZWU4NTU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oXG5AQCAtNjcsOSArNjcsMjIgQEAgZW51bSBwY2lfcDJwZG1hX21hcF90eXBlIHtcbiBcdFBDSV9QMlBETUFfTUFQX1RIUlVfSE9TVF9CUklER0UsXG4gfTtcbiBcbi0jaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcbisjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFfQ09SRVxuIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbitcdFx0XHRcdFx0XHRcdCAgIGludCBiYXIpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfUENJX1AyUERNQVxuIGludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXG4gXHRcdHU2NCBvZmZzZXQpO1xuIGludCBwY2lfcDJwZG1hX2Rpc3RhbmNlX21hbnkoc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLCBzdHJ1Y3QgZGV2aWNlICoqY2xpZW50cyxcbkBAIC04OSwxNSArMTAyLDYgQEAgc3NpemVfdCBwY2lfcDJwZG1hX2VuYWJsZV9zaG93KGNoYXIgKnBhZ2UsIHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2LFxuIGVudW0gcGNpX3AycGRtYV9tYXBfdHlwZSBwY2lfcDJwZG1hX21hcF90eXBlKHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2UgKmRldik7XG4gI2Vsc2UgLyogQ09ORklHX1BDSV9QMlBETUEgKi9cbi1zdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLXtcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi19XG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi1cdFx0XHRcdFx0XHRcdCAgIGludCBiYXIpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLFxuIFx0XHRzaXplX3Qgc2l6ZSwgdTY0IG9mZnNldClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDJjNDQ1NDU4M2MxMTViLi41MzFhZWMzNTU2ODZiMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC01NTcsNyArNTU3LDcgQEAgc3RydWN0IHBjaV9kZXYge1xuIFx0dTE2XHRcdHBhc2lkX2NhcDtcdC8qIFBBU0lEIENhcGFiaWxpdHkgb2Zmc2V0ICovXG4gXHR1MTZcdFx0cGFzaWRfZmVhdHVyZXM7XG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXG4rI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BX0NPUkVcbiBcdHN0cnVjdCBwY2lfcDJwZG1hIF9fcmN1ICpwMnBkbWE7XG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19QQ0lfRE9FXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuaW5kZXggODkxNjViNzY5ZTVjMTYuLmEyZjU4NmU0ZmNkOGQ0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTI3LDYgKzEyNyw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XG4gXHRib29sXHRcdFx0bmVlZHNfcG1fcmVzdG9yZToxO1xuIFx0Ym9vbFx0XHRcdHBtX2ludHhfbWFza2VkOjE7XG4gXHRib29sXHRcdFx0cG1fcnVudGltZV9lbmdhZ2VkOjE7XG4rXHRib29sXHRcdFx0emFwX2JhcnNfb25fcmV2b2tlOjE7XG4gXHRzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlXHQqcGNpX3NhdmVkX3N0YXRlO1xuIFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVx0KnBtX3NhdmU7XG4gXHRpbnRcdFx0XHRpb2V2ZW50ZmRzX25yO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uYWIzMGI4OTM5OWQwMzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICsxNTM0LDUzIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuICAqL1xuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG4gXG4rLyoqXG4rICogR2l2ZW4gYSBkbWFfYnVmIGZkIHByZXZpb3VzbHkgY3JlYXRlZCBieVxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiwgYSBTRVQgb2YgdGhpcyBmZWF0dXJlIHJlcXVlc3RzIHRoYXRcbisgKiBhY2Nlc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgRE1BQlVGIGlzIGltbWVkaWF0ZWx5IGFuZCBwZXJtYW5lbnRseVxuKyAqIHJldm9rZWQuICBPbiBzdWNjZXNzZnVsIHJldHVybiwgdGhlIGJ1ZmZlciBpcyBub3QgYWNjZXNzaWJsZVxuKyAqIHRocm91Z2ggYW55IG1tYXAoKSBvciBkbWEtYnVmIGltcG9ydC4gIFRoZSBidWZmZXIgaXMgcGVybWFuZW50bHlcbisgKiBkaXNhYmxlZCwgYW5kIFZGSU8gcmVmdXNlcyBhbGwgbWFwLCBtbWFwLCBhdHRhY2gsIGV0Yy4gcmVxdWVzdHMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEgYW5kIGVycm5vIGlzIHNldCBvbiBmYWlsdXJlOlxuKyAqXG4rICogIEVCQURGLCBFSU5WQUw6IGRtYWJ1Zl9mZCBpcyBub3QgYSBETUFCVUYgZmQuXG4rICogIEVOT0RFVjogVGhlIGRtYWJ1Zl9mZCBkb2VzIG5vdCBtYXRjaCB0aGlzIFZGSU8gZGV2aWNlLlxuKyAqICBFQkFERkQ6IFRoZSBETUFCVUYgaXMgYWxyZWFkeSByZXZva2VkLlxuKyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1JFVk9LRSAxM1xuK1xuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlIHtcbitcdF9fczMyXHRkbWFidWZfZmQ7XG4rfTtcbitcbisvKipcbisgKiBHaXZlbiBhIGRtYV9idWYgZmQgcHJldmlvdXNseSBjcmVhdGVkIGJ5XG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBTRVQgdGhlIG1lbW9yeSBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlXG4rICogdXNlZCBieSBmdXR1cmUgbW1hcCgpcyBvZiB0aGF0IGZkLiAgU0VUdGluZyBhIG5ldyBhdHRyaWJ1dGUgZG9lc1xuKyAqIG5vdCBhZmZlY3QgZXhpc3RpbmcgVk1Bcy5cbisgKlxuKyAqIFRoZSBkZWZhdWx0LCBpZiBubyBwcmV2aW91cyBTRVQgaGFzIGJlZW4gcGVyZm9ybWVkLCBpcyBOQy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6XG4rICpcbisgKiAgRUJBREYsIEVJTlZBTDogZG1hYnVmX2ZkIGlzIG5vdCBhIERNQUJVRiBmZC5cbisgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuXG4rICogIEVOT0VOVDogVGhlIGdpdmVuIG1lbWF0dHIgaXMgbm90IHN1cHBvcnRlZC5cbisgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSIDE0XG4rXG4rLyogVmFsaWQgbWVtb3J5IGF0dHJpYnV0ZXMgZm9yIHRoZSBtZW1hdHRyIGZpZWxkICovXG4rZW51bSB2ZmlvX2RldmljZV9kbWFfYnVmX21lbWF0dHIge1xuK1x0VkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfTkMgPSAwLCAvKiBwZ3Byb3Rfbm9uY2FjaGVkICovXG4rXHRWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQyA9IDEsIC8qIHBncHJvdF93cml0ZWNvbWJpbmUgKi9cbit9O1xuK1xuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciB7XG4rXHRfX3MzMlx0ZG1hYnVmX2ZkO1xuK1x0X191MzJcdG1lbWF0dHI7XG4rfTtcbitcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjA2Ljc4ODgyMDA5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDI3NTA4MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IFZGSU8gUENJIERNQS1CVUYgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IFZGSU8gaW50ZXJhY3RzIHdpdGggUENJIFAyUERNQSBhbmQgRE1BLUJVRi4gIFRoZSBnb2FsLCBpdCBzZWVtcywgaXMgdG8gaW1wcm92ZSBETUEtQlVGIGludGVncmF0aW9uIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjb2RlIGlzIHRvdWNoZWQgYW5kIGlmIGl04oCZcyBpbnRlcmVzdGluZyBlbm91Z2ggZm9yIGZ1enppbmcuXG5cbkZpcnN0bHksIHRoZXkndmUgaW50cm9kdWNlZCBgQ09ORklHX1BDSV9QMlBETUFfQ09SRWAsIGFuZCBjcnVjaWFsbHksIHRoZXkndmUgc2hpZnRlZCBgQ09ORklHX1ZGSU9fUENJX0RNQUJVRmAgdG8gbm93ICpkZXBlbmQqIG9uIGBQQ0lfUDJQRE1BYCByYXRoZXIgdGhhbiByZXF1aXJpbmcgKmJvdGgqIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGltbWVkaWF0ZWx5IG5vdGUuIFRoZXkndmUgYWxzbyBhZGRlZCB0aGVzZSBuZXcgVkZJTyBmZWF0dXJlczogYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0VgIGFuZCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJgLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0aGVzZSBmZWF0dXJlcyBzdWdnZXN0IGVuaGFuY2VkIGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgb3ZlciBETUEtQlVGcy5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaGFwcGVuaW5nIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AsIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYCwgYW5kIGBkcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jYC4gV2Uga25vdyBWRklPIGl0c2VsZiBpcyByZWFjaGFibGUgYW5kIGlzIGFjdGl2ZWx5IGZ1enplZCBieSBzeXprYWxsZXIsIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjYW4gc2VlIHRoZSBuZXcgZmVhdHVyZXMgYXJlIGhhbmRsZWQgaW4gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAsIHdoaWNoIGFsc28gaGFuZGxlcyBvdGhlciBpb2N0bHMgdGhhdCBtYXkgYmUgZ29vZCB0byBmdXp6LlxuXG5Ob3csIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gV2UgbmVlZDogYENPTkZJR19WRklPX1BDSV9DT1JFYCwgYENPTkZJR19WRklPX1BDSWAsIGBDT05GSUdfUENJX1AyUERNQWAsIGFuZCBgQ09ORklHX1ZGSU9fUENJX0RNQUJVRmAuICBgVkZJT19QQ0lfRE1BQlVGYCBpcyBzcGVjaWZpY2FsbHkgY29uZGl0aW9uYWwgaW4gdGhlIEtjb25maWcgd2l0aDogYGRlZl9ib29sIHkgaWYgUENJX1AyUERNQWAsIGFuZCBkZXBlbmRlbnQgb24gYFZGSU9fUENJX0NPUkVgLCBzbyB0byBlbmFibGUgZXZlcnl0aGluZyBpdCBzZWVtcyB3ZSBuZWVkIGBWRklPX1BDSWAgYXMgdGhhdCBicmluZ3MgaW4gYFZGSU9fUENJX0NPUkVgIHdoaWNoIHRoZW4gcHVsbHMgaW4gYFZGSU9fUENJX0RNQUJVRmAuIGBQQ0lfUDJQRE1BYCwgaW4gdGhlIFBDSSBLY29uZmlnLCByZXF1aXJlcyBgWk9ORV9ERVZJQ0VgLiBTbywgdGhlIG1pbmltYWwgc2V0IGlzOiBgUENJX1AyUERNQWAsIGBaT05FX0RFVklDRWAsIGFuZCBgVkZJT19QQ0lgLlxuXG5UaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIHRoZSBuZXcgZmVhdHVyZSBoYW5kbGVyczogYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyYCwgYW5kIHRoZSBjaGFuZ2VzIHRvIGB2ZmlvX3BjaV9jb3JlX21tYXBgLiAgQWxzbywgdGhlIG5ldyBmdW5jdGlvbiBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYCBhbmQgc3VwcG9ydGluZyBmdW5jdGlvbnMgbGlrZSBgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbmAsIGB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0YCwgYHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZmAsIGFuZCBgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzYC4gIFRoZXnigJlyZSBhbGwgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAgYW5kIHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uIGFuZCBmdXp6aW5nLiBOb3csIGxldOKAmXMgZ2V0IHRoZSB0ZXN0aW5nIHRvb2xzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc5MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjE3LjIxNjMzMzA2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDkwMjU4ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTYyPWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE1ODAtXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE1ODE6XFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTU4Mi1cXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSOlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz02ODI9dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy03MTAtI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjcxMTppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlKFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNzEyLVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTU0PWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTE1Ni1cXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTU3OmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTU4LVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTY3PXZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTczLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjE3NDpzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTc1LVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDoyMC4zMDY2MDE3NTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk1Njk5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZGSU8gUENJIExhbmRzY2FwZTogRmVhdHVyZSBBY2Nlc3MgYW5kIERNQSBCdWZmZXIgTWFwcGluZyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IFZGSU8tUENJJ3MgaW5uZXIgd29ya2luZ3MuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgZmVhdHVyZXMgYXJlIGFjY2Vzc2VkLiBJdCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBtYW5hZ2luZyB0aG9zZSBmZWF0dXJlcyBpcyB0aGUgYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgaW50ZXJhY3Rpb24gZmxvdyBwcmVjaXNlbHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIHNldCBhbmQgZ2V0IHRoaW5ncyB1c2luZyB0aGlzIG1ldGhvZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGFyZSBhYmxlIHRvIGRvIHRoYXQsIGFuZCBpbiB3aGF0IHNpdHVhdGlvbnMuXG5cbkJleW9uZCB0aGF0LCBJJ20gdGhpbmtpbmcgYWJvdXQgRE1BIGJ1ZmZlciBtYXBwaW5nLCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byB0aGUgZmVhdHVyZXMgb2YgdGhlIGRldmljZSB0aGF0IHdlIGFyZSBhY2Nlc3NpbmcuIEknbSBnb2luZyB0byB0dXJuIG15IGF0dGVudGlvbiB0byBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYC4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGludGVyYWN0aW9uIG9mIHRoYXQgZnVuY3Rpb25hbGl0eS4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBpbnRvIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHN1cHBvcnQgdGhlIGludGVyYWN0aW9uLiBIb3cgZG9lcyB0aGlzIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBzZWN1cmUgRE1BIGFjY2VzcyB3aXRoaW4gVkZJTz8gQXJlIHRoZXJlIHNwZWNpZmljIHByb3RlY3Rpb25zIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdyBkbyB0aGV5IHdvcms/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgd29ya2luZyBhcyB0aGV5IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwODcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDoyMy41MDIzMDQxMjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NjI2MDkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9kbWFfYnVmX21tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0xND1zdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTMwLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MzE6c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zMi17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzMi1cXHQuYXR0YWNoID0gdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2gsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoxMzM6XFx0Lm1tYXAgPSB2ZmlvX3BjaV9kbWFfYnVmX21tYXAsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xMzQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjI2LjE2ODU3MTgyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzU2MjczMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5gKipcblxuT2theSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbmAuIEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBkdWcgaW50byB0aGUgRE1BIGJ1ZmZlciBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgVkZJTy1QQ0kgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MsIHBhcnRpY3VsYXJseSBpdHMgcm9sZSBpbiBsb2NhdGluZyB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGFzc29jaWF0ZWQgd2l0aCBhIERNQSBidWZmZXIuIFRoaXMgaXMga2V5IGZvciBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9mIG1lbW9yeSBtYXBwaW5nIG9yIERNQSBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIGRyaXZlci4gS25vd2luZyBpdHMgYmVoYXZpb3Igd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IFZGSU8gaW50ZXJhY3RzIHdpdGggRE1BIGFuZCBwYWdlIGFsbG9jYXRpb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGUgYXJndW1lbnRzLCB0aGUgcmV0dXJuIHZhbHVlcywgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGFjY29tcGxpc2guIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkIHdpdGhpbiB0aGUgd2lkZXIgVkZJTy1QQ0kgZnJhbWV3b3JrLiBXaGF0IG90aGVyIFZGSU8gZnVuY3Rpb25zIGRvZXMgaXQgZGVwZW5kIG9uIG9yIGNvb3JkaW5hdGUgd2l0aD8gVGltZSB0byBicmVhayBvdXQgdGhlIGNvZGUgYW5kIHRoZSBjb21taXQgbG9ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDoyOS40MDQyMDQzNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNDQwNzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE3Mzg9c3RhdGljIHZtX2ZhdWx0X3QgdmZpb19wY2lfbW1hcF9odWdlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTgyMC1cXHRcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9PSykge1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE4MjE6XFx0XFx0XFx0aW50IHByZXMgPSB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHByaXYsIHZtYSxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODIyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdm1mLVxcdTAwM2VhZGRyZXNzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0xMzA9c3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xMzktXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoxNDA6aW50IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xNDEtXFx0XFx0XFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTUyMj1pbnQgdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNTU1LVxcdCAqXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzo1NTY6XFx0ICogdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbigpIHJldmVyc2VzIHRoaXMgb2Zmc2V0IHVzaW5nXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy01NTctXFx0ICogdm1hX3Bnb2ZmX2FkanVzdCwgc28gdGhhdCB1bHRpbWF0ZWx5IGEgZmF1bHQncyBvZmZzZXQgZnJvbVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTM1PXN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMzktXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTQwOmludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICp2cGRtYWJ1ZixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xNDEtXFx0XFx0XFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjMxLjcyODYyMTYzNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTM0OTg2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbWluZCdzIGF1dG9tYXRpY2FsbHkganVtcGluZyB0byBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAuIFRoaXMgZnVuY3Rpb24sIG1vcmUgdGhhbiBsaWtlbHksIGlzIHRoZSBsaW5jaHBpbiB3ZSdyZSBnb2luZyB0byBiZSBmb2N1c2luZyBvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgdGhlIHBsYWNlIHdoZXJlIHdlIHRyYW5zaXRpb24gZGF0YSwgYW5kIGl0IGlzIGdvaW5nIHRvIHNldCB1cCB3aGVyZSBhbGwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSB3aWxsIGJlIGhhbmRsZWQuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiBETUEtQlVGIGV4cG9ydCB3aXRoaW4gdGhlIFZGSU8gY29udGV4dC4gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucz8gTWVtb3J5IG1hcHBpbmdzLCBhY2Nlc3MgcGVybWlzc2lvbnMsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIOKAkyB0aG9zZSBhcmUgdGhlIHR5cGVzIG9mIHRoaW5ncyBJJ20gbWVudGFsbHkgcGFyc2luZyBhcyBJIGdvLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGF0LCBhbmQgaG93IGl0IGlzIGFsbCBwbHVtYmVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHRoaXMgZXhwb3J0LiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZXkndmUgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3MjAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDozNC42NDIxMjQxODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTU0Nzg1ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfZG1hYnVmX2V4cG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTE0MD1pbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjg0LSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6Mjg1OnN0YXRpYyBpbnQgdmZpb19wY2lfZG1hYnVmX2V4cG9ydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yODYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz00MzM9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy00OTgtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzo0OTk6XFx0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBnZXRfZG1hX2J1Zi5vcGVuX2ZsYWdzKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTUwMC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz01MjI9aW50IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTU3NC1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjU3NTpcXHRyZXQgPSB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0KHZkZXYsIHByaXYsIE9fQ0xPRVhFQyB8IE9fUkRXUik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy01NzYtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDA6MjA6MzYuOTk3NjE1MTg1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzM2MTg1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGB2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXNgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBtYW5hZ2luZyBETUEgYnVmZmVyIHN0YXR1cyB3aXRoaW4gdGhlIFZGSU8tUENJIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBETUEgYnVmZmVyIGl0c2VsZiwgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0IGhhcyBmb3IgdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eTsgaG93IGlzIHRoaXMgaGFuZGxlZCBoZXJlPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IGJhcnJpZXJzLCBjYWNoZSBjb2hlcmVuY3ksIGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMg4oCTIHRoaXMgYXJlYSBpcyBub3RvcmlvdXNseSB0cmlja3kuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBzZXR0aW5nIGZsYWdzIG9yIHVwZGF0aW5nIHN0YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9idXN0LCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkIHRvIHRoZSB2YXJpb3VzIHBvc3NpYmxlIGd1ZXN0IE9TIGJlaGF2aW9ycyBhbmQgcG90ZW50aWFsIG1hbGljaW91cyBhdHRlbXB0cyBhdCBhY2Nlc3NpbmcgZGF0YSB0aGV5IHNob3VsZG4ndC4gTGV0J3Mgc2VlIGhvdyB0aGV5IGRlYWwgd2l0aCB0aGUgYnVmZmVyIHN0YXR1cyBhbmQgaG93IHRoZXkgZG8gZXJyb3IgaGFuZGxpbmcsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDo0MC4xNzEyMzczMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDE5MzkwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NTIyPWludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy02MDgtLyogU2V0IHRoZSBETUFCVUYncyByZXZvY2F0aW9uIHN0YXR1cyAoT0sgb3IgdGVtcG9yYXJpbHkvcGVybWFuZW50bHkgcmV2b2tlZCkgKi9cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjYwOTpzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMoc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy02MTAtXFx0XFx0XFx0XFx0XFx0ZW51bSB2ZmlvX3BjaV9kbWFfYnVmX3N0YXR1cyBuZXdfc3RhdHVzKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz02NjE9dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTY3NC1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjY3NTpcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdiwgcmV2b2tlZCA/XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy02NzYtXFx0XFx0XFx0XFx0XFx0ICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz03MTE9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNzU5LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzo3NjA6XFx0XFx0XFx0dmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzKHByaXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy03NjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDo0Mi44NzMxODIxODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUxNDk4MTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWRklPIFBDSSBETUEtQlVGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIFZGSU8gUENJIERNQS1CVUYgc3VwcG9ydC4gV2UncmUgdGFsa2luZyBuZXcgaW9jdGxzIGFuZCBtbWFwIGhhbmRsaW5nIGhlcmUsIHdoaWNoIG1lYW5zIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSB0byBhZGQgdGhhdCB0byB0aGUgZnV6emluZyBxdWV1ZS5cblxuTm93LCBmb3IgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHJgLCBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYCwgYHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5gLCBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAsIGB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWZgLCBhbmQgYHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSBgVkZJT19QQ0lgLCBgUENJX1AyUERNQWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBIbW0sIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBaT05FX0RFVklDRWAgaXMgaW5kZWVkIGEgaGFyZCByZXF1aXJlbWVudC4gQWgsIHllcywgYFBDSV9QMlBETUFgIGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYCwgc28gd2UgYWJzb2x1dGVseSBuZWVkIHRvIGhhdmUgdGhhdCBlbmFibGVkLiBHb29kLCBkb3VibGUtY2hlY2tlZC5cblxuTm93LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGp1c3QgYFZGSU9fUENJYCBpcyBzdWZmaWNpZW50LCBvciBpZiBgVkZJT19QQ0lfQ09SRWAgaXMgYWxzbyBuZWNlc3NhcnkuIEV4Y2VsbGVudCwgYFZGSU9fUENJYCBzZWxlY3RzIGBWRklPX1BDSV9DT1JFYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gV2UncmUgZ29vZCB3aXRoIGp1c3QgZW5hYmxpbmcgYFZGSU9fUENJYC5cblxuTGV0J3Mgc2VlLCB3aGF0IGFib3V0IGBWRklPX1BDSV9ETUFCVUZgPyBJcyB0aGF0IGEgc2VwYXJhdGUgY29uZmlnIG9wdGlvbj8gWWVzLCBpdCBpcyEgV2FpdC4uLiBpdCdzIGEgYGRlZl9ib29sIHkgaWYgUENJX1AyUERNQWAuIFNvLCBpdCdzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiBgUENJX1AyUERNQWAgaXMgZW5hYmxlZC4gT2theSwgdGhhdCdzIGdvb2QgdG8ga25vdy4gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBlbmFibGluZyB0aGF0IGV4cGxpY2l0bHkuXG5cbkxldCBtZSBzZWUsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbj8gYFBDSV9QMlBETUFfQ09SRWAgbG9va3MgcmVsZXZhbnQsIGJ1dCBpdCdzIHNlbGVjdGVkIGJ5IGJvdGggYFBDSV9QMlBETUFgIGFuZCBgVkZJT19QQ0lfQ09SRWAuIFNpbmNlIHdlIGFscmVhZHkga25vdyB0aGF0IHRoZXNlIGNvbmZpZ3MgYXJlIGFscmVhZHkgYWN0aXZhdGVkLCBpdCdzIGVuYWJsZWQgYXV0b21hdGljYWxseS4gR29vZC5cblxuQWxyaWdodCwgd2l0aCBhbGwgdGhhdCBvdXQgb2YgdGhlIHdheSwgSSB0aGluayBJJ20gcmVhZHkgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZG9jdW1lbnQgdGhlc2UgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzQxLCJPdXRwdXRUb2tlbnMiOjI0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDo1MC4zODgxNjYzMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgyOTIxNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0clwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9tbWFwXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFidWZfZXhwb3J0XCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWZcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGSU8gZmVhdHVyZXMgKFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0UgYW5kIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSKSBhbmQgbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxpbmcgdG8gdXNlIERNQUJVRi1iYWNrZWQgbW1hcHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0clwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9tbWFwXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFidWZfZXhwb3J0XCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWZcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGSU8gZmVhdHVyZXMgKFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0UgYW5kIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSKSBhbmQgbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxpbmcgdG8gdXNlIERNQUJVRi1iYWNrZWQgbW1hcHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9sl9q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 00:07:40 +0000 UTC FinishedAt: 2026-07-02 00:20:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO_PCI", "PCI_P2PDMA", "ZONE_DEVICE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "8cd9520d35a6c38db6567e97dd93b1f11f185dc6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "VFIO_PCI", "PCI_P2PDMA", "ZONE_DEVICE" ], "series_id": "be016584-b668-49a5-9a4e-17d653b9f658" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "vfio_pci_core_feature_dma_buf_revoke", "vfio_pci_core_feature_dma_buf_memattr", "vfio_pci_dma_buf_mmap", "vfio_pci_dma_buf_find_pfn", "vfio_pci_dmabuf_export", "vfio_pci_core_mmap_prep_dmabuf", "vfio_pci_dma_buf_set_status" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1ZGSU9fUENJJiMzNDssCiAgICAmIzM0O1BDSV9QMlBETUEmIzM0OywKICAgICYjMzQ7Wk9ORV9ERVZJQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX21tYXAmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbiYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFidWZfZXhwb3J0JiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZiYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZJTyBmZWF0dXJlcyAoVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1JFVk9LRSBhbmQgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFIpIGFuZCBtb2RpZmllcyB0aGUgbW1hcCBoYW5kbGluZyB0byB1c2UgRE1BQlVGLWJhY2tlZCBtbWFwcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZTMwNzk3N2I2MTQ5MzU1MDg5YmEwODMxMzNhZjIxMzdkZDE0NWIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMDoyMDowNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXG5pbmRleCBjOGQ0YjkxM2YyNmMxMi4uNzEzODYxYWY0NDg0NmEgMTAwNjQ0XG4tLS0gYS9NQUlOVEFJTkVSU1xuJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlNcbkBAIC0yMDYyNiw3ICYjNDM7MjA2MjYsNyBAQCBCOlx0aHR0cHM6Ly9idWd6aWxsYS5rZXJuZWwub3JnXG4gQzpcdGlyYzovL2lyYy5vZnRjLm5ldC9saW51eC1wY2lcbiBUOlx0Z2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9wY2kvcGNpLmdpdFxuIEY6XHREb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvcGNpL3AycGRtYS5yc3Rcbi1GOlx0ZHJpdmVycy9wY2kvcDJwZG1hLmNcbiYjNDM7RjpcdGRyaXZlcnMvcGNpL3AycGRtYSpcbiBGOlx0aW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcbiBcbiBQQ0kgUE9XRVIgQ09OVFJPTFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5pbmRleCAzM2M4ODQzMmI3Mjg3NS4uNTlkNzBiYzg0Y2M5YWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5AQCAtMjA2LDExICYjNDM7MjA2LDcgQEAgY29uZmlnIFBDSUVfVFBIXG4gY29uZmlnIFBDSV9QMlBETUFcbiBcdGJvb2wgXCYjMzQ7UENJIHBlZXItdG8tcGVlciB0cmFuc2ZlciBzdXBwb3J0XCYjMzQ7XG4gXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4tXHQjXG4tXHQjIFRoZSBuZWVkIGZvciB0aGUgc2NhdHRlcmxpc3QgRE1BIGJ1cyBhZGRyZXNzIGZsYWcgbWVhbnMgUENJIFAyUERNQVxuLVx0IyByZXF1aXJlcyA2NGJpdFxuLVx0I1xuLVx0ZGVwZW5kcyBvbiA2NEJJVFxuJiM0MztcdHNlbGVjdCBQQ0lfUDJQRE1BX0NPUkVcbiBcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxuIFx0c2VsZWN0IE5FRURfU0dfRE1BX0ZMQUdTXG4gXHRoZWxwXG5AQCAtMjI2LDYgJiM0MzsyMjIsMTAgQEAgY29uZmlnIFBDSV9QMlBETUFcbiBcbiBcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbiYjNDM7Y29uZmlnIFBDSV9QMlBETUFfQ09SRVxuJiM0MztcdGRlZmF1bHQgblxuJiM0MztcdGJvb2xcbiYjNDM7XG4gY29uZmlnIFBDSV9MQUJFTFxuIFx0ZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpXG4gXHRzZWxlY3QgTkxTXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxuaW5kZXggNDFlYmMzYjlhNTE4MjQuLjBiMzI1NzJkNTdhMTU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlXG5AQCAtMzAsNiAmIzQzOzMwLDcgQEAgb2JqLSQoQ09ORklHX1BDSV9TWVNDQUxMKVx0JiM0Mzs9IHN5c2NhbGwub1xuIG9iai0kKENPTkZJR19QQ0lfU1RVQilcdFx0JiM0Mzs9IHBjaS1zdHViLm9cbiBvYmotJChDT05GSUdfUENJX1BGX1NUVUIpXHQmIzQzOz0gcGNpLXBmLXN0dWIub1xuIG9iai0kKENPTkZJR19QQ0lfRUNBTSlcdFx0JiM0Mzs9IGVjYW0ub1xuJiM0MztvYmotJChDT05GSUdfUENJX1AyUERNQV9DT1JFKVx0JiM0Mzs9IHAycGRtYV9jb3JlLm9cbiBvYmotJChDT05GSUdfUENJX1AyUERNQSlcdCYjNDM7PSBwMnBkbWEub1xuIG9iai0kKENPTkZJR19YRU5fUENJREVWX0ZST05URU5EKSAmIzQzOz0geGVuLXBjaWZyb250Lm9cbiBvYmotJChDT05GSUdfVkdBX0FSQilcdFx0JiM0Mzs9IHZnYWFyYi5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmMgYi9kcml2ZXJzL3BjaS9wMnBkbWEuY1xuaW5kZXggN2M4OTg1NDJhZjhkNWUuLjUwYjFhN2RhZjU1Y2M0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvcDJwZG1hLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jXG5AQCAtMjEsMTIgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2VxX2J1Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbiBcbi1zdHJ1Y3QgcGNpX3AycGRtYSB7XG4tXHRzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2w7XG4tXHRib29sIHAycG1lbV9wdWJsaXNoZWQ7XG4tXHRzdHJ1Y3QgeGFycmF5IG1hcF90eXBlcztcbi1cdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgbWVtW1BDSV9TVERfTlVNX0JBUlNdO1xuLX07XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3AycGRtYS5oXCYjMzQ7XG4gXG4gc3RydWN0IHBjaV9wMnBkbWFfcGFnZW1hcCB7XG4gXHRzdHJ1Y3QgZGV2X3BhZ2VtYXAgcGdtYXA7XG5AQCAtMjI2LDExMCAmIzQzOzIyMSwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBwMnBkbWFfcGdtYXBfb3BzID0ge1xuIFx0LmZvbGlvX2ZyZWUgPSBwMnBkbWFfZm9saW9fZnJlZSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwZG1hKVxuIHtcbi1cdHN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGF0YTtcbi1cdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG4tXG4tXHRwMnBkbWEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXHUwMDNlcDJwZG1hLCAxKTtcbi1cdGlmICghcDJwZG1hKVxuLVx0XHRyZXR1cm47XG4tXG4tXHQvKiBGbHVzaCBhbmQgZGlzYWJsZSBwY2lfYWxsb2NfcDJwX21lbSgpICovXG4tXHRwZGV2LVx1MDAzZXAycGRtYSA9IE5VTEw7XG4tXHRpZiAocDJwZG1hLVx1MDAzZXBvb2wpXG4tXHRcdHN5bmNocm9uaXplX3JjdSgpO1xuLVx0eGFfZGVzdHJveShcdTAwMjZwMnBkbWEtXHUwMDNlbWFwX3R5cGVzKTtcbi1cbiBcdGlmICghcDJwZG1hLVx1MDAzZXBvb2wpXG4gXHRcdHJldHVybjtcbiBcbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiBcdGdlbl9wb29sX2Rlc3Ryb3kocDJwZG1hLVx1MDAzZXBvb2wpO1xuIFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFx1MDAyNnBkZXYtXHUwMDNlZGV2LmtvYmosIFx1MDAyNnAycG1lbV9ncm91cCk7XG4gfVxuIFxuLS8qKlxuLSAqIHBjaW1fcDJwZG1hX2luaXQgLSBJbml0aWFsaXNlIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXJzXG4tICogQHBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGVuYWJsZSBQMlBETUEgZm9yXG4tICpcbi0gKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBwZWVyLXRvLXBlZXIgRE1BIGluZnJhc3RydWN0dXJlXG4tICogZm9yIGEgUENJIGRldmljZS4gSXQgYWxsb2NhdGVzIGFuZCBzZXRzIHVwIHRoZSBuZWNlc3NhcnkgZGF0YVxuLSAqIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBQMlBETUEgb3BlcmF0aW9ucywgaW5jbHVkaW5nIG1hcHBpbmcgdHlwZVxuLSAqIHRyYWNraW5nLlxuLSAqL1xuLWludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLXtcbi1cdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XG4tXHRpbnQgaSwgcmV0O1xuLVxuLVx0cDJwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LVx1MDAzZXAycGRtYSwgMSk7XG4tXHRpZiAocDJwKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHAycCA9IGRldm1fa3phbGxvYyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgc2l6ZW9mKCpwMnApLCBHRlBfS0VSTkVMKTtcbi1cdGlmICghcDJwKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHhhX2luaXQoXHUwMDI2cDJwLVx1MDAzZW1hcF90eXBlcyk7XG4tXHQvKlxuLVx0ICogSXRlcmF0ZSBvdmVyIGFsbCBzdGFuZGFyZCBQQ0kgQkFScyBhbmQgcmVjb3JkIG9ubHkgdGhvc2UgdGhhdFxuLVx0ICogY29ycmVzcG9uZCB0byBNTUlPIHJlZ2lvbnMuIFNraXAgbm9uLW1lbW9yeSByZXNvdXJjZXMgKGUuZy4gSS9PXG4tXHQgKiBwb3J0IEJBUnMpIHNpbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgZm9yIHBlZXItdG8tcGVlciAoUDJQKVxuLVx0ICogdHJhbnNhY3Rpb25zLlxuLVx0ICovXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBQQ0lfU1REX05VTV9CQVJTOyBpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0cDJwLVx1MDAzZW1lbVtpXS5vd25lciA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuLVx0XHRwMnAtXHUwMDNlbWVtW2ldLmJ1c19vZmZzZXQgPVxuLVx0XHRcdHBjaV9idXNfYWRkcmVzcyhwZGV2LCBpKSAtIHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBpKTtcbi1cdH1cbi1cbi1cdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3AycDtcbi1cbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihwZGV2LVx1MDAzZXAycGRtYSwgcDJwKTtcbi1cdHJldHVybiAwO1xuLVxuLW91dF9wMnA6XG4tXHRkZXZtX2tmcmVlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwMnApO1xuLVx0cmV0dXJuIHJldDtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfaW5pdCk7XG4tXG4tLyoqXG4tICogcGNpbV9wMnBkbWFfcHJvdmlkZXIgLSBHZXQgcGVlci10by1wZWVyIERNQSBwcm92aWRlclxuLSAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvclxuLSAqIEBiYXI6IEJBUiBpbmRleCB0byBnZXQgcHJvdmlkZXJcbi0gKlxuLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyIGZvciBhIFBDSSBkZXZpY2UuIFRoZSBsaWZldGltZVxuLSAqIG9mIHRoZSBwcm92aWRlciAoYW5kIG9mIGNvdXJzZSB0aGUgTU1JTykgaXMgYm91bmQgdG8gdGhlIGxpZmV0aW1lIG9mIHRoZVxuLSAqIGRyaXZlci4gQSBkcml2ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlXG4tICogcHJvdmlkZXIsIGFuZCBhbnkgRE1BIG1hcHBpbmdzIGNyZWF0ZWQgZm9yIGFueSBNTUlPLCBhcmUgYWxsIGNsZWFuZWQgdXBcbi0gKiBiZWZvcmUgdGhlIGRyaXZlciByZW1vdmUoKSBjb21wbGV0ZXMuXG4tICpcbi0gKiBTaW5jZSBQMlAgaXMgYWxtb3N0IGFsd2F5cyBzaGFyZWQgd2l0aCBhIHNlY29uZCBkcml2ZXIgdGhpcyBtZWFucyBzb21lIHN5c3RlbVxuLSAqIHRvIG5vdGlmeSwgaW52YWxpZGF0ZSBhbmQgcmV2b2tlIHRoZSBNTUlPJiMzOTtzIERNQSBtdXN0IGJlIGluIHBsYWNlIHRvIHVzZSB0aGlzXG4tICogZnVuY3Rpb24uIEZvciBleGFtcGxlIGEgcmV2b2tlIGNhbiBiZSBidWlsdCB1c2luZyBETUFCVUYuXG4tICovXG4tc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpXG4te1xuLVx0c3RydWN0IHBjaV9wMnBkbWEgKnAycDtcbi1cbi1cdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cDJwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LVx1MDAzZXAycGRtYSwgMSk7XG4tXHRpZiAoV0FSTl9PTighcDJwKSlcbi1cdFx0LyogU29tZW9uZSBmb3Jnb3QgdG8gY2FsbCB0byBwY2ltX3AycGRtYV9pbml0KCkgYmVmb3JlICovXG4tXHRcdHJldHVybiBOVUxMO1xuLVxuLVx0cmV0dXJuIFx1MDAyNnAycC1cdTAwM2VtZW1bYmFyXTtcbi19XG4tRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfcHJvdmlkZXIpO1xuLVxuIHN0YXRpYyBpbnQgcGNpX3AycGRtYV9zZXR1cF9wb29sKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG5AQCAtOTMyLDggJiM0Mzs4MzMsOCBAQCB2b2lkICpwY2lfYWxsb2NfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSlcbiBcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG4gXG4gXHQvKlxuLVx0ICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2UoKSB0b1xuLVx0ICogZW5zdXJlIHBkZXYtXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4mIzQzO1x0ICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbCgpXG4mIzQzO1x0ICogdG8gZW5zdXJlIHBkZXYtXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4gXHQgKiByZWFkLWxvY2suXG4gXHQgKi9cbiBcdHJjdV9yZWFkX2xvY2soKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wMnBkbWEuaCBiL2RyaXZlcnMvcGNpL3AycGRtYS5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjk0NjM4MzgwOTk4MTQ5XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wMnBkbWEuaFxuQEAgLTAsMCAmIzQzOzEsMjkgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cbiYjNDM7LypcbiYjNDM7ICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydC5cbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9QQ0lfUDJQRE1BX0hcbiYjNDM7I2RlZmluZSBfUENJX1AyUERNQV9IXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9nZW5hbGxvYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IHBjaV9wMnBkbWEge1xuJiM0MztcdHN0cnVjdCBnZW5fcG9vbCAqcG9vbDtcbiYjNDM7XHRib29sIHAycG1lbV9wdWJsaXNoZWQ7XG4mIzQzO1x0c3RydWN0IHhhcnJheSBtYXBfdHlwZXM7XG4mIzQzO1x0c3RydWN0IHAycGRtYV9wcm92aWRlciBtZW1bUENJX1NURF9OVU1fQkFSU107XG4mIzQzO307XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcbiYjNDM7dm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSk7XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiYjNDM7XHRcdFx0XHRcdCAgIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzOyNlbmRpZlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3AycGRtYV9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJiMjEzOGJmMmJjN2I3XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jXG5AQCAtMCwwICYjNDM7MSwxMTggQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LypcbiYjNDM7ICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydCBjb3JlLCBwcm92aWRpbmcgYSBiYXJlLWJvbmVzXG4mIzQzOyAqIHBjaW1fcDJwZG1hX3Byb3ZpZGVyKCkgaW50ZXJmYWNlIHRvIGRyaXZlcnMgZXZlbiBpZiBmdWxsIFAyUERNQVxuJiM0MzsgKiBpc24mIzM5O3QgcHJlc2VudC4gIFRoZSBmdWxsIFAyUERNQSBmZWF0dXJlIGlzIGluIHAycGRtYS5jIChzZWVcbiYjNDM7ICogQ09ORklHX1BDSV9QMlBETUEpLlxuJiM0MzsgKlxuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgTG9nYW4gR3VudGhvcnBlXG4mIzQzOyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBNaWNyb3NlbWkgQ29ycG9yYXRpb25cbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE3LCBDaHJpc3RvcGggSGVsbHdpZ1xuJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEVpZGV0aWNvbSBJbmMuXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2RlZmluZSBwcl9mbXQoZm10KSBcJiMzNDtwY2ktcDJwZG1hOiBcJiMzNDsgZm10XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZ2VuYWxsb2MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tZW1yZW1hcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC94YXJyYXkuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7cDJwZG1hLmhcJiMzNDtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZSh2b2lkICpkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhO1xuJiM0MztcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG4mIzQzO1xuJiM0MztcdHAycGRtYSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuJiM0MztcdGlmICghcDJwZG1hKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHQvKiBGbHVzaCBhbmQgZGlzYWJsZSBwY2lfYWxsb2NfcDJwX21lbSgpICovXG4mIzQzO1x0cGRldi1cdTAwM2VwMnBkbWEgPSBOVUxMO1xuJiM0MztcdHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKHBkZXYsIHAycGRtYSk7XG4mIzQzO1x0eGFfZGVzdHJveShcdTAwMjZwMnBkbWEtXHUwMDNlbWFwX3R5cGVzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBjaW1fcDJwZG1hX2luaXQgLSBJbml0aWFsaXNlIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXJzXG4mIzQzOyAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBwZWVyLXRvLXBlZXIgRE1BIGluZnJhc3RydWN0dXJlXG4mIzQzOyAqIGZvciBhIFBDSSBkZXZpY2UuIEl0IGFsbG9jYXRlcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGFcbiYjNDM7ICogc3RydWN0dXJlcyB0byBzdXBwb3J0IFAyUERNQSBvcGVyYXRpb25zLCBpbmNsdWRpbmcgbWFwcGluZyB0eXBlXG4mIzQzOyAqIHRyYWNraW5nLlxuJiM0MzsgKi9cbiYjNDM7aW50IHBjaW1fcDJwZG1hX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwO1xuJiM0MztcdGludCBpLCByZXQ7XG4mIzQzO1xuJiM0MztcdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuJiM0MztcdGlmIChwMnApXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cDJwID0gZGV2bV9remFsbG9jKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBzaXplb2YoKnAycCksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghcDJwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHhhX2luaXQoXHUwMDI2cDJwLVx1MDAzZW1hcF90eXBlcyk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJdGVyYXRlIG92ZXIgYWxsIHN0YW5kYXJkIFBDSSBCQVJzIGFuZCByZWNvcmQgb25seSB0aG9zZSB0aGF0XG4mIzQzO1x0ICogY29ycmVzcG9uZCB0byBNTUlPIHJlZ2lvbnMuIFNraXAgbm9uLW1lbW9yeSByZXNvdXJjZXMgKGUuZy4gSS9PXG4mIzQzO1x0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcbiYjNDM7XHQgKiB0cmFuc2FjdGlvbnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRwMnAtXHUwMDNlbWVtW2ldLm93bmVyID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4mIzQzO1x0XHRwMnAtXHUwMDNlbWVtW2ldLmJ1c19vZmZzZXQgPVxuJiM0MztcdFx0XHRwY2lfYnVzX2FkZHJlc3MocGRldiwgaSkgLSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHBjaV9wMnBkbWFfcmVsZWFzZSwgcGRldik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gb3V0X3AycDtcbiYjNDM7XG4mIzQzO1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXHUwMDNlcDJwZG1hLCBwMnApO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7b3V0X3AycDpcbiYjNDM7XHRkZXZtX2tmcmVlKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwMnApO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfaW5pdCk7XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogcGNpbV9wMnBkbWFfcHJvdmlkZXIgLSBHZXQgcGVlci10by1wZWVyIERNQSBwcm92aWRlclxuJiM0MzsgKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcbiYjNDM7ICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxuJiM0MzsgKlxuJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGdldHMgcGVlci10by1wZWVyIERNQSBwcm92aWRlciBmb3IgYSBQQ0kgZGV2aWNlLiBUaGUgbGlmZXRpbWVcbiYjNDM7ICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXG4mIzQzOyAqIGRyaXZlci4gQSBkcml2ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlXG4mIzQzOyAqIHByb3ZpZGVyLCBhbmQgYW55IERNQSBtYXBwaW5ncyBjcmVhdGVkIGZvciBhbnkgTU1JTywgYXJlIGFsbCBjbGVhbmVkIHVwXG4mIzQzOyAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cbiYjNDM7ICpcbiYjNDM7ICogU2luY2UgUDJQIGlzIGFsbW9zdCBhbHdheXMgc2hhcmVkIHdpdGggYSBzZWNvbmQgZHJpdmVyIHRoaXMgbWVhbnMgc29tZSBzeXN0ZW1cbiYjNDM7ICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8mIzM5O3MgRE1BIG11c3QgYmUgaW4gcGxhY2UgdG8gdXNlIHRoaXNcbiYjNDM7ICogZnVuY3Rpb24uIEZvciBleGFtcGxlIGEgcmV2b2tlIGNhbiBiZSBidWlsdCB1c2luZyBETUFCVUYuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XG4mIzQzO1xuJiM0MztcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpIFx1MDAyNiBJT1JFU09VUkNFX01FTSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0cDJwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LVx1MDAzZXAycGRtYSwgMSk7XG4mIzQzO1x0aWYgKFdBUk5fT04oIXAycCkpXG4mIzQzO1x0XHQvKiBTb21lb25lIGZvcmdvdCB0byBjYWxsIHRvIHBjaW1fcDJwZG1hX2luaXQoKSBiZWZvcmUgKi9cbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cDJwLVx1MDAzZW1lbVtiYXJdO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX3Byb3ZpZGVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcgYi9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdcbmluZGV4IDI5NmJmMDFlMTg1ZWNhLi42N2EyYWUxZmJjMDRiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXG5AQCAtNiw2ICYjNDM7Niw4IEBAIGNvbmZpZyBWRklPX1BDSV9DT1JFXG4gXHR0cmlzdGF0ZVxuIFx0c2VsZWN0IFZGSU9fVklSUUZEXG4gXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXG4mIzQzO1x0c2VsZWN0IFBDSV9QMlBETUFfQ09SRVxuJiM0MztcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuIFxuIGNvbmZpZyBWRklPX1BDSV9JTlRYXG4gXHRkZWZfYm9vbCB5IGlmICFTMzkwXG5AQCAtNTYsNyAmIzQzOzU4LDggQEAgY29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXG4gXHQgIFRvIGVuYWJsZSBzMzkweCBLVk0gdmZpby1wY2kgZXh0ZW5zaW9ucywgc2F5IFkuXG4gXG4gY29uZmlnIFZGSU9fUENJX0RNQUJVRlxuLVx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFx1MDAyNlx1MDAyNiBQQ0lfUDJQRE1BIFx1MDAyNlx1MDAyNiBETUFfU0hBUkVEX0JVRkZFUlxuJiM0MztcdGRlZl9ib29sIHkgaWYgUENJX1AyUERNQVxuJiM0MztcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxuIFxuIHNvdXJjZSBcJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL21seDUvS2NvbmZpZ1wmIzM0O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXG5pbmRleCA2MTM4ZjFiZjI0MWRmMC4uODgxNDUyZWE4OWJlMGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXG5AQCAtMSw4ICYjNDM7MSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gXG4tdmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcub1xuJiM0Mzt2ZmlvLXBjaS1jb3JlLXkgOj0gdmZpb19wY2lfY29yZS5vIHZmaW9fcGNpX2ludHJzLm8gdmZpb19wY2lfcmR3ci5vIHZmaW9fcGNpX2NvbmZpZy5vIHZmaW9fcGNpX2RtYWJ1Zi5vXG4gdmZpby1wY2ktY29yZS0kKENPTkZJR19WRklPX1BDSV9aREVWX0tWTSkgJiM0Mzs9IHZmaW9fcGNpX3pkZXYub1xuLXZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSAmIzQzOz0gdmZpb19wY2lfZG1hYnVmLm9cbiBvYmotJChDT05GSUdfVkZJT19QQ0lfQ09SRSkgJiM0Mzs9IHZmaW8tcGNpLWNvcmUub1xuIFxuIHZmaW8tcGNpLXkgOj0gdmZpb19wY2kub1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXG5pbmRleCBiYjEyMWY2MzViOWY3Zi4uZDlmMjZiMGNlOTkxZDkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXG5AQCAtMTcyNSw2ICYjNDM7MTcyNSwxNCBAQCBzdGF0aWMgaW50IGhpc2lfYWNjX3ZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfcHV0X3ZkZXY7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBoaXNpX2FjY192ZmlvX3BjaV9tbWFwKCkgY2FsbHMgZG93biB0b1xuJiM0MztcdCAqIHZmaW9fcGNpX2NvcmVfbW1hcCgpLCBzbyBCQVIgbWFwcGluZ3MgYXJlIHN0aWxsXG4mIzQzO1x0ICogRE1BQlVGLWJhY2tlZC4gIFRoZXkgZG9uJiMzOTt0IHJlcXVpcmUgYSB6YXAgb24gcmV2b2tlLCBzbyBvcHRcbiYjNDM7XHQgKiBvdXQ6XG4mIzQzO1x0ICovXG4mIzQzO1x0aGlzaV9hY2NfdmRldi1cdTAwM2Vjb3JlX2RldmljZS56YXBfYmFyc19vbl9yZXZva2UgPSBmYWxzZTtcbiYjNDM7XG4gXHRoaXNpX2FjY192ZmlvX2RlYnVnX2luaXQoaGlzaV9hY2NfdmRldik7XG4gXHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuaW5kZXggYTEwZWQ3MzNmMGUzYWYuLmJjNmNjYjJlMTM1YzNjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xuQEAgLTU5MCwxMiAmIzQzOzU5MCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fYmFzaWNfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0dmlydF9tZW0gPSAhIShsZTE2X3RvX2NwdSgqdmlydF9jbWQpIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuIFx0XHRuZXdfbWVtID0gISEobmV3X2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKTtcbiBcbi1cdFx0aWYgKCFuZXdfbWVtKSB7XG4tXHRcdFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuLVx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbi1cdFx0fSBlbHNlIHtcbiYjNDM7XHRcdGlmICghbmV3X21lbSlcbiYjNDM7XHRcdFx0dmZpb19wY2lfbG9ja19yZXZva2VfYmFycyh2ZGV2KTtcbiYjNDM7XHRcdGVsc2VcbiBcdFx0XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuLVx0XHR9XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZSB1c2VyIGlzIHdyaXRpbmcgbWVtL2lvIGVuYWJsZSAobmV3X21lbS9pbykgYW5kIHdlXG5AQCAtNjMxLDcgJiM0Mzs2MjksNyBAQCBzdGF0aWMgaW50IHZmaW9fYmFzaWNfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0KnZpcnRfY21kIHw9IGNwdV90b19sZTE2KG5ld19jbWQgXHUwMDI2IG1hc2spO1xuIFxuIFx0XHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuJiM0MztcdFx0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcdH1cbiBcbkBAIC03MTIsMTYgJiM0Mzs3MTAsMTQgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfY2FwX2Jhc2ljX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiBzdGF0aWMgdm9pZCB2ZmlvX2xvY2tfYW5kX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHRcdCAgcGNpX3Bvd2VyX3Qgc3RhdGUpXG4ge1xuLVx0aWYgKHN0YXRlIFx1MDAzZT0gUENJX0QzaG90KSB7XG4tXHRcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuLVx0fSBlbHNlIHtcbiYjNDM7XHRpZiAoc3RhdGUgXHUwMDNlPSBQQ0lfRDNob3QpXG4mIzQzO1x0XHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xuJiM0MztcdGVsc2VcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cdH1cbiBcbiBcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBzdGF0ZSk7XG4gXHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XG4gXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiB9XG4gXG5AQCAtOTA4LDExICYjNDM7OTA0LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19leHBfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0XHRcdFx0XHQgXHUwMDI2Y2FwKTtcbiBcbiBcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IChjYXAgXHUwMDI2IFBDSV9FWFBfREVWQ0FQX0ZMUikpIHtcbi1cdFx0XHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG4tXHRcdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuJiM0MztcdFx0XHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHRcdHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cdTAwM2VwZGV2KTtcbiBcdFx0XHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdFx0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcdFx0fVxuIFx0fVxuQEAgLTk5MywxMSAmIzQzOzk4OCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fYWZfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0XHRcdFx0XHRcdTAwMjZjYXApO1xuIFxuIFx0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgKGNhcCBcdTAwMjYgUENJX0FGX0NBUF9GTFIpIFx1MDAyNlx1MDAyNiAoY2FwIFx1MDAyNiBQQ0lfQUZfQ0FQX1RQKSkge1xuLVx0XHRcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbi1cdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XG4mIzQzO1x0XHRcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XG4gXHRcdFx0cGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LVx1MDAzZXBkZXYpO1xuIFx0XHRcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHRcdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdFx0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0XHR9XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuaW5kZXggMDUwZTc1NDI5NTJlZDEuLjAwNTljMTc2ZDYyNzA2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5AQCAtMTIsNiAmIzQzOzEyLDggQEBcbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9hcGVydHVyZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGV2aWNlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldmVudGZkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9maWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFx1MDAzZVxuQEAgLTMxOSw4ICYjNDM7MzIxLDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9ydW50aW1lX3BtX2VudHJ5KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdCAqIFRoZSB2ZGV2IHBvd2VyIHJlbGF0ZWQgZmxhZ3MgYXJlIHByb3RlY3RlZCB3aXRoICYjMzk7bWVtb3J5X2xvY2smIzM5O1xuIFx0ICogc2VtYXBob3JlLlxuIFx0ICovXG4tXHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG4tXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XG4mIzQzO1x0dmZpb19wY2lfbG9ja19yZXZva2VfYmFycyh2ZGV2KTtcbiBcbiBcdGlmICh2ZGV2LVx1MDAzZXBtX3J1bnRpbWVfZW5nYWdlZCkge1xuIFx0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbkBAIC00MDYsNyAmIzQzOzQwNyw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX3J1bnRpbWVfcG1fZXhpdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0X192ZmlvX3BjaV9ydW50aW1lX3BtX2V4aXQodmRldik7XG4gXHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbiYjNDM7XHRcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XG4gXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiB9XG4gXG5AQCAtMTI1Niw2ICYjNDM7MTI1Nyw4IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfc2V0X2lycXMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHZmaW9fcGNpX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4mIzQzO1xuIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0XHRcdFx0dm9pZCBfX3VzZXIgKmFyZylcbiB7XG5AQCAtMTI2NCw3ICYjNDM7MTI2Nyw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0aWYgKCF2ZGV2LVx1MDAzZXJlc2V0X3dvcmtzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbiYjNDM7XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgd2hpbGUgdGhlIHBvd2VyIHN0YXRlIGlzIG5vbi1EMC4gSWZcbkBAIC0xMjc0LDEzICYjNDM7MTI3NywxOCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdCAqIGhhdmUgTm9Tb2Z0UnN0LSwgdGhlIHJlc2V0IGZ1bmN0aW9uIGNhbiBjYXVzZSB0aGUgUENJIGNvbmZpZyBzcGFjZVxuIFx0ICogcmVzZXQgd2l0aG91dCByZXN0b3JpbmcgdGhlIG9yaWdpbmFsIHN0YXRlIChzYXZlZCBsb2NhbGx5IGluXG4gXHQgKiAmIzM5O3ZkZXYtXHUwMDNlcG1fc2F2ZSYjMzk7KS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSB6YXAgaXMgZG9uZSBhZnRlciBtYWtpbmcgdGhlIGRldmljZSBhY2Nlc3NpYmxlIGluIEQwLFxuJiM0MztcdCAqIGJlY2F1c2UgYSBETUFCVUYgaW1wb3J0ZXIgY291bGQgYWNjZXNzIHRoZSBkZXZpY2UgYXMgcGFydFxuJiM0MztcdCAqIG9mIGl0cyByZXZvY2F0aW9uIGNsZWFudXAuXG4gXHQgKi9cbiBcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBQQ0lfRDApO1xuIFxuLVx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuJiM0MztcdHZmaW9fcGNpX3Jldm9rZV9iYXJzKHZkZXYpO1xuJiM0MztcbiBcdHJldCA9IHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cdTAwM2VwZGV2KTtcbiBcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuJiM0MztcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFxuIFx0cmV0dXJuIHJldDtcbkBAIC0xNTY5LDYgJiM0MzsxNTc3LDEwIEBAIGludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV90b2tlbih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4gXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRjpcbiBcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0U6XG4mIzQzO1x0XHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcbiYjNDM7XHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSOlxuJiM0MztcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5AQCAtMTY0OCwyMCAmIzQzOzE2NjAsMzcgQEAgc3NpemVfdCB2ZmlvX3BjaV9jb3JlX3dyaXRlKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCBjb25zdCBjaGFyIF9fdXNlciAqYnVcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV93cml0ZSk7XG4gXG4tc3RhdGljIHZvaWQgdmZpb19wY2lfemFwX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3BjaV9yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4ge1xuLVx0c3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYgPSBcdTAwMjZ2ZGV2LVx1MDAzZXZkZXY7XG4tXHRsb2ZmX3Qgc3RhcnQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfQkFSMF9SRUdJT05fSU5ERVgpO1xuLVx0bG9mZl90IGVuZCA9IFZGSU9fUENJX0lOREVYX1RPX09GRlNFVChWRklPX1BDSV9ST01fUkVHSU9OX0lOREVYKTtcbi1cdGxvZmZfdCBsZW4gPSBlbmQgLSBzdGFydDtcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbiBcbi1cdHVubWFwX21hcHBpbmdfcmFuZ2UoY29yZV92ZGV2LVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZywgc3RhcnQsIGxlbiwgdHJ1ZSk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBhIGRyaXZlciBjb3VsZCBwb3NzaWJseSBjcmVhdGUgQkFSIG1hcHBpbmdzIGluIHRoZVxuJiM0MztcdCAqIHZkZXYmIzM5O3MgYWRkcmVzc19zcGFjZSwgZG8gYW4gYWRkaXRpb25hbCB6YXAgb24gcmV2b2tlLiAgU2VlXG4mIzQzO1x0ICogdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodmRldi1cdTAwM2V6YXBfYmFyc19vbl9yZXZva2UpIHtcbiYjNDM7XHRcdHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2ID0gXHUwMDI2dmRldi1cdTAwM2V2ZGV2O1xuJiM0MztcdFx0bG9mZl90IHN0YXJ0ID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYKTtcbiYjNDM7XHRcdGxvZmZfdCBlbmQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfUk9NX1JFR0lPTl9JTkRFWCk7XG4mIzQzO1x0XHRsb2ZmX3QgbGVuID0gZW5kIC0gc3RhcnQ7XG4mIzQzO1xuJiM0MztcdFx0dW5tYXBfbWFwcGluZ19yYW5nZShjb3JlX3ZkZXYtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nLFxuJiM0MztcdFx0XHRcdCAgICBzdGFydCwgbGVuLCB0cnVlKTtcbiYjNDM7XHR9XG4gfVxuIFxuLXZvaWQgdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiYjNDM7dm9pZCB2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiB7XG4gXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuLVx0dmZpb19wY2lfemFwX2JhcnModmRldik7XG4mIzQzO1x0dmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdmZpb19wY2lfdW5yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO3tcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4gfVxuIFxuIHUxNiB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNjgzLDE4ICYjNDM7MTcxMiw2IEBAIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUxNiBjXG4gXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiB9XG4gXG4tc3RhdGljIHVuc2lnbmVkIGxvbmcgdm1hX3RvX3BmbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi17XG4tXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPSB2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhO1xuLVx0aW50IGluZGV4ID0gdm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAzZVx1MDAzZSAoVkZJT19QQ0lfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCk7XG4tXHR1NjQgcGdvZmY7XG4tXG4tXHRwZ29mZiA9IHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwMjZcbi1cdFx0KCgxVSBcdTAwM2NcdTAwM2MgKFZGSU9fUENJX09GRlNFVF9TSElGVCAtIFBBR0VfU0hJRlQpKSAtIDEpO1xuLVxuLVx0cmV0dXJuIChwY2lfcmVzb3VyY2Vfc3RhcnQodmRldi1cdTAwM2VwZGV2LCBpbmRleCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQpICYjNDM7IHBnb2ZmO1xuLX1cbi1cbiB2bV9mYXVsdF90IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgbG9uZyBwZm4sXG5AQCAtMTcyMiwyNCAmIzQzOzE3MzksMTAzIEBAIHN0YXRpYyB2bV9mYXVsdF90IHZmaW9fcGNpX21tYXBfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbi1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXHR1bnNpZ25lZCBsb25nIGFkZHIgPSB2bWYtXHUwMDNlYWRkcmVzcyBcdTAwMjYgfigoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxKTtcbi1cdHVuc2lnbmVkIGxvbmcgcGdvZmYgPSAoYWRkciAtIHZtYS1cdTAwM2V2bV9zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHR1bnNpZ25lZCBsb25nIHBmbiA9IHZtYV90b19wZm4odm1hKSAmIzQzOyBwZ29mZjtcbi1cdHZtX2ZhdWx0X3QgcmV0ID0gVk1fRkFVTFRfRkFMTEJBQ0s7XG4tXG4tXHRpZiAoaXNfYWxpZ25lZF9mb3Jfb3JkZXIodm1hLCBhZGRyLCBwZm4sIG9yZGVyKSkge1xuLVx0XHRzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jaylcbi1cdFx0XHRyZXQgPSB2ZmlvX3BjaV92bWZfaW5zZXJ0X3Bmbih2ZGV2LCB2bWYsIHBmbiwgb3JkZXIpO1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gdm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBwZm4gPSAwO1xuJiM0MztcdHZtX2ZhdWx0X3QgcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBvbmx5IHRoaW5nIHRoaXMgY2FuIHJlbHkgb24gaXMgdGhhdCB0aGUgRE1BQlVGIHJlbGF0aW5nXG4mIzQzO1x0ICogdG8gdGhlIFZNQSYjMzk7cyB2bV9maWxlIGV4aXN0cyAocHJpdikuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBBIERNQUJVRiBmb3IgYSBWRklPIGRldmljZSBmZCBtbWFwKCkgaG9sZHMgYSByZWZlcmVuY2UgdG9cbiYjNDM7XHQgKiB0aGUgb3JpZ2luYWwgVkZJTyBkZXZpY2UgZmQsIGJ1dCBhbiBleHBsaWNpdGx5LWV4cG9ydGVkXG4mIzQzO1x0ICogRE1BQlVGIGRvZXMgbm90LiAgVGhlIG9yaWdpbmFsIGZkIG1pZ2h0IGhhdmUgY2xvc2VkLFxuJiM0MztcdCAqIG1lYW5pbmcgdGhpcyBmYXVsdCBjYW4gcmFjZSB3aXRoXG4mIzQzO1x0ICogdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKCksIG1lYW5pbmcgdGhlIGJ1ZmZlciBjb3VsZCBoYXZlXG4mIzQzO1x0ICogYmVlbiByZXZva2VkIChpbiB3aGljaCBjYXNlIHByaXYtXHUwMDNldmRldiBtaWdodCBiZSBOVUxMKSwgYW5kXG4mIzQzO1x0ICogdGhlIFZGSU8gZGV2aWNlIHJlZ2lzdHJhdGlvbiBtaWdodCBoYXZlIGJlZW4gZHJvcHBlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFdpdGggdGhlIGdvYWwgb2YgdGFraW5nIHZkZXYtXHUwMDNlbWVtb3J5X2xvY2sgaW4gYSB3b3JsZCB3aGVyZVxuJiM0MztcdCAqIHZkZXYgbWlnaHQgbm90IHN0aWxsIGV4aXN0OlxuJiM0MztcdCAqXG4mIzQzO1x0ICogMS4gVGFrZSB0aGUgcmVzdiBsb2NrIG9uIHRoZSBETUFCVUY6XG4mIzQzO1x0ICogIC0gSWYgcmFjaW5nIGNsZWFudXAgZ290IGluIGZpcnN0LCB0aGUgYnVmZmVyIGlzIHJldm9rZWQ7XG4mIzQzO1x0ICogICAgc3RvcC9leGl0IGlmIHNvLlxuJiM0MztcdCAqICAtIElmIHdlIGdvdCBpbiBmaXJzdCwgdGhlIGJ1ZmZlciBpcyBub3QgcmV2b2tlZCBzbyB2ZGV2IGlzXG4mIzQzO1x0ICogICAgbm9uLU5VTEwsIGFjY2Vzc2libGUsIGFuZCBjbGVhbnVwIF9oYXMgbm90IHlldCBwdXQgdGhlXG4mIzQzO1x0ICogICAgVkZJTyBkZXZpY2UgcmVnaXN0cmF0aW9uXy4gIFNvLCB0aGUgZGV2aWNlIHJlZmNvdW50IG11c3RcbiYjNDM7XHQgKiAgICBiZSBcdTAwM2UwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogMi4gVGFrZSB2ZmlvX2RldmljZSByZWdpc3RyYXRpb24gKHJlZmNvdW50IGd1YXJhbnRlZWQgXHUwMDNlMFxuJiM0MztcdCAqICAgIGhlcmVhZnRlcikuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiAzLiBVbmxvY2sgdGhlIERNQUJVRiYjMzk7cyByZXN2IGxvY2s6XG4mIzQzO1x0ICogIC0gQSByYWNpbmcgY2xlYW51cCBjYW4gbm93IGNvbXBsZXRlLlxuJiM0MztcdCAqICAtIEJ1dCwgdGhlIGRldmljZSByZWZjb3VudCBcdTAwM2UwLCBtZWFuaW5nIHRoZSB2ZmlvX2RldmljZVxuJiM0MztcdCAqICAgIChhbmQgdmZpb19wY2llX2NvcmUgZGV2aWNlIHZkZXYpIGhhdmUgbm90IHlldCBiZWVuXG4mIzQzO1x0ICogICAgZnJlZWQuICB2ZGV2IGlzIGFjY2Vzc2libGUsIGV2ZW4gaWYgdGhlIERNQUJVRiBoYXMgYmVlblxuJiM0MztcdCAqICAgIHJldm9rZWQgb3IgY2xlYW51cCBoYXMgaGFwcGVuZWQsIGJlY2F1c2VcbiYjNDM7XHQgKiAgICB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KCkgY2FuJiMzOTt0IGNvbXBsZXRlLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogNC4gVGFrZSB0aGUgdmRldi1cdTAwM2VtZW1vcnlfbG9ja1xuJiM0MztcdCAqICAtIEVpdGhlciB0aGUgRE1BQlVGIGlzIHVzYWJsZSwgb3IgaGFzIGJlZW4gY2xlYW5lZCB1cC5cbiYjNDM7XHQgKiAgICBXaGljaGV2ZXIsIGl0IGNhbiBubyBsb25nZXIgY2hhbmdlIHVuZGVyIHVzLlxuJiM0MztcdCAqICAtIFRlc3QgdGhlIERNQUJVRiByZXZvY2F0aW9uIHN0YXR1cyBhZ2FpbjogaWYgaXQgd2FzXG4mIzQzO1x0ICogICAgcmV2b2tlZCBiZXR3ZWVuIDEgYW5kIDQgcmV0dXJuIGEgU0lHQlVTLiBPdGhlcndpc2UsXG4mIzQzO1x0ICogICAgcmV0dXJuIGEgUEZOLlxuJiM0MztcdCAqICAtIEl0JiMzOTtzIG5vdCBuZWNlc3NhcnkgdG8gYWxzbyB0YWtlIHRoZSByZXN2IGxvY2ssIGJlY2F1c2VcbiYjNDM7XHQgKiAgICB0aGUgc3RhdHVzL3ZkZXYgY2FuJiMzOTt0IGNoYW5nZSB3aGlsZSBtZW1vcnlfbG9jayBpcyBoZWxkLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogNS4gVW5sb2NrLCBkb25lLlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgIT0gVkZJT19QQ0lfRE1BQlVGX09LKSB7XG4mIzQzO1x0XHRwcl9kZWJ1Z19yYXRlbGltaXRlZChcJiMzNDslcyBWQSAweCVseCwgcGdvZmYgMHglbHg6IERNQUJVRiByZXZva2VkL2NsZWFuZWQgdXBcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ICAgICBfX2Z1bmNfXywgdm1mLVx1MDAzZWFkZHJlc3MsIHZtYS1cdTAwM2V2bV9wZ29mZik7XG4mIzQzO1x0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogSWYgdGhlIGJ1ZmZlciBpc24mIzM5O3QgcmV2b2tlZCwgdmRldiBpcyB2YWxpZCAqL1xuJiM0MztcdHZkZXYgPSBwcml2LVx1MDAzZXZkZXY7XG4mIzQzO1xuJiM0MztcdGlmICghdmZpb19kZXZpY2VfdHJ5X2dldF9yZWdpc3RyYXRpb24oXHUwMDI2dmRldi1cdTAwM2V2ZGV2KSkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIElmIHZkZXYgIT0gTlVMTCAoYWJvdmUpLCB0aGUgcmVnaXN0cmF0aW9uIHNob3VsZFxuJiM0MztcdFx0ICogYWxyZWFkeSBiZSBcdTAwM2UwIGFuZCBzbyB0aGlzIHRyeV9nZXQgc2hvdWxkIG5ldmVyXG4mIzQzO1x0XHQgKiBmYWlsLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkZXZfd2FybihcdTAwMjZ2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LCBcJiMzNDslczogVW5leHBlY3RlZCByZWdpc3RyYXRpb24gZmFpbHVyZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0IF9fZnVuY19fKTtcbiYjNDM7XHRcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4mIzQzO1x0fVxuJiM0MztcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbiYjNDM7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spIHtcbiYjNDM7XHRcdC8qIFJldm9jYXRpb24gc3RhdHVzIG11c3QgYmUgcmUtcmVhZCwgdW5kZXIgbWVtb3J5X2xvY2sgKi9cbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfT0spIHtcbiYjNDM7XHRcdFx0aW50IHByZXMgPSB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHByaXYsIHZtYSxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgIHZtZi1cdTAwM2VhZGRyZXNzLFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgb3JkZXIsIFx1MDAyNnBmbik7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocHJlcyA9PSAwKVxuJiM0MztcdFx0XHRcdHJldCA9IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHZkZXYsIHZtZixcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICAgICBwZm4sIG9yZGVyKTtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAocHJlcyA9PSAtRUFHQUlOKVxuJiM0MztcdFx0XHRcdHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0ZGV2X2RiZ19yYXRlbGltaXRlZChcdTAwMjZ2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuLVx0XHRcdCAgIFwmIzM0OyVzKCxvcmRlciA9ICVkKSBCQVIgJWxkIHBhZ2Ugb2Zmc2V0IDB4JWx4OiAweCV4XFxuXCYjMzQ7LFxuLVx0XHRcdCAgICBfX2Z1bmNfXywgb3JkZXIsXG4tXHRcdFx0ICAgIHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwM2VcdTAwM2Vcbi1cdFx0XHRcdChWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSxcbi1cdFx0XHQgICAgcGdvZmYsICh1bnNpZ25lZCBpbnQpcmV0KTtcbiYjNDM7XHRcdFx0ICAgIFwmIzM0OyVzKG9yZGVyID0gJWQpIFBGTiAweCVseCwgVkEgMHglbHgsIHBnb2ZmIDB4JWx4OiAweCV4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHQgICAgX19mdW5jX18sIG9yZGVyLCBwZm4sIHZtZi1cdTAwM2VhZGRyZXNzLFxuJiM0MztcdFx0XHQgICAgdm1hLVx1MDAzZXZtX3Bnb2ZmLCAodW5zaWduZWQgaW50KXJldCk7XG4gXG4mIzQzO1x0dmZpb19kZXZpY2VfcHV0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTc1NSw2ICYjNDM7MTg1MSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHZmaW9fcGNpX21tYXBfb3BzID0ge1xuICNlbmRpZlxuIH07XG4gXG4mIzQzO3ZvaWQgdmZpb19wY2lfc2V0X3ZtYV9vcHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHR2bWEtXHUwMDNldm1fb3BzID0gXHUwMDI2dmZpb19wY2lfbW1hcF9vcHM7XG4mIzQzO31cbiYjNDM7XG4gaW50IHZmaW9fcGNpX2NvcmVfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID1cbkBAIC0xODAzLDcgJiM0MzsxOTA0LDEyIEBAIGludCB2ZmlvX3BjaV9jb3JlX21tYXAoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hXG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuLVx0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHZkZXY7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHZkZXYsIHZtYSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGluZGV4KSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgcmVxX2xlbiwgaW5kZXgpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiBcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuIFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXG5AQCAtMjIyMiw2ICYjNDM7MjMyOCwxNyBAQCBpbnQgdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0aWYgKHJldClcbiBcdFx0Z290byBvdXRfdmY7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBJZiBhIGRyaXZlciBvdmVycmlkZXMgLm1tYXAsIGl0IGhhcyB0byBiZSBhc3N1bWVkIHRoYXQgaXRcbiYjNDM7XHQgKiBtaWdodCBub3QgdXNlIHRoZSBETUFCVUYtYmFja2VkIGNvcmUgbW1hcDsgdGhpcyBmbGFnXG4mIzQzO1x0ICogZW5hYmxlcyBhIHphcCBhdCByZXZva2UgdGltZS4gIERyaXZlcnMgY2FuIG9wdCBvdXQgYnlcbiYjNDM7XHQgKiBjbGVhcmluZyB0aGlzIGZsYWcgYWZ0ZXIgcmVnaXN0cmF0aW9uLCBlLmcuIGlmIHRoZWlyIC5tbWFwXG4mIzQzO1x0ICogb3ZlcnJpZGUgY2FsbHMgZG93biB0byB2ZmlvX3BjaV9jb3JlX21tYXAoKSBzbyB0aGF0IG1hcHNcbiYjNDM7XHQgKiBhcmUgRE1BQlVGLWJhY2tlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodmRldi1cdTAwM2V2ZGV2Lm9wcy1cdTAwM2VtbWFwICE9IHZmaW9fcGNpX2NvcmVfbW1hcClcbiYjNDM7XHRcdHZkZXYtXHUwMDNlemFwX2JhcnNfb25fcmV2b2tlID0gdHJ1ZTtcbiYjNDM7XG4gXHR2ZmlvX3BjaV9wcm9iZV9wb3dlcl9zdGF0ZSh2ZGV2KTtcbiBcbiBcdC8qXG5AQCAtMjQ5Nyw5ICYjNDM7MjYxNCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsXG4gXHRcdH1cbiBcbiBcdFx0Lypcbi1cdFx0ICogVGFrZSB0aGUgbWVtb3J5IHdyaXRlIGxvY2sgZm9yIGVhY2ggZGV2aWNlIGFuZCB6YXAgQkFSXG4tXHRcdCAqIG1hcHBpbmdzIHRvIHByZXZlbnQgdGhlIHVzZXIgYWNjZXNzaW5nIHRoZSBkZXZpY2Ugd2hpbGUgaW5cbi1cdFx0ICogcmVzZXQuICBMb2NraW5nIG11bHRpcGxlIGRldmljZXMgaXMgcHJvbmUgdG8gZGVhZGxvY2ssXG4mIzQzO1x0XHQgKiBUYWtlIHRoZSBtZW1vcnkgd3JpdGUgbG9jayBmb3IgZWFjaCBkZXZpY2UgYW5kXG4mIzQzO1x0XHQgKiB6YXAvcmV2b2tlIEJBUiBtYXBwaW5ncyB0byBwcmV2ZW50IHRoZSB1c2VyIChvclxuJiM0MztcdFx0ICogcGVlcnMpIGFjY2Vzc2luZyB0aGUgZGV2aWNlIHdoaWxlIGluIHJlc2V0LlxuJiM0MztcdFx0ICogTG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIGlzIHByb25lIHRvIGRlYWRsb2NrLFxuIFx0XHQgKiBydW5hd2F5IGFuZCB1bndpbmQgaWYgd2UgaGl0IGNvbnRlbnRpb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIWRvd25fd3JpdGVfdHJ5bG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKSkge1xuQEAgLTI1MDcsOCAmIzQzOzI2MjUsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsXG4gXHRcdFx0YnJlYWs7XG4gXHRcdH1cbiBcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuLVx0XHR2ZmlvX3BjaV96YXBfYmFycyh2ZGV2KTtcbiYjNDM7XHRcdHZmaW9fcGNpX3Jldm9rZV9iYXJzKHZkZXYpO1xuIFx0fVxuIFxuIFx0aWYgKCFsaXN0X2VudHJ5X2lzX2hlYWQodmRldixcbkBAIC0yNTM4LDcgJiM0MzsyNjU1LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UodmRldiwgXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCxcbiBcdFx0XHRcdFx0IHZkZXYuZGV2X3NldF9saXN0KSB7XG4gXHRcdGlmICh2ZGV2LVx1MDAzZXZkZXYub3Blbl9jb3VudCBcdTAwMjZcdTAwMjYgX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuJiM0MztcdFx0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcdH1cbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuaW5kZXggMWExNzdjZTdkZTU0NmEuLjMxZmJhZDkzZjg5YjFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xuQEAgLTQsMjQgJiM0Mzs0LDEzIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2ktcDJwZG1hLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtcmVzdi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dmZpb19wY2lfcHJpdi5oXCYjMzQ7XG4gXG4gTU9EVUxFX0lNUE9SVF9OUyhcJiMzNDtETUFfQlVGXCYjMzQ7KTtcbiBcbi1zdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4tXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuLVx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2O1xuLVx0c3RydWN0IGxpc3RfaGVhZCBkbWFidWZzX2VsbTtcbi1cdHNpemVfdCBzaXplO1xuLVx0c3RydWN0IHBoeXNfdmVjICpwaHlzX3ZlYztcbi1cdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyO1xuLVx0dTMyIG5yX3Jhbmdlcztcbi1cdHN0cnVjdCBrcmVmIGtyZWY7XG4tXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuLVx0dTggcmV2b2tlZCA6IDE7XG4tfTtcbi1cbiYjNDM7I2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50KVxuIHtcbkBAIC0zMCw3ICYjNDM7MTksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRpZiAoIWF0dGFjaG1lbnQtXHUwMDNlcGVlcjJwZWVyKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuJiM0MztcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0aWYgKCFkbWFfYnVmX2F0dGFjaF9yZXZvY2FibGUoYXR0YWNobWVudCkpXG5AQCAtMzksNiAmIzQzOzI4LDQzIEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIGRtYV9idWZfbW1hcF9pbnRlcm5hbCgpIGhhcyBhc3NlcnRlZCB0aGF0IHRoZSBWTUEgaXNcbiYjNDM7XHQgKiBjb250YWluZWQgd2l0aGluIHRoZSBETUFCVUYgc2l6ZSBiZWZvcmUgY2FsbGluZyB0aGlzLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQWxzbywgaWYgd2Ugb2JzZXJ2ZSB0aGF0IHRoZSBidWZmZXIgaXMgcmV2b2tlZCBub3cgdGhlblxuJiM0MztcdCAqIHJlZnVzZSB0aGUgbW1hcCgpLiAgVGhpcyBpcyBhIGJlbHQtYW5kLWJyYWNlcyBlYXJseSBmYWlsdXJlXG4mIzQzO1x0ICogdG8gZWFzZSBkZWJ1Z2dpbmcgYSByZXZva2VkIGJ1ZmZlciBiZWluZyB1c2VkLiAgVXNlcnNwYWNlXG4mIzQzO1x0ICogbWlnaHQgYWxzbyByYWNlIGFuIG1tYXAoKSBhZ2FpbnN0IGFuIGV4cGxpY2l0IHJldm9jYXRpb24sXG4mIzQzO1x0ICogb3IgYW4gYWN0aW9uIGRvaW5nIGEgdGVtcG9yYXJ5IHJldm9rZTsgcmFjZSBzY2VuYXJpb3MgYXJlXG4mIzQzO1x0ICogc3RpbGwgc2FmZSBiZWNhdXNlIHRoZSBmYXVsdCBoYW5kbGVyIHVsdGltYXRlbHkgcHJldmVudHNcbiYjNDM7XHQgKiBhY2Nlc3MgdG8gYSByZXZva2VkIGJ1ZmZlciBpZiBpdCBpc24mIzM5O3QgY2F1Z2h0IGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKFJFQURfT05DRShwcml2LVx1MDAzZXN0YXR1cykgIT0gVkZJT19QQ0lfRE1BQlVGX09LKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0aWYgKCh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkgPT0gMClcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKHByaXYtXHUwMDNlbWVtYXR0cikgPT0gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MpXG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiYjNDM7XG4mIzQzO1x0LyogU2VlIGNvbW1lbnRzIGluIHZmaW9fcGNpX2NvcmVfbW1hcCgpIHJlIFZNX0FMTE9XX0FOWV9VTkNBQ0hFRC4gKi9cbiYjNDM7XHR2bV9mbGFnc19zZXQodm1hLCBWTV9BTExPV19BTllfVU5DQUNIRUQgfCBWTV9JTyB8IFZNX1BGTk1BUCB8XG4mIzQzO1x0XHQgICAgIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG4mIzQzO1x0dmZpb19wY2lfc2V0X3ZtYV9vcHModm1hKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi9cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9kb25lKHN0cnVjdCBrcmVmICprcmVmKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID1cbkBAIC01Niw3ICYjNDM7ODIsNyBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxuIFxuIFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuJiM0MztcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIFxuIFx0cmV0ID0gZG1hX2J1Zl9waHlzX3ZlY190b19zZ3QoYXR0YWNobWVudCwgcHJpdi1cdTAwM2Vwcm92aWRlcixcbkBAIC05NSwxNyAmIzQzOzEyMSwyMDMgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXG4gXHRcdHVwX3dyaXRlKFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gXHRcdHZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oXHUwMDI2cHJpdi1cdTAwM2V2ZGV2LVx1MDAzZXZkZXYpO1xuIFx0fVxuJiM0MztcdGlmIChwcml2LVx1MDAzZXZmaWxlKVxuJiM0MztcdFx0ZnB1dChwcml2LVx1MDAzZXZmaWxlKTtcbiBcdGtmcmVlKHByaXYtXHUwMDNlcGh5c192ZWMpO1xuIFx0a2ZyZWUocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbiYjNDM7I2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiBcdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbiYjNDM7XHQubW1hcCA9IHZmaW9fcGNpX2RtYV9idWZfbW1hcCxcbiYjNDM7I2VuZGlmXG4gXHQubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCxcbiBcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcbiBcdC5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLFxuIH07XG4gXG4mIzQzO2ludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLFxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgKm91dF9wZm4pXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEdpdmVuIGEgVk1BIChzdGFydCwgZW5kLCBwZ29mZnMpIGFuZCBhIGZhdWx0IGFkZHJlc3MsXG4mIzQzO1x0ICogc2VhcmNoIHRoZSBjb3JyZXNwb25kaW5nIERNQUJVRiYjMzk7cyBwaHlzX3ZlY1tdIHRvIGZpbmQgdGhlXG4mIzQzO1x0ICogcmFuZ2UgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzJiMzOTtzIG9mZnNldCBpbnRvIHRoZSBWTUEsIGFuZFxuJiM0MztcdCAqIGl0cyBQRk4uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgcGh5c192ZWNbXSByYW5nZXMgcmVwcmVzZW50IGNvbnRpZ3VvdXMgc3BhbnMgb2YgVkFzXG4mIzQzO1x0ICogdXB3YXJkcyBmcm9tIHRoZSBidWZmZXIgb2Zmc2V0IDA7IHRoZSBhY3R1YWwgUEZOcyBtaWdodCBiZVxuJiM0MztcdCAqIGluIGFueSBvcmRlciwgb3ZlcmxhcC9hbGlhcywgZXRjLiAgQ2FsY3VsYXRlIGFuIG9mZnNldCBvZlxuJiM0MztcdCAqIHRoZSBkZXNpcmVkIHBhZ2UgZ2l2ZW4gVk1BIHN0YXJ0L3Bnb2ZmIGFuZCBhZGRyZXNzLCB0aGVuXG4mIzQzO1x0ICogc2VhcmNoIHVwd2FyZHMgZnJvbSAwIHRvIGZpbmQgd2hpY2ggc3BhbiBjb250YWlucyBpdC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIE9uIHN1Y2Nlc3MsIGEgdmFsaWQgUEZOIGZvciBhIHBhZ2Ugc2l6ZWQgYnkgJiMzOTtvcmRlciYjMzk7IGlzXG4mIzQzO1x0ICogcmV0dXJuZWQgaW50byBvdXRfcGZuLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRmFpbHVyZSBvY2N1cnMgaWY6XG4mIzQzO1x0ICogLSBBIGh1Z2VwYWdlIHdvdWxkIGNyb3NzIHRoZSBlZGdlIG9mIHRoZSBWTUEsXG4mIzQzO1x0ICogLSBBIGh1Z2VwYWdlIGlzbiYjMzk7dCBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIGEgcmFuZ2VcbiYjNDM7XHQgKiAgIChpbmNsdWRpbmcgd2hlcmUgaXQgc3RyYWRkbGVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuXG4mIzQzO1x0ICogICByYW5nZXMpLFxuJiM0MztcdCAqIC0gV2UgZmluZCBhIHJhbmdlLCBidXQgdGhlIGZpbmFsIFBGTiBpc24mIzM5O3QgYWxpZ25lZCB0byB0aGVcbiYjNDM7XHQgKiAgIHJlcXVlc3RlZCBvcmRlci5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFVwb24gZmFpbHVyZSwgLUVBR0FJTiBpcyByZXR1cm5lZCBhbmQgdGhlIGNhbGxlciBpc1xuJiM0MztcdCAqIGV4cGVjdGVkIHRvIHRyeSBhZ2FpbiB3aXRoIGEgc21hbGxlciBvcmRlciwgd2hpY2ggd2lsbFxuJiM0MztcdCAqIGV2ZW50dWFsbHkgc3VjY2VlZCAob3JkZXI9MCB3aWxsIGFsd2F5cyB3b3JrKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEl0JiMzOTtzIHN1Ym9wdGltYWwgaWYgRE1BQlVGcyBhcmUgY3JlYXRlZCB3aXRoIG5laWdoYm91cmluZ1xuJiM0MztcdCAqIHJhbmdlcyB0aGF0IGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHNpbmNlIGh1Z2VwYWdlc1xuJiM0MztcdCAqIGNhbiYjMzk7dCBzdHJhZGRsZSByYW5nZSBib3VuZGFyaWVzLiAgKFRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlXG4mIzQzO1x0ICogcmFuZ2VzIHNob3VsZCBtZXJnZSB0aGVtIGluIHRoaXMgY2FzZS4pXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBGaW5hbGx5LCB2bWFfcGdvZmZfYWRqdXN0IGlzIHVzZWQgd2l0aCBhIERNQUJVRiBjcmVhdGVkIGZvclxuJiM0MztcdCAqIGEgVkZJTyBCQVIgbW1hcDogYSBCQVIgbWFwcGVkIHdpdGggdm1fcGdvZmYgXHUwMDNlIDAgY3JlYXRlcyBhXG4mIzQzO1x0ICogRE1BQlVGIHN1Y2ggdGhhdCBieXRlIDAgb2YgdGhlIFZNQSBjb3JyZXNwb25kcyB0byBieXRlIDAgb2ZcbiYjNDM7XHQgKiB0aGUgRE1BQlVGIGFuZCBieXRlICYjMzk7dm1fcGdvZmYgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQmIzM5OyBpbnRvIHRoZSBCQVIuXG4mIzQzO1x0ICogVG8gYXZvaWQgZG91YmxlLW9mZnNldHRpbmcgaW4gdGhpcyBzY2VuYXJpbywgc3VidHJhY3RpbmdcbiYjNDM7XHQgKiB2bWFfcGdvZmZfYWRqdXN0IGZyb20gdGhpcyAobm9uLXplcm8pIHZtX3Bnb2ZmIGdlbmVyYXRlc1xuJiM0MztcdCAqIHRoZSBlZmZlY3RpdmUgb2Zmc2V0LlxuJiM0MztcdCAqL1xuJiM0MztcbiYjNDM7XHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2VzaXplID0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtYV9vZmYgPSAoKHZtYS1cdTAwM2V2bV9wZ29mZiAtIHByaXYtXHUwMDNldm1hX3Bnb2ZmX2FkanVzdCkgXHUwMDNjXHUwMDNjXG4mIzQzO1x0XHRcdFx0IFBBR0VfU0hJRlQpIFx1MDAyNiBWRklPX1BDSV9PRkZTRVRfTUFTSztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHJvdW5kZWRfcGFnZV9hZGRyID0gQUxJR05fRE9XTihmYXVsdF9hZGRyLCBwYWdlc2l6ZSk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyByb3VuZGVkX3BhZ2VfZW5kID0gcm91bmRlZF9wYWdlX2FkZHIgJiM0MzsgcGFnZXNpemU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmYXVsdF9vZmZzZXQ7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmYXVsdF9vZmZzZXRfZW5kO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnRfb2Zmc2V0ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocm91bmRlZF9wYWdlX2FkZHIgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCByb3VuZGVkX3BhZ2VfZW5kIFx1MDAzZSB2bWEtXHUwMDNldm1fZW5kKSB7XG4mIzQzO1x0XHRpZiAob3JkZXIgXHUwMDNlIDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUFHQUlOO1xuJiM0MztcbiYjNDM7XHRcdC8qIEEgZmF1bHQgYWRkcmVzcyBvdXRzaWRlIG9mIHRoZSBWTUEgaXMgYWJzdXJkLiAqL1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXG4mIzQzO1x0XHRcdFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7RmF1bHQgYWRkciAweCVseCBvdXRzaWRlIFZNQSAweCVseC0weCVseFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZmF1bHRfYWRkciwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kKTtcbiYjNDM7XHRcdHJldHVybiAtRUZBVUxUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBmYXVsdF9vZmZzZXRbX2VuZF0gaXMgdGhlIHNwYW4gd2l0aGluIHRoZSBETUFCVUZcbiYjNDM7XHQgKiBjb3JyZXNwb25kaW5nIHRvIHRoZSBmYXVsdGluZyBwYWdlOlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh1bmxpa2VseShjaGVja19hZGRfb3ZlcmZsb3cocm91bmRlZF9wYWdlX2FkZHIgLSB2bWEtXHUwMDNldm1fc3RhcnQsXG4mIzQzO1x0XHRcdFx0XHR2bWFfb2ZmLCBcdTAwMjZmYXVsdF9vZmZzZXQpIHx8XG4mIzQzO1x0XHQgICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhmYXVsdF9vZmZzZXQsIHBhZ2VzaXplLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2ZmF1bHRfb2Zmc2V0X2VuZCkpKVxuJiM0MztcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogSXRlcmF0ZSBvdmVyIHJhbmdlcyBpbiB0aGUgYnVmZmVyLCBzdW1taW5nIHRoZWlyIGxlbmd0aHM6XG4mIzQzO1x0ICogcmFuZ2Vfc3RhcnRfb2Zmc2V0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcmFuZ2UmIzM5O3Mgc3RhcnRpbmdcbiYjNDM7XHQgKiBvZmZzZXQgaW4gdGhlIGJ1ZmZlciAoZnJvbSAwIHVwd2FyZHMpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBmYWlsdXJlIGZvciBvcmRlciA9PSAwIGlzIHVuZXhwZWN0ZWQsIGFuZCB0cmlnZ2VycyBhXG4mIzQzO1x0ICogZmF1bHQvd2Fybi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXQgPSAob3JkZXIgPT0gMCkgPyAtRUZBVUxUIDogLUVBR0FJTjtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2Vucl9yYW5nZXM7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzaXplX3QgcmFuZ2VfbGVuID0gcHJpdi1cdTAwM2VwaHlzX3ZlY1tpXS5sZW47XG4mIzQzO1xuJiM0MztcdFx0LyogRWFybHkgZXhpdCBpZiByYW5nZSBzdGFydHMgYWZ0ZXIgdGhlIHBhZ2UgZW5kICovXG4mIzQzO1x0XHRpZiAoZmF1bHRfb2Zmc2V0X2VuZCBcdTAwM2M9IHJhbmdlX3N0YXJ0X29mZnNldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGZhdWx0X29mZnNldCBcdTAwM2U9IHJhbmdlX3N0YXJ0X29mZnNldCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBmYXVsdF9vZmZzZXRfZW5kIFx1MDAzYz0gcmFuZ2Vfc3RhcnRfb2Zmc2V0ICYjNDM7IHJhbmdlX2xlbikge1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBUaGUgZmF1bHRpbmcgcGFnZSBpcyB3aG9sbHkgY29udGFpbmVkXG4mIzQzO1x0XHRcdCAqIHdpdGhpbiB0aGUgc3BhbiByZXByZXNlbnRlZCBieSB0aGlzIHJhbmdlLFxuJiM0MztcdFx0XHQgKiBzbyB2YWxpZGF0ZSBQRk4gYWxpZ25tZW50IGZvciB0aGUgb3JkZXIuXG4mIzQzO1x0XHRcdCAqIFRoZSBpZigpIGNvbmRpdGlvbiBlbnN1cmVzIHRoZSBwZm5cbiYjNDM7XHRcdFx0ICogYXJpdGhtZXRpYyB3b24mIzM5O3Qgb3ZlcmZsb3cuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR1bnNpZ25lZCBsb25nIHBmbiA9XG4mIzQzO1x0XHRcdFx0KChmYXVsdF9vZmZzZXQgLSByYW5nZV9zdGFydF9vZmZzZXQpICYjNDM7XG4mIzQzO1x0XHRcdFx0IHByaXYtXHUwMDNlcGh5c192ZWNbaV0ucGFkZHIpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKElTX0FMSUdORUQocGZuLCAxIFx1MDAzY1x1MDAzYyBvcmRlcikpIHtcbiYjNDM7XHRcdFx0XHQqb3V0X3BmbiA9IHBmbjtcbiYjNDM7XHRcdFx0XHRyZXQgPSAwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIEVsc2Ugb3JkZXIgXHUwMDNlIDA7IEVBR0FJTiByZXRyaWVzIHdpdGggc21hbGxlclxuJiM0MztcdFx0XHQgKiBvcmRlclxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRyYW5nZV9zdGFydF9vZmZzZXQgJiM0Mzs9IHJhbmdlX2xlbjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcmRlciA9PSAwIFx1MDAyNlx1MDAyNiByZXQgIT0gMClcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgYWRkcmVzcyBmZWxsIG91dHNpZGUgb2YgdGhlIHNwYW4gcmVwcmVzZW50ZWQgYnlcbiYjNDM7XHRcdCAqIHRoZSAoY29uY2F0ZW5hdGVkKSByYW5nZXMuICBBcyBzZXR1cCBvZiBhIG1hcHBpbmdcbiYjNDM7XHRcdCAqIGVuc3VyZXMgdGhhdCB0aGUgVk1BIGlzIFx1MDAzYz0gdGhlIHRvdGFsIHNpemUgb2YgdGhlXG4mIzQzO1x0XHQgKiByYW5nZXMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSWYgaXQgZG9lcywgd2FyblxuJiM0MztcdFx0ICogYW5kIFNJR0JVUy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXG4mIzQzO1x0XHRcdFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Tm8gcmFuZ2UgZm9yIGFkZHIgMHglbHgsIG9yZGVyICVkOiBWTUEgMHglbHgtMHglbHggcGdvZmYgMHglbHgsICV1IHJhbmdlcywgc2l6ZSAweCV6eFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZmF1bHRfYWRkciwgb3JkZXIsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCxcbiYjNDM7XHRcdFx0dm1hLVx1MDAzZXZtX3Bnb2ZmLCBwcml2LVx1MDAzZW5yX3JhbmdlcywgcHJpdi1cdTAwM2VzaXplKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQ3JlYXRlIGEgRE1BQlVGIGNvcnJlc3BvbmRpbmcgdG8gcHJpdiwgYWRkIGl0IHRvIHZkZXYtXHUwMDNlZG1hYnVmcyBsaXN0XG4mIzQzOyAqIGZvciB0cmFja2luZyAobWVhbmluZyBjbGVhbnVwIG9yIHJldm9jYXRpb24gd2lsbCB6YXAgaXQpLCBhbmQgdGFrZVxuJiM0MzsgKiBhIHZmaW9fZGV2aWNlIHJlZ2lzdHJhdGlvbi5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hYnVmX2V4cG9ydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwgdTMyIGZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xuJiM0MztcbiYjNDM7XHRpZiAoIXZmaW9fZGV2aWNlX3RyeV9nZXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0ZXhwX2luZm8ub3BzID0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcztcbiYjNDM7XHRleHBfaW5mby5zaXplID0gcHJpdi1cdTAwM2VzaXplO1xuJiM0MztcdGV4cF9pbmZvLmZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0ZXhwX2luZm8ucHJpdiA9IHByaXY7XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlZG1hYnVmID0gZG1hX2J1Zl9leHBvcnQoXHUwMDI2ZXhwX2luZm8pO1xuJiM0MztcdGlmIChJU19FUlIocHJpdi1cdTAwM2VkbWFidWYpKSB7XG4mIzQzO1x0XHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihwcml2LVx1MDAzZWRtYWJ1Zik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrcmVmX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2Vjb21wKTtcbiYjNDM7XG4mIzQzO1x0LyogZG1hX2J1Zl9wdXQoKSBub3cgZnJlZXMgcHJpdiAqL1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmc19lbG0pO1xuJiM0MztcdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4mIzQzO1x0ZG1hX3Jlc3ZfbG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2LCBOVUxMKTtcbiYjNDM7XHRwcml2LVx1MDAzZXN0YXR1cyA9IF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikgPyBWRklPX1BDSV9ETUFCVUZfT0sgOlxuJiM0MztcdFx0VkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRDtcbiYjNDM7XHRsaXN0X2FkZF90YWlsKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmc19lbG0sIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcyk7XG4mIzQzO1x0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiAvKlxuICAqIFRoaXMgaXMgYSB0ZW1wb3JhcnkgXCYjMzQ7cHJpdmF0ZSBpbnRlcmNvbm5lY3RcJiMzNDsgYmV0d2VlbiBWRklPIERNQUJVRiBhbmQgaW9tbXVmZC5cbiAgKiBJdCBhbGxvd3MgdGhlIHR3byBjby1vcGVyYXRpbmcgZHJpdmVycyB0byBleGNoYW5nZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZlxuQEAgLTEyOCw3ICYjNDM7MzQwLDcgQEAgaW50IHZmaW9fcGNpX2RtYV9idWZfaW9tbXVmZF9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0cHJpdiA9IGF0dGFjaG1lbnQtXHUwMDNlZG1hYnVmLVx1MDAzZXByaXY7XG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuJiM0MztcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0LyogTW9yZSB0aGFuIG9uZSByYW5nZSB0byBpb21tdWZkIHdpbGwgcmVxdWlyZSBwcm9wZXIgRE1BQlVGIHN1cHBvcnQgKi9cbkBAIC0yMjQsNyAmIzQzOzQzNiw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiB7XG4gXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIGdldF9kbWFfYnVmID0ge307XG4gXHRzdHJ1Y3QgdmZpb19yZWdpb25fZG1hX3JhbmdlICpkbWFfcmFuZ2VzO1xuLVx0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4gXHRzaXplX3QgbGVuZ3RoO1xuIFx0aW50IHJldDtcbkBAIC0yNzQsNiAmIzQzOzQ4NSw3IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdHByaXYtXHUwMDNldmRldiA9IHZkZXY7XG4gXHRwcml2LVx1MDAzZW5yX3JhbmdlcyA9IGdldF9kbWFfYnVmLm5yX3JhbmdlcztcbiBcdHByaXYtXHUwMDNlc2l6ZSA9IGxlbmd0aDtcbiYjNDM7XHRwcml2LVx1MDAzZW1lbWF0dHIgPSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQztcbiBcdHJldCA9IHZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXModmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vwcm92aWRlcixcbiBcdFx0XHRcdFx0ICAgICBnZXRfZG1hX2J1Zi5yZWdpb25faW5kZXgsXG4gXHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VwaHlzX3ZlYywgZG1hX3JhbmdlcyxcbkBAIC0yODQsMzQgJiM0Mzs0OTYsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRrZnJlZShkbWFfcmFuZ2VzKTtcbiBcdGRtYV9yYW5nZXMgPSBOVUxMO1xuIFxuLVx0aWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpKSB7XG4tXHRcdHJldCA9IC1FTk9ERVY7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBnZXRfZG1hX2J1Zi5vcGVuX2ZsYWdzKTtcbiYjNDM7XHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycl9mcmVlX3BoeXM7XG4tXHR9XG4tXG4tXHRleHBfaW5mby5vcHMgPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzO1xuLVx0ZXhwX2luZm8uc2l6ZSA9IHByaXYtXHUwMDNlc2l6ZTtcbi1cdGV4cF9pbmZvLmZsYWdzID0gZ2V0X2RtYV9idWYub3Blbl9mbGFncztcbi1cdGV4cF9pbmZvLnByaXYgPSBwcml2O1xuLVxuLVx0cHJpdi1cdTAwM2VkbWFidWYgPSBkbWFfYnVmX2V4cG9ydChcdTAwMjZleHBfaW5mbyk7XG4tXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlZG1hYnVmKSkge1xuLVx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlZG1hYnVmKTtcbi1cdFx0Z290byBlcnJfZGV2X3B1dDtcbi1cdH1cbi1cbi1cdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuLVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4tXG4tXHQvKiBkbWFfYnVmX3B1dCgpIG5vdyBmcmVlcyBwcml2ICovXG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWRtYWJ1ZnNfZWxtKTtcbi1cdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4tXHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuLVx0cHJpdi1cdTAwM2VyZXZva2VkID0gIV9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldik7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmc19lbG0sIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcyk7XG4tXHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4tXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cbiBcdC8qXG4gXHQgKiBkbWFfYnVmX2ZkKCkgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgd2hlbiB0aGUgZmlsZSBjbG9zZXMgdGhlIGRtYWJ1ZlxuIFx0ICogd2lsbCBiZSByZWxlYXNlZC5cbkBAIC0zMjIsOCAmIzQzOzUwOSw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcbiBcdHJldHVybiByZXQ7XG4gXG4tZXJyX2Rldl9wdXQ6XG4tXHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4gZXJyX2ZyZWVfcGh5czpcbiBcdGtmcmVlKHByaXYtXHUwMDNlcGh5c192ZWMpO1xuIGVycl9mcmVlX3ByaXY6XG5AQCAtMzMyLDQ3ICYjNDM7NTE3LDE2NCBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRrZnJlZShkbWFfcmFuZ2VzKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX1ZGSU9fUENJX0RNQUJVRiAqL1xuJiM0MztcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4mIzQzO1x0XHRcdFx0ICAgdTY0IHBoeXNfc3RhcnQsIHU2NCByZXFfbGVuLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZXNfaW5kZXgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtYV9wZ29mZiA9IHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwMjYgKFZGSU9fUENJX09GRlNFVF9NQVNLIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbiYjNDM7XHRjaGFyICpidWZuYW1lO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHByaXYtXHUwMDNlcGh5c192ZWMgPSBremFsbG9jX29iaigqcHJpdi1cdTAwM2VwaHlzX3ZlYyk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXBoeXNfdmVjKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9wcml2O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0YnVmbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCBcJiMzNDslczolcy8leFwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgIGRldl9uYW1lKFx1MDAyNnZkZXYtXHUwMDNldmRldi5kZXZpY2UpLCBwY2lfbmFtZSh2ZGV2LVx1MDAzZXBkZXYpLFxuJiM0MztcdFx0XHQgICAgcmVzX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFidWZuYW1lKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9waHlzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgRE1BQlVGIGJlZ2lucyBmcm9tIHRoZSBtbWFwKCkmIzM5O3MgQkFSIG9mZnNldCwgaS5lLiB0aGVcbiYjNDM7XHQgKiBzdGFydCBvZiB0aGUgVk1BIGNvcnJlc3BvbmRzIHRvIGJ5dGUgMCBvZiB0aGUgRE1BQlVGIGFuZFxuJiM0MztcdCAqIGJ5dGUgKHZtYV9wZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkgb2YgdGhlIEJBUi5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oKSByZXZlcnNlcyB0aGlzIG9mZnNldCB1c2luZ1xuJiM0MztcdCAqIHZtYV9wZ29mZl9hZGp1c3QsIHNvIHRoYXQgdWx0aW1hdGVseSBhIGZhdWx0JiMzOTtzIG9mZnNldCBmcm9tXG4mIzQzO1x0ICogdGhlIHN0YXJ0IG9mIHRoZSBfVk1BXyBoYXMgYSBjb25zaXN0ZW50IHVzYWdlIHdoZXRoZXIgdGhlXG4mIzQzO1x0ICogVk1BIG9yaWdpbmF0ZXMgZnJvbSBhbiBtbWFwKCkgb2YgdGhlIFZGSU8gZGV2aWNlIGhlcmUgb3IgYVxuJiM0MztcdCAqIGRpcmVjdCBETUFCVUYgbW1hcCgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHByaXYtXHUwMDNldmRldiA9IHZkZXY7XG4mIzQzO1x0cHJpdi1cdTAwM2VzaXplID0gcmVxX2xlbjtcbiYjNDM7XHRwcml2LVx1MDAzZW5yX3JhbmdlcyA9IDE7XG4mIzQzO1x0cHJpdi1cdTAwM2V2bWFfcGdvZmZfYWRqdXN0ID0gdm1hX3Bnb2ZmO1xuJiM0MztcdHByaXYtXHUwMDNlcHJvdmlkZXIgPSBwY2ltX3AycGRtYV9wcm92aWRlcih2ZGV2LVx1MDAzZXBkZXYsIHJlc19pbmRleCk7XG4mIzQzO1x0aWYgKCFwcml2LVx1MDAzZXByb3ZpZGVyKSB7XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZV9uYW1lO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VwaHlzX3ZlY1swXS5wYWRkciA9IHBoeXNfc3RhcnQgJiM0MzsgKCh1NjQpdm1hX3Bnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbiYjNDM7XHRwcml2LVx1MDAzZXBoeXNfdmVjWzBdLmxlbiA9IHByaXYtXHUwMDNlc2l6ZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBPX0NMT0VYRUMgfCBPX1JEV1IpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX25hbWU7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT3duZXJzaGlwIG9mIHRoZSBETUFCVUYgZmlsZSB0cmFuc2ZlcnMgdG8gdGhlIFZNQSBzbyB0aGF0XG4mIzQzO1x0ICogb3RoZXIgdXNlcnMgY2FuIGxvY2F0ZSB0aGUgRE1BQlVGIHZpYSBhIFZBLiAgT3duZXJzaGlwIG9mXG4mIzQzO1x0ICogdGhlIG9yaWdpbmFsIFZGSU8gZGV2aWNlIGZpbGUgYmVpbmcgbW1hcCgpZWQgdHJhbnNmZXJzIHRvXG4mIzQzO1x0ICogcHJpdiwgYW5kIGlzIHB1dCB3aGVuIHRoZSBETUFCVUYgaXMgcmVsZWFzZWQuICBUaGlzXG4mIzQzO1x0ICogaW50ZW50aW9uYWxseSBkb2VzIG5vdCB1c2UgZ2V0X2ZpbGUoKS92bWFfc2V0X2ZpbGUoKVxuJiM0MztcdCAqIGJlY2F1c2UgdGhlIHJlZmVyZW5jZXMgYXJlIGFscmVhZHkgaGVsZCwgYW5kIG93bmVyc2hpcFxuJiM0MztcdCAqIG1vdmVzLlxuJiM0MztcdCAqL1xuJiM0MztcdHByaXYtXHUwMDNldmZpbGUgPSB2bWEtXHUwMDNldm1fZmlsZTtcbiYjNDM7XHR2bWEtXHUwMDNldm1fZmlsZSA9IHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZWZpbGU7XG4mIzQzO1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG4mIzQzO1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VuYW1lX2xvY2spO1xuJiM0MztcdGtmcmVlKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZW5hbWUpO1xuJiM0MztcdHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZW5hbWUgPSBidWZuYW1lO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZW5hbWVfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWVfbmFtZTpcbiYjNDM7XHRrZnJlZShidWZuYW1lKTtcbiYjNDM7ZXJyX2ZyZWVfcGh5czpcbiYjNDM7XHRrZnJlZShwcml2LVx1MDAzZXBoeXNfdmVjKTtcbiYjNDM7ZXJyX2ZyZWVfcHJpdjpcbiYjNDM7XHRrZnJlZShwcml2KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBTZXQgdGhlIERNQUJVRiYjMzk7cyByZXZvY2F0aW9uIHN0YXR1cyAoT0sgb3IgdGVtcG9yYXJpbHkvcGVybWFuZW50bHkgcmV2b2tlZCkgKi9cbiYjNDM7c3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LFxuJiM0MztcdFx0XHRcdFx0ZW51bSB2ZmlvX3BjaV9kbWFfYnVmX3N0YXR1cyBuZXdfc3RhdHVzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB3YXNfcmV2b2tlZDtcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZwcml2LVx1MDAzZXZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCB8fFxuJiM0MztcdCAgICBwcml2LVx1MDAzZXN0YXR1cyA9PSBuZXdfc3RhdHVzKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuJiM0MztcdHdhc19yZXZva2VkID0gKHByaXYtXHUwMDNlc3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQpO1xuJiM0MztcbiYjNDM7XHRpZiAobmV3X3N0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spIHtcbiYjNDM7XHRcdHByaXYtXHUwMDNlc3RhdHVzID0gbmV3X3N0YXR1czsgLyogVGVtcCBvciBwZXJtYW5lbnRseSByZXZva2VkICovXG4mIzQzO1xuJiM0MztcdFx0aWYgKHdhc19yZXZva2VkKSB7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIFRFTVBfUkVWT0tFRCBpcyBiZWluZyB1cGdyYWRlZCB0b1xuJiM0MztcdFx0XHQgKiBQRVJNX1JFVk9LRUQuICBUaGUgYnVmZmVyIGlzIGFscmVhZHkgZ29uZSxcbiYjNDM7XHRcdFx0ICogZG9uJiMzOTt0IHdhaXQgb24gaXQgYWdhaW4uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGRtYV9idWZfaW52YWxpZGF0ZV9tYXBwaW5ncyhwcml2LVx1MDAzZWRtYWJ1Zik7XG4mIzQzO1x0XHRkbWFfcmVzdl93YWl0X3RpbWVvdXQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdixcbiYjNDM7XHRcdFx0XHQgICAgICBETUFfUkVTVl9VU0FHRV9CT09LS0VFUCwgZmFsc2UsXG4mIzQzO1x0XHRcdFx0ICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuJiM0MztcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuJiM0MztcdFx0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpO1xuJiM0MztcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuJiM0MztcdFx0dW5tYXBfbWFwcGluZ19yYW5nZShwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlLVx1MDAzZWZfbWFwcGluZyxcbiYjNDM7XHRcdFx0XHQgICAgMCwgcHJpdi1cdTAwM2VzaXplLCB0cnVlKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBSZS1hcm0gdGhlIHJlZ2lzdGVyZWQga3JlZiByZWZlcmVuY2UgYW5kIHRoZVxuJiM0MztcdFx0ICogY29tcGxldGlvbiBzbyB0aGUgcG9zdC1yZXZva2Ugc3RhdGUgbWF0Y2hlcyB0aGVcbiYjNDM7XHRcdCAqIHBvc3QtY3JlYXRpb24gc3RhdGUuICBBbiB1bi1yZXZva2UgZm9sbG93ZWQgYnkgYVxuJiM0MztcdFx0ICogbmV3IG1hcHBpbmcgbmVlZHMgdGhlIGtyZWYgdG8gYmUgbm9uLXplcm8gYmVmb3JlXG4mIzQzO1x0XHQgKiBrcmVmX2dldCgpLCBhbmQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKClcbiYjNDM7XHRcdCAqIGRlbGVnYXRlcyBpdHMgZHJhaW4gYmFjayB0aHJvdWdoIHRoaXMgcmV2b2tlXG4mIzQzO1x0XHQgKiBwYXRoIG9uIGEgcG9zc2libHktYWxyZWFkeS1yZXZva2VkIGRtYS1idWYuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuJiM0MztcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2Vjb21wKTtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cHJpdi1cdTAwM2VzdGF0dXMgPSBWRklPX1BDSV9ETUFCVUZfT0s7XG4mIzQzO1x0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4gXG4gdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4gXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdG1wO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogSG9sZGluZyBtZW1vcnlfbG9jayBlbnN1cmVzIGEgcmFjaW5nIFZNQSBmYXVsdCBvYnNlcnZlc1xuJiM0MztcdCAqIHByaXYtXHUwMDNlc3RhdHVzIHByb3Blcmx5LlxuJiM0MztcdCAqL1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcywgZG1hYnVmc19lbG0pIHtcbiBcdFx0aWYgKCFnZXRfZmlsZV9hY3RpdmUoXHUwMDI2cHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlZmlsZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChwcml2LVx1MDAzZXJldm9rZWQgIT0gcmV2b2tlZCkge1xuLVx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4tXHRcdFx0aWYgKHJldm9rZWQpXG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSB0cnVlO1xuLVx0XHRcdGRtYV9idWZfaW52YWxpZGF0ZV9tYXBwaW5ncyhwcml2LVx1MDAzZWRtYWJ1Zik7XG4tXHRcdFx0ZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsXG4tXHRcdFx0XHRcdCAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSxcbi1cdFx0XHRcdFx0ICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuLVx0XHRcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbi1cdFx0XHRpZiAocmV2b2tlZCkge1xuLVx0XHRcdFx0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpO1xuLVx0XHRcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIFJlLWFybSB0aGUgcmVnaXN0ZXJlZCBrcmVmIHJlZmVyZW5jZSBhbmQgdGhlXG4tXHRcdFx0XHQgKiBjb21wbGV0aW9uIHNvIHRoZSBwb3N0LXJldm9rZSBzdGF0ZSBtYXRjaGVzIHRoZVxuLVx0XHRcdFx0ICogcG9zdC1jcmVhdGlvbiBzdGF0ZS4gIEFuIHVuLXJldm9rZSBmb2xsb3dlZCBieSBhXG4tXHRcdFx0XHQgKiBuZXcgbWFwcGluZyBuZWVkcyB0aGUga3JlZiB0byBiZSBub24temVybyBiZWZvcmVcbi1cdFx0XHRcdCAqIGtyZWZfZ2V0KCksIGFuZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKVxuLVx0XHRcdFx0ICogZGVsZWdhdGVzIGl0cyBkcmFpbiBiYWNrIHRocm91Z2ggdGhpcyByZXZva2Vcbi1cdFx0XHRcdCAqIHBhdGggb24gYSBwb3NzaWJseS1hbHJlYWR5LXJldm9rZWQgZG1hLWJ1Zi5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0a3JlZl9pbml0KFx1MDAyNnByaXYtXHUwMDNla3JlZik7XG4tXHRcdFx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuLVx0XHRcdFx0cHJpdi1cdTAwM2VyZXZva2VkID0gZmFsc2U7XG4tXHRcdFx0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4tXHRcdFx0fVxuLVx0XHR9XG4mIzQzO1x0XHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdiwgcmV2b2tlZCA/XG4mIzQzO1x0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCA6XG4mIzQzO1x0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX09LKTtcbiBcdFx0ZnB1dChwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlKTtcbiBcdH1cbiB9XG5AQCAtNDA0LDMgJiM0Mzs3MDYsMTE3IEBAIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdH1cbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIH1cbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4mIzQzO1x0c2l6ZV90IGFyZ3N6KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgZGJfcmV2b2tlO1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2ZGV2LVx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXG4mIzQzO1x0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuJiM0MztcdFx0XHRcdCBzaXplb2YoZGJfcmV2b2tlKSk7XG4mIzQzO1x0aWYgKHJldCAhPSAxKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKGNvcHlfZnJvbV91c2VyKFx1MDAyNmRiX3Jldm9rZSwgYXJnLCBzaXplb2YoZGJfcmV2b2tlKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfcmV2b2tlLmRtYWJ1Zl9mZCk7XG4mIzQzO1x0aWYgKElTX0VSUihkbWFidWYpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2FuaXR5LWNoZWNrIHRoZSBETUFCVUYgaXMgcmVhbGx5IGEgdmZpb19wY2lfZG1hX2J1ZiBfYW5kX1xuJiM0MztcdCAqIHJlbGF0ZXMgdG8gdGhlIFZGSU8gZGV2aWNlIGl0IHdhcyBwcm92aWRlZCB3aXRoLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSWYgdGhlIERNQUJVRiByZWxhdGVzIHRvIHRoaXMgdmRldiB0aGVuIHByaXYtXHUwMDNldmRldiBpc1xuJiM0MztcdCAqIHN0YWJsZSBiZWNhdXNlIHRoaXMgb3BlbiBmZCBwcmV2ZW50cyBjbGVhbnVwLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogSWYgaXQgcmVsYXRlcyB0byBhIGRpZmZlcmVudCB2ZGV2LCByZWFkaW5nIHByaXYtXHUwMDNldmRldiBtaWdodFxuJiM0MztcdCAqIHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgY2xlYW51cCBvbiB0aGF0IGRldmljZS4gIEJ1dCBpZiBzbyxcbiYjNDM7XHQgKiBpdCBwb2ludHMgdG8gYSBub24tbWF0Y2hpbmcgdmRldiBvciBOVUxMIGFuZCBpcyB1bnVzYWJsZVxuJiM0MztcdCAqIGVpdGhlciB3YXkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGRtYWJ1Zi1cdTAwM2VvcHMgIT0gXHUwMDI2dmZpb19wY2lfZG1hYnVmX29wcyB8fFxuJiM0MztcdCAgICBSRUFEX09OQ0UocHJpdi1cdTAwM2V2ZGV2KSAhPSB2ZGV2KSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PREVWO1xuJiM0MztcdFx0Z290byBvdXRfcHV0X2J1ZjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNjb3BlZF9ndWFyZChyd3NlbV93cml0ZSwgXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jaykge1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlc3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLUVCQURGRDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhwcml2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCk7XG4mIzQzO1x0XHRcdHJldCA9IDA7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7b3V0X3B1dF9idWY6XG4mIzQzO1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIF9fdXNlciAqYXJnLFxuJiM0MztcdHNpemVfdCBhcmdzeilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBkYl9hdHRyO1xuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuJiM0MztcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF2ZGV2LVx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXMpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXG4mIzQzO1x0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuJiM0MztcdFx0XHRcdCBzaXplb2YoZGJfYXR0cikpO1xuJiM0MztcdGlmIChyZXQgIT0gMSlcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkYl9hdHRyLCBhcmcsIHNpemVvZihkYl9hdHRyKSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVGQVVMVDtcbiYjNDM7XG4mIzQzO1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfYXR0ci5kbWFidWZfZmQpO1xuJiM0MztcdGlmIChJU19FUlIoZG1hYnVmKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XG4mIzQzO1xuJiM0MztcdC8qIFZlcmlmeSBETUFCVUY6IHNlZSBjb21tZW50cyBpbiB2ZmlvX3BjaV9kbWFfYnVmX3Jldm9rZSgpICovXG4mIzQzO1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuJiM0MztcdGlmIChkbWFidWYtXHUwMDNlb3BzICE9IFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHxcbiYjNDM7XHQgICAgUkVBRF9PTkNFKHByaXYtXHUwMDNldmRldikgIT0gdmRldikge1xuJiM0MztcdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dF9idWY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGRiX2F0dHIubWVtYXR0cikge1xuJiM0MztcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfTkM6XG4mIzQzO1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQzpcbiYjNDM7XHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VtZW1hdHRyLCBkYl9hdHRyLm1lbWF0dHIpO1xuJiM0MztcdFx0cmV0ID0gMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0ID0gLUVOT0VOVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztvdXRfcHV0X2J1ZjpcbiYjNDM7XHRkbWFfYnVmX3B1dChkbWFidWYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzOyNlbmRpZiAvKiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuaW5kZXggZmNhOWQwZGZhYzkwZjguLmIzYzcyZGYwMDJjNDQ4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5AQCAtMjMsNiAmIzQzOzIzLDI4IEBAIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQge1xuIFx0Ym9vbFx0XHRcdHRlc3RfbWVtO1xuIH07XG4gXG4mIzQzO2VudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMge1xuJiM0MztcdFZGSU9fUENJX0RNQUJVRl9PSyA9IDAsXG4mIzQzO1x0VkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCA9IDEsXG4mIzQzO1x0VkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCA9IDIsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4mIzQzO1x0c3RydWN0IGRtYV9idWYgKmRtYWJ1ZjtcbiYjNDM7XHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCBkbWFidWZzX2VsbTtcbiYjNDM7XHRzaXplX3Qgc2l6ZTtcbiYjNDM7XHRzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjO1xuJiM0MztcdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyO1xuJiM0MztcdHN0cnVjdCBmaWxlICp2ZmlsZTtcbiYjNDM7XHR1MzIgbnJfcmFuZ2VzO1xuJiM0MztcdHN0cnVjdCBrcmVmIGtyZWY7XG4mIzQzO1x0c3RydWN0IGNvbXBsZXRpb24gY29tcDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtYV9wZ29mZl9hZGp1c3Q7XG4mIzQzO1x0dTMyIG1lbWF0dHI7XG4mIzQzO1x0ZW51bSB2ZmlvX3BjaV9kbWFfYnVmX3N0YXR1cyBzdGF0dXM7XG4mIzQzO307XG4mIzQzO1xuIGJvb2wgdmZpb19wY2lfaW50eF9tYXNrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9pbnR4X3VubWFzayhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIFxuQEAgLTY4LDcgJiM0Mzs5MCw4IEBAIHZvaWQgdmZpb19jb25maWdfZnJlZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIGludCB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0XHRcdCAgICAgcGNpX3Bvd2VyX3Qgc3RhdGUpO1xuIFxuLXZvaWQgdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4mIzQzO3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuJiM0Mzt2b2lkIHZmaW9fcGNpX3VucmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB1MTYgdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHRcdHUxNiBjbWQpO1xuQEAgLTExNCwxMiAmIzQzOzEzNywzMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgdmZpb19wY2lfaXNfdmdhKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0cmV0dXJuIChwZGV2LVx1MDAzZWNsYXNzIFx1MDAzZVx1MDAzZSA4KSA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0E7XG4gfVxuIFxuJiM0MztpbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdnBkbWFidWYsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3Bmbik7XG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCAgIHU2NCBwaHlzX3N0YXJ0LCB1NjQgcmVxX2xlbixcbiYjNDM7XHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcmVzX2luZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuJiM0Mzt2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbiBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgX191c2VyICphcmcsXG4gXHRcdFx0XHQgIHNpemVfdCBhcmdzeik7XG4tdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbi12b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7XG4mIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4mIzQzO1x0c2l6ZV90IGFyZ3N6KTtcbiYjNDM7aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIF9fdXNlciAqYXJnLFxuJiM0MztcdHNpemVfdCBhcmdzeik7XG4gI2Vsc2VcbiBzdGF0aWMgaW5saW5lIGludFxuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuQEAgLTEyOCwxMiAmIzQzOzE3MCwyMSBAQCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiB7XG4gXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4mIzQzO1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4mIzQzO1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4mIzQzO1x0c2l6ZV90IGFyZ3N6KVxuIHtcbiYjNDM7XHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4tc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4tXHRcdFx0XHRcdCBib29sIHJldm9rZWQpXG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKFxuJiM0MztcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuJiM0MztcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBfX3VzZXIgKmFyZyxcbiYjNDM7XHRzaXplX3QgYXJnc3opXG4ge1xuJiM0MztcdHJldHVybiAtRU5PVFRZO1xuIH1cbiAjZW5kaWZcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaCBiL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oXG5pbmRleCA4NzNkZTIwYTIyNDc1OS4uNGM0MmE3YjJlZTg1NTggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcbkBAIC02Nyw5ICYjNDM7NjcsMjIgQEAgZW51bSBwY2lfcDJwZG1hX21hcF90eXBlIHtcbiBcdFBDSV9QMlBETUFfTUFQX1RIUlVfSE9TVF9CUklER0UsXG4gfTtcbiBcbi0jaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcbiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BX0NPUkVcbiBpbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldik7XG4gc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgaW50IGJhcilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXG4gaW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLCBzaXplX3Qgc2l6ZSxcbiBcdFx0dTY0IG9mZnNldCk7XG4gaW50IHBjaV9wMnBkbWFfZGlzdGFuY2VfbWFueShzdHJ1Y3QgcGNpX2RldiAqcHJvdmlkZXIsIHN0cnVjdCBkZXZpY2UgKipjbGllbnRzLFxuQEAgLTg5LDE1ICYjNDM7MTAyLDYgQEAgc3NpemVfdCBwY2lfcDJwZG1hX2VuYWJsZV9zaG93KGNoYXIgKnBhZ2UsIHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2LFxuIGVudW0gcGNpX3AycGRtYV9tYXBfdHlwZSBwY2lfcDJwZG1hX21hcF90eXBlKHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2UgKmRldik7XG4gI2Vsc2UgLyogQ09ORklHX1BDSV9QMlBETUEgKi9cbi1zdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLXtcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi19XG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi1cdFx0XHRcdFx0XHRcdCAgIGludCBiYXIpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLFxuIFx0XHRzaXplX3Qgc2l6ZSwgdTY0IG9mZnNldClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDJjNDQ1NDU4M2MxMTViLi41MzFhZWMzNTU2ODZiMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC01NTcsNyAmIzQzOzU1Nyw3IEBAIHN0cnVjdCBwY2lfZGV2IHtcbiBcdHUxNlx0XHRwYXNpZF9jYXA7XHQvKiBQQVNJRCBDYXBhYmlsaXR5IG9mZnNldCAqL1xuIFx0dTE2XHRcdHBhc2lkX2ZlYXR1cmVzO1xuICNlbmRpZlxuLSNpZmRlZiBDT05GSUdfUENJX1AyUERNQVxuJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFfQ09SRVxuIFx0c3RydWN0IHBjaV9wMnBkbWEgX19yY3UgKnAycGRtYTtcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX1BDSV9ET0VcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5pbmRleCA4OTE2NWI3NjllNWMxNi4uYTJmNTg2ZTRmY2Q4ZDQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XG4gXHRib29sXHRcdFx0bmVlZHNfcG1fcmVzdG9yZToxO1xuIFx0Ym9vbFx0XHRcdHBtX2ludHhfbWFza2VkOjE7XG4gXHRib29sXHRcdFx0cG1fcnVudGltZV9lbmdhZ2VkOjE7XG4mIzQzO1x0Ym9vbFx0XHRcdHphcF9iYXJzX29uX3Jldm9rZToxO1xuIFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVx0KnBjaV9zYXZlZF9zdGF0ZTtcbiBcdHN0cnVjdCBwY2lfc2F2ZWRfc3RhdGVcdCpwbV9zYXZlO1xuIFx0aW50XHRcdFx0aW9ldmVudGZkc19ucjtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuaW5kZXggNWRlNjE4YTNhNWVlZWUuLmFiMzBiODkzOTlkMDM4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxuQEAgLTE1MzQsNiAmIzQzOzE1MzQsNTMgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XG4gICovXG4gI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX01JR19QUkVDT1BZX0lORk92MiAgMTJcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIEdpdmVuIGEgZG1hX2J1ZiBmZCBwcmV2aW91c2x5IGNyZWF0ZWQgYnlcbiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBhIFNFVCBvZiB0aGlzIGZlYXR1cmUgcmVxdWVzdHMgdGhhdFxuJiM0MzsgKiBhY2Nlc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgRE1BQlVGIGlzIGltbWVkaWF0ZWx5IGFuZCBwZXJtYW5lbnRseVxuJiM0MzsgKiByZXZva2VkLiAgT24gc3VjY2Vzc2Z1bCByZXR1cm4sIHRoZSBidWZmZXIgaXMgbm90IGFjY2Vzc2libGVcbiYjNDM7ICogdGhyb3VnaCBhbnkgbW1hcCgpIG9yIGRtYS1idWYgaW1wb3J0LiAgVGhlIGJ1ZmZlciBpcyBwZXJtYW5lbnRseVxuJiM0MzsgKiBkaXNhYmxlZCwgYW5kIFZGSU8gcmVmdXNlcyBhbGwgbWFwLCBtbWFwLCBhdHRhY2gsIGV0Yy4gcmVxdWVzdHMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6XG4mIzQzOyAqXG4mIzQzOyAqICBFQkFERiwgRUlOVkFMOiBkbWFidWZfZmQgaXMgbm90IGEgRE1BQlVGIGZkLlxuJiM0MzsgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuXG4mIzQzOyAqICBFQkFERkQ6IFRoZSBETUFCVUYgaXMgYWxyZWFkeSByZXZva2VkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIDEzXG4mIzQzO1xuJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSB7XG4mIzQzO1x0X19zMzJcdGRtYWJ1Zl9mZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBHaXZlbiBhIGRtYV9idWYgZmQgcHJldmlvdXNseSBjcmVhdGVkIGJ5XG4mIzQzOyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiwgU0VUIHRoZSBtZW1vcnkgYXR0cmlidXRlIHRoYXQgd2lsbCBiZVxuJiM0MzsgKiB1c2VkIGJ5IGZ1dHVyZSBtbWFwKClzIG9mIHRoYXQgZmQuICBTRVR0aW5nIGEgbmV3IGF0dHJpYnV0ZSBkb2VzXG4mIzQzOyAqIG5vdCBhZmZlY3QgZXhpc3RpbmcgVk1Bcy5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGRlZmF1bHQsIGlmIG5vIHByZXZpb3VzIFNFVCBoYXMgYmVlbiBwZXJmb3JtZWQsIGlzIE5DLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEgYW5kIGVycm5vIGlzIHNldCBvbiBmYWlsdXJlOlxuJiM0MzsgKlxuJiM0MzsgKiAgRUJBREYsIEVJTlZBTDogZG1hYnVmX2ZkIGlzIG5vdCBhIERNQUJVRiBmZC5cbiYjNDM7ICogIEVOT0RFVjogVGhlIGRtYWJ1Zl9mZCBkb2VzIG5vdCBtYXRjaCB0aGlzIFZGSU8gZGV2aWNlLlxuJiM0MzsgKiAgRU5PRU5UOiBUaGUgZ2l2ZW4gbWVtYXR0ciBpcyBub3Qgc3VwcG9ydGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUiAxNFxuJiM0MztcbiYjNDM7LyogVmFsaWQgbWVtb3J5IGF0dHJpYnV0ZXMgZm9yIHRoZSBtZW1hdHRyIGZpZWxkICovXG4mIzQzO2VudW0gdmZpb19kZXZpY2VfZG1hX2J1Zl9tZW1hdHRyIHtcbiYjNDM7XHRWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQyA9IDAsIC8qIHBncHJvdF9ub25jYWNoZWQgKi9cbiYjNDM7XHRWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQyA9IDEsIC8qIHBncHJvdF93cml0ZWNvbWJpbmUgKi9cbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciB7XG4mIzQzO1x0X19zMzJcdGRtYWJ1Zl9mZDtcbiYjNDM7XHRfX3UzMlx0bWVtYXR0cjtcbiYjNDM7fTtcbiYjNDM7XG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXG4gXG4gLyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VkZJT19QQ0kmIzM0OywKICAgICYjMzQ7UENJX1AyUERNQSYjMzQ7LAogICAgJiMzNDtaT05FX0RFVklDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfbW1hcCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRklPIGZlYXR1cmVzIChWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIGFuZCBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUikgYW5kIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsaW5nIHRvIHVzZSBETUFCVUYtYmFja2VkIG1tYXBzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmUzMDc5NzdiNjE0OTM1NTA4OWJhMDgzMTMzYWYyMTM3ZGQxNDViMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIgMDA6MjA6MDQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGM4ZDRiOTEzZjI2YzEyLi43MTM4NjFhZjQ0ODQ2YSAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKJiM0MzsmIzQzOyYjNDM7IGIvTUFJTlRBSU5FUlMKQEAgLTIwNjI2LDcgJiM0MzsyMDYyNiw3IEBAIEI6CWh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZwogQzoJaXJjOi8vaXJjLm9mdGMubmV0L2xpbnV4LXBjaQogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9wY2kvcGNpLmdpdAogRjoJRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BjaS9wMnBkbWEucnN0Ci1GOglkcml2ZXJzL3BjaS9wMnBkbWEuYwomIzQzO0Y6CWRyaXZlcnMvcGNpL3AycGRtYSoKIEY6CWluY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oCiAKIFBDSSBQT1dFUiBDT05UUk9MCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9LY29uZmlnIGIvZHJpdmVycy9wY2kvS2NvbmZpZwppbmRleCAzM2M4ODQzMmI3Mjg3NS4uNTlkNzBiYzg0Y2M5YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvS2NvbmZpZwpAQCAtMjA2LDExICYjNDM7MjA2LDcgQEAgY29uZmlnIFBDSUVfVFBICiBjb25maWcgUENJX1AyUERNQQogCWJvb2wgJiMzNDtQQ0kgcGVlci10by1wZWVyIHRyYW5zZmVyIHN1cHBvcnQmIzM0OwogCWRlcGVuZHMgb24gWk9ORV9ERVZJQ0UKLQkjCi0JIyBUaGUgbmVlZCBmb3IgdGhlIHNjYXR0ZXJsaXN0IERNQSBidXMgYWRkcmVzcyBmbGFnIG1lYW5zIFBDSSBQMlBETUEKLQkjIHJlcXVpcmVzIDY0Yml0Ci0JIwotCWRlcGVuZHMgb24gNjRCSVQKJiM0MzsJc2VsZWN0IFBDSV9QMlBETUFfQ09SRQogCXNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUgogCXNlbGVjdCBORUVEX1NHX0RNQV9GTEFHUwogCWhlbHAKQEAgLTIyNiw2ICYjNDM7MjIyLDEwIEBAIGNvbmZpZyBQQ0lfUDJQRE1BCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKJiM0Mztjb25maWcgUENJX1AyUERNQV9DT1JFCiYjNDM7CWRlZmF1bHQgbgomIzQzOwlib29sCiYjNDM7CiBjb25maWcgUENJX0xBQkVMCiAJZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpCiAJc2VsZWN0IE5MUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCA0MWViYzNiOWE1MTgyNC4uMGIzMjU3MmQ1N2ExNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlCkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBvYmotJChDT05GSUdfUENJX1NZU0NBTEwpCSYjNDM7PSBzeXNjYWxsLm8KIG9iai0kKENPTkZJR19QQ0lfU1RVQikJCSYjNDM7PSBwY2ktc3R1Yi5vCiBvYmotJChDT05GSUdfUENJX1BGX1NUVUIpCSYjNDM7PSBwY2ktcGYtc3R1Yi5vCiBvYmotJChDT05GSUdfUENJX0VDQU0pCQkmIzQzOz0gZWNhbS5vCiYjNDM7b2JqLSQoQ09ORklHX1BDSV9QMlBETUFfQ09SRSkJJiM0Mzs9IHAycGRtYV9jb3JlLm8KIG9iai0kKENPTkZJR19QQ0lfUDJQRE1BKQkmIzQzOz0gcDJwZG1hLm8KIG9iai0kKENPTkZJR19YRU5fUENJREVWX0ZST05URU5EKSAmIzQzOz0geGVuLXBjaWZyb250Lm8KIG9iai0kKENPTkZJR19WR0FfQVJCKQkJJiM0Mzs9IHZnYWFyYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wMnBkbWEuYyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jCmluZGV4IDdjODk4NTQyYWY4ZDVlLi41MGIxYTdkYWY1NWNjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcDJwZG1hLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcDJwZG1hLmMKQEAgLTIxLDEyICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3NlcV9idWYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKIAotc3RydWN0IHBjaV9wMnBkbWEgewotCXN0cnVjdCBnZW5fcG9vbCAqcG9vbDsKLQlib29sIHAycG1lbV9wdWJsaXNoZWQ7Ci0Jc3RydWN0IHhhcnJheSBtYXBfdHlwZXM7Ci0Jc3RydWN0IHAycGRtYV9wcm92aWRlciBtZW1bUENJX1NURF9OVU1fQkFSU107Ci19OwomIzQzOyNpbmNsdWRlICYjMzQ7cDJwZG1hLmgmIzM0OwogCiBzdHJ1Y3QgcGNpX3AycGRtYV9wYWdlbWFwIHsKIAlzdHJ1Y3QgZGV2X3BhZ2VtYXAgcGdtYXA7CkBAIC0yMjYsMTEwICYjNDM7MjIxLDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHAycGRtYV9wZ21hcF9vcHMgPSB7CiAJLmZvbGlvX2ZyZWUgPSBwMnBkbWFfZm9saW9fZnJlZSwKIH07CiAKLXN0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZSh2b2lkICpkYXRhKQomIzQzO3ZvaWQgcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhOwotCXN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7Ci0KLQlwMnBkbWEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtJmd0O3AycGRtYSwgMSk7Ci0JaWYgKCFwMnBkbWEpCi0JCXJldHVybjsKLQotCS8qIEZsdXNoIGFuZCBkaXNhYmxlIHBjaV9hbGxvY19wMnBfbWVtKCkgKi8KLQlwZGV2LSZndDtwMnBkbWEgPSBOVUxMOwotCWlmIChwMnBkbWEtJmd0O3Bvb2wpCi0JCXN5bmNocm9uaXplX3JjdSgpOwotCXhhX2Rlc3Ryb3koJmFtcDtwMnBkbWEtJmd0O21hcF90eXBlcyk7Ci0KIAlpZiAoIXAycGRtYS0mZ3Q7cG9vbCkKIAkJcmV0dXJuOwogCiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwogCWdlbl9wb29sX2Rlc3Ryb3kocDJwZG1hLSZndDtwb29sKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmFtcDtwZGV2LSZndDtkZXYua29iaiwgJmFtcDtwMnBtZW1fZ3JvdXApOwogfQogCi0vKioKLSAqIHBjaW1fcDJwZG1hX2luaXQgLSBJbml0aWFsaXNlIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXJzCi0gKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3IKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBwZWVyLXRvLXBlZXIgRE1BIGluZnJhc3RydWN0dXJlCi0gKiBmb3IgYSBQQ0kgZGV2aWNlLiBJdCBhbGxvY2F0ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhCi0gKiBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgUDJQRE1BIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBtYXBwaW5nIHR5cGUKLSAqIHRyYWNraW5nLgotICovCi1pbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwOwotCWludCBpLCByZXQ7Ci0KLQlwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtJmd0O3AycGRtYSwgMSk7Ci0JaWYgKHAycCkKLQkJcmV0dXJuIDA7Ci0KLQlwMnAgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwMnApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JeGFfaW5pdCgmYW1wO3AycC0mZ3Q7bWFwX3R5cGVzKTsKLQkvKgotCSAqIEl0ZXJhdGUgb3ZlciBhbGwgc3RhbmRhcmQgUENJIEJBUnMgYW5kIHJlY29yZCBvbmx5IHRob3NlIHRoYXQKLQkgKiBjb3JyZXNwb25kIHRvIE1NSU8gcmVnaW9ucy4gU2tpcCBub24tbWVtb3J5IHJlc291cmNlcyAoZS5nLiBJL08KLQkgKiBwb3J0IEJBUnMpIHNpbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgZm9yIHBlZXItdG8tcGVlciAoUDJQKQotCSAqIHRyYW5zYWN0aW9ucy4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpICZsdDsgUENJX1NURF9OVU1fQkFSUzsgaSYjNDM7JiM0MzspIHsKLQkJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICZhbXA7IElPUkVTT1VSQ0VfTUVNKSkKLQkJCWNvbnRpbnVlOwotCi0JCXAycC0mZ3Q7bWVtW2ldLm93bmVyID0gJmFtcDtwZGV2LSZndDtkZXY7Ci0JCXAycC0mZ3Q7bWVtW2ldLmJ1c19vZmZzZXQgPQotCQkJcGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpOwotCX0KLQotCXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCgmYW1wO3BkZXYtJmd0O2RldiwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTsKLQlpZiAocmV0KQotCQlnb3RvIG91dF9wMnA7Ci0KLQlyY3VfYXNzaWduX3BvaW50ZXIocGRldi0mZ3Q7cDJwZG1hLCBwMnApOwotCXJldHVybiAwOwotCi1vdXRfcDJwOgotCWRldm1fa2ZyZWUoJmFtcDtwZGV2LSZndDtkZXYsIHAycCk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX2luaXQpOwotCi0vKioKLSAqIHBjaW1fcDJwZG1hX3Byb3ZpZGVyIC0gR2V0IHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXIKLSAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvcgotICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlcgotICoKLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyIGZvciBhIFBDSSBkZXZpY2UuIFRoZSBsaWZldGltZQotICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlCi0gKiBkcml2ZXIuIEEgZHJpdmVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBtdXN0IGVuc3VyZSB0aGF0IGFsbCByZWZlcmVuY2VzIHRvIHRoZQotICogcHJvdmlkZXIsIGFuZCBhbnkgRE1BIG1hcHBpbmdzIGNyZWF0ZWQgZm9yIGFueSBNTUlPLCBhcmUgYWxsIGNsZWFuZWQgdXAKLSAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy4KLSAqCi0gKiBTaW5jZSBQMlAgaXMgYWxtb3N0IGFsd2F5cyBzaGFyZWQgd2l0aCBhIHNlY29uZCBkcml2ZXIgdGhpcyBtZWFucyBzb21lIHN5c3RlbQotICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8mIzM5O3MgRE1BIG11c3QgYmUgaW4gcGxhY2UgdG8gdXNlIHRoaXMKLSAqIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSBhIHJldm9rZSBjYW4gYmUgYnVpbHQgdXNpbmcgRE1BQlVGLgotICovCi1zdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcikKLXsKLQlzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwOwotCi0JaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGJhcikgJmFtcDsgSU9SRVNPVVJDRV9NRU0pKQotCQlyZXR1cm4gTlVMTDsKLQotCXAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi0mZ3Q7cDJwZG1hLCAxKTsKLQlpZiAoV0FSTl9PTighcDJwKSkKLQkJLyogU29tZW9uZSBmb3Jnb3QgdG8gY2FsbCB0byBwY2ltX3AycGRtYV9pbml0KCkgYmVmb3JlICovCi0JCXJldHVybiBOVUxMOwotCi0JcmV0dXJuICZhbXA7cDJwLSZndDttZW1bYmFyXTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX3Byb3ZpZGVyKTsKLQogc3RhdGljIGludCBwY2lfcDJwZG1hX3NldHVwX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTsKQEAgLTkzMiw4ICYjNDM7ODMzLDggQEAgdm9pZCAqcGNpX2FsbG9jX3AycG1lbShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUpCiAJc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTsKIAogCS8qCi0JICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2UoKSB0bwotCSAqIGVuc3VyZSBwZGV2LSZndDtwMnBkbWEgaXMgbm9uLU5VTEwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKJiM0MzsJICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbCgpCiYjNDM7CSAqIHRvIGVuc3VyZSBwZGV2LSZndDtwMnBkbWEgaXMgbm9uLU5VTEwgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUKIAkgKiByZWFkLWxvY2suCiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmggYi9kcml2ZXJzL3BjaS9wMnBkbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uOTQ2MzgzODA5OTgxNDkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3BjaS9wMnBkbWEuaApAQCAtMCwwICYjNDM7MSwyOSBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCiYjNDM7LyoKJiM0MzsgKiBQQ0kgcGVlci10by1wZWVyIERNQSBzdXBwb3J0LgomIzQzOyAqLwomIzQzOwomIzQzOyNpZm5kZWYgX1BDSV9QMlBETUFfSAomIzQzOyNkZWZpbmUgX1BDSV9QMlBETUFfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9nZW5hbGxvYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2ktcDJwZG1hLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3hhcnJheS5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBwY2lfcDJwZG1hIHsKJiM0MzsJc3RydWN0IGdlbl9wb29sICpwb29sOwomIzQzOwlib29sIHAycG1lbV9wdWJsaXNoZWQ7CiYjNDM7CXN0cnVjdCB4YXJyYXkgbWFwX3R5cGVzOwomIzQzOwlzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyIG1lbVtQQ0lfU1REX05VTV9CQVJTXTsKJiM0Mzt9OwomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfUENJX1AyUERNQQomIzQzO3ZvaWQgcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpOwomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAomIzQzOwkJCQkJICAgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSkKJiM0Mzt7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzOyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuYyBiL2RyaXZlcnMvcGNpL3AycGRtYV9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmJiMjEzOGJmMmJjN2I3Ci0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuYwpAQCAtMCwwICYjNDM7MSwxMTggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qCiYjNDM7ICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydCBjb3JlLCBwcm92aWRpbmcgYSBiYXJlLWJvbmVzCiYjNDM7ICogcGNpbV9wMnBkbWFfcHJvdmlkZXIoKSBpbnRlcmZhY2UgdG8gZHJpdmVycyBldmVuIGlmIGZ1bGwgUDJQRE1BCiYjNDM7ICogaXNuJiMzOTt0IHByZXNlbnQuICBUaGUgZnVsbCBQMlBETUEgZmVhdHVyZSBpcyBpbiBwMnBkbWEuYyAoc2VlCiYjNDM7ICogQ09ORklHX1BDSV9QMlBETUEpLgomIzQzOyAqCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTgsIExvZ2FuIEd1bnRob3JwZQomIzQzOyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBNaWNyb3NlbWkgQ29ycG9yYXRpb24KJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMTcsIENocmlzdG9waCBIZWxsd2lnCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE4LCBFaWRldGljb20gSW5jLgomIzQzOyAqLwomIzQzOwomIzQzOyNkZWZpbmUgcHJfZm10KGZtdCkgJiMzNDtwY2ktcDJwZG1hOiAmIzM0OyBmbXQKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3R5cGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZ2VuYWxsb2MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWVtcmVtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpLXAycGRtYS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC94YXJyYXkuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3AycGRtYS5oJiMzNDsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2Uodm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGF0YTsKJiM0MzsJc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTsKJiM0MzsKJiM0MzsJcDJwZG1hID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LSZndDtwMnBkbWEsIDEpOwomIzQzOwlpZiAoIXAycGRtYSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogRmx1c2ggYW5kIGRpc2FibGUgcGNpX2FsbG9jX3AycF9tZW0oKSAqLwomIzQzOwlwZGV2LSZndDtwMnBkbWEgPSBOVUxMOwomIzQzOwlwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChwZGV2LCBwMnBkbWEpOwomIzQzOwl4YV9kZXN0cm95KCZhbXA7cDJwZG1hLSZndDttYXBfdHlwZXMpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVycwomIzQzOyAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvcgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZQomIzQzOyAqIGZvciBhIFBDSSBkZXZpY2UuIEl0IGFsbG9jYXRlcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGEKJiM0MzsgKiBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgUDJQRE1BIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBtYXBwaW5nIHR5cGUKJiM0MzsgKiB0cmFja2luZy4KJiM0MzsgKi8KJiM0MztpbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfcDJwZG1hICpwMnA7CiYjNDM7CWludCBpLCByZXQ7CiYjNDM7CiYjNDM7CXAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi0mZ3Q7cDJwZG1hLCAxKTsKJiM0MzsJaWYgKHAycCkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlwMnAgPSBkZXZtX2t6YWxsb2MoJmFtcDtwZGV2LSZndDtkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghcDJwKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXhhX2luaXQoJmFtcDtwMnAtJmd0O21hcF90eXBlcyk7CiYjNDM7CS8qCiYjNDM7CSAqIEl0ZXJhdGUgb3ZlciBhbGwgc3RhbmRhcmQgUENJIEJBUnMgYW5kIHJlY29yZCBvbmx5IHRob3NlIHRoYXQKJiM0MzsJICogY29ycmVzcG9uZCB0byBNTUlPIHJlZ2lvbnMuIFNraXAgbm9uLW1lbW9yeSByZXNvdXJjZXMgKGUuZy4gSS9PCiYjNDM7CSAqIHBvcnQgQkFScykgc2luY2UgdGhleSBjYW5ub3QgYmUgdXNlZCBmb3IgcGVlci10by1wZWVyIChQMlApCiYjNDM7CSAqIHRyYW5zYWN0aW9ucy4KJiM0MzsJICovCiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBQQ0lfU1REX05VTV9CQVJTOyBpJiM0MzsmIzQzOykgewomIzQzOwkJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIGkpICZhbXA7IElPUkVTT1VSQ0VfTUVNKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCXAycC0mZ3Q7bWVtW2ldLm93bmVyID0gJmFtcDtwZGV2LSZndDtkZXY7CiYjNDM7CQlwMnAtJmd0O21lbVtpXS5idXNfb2Zmc2V0ID0KJiM0MzsJCQlwY2lfYnVzX2FkZHJlc3MocGRldiwgaSkgLSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KCZhbXA7cGRldi0mZ3Q7ZGV2LCBwY2lfcDJwZG1hX3JlbGVhc2UsIHBkZXYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJZ290byBvdXRfcDJwOwomIzQzOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIocGRldi0mZ3Q7cDJwZG1hLCBwMnApOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztvdXRfcDJwOgomIzQzOwlkZXZtX2tmcmVlKCZhbXA7cGRldi0mZ3Q7ZGV2LCBwMnApOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwY2ltX3AycGRtYV9pbml0KTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwY2ltX3AycGRtYV9wcm92aWRlciAtIEdldCBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyCiYjNDM7ICogQHBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGVuYWJsZSBQMlBETUEgZm9yCiYjNDM7ICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlcgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBnZXRzIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXIgZm9yIGEgUENJIGRldmljZS4gVGhlIGxpZmV0aW1lCiYjNDM7ICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlCiYjNDM7ICogZHJpdmVyLiBBIGRyaXZlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byB0aGUKJiM0MzsgKiBwcm92aWRlciwgYW5kIGFueSBETUEgbWFwcGluZ3MgY3JlYXRlZCBmb3IgYW55IE1NSU8sIGFyZSBhbGwgY2xlYW5lZCB1cAomIzQzOyAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy4KJiM0MzsgKgomIzQzOyAqIFNpbmNlIFAyUCBpcyBhbG1vc3QgYWx3YXlzIHNoYXJlZCB3aXRoIGEgc2Vjb25kIGRyaXZlciB0aGlzIG1lYW5zIHNvbWUgc3lzdGVtCiYjNDM7ICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8mIzM5O3MgRE1BIG11c3QgYmUgaW4gcGxhY2UgdG8gdXNlIHRoaXMKJiM0MzsgKiBmdW5jdGlvbi4gRm9yIGV4YW1wbGUgYSByZXZva2UgY2FuIGJlIGJ1aWx0IHVzaW5nIERNQUJVRi4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwY2lfcDJwZG1hICpwMnA7CiYjNDM7CiYjNDM7CWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBiYXIpICZhbXA7IElPUkVTT1VSQ0VfTUVNKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwomIzQzOwlwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtJmd0O3AycGRtYSwgMSk7CiYjNDM7CWlmIChXQVJOX09OKCFwMnApKQomIzQzOwkJLyogU29tZW9uZSBmb3Jnb3QgdG8gY2FsbCB0byBwY2ltX3AycGRtYV9pbml0KCkgYmVmb3JlICovCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJcmV0dXJuICZhbXA7cDJwLSZndDttZW1bYmFyXTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfcHJvdmlkZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnIGIvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnCmluZGV4IDI5NmJmMDFlMTg1ZWNhLi42N2EyYWUxZmJjMDRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZwpAQCAtNiw2ICYjNDM7Niw4IEBAIGNvbmZpZyBWRklPX1BDSV9DT1JFCiAJdHJpc3RhdGUKIAlzZWxlY3QgVkZJT19WSVJRRkQKIAlzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSCiYjNDM7CXNlbGVjdCBQQ0lfUDJQRE1BX0NPUkUKJiM0MzsJc2VsZWN0IERNQV9TSEFSRURfQlVGRkVSCiAKIGNvbmZpZyBWRklPX1BDSV9JTlRYCiAJZGVmX2Jvb2wgeSBpZiAhUzM5MApAQCAtNTYsNyAmIzQzOzU4LDggQEAgY29uZmlnIFZGSU9fUENJX1pERVZfS1ZNCiAJICBUbyBlbmFibGUgczM5MHggS1ZNIHZmaW8tcGNpIGV4dGVuc2lvbnMsIHNheSBZLgogCiBjb25maWcgVkZJT19QQ0lfRE1BQlVGCi0JZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFICZhbXA7JmFtcDsgUENJX1AyUERNQSAmYW1wOyZhbXA7IERNQV9TSEFSRURfQlVGRkVSCiYjNDM7CWRlZl9ib29sIHkgaWYgUENJX1AyUERNQQomIzQzOwlkZXBlbmRzIG9uIFZGSU9fUENJX0NPUkUKIAogc291cmNlICYjMzQ7ZHJpdmVycy92ZmlvL3BjaS9tbHg1L0tjb25maWcmIzM0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlIGIvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZQppbmRleCA2MTM4ZjFiZjI0MWRmMC4uODgxNDUyZWE4OWJlMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZQpAQCAtMSw4ICYjNDM7MSw3IEBACiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKIAotdmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcubwomIzQzO3ZmaW8tcGNpLWNvcmUteSA6PSB2ZmlvX3BjaV9jb3JlLm8gdmZpb19wY2lfaW50cnMubyB2ZmlvX3BjaV9yZHdyLm8gdmZpb19wY2lfY29uZmlnLm8gdmZpb19wY2lfZG1hYnVmLm8KIHZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk0pICYjNDM7PSB2ZmlvX3BjaV96ZGV2Lm8KLXZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfRE1BQlVGKSAmIzQzOz0gdmZpb19wY2lfZG1hYnVmLm8KIG9iai0kKENPTkZJR19WRklPX1BDSV9DT1JFKSAmIzQzOz0gdmZpby1wY2ktY29yZS5vCiAKIHZmaW8tcGNpLXkgOj0gdmZpb19wY2kubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMKaW5kZXggYmIxMjFmNjM1YjlmN2YuLmQ5ZjI2YjBjZTk5MWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMKQEAgLTE3MjUsNiAmIzQzOzE3MjUsMTQgQEAgc3RhdGljIGludCBoaXNpX2FjY192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2UKIAlpZiAocmV0KQogCQlnb3RvIG91dF9wdXRfdmRldjsKIAomIzQzOwkvKgomIzQzOwkgKiBoaXNpX2FjY192ZmlvX3BjaV9tbWFwKCkgY2FsbHMgZG93biB0bwomIzQzOwkgKiB2ZmlvX3BjaV9jb3JlX21tYXAoKSwgc28gQkFSIG1hcHBpbmdzIGFyZSBzdGlsbAomIzQzOwkgKiBETUFCVUYtYmFja2VkLiAgVGhleSBkb24mIzM5O3QgcmVxdWlyZSBhIHphcCBvbiByZXZva2UsIHNvIG9wdAomIzQzOwkgKiBvdXQ6CiYjNDM7CSAqLwomIzQzOwloaXNpX2FjY192ZGV2LSZndDtjb3JlX2RldmljZS56YXBfYmFyc19vbl9yZXZva2UgPSBmYWxzZTsKJiM0MzsKIAloaXNpX2FjY192ZmlvX2RlYnVnX2luaXQoaGlzaV9hY2NfdmRldik7CiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jCmluZGV4IGExMGVkNzMzZjBlM2FmLi5iYzZjY2IyZTEzNWMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvbmZpZy5jCkBAIC01OTAsMTIgJiM0Mzs1OTAsMTAgQEAgc3RhdGljIGludCB2ZmlvX2Jhc2ljX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsCiAJCXZpcnRfbWVtID0gISEobGUxNl90b19jcHUoKnZpcnRfY21kKSAmYW1wOyBQQ0lfQ09NTUFORF9NRU1PUlkpOwogCQluZXdfbWVtID0gISEobmV3X2NtZCAmYW1wOyBQQ0lfQ09NTUFORF9NRU1PUlkpOwogCi0JCWlmICghbmV3X21lbSkgewotCQkJdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwotCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpOwotCQl9IGVsc2UgewomIzQzOwkJaWYgKCFuZXdfbWVtKQomIzQzOwkJCXZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7CiYjNDM7CQllbHNlCiAJCQlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwotCQl9CiAKIAkJLyoKIAkJICogSWYgdGhlIHVzZXIgaXMgd3JpdGluZyBtZW0vaW8gZW5hYmxlIChuZXdfbWVtL2lvKSBhbmQgd2UKQEAgLTYzMSw3ICYjNDM7NjI5LDcgQEAgc3RhdGljIGludCB2ZmlvX2Jhc2ljX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsCiAJCSp2aXJ0X2NtZCB8PSBjcHVfdG9fbGUxNihuZXdfY21kICZhbXA7IG1hc2spOwogCiAJCWlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKQotCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTsKJiM0MzsJCQl2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpOwogCQl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIAl9CiAKQEAgLTcxMiwxNiAmIzQzOzcxMCwxNCBAQCBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BjaV9jYXBfYmFzaWNfcGVybShzdHJ1Y3QgcGVybV9iaXRzICpwZXJtKQogc3RhdGljIHZvaWQgdmZpb19sb2NrX2FuZF9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAogCQkJCQkgIHBjaV9wb3dlcl90IHN0YXRlKQogewotCWlmIChzdGF0ZSAmZ3Q7PSBQQ0lfRDNob3QpIHsKLQkJdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwotCQl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7Ci0JfSBlbHNlIHsKJiM0MzsJaWYgKHN0YXRlICZndDs9IFBDSV9EM2hvdCkKJiM0MzsJCXZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7CiYjNDM7CWVsc2UKIAkJZG93bl93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKLQl9CiAKIAl2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgc3RhdGUpOwogCWlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKQotCQl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpOwomIzQzOwkJdmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTsKIAl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIH0KIApAQCAtOTA4LDExICYjNDM7OTA0LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19leHBfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcywKIAkJCQkJCSAmYW1wO2NhcCk7CiAKIAkJaWYgKCFyZXQgJmFtcDsmYW1wOyAoY2FwICZhbXA7IFBDSV9FWFBfREVWQ0FQX0ZMUikpIHsKLQkJCXZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTsKLQkJCXZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTsKJiM0MzsJCQl2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpOwogCQkJcGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LSZndDtwZGV2KTsKIAkJCWlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKQotCQkJCXZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7CiYjNDM7CQkJCXZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7CiAJCQl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIAkJfQogCX0KQEAgLTk5MywxMSAmIzQzOzk4OCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fYWZfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcywKIAkJCQkJCSZhbXA7Y2FwKTsKIAogCQlpZiAoIXJldCAmYW1wOyZhbXA7IChjYXAgJmFtcDsgUENJX0FGX0NBUF9GTFIpICZhbXA7JmFtcDsgKGNhcCAmYW1wOyBQQ0lfQUZfQ0FQX1RQKSkgewotCQkJdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwotCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpOwomIzQzOwkJCXZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7CiAJCQlwY2lfdHJ5X3Jlc2V0X2Z1bmN0aW9uKHZkZXYtJmd0O3BkZXYpOwogCQkJaWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpCi0JCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTsKJiM0MzsJCQkJdmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTsKIAkJCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYwppbmRleCAwNTBlNzU0Mjk1MmVkMS4uMDA1OWMxNzZkNjI3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jCkBAIC0xMiw2ICYjNDM7MTIsOCBAQAogCiAjaW5jbHVkZSAmbHQ7bGludXgvYXBlcnR1cmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZG1hLWJ1Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V2ZW50ZmQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9maWxlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CkBAIC0zMTksOCAmIzQzOzMyMSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfcnVudGltZV9wbV9lbnRyeShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJICogVGhlIHZkZXYgcG93ZXIgcmVsYXRlZCBmbGFncyBhcmUgcHJvdGVjdGVkIHdpdGggJiMzOTttZW1vcnlfbG9jayYjMzk7CiAJICogc2VtYXBob3JlLgogCSAqLwotCXZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTsKLQl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7CiYjNDM7CXZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7CiAKIAlpZiAodmRldi0mZ3Q7cG1fcnVudGltZV9lbmdhZ2VkKSB7CiAJCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwpAQCAtNDA2LDcgJiM0Mzs0MDcsNyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9ydW50aW1lX3BtX2V4aXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCWRvd25fd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiAJX192ZmlvX3BjaV9ydW50aW1lX3BtX2V4aXQodmRldik7CiAJaWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpCi0JCXZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7CiYjNDM7CQl2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpOwogCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwogfQogCkBAIC0xMjU2LDYgJiM0MzsxMjU3LDggQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9zZXRfaXJxcyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJcmV0dXJuIHJldDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHZmaW9fcGNpX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7CiYjNDM7CiBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAkJCQl2b2lkIF9fdXNlciAqYXJnKQogewpAQCAtMTI2NCw3ICYjNDM7MTI2Nyw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAogCWlmICghdmRldi0mZ3Q7cmVzZXRfd29ya3MpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwogCiAJLyoKIAkgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdoaWxlIHRoZSBwb3dlciBzdGF0ZSBpcyBub24tRDAuIElmCkBAIC0xMjc0LDEzICYjNDM7MTI3NywxOCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAkgKiBoYXZlIE5vU29mdFJzdC0sIHRoZSByZXNldCBmdW5jdGlvbiBjYW4gY2F1c2UgdGhlIFBDSSBjb25maWcgc3BhY2UKIAkgKiByZXNldCB3aXRob3V0IHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgc3RhdGUgKHNhdmVkIGxvY2FsbHkgaW4KIAkgKiAmIzM5O3ZkZXYtJmd0O3BtX3NhdmUmIzM5OykuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSB6YXAgaXMgZG9uZSBhZnRlciBtYWtpbmcgdGhlIGRldmljZSBhY2Nlc3NpYmxlIGluIEQwLAomIzQzOwkgKiBiZWNhdXNlIGEgRE1BQlVGIGltcG9ydGVyIGNvdWxkIGFjY2VzcyB0aGUgZGV2aWNlIGFzIHBhcnQKJiM0MzsJICogb2YgaXRzIHJldm9jYXRpb24gY2xlYW51cC4KIAkgKi8KIAl2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUodmRldiwgUENJX0QwKTsKIAotCXZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTsKJiM0MzsJdmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7CiYjNDM7CiAJcmV0ID0gcGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LSZndDtwZGV2KTsKIAlpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSkKLQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTsKJiM0MzsJCXZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7CiAJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMTU2OSw2ICYjNDM7MTU3NywxMCBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsCiAJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwogCWNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGOgogCQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opOwomIzQzOwljYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0U6CiYjNDM7CQlyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUjoKJiM0MzsJCXJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CkBAIC0xNjQ4LDIwICYjNDM7MTY2MCwzNyBAQCBzc2l6ZV90IHZmaW9fcGNpX2NvcmVfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNvbnN0IGNoYXIgX191c2VyICpidQogfQogRVhQT1JUX1NZTUJPTF9HUEwodmZpb19wY2lfY29yZV93cml0ZSk7CiAKLXN0YXRpYyB2b2lkIHZmaW9fcGNpX3phcF9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0MztzdGF0aWMgdm9pZCB2ZmlvX3BjaV9yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7Ci0Jc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYgPSAmYW1wO3ZkZXYtJmd0O3ZkZXY7Ci0JbG9mZl90IHN0YXJ0ID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYKTsKLQlsb2ZmX3QgZW5kID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX1JPTV9SRUdJT05fSU5ERVgpOwotCWxvZmZfdCBsZW4gPSBlbmQgLSBzdGFydDsKJiM0MzsJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKJiM0MzsJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpOwogCi0JdW5tYXBfbWFwcGluZ19yYW5nZShjb3JlX3ZkZXYtJmd0O2lub2RlLSZndDtpX21hcHBpbmcsIHN0YXJ0LCBsZW4sIHRydWUpOwomIzQzOwkvKgomIzQzOwkgKiBJZiBhIGRyaXZlciBjb3VsZCBwb3NzaWJseSBjcmVhdGUgQkFSIG1hcHBpbmdzIGluIHRoZQomIzQzOwkgKiB2ZGV2JiMzOTtzIGFkZHJlc3Nfc3BhY2UsIGRvIGFuIGFkZGl0aW9uYWwgemFwIG9uIHJldm9rZS4gIFNlZQomIzQzOwkgKiB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZSgpLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZkZXYtJmd0O3phcF9iYXJzX29uX3Jldm9rZSkgewomIzQzOwkJc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYgPSAmYW1wO3ZkZXYtJmd0O3ZkZXY7CiYjNDM7CQlsb2ZmX3Qgc3RhcnQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfQkFSMF9SRUdJT05fSU5ERVgpOwomIzQzOwkJbG9mZl90IGVuZCA9IFZGSU9fUENJX0lOREVYX1RPX09GRlNFVChWRklPX1BDSV9ST01fUkVHSU9OX0lOREVYKTsKJiM0MzsJCWxvZmZfdCBsZW4gPSBlbmQgLSBzdGFydDsKJiM0MzsKJiM0MzsJCXVubWFwX21hcHBpbmdfcmFuZ2UoY29yZV92ZGV2LSZndDtpbm9kZS0mZ3Q7aV9tYXBwaW5nLAomIzQzOwkJCQkgICAgc3RhcnQsIGxlbiwgdHJ1ZSk7CiYjNDM7CX0KIH0KIAotdm9pZCB2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQomIzQzO3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiB7CiAJZG93bl93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKLQl2ZmlvX3BjaV96YXBfYmFycyh2ZGV2KTsKJiM0MzsJdmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdmZpb19wY2lfdW5yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCiYjNDM7ewomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpOwogfQogCiB1MTYgdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpCkBAIC0xNjgzLDE4ICYjNDM7MTcxMiw2IEBAIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUxNiBjCiAJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYV90b19wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdm1hLSZndDt2bV9wcml2YXRlX2RhdGE7Ci0JaW50IGluZGV4ID0gdm1hLSZndDt2bV9wZ29mZiAmZ3Q7Jmd0OyAoVkZJT19QQ0lfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JdTY0IHBnb2ZmOwotCi0JcGdvZmYgPSB2bWEtJmd0O3ZtX3Bnb2ZmICZhbXA7Ci0JCSgoMVUgJmx0OyZsdDsgKFZGSU9fUENJX09GRlNFVF9TSElGVCAtIFBBR0VfU0hJRlQpKSAtIDEpOwotCi0JcmV0dXJuIChwY2lfcmVzb3VyY2Vfc3RhcnQodmRldi0mZ3Q7cGRldiwgaW5kZXgpICZndDsmZ3Q7IFBBR0VfU0hJRlQpICYjNDM7IHBnb2ZmOwotfQotCiB2bV9mYXVsdF90IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAkJCQkgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKIAkJCQkgICB1bnNpZ25lZCBsb25nIHBmbiwKQEAgLTE3MjIsMjQgJiM0MzsxNzM5LDEwMyBAQCBzdGF0aWMgdm1fZmF1bHRfdCB2ZmlvX3BjaV9tbWFwX2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsCiAJCQkJCSAgIHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi0mZ3Q7dm1hOwotCXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgYWRkciA9IHZtZi0mZ3Q7YWRkcmVzcyAmYW1wOyB+KChQQUdFX1NJWkUgJmx0OyZsdDsgb3JkZXIpIC0gMSk7Ci0JdW5zaWduZWQgbG9uZyBwZ29mZiA9IChhZGRyIC0gdm1hLSZndDt2bV9zdGFydCkgJmd0OyZndDsgUEFHRV9TSElGVDsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHZtYV90b19wZm4odm1hKSAmIzQzOyBwZ29mZjsKLQl2bV9mYXVsdF90IHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLOwotCi0JaWYgKGlzX2FsaWduZWRfZm9yX29yZGVyKHZtYSwgYWRkciwgcGZuLCBvcmRlcikpIHsKLQkJc2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsICZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spCi0JCQlyZXQgPSB2ZmlvX3BjaV92bWZfaW5zZXJ0X3Bmbih2ZGV2LCB2bWYsIHBmbiwgb3JkZXIpOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IHZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7CiYjNDM7CXVuc2lnbmVkIGxvbmcgcGZuID0gMDsKJiM0MzsJdm1fZmF1bHRfdCByZXQgPSBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBvbmx5IHRoaW5nIHRoaXMgY2FuIHJlbHkgb24gaXMgdGhhdCB0aGUgRE1BQlVGIHJlbGF0aW5nCiYjNDM7CSAqIHRvIHRoZSBWTUEmIzM5O3Mgdm1fZmlsZSBleGlzdHMgKHByaXYpLgomIzQzOwkgKgomIzQzOwkgKiBBIERNQUJVRiBmb3IgYSBWRklPIGRldmljZSBmZCBtbWFwKCkgaG9sZHMgYSByZWZlcmVuY2UgdG8KJiM0MzsJICogdGhlIG9yaWdpbmFsIFZGSU8gZGV2aWNlIGZkLCBidXQgYW4gZXhwbGljaXRseS1leHBvcnRlZAomIzQzOwkgKiBETUFCVUYgZG9lcyBub3QuICBUaGUgb3JpZ2luYWwgZmQgbWlnaHQgaGF2ZSBjbG9zZWQsCiYjNDM7CSAqIG1lYW5pbmcgdGhpcyBmYXVsdCBjYW4gcmFjZSB3aXRoCiYjNDM7CSAqIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cCgpLCBtZWFuaW5nIHRoZSBidWZmZXIgY291bGQgaGF2ZQomIzQzOwkgKiBiZWVuIHJldm9rZWQgKGluIHdoaWNoIGNhc2UgcHJpdi0mZ3Q7dmRldiBtaWdodCBiZSBOVUxMKSwgYW5kCiYjNDM7CSAqIHRoZSBWRklPIGRldmljZSByZWdpc3RyYXRpb24gbWlnaHQgaGF2ZSBiZWVuIGRyb3BwZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFdpdGggdGhlIGdvYWwgb2YgdGFraW5nIHZkZXYtJmd0O21lbW9yeV9sb2NrIGluIGEgd29ybGQgd2hlcmUKJiM0MzsJICogdmRldiBtaWdodCBub3Qgc3RpbGwgZXhpc3Q6CiYjNDM7CSAqCiYjNDM7CSAqIDEuIFRha2UgdGhlIHJlc3YgbG9jayBvbiB0aGUgRE1BQlVGOgomIzQzOwkgKiAgLSBJZiByYWNpbmcgY2xlYW51cCBnb3QgaW4gZmlyc3QsIHRoZSBidWZmZXIgaXMgcmV2b2tlZDsKJiM0MzsJICogICAgc3RvcC9leGl0IGlmIHNvLgomIzQzOwkgKiAgLSBJZiB3ZSBnb3QgaW4gZmlyc3QsIHRoZSBidWZmZXIgaXMgbm90IHJldm9rZWQgc28gdmRldiBpcwomIzQzOwkgKiAgICBub24tTlVMTCwgYWNjZXNzaWJsZSwgYW5kIGNsZWFudXAgX2hhcyBub3QgeWV0IHB1dCB0aGUKJiM0MzsJICogICAgVkZJTyBkZXZpY2UgcmVnaXN0cmF0aW9uXy4gIFNvLCB0aGUgZGV2aWNlIHJlZmNvdW50IG11c3QKJiM0MzsJICogICAgYmUgJmd0OzAuCiYjNDM7CSAqCiYjNDM7CSAqIDIuIFRha2UgdmZpb19kZXZpY2UgcmVnaXN0cmF0aW9uIChyZWZjb3VudCBndWFyYW50ZWVkICZndDswCiYjNDM7CSAqICAgIGhlcmVhZnRlcikuCiYjNDM7CSAqCiYjNDM7CSAqIDMuIFVubG9jayB0aGUgRE1BQlVGJiMzOTtzIHJlc3YgbG9jazoKJiM0MzsJICogIC0gQSByYWNpbmcgY2xlYW51cCBjYW4gbm93IGNvbXBsZXRlLgomIzQzOwkgKiAgLSBCdXQsIHRoZSBkZXZpY2UgcmVmY291bnQgJmd0OzAsIG1lYW5pbmcgdGhlIHZmaW9fZGV2aWNlCiYjNDM7CSAqICAgIChhbmQgdmZpb19wY2llX2NvcmUgZGV2aWNlIHZkZXYpIGhhdmUgbm90IHlldCBiZWVuCiYjNDM7CSAqICAgIGZyZWVkLiAgdmRldiBpcyBhY2Nlc3NpYmxlLCBldmVuIGlmIHRoZSBETUFCVUYgaGFzIGJlZW4KJiM0MzsJICogICAgcmV2b2tlZCBvciBjbGVhbnVwIGhhcyBoYXBwZW5lZCwgYmVjYXVzZQomIzQzOwkgKiAgICB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KCkgY2FuJiMzOTt0IGNvbXBsZXRlLgomIzQzOwkgKgomIzQzOwkgKiA0LiBUYWtlIHRoZSB2ZGV2LSZndDttZW1vcnlfbG9jawomIzQzOwkgKiAgLSBFaXRoZXIgdGhlIERNQUJVRiBpcyB1c2FibGUsIG9yIGhhcyBiZWVuIGNsZWFuZWQgdXAuCiYjNDM7CSAqICAgIFdoaWNoZXZlciwgaXQgY2FuIG5vIGxvbmdlciBjaGFuZ2UgdW5kZXIgdXMuCiYjNDM7CSAqICAtIFRlc3QgdGhlIERNQUJVRiByZXZvY2F0aW9uIHN0YXR1cyBhZ2FpbjogaWYgaXQgd2FzCiYjNDM7CSAqICAgIHJldm9rZWQgYmV0d2VlbiAxIGFuZCA0IHJldHVybiBhIFNJR0JVUy4gT3RoZXJ3aXNlLAomIzQzOwkgKiAgICByZXR1cm4gYSBQRk4uCiYjNDM7CSAqICAtIEl0JiMzOTtzIG5vdCBuZWNlc3NhcnkgdG8gYWxzbyB0YWtlIHRoZSByZXN2IGxvY2ssIGJlY2F1c2UKJiM0MzsJICogICAgdGhlIHN0YXR1cy92ZGV2IGNhbiYjMzk7dCBjaGFuZ2Ugd2hpbGUgbWVtb3J5X2xvY2sgaXMgaGVsZC4KJiM0MzsJICoKJiM0MzsJICogNS4gVW5sb2NrLCBkb25lLgomIzQzOwkgKi8KJiM0MzsKJiM0MzsJZG1hX3Jlc3ZfbG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7c3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSykgewomIzQzOwkJcHJfZGVidWdfcmF0ZWxpbWl0ZWQoJiMzNDslcyBWQSAweCVseCwgcGdvZmYgMHglbHg6IERNQUJVRiByZXZva2VkL2NsZWFuZWQgdXBcbiYjMzQ7LAomIzQzOwkJCQkgICAgIF9fZnVuY19fLCB2bWYtJmd0O2FkZHJlc3MsIHZtYS0mZ3Q7dm1fcGdvZmYpOwomIzQzOwkJZG1hX3Jlc3ZfdW5sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIElmIHRoZSBidWZmZXIgaXNuJiMzOTt0IHJldm9rZWQsIHZkZXYgaXMgdmFsaWQgKi8KJiM0MzsJdmRldiA9IHByaXYtJmd0O3ZkZXY7CiYjNDM7CiYjNDM7CWlmICghdmZpb19kZXZpY2VfdHJ5X2dldF9yZWdpc3RyYXRpb24oJmFtcDt2ZGV2LSZndDt2ZGV2KSkgewomIzQzOwkJLyoKJiM0MzsJCSAqIElmIHZkZXYgIT0gTlVMTCAoYWJvdmUpLCB0aGUgcmVnaXN0cmF0aW9uIHNob3VsZAomIzQzOwkJICogYWxyZWFkeSBiZSAmZ3Q7MCBhbmQgc28gdGhpcyB0cnlfZ2V0IHNob3VsZCBuZXZlcgomIzQzOwkJICogZmFpbC4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X3dhcm4oJmFtcDt2ZGV2LSZndDtwZGV2LSZndDtkZXYsICYjMzQ7JXM6IFVuZXhwZWN0ZWQgcmVnaXN0cmF0aW9uIGZhaWx1cmVcbiYjMzQ7LAomIzQzOwkJCSBfX2Z1bmNfXyk7CiYjNDM7CQlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiYjNDM7CX0KJiM0MzsJZG1hX3Jlc3ZfdW5sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CiYjNDM7CXNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCAmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKSB7CiYjNDM7CQkvKiBSZXZvY2F0aW9uIHN0YXR1cyBtdXN0IGJlIHJlLXJlYWQsIHVuZGVyIG1lbW9yeV9sb2NrICovCiYjNDM7CQlpZiAocHJpdi0mZ3Q7c3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9PSykgewomIzQzOwkJCWludCBwcmVzID0gdmZpb19wY2lfZG1hX2J1Zl9maW5kX3Bmbihwcml2LCB2bWEsCiYjNDM7CQkJCQkJCSAgICAgdm1mLSZndDthZGRyZXNzLAomIzQzOwkJCQkJCQkgICAgIG9yZGVyLCAmYW1wO3Bmbik7CiYjNDM7CiYjNDM7CQkJaWYgKHByZXMgPT0gMCkKJiM0MzsJCQkJcmV0ID0gdmZpb19wY2lfdm1mX2luc2VydF9wZm4odmRldiwgdm1mLAomIzQzOwkJCQkJCQkgICAgICBwZm4sIG9yZGVyKTsKJiM0MzsJCQllbHNlIGlmIChwcmVzID09IC1FQUdBSU4pCiYjNDM7CQkJCXJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLOwomIzQzOwkJfQogCX0KIAogCWRldl9kYmdfcmF0ZWxpbWl0ZWQoJmFtcDt2ZGV2LSZndDtwZGV2LSZndDtkZXYsCi0JCQkgICAmIzM0OyVzKCxvcmRlciA9ICVkKSBCQVIgJWxkIHBhZ2Ugb2Zmc2V0IDB4JWx4OiAweCV4XG4mIzM0OywKLQkJCSAgICBfX2Z1bmNfXywgb3JkZXIsCi0JCQkgICAgdm1hLSZndDt2bV9wZ29mZiAmZ3Q7Jmd0OwotCQkJCShWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSwKLQkJCSAgICBwZ29mZiwgKHVuc2lnbmVkIGludClyZXQpOwomIzQzOwkJCSAgICAmIzM0OyVzKG9yZGVyID0gJWQpIFBGTiAweCVseCwgVkEgMHglbHgsIHBnb2ZmIDB4JWx4OiAweCV4XG4mIzM0OywKJiM0MzsJCQkgICAgX19mdW5jX18sIG9yZGVyLCBwZm4sIHZtZi0mZ3Q7YWRkcmVzcywKJiM0MzsJCQkgICAgdm1hLSZndDt2bV9wZ29mZiwgKHVuc2lnbmVkIGludClyZXQpOwogCiYjNDM7CXZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oJmFtcDt2ZGV2LSZndDt2ZGV2KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNzU1LDYgJiM0MzsxODUxLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmZpb19wY2lfbW1hcF9vcHMgPSB7CiAjZW5kaWYKIH07CiAKJiM0Mzt2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQomIzQzO3sKJiM0MzsJdm1hLSZndDt2bV9vcHMgPSAmYW1wO3ZmaW9fcGNpX21tYXBfb3BzOwomIzQzO30KJiM0MzsKIGludCB2ZmlvX3BjaV9jb3JlX21tYXAoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9CkBAIC0xODAzLDcgJiM0MzsxOTA0LDEyIEBAIGludCB2ZmlvX3BjaV9jb3JlX21tYXAoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gdmRldjsKJiM0MzsJcmV0ID0gdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHZkZXYsIHZtYSwKJiM0MzsJCQkJCSAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGluZGV4KSwKJiM0MzsJCQkJCSAgICAgcmVxX2xlbiwgaW5kZXgpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKIAl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwogCXZtYS0mZ3Q7dm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtJmd0O3ZtX3BhZ2VfcHJvdCk7CiAKQEAgLTIyMjIsNiAmIzQzOzIzMjgsMTcgQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKIAlpZiAocmV0KQogCQlnb3RvIG91dF92ZjsKIAomIzQzOwkvKgomIzQzOwkgKiBJZiBhIGRyaXZlciBvdmVycmlkZXMgLm1tYXAsIGl0IGhhcyB0byBiZSBhc3N1bWVkIHRoYXQgaXQKJiM0MzsJICogbWlnaHQgbm90IHVzZSB0aGUgRE1BQlVGLWJhY2tlZCBjb3JlIG1tYXA7IHRoaXMgZmxhZwomIzQzOwkgKiBlbmFibGVzIGEgemFwIGF0IHJldm9rZSB0aW1lLiAgRHJpdmVycyBjYW4gb3B0IG91dCBieQomIzQzOwkgKiBjbGVhcmluZyB0aGlzIGZsYWcgYWZ0ZXIgcmVnaXN0cmF0aW9uLCBlLmcuIGlmIHRoZWlyIC5tbWFwCiYjNDM7CSAqIG92ZXJyaWRlIGNhbGxzIGRvd24gdG8gdmZpb19wY2lfY29yZV9tbWFwKCkgc28gdGhhdCBtYXBzCiYjNDM7CSAqIGFyZSBETUFCVUYtYmFja2VkLgomIzQzOwkgKi8KJiM0MzsJaWYgKHZkZXYtJmd0O3ZkZXYub3BzLSZndDttbWFwICE9IHZmaW9fcGNpX2NvcmVfbW1hcCkKJiM0MzsJCXZkZXYtJmd0O3phcF9iYXJzX29uX3Jldm9rZSA9IHRydWU7CiYjNDM7CiAJdmZpb19wY2lfcHJvYmVfcG93ZXJfc3RhdGUodmRldik7CiAKIAkvKgpAQCAtMjQ5Nyw5ICYjNDM7MjYxNCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsCiAJCX0KIAogCQkvKgotCQkgKiBUYWtlIHRoZSBtZW1vcnkgd3JpdGUgbG9jayBmb3IgZWFjaCBkZXZpY2UgYW5kIHphcCBCQVIKLQkJICogbWFwcGluZ3MgdG8gcHJldmVudCB0aGUgdXNlciBhY2Nlc3NpbmcgdGhlIGRldmljZSB3aGlsZSBpbgotCQkgKiByZXNldC4gIExvY2tpbmcgbXVsdGlwbGUgZGV2aWNlcyBpcyBwcm9uZSB0byBkZWFkbG9jaywKJiM0MzsJCSAqIFRha2UgdGhlIG1lbW9yeSB3cml0ZSBsb2NrIGZvciBlYWNoIGRldmljZSBhbmQKJiM0MzsJCSAqIHphcC9yZXZva2UgQkFSIG1hcHBpbmdzIHRvIHByZXZlbnQgdGhlIHVzZXIgKG9yCiYjNDM7CQkgKiBwZWVycykgYWNjZXNzaW5nIHRoZSBkZXZpY2Ugd2hpbGUgaW4gcmVzZXQuCiYjNDM7CQkgKiBMb2NraW5nIG11bHRpcGxlIGRldmljZXMgaXMgcHJvbmUgdG8gZGVhZGxvY2ssCiAJCSAqIHJ1bmF3YXkgYW5kIHVud2luZCBpZiB3ZSBoaXQgY29udGVudGlvbi4KIAkJICovCiAJCWlmICghZG93bl93cml0ZV90cnlsb2NrKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spKSB7CkBAIC0yNTA3LDggJiM0MzsyNjI1LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LAogCQkJYnJlYWs7CiAJCX0KIAotCQl2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7Ci0JCXZmaW9fcGNpX3phcF9iYXJzKHZkZXYpOwomIzQzOwkJdmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7CiAJfQogCiAJaWYgKCFsaXN0X2VudHJ5X2lzX2hlYWQodmRldiwKQEAgLTI1MzgsNyAmIzQzOzI2NTUsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2Rldl9zZXRfaG90X3Jlc2V0KHN0cnVjdCB2ZmlvX2RldmljZV9zZXQgKmRldl9zZXQsCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UodmRldiwgJmFtcDtkZXZfc2V0LSZndDtkZXZpY2VfbGlzdCwKIAkJCQkJIHZkZXYuZGV2X3NldF9saXN0KSB7CiAJCWlmICh2ZGV2LSZndDt2ZGV2Lm9wZW5fY291bnQgJmFtcDsmYW1wOyBfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKQotCQkJdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTsKJiM0MzsJCQl2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpOwogCQl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCmluZGV4IDFhMTc3Y2U3ZGU1NDZhLi4zMWZiYWQ5M2Y4OWIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jCkBAIC00LDI0ICYjNDM7NCwxMyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1idWYtbWFwcGluZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BjaS1wMnBkbWEuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9kbWEtcmVzdi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDt1YXBpL2xpbnV4L2RtYS1idWYuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt2ZmlvX3BjaV9wcml2LmgmIzM0OwogCiBNT0RVTEVfSU1QT1JUX05TKCYjMzQ7RE1BX0JVRiYjMzQ7KTsKIAotc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgewotCXN0cnVjdCBkbWFfYnVmICpkbWFidWY7Ci0Jc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2OwotCXN0cnVjdCBsaXN0X2hlYWQgZG1hYnVmc19lbG07Ci0Jc2l6ZV90IHNpemU7Ci0Jc3RydWN0IHBoeXNfdmVjICpwaHlzX3ZlYzsKLQlzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwcm92aWRlcjsKLQl1MzIgbnJfcmFuZ2VzOwotCXN0cnVjdCBrcmVmIGtyZWY7Ci0Jc3RydWN0IGNvbXBsZXRpb24gY29tcDsKLQl1OCByZXZva2VkIDogMTsKLX07Ci0KJiM0MzsjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgogc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLAogCQkJCSAgIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQpCiB7CkBAIC0zMCw3ICYjNDM7MTksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJaWYgKCFhdHRhY2htZW50LSZndDtwZWVyMnBlZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmIChwcml2LSZndDtyZXZva2VkKQomIzQzOwlpZiAocHJpdi0mZ3Q7c3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoIWRtYV9idWZfYXR0YWNoX3Jldm9jYWJsZShhdHRhY2htZW50KSkKQEAgLTM5LDYgJiM0MzsyOCw0MyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID0gZG1hYnVmLSZndDtwcml2OwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBkbWFfYnVmX21tYXBfaW50ZXJuYWwoKSBoYXMgYXNzZXJ0ZWQgdGhhdCB0aGUgVk1BIGlzCiYjNDM7CSAqIGNvbnRhaW5lZCB3aXRoaW4gdGhlIERNQUJVRiBzaXplIGJlZm9yZSBjYWxsaW5nIHRoaXMuCiYjNDM7CSAqCiYjNDM7CSAqIEFsc28sIGlmIHdlIG9ic2VydmUgdGhhdCB0aGUgYnVmZmVyIGlzIHJldm9rZWQgbm93IHRoZW4KJiM0MzsJICogcmVmdXNlIHRoZSBtbWFwKCkuICBUaGlzIGlzIGEgYmVsdC1hbmQtYnJhY2VzIGVhcmx5IGZhaWx1cmUKJiM0MzsJICogdG8gZWFzZSBkZWJ1Z2dpbmcgYSByZXZva2VkIGJ1ZmZlciBiZWluZyB1c2VkLiAgVXNlcnNwYWNlCiYjNDM7CSAqIG1pZ2h0IGFsc28gcmFjZSBhbiBtbWFwKCkgYWdhaW5zdCBhbiBleHBsaWNpdCByZXZvY2F0aW9uLAomIzQzOwkgKiBvciBhbiBhY3Rpb24gZG9pbmcgYSB0ZW1wb3JhcnkgcmV2b2tlOyByYWNlIHNjZW5hcmlvcyBhcmUKJiM0MzsJICogc3RpbGwgc2FmZSBiZWNhdXNlIHRoZSBmYXVsdCBoYW5kbGVyIHVsdGltYXRlbHkgcHJldmVudHMKJiM0MzsJICogYWNjZXNzIHRvIGEgcmV2b2tlZCBidWZmZXIgaWYgaXQgaXNuJiMzOTt0IGNhdWdodCBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKFJFQURfT05DRShwcml2LSZndDtzdGF0dXMpICE9IFZGSU9fUENJX0RNQUJVRl9PSykKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwlpZiAoKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fU0hBUkVEKSA9PSAwKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWlmIChSRUFEX09OQ0UocHJpdi0mZ3Q7bWVtYXR0cikgPT0gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MpCiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLSZndDt2bV9wYWdlX3Byb3QpOwomIzQzOwllbHNlCiYjNDM7CQl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwomIzQzOwl2bWEtJmd0O3ZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLSZndDt2bV9wYWdlX3Byb3QpOwomIzQzOwomIzQzOwkvKiBTZWUgY29tbWVudHMgaW4gdmZpb19wY2lfY29yZV9tbWFwKCkgcmUgVk1fQUxMT1dfQU5ZX1VOQ0FDSEVELiAqLwomIzQzOwl2bV9mbGFnc19zZXQodm1hLCBWTV9BTExPV19BTllfVU5DQUNIRUQgfCBWTV9JTyB8IFZNX1BGTk1BUCB8CiYjNDM7CQkgICAgIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7CiYjNDM7CXZtYS0mZ3Q7dm1fcHJpdmF0ZV9kYXRhID0gcHJpdjsKJiM0MzsJdmZpb19wY2lfc2V0X3ZtYV9vcHModm1hKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOyNlbmRpZiAvKiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGICovCiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUoc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPQpAQCAtNTYsNyAmIzQzOzgyLDcgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCwKIAogCWRtYV9yZXN2X2Fzc2VydF9oZWxkKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiAKLQlpZiAocHJpdi0mZ3Q7cmV2b2tlZCkKJiM0MzsJaWYgKHByaXYtJmd0O3N0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spCiAJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogCiAJcmV0ID0gZG1hX2J1Zl9waHlzX3ZlY190b19zZ3QoYXR0YWNobWVudCwgcHJpdi0mZ3Q7cHJvdmlkZXIsCkBAIC05NSwxNyAmIzQzOzEyMSwyMDMgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpCiAJCXVwX3dyaXRlKCZhbXA7cHJpdi0mZ3Q7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwogCQl2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKCZhbXA7cHJpdi0mZ3Q7dmRldi0mZ3Q7dmRldik7CiAJfQomIzQzOwlpZiAocHJpdi0mZ3Q7dmZpbGUpCiYjNDM7CQlmcHV0KHByaXYtJmd0O3ZmaWxlKTsKIAlrZnJlZShwcml2LSZndDtwaHlzX3ZlYyk7CiAJa2ZyZWUocHJpdik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHsKJiM0MzsjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgogCS5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCwKJiM0MzsJLm1tYXAgPSB2ZmlvX3BjaV9kbWFfYnVmX21tYXAsCiYjNDM7I2VuZGlmCiAJLm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl9tYXAsCiAJLnVubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX3VubWFwLAogCS5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLAogfTsKIAomIzQzO2ludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LAomIzQzOwkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkciwKJiM0MzsJCQkgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3BmbikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIEdpdmVuIGEgVk1BIChzdGFydCwgZW5kLCBwZ29mZnMpIGFuZCBhIGZhdWx0IGFkZHJlc3MsCiYjNDM7CSAqIHNlYXJjaCB0aGUgY29ycmVzcG9uZGluZyBETUFCVUYmIzM5O3MgcGh5c192ZWNbXSB0byBmaW5kIHRoZQomIzQzOwkgKiByYW5nZSByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MmIzM5O3Mgb2Zmc2V0IGludG8gdGhlIFZNQSwgYW5kCiYjNDM7CSAqIGl0cyBQRk4uCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBwaHlzX3ZlY1tdIHJhbmdlcyByZXByZXNlbnQgY29udGlndW91cyBzcGFucyBvZiBWQXMKJiM0MzsJICogdXB3YXJkcyBmcm9tIHRoZSBidWZmZXIgb2Zmc2V0IDA7IHRoZSBhY3R1YWwgUEZOcyBtaWdodCBiZQomIzQzOwkgKiBpbiBhbnkgb3JkZXIsIG92ZXJsYXAvYWxpYXMsIGV0Yy4gIENhbGN1bGF0ZSBhbiBvZmZzZXQgb2YKJiM0MzsJICogdGhlIGRlc2lyZWQgcGFnZSBnaXZlbiBWTUEgc3RhcnQvcGdvZmYgYW5kIGFkZHJlc3MsIHRoZW4KJiM0MzsJICogc2VhcmNoIHVwd2FyZHMgZnJvbSAwIHRvIGZpbmQgd2hpY2ggc3BhbiBjb250YWlucyBpdC4KJiM0MzsJICoKJiM0MzsJICogT24gc3VjY2VzcywgYSB2YWxpZCBQRk4gZm9yIGEgcGFnZSBzaXplZCBieSAmIzM5O29yZGVyJiMzOTsgaXMKJiM0MzsJICogcmV0dXJuZWQgaW50byBvdXRfcGZuLgomIzQzOwkgKgomIzQzOwkgKiBGYWlsdXJlIG9jY3VycyBpZjoKJiM0MzsJICogLSBBIGh1Z2VwYWdlIHdvdWxkIGNyb3NzIHRoZSBlZGdlIG9mIHRoZSBWTUEsCiYjNDM7CSAqIC0gQSBodWdlcGFnZSBpc24mIzM5O3QgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBhIHJhbmdlCiYjNDM7CSAqICAgKGluY2x1ZGluZyB3aGVyZSBpdCBzdHJhZGRsZXMgdGhlIGJvdW5kYXJ5IGJldHdlZW4KJiM0MzsJICogICByYW5nZXMpLAomIzQzOwkgKiAtIFdlIGZpbmQgYSByYW5nZSwgYnV0IHRoZSBmaW5hbCBQRk4gaXNuJiMzOTt0IGFsaWduZWQgdG8gdGhlCiYjNDM7CSAqICAgcmVxdWVzdGVkIG9yZGVyLgomIzQzOwkgKgomIzQzOwkgKiBVcG9uIGZhaWx1cmUsIC1FQUdBSU4gaXMgcmV0dXJuZWQgYW5kIHRoZSBjYWxsZXIgaXMKJiM0MzsJICogZXhwZWN0ZWQgdG8gdHJ5IGFnYWluIHdpdGggYSBzbWFsbGVyIG9yZGVyLCB3aGljaCB3aWxsCiYjNDM7CSAqIGV2ZW50dWFsbHkgc3VjY2VlZCAob3JkZXI9MCB3aWxsIGFsd2F5cyB3b3JrKS4KJiM0MzsJICoKJiM0MzsJICogSXQmIzM5O3Mgc3Vib3B0aW1hbCBpZiBETUFCVUZzIGFyZSBjcmVhdGVkIHdpdGggbmVpZ2hib3VyaW5nCiYjNDM7CSAqIHJhbmdlcyB0aGF0IGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHNpbmNlIGh1Z2VwYWdlcwomIzQzOwkgKiBjYW4mIzM5O3Qgc3RyYWRkbGUgcmFuZ2UgYm91bmRhcmllcy4gIChUaGUgY29uc3RydWN0aW9uIG9mIHRoZQomIzQzOwkgKiByYW5nZXMgc2hvdWxkIG1lcmdlIHRoZW0gaW4gdGhpcyBjYXNlLikKJiM0MzsJICoKJiM0MzsJICogRmluYWxseSwgdm1hX3Bnb2ZmX2FkanVzdCBpcyB1c2VkIHdpdGggYSBETUFCVUYgY3JlYXRlZCBmb3IKJiM0MzsJICogYSBWRklPIEJBUiBtbWFwOiBhIEJBUiBtYXBwZWQgd2l0aCB2bV9wZ29mZiAmZ3Q7IDAgY3JlYXRlcyBhCiYjNDM7CSAqIERNQUJVRiBzdWNoIHRoYXQgYnl0ZSAwIG9mIHRoZSBWTUEgY29ycmVzcG9uZHMgdG8gYnl0ZSAwIG9mCiYjNDM7CSAqIHRoZSBETUFCVUYgYW5kIGJ5dGUgJiMzOTt2bV9wZ29mZiAmbHQ7Jmx0OyBQQUdFX1NISUZUJiMzOTsgaW50byB0aGUgQkFSLgomIzQzOwkgKiBUbyBhdm9pZCBkb3VibGUtb2Zmc2V0dGluZyBpbiB0aGlzIHNjZW5hcmlvLCBzdWJ0cmFjdGluZwomIzQzOwkgKiB2bWFfcGdvZmZfYWRqdXN0IGZyb20gdGhpcyAobm9uLXplcm8pIHZtX3Bnb2ZmIGdlbmVyYXRlcwomIzQzOwkgKiB0aGUgZWZmZWN0aXZlIG9mZnNldC4KJiM0MzsJICovCiYjNDM7CiYjNDM7CWNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZXNpemUgPSBQQUdFX1NJWkUgJmx0OyZsdDsgb3JkZXI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdm1hX29mZiA9ICgodm1hLSZndDt2bV9wZ29mZiAtIHByaXYtJmd0O3ZtYV9wZ29mZl9hZGp1c3QpICZsdDsmbHQ7CiYjNDM7CQkJCSBQQUdFX1NISUZUKSAmYW1wOyBWRklPX1BDSV9PRkZTRVRfTUFTSzsKJiM0MzsJdW5zaWduZWQgbG9uZyByb3VuZGVkX3BhZ2VfYWRkciA9IEFMSUdOX0RPV04oZmF1bHRfYWRkciwgcGFnZXNpemUpOwomIzQzOwl1bnNpZ25lZCBsb25nIHJvdW5kZWRfcGFnZV9lbmQgPSByb3VuZGVkX3BhZ2VfYWRkciAmIzQzOyBwYWdlc2l6ZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBmYXVsdF9vZmZzZXQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmF1bHRfb2Zmc2V0X2VuZDsKJiM0MzsJdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydF9vZmZzZXQgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHJvdW5kZWRfcGFnZV9hZGRyICZsdDsgdm1hLSZndDt2bV9zdGFydCB8fCByb3VuZGVkX3BhZ2VfZW5kICZndDsgdm1hLSZndDt2bV9lbmQpIHsKJiM0MzsJCWlmIChvcmRlciAmZ3Q7IDApCiYjNDM7CQkJcmV0dXJuIC1FQUdBSU47CiYjNDM7CiYjNDM7CQkvKiBBIGZhdWx0IGFkZHJlc3Mgb3V0c2lkZSBvZiB0aGUgVk1BIGlzIGFic3VyZC4gKi8KJiM0MzsJCWRldl93YXJuX3JhdGVsaW1pdGVkKAomIzQzOwkJCSZhbXA7cHJpdi0mZ3Q7dmRldi0mZ3Q7cGRldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7RmF1bHQgYWRkciAweCVseCBvdXRzaWRlIFZNQSAweCVseC0weCVseFxuJiMzNDssCiYjNDM7CQkJZmF1bHRfYWRkciwgdm1hLSZndDt2bV9zdGFydCwgdm1hLSZndDt2bV9lbmQpOwomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogZmF1bHRfb2Zmc2V0W19lbmRdIGlzIHRoZSBzcGFuIHdpdGhpbiB0aGUgRE1BQlVGCiYjNDM7CSAqIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZhdWx0aW5nIHBhZ2U6CiYjNDM7CSAqLwomIzQzOwlpZiAodW5saWtlbHkoY2hlY2tfYWRkX292ZXJmbG93KHJvdW5kZWRfcGFnZV9hZGRyIC0gdm1hLSZndDt2bV9zdGFydCwKJiM0MzsJCQkJCXZtYV9vZmYsICZhbXA7ZmF1bHRfb2Zmc2V0KSB8fAomIzQzOwkJICAgICBjaGVja19hZGRfb3ZlcmZsb3coZmF1bHRfb2Zmc2V0LCBwYWdlc2l6ZSwKJiM0MzsJCQkJCSZhbXA7ZmF1bHRfb2Zmc2V0X2VuZCkpKQomIzQzOwkJcmV0dXJuIC1FRkFVTFQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEl0ZXJhdGUgb3ZlciByYW5nZXMgaW4gdGhlIGJ1ZmZlciwgc3VtbWluZyB0aGVpciBsZW5ndGhzOgomIzQzOwkgKiByYW5nZV9zdGFydF9vZmZzZXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCByYW5nZSYjMzk7cyBzdGFydGluZwomIzQzOwkgKiBvZmZzZXQgaW4gdGhlIGJ1ZmZlciAoZnJvbSAwIHVwd2FyZHMpLgomIzQzOwkgKgomIzQzOwkgKiBBIGZhaWx1cmUgZm9yIG9yZGVyID09IDAgaXMgdW5leHBlY3RlZCwgYW5kIHRyaWdnZXJzIGEKJiM0MzsJICogZmF1bHQvd2Fybi4KJiM0MzsJICovCiYjNDM7CXJldCA9IChvcmRlciA9PSAwKSA/IC1FRkFVTFQgOiAtRUFHQUlOOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcHJpdi0mZ3Q7bnJfcmFuZ2VzOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc2l6ZV90IHJhbmdlX2xlbiA9IHByaXYtJmd0O3BoeXNfdmVjW2ldLmxlbjsKJiM0MzsKJiM0MzsJCS8qIEVhcmx5IGV4aXQgaWYgcmFuZ2Ugc3RhcnRzIGFmdGVyIHRoZSBwYWdlIGVuZCAqLwomIzQzOwkJaWYgKGZhdWx0X29mZnNldF9lbmQgJmx0Oz0gcmFuZ2Vfc3RhcnRfb2Zmc2V0KQomIzQzOwkJCWJyZWFrOwomIzQzOwomIzQzOwkJaWYgKGZhdWx0X29mZnNldCAmZ3Q7PSByYW5nZV9zdGFydF9vZmZzZXQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGZhdWx0X29mZnNldF9lbmQgJmx0Oz0gcmFuZ2Vfc3RhcnRfb2Zmc2V0ICYjNDM7IHJhbmdlX2xlbikgewomIzQzOwkJCS8qCiYjNDM7CQkJICogVGhlIGZhdWx0aW5nIHBhZ2UgaXMgd2hvbGx5IGNvbnRhaW5lZAomIzQzOwkJCSAqIHdpdGhpbiB0aGUgc3BhbiByZXByZXNlbnRlZCBieSB0aGlzIHJhbmdlLAomIzQzOwkJCSAqIHNvIHZhbGlkYXRlIFBGTiBhbGlnbm1lbnQgZm9yIHRoZSBvcmRlci4KJiM0MzsJCQkgKiBUaGUgaWYoKSBjb25kaXRpb24gZW5zdXJlcyB0aGUgcGZuCiYjNDM7CQkJICogYXJpdGhtZXRpYyB3b24mIzM5O3Qgb3ZlcmZsb3cuCiYjNDM7CQkJICovCiYjNDM7CQkJdW5zaWduZWQgbG9uZyBwZm4gPQomIzQzOwkJCQkoKGZhdWx0X29mZnNldCAtIHJhbmdlX3N0YXJ0X29mZnNldCkgJiM0MzsKJiM0MzsJCQkJIHByaXYtJmd0O3BoeXNfdmVjW2ldLnBhZGRyKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwomIzQzOwomIzQzOwkJCWlmIChJU19BTElHTkVEKHBmbiwgMSAmbHQ7Jmx0OyBvcmRlcikpIHsKJiM0MzsJCQkJKm91dF9wZm4gPSBwZm47CiYjNDM7CQkJCXJldCA9IDA7CiYjNDM7CQkJfQomIzQzOwkJCS8qCiYjNDM7CQkJICogRWxzZSBvcmRlciAmZ3Q7IDA7IEVBR0FJTiByZXRyaWVzIHdpdGggc21hbGxlcgomIzQzOwkJCSAqIG9yZGVyCiYjNDM7CQkJICovCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlyYW5nZV9zdGFydF9vZmZzZXQgJiM0Mzs9IHJhbmdlX2xlbjsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAob3JkZXIgPT0gMCAmYW1wOyZhbXA7IHJldCAhPSAwKQomIzQzOwkJLyoKJiM0MzsJCSAqIFRoZSBhZGRyZXNzIGZlbGwgb3V0c2lkZSBvZiB0aGUgc3BhbiByZXByZXNlbnRlZCBieQomIzQzOwkJICogdGhlIChjb25jYXRlbmF0ZWQpIHJhbmdlcy4gIEFzIHNldHVwIG9mIGEgbWFwcGluZwomIzQzOwkJICogZW5zdXJlcyB0aGF0IHRoZSBWTUEgaXMgJmx0Oz0gdGhlIHRvdGFsIHNpemUgb2YgdGhlCiYjNDM7CQkgKiByYW5nZXMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgSWYgaXQgZG9lcywgd2FybgomIzQzOwkJICogYW5kIFNJR0JVUy4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoCiYjNDM7CQkJJmFtcDtwcml2LSZndDt2ZGV2LSZndDtwZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtObyByYW5nZSBmb3IgYWRkciAweCVseCwgb3JkZXIgJWQ6IFZNQSAweCVseC0weCVseCBwZ29mZiAweCVseCwgJXUgcmFuZ2VzLCBzaXplIDB4JXp4XG4mIzM0OywKJiM0MzsJCQlmYXVsdF9hZGRyLCBvcmRlciwgdm1hLSZndDt2bV9zdGFydCwgdm1hLSZndDt2bV9lbmQsCiYjNDM7CQkJdm1hLSZndDt2bV9wZ29mZiwgcHJpdi0mZ3Q7bnJfcmFuZ2VzLCBwcml2LSZndDtzaXplKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDcmVhdGUgYSBETUFCVUYgY29ycmVzcG9uZGluZyB0byBwcml2LCBhZGQgaXQgdG8gdmRldi0mZ3Q7ZG1hYnVmcyBsaXN0CiYjNDM7ICogZm9yIHRyYWNraW5nIChtZWFuaW5nIGNsZWFudXAgb3IgcmV2b2NhdGlvbiB3aWxsIHphcCBpdCksIGFuZCB0YWtlCiYjNDM7ICogYSB2ZmlvX2RldmljZSByZWdpc3RyYXRpb24uCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwgdTMyIGZsYWdzKQomIzQzO3sKJiM0MzsJREVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOwomIzQzOwomIzQzOwlpZiAoIXZmaW9fZGV2aWNlX3RyeV9nZXRfcmVnaXN0cmF0aW9uKCZhbXA7dmRldi0mZ3Q7dmRldikpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZXhwX2luZm8ub3BzID0gJmFtcDt2ZmlvX3BjaV9kbWFidWZfb3BzOwomIzQzOwlleHBfaW5mby5zaXplID0gcHJpdi0mZ3Q7c2l6ZTsKJiM0MzsJZXhwX2luZm8uZmxhZ3MgPSBmbGFnczsKJiM0MzsJZXhwX2luZm8ucHJpdiA9IHByaXY7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2RtYWJ1ZiA9IGRtYV9idWZfZXhwb3J0KCZhbXA7ZXhwX2luZm8pOwomIzQzOwlpZiAoSVNfRVJSKHByaXYtJmd0O2RtYWJ1ZikpIHsKJiM0MzsJCXZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oJmFtcDt2ZGV2LSZndDt2ZGV2KTsKJiM0MzsJCXJldHVybiBQVFJfRVJSKHByaXYtJmd0O2RtYWJ1Zik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa3JlZl9pbml0KCZhbXA7cHJpdi0mZ3Q7a3JlZik7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO3ByaXYtJmd0O2NvbXApOwomIzQzOwomIzQzOwkvKiBkbWFfYnVmX3B1dCgpIG5vdyBmcmVlcyBwcml2ICovCiYjNDM7CUlOSVRfTElTVF9IRUFEKCZhbXA7cHJpdi0mZ3Q7ZG1hYnVmc19lbG0pOwomIzQzOwlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwomIzQzOwlkbWFfcmVzdl9sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdiwgTlVMTCk7CiYjNDM7CXByaXYtJmd0O3N0YXR1cyA9IF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikgPyBWRklPX1BDSV9ETUFCVUZfT0sgOgomIzQzOwkJVkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRDsKJiM0MzsJbGlzdF9hZGRfdGFpbCgmYW1wO3ByaXYtJmd0O2RtYWJ1ZnNfZWxtLCAmYW1wO3ZkZXYtJmd0O2RtYWJ1ZnMpOwomIzQzOwlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsJdXBfd3JpdGUoJmFtcDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgogLyoKICAqIFRoaXMgaXMgYSB0ZW1wb3JhcnkgJiMzNDtwcml2YXRlIGludGVyY29ubmVjdCYjMzQ7IGJldHdlZW4gVkZJTyBETUFCVUYgYW5kIGlvbW11ZmQuCiAgKiBJdCBhbGxvd3MgdGhlIHR3byBjby1vcGVyYXRpbmcgZHJpdmVycyB0byBleGNoYW5nZSB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZgpAQCAtMTI4LDcgJiM0MzszNDAsNyBAQCBpbnQgdmZpb19wY2lfZG1hX2J1Zl9pb21tdWZkX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlwcml2ID0gYXR0YWNobWVudC0mZ3Q7ZG1hYnVmLSZndDtwcml2OwotCWlmIChwcml2LSZndDtyZXZva2VkKQomIzQzOwlpZiAocHJpdi0mZ3Q7c3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKiBNb3JlIHRoYW4gb25lIHJhbmdlIHRvIGlvbW11ZmQgd2lsbCByZXF1aXJlIHByb3BlciBETUFCVUYgc3VwcG9ydCAqLwpAQCAtMjI0LDcgJiM0Mzs0MzYsNiBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiB7CiAJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBnZXRfZG1hX2J1ZiA9IHt9OwogCXN0cnVjdCB2ZmlvX3JlZ2lvbl9kbWFfcmFuZ2UgKmRtYV9yYW5nZXM7Ci0JREVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pOwogCXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2OwogCXNpemVfdCBsZW5ndGg7CiAJaW50IHJldDsKQEAgLTI3NCw2ICYjNDM7NDg1LDcgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCXByaXYtJmd0O3ZkZXYgPSB2ZGV2OwogCXByaXYtJmd0O25yX3JhbmdlcyA9IGdldF9kbWFfYnVmLm5yX3JhbmdlczsKIAlwcml2LSZndDtzaXplID0gbGVuZ3RoOwomIzQzOwlwcml2LSZndDttZW1hdHRyID0gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfTkM7CiAJcmV0ID0gdmRldi0mZ3Q7cGNpX29wcy0mZ3Q7Z2V0X2RtYWJ1Zl9waHlzKHZkZXYsICZhbXA7cHJpdi0mZ3Q7cHJvdmlkZXIsCiAJCQkJCSAgICAgZ2V0X2RtYV9idWYucmVnaW9uX2luZGV4LAogCQkJCQkgICAgIHByaXYtJmd0O3BoeXNfdmVjLCBkbWFfcmFuZ2VzLApAQCAtMjg0LDM0ICYjNDM7NDk2LDkgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCWtmcmVlKGRtYV9yYW5nZXMpOwogCWRtYV9yYW5nZXMgPSBOVUxMOwogCi0JaWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbigmYW1wO3ZkZXYtJmd0O3ZkZXYpKSB7Ci0JCXJldCA9IC1FTk9ERVY7CiYjNDM7CXJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgZ2V0X2RtYV9idWYub3Blbl9mbGFncyk7CiYjNDM7CWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWVfcGh5czsKLQl9Ci0KLQlleHBfaW5mby5vcHMgPSAmYW1wO3ZmaW9fcGNpX2RtYWJ1Zl9vcHM7Ci0JZXhwX2luZm8uc2l6ZSA9IHByaXYtJmd0O3NpemU7Ci0JZXhwX2luZm8uZmxhZ3MgPSBnZXRfZG1hX2J1Zi5vcGVuX2ZsYWdzOwotCWV4cF9pbmZvLnByaXYgPSBwcml2OwotCi0JcHJpdi0mZ3Q7ZG1hYnVmID0gZG1hX2J1Zl9leHBvcnQoJmFtcDtleHBfaW5mbyk7Ci0JaWYgKElTX0VSUihwcml2LSZndDtkbWFidWYpKSB7Ci0JCXJldCA9IFBUUl9FUlIocHJpdi0mZ3Q7ZG1hYnVmKTsKLQkJZ290byBlcnJfZGV2X3B1dDsKLQl9Ci0KLQlrcmVmX2luaXQoJmFtcDtwcml2LSZndDtrcmVmKTsKLQlpbml0X2NvbXBsZXRpb24oJmFtcDtwcml2LSZndDtjb21wKTsKLQotCS8qIGRtYV9idWZfcHV0KCkgbm93IGZyZWVzIHByaXYgKi8KLQlJTklUX0xJU1RfSEVBRCgmYW1wO3ByaXYtJmd0O2RtYWJ1ZnNfZWxtKTsKLQlkb3duX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwotCWRtYV9yZXN2X2xvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKLQlwcml2LSZndDtyZXZva2VkID0gIV9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldik7Ci0JbGlzdF9hZGRfdGFpbCgmYW1wO3ByaXYtJmd0O2RtYWJ1ZnNfZWxtLCAmYW1wO3ZkZXYtJmd0O2RtYWJ1ZnMpOwotCWRtYV9yZXN2X3VubG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YpOwotCXVwX3dyaXRlKCZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spOwotCiAJLyoKIAkgKiBkbWFfYnVmX2ZkKCkgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgd2hlbiB0aGUgZmlsZSBjbG9zZXMgdGhlIGRtYWJ1ZgogCSAqIHdpbGwgYmUgcmVsZWFzZWQuCkBAIC0zMjIsOCAmIzQzOzUwOSw2IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncywKIAogCXJldHVybiByZXQ7CiAKLWVycl9kZXZfcHV0OgotCXZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oJmFtcDt2ZGV2LSZndDt2ZGV2KTsKIGVycl9mcmVlX3BoeXM6CiAJa2ZyZWUocHJpdi0mZ3Q7cGh5c192ZWMpOwogZXJyX2ZyZWVfcHJpdjoKQEAgLTMzMiw0NyAmIzQzOzUxNywxNjQgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCWtmcmVlKGRtYV9yYW5nZXMpOwogCXJldHVybiByZXQ7CiB9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi8KJiM0MzsKJiM0MztpbnQgdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSAgIHU2NCBwaHlzX3N0YXJ0LCB1NjQgcmVxX2xlbiwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHJlc19pbmRleCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2OwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYV9wZ29mZiA9IHZtYS0mZ3Q7dm1fcGdvZmYgJmFtcDsgKFZGSU9fUENJX09GRlNFVF9NQVNLICZndDsmZ3Q7IFBBR0VfU0hJRlQpOwomIzQzOwljaGFyICpidWZuYW1lOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwcml2ID0ga3phbGxvY19vYmooKnByaXYpOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7cGh5c192ZWMgPSBremFsbG9jX29iaigqcHJpdi0mZ3Q7cGh5c192ZWMpOwomIzQzOwlpZiAoIXByaXYtJmd0O3BoeXNfdmVjKSB7CiYjNDM7CQlyZXQgPSAtRU5PTUVNOwomIzQzOwkJZ290byBlcnJfZnJlZV9wcml2OwomIzQzOwl9CiYjNDM7CiYjNDM7CWJ1Zm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgJiMzNDslczolcy8leCYjMzQ7LAomIzQzOwkJCSAgICBkZXZfbmFtZSgmYW1wO3ZkZXYtJmd0O3ZkZXYuZGV2aWNlKSwgcGNpX25hbWUodmRldi0mZ3Q7cGRldiksCiYjNDM7CQkJICAgIHJlc19pbmRleCk7CiYjNDM7CiYjNDM7CWlmICghYnVmbmFtZSkgewomIzQzOwkJcmV0ID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfcGh5czsKJiM0MzsJfQomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgRE1BQlVGIGJlZ2lucyBmcm9tIHRoZSBtbWFwKCkmIzM5O3MgQkFSIG9mZnNldCwgaS5lLiB0aGUKJiM0MzsJICogc3RhcnQgb2YgdGhlIFZNQSBjb3JyZXNwb25kcyB0byBieXRlIDAgb2YgdGhlIERNQUJVRiBhbmQKJiM0MzsJICogYnl0ZSAodm1hX3Bnb2ZmICZsdDsmbHQ7IFBBR0VfU0hJRlQpIG9mIHRoZSBCQVIuCiYjNDM7CSAqCiYjNDM7CSAqIHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oKSByZXZlcnNlcyB0aGlzIG9mZnNldCB1c2luZwomIzQzOwkgKiB2bWFfcGdvZmZfYWRqdXN0LCBzbyB0aGF0IHVsdGltYXRlbHkgYSBmYXVsdCYjMzk7cyBvZmZzZXQgZnJvbQomIzQzOwkgKiB0aGUgc3RhcnQgb2YgdGhlIF9WTUFfIGhhcyBhIGNvbnNpc3RlbnQgdXNhZ2Ugd2hldGhlciB0aGUKJiM0MzsJICogVk1BIG9yaWdpbmF0ZXMgZnJvbSBhbiBtbWFwKCkgb2YgdGhlIFZGSU8gZGV2aWNlIGhlcmUgb3IgYQomIzQzOwkgKiBkaXJlY3QgRE1BQlVGIG1tYXAoKS4KJiM0MzsJICovCiYjNDM7CXByaXYtJmd0O3ZkZXYgPSB2ZGV2OwomIzQzOwlwcml2LSZndDtzaXplID0gcmVxX2xlbjsKJiM0MzsJcHJpdi0mZ3Q7bnJfcmFuZ2VzID0gMTsKJiM0MzsJcHJpdi0mZ3Q7dm1hX3Bnb2ZmX2FkanVzdCA9IHZtYV9wZ29mZjsKJiM0MzsJcHJpdi0mZ3Q7cHJvdmlkZXIgPSBwY2ltX3AycGRtYV9wcm92aWRlcih2ZGV2LSZndDtwZGV2LCByZXNfaW5kZXgpOwomIzQzOwlpZiAoIXByaXYtJmd0O3Byb3ZpZGVyKSB7CiYjNDM7CQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfZnJlZV9uYW1lOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYtJmd0O3BoeXNfdmVjWzBdLnBhZGRyID0gcGh5c19zdGFydCAmIzQzOyAoKHU2NCl2bWFfcGdvZmYgJmx0OyZsdDsgUEFHRV9TSElGVCk7CiYjNDM7CXByaXYtJmd0O3BoeXNfdmVjWzBdLmxlbiA9IHByaXYtJmd0O3NpemU7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgT19DTE9FWEVDIHwgT19SRFdSKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX2ZyZWVfbmFtZTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogT3duZXJzaGlwIG9mIHRoZSBETUFCVUYgZmlsZSB0cmFuc2ZlcnMgdG8gdGhlIFZNQSBzbyB0aGF0CiYjNDM7CSAqIG90aGVyIHVzZXJzIGNhbiBsb2NhdGUgdGhlIERNQUJVRiB2aWEgYSBWQS4gIE93bmVyc2hpcCBvZgomIzQzOwkgKiB0aGUgb3JpZ2luYWwgVkZJTyBkZXZpY2UgZmlsZSBiZWluZyBtbWFwKCllZCB0cmFuc2ZlcnMgdG8KJiM0MzsJICogcHJpdiwgYW5kIGlzIHB1dCB3aGVuIHRoZSBETUFCVUYgaXMgcmVsZWFzZWQuICBUaGlzCiYjNDM7CSAqIGludGVudGlvbmFsbHkgZG9lcyBub3QgdXNlIGdldF9maWxlKCkvdm1hX3NldF9maWxlKCkKJiM0MzsJICogYmVjYXVzZSB0aGUgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLCBhbmQgb3duZXJzaGlwCiYjNDM7CSAqIG1vdmVzLgomIzQzOwkgKi8KJiM0MzsJcHJpdi0mZ3Q7dmZpbGUgPSB2bWEtJmd0O3ZtX2ZpbGU7CiYjNDM7CXZtYS0mZ3Q7dm1fZmlsZSA9IHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7ZmlsZTsKJiM0MzsJdm1hLSZndDt2bV9wcml2YXRlX2RhdGEgPSBwcml2OwomIzQzOwomIzQzOwlzcGluX2xvY2soJmFtcDtwcml2LSZndDtkbWFidWYtJmd0O25hbWVfbG9jayk7CiYjNDM7CWtmcmVlKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7bmFtZSk7CiYjNDM7CXByaXYtJmd0O2RtYWJ1Zi0mZ3Q7bmFtZSA9IGJ1Zm5hbWU7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7ZG1hYnVmLSZndDtuYW1lX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfZnJlZV9uYW1lOgomIzQzOwlrZnJlZShidWZuYW1lKTsKJiM0MztlcnJfZnJlZV9waHlzOgomIzQzOwlrZnJlZShwcml2LSZndDtwaHlzX3ZlYyk7CiYjNDM7ZXJyX2ZyZWVfcHJpdjoKJiM0MzsJa2ZyZWUocHJpdik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qIFNldCB0aGUgRE1BQlVGJiMzOTtzIHJldm9jYXRpb24gc3RhdHVzIChPSyBvciB0ZW1wb3JhcmlseS9wZXJtYW5lbnRseSByZXZva2VkKSAqLwomIzQzO3N0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwKJiM0MzsJCQkJCWVudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMgbmV3X3N0YXR1cykKJiM0Mzt7CiYjNDM7CWJvb2wgd2FzX3Jldm9rZWQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGRfd3JpdGUoJmFtcDtwcml2LSZndDt2ZGV2LSZndDttZW1vcnlfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCB8fAomIzQzOwkgICAgcHJpdi0mZ3Q7c3RhdHVzID09IG5ld19zdGF0dXMpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRtYV9yZXN2X2xvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2LCBOVUxMKTsKJiM0MzsJd2FzX3Jldm9rZWQgPSAocHJpdi0mZ3Q7c3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQpOwomIzQzOwomIzQzOwlpZiAobmV3X3N0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spIHsKJiM0MzsJCXByaXYtJmd0O3N0YXR1cyA9IG5ld19zdGF0dXM7IC8qIFRlbXAgb3IgcGVybWFuZW50bHkgcmV2b2tlZCAqLwomIzQzOwomIzQzOwkJaWYgKHdhc19yZXZva2VkKSB7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBURU1QX1JFVk9LRUQgaXMgYmVpbmcgdXBncmFkZWQgdG8KJiM0MzsJCQkgKiBQRVJNX1JFVk9LRUQuICBUaGUgYnVmZmVyIGlzIGFscmVhZHkgZ29uZSwKJiM0MzsJCQkgKiBkb24mIzM5O3Qgd2FpdCBvbiBpdCBhZ2Fpbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CQlkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi0mZ3Q7ZG1hYnVmKTsKJiM0MzsJCWRtYV9yZXN2X3dhaXRfdGltZW91dChwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsCiYjNDM7CQkJCSAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSwKJiM0MzsJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwomIzQzOwkJZG1hX3Jlc3ZfdW5sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7CiYjNDM7CQlrcmVmX3B1dCgmYW1wO3ByaXYtJmd0O2tyZWYsIHZmaW9fcGNpX2RtYV9idWZfZG9uZSk7CiYjNDM7CQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7cHJpdi0mZ3Q7Y29tcCk7CiYjNDM7CQl1bm1hcF9tYXBwaW5nX3JhbmdlKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7ZmlsZS0mZ3Q7Zl9tYXBwaW5nLAomIzQzOwkJCQkgICAgMCwgcHJpdi0mZ3Q7c2l6ZSwgdHJ1ZSk7CiYjNDM7CQkvKgomIzQzOwkJICogUmUtYXJtIHRoZSByZWdpc3RlcmVkIGtyZWYgcmVmZXJlbmNlIGFuZCB0aGUKJiM0MzsJCSAqIGNvbXBsZXRpb24gc28gdGhlIHBvc3QtcmV2b2tlIHN0YXRlIG1hdGNoZXMgdGhlCiYjNDM7CQkgKiBwb3N0LWNyZWF0aW9uIHN0YXRlLiAgQW4gdW4tcmV2b2tlIGZvbGxvd2VkIGJ5IGEKJiM0MzsJCSAqIG5ldyBtYXBwaW5nIG5lZWRzIHRoZSBrcmVmIHRvIGJlIG5vbi16ZXJvIGJlZm9yZQomIzQzOwkJICoga3JlZl9nZXQoKSwgYW5kIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cCgpCiYjNDM7CQkgKiBkZWxlZ2F0ZXMgaXRzIGRyYWluIGJhY2sgdGhyb3VnaCB0aGlzIHJldm9rZQomIzQzOwkJICogcGF0aCBvbiBhIHBvc3NpYmx5LWFscmVhZHktcmV2b2tlZCBkbWEtYnVmLgomIzQzOwkJICovCiYjNDM7CQlrcmVmX2luaXQoJmFtcDtwcml2LSZndDtrcmVmKTsKJiM0MzsJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7cHJpdi0mZ3Q7Y29tcCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlwcml2LSZndDtzdGF0dXMgPSBWRklPX1BDSV9ETUFCVUZfT0s7CiYjNDM7CQlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKJiM0MzsJfQomIzQzO30KIAogdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpCiB7CiAJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7CiAJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnRtcDsKIAomIzQzOwkvKgomIzQzOwkgKiBIb2xkaW5nIG1lbW9yeV9sb2NrIGVuc3VyZXMgYSByYWNpbmcgVk1BIGZhdWx0IG9ic2VydmVzCiYjNDM7CSAqIHByaXYtJmd0O3N0YXR1cyBwcm9wZXJseS4KJiM0MzsJICovCiAJbG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsICZhbXA7dmRldi0mZ3Q7ZG1hYnVmcywgZG1hYnVmc19lbG0pIHsKIAkJaWYgKCFnZXRfZmlsZV9hY3RpdmUoJmFtcDtwcml2LSZndDtkbWFidWYtJmd0O2ZpbGUpKQogCQkJY29udGludWU7Ci0KLQkJaWYgKHByaXYtJmd0O3Jldm9rZWQgIT0gcmV2b2tlZCkgewotCQkJZG1hX3Jlc3ZfbG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwotCQkJaWYgKHJldm9rZWQpCi0JCQkJcHJpdi0mZ3Q7cmV2b2tlZCA9IHRydWU7Ci0JCQlkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi0mZ3Q7ZG1hYnVmKTsKLQkJCWRtYV9yZXN2X3dhaXRfdGltZW91dChwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsCi0JCQkJCSAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSwKLQkJCQkJICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwotCQkJZG1hX3Jlc3ZfdW5sb2NrKHByaXYtJmd0O2RtYWJ1Zi0mZ3Q7cmVzdik7Ci0JCQlpZiAocmV2b2tlZCkgewotCQkJCWtyZWZfcHV0KCZhbXA7cHJpdi0mZ3Q7a3JlZiwgdmZpb19wY2lfZG1hX2J1Zl9kb25lKTsKLQkJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7cHJpdi0mZ3Q7Y29tcCk7Ci0JCQkJLyoKLQkJCQkgKiBSZS1hcm0gdGhlIHJlZ2lzdGVyZWQga3JlZiByZWZlcmVuY2UgYW5kIHRoZQotCQkJCSAqIGNvbXBsZXRpb24gc28gdGhlIHBvc3QtcmV2b2tlIHN0YXRlIG1hdGNoZXMgdGhlCi0JCQkJICogcG9zdC1jcmVhdGlvbiBzdGF0ZS4gIEFuIHVuLXJldm9rZSBmb2xsb3dlZCBieSBhCi0JCQkJICogbmV3IG1hcHBpbmcgbmVlZHMgdGhlIGtyZWYgdG8gYmUgbm9uLXplcm8gYmVmb3JlCi0JCQkJICoga3JlZl9nZXQoKSwgYW5kIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cCgpCi0JCQkJICogZGVsZWdhdGVzIGl0cyBkcmFpbiBiYWNrIHRocm91Z2ggdGhpcyByZXZva2UKLQkJCQkgKiBwYXRoIG9uIGEgcG9zc2libHktYWxyZWFkeS1yZXZva2VkIGRtYS1idWYuCi0JCQkJICovCi0JCQkJa3JlZl9pbml0KCZhbXA7cHJpdi0mZ3Q7a3JlZik7Ci0JCQkJcmVpbml0X2NvbXBsZXRpb24oJmFtcDtwcml2LSZndDtjb21wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZG1hX3Jlc3ZfbG9jayhwcml2LSZndDtkbWFidWYtJmd0O3Jlc3YsIE5VTEwpOwotCQkJCXByaXYtJmd0O3Jldm9rZWQgPSBmYWxzZTsKLQkJCQlkbWFfcmVzdl91bmxvY2socHJpdi0mZ3Q7ZG1hYnVmLSZndDtyZXN2KTsKLQkJCX0KLQkJfQomIzQzOwkJdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzKHByaXYsIHJldm9rZWQgPwomIzQzOwkJCQkJICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOgomIzQzOwkJCQkJICAgIFZGSU9fUENJX0RNQUJVRl9PSyk7CiAJCWZwdXQocHJpdi0mZ3Q7ZG1hYnVmLSZndDtmaWxlKTsKIAl9CiB9CkBAIC00MDQsMyAmIzQzOzcwNiwxMTcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KQogCX0KIAl1cF93cml0ZSgmYW1wO3ZkZXYtJmd0O21lbW9yeV9sb2NrKTsKIH0KJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgomIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoCiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSBfX3VzZXIgKmFyZywKJiM0MzsJc2l6ZV90IGFyZ3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgZGJfcmV2b2tlOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjsKJiM0MzsJc3RydWN0IGRtYV9idWYgKmRtYWJ1ZjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKCF2ZGV2LSZndDtwY2lfb3BzIHx8ICF2ZGV2LSZndDtwY2lfb3BzLSZndDtnZXRfZG1hYnVmX3BoeXMpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osCiYjNDM7CQkJCSBWRklPX0RFVklDRV9GRUFUVVJFX1NFVCwKJiM0MzsJCQkJIHNpemVvZihkYl9yZXZva2UpKTsKJiM0MzsJaWYgKHJldCAhPSAxKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaWYgKGNvcHlfZnJvbV91c2VyKCZhbXA7ZGJfcmV2b2tlLCBhcmcsIHNpemVvZihkYl9yZXZva2UpKSkKJiM0MzsJCXJldHVybiAtRUZBVUxUOwomIzQzOwomIzQzOwlkbWFidWYgPSBkbWFfYnVmX2dldChkYl9yZXZva2UuZG1hYnVmX2ZkKTsKJiM0MzsJaWYgKElTX0VSUihkbWFidWYpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZG1hYnVmKTsKJiM0MzsKJiM0MzsJcHJpdiA9IGRtYWJ1Zi0mZ3Q7cHJpdjsKJiM0MzsJLyoKJiM0MzsJICogU2FuaXR5LWNoZWNrIHRoZSBETUFCVUYgaXMgcmVhbGx5IGEgdmZpb19wY2lfZG1hX2J1ZiBfYW5kXwomIzQzOwkgKiByZWxhdGVzIHRvIHRoZSBWRklPIGRldmljZSBpdCB3YXMgcHJvdmlkZWQgd2l0aC4KJiM0MzsJICoKJiM0MzsJICogSWYgdGhlIERNQUJVRiByZWxhdGVzIHRvIHRoaXMgdmRldiB0aGVuIHByaXYtJmd0O3ZkZXYgaXMKJiM0MzsJICogc3RhYmxlIGJlY2F1c2UgdGhpcyBvcGVuIGZkIHByZXZlbnRzIGNsZWFudXAuCiYjNDM7CSAqCiYjNDM7CSAqIElmIGl0IHJlbGF0ZXMgdG8gYSBkaWZmZXJlbnQgdmRldiwgcmVhZGluZyBwcml2LSZndDt2ZGV2IG1pZ2h0CiYjNDM7CSAqIHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgY2xlYW51cCBvbiB0aGF0IGRldmljZS4gIEJ1dCBpZiBzbywKJiM0MzsJICogaXQgcG9pbnRzIHRvIGEgbm9uLW1hdGNoaW5nIHZkZXYgb3IgTlVMTCBhbmQgaXMgdW51c2FibGUKJiM0MzsJICogZWl0aGVyIHdheS4KJiM0MzsJICovCiYjNDM7CWlmIChkbWFidWYtJmd0O29wcyAhPSAmYW1wO3ZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHwKJiM0MzsJICAgIFJFQURfT05DRShwcml2LSZndDt2ZGV2KSAhPSB2ZGV2KSB7CiYjNDM7CQlyZXQgPSAtRU5PREVWOwomIzQzOwkJZ290byBvdXRfcHV0X2J1ZjsKJiM0MzsJfQomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQocndzZW1fd3JpdGUsICZhbXA7dmRldi0mZ3Q7bWVtb3J5X2xvY2spIHsKJiM0MzsJCWlmIChwcml2LSZndDtzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCkgewomIzQzOwkJCXJldCA9IC1FQkFERkQ7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhwcml2LAomIzQzOwkJCQkJCSAgICBWRklPX1BDSV9ETUFCVUZfUEVSTV9SRVZPS0VEKTsKJiM0MzsJCQlyZXQgPSAwOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7b3V0X3B1dF9idWY6CiYjNDM7CWRtYV9idWZfcHV0KGRtYWJ1Zik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKAomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncywKJiM0MzsJc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIF9fdXNlciAqYXJnLAomIzQzOwlzaXplX3QgYXJnc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgZGJfYXR0cjsKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7CiYjNDM7CXN0cnVjdCBkbWFfYnVmICpkbWFidWY7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghdmRldi0mZ3Q7cGNpX29wcyB8fCAhdmRldi0mZ3Q7cGNpX29wcy0mZ3Q7Z2V0X2RtYWJ1Zl9waHlzKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LAomIzQzOwkJCQkgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsCiYjNDM7CQkJCSBzaXplb2YoZGJfYXR0cikpOwomIzQzOwlpZiAocmV0ICE9IDEpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAoY29weV9mcm9tX3VzZXIoJmFtcDtkYl9hdHRyLCBhcmcsIHNpemVvZihkYl9hdHRyKSkpCiYjNDM7CQlyZXR1cm4gLUVGQVVMVDsKJiM0MzsKJiM0MzsJZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfYXR0ci5kbWFidWZfZmQpOwomIzQzOwlpZiAoSVNfRVJSKGRtYWJ1ZikpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihkbWFidWYpOwomIzQzOwomIzQzOwkvKiBWZXJpZnkgRE1BQlVGOiBzZWUgY29tbWVudHMgaW4gdmZpb19wY2lfZG1hX2J1Zl9yZXZva2UoKSAqLwomIzQzOwlwcml2ID0gZG1hYnVmLSZndDtwcml2OwomIzQzOwlpZiAoZG1hYnVmLSZndDtvcHMgIT0gJmFtcDt2ZmlvX3BjaV9kbWFidWZfb3BzIHx8CiYjNDM7CSAgICBSRUFEX09OQ0UocHJpdi0mZ3Q7dmRldikgIT0gdmRldikgewomIzQzOwkJcmV0ID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0X3B1dF9idWY7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc3dpdGNoIChkYl9hdHRyLm1lbWF0dHIpIHsKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQzoKJiM0MzsJY2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQzoKJiM0MzsJCVdSSVRFX09OQ0UocHJpdi0mZ3Q7bWVtYXR0ciwgZGJfYXR0ci5tZW1hdHRyKTsKJiM0MzsJCXJldCA9IDA7CiYjNDM7CQlicmVhazsKJiM0MzsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldCA9IC1FTk9FTlQ7CiYjNDM7CX0KJiM0MzsKJiM0MztvdXRfcHV0X2J1ZjoKJiM0MzsJZG1hX2J1Zl9wdXQoZG1hYnVmKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7I2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgKaW5kZXggZmNhOWQwZGZhYzkwZjguLmIzYzcyZGYwMDJjNDQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaApAQCAtMjMsNiAmIzQzOzIzLDI4IEBAIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQgewogCWJvb2wJCQl0ZXN0X21lbTsKIH07CiAKJiM0MztlbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHsKJiM0MzsJVkZJT19QQ0lfRE1BQlVGX09LID0gMCwKJiM0MzsJVkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCA9IDEsCiYjNDM7CVZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQgPSAyLAomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgewomIzQzOwlzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmOwomIzQzOwlzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgZG1hYnVmc19lbG07CiYjNDM7CXNpemVfdCBzaXplOwomIzQzOwlzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjOwomIzQzOwlzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwcm92aWRlcjsKJiM0MzsJc3RydWN0IGZpbGUgKnZmaWxlOwomIzQzOwl1MzIgbnJfcmFuZ2VzOwomIzQzOwlzdHJ1Y3Qga3JlZiBrcmVmOwomIzQzOwlzdHJ1Y3QgY29tcGxldGlvbiBjb21wOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYV9wZ29mZl9hZGp1c3Q7CiYjNDM7CXUzMiBtZW1hdHRyOwomIzQzOwllbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHN0YXR1czsKJiM0Mzt9OwomIzQzOwogYm9vbCB2ZmlvX3BjaV9pbnR4X21hc2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTsKIHZvaWQgdmZpb19wY2lfaW50eF91bm1hc2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTsKIApAQCAtNjgsNyAmIzQzOzkwLDggQEAgdm9pZCB2ZmlvX2NvbmZpZ19mcmVlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7CiBpbnQgdmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKIAkJCSAgICAgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogCi12b2lkIHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwomIzQzO3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwomIzQzO3ZvaWQgdmZpb19wY2lfdW5yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwogdTE2IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTsKIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsCiAJCQkJCXUxNiBjbWQpOwpAQCAtMTE0LDEyICYjNDM7MTM3LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJcmV0dXJuIChwZGV2LSZndDtjbGFzcyAmZ3Q7Jmd0OyA4KSA9PSBQQ0lfQ0xBU1NfRElTUExBWV9WR0E7CiB9CiAKJiM0MztpbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdnBkbWFidWYsCiYjNDM7CQkJICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGludCBvcmRlciwKJiM0MzsJCQkgICAgICB1bnNpZ25lZCBsb25nICpvdXRfcGZuKTsKJiM0MztpbnQgdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwKJiM0MzsJCQkJICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSAgIHU2NCBwaHlzX3N0YXJ0LCB1NjQgcmVxX2xlbiwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IHJlc19pbmRleCk7CiYjNDM7dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTsKJiM0Mzt2b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZCk7CiYjNDM7dm9pZCB2ZmlvX3BjaV9zZXRfdm1hX29wcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRgogaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAogCQkJCSAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiBfX3VzZXIgKmFyZywKIAkJCQkgIHNpemVfdCBhcmdzeik7Ci12b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpOwotdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpOwomIzQzO2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoCiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSBfX3VzZXIgKmFyZywKJiM0MzsJc2l6ZV90IGFyZ3N6KTsKJiM0MztpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0cigKJiM0MzsJc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiYjNDM7CXN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBfX3VzZXIgKmFyZywKJiM0MzsJc2l6ZV90IGFyZ3N6KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludAogdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCkBAIC0xMjgsMTIgJiM0MzsxNzAsMjEgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsCiB7CiAJcmV0dXJuIC1FTk9UVFk7CiB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldikKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoCiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSBfX3VzZXIgKmFyZywKJiM0MzsJc2l6ZV90IGFyZ3N6KQogewomIzQzOwlyZXR1cm4gLUVOT1RUWTsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LAotCQkJCQkgYm9vbCByZXZva2VkKQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoCiYjNDM7CXN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLAomIzQzOwlzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgX191c2VyICphcmcsCiYjNDM7CXNpemVfdCBhcmdzeikKIHsKJiM0MzsJcmV0dXJuIC1FTk9UVFk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaAppbmRleCA4NzNkZTIwYTIyNDc1OS4uNGM0MmE3YjJlZTg1NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oCkBAIC02Nyw5ICYjNDM7NjcsMjIgQEAgZW51bSBwY2lfcDJwZG1hX21hcF90eXBlIHsKIAlQQ0lfUDJQRE1BX01BUF9USFJVX0hPU1RfQlJJREdFLAogfTsKIAotI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BCiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BX0NPUkUKIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKTsKJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHBjaW1fcDJwZG1hX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiYjNDM7CQkJCQkJCSAgIGludCBiYXIpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BCiBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsIHNpemVfdCBzaXplLAogCQl1NjQgb2Zmc2V0KTsKIGludCBwY2lfcDJwZG1hX2Rpc3RhbmNlX21hbnkoc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLCBzdHJ1Y3QgZGV2aWNlICoqY2xpZW50cywKQEAgLTg5LDE1ICYjNDM7MTAyLDYgQEAgc3NpemVfdCBwY2lfcDJwZG1hX2VuYWJsZV9zaG93KGNoYXIgKnBhZ2UsIHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2LAogZW51bSBwY2lfcDJwZG1hX21hcF90eXBlIHBjaV9wMnBkbWFfbWFwX3R5cGUoc3RydWN0IHAycGRtYV9wcm92aWRlciAqcHJvdmlkZXIsCiAJCQkJCSAgICAgc3RydWN0IGRldmljZSAqZGV2KTsKICNlbHNlIC8qIENPTkZJR19QQ0lfUDJQRE1BICovCi1zdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXJldHVybiAtRU9QTk9UU1VQUDsKLX0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCQkJICAgaW50IGJhcikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLAogCQlzaXplX3Qgc2l6ZSwgdTY0IG9mZnNldCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oCmluZGV4IDJjNDQ1NDU4M2MxMTViLi41MzFhZWMzNTU2ODZiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC01NTcsNyAmIzQzOzU1Nyw3IEBAIHN0cnVjdCBwY2lfZGV2IHsKIAl1MTYJCXBhc2lkX2NhcDsJLyogUEFTSUQgQ2FwYWJpbGl0eSBvZmZzZXQgKi8KIAl1MTYJCXBhc2lkX2ZlYXR1cmVzOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1BDSV9QMlBETUEKJiM0MzsjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFfQ09SRQogCXN0cnVjdCBwY2lfcDJwZG1hIF9fcmN1ICpwMnBkbWE7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUENJX0RPRQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaAppbmRleCA4OTE2NWI3NjllNWMxNi4uYTJmNTg2ZTRmY2Q4ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oCkBAIC0xMjcsNiAmIzQzOzEyNyw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7CiAJYm9vbAkJCW5lZWRzX3BtX3Jlc3RvcmU6MTsKIAlib29sCQkJcG1faW50eF9tYXNrZWQ6MTsKIAlib29sCQkJcG1fcnVudGltZV9lbmdhZ2VkOjE7CiYjNDM7CWJvb2wJCQl6YXBfYmFyc19vbl9yZXZva2U6MTsKIAlzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlCSpwY2lfc2F2ZWRfc3RhdGU7CiAJc3RydWN0IHBjaV9zYXZlZF9zdGF0ZQkqcG1fc2F2ZTsKIAlpbnQJCQlpb2V2ZW50ZmRzX25yOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKaW5kZXggNWRlNjE4YTNhNWVlZWUuLmFiMzBiODkzOTlkMDM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmgKQEAgLTE1MzQsNiAmIzQzOzE1MzQsNTMgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7CiAgKi8KICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyCiAKJiM0MzsvKioKJiM0MzsgKiBHaXZlbiBhIGRtYV9idWYgZmQgcHJldmlvdXNseSBjcmVhdGVkIGJ5CiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBhIFNFVCBvZiB0aGlzIGZlYXR1cmUgcmVxdWVzdHMgdGhhdAomIzQzOyAqIGFjY2VzcyB0byB0aGUgY29ycmVzcG9uZGluZyBETUFCVUYgaXMgaW1tZWRpYXRlbHkgYW5kIHBlcm1hbmVudGx5CiYjNDM7ICogcmV2b2tlZC4gIE9uIHN1Y2Nlc3NmdWwgcmV0dXJuLCB0aGUgYnVmZmVyIGlzIG5vdCBhY2Nlc3NpYmxlCiYjNDM7ICogdGhyb3VnaCBhbnkgbW1hcCgpIG9yIGRtYS1idWYgaW1wb3J0LiAgVGhlIGJ1ZmZlciBpcyBwZXJtYW5lbnRseQomIzQzOyAqIGRpc2FibGVkLCBhbmQgVkZJTyByZWZ1c2VzIGFsbCBtYXAsIG1tYXAsIGF0dGFjaCwgZXRjLiByZXF1ZXN0cy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6CiYjNDM7ICoKJiM0MzsgKiAgRUJBREYsIEVJTlZBTDogZG1hYnVmX2ZkIGlzIG5vdCBhIERNQUJVRiBmZC4KJiM0MzsgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuCiYjNDM7ICogIEVCQURGRDogVGhlIERNQUJVRiBpcyBhbHJlYWR5IHJldm9rZWQuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIDEzCiYjNDM7CiYjNDM7c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgewomIzQzOwlfX3MzMglkbWFidWZfZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBHaXZlbiBhIGRtYV9idWYgZmQgcHJldmlvdXNseSBjcmVhdGVkIGJ5CiYjNDM7ICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBTRVQgdGhlIG1lbW9yeSBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlCiYjNDM7ICogdXNlZCBieSBmdXR1cmUgbW1hcCgpcyBvZiB0aGF0IGZkLiAgU0VUdGluZyBhIG5ldyBhdHRyaWJ1dGUgZG9lcwomIzQzOyAqIG5vdCBhZmZlY3QgZXhpc3RpbmcgVk1Bcy4KJiM0MzsgKgomIzQzOyAqIFRoZSBkZWZhdWx0LCBpZiBubyBwcmV2aW91cyBTRVQgaGFzIGJlZW4gcGVyZm9ybWVkLCBpcyBOQy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6CiYjNDM7ICoKJiM0MzsgKiAgRUJBREYsIEVJTlZBTDogZG1hYnVmX2ZkIGlzIG5vdCBhIERNQUJVRiBmZC4KJiM0MzsgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuCiYjNDM7ICogIEVOT0VOVDogVGhlIGdpdmVuIG1lbWF0dHIgaXMgbm90IHN1cHBvcnRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSIDE0CiYjNDM7CiYjNDM7LyogVmFsaWQgbWVtb3J5IGF0dHJpYnV0ZXMgZm9yIHRoZSBtZW1hdHRyIGZpZWxkICovCiYjNDM7ZW51bSB2ZmlvX2RldmljZV9kbWFfYnVmX21lbWF0dHIgewomIzQzOwlWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQyA9IDAsIC8qIHBncHJvdF9ub25jYWNoZWQgKi8KJiM0MzsJVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MgPSAxLCAvKiBwZ3Byb3Rfd3JpdGVjb21iaW5lICovCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgewomIzQzOwlfX3MzMglkbWFidWZfZmQ7CiYjNDM7CV9fdTMyCW1lbWF0dHI7CiYjNDM7fTsKJiM0MzsKIC8qIC0tLS0tLS0tIEFQSSBmb3IgVHlwZTEgVkZJTyBJT01NVSAtLS0tLS0tLSAqLwogCiAvKioKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU3OTAKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgVkZJTyBQQ0kgRE1BLUJVRiBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byBob3cgVkZJTyBpbnRlcmFjdHMgd2l0aCBQQ0kgUDJQRE1BIGFuZCBETUEtQlVGLiAgVGhlIGdvYWwsIGl0IHNlZW1zLCBpcyB0byBpbXByb3ZlIERNQS1CVUYgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBWRklPIGZyYW1ld29yay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGNvZGUgaXMgdG91Y2hlZCBhbmQgaWYgaXTigJlzIGludGVyZXN0aW5nIGVub3VnaCBmb3IgZnV6emluZy4KCkZpcnN0bHksIHRoZXkmIzM5O3ZlIGludHJvZHVjZWQgYENPTkZJR19QQ0lfUDJQRE1BX0NPUkVgLCBhbmQgY3J1Y2lhbGx5LCB0aGV5JiMzOTt2ZSBzaGlmdGVkIGBDT05GSUdfVkZJT19QQ0lfRE1BQlVGYCB0byBub3cgKmRlcGVuZCogb24gYFBDSV9QMlBETUFgIHJhdGhlciB0aGFuIHJlcXVpcmluZyAqYm90aCogYFBDSV9QMlBETUFgIGFuZCBgRE1BX1NIQVJFRF9CVUZGRVJgLCB3aGljaCBpcyBzb21ldGhpbmcgdG8gaW1tZWRpYXRlbHkgbm90ZS4gVGhleSYjMzk7dmUgYWxzbyBhZGRlZCB0aGVzZSBuZXcgVkZJTyBmZWF0dXJlczogYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0VgIGFuZCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJgLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0aGVzZSBmZWF0dXJlcyBzdWdnZXN0IGVuaGFuY2VkIGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgb3ZlciBETUEtQlVGcy4KClRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIGhhcHBlbmluZyBpbiBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNgLCBgZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY2AsIGFuZCBgZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuY2AuIFdlIGtub3cgVkZJTyBpdHNlbGYgaXMgcmVhY2hhYmxlIGFuZCBpcyBhY3RpdmVseSBmdXp6ZWQgYnkgc3l6a2FsbGVyLCBzbyB0aGF04oCZcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgY2FuIHNlZSB0aGUgbmV3IGZlYXR1cmVzIGFyZSBoYW5kbGVkIGluIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgLCB3aGljaCBhbHNvIGhhbmRsZXMgb3RoZXIgaW9jdGxzIHRoYXQgbWF5IGJlIGdvb2QgdG8gZnV6ei4KCk5vdywgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBXZSBuZWVkOiBgQ09ORklHX1ZGSU9fUENJX0NPUkVgLCBgQ09ORklHX1ZGSU9fUENJYCwgYENPTkZJR19QQ0lfUDJQRE1BYCwgYW5kIGBDT05GSUdfVkZJT19QQ0lfRE1BQlVGYC4gIGBWRklPX1BDSV9ETUFCVUZgIGlzIHNwZWNpZmljYWxseSBjb25kaXRpb25hbCBpbiB0aGUgS2NvbmZpZyB3aXRoOiBgZGVmX2Jvb2wgeSBpZiBQQ0lfUDJQRE1BYCwgYW5kIGRlcGVuZGVudCBvbiBgVkZJT19QQ0lfQ09SRWAsIHNvIHRvIGVuYWJsZSBldmVyeXRoaW5nIGl0IHNlZW1zIHdlIG5lZWQgYFZGSU9fUENJYCBhcyB0aGF0IGJyaW5ncyBpbiBgVkZJT19QQ0lfQ09SRWAgd2hpY2ggdGhlbiBwdWxscyBpbiBgVkZJT19QQ0lfRE1BQlVGYC4gYFBDSV9QMlBETUFgLCBpbiB0aGUgUENJIEtjb25maWcsIHJlcXVpcmVzIGBaT05FX0RFVklDRWAuIFNvLCB0aGUgbWluaW1hbCBzZXQgaXM6IGBQQ0lfUDJQRE1BYCwgYFpPTkVfREVWSUNFYCwgYW5kIGBWRklPX1BDSWAuCgpUaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIHRoZSBuZXcgZmVhdHVyZSBoYW5kbGVyczogYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyYCwgYW5kIHRoZSBjaGFuZ2VzIHRvIGB2ZmlvX3BjaV9jb3JlX21tYXBgLiAgQWxzbywgdGhlIG5ldyBmdW5jdGlvbiBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYCBhbmQgc3VwcG9ydGluZyBmdW5jdGlvbnMgbGlrZSBgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbmAsIGB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0YCwgYHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZmAsIGFuZCBgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzYC4gIFRoZXnigJlyZSBhbGwgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAgYW5kIHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uIGFuZCBmdXp6aW5nLiBOb3csIGxldOKAmXMgZ2V0IHRoZSB0ZXN0aW5nIHRvb2xzIHJlYWR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTYyPWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTgwLVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFOlxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmM6MTU4MTpcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xNTgyLVx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUjpcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTY4Mj12b2lkIHZmaW9fcGNpX2RtYV9idWZfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy03MTAtI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NzExOmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTcxMi1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oPTE1ND1pbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTU2LVx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTU3OmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xNTgtXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaD0xNjc9dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTczLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTc0OnN0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTE3NS1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDg3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBWRklPIFBDSSBMYW5kc2NhcGU6IEZlYXR1cmUgQWNjZXNzIGFuZCBETUEgQnVmZmVyIE1hcHBpbmcqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IFZGSU8tUENJJiMzOTtzIGlubmVyIHdvcmtpbmdzLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IGZlYXR1cmVzIGFyZSBhY2Nlc3NlZC4gSXQgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCBmb3IgbWFuYWdpbmcgdGhvc2UgZmVhdHVyZXMgaXMgdGhlIGB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGludGVyYWN0aW9uIGZsb3cgcHJlY2lzZWx5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBzZXQgYW5kIGdldCB0aGluZ3MgdXNpbmcgdGhpcyBtZXRob2QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB3ZSBhcmUgYWJsZSB0byBkbyB0aGF0LCBhbmQgaW4gd2hhdCBzaXR1YXRpb25zLgoKQmV5b25kIHRoYXQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgRE1BIGJ1ZmZlciBtYXBwaW5nLCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byB0aGUgZmVhdHVyZXMgb2YgdGhlIGRldmljZSB0aGF0IHdlIGFyZSBhY2Nlc3NpbmcuIEkmIzM5O20gZ29pbmcgdG8gdHVybiBteSBhdHRlbnRpb24gdG8gYHZmaW9fcGNpX2RtYV9idWZfbW1hcGAuIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgaW50ZXJhY3Rpb24gb2YgdGhhdCBmdW5jdGlvbmFsaXR5LiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIGludG8gd2hhdCBkYXRhIHN0cnVjdHVyZXMgc3VwcG9ydCB0aGUgaW50ZXJhY3Rpb24uIEhvdyBkb2VzIHRoaXMgZml0IGludG8gdGhlIGxhcmdlciBwaWN0dXJlIG9mIHNlY3VyZSBETUEgYWNjZXNzIHdpdGhpbiBWRklPPyBBcmUgdGhlcmUgc3BlY2lmaWMgcHJvdGVjdGlvbnMgaW52b2x2ZWQsIGFuZCBpZiBzbywgaG93IGRvIHRoZXkgd29yaz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBtYWtlIHN1cmUgdGhpbmdzIGFyZSB3b3JraW5nIGFzIHRoZXkgc2hvdWxkIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfbW1hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTE0PXN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Zixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTMwLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzozMTpzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMzIte1xuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MTMwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzMi1cdC5hdHRhY2ggPSB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaCxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MTMzOlx0Lm1tYXAgPSB2ZmlvX3BjaV9kbWFfYnVmX21tYXAsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzNC0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODc0OQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5gKioKCk9rYXksIEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuYC4gSXQmIzM5O3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBkdWcgaW50byB0aGUgRE1BIGJ1ZmZlciBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgVkZJTy1QQ0kgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MsIHBhcnRpY3VsYXJseSBpdHMgcm9sZSBpbiBsb2NhdGluZyB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGFzc29jaWF0ZWQgd2l0aCBhIERNQSBidWZmZXIuIFRoaXMgaXMga2V5IGZvciBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9mIG1lbW9yeSBtYXBwaW5nIG9yIERNQSBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIGRyaXZlci4gS25vd2luZyBpdHMgYmVoYXZpb3Igd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IFZGSU8gaW50ZXJhY3RzIHdpdGggRE1BIGFuZCBwYWdlIGFsbG9jYXRpb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGUgYXJndW1lbnRzLCB0aGUgcmV0dXJuIHZhbHVlcywgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGFjY29tcGxpc2guIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgdXNlZCB3aXRoaW4gdGhlIHdpZGVyIFZGSU8tUENJIGZyYW1ld29yay4gV2hhdCBvdGhlciBWRklPIGZ1bmN0aW9ucyBkb2VzIGl0IGRlcGVuZCBvbiBvciBjb29yZGluYXRlIHdpdGg/IFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBjb2RlIGFuZCB0aGUgY29tbWl0IGxvZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNzM4PXN0YXRpYyB2bV9mYXVsdF90IHZmaW9fcGNpX21tYXBfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODIwLVx0XHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX09LKSB7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYzoxODIxOlx0XHRcdGludCBwcmVzID0gdmZpb19wY2lfZG1hX2J1Zl9maW5kX3Bmbihwcml2LCB2bWEsXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODIyLVx0XHRcdFx0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xMzktXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjE0MDppbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMTQxLVx0XHRcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NTIyPWludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNTU1LVx0ICpcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NTU2Olx0ICogdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbigpIHJldmVyc2VzIHRoaXMgb2Zmc2V0IHVzaW5nXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTU1Ny1cdCAqIHZtYV9wZ29mZl9hZGp1c3QsIHNvIHRoYXQgdWx0aW1hdGVseSBhIGZhdWx0JiMzOTtzIG9mZnNldCBmcm9tXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTM1PXN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTM5LVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTQwOmludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICp2cGRtYWJ1ZixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTE0MS1cdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTcyMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnRgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBtaW5kJiMzOTtzIGF1dG9tYXRpY2FsbHkganVtcGluZyB0byBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAuIFRoaXMgZnVuY3Rpb24sIG1vcmUgdGhhbiBsaWtlbHksIGlzIHRoZSBsaW5jaHBpbiB3ZSYjMzk7cmUgZ29pbmcgdG8gYmUgZm9jdXNpbmcgb24uIEl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLCB0aGUgcGxhY2Ugd2hlcmUgd2UgdHJhbnNpdGlvbiBkYXRhLCBhbmQgaXQgaXMgZ29pbmcgdG8gc2V0IHVwIHdoZXJlIGFsbCB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgaGFuZGxlZC4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiBETUEtQlVGIGV4cG9ydCB3aXRoaW4gdGhlIFZGSU8gY29udGV4dC4gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucz8gTWVtb3J5IG1hcHBpbmdzLCBhY2Nlc3MgcGVybWlzc2lvbnMsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIOKAkyB0aG9zZSBhcmUgdGhlIHR5cGVzIG9mIHRoaW5ncyBJJiMzOTttIG1lbnRhbGx5IHBhcnNpbmcgYXMgSSBnby4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGF0LCBhbmQgaG93IGl0IGlzIGFsbCBwbHVtYmVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHRoaXMgZXhwb3J0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB0aGV5JiMzOTt2ZSBkb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2ZmlvX3BjaV9kbWFidWZfZXhwb3J0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9MTQwPWludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjg0LSAqL1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoyODU6c3RhdGljIGludCB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjg2LVx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwgdTMyIGZsYWdzKVxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NDMzPWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTQ5OC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NDk5Olx0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBnZXRfZG1hX2J1Zi5vcGVuX2ZsYWdzKTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNTAwLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTUyMj1pbnQgdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTU3NC1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6NTc1Olx0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBPX0NMT0VYRUMgfCBPX1JEV1IpO1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy01NzYtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAwMDoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDUyMwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byBgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBmb3IgbWFuYWdpbmcgRE1BIGJ1ZmZlciBzdGF0dXMgd2l0aGluIHRoZSBWRklPLVBDSSBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIERNQSBidWZmZXIgaXRzZWxmLCBhbmQgd2hhdCBpbXBsaWNhdGlvbnMgaXQgaGFzIGZvciB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIE15IHByaW1hcnkgY29uY2VybiBpcyBhbHdheXMgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5OyBob3cgaXMgdGhpcyBoYW5kbGVkIGhlcmU/IEkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IGJhcnJpZXJzLCBjYWNoZSBjb2hlcmVuY3ksIGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMg4oCTIHRoaXMgYXJlYSBpcyBub3RvcmlvdXNseSB0cmlja3kuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGxzLCBlc3BlY2lhbGx5IHRoZSBvbmVzIHJlbGF0ZWQgdG8gc2V0dGluZyBmbGFncyBvciB1cGRhdGluZyBzdGF0ZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHJvYnVzdCwgZXNwZWNpYWxseSB3aXRoIHJlZ2FyZCB0byB0aGUgdmFyaW91cyBwb3NzaWJsZSBndWVzdCBPUyBiZWhhdmlvcnMgYW5kIHBvdGVudGlhbCBtYWxpY2lvdXMgYXR0ZW1wdHMgYXQgYWNjZXNzaW5nIGRhdGEgdGhleSBzaG91bGRuJiMzOTt0LiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGRlYWwgd2l0aCB0aGUgYnVmZmVyIHN0YXR1cyBhbmQgaG93IHRoZXkgZG8gZXJyb3IgaGFuZGxpbmcsIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NTIyPWludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNjA4LS8qIFNldCB0aGUgRE1BQlVGJiMzOTtzIHJldm9jYXRpb24gc3RhdHVzIChPSyBvciB0ZW1wb3JhcmlseS9wZXJtYW5lbnRseSByZXZva2VkKSAqL1xuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzo2MDk6c3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy02MTAtXHRcdFx0XHRcdGVudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMgbmV3X3N0YXR1cylcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTY2MT12b2lkIHZmaW9fcGNpX2RtYV9idWZfbW92ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGJvb2wgcmV2b2tlZClcbi0tXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTY3NC1cdFx0XHRjb250aW51ZTtcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6Njc1Olx0XHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdiwgcmV2b2tlZCA/XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTY3Ni1cdFx0XHRcdFx0ICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOlxuLS1cbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NzExPWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4tLVxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy03NTktXHRcdH0gZWxzZSB7XG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjc2MDpcdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdixcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNzYxLVx0XHRcdFx0XHRcdCAgICBWRklPX1BDSV9ETUFCVUZfUEVSTV9SRVZPS0VEKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMDA6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzEzNDEKCQkJCQkJCW91dHB1dDogMjQyCgkJCQkJCQl0aG91Z2h0czogNDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFZGSU8gUENJIERNQS1CVUYgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIFZGSU8gUENJIERNQS1CVUYgc3VwcG9ydC4gV2UmIzM5O3JlIHRhbGtpbmcgbmV3IGlvY3RscyBhbmQgbW1hcCBoYW5kbGluZyBoZXJlLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy4gSSBuZWVkIHRvIG1ha2UgYSBub3RlIHRvIGFkZCB0aGF0IHRvIHRoZSBmdXp6aW5nIHF1ZXVlLgoKTm93LCBmb3IgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHJgLCBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYCwgYHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5gLCBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAsIGB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWZgLCBhbmQgYHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLgoKTmV4dCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgYFZGSU9fUENJYCwgYFBDSV9QMlBETUFgLCBhbmQgYFpPTkVfREVWSUNFYC4gSG1tLCBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgYFpPTkVfREVWSUNFYCBpcyBpbmRlZWQgYSBoYXJkIHJlcXVpcmVtZW50LiBBaCwgeWVzLCBgUENJX1AyUERNQWAgZGVwZW5kcyBvbiBgWk9ORV9ERVZJQ0VgLCBzbyB3ZSBhYnNvbHV0ZWx5IG5lZWQgdG8gaGF2ZSB0aGF0IGVuYWJsZWQuIEdvb2QsIGRvdWJsZS1jaGVja2VkLgoKTm93LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGp1c3QgYFZGSU9fUENJYCBpcyBzdWZmaWNpZW50LCBvciBpZiBgVkZJT19QQ0lfQ09SRWAgaXMgYWxzbyBuZWNlc3NhcnkuIEV4Y2VsbGVudCwgYFZGSU9fUENJYCBzZWxlY3RzIGBWRklPX1BDSV9DT1JFYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gV2UmIzM5O3JlIGdvb2Qgd2l0aCBqdXN0IGVuYWJsaW5nIGBWRklPX1BDSWAuCgpMZXQmIzM5O3Mgc2VlLCB3aGF0IGFib3V0IGBWRklPX1BDSV9ETUFCVUZgPyBJcyB0aGF0IGEgc2VwYXJhdGUgY29uZmlnIG9wdGlvbj8gWWVzLCBpdCBpcyEgV2FpdC4uLiBpdCYjMzk7cyBhIGBkZWZfYm9vbCB5IGlmIFBDSV9QMlBETUFgLiBTbywgaXQmIzM5O3MgYXV0b21hdGljYWxseSBlbmFibGVkIGlmIGBQQ0lfUDJQRE1BYCBpcyBlbmFibGVkLiBPa2F5LCB0aGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gV2UgZG9uJiMzOTt0IGhhdmUgdG8gd29ycnkgYWJvdXQgZW5hYmxpbmcgdGhhdCBleHBsaWNpdGx5LgoKTGV0IG1lIHNlZSwgYXJlIHRoZXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRvIGtlZXAgYW4gZXllIG9uPyBgUENJX1AyUERNQV9DT1JFYCBsb29rcyByZWxldmFudCwgYnV0IGl0JiMzOTtzIHNlbGVjdGVkIGJ5IGJvdGggYFBDSV9QMlBETUFgIGFuZCBgVkZJT19QQ0lfQ09SRWAuIFNpbmNlIHdlIGFscmVhZHkga25vdyB0aGF0IHRoZXNlIGNvbmZpZ3MgYXJlIGFscmVhZHkgYWN0aXZhdGVkLCBpdCYjMzk7cyBlbmFibGVkIGF1dG9tYXRpY2FsbHkuIEdvb2QuCgpBbHJpZ2h0LCB3aXRoIGFsbCB0aGF0IG91dCBvZiB0aGUgd2F5LCBJIHRoaW5rIEkmIzM5O20gcmVhZHkgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZG9jdW1lbnQgdGhlc2UgZmluZGluZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDAwOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHImIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9tbWFwJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4mIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hYnVmX2V4cG9ydCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGSU8gZmVhdHVyZXMgKFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0UgYW5kIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSKSBhbmQgbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxpbmcgdG8gdXNlIERNQUJVRi1iYWNrZWQgbW1hcHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtWRklPX1BDSSYjMzQ7LAogICAgJiMzNDtQQ0lfUDJQRE1BJiMzNDssCiAgICAmIzM0O1pPTkVfREVWSUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHImIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9tbWFwJiMzNDssCiAgICAmIzM0O3ZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4mIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hYnVmX2V4cG9ydCYjMzQ7LAogICAgJiMzNDt2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYmIzM0OywKICAgICYjMzQ7dmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGSU8gZmVhdHVyZXMgKFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0UgYW5kIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSKSBhbmQgbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxpbmcgdG8gdXNlIERNQUJVRi1iYWNrZWQgbW1hcHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDJUMDA6MjA6MDUuNzYzMDE2MzI4WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MDM0NjU3OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVkZJT19QQ0lcIixcbiAgICBcIlBDSV9QMlBETUFcIixcbiAgICBcIlpPTkVfREVWSUNFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlXCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX21tYXBcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5cIixcbiAgICBcInZmaW9fcGNpX2RtYWJ1Zl9leHBvcnRcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZlwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXcgVkZJTyBmZWF0dXJlcyAoVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1JFVk9LRSBhbmQgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFIpIGFuZCBtb2RpZmllcyB0aGUgbW1hcCBoYW5kbGluZyB0byB1c2UgRE1BQlVGLWJhY2tlZCBtbWFwcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjA1Ljc2MzAyNDc4OFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyNDkwNDU1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJlMzA3OTc3YjYxNDkzNTUwODliYTA4MzEzM2FmMjEzN2RkMTQ1YjBcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMiAwMDoyMDowNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTXFxuaW5kZXggYzhkNGI5MTNmMjZjMTIuLjcxMzg2MWFmNDQ4NDZhIDEwMDY0NFxcbi0tLSBhL01BSU5UQUlORVJTXFxuKysrIGIvTUFJTlRBSU5FUlNcXG5AQCAtMjA2MjYsNyArMjA2MjYsNyBAQCBCOlxcdGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZ1xcbiBDOlxcdGlyYzovL2lyYy5vZnRjLm5ldC9saW51eC1wY2lcXG4gVDpcXHRnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3BjaS9wY2kuZ2l0XFxuIEY6XFx0RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BjaS9wMnBkbWEucnN0XFxuLUY6XFx0ZHJpdmVycy9wY2kvcDJwZG1hLmNcXG4rRjpcXHRkcml2ZXJzL3BjaS9wMnBkbWEqXFxuIEY6XFx0aW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcXG4gXFxuIFBDSSBQT1dFUiBDT05UUk9MXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXFxuaW5kZXggMzNjODg0MzJiNzI4NzUuLjU5ZDcwYmM4NGNjOWFjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvcGNpL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnXFxuQEAgLTIwNiwxMSArMjA2LDcgQEAgY29uZmlnIFBDSUVfVFBIXFxuIGNvbmZpZyBQQ0lfUDJQRE1BXFxuIFxcdGJvb2wgXFxcIlBDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFxcXCJcXG4gXFx0ZGVwZW5kcyBvbiBaT05FX0RFVklDRVxcbi1cXHQjXFxuLVxcdCMgVGhlIG5lZWQgZm9yIHRoZSBzY2F0dGVybGlzdCBETUEgYnVzIGFkZHJlc3MgZmxhZyBtZWFucyBQQ0kgUDJQRE1BXFxuLVxcdCMgcmVxdWlyZXMgNjRiaXRcXG4tXFx0I1xcbi1cXHRkZXBlbmRzIG9uIDY0QklUXFxuK1xcdHNlbGVjdCBQQ0lfUDJQRE1BX0NPUkVcXG4gXFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuIFxcdHNlbGVjdCBORUVEX1NHX0RNQV9GTEFHU1xcbiBcXHRoZWxwXFxuQEAgLTIyNiw2ICsyMjIsMTAgQEAgY29uZmlnIFBDSV9QMlBETUFcXG4gXFxuIFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gXFxuK2NvbmZpZyBQQ0lfUDJQRE1BX0NPUkVcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGJvb2xcXG4rXFxuIGNvbmZpZyBQQ0lfTEFCRUxcXG4gXFx0ZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpXFxuIFxcdHNlbGVjdCBOTFNcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxcbmluZGV4IDQxZWJjM2I5YTUxODI0Li4wYjMyNTcyZDU3YTE1OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZVxcbisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlXFxuQEAgLTMwLDYgKzMwLDcgQEAgb2JqLSQoQ09ORklHX1BDSV9TWVNDQUxMKVxcdCs9IHN5c2NhbGwub1xcbiBvYmotJChDT05GSUdfUENJX1NUVUIpXFx0XFx0Kz0gcGNpLXN0dWIub1xcbiBvYmotJChDT05GSUdfUENJX1BGX1NUVUIpXFx0Kz0gcGNpLXBmLXN0dWIub1xcbiBvYmotJChDT05GSUdfUENJX0VDQU0pXFx0XFx0Kz0gZWNhbS5vXFxuK29iai0kKENPTkZJR19QQ0lfUDJQRE1BX0NPUkUpXFx0Kz0gcDJwZG1hX2NvcmUub1xcbiBvYmotJChDT05GSUdfUENJX1AyUERNQSlcXHQrPSBwMnBkbWEub1xcbiBvYmotJChDT05GSUdfWEVOX1BDSURFVl9GUk9OVEVORCkgKz0geGVuLXBjaWZyb250Lm9cXG4gb2JqLSQoQ09ORklHX1ZHQV9BUkIpXFx0XFx0Kz0gdmdhYXJiLm9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmMgYi9kcml2ZXJzL3BjaS9wMnBkbWEuY1xcbmluZGV4IDdjODk4NTQyYWY4ZDVlLi41MGIxYTdkYWY1NWNjNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3BjaS9wMnBkbWEuY1xcbisrKyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jXFxuQEAgLTIxLDEyICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZXFfYnVmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC94YXJyYXkuaFxcdTAwM2VcXG4gXFxuLXN0cnVjdCBwY2lfcDJwZG1hIHtcXG4tXFx0c3RydWN0IGdlbl9wb29sICpwb29sO1xcbi1cXHRib29sIHAycG1lbV9wdWJsaXNoZWQ7XFxuLVxcdHN0cnVjdCB4YXJyYXkgbWFwX3R5cGVzO1xcbi1cXHRzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyIG1lbVtQQ0lfU1REX05VTV9CQVJTXTtcXG4tfTtcXG4rI2luY2x1ZGUgXFxcInAycGRtYS5oXFxcIlxcbiBcXG4gc3RydWN0IHBjaV9wMnBkbWFfcGFnZW1hcCB7XFxuIFxcdHN0cnVjdCBkZXZfcGFnZW1hcCBwZ21hcDtcXG5AQCAtMjI2LDExMCArMjIxLDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BhZ2VtYXBfb3BzIHAycGRtYV9wZ21hcF9vcHMgPSB7XFxuIFxcdC5mb2xpb19mcmVlID0gcDJwZG1hX2ZvbGlvX2ZyZWUsXFxuIH07XFxuIFxcbi1zdGF0aWMgdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2Uodm9pZCAqZGF0YSlcXG4rdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSlcXG4ge1xcbi1cXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGRhdGE7XFxuLVxcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XFxuLVxcbi1cXHRwMnBkbWEgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuLVxcdGlmICghcDJwZG1hKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcbi1cXHQvKiBGbHVzaCBhbmQgZGlzYWJsZSBwY2lfYWxsb2NfcDJwX21lbSgpICovXFxuLVxcdHBkZXYtXFx1MDAzZXAycGRtYSA9IE5VTEw7XFxuLVxcdGlmIChwMnBkbWEtXFx1MDAzZXBvb2wpXFxuLVxcdFxcdHN5bmNocm9uaXplX3JjdSgpO1xcbi1cXHR4YV9kZXN0cm95KFxcdTAwMjZwMnBkbWEtXFx1MDAzZW1hcF90eXBlcyk7XFxuLVxcbiBcXHRpZiAoIXAycGRtYS1cXHUwMDNlcG9vbClcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuIFxcdGdlbl9wb29sX2Rlc3Ryb3kocDJwZG1hLVxcdTAwM2Vwb29sKTtcXG4gXFx0c3lzZnNfcmVtb3ZlX2dyb3VwKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYua29iaiwgXFx1MDAyNnAycG1lbV9ncm91cCk7XFxuIH1cXG4gXFxuLS8qKlxcbi0gKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyc1xcbi0gKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcXG4tICpcXG4tICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZVxcbi0gKiBmb3IgYSBQQ0kgZGV2aWNlLiBJdCBhbGxvY2F0ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhXFxuLSAqIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBQMlBETUEgb3BlcmF0aW9ucywgaW5jbHVkaW5nIG1hcHBpbmcgdHlwZVxcbi0gKiB0cmFja2luZy5cXG4tICovXFxuLWludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi17XFxuLVxcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XFxuLVxcdGludCBpLCByZXQ7XFxuLVxcbi1cXHRwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuLVxcdGlmIChwMnApXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0cDJwID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghcDJwKVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFxuLVxcdHhhX2luaXQoXFx1MDAyNnAycC1cXHUwMDNlbWFwX3R5cGVzKTtcXG4tXFx0LypcXG4tXFx0ICogSXRlcmF0ZSBvdmVyIGFsbCBzdGFuZGFyZCBQQ0kgQkFScyBhbmQgcmVjb3JkIG9ubHkgdGhvc2UgdGhhdFxcbi1cXHQgKiBjb3JyZXNwb25kIHRvIE1NSU8gcmVnaW9ucy4gU2tpcCBub24tbWVtb3J5IHJlc291cmNlcyAoZS5nLiBJL09cXG4tXFx0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcXG4tXFx0ICogdHJhbnNhY3Rpb25zLlxcbi1cXHQgKi9cXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkrKykge1xcbi1cXHRcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0cDJwLVxcdTAwM2VtZW1baV0ub3duZXIgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbi1cXHRcXHRwMnAtXFx1MDAzZW1lbVtpXS5idXNfb2Zmc2V0ID1cXG4tXFx0XFx0XFx0cGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBvdXRfcDJwO1xcbi1cXG4tXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXFx1MDAzZXAycGRtYSwgcDJwKTtcXG4tXFx0cmV0dXJuIDA7XFxuLVxcbi1vdXRfcDJwOlxcbi1cXHRkZXZtX2tmcmVlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHAycCk7XFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfaW5pdCk7XFxuLVxcbi0vKipcXG4tICogcGNpbV9wMnBkbWFfcHJvdmlkZXIgLSBHZXQgcGVlci10by1wZWVyIERNQSBwcm92aWRlclxcbi0gKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcXG4tICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxcbi0gKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGdldHMgcGVlci10by1wZWVyIERNQSBwcm92aWRlciBmb3IgYSBQQ0kgZGV2aWNlLiBUaGUgbGlmZXRpbWVcXG4tICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXFxuLSAqIGRyaXZlci4gQSBkcml2ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlXFxuLSAqIHByb3ZpZGVyLCBhbmQgYW55IERNQSBtYXBwaW5ncyBjcmVhdGVkIGZvciBhbnkgTU1JTywgYXJlIGFsbCBjbGVhbmVkIHVwXFxuLSAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cXG4tICpcXG4tICogU2luY2UgUDJQIGlzIGFsbW9zdCBhbHdheXMgc2hhcmVkIHdpdGggYSBzZWNvbmQgZHJpdmVyIHRoaXMgbWVhbnMgc29tZSBzeXN0ZW1cXG4tICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8ncyBETUEgbXVzdCBiZSBpbiBwbGFjZSB0byB1c2UgdGhpc1xcbi0gKiBmdW5jdGlvbi4gRm9yIGV4YW1wbGUgYSByZXZva2UgY2FuIGJlIGJ1aWx0IHVzaW5nIERNQUJVRi5cXG4tICovXFxuLXN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKVxcbi17XFxuLVxcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XFxuLVxcbi1cXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSlcXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuLVxcdGlmIChXQVJOX09OKCFwMnApKVxcbi1cXHRcXHQvKiBTb21lb25lIGZvcmdvdCB0byBjYWxsIHRvIHBjaW1fcDJwZG1hX2luaXQoKSBiZWZvcmUgKi9cXG4tXFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcbi1cXHRyZXR1cm4gXFx1MDAyNnAycC1cXHUwMDNlbWVtW2Jhcl07XFxuLX1cXG4tRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfcHJvdmlkZXIpO1xcbi1cXG4gc3RhdGljIGludCBwY2lfcDJwZG1hX3NldHVwX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTtcXG5AQCAtOTMyLDggKzgzMyw4IEBAIHZvaWQgKnBjaV9hbGxvY19wMnBtZW0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHNpemVfdCBzaXplKVxcbiBcXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwZG1hO1xcbiBcXG4gXFx0LypcXG4tXFx0ICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2UoKSB0b1xcbi1cXHQgKiBlbnN1cmUgcGRldi1cXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXFxuK1xcdCAqIFBhaXJzIHdpdGggc3luY2hyb25pemVfcmN1KCkgaW4gcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woKVxcbitcXHQgKiB0byBlbnN1cmUgcGRldi1cXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXFxuIFxcdCAqIHJlYWQtbG9jay5cXG4gXFx0ICovXFxuIFxcdHJjdV9yZWFkX2xvY2soKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmggYi9kcml2ZXJzL3BjaS9wMnBkbWEuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjk0NjM4MzgwOTk4MTQ5XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvcGNpL3AycGRtYS5oXFxuQEAgLTAsMCArMSwyOSBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbisvKlxcbisgKiBQQ0kgcGVlci10by1wZWVyIERNQSBzdXBwb3J0LlxcbisgKi9cXG4rXFxuKyNpZm5kZWYgX1BDSV9QMlBETUFfSFxcbisjZGVmaW5lIF9QQ0lfUDJQRE1BX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZW5hbGxvYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgveGFycmF5LmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgcGNpX3AycGRtYSB7XFxuK1xcdHN0cnVjdCBnZW5fcG9vbCAqcG9vbDtcXG4rXFx0Ym9vbCBwMnBtZW1fcHVibGlzaGVkO1xcbitcXHRzdHJ1Y3QgeGFycmF5IG1hcF90eXBlcztcXG4rXFx0c3RydWN0IHAycGRtYV9wcm92aWRlciBtZW1bUENJX1NURF9OVU1fQkFSU107XFxuK307XFxuK1xcbisjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcXG4rdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSk7XFxuKyNlbHNlXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSlcXG4re1xcbit9XFxuKyNlbmRpZlxcbitcXG4rI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3AycGRtYV9jb3JlLmMgYi9kcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYmIyMTM4YmYyYmM3YjdcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuY1xcbkBAIC0wLDAgKzEsMTE4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qXFxuKyAqIFBDSSBwZWVyLXRvLXBlZXIgRE1BIHN1cHBvcnQgY29yZSwgcHJvdmlkaW5nIGEgYmFyZS1ib25lc1xcbisgKiBwY2ltX3AycGRtYV9wcm92aWRlcigpIGludGVyZmFjZSB0byBkcml2ZXJzIGV2ZW4gaWYgZnVsbCBQMlBETUFcXG4rICogaXNuJ3QgcHJlc2VudC4gIFRoZSBmdWxsIFAyUERNQSBmZWF0dXJlIGlzIGluIHAycGRtYS5jIChzZWVcXG4rICogQ09ORklHX1BDSV9QMlBETUEpLlxcbisgKlxcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgTG9nYW4gR3VudGhvcnBlXFxuKyAqIENvcHlyaWdodCAoYykgMjAxNi0yMDE3LCBNaWNyb3NlbWkgQ29ycG9yYXRpb25cXG4rICogQ29weXJpZ2h0IChjKSAyMDE3LCBDaHJpc3RvcGggSGVsbHdpZ1xcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEVpZGV0aWNvbSBJbmMuXFxuKyAqL1xcbitcXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcXFwicGNpLXAycGRtYTogXFxcIiBmbXRcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2N0eXBlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZW5hbGxvYy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWVtcmVtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3hhcnJheS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInAycGRtYS5oXFxcIlxcbitcXG4rc3RhdGljIHZvaWQgcGNpX3AycGRtYV9yZWxlYXNlKHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhO1xcbitcXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwZG1hO1xcbitcXG4rXFx0cDJwZG1hID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwZGV2LVxcdTAwM2VwMnBkbWEsIDEpO1xcbitcXHRpZiAoIXAycGRtYSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0LyogRmx1c2ggYW5kIGRpc2FibGUgcGNpX2FsbG9jX3AycF9tZW0oKSAqL1xcbitcXHRwZGV2LVxcdTAwM2VwMnBkbWEgPSBOVUxMO1xcbitcXHRwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChwZGV2LCBwMnBkbWEpO1xcbitcXHR4YV9kZXN0cm95KFxcdTAwMjZwMnBkbWEtXFx1MDAzZW1hcF90eXBlcyk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyc1xcbisgKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZVxcbisgKiBmb3IgYSBQQ0kgZGV2aWNlLiBJdCBhbGxvY2F0ZXMgYW5kIHNldHMgdXAgdGhlIG5lY2Vzc2FyeSBkYXRhXFxuKyAqIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBQMlBETUEgb3BlcmF0aW9ucywgaW5jbHVkaW5nIG1hcHBpbmcgdHlwZVxcbisgKiB0cmFja2luZy5cXG4rICovXFxuK2ludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XFxuK1xcdGludCBpLCByZXQ7XFxuK1xcbitcXHRwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuK1xcdGlmIChwMnApXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cDJwID0gZGV2bV9remFsbG9jKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcDJwKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdHhhX2luaXQoXFx1MDAyNnAycC1cXHUwMDNlbWFwX3R5cGVzKTtcXG4rXFx0LypcXG4rXFx0ICogSXRlcmF0ZSBvdmVyIGFsbCBzdGFuZGFyZCBQQ0kgQkFScyBhbmQgcmVjb3JkIG9ubHkgdGhvc2UgdGhhdFxcbitcXHQgKiBjb3JyZXNwb25kIHRvIE1NSU8gcmVnaW9ucy4gU2tpcCBub24tbWVtb3J5IHJlc291cmNlcyAoZS5nLiBJL09cXG4rXFx0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcXG4rXFx0ICogdHJhbnNhY3Rpb25zLlxcbitcXHQgKi9cXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFBDSV9TVERfTlVNX0JBUlM7IGkrKykge1xcbitcXHRcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgaSkgXFx1MDAyNiBJT1JFU09VUkNFX01FTSkpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0cDJwLVxcdTAwM2VtZW1baV0ub3duZXIgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbitcXHRcXHRwMnAtXFx1MDAzZW1lbVtpXS5idXNfb2Zmc2V0ID1cXG4rXFx0XFx0XFx0cGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpO1xcbitcXHR9XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcGNpX3AycGRtYV9yZWxlYXNlLCBwZGV2KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBvdXRfcDJwO1xcbitcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXFx1MDAzZXAycGRtYSwgcDJwKTtcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitvdXRfcDJwOlxcbitcXHRkZXZtX2tmcmVlKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIHAycCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfaW5pdCk7XFxuK1xcbisvKipcXG4rICogcGNpbV9wMnBkbWFfcHJvdmlkZXIgLSBHZXQgcGVlci10by1wZWVyIERNQSBwcm92aWRlclxcbisgKiBAcGRldjogVGhlIFBDSSBkZXZpY2UgdG8gZW5hYmxlIFAyUERNQSBmb3JcXG4rICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgcGVlci10by1wZWVyIERNQSBwcm92aWRlciBmb3IgYSBQQ0kgZGV2aWNlLiBUaGUgbGlmZXRpbWVcXG4rICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXFxuKyAqIGRyaXZlci4gQSBkcml2ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlZmVyZW5jZXMgdG8gdGhlXFxuKyAqIHByb3ZpZGVyLCBhbmQgYW55IERNQSBtYXBwaW5ncyBjcmVhdGVkIGZvciBhbnkgTU1JTywgYXJlIGFsbCBjbGVhbmVkIHVwXFxuKyAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cXG4rICpcXG4rICogU2luY2UgUDJQIGlzIGFsbW9zdCBhbHdheXMgc2hhcmVkIHdpdGggYSBzZWNvbmQgZHJpdmVyIHRoaXMgbWVhbnMgc29tZSBzeXN0ZW1cXG4rICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8ncyBETUEgbXVzdCBiZSBpbiBwbGFjZSB0byB1c2UgdGhpc1xcbisgKiBmdW5jdGlvbi4gRm9yIGV4YW1wbGUgYSByZXZva2UgY2FuIGJlIGJ1aWx0IHVzaW5nIERNQUJVRi5cXG4rICovXFxuK3N0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKVxcbit7XFxuK1xcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XFxuK1xcbitcXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcXHUwMDI2IElPUkVTT1VSQ0VfTUVNKSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRwMnAgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHBkZXYtXFx1MDAzZXAycGRtYSwgMSk7XFxuK1xcdGlmIChXQVJOX09OKCFwMnApKVxcbitcXHRcXHQvKiBTb21lb25lIGZvcmdvdCB0byBjYWxsIHRvIHBjaW1fcDJwZG1hX2luaXQoKSBiZWZvcmUgKi9cXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRyZXR1cm4gXFx1MDAyNnAycC1cXHUwMDNlbWVtW2Jhcl07XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwocGNpbV9wMnBkbWFfcHJvdmlkZXIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcgYi9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdcXG5pbmRleCAyOTZiZjAxZTE4NWVjYS4uNjdhMmFlMWZiYzA0YmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXFxuQEAgLTYsNiArNiw4IEBAIGNvbmZpZyBWRklPX1BDSV9DT1JFXFxuIFxcdHRyaXN0YXRlXFxuIFxcdHNlbGVjdCBWRklPX1ZJUlFGRFxcbiBcXHRzZWxlY3QgSVJRX0JZUEFTU19NQU5BR0VSXFxuK1xcdHNlbGVjdCBQQ0lfUDJQRE1BX0NPUkVcXG4rXFx0c2VsZWN0IERNQV9TSEFSRURfQlVGRkVSXFxuIFxcbiBjb25maWcgVkZJT19QQ0lfSU5UWFxcbiBcXHRkZWZfYm9vbCB5IGlmICFTMzkwXFxuQEAgLTU2LDcgKzU4LDggQEAgY29uZmlnIFZGSU9fUENJX1pERVZfS1ZNXFxuIFxcdCAgVG8gZW5hYmxlIHMzOTB4IEtWTSB2ZmlvLXBjaSBleHRlbnNpb25zLCBzYXkgWS5cXG4gXFxuIGNvbmZpZyBWRklPX1BDSV9ETUFCVUZcXG4tXFx0ZGVmX2Jvb2wgeSBpZiBWRklPX1BDSV9DT1JFIFxcdTAwMjZcXHUwMDI2IFBDSV9QMlBETUEgXFx1MDAyNlxcdTAwMjYgRE1BX1NIQVJFRF9CVUZGRVJcXG4rXFx0ZGVmX2Jvb2wgeSBpZiBQQ0lfUDJQRE1BXFxuK1xcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxcbiBcXG4gc291cmNlIFxcXCJkcml2ZXJzL3ZmaW8vcGNpL21seDUvS2NvbmZpZ1xcXCJcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXFxuaW5kZXggNjEzOGYxYmYyNDFkZjAuLjg4MTQ1MmVhODliZTBjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlXFxuQEAgLTEsOCArMSw3IEBAXFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiBcXG4tdmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcub1xcbit2ZmlvLXBjaS1jb3JlLXkgOj0gdmZpb19wY2lfY29yZS5vIHZmaW9fcGNpX2ludHJzLm8gdmZpb19wY2lfcmR3ci5vIHZmaW9fcGNpX2NvbmZpZy5vIHZmaW9fcGNpX2RtYWJ1Zi5vXFxuIHZmaW8tcGNpLWNvcmUtJChDT05GSUdfVkZJT19QQ0lfWkRFVl9LVk0pICs9IHZmaW9fcGNpX3pkZXYub1xcbi12ZmlvLXBjaS1jb3JlLSQoQ09ORklHX1ZGSU9fUENJX0RNQUJVRikgKz0gdmZpb19wY2lfZG1hYnVmLm9cXG4gb2JqLSQoQ09ORklHX1ZGSU9fUENJX0NPUkUpICs9IHZmaW8tcGNpLWNvcmUub1xcbiBcXG4gdmZpby1wY2kteSA6PSB2ZmlvX3BjaS5vXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXFxuaW5kZXggYmIxMjFmNjM1YjlmN2YuLmQ5ZjI2YjBjZTk5MWQ5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmNcXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL2hpc2lsaWNvbi9oaXNpX2FjY192ZmlvX3BjaS5jXFxuQEAgLTE3MjUsNiArMTcyNSwxNCBAQCBzdGF0aWMgaW50IGhpc2lfYWNjX3ZmaW9fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZVxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRnb3RvIG91dF9wdXRfdmRldjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIGhpc2lfYWNjX3ZmaW9fcGNpX21tYXAoKSBjYWxscyBkb3duIHRvXFxuK1xcdCAqIHZmaW9fcGNpX2NvcmVfbW1hcCgpLCBzbyBCQVIgbWFwcGluZ3MgYXJlIHN0aWxsXFxuK1xcdCAqIERNQUJVRi1iYWNrZWQuICBUaGV5IGRvbid0IHJlcXVpcmUgYSB6YXAgb24gcmV2b2tlLCBzbyBvcHRcXG4rXFx0ICogb3V0OlxcbitcXHQgKi9cXG4rXFx0aGlzaV9hY2NfdmRldi1cXHUwMDNlY29yZV9kZXZpY2UuemFwX2JhcnNfb25fcmV2b2tlID0gZmFsc2U7XFxuK1xcbiBcXHRoaXNpX2FjY192ZmlvX2RlYnVnX2luaXQoaGlzaV9hY2NfdmRldik7XFxuIFxcdHJldHVybiAwO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG5pbmRleCBhMTBlZDczM2YwZTNhZi4uYmM2Y2NiMmUxMzVjM2MgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcXG5AQCAtNTkwLDEyICs1OTAsMTAgQEAgc3RhdGljIGludCB2ZmlvX2Jhc2ljX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXFxuIFxcdFxcdHZpcnRfbWVtID0gISEobGUxNl90b19jcHUoKnZpcnRfY21kKSBcXHUwMDI2IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuIFxcdFxcdG5ld19tZW0gPSAhIShuZXdfY21kIFxcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKTtcXG4gXFxuLVxcdFxcdGlmICghbmV3X21lbSkge1xcbi1cXHRcXHRcXHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XFxuLVxcdFxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKCFuZXdfbWVtKVxcbitcXHRcXHRcXHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xcbitcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4tXFx0XFx0fVxcbiBcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogSWYgdGhlIHVzZXIgaXMgd3JpdGluZyBtZW0vaW8gZW5hYmxlIChuZXdfbWVtL2lvKSBhbmQgd2VcXG5AQCAtNjMxLDcgKzYyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19iYXNpY19jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxcbiBcXHRcXHQqdmlydF9jbWQgfD0gY3B1X3RvX2xlMTYobmV3X2NtZCBcXHUwMDI2IG1hc2spO1xcbiBcXG4gXFx0XFx0aWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpXFxuLVxcdFxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdFxcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcdH1cXG4gXFxuQEAgLTcxMiwxNiArNzEwLDE0IEBAIHN0YXRpYyBpbnQgX19pbml0IGluaXRfcGNpX2NhcF9iYXNpY19wZXJtKHN0cnVjdCBwZXJtX2JpdHMgKnBlcm0pXFxuIHN0YXRpYyB2b2lkIHZmaW9fbG9ja19hbmRfc2V0X3Bvd2VyX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0XFx0XFx0XFx0XFx0ICBwY2lfcG93ZXJfdCBzdGF0ZSlcXG4ge1xcbi1cXHRpZiAoc3RhdGUgXFx1MDAzZT0gUENJX0QzaG90KSB7XFxuLVxcdFxcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcXG4tXFx0XFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xcbi1cXHR9IGVsc2Uge1xcbitcXHRpZiAoc3RhdGUgXFx1MDAzZT0gUENJX0QzaG90KVxcbitcXHRcXHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xcbitcXHRlbHNlXFxuIFxcdFxcdGRvd25fd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4tXFx0fVxcbiBcXG4gXFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIHN0YXRlKTtcXG4gXFx0aWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpXFxuLVxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIH1cXG4gXFxuQEAgLTkwOCwxMSArOTA0LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19leHBfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZjYXApO1xcbiBcXG4gXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgKGNhcCBcXHUwMDI2IFBDSV9FWFBfREVWQ0FQX0ZMUikpIHtcXG4tXFx0XFx0XFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xcbi1cXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XFxuK1xcdFxcdFxcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XFxuIFxcdFxcdFxcdHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cXHUwMDNlcGRldik7XFxuIFxcdFxcdFxcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxcbi1cXHRcXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xcbiBcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5AQCAtOTkzLDExICs5ODgsMTAgQEAgc3RhdGljIGludCB2ZmlvX2FmX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZjYXApO1xcbiBcXG4gXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgKGNhcCBcXHUwMDI2IFBDSV9BRl9DQVBfRkxSKSBcXHUwMDI2XFx1MDAyNiAoY2FwIFxcdTAwMjYgUENJX0FGX0NBUF9UUCkpIHtcXG4tXFx0XFx0XFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xcbi1cXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XFxuK1xcdFxcdFxcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XFxuIFxcdFxcdFxcdHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cXHUwMDNlcGRldik7XFxuIFxcdFxcdFxcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxcbi1cXHRcXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xcbitcXHRcXHRcXHRcXHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xcbiBcXHRcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbmluZGV4IDA1MGU3NTQyOTUyZWQxLi4wMDU5YzE3NmQ2MjcwNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXFxuQEAgLTEyLDYgKzEyLDggQEBcXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9hcGVydHVyZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZGV2aWNlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtYnVmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtcmVzdi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXZlbnRmZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZmlsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW50ZXJydXB0LmhcXHUwMDNlXFxuQEAgLTMxOSw4ICszMjEsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX3J1bnRpbWVfcG1fZW50cnkoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbiBcXHQgKiBUaGUgdmRldiBwb3dlciByZWxhdGVkIGZsYWdzIGFyZSBwcm90ZWN0ZWQgd2l0aCAnbWVtb3J5X2xvY2snXFxuIFxcdCAqIHNlbWFwaG9yZS5cXG4gXFx0ICovXFxuLVxcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcXG4tXFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xcbitcXHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xcbiBcXG4gXFx0aWYgKHZkZXYtXFx1MDAzZXBtX3J1bnRpbWVfZW5nYWdlZCkge1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbkBAIC00MDYsNyArNDA3LDcgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfcnVudGltZV9wbV9leGl0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbiBcXHRfX3ZmaW9fcGNpX3J1bnRpbWVfcG1fZXhpdCh2ZGV2KTtcXG4gXFx0aWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpXFxuLVxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIH1cXG4gXFxuQEAgLTEyNTYsNiArMTI1Nyw4IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfc2V0X2lycXMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB2ZmlvX3BjaV9yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xcbitcXG4gc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9yZXNldChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcdFxcdFxcdFxcdHZvaWQgX191c2VyICphcmcpXFxuIHtcXG5AQCAtMTI2NCw3ICsxMjY3LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9yZXNldChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcdGlmICghdmRldi1cXHUwMDNlcmVzZXRfd29ya3MpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xcbitcXHRkb3duX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIHdoaWxlIHRoZSBwb3dlciBzdGF0ZSBpcyBub24tRDAuIElmXFxuQEAgLTEyNzQsMTMgKzEyNzcsMTggQEAgc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9yZXNldChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuIFxcdCAqIGhhdmUgTm9Tb2Z0UnN0LSwgdGhlIHJlc2V0IGZ1bmN0aW9uIGNhbiBjYXVzZSB0aGUgUENJIGNvbmZpZyBzcGFjZVxcbiBcXHQgKiByZXNldCB3aXRob3V0IHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgc3RhdGUgKHNhdmVkIGxvY2FsbHkgaW5cXG4gXFx0ICogJ3ZkZXYtXFx1MDAzZXBtX3NhdmUnKS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIHphcCBpcyBkb25lIGFmdGVyIG1ha2luZyB0aGUgZGV2aWNlIGFjY2Vzc2libGUgaW4gRDAsXFxuK1xcdCAqIGJlY2F1c2UgYSBETUFCVUYgaW1wb3J0ZXIgY291bGQgYWNjZXNzIHRoZSBkZXZpY2UgYXMgcGFydFxcbitcXHQgKiBvZiBpdHMgcmV2b2NhdGlvbiBjbGVhbnVwLlxcbiBcXHQgKi9cXG4gXFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XFxuIFxcbi1cXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XFxuK1xcdHZmaW9fcGNpX3Jldm9rZV9iYXJzKHZkZXYpO1xcbitcXG4gXFx0cmV0ID0gcGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LVxcdTAwM2VwZGV2KTtcXG4gXFx0aWYgKF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikpXFxuLVxcdFxcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuK1xcdFxcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbkBAIC0xNTY5LDYgKzE1NzcsMTAgQEAgaW50IHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZShzdHJ1Y3QgdmZpb19kZXZpY2UgKmRldmljZSwgdTMyIGZsYWdzLFxcbiBcXHRcXHRyZXR1cm4gdmZpb19wY2lfY29yZV9mZWF0dXJlX3Rva2VuKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XFxuIFxcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1JFVk9LRTpcXG4rXFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFI6XFxuK1xcdFxcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKHZkZXYsIGZsYWdzLCBhcmcsIGFyZ3N6KTtcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0cmV0dXJuIC1FTk9UVFk7XFxuIFxcdH1cXG5AQCAtMTY0OCwyMCArMTY2MCwzNyBAQCBzc2l6ZV90IHZmaW9fcGNpX2NvcmVfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNvbnN0IGNoYXIgX191c2VyICpidVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKHZmaW9fcGNpX2NvcmVfd3JpdGUpO1xcbiBcXG4tc3RhdGljIHZvaWQgdmZpb19wY2lfemFwX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbitzdGF0aWMgdm9pZCB2ZmlvX3BjaV9yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXFxuIHtcXG4tXFx0c3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYgPSBcXHUwMDI2dmRldi1cXHUwMDNldmRldjtcXG4tXFx0bG9mZl90IHN0YXJ0ID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYKTtcXG4tXFx0bG9mZl90IGVuZCA9IFZGSU9fUENJX0lOREVYX1RPX09GRlNFVChWRklPX1BDSV9ST01fUkVHSU9OX0lOREVYKTtcXG4tXFx0bG9mZl90IGxlbiA9IGVuZCAtIHN0YXJ0O1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuK1xcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcXG4gXFxuLVxcdHVubWFwX21hcHBpbmdfcmFuZ2UoY29yZV92ZGV2LVxcdTAwM2Vpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLCBzdGFydCwgbGVuLCB0cnVlKTtcXG4rXFx0LypcXG4rXFx0ICogSWYgYSBkcml2ZXIgY291bGQgcG9zc2libHkgY3JlYXRlIEJBUiBtYXBwaW5ncyBpbiB0aGVcXG4rXFx0ICogdmRldidzIGFkZHJlc3Nfc3BhY2UsIGRvIGFuIGFkZGl0aW9uYWwgemFwIG9uIHJldm9rZS4gIFNlZVxcbitcXHQgKiB2ZmlvX3BjaV9jb3JlX3JlZ2lzdGVyX2RldmljZSgpLlxcbitcXHQgKi9cXG4rXFx0aWYgKHZkZXYtXFx1MDAzZXphcF9iYXJzX29uX3Jldm9rZSkge1xcbitcXHRcXHRzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiA9IFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2O1xcbitcXHRcXHRsb2ZmX3Qgc3RhcnQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfQkFSMF9SRUdJT05fSU5ERVgpO1xcbitcXHRcXHRsb2ZmX3QgZW5kID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX1JPTV9SRUdJT05fSU5ERVgpO1xcbitcXHRcXHRsb2ZmX3QgbGVuID0gZW5kIC0gc3RhcnQ7XFxuK1xcbitcXHRcXHR1bm1hcF9tYXBwaW5nX3JhbmdlKGNvcmVfdmRldi1cXHUwMDNlaW5vZGUtXFx1MDAzZWlfbWFwcGluZyxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0YXJ0LCBsZW4sIHRydWUpO1xcbitcXHR9XFxuIH1cXG4gXFxuLXZvaWQgdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4rdm9pZCB2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4ge1xcbiBcXHRkb3duX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuLVxcdHZmaW9fcGNpX3phcF9iYXJzKHZkZXYpO1xcbitcXHR2ZmlvX3BjaV9yZXZva2VfYmFycyh2ZGV2KTtcXG4rfVxcbitcXG4rdm9pZCB2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4re1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuK1xcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XFxuIH1cXG4gXFxuIHUxNiB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG5AQCAtMTY4MywxOCArMTcxMiw2IEBAIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUxNiBjXFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB1bnNpZ25lZCBsb25nIHZtYV90b19wZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLXtcXG4tXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID0gdm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGE7XFxuLVxcdGludCBpbmRleCA9IHZtYS1cXHUwMDNldm1fcGdvZmYgXFx1MDAzZVxcdTAwM2UgKFZGSU9fUENJX09GRlNFVF9TSElGVCAtIFBBR0VfU0hJRlQpO1xcbi1cXHR1NjQgcGdvZmY7XFxuLVxcbi1cXHRwZ29mZiA9IHZtYS1cXHUwMDNldm1fcGdvZmYgXFx1MDAyNlxcbi1cXHRcXHQoKDFVIFxcdTAwM2NcXHUwMDNjIChWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSkgLSAxKTtcXG4tXFxuLVxcdHJldHVybiAocGNpX3Jlc291cmNlX3N0YXJ0KHZkZXYtXFx1MDAzZXBkZXYsIGluZGV4KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKSArIHBnb2ZmO1xcbi19XFxuLVxcbiB2bV9mYXVsdF90IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuIFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgcGZuLFxcbkBAIC0xNzIyLDI0ICsxNzM5LDEwMyBAQCBzdGF0aWMgdm1fZmF1bHRfdCB2ZmlvX3BjaV9tbWFwX2h1Z2VfZmF1bHQoc3RydWN0IHZtX2ZhdWx0ICp2bWYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtZi1cXHUwMDNldm1hO1xcbi1cXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG4tXFx0dW5zaWduZWQgbG9uZyBhZGRyID0gdm1mLVxcdTAwM2VhZGRyZXNzIFxcdTAwMjYgfigoUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyKSAtIDEpO1xcbi1cXHR1bnNpZ25lZCBsb25nIHBnb2ZmID0gKGFkZHIgLSB2bWEtXFx1MDAzZXZtX3N0YXJ0KSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbi1cXHR1bnNpZ25lZCBsb25nIHBmbiA9IHZtYV90b19wZm4odm1hKSArIHBnb2ZmO1xcbi1cXHR2bV9mYXVsdF90IHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLO1xcbi1cXG4tXFx0aWYgKGlzX2FsaWduZWRfZm9yX29yZGVyKHZtYSwgYWRkciwgcGZuLCBvcmRlcikpIHtcXG4tXFx0XFx0c2NvcGVkX2d1YXJkKHJ3c2VtX3JlYWQsIFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jaylcXG4tXFx0XFx0XFx0cmV0ID0gdmZpb19wY2lfdm1mX2luc2VydF9wZm4odmRldiwgdm1mLCBwZm4sIG9yZGVyKTtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSB2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2O1xcbitcXHR1bnNpZ25lZCBsb25nIHBmbiA9IDA7XFxuK1xcdHZtX2ZhdWx0X3QgcmV0ID0gVk1fRkFVTFRfU0lHQlVTO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIG9ubHkgdGhpbmcgdGhpcyBjYW4gcmVseSBvbiBpcyB0aGF0IHRoZSBETUFCVUYgcmVsYXRpbmdcXG4rXFx0ICogdG8gdGhlIFZNQSdzIHZtX2ZpbGUgZXhpc3RzIChwcml2KS5cXG4rXFx0ICpcXG4rXFx0ICogQSBETUFCVUYgZm9yIGEgVkZJTyBkZXZpY2UgZmQgbW1hcCgpIGhvbGRzIGEgcmVmZXJlbmNlIHRvXFxuK1xcdCAqIHRoZSBvcmlnaW5hbCBWRklPIGRldmljZSBmZCwgYnV0IGFuIGV4cGxpY2l0bHktZXhwb3J0ZWRcXG4rXFx0ICogRE1BQlVGIGRvZXMgbm90LiAgVGhlIG9yaWdpbmFsIGZkIG1pZ2h0IGhhdmUgY2xvc2VkLFxcbitcXHQgKiBtZWFuaW5nIHRoaXMgZmF1bHQgY2FuIHJhY2Ugd2l0aFxcbitcXHQgKiB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKSwgbWVhbmluZyB0aGUgYnVmZmVyIGNvdWxkIGhhdmVcXG4rXFx0ICogYmVlbiByZXZva2VkIChpbiB3aGljaCBjYXNlIHByaXYtXFx1MDAzZXZkZXYgbWlnaHQgYmUgTlVMTCksIGFuZFxcbitcXHQgKiB0aGUgVkZJTyBkZXZpY2UgcmVnaXN0cmF0aW9uIG1pZ2h0IGhhdmUgYmVlbiBkcm9wcGVkLlxcbitcXHQgKlxcbitcXHQgKiBXaXRoIHRoZSBnb2FsIG9mIHRha2luZyB2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayBpbiBhIHdvcmxkIHdoZXJlXFxuK1xcdCAqIHZkZXYgbWlnaHQgbm90IHN0aWxsIGV4aXN0OlxcbitcXHQgKlxcbitcXHQgKiAxLiBUYWtlIHRoZSByZXN2IGxvY2sgb24gdGhlIERNQUJVRjpcXG4rXFx0ICogIC0gSWYgcmFjaW5nIGNsZWFudXAgZ290IGluIGZpcnN0LCB0aGUgYnVmZmVyIGlzIHJldm9rZWQ7XFxuK1xcdCAqICAgIHN0b3AvZXhpdCBpZiBzby5cXG4rXFx0ICogIC0gSWYgd2UgZ290IGluIGZpcnN0LCB0aGUgYnVmZmVyIGlzIG5vdCByZXZva2VkIHNvIHZkZXYgaXNcXG4rXFx0ICogICAgbm9uLU5VTEwsIGFjY2Vzc2libGUsIGFuZCBjbGVhbnVwIF9oYXMgbm90IHlldCBwdXQgdGhlXFxuK1xcdCAqICAgIFZGSU8gZGV2aWNlIHJlZ2lzdHJhdGlvbl8uICBTbywgdGhlIGRldmljZSByZWZjb3VudCBtdXN0XFxuK1xcdCAqICAgIGJlIFxcdTAwM2UwLlxcbitcXHQgKlxcbitcXHQgKiAyLiBUYWtlIHZmaW9fZGV2aWNlIHJlZ2lzdHJhdGlvbiAocmVmY291bnQgZ3VhcmFudGVlZCBcXHUwMDNlMFxcbitcXHQgKiAgICBoZXJlYWZ0ZXIpLlxcbitcXHQgKlxcbitcXHQgKiAzLiBVbmxvY2sgdGhlIERNQUJVRidzIHJlc3YgbG9jazpcXG4rXFx0ICogIC0gQSByYWNpbmcgY2xlYW51cCBjYW4gbm93IGNvbXBsZXRlLlxcbitcXHQgKiAgLSBCdXQsIHRoZSBkZXZpY2UgcmVmY291bnQgXFx1MDAzZTAsIG1lYW5pbmcgdGhlIHZmaW9fZGV2aWNlXFxuK1xcdCAqICAgIChhbmQgdmZpb19wY2llX2NvcmUgZGV2aWNlIHZkZXYpIGhhdmUgbm90IHlldCBiZWVuXFxuK1xcdCAqICAgIGZyZWVkLiAgdmRldiBpcyBhY2Nlc3NpYmxlLCBldmVuIGlmIHRoZSBETUFCVUYgaGFzIGJlZW5cXG4rXFx0ICogICAgcmV2b2tlZCBvciBjbGVhbnVwIGhhcyBoYXBwZW5lZCwgYmVjYXVzZVxcbitcXHQgKiAgICB2ZmlvX3VucmVnaXN0ZXJfZ3JvdXBfZGV2KCkgY2FuJ3QgY29tcGxldGUuXFxuK1xcdCAqXFxuK1xcdCAqIDQuIFRha2UgdGhlIHZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrXFxuK1xcdCAqICAtIEVpdGhlciB0aGUgRE1BQlVGIGlzIHVzYWJsZSwgb3IgaGFzIGJlZW4gY2xlYW5lZCB1cC5cXG4rXFx0ICogICAgV2hpY2hldmVyLCBpdCBjYW4gbm8gbG9uZ2VyIGNoYW5nZSB1bmRlciB1cy5cXG4rXFx0ICogIC0gVGVzdCB0aGUgRE1BQlVGIHJldm9jYXRpb24gc3RhdHVzIGFnYWluOiBpZiBpdCB3YXNcXG4rXFx0ICogICAgcmV2b2tlZCBiZXR3ZWVuIDEgYW5kIDQgcmV0dXJuIGEgU0lHQlVTLiBPdGhlcndpc2UsXFxuK1xcdCAqICAgIHJldHVybiBhIFBGTi5cXG4rXFx0ICogIC0gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGFsc28gdGFrZSB0aGUgcmVzdiBsb2NrLCBiZWNhdXNlXFxuK1xcdCAqICAgIHRoZSBzdGF0dXMvdmRldiBjYW4ndCBjaGFuZ2Ugd2hpbGUgbWVtb3J5X2xvY2sgaXMgaGVsZC5cXG4rXFx0ICpcXG4rXFx0ICogNS4gVW5sb2NrLCBkb25lLlxcbitcXHQgKi9cXG4rXFxuK1xcdGRtYV9yZXN2X2xvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VzdGF0dXMgIT0gVkZJT19QQ0lfRE1BQlVGX09LKSB7XFxuK1xcdFxcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFxcXCIlcyBWQSAweCVseCwgcGdvZmYgMHglbHg6IERNQUJVRiByZXZva2VkL2NsZWFuZWQgdXBcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgICAgX19mdW5jX18sIHZtZi1cXHUwMDNlYWRkcmVzcywgdm1hLVxcdTAwM2V2bV9wZ29mZik7XFxuK1xcdFxcdGRtYV9yZXN2X3VubG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRcXHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xcbitcXHR9XFxuK1xcbitcXHQvKiBJZiB0aGUgYnVmZmVyIGlzbid0IHJldm9rZWQsIHZkZXYgaXMgdmFsaWQgKi9cXG4rXFx0dmRldiA9IHByaXYtXFx1MDAzZXZkZXY7XFxuK1xcbitcXHRpZiAoIXZmaW9fZGV2aWNlX3RyeV9nZXRfcmVnaXN0cmF0aW9uKFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB2ZGV2ICE9IE5VTEwgKGFib3ZlKSwgdGhlIHJlZ2lzdHJhdGlvbiBzaG91bGRcXG4rXFx0XFx0ICogYWxyZWFkeSBiZSBcXHUwMDNlMCBhbmQgc28gdGhpcyB0cnlfZ2V0IHNob3VsZCBuZXZlclxcbitcXHRcXHQgKiBmYWlsLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X3dhcm4oXFx1MDAyNnZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldiwgXFxcIiVzOiBVbmV4cGVjdGVkIHJlZ2lzdHJhdGlvbiBmYWlsdXJlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgX19mdW5jX18pO1xcbitcXHRcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFx0XFx0cmV0dXJuIFZNX0ZBVUxUX1NJR0JVUztcXG4rXFx0fVxcbitcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spIHtcXG4rXFx0XFx0LyogUmV2b2NhdGlvbiBzdGF0dXMgbXVzdCBiZSByZS1yZWFkLCB1bmRlciBtZW1vcnlfbG9jayAqL1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9PSykge1xcbitcXHRcXHRcXHRpbnQgcHJlcyA9IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4ocHJpdiwgdm1hLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHZtZi1cXHUwMDNlYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBvcmRlciwgXFx1MDAyNnBmbik7XFxuK1xcbitcXHRcXHRcXHRpZiAocHJlcyA9PSAwKVxcbitcXHRcXHRcXHRcXHRyZXQgPSB2ZmlvX3BjaV92bWZfaW5zZXJ0X3Bmbih2ZGV2LCB2bWYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHBmbiwgb3JkZXIpO1xcbitcXHRcXHRcXHRlbHNlIGlmIChwcmVzID09IC1FQUdBSU4pXFxuK1xcdFxcdFxcdFxcdHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdGRldl9kYmdfcmF0ZWxpbWl0ZWQoXFx1MDAyNnZkZXYtXFx1MDAzZXBkZXYtXFx1MDAzZWRldixcXG4tXFx0XFx0XFx0ICAgXFxcIiVzKCxvcmRlciA9ICVkKSBCQVIgJWxkIHBhZ2Ugb2Zmc2V0IDB4JWx4OiAweCV4XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICAgX19mdW5jX18sIG9yZGVyLFxcbi1cXHRcXHRcXHQgICAgdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDNlXFx1MDAzZVxcbi1cXHRcXHRcXHRcXHQoVkZJT19QQ0lfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCksXFxuLVxcdFxcdFxcdCAgICBwZ29mZiwgKHVuc2lnbmVkIGludClyZXQpO1xcbitcXHRcXHRcXHQgICAgXFxcIiVzKG9yZGVyID0gJWQpIFBGTiAweCVseCwgVkEgMHglbHgsIHBnb2ZmIDB4JWx4OiAweCV4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICAgX19mdW5jX18sIG9yZGVyLCBwZm4sIHZtZi1cXHUwMDNlYWRkcmVzcyxcXG4rXFx0XFx0XFx0ICAgIHZtYS1cXHUwMDNldm1fcGdvZmYsICh1bnNpZ25lZCBpbnQpcmV0KTtcXG4gXFxuK1xcdHZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oXFx1MDAyNnZkZXYtXFx1MDAzZXZkZXYpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC0xNzU1LDYgKzE4NTEsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCB2ZmlvX3BjaV9tbWFwX29wcyA9IHtcXG4gI2VuZGlmXFxuIH07XFxuIFxcbit2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbit7XFxuK1xcdHZtYS1cXHUwMDNldm1fb3BzID0gXFx1MDAyNnZmaW9fcGNpX21tYXBfb3BzO1xcbit9XFxuK1xcbiBpbnQgdmZpb19wY2lfY29yZV9tbWFwKHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2LCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4ge1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYgPVxcbkBAIC0xODAzLDcgKzE5MDQsMTIgQEAgaW50IHZmaW9fcGNpX2NvcmVfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdHZtYS1cXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gdmRldjtcXG4rXFx0cmV0ID0gdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHZkZXYsIHZtYSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgaW5kZXgpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHJlcV9sZW4sIGluZGV4KTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuIFxcbkBAIC0yMjIyLDYgKzIzMjgsMTcgQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBvdXRfdmY7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBJZiBhIGRyaXZlciBvdmVycmlkZXMgLm1tYXAsIGl0IGhhcyB0byBiZSBhc3N1bWVkIHRoYXQgaXRcXG4rXFx0ICogbWlnaHQgbm90IHVzZSB0aGUgRE1BQlVGLWJhY2tlZCBjb3JlIG1tYXA7IHRoaXMgZmxhZ1xcbitcXHQgKiBlbmFibGVzIGEgemFwIGF0IHJldm9rZSB0aW1lLiAgRHJpdmVycyBjYW4gb3B0IG91dCBieVxcbitcXHQgKiBjbGVhcmluZyB0aGlzIGZsYWcgYWZ0ZXIgcmVnaXN0cmF0aW9uLCBlLmcuIGlmIHRoZWlyIC5tbWFwXFxuK1xcdCAqIG92ZXJyaWRlIGNhbGxzIGRvd24gdG8gdmZpb19wY2lfY29yZV9tbWFwKCkgc28gdGhhdCBtYXBzXFxuK1xcdCAqIGFyZSBETUFCVUYtYmFja2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKHZkZXYtXFx1MDAzZXZkZXYub3BzLVxcdTAwM2VtbWFwICE9IHZmaW9fcGNpX2NvcmVfbW1hcClcXG4rXFx0XFx0dmRldi1cXHUwMDNlemFwX2JhcnNfb25fcmV2b2tlID0gdHJ1ZTtcXG4rXFxuIFxcdHZmaW9fcGNpX3Byb2JlX3Bvd2VyX3N0YXRlKHZkZXYpO1xcbiBcXG4gXFx0LypcXG5AQCAtMjQ5Nyw5ICsyNjE0LDEwIEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogVGFrZSB0aGUgbWVtb3J5IHdyaXRlIGxvY2sgZm9yIGVhY2ggZGV2aWNlIGFuZCB6YXAgQkFSXFxuLVxcdFxcdCAqIG1hcHBpbmdzIHRvIHByZXZlbnQgdGhlIHVzZXIgYWNjZXNzaW5nIHRoZSBkZXZpY2Ugd2hpbGUgaW5cXG4tXFx0XFx0ICogcmVzZXQuICBMb2NraW5nIG11bHRpcGxlIGRldmljZXMgaXMgcHJvbmUgdG8gZGVhZGxvY2ssXFxuK1xcdFxcdCAqIFRha2UgdGhlIG1lbW9yeSB3cml0ZSBsb2NrIGZvciBlYWNoIGRldmljZSBhbmRcXG4rXFx0XFx0ICogemFwL3Jldm9rZSBCQVIgbWFwcGluZ3MgdG8gcHJldmVudCB0aGUgdXNlciAob3JcXG4rXFx0XFx0ICogcGVlcnMpIGFjY2Vzc2luZyB0aGUgZGV2aWNlIHdoaWxlIGluIHJlc2V0LlxcbitcXHRcXHQgKiBMb2NraW5nIG11bHRpcGxlIGRldmljZXMgaXMgcHJvbmUgdG8gZGVhZGxvY2ssXFxuIFxcdFxcdCAqIHJ1bmF3YXkgYW5kIHVud2luZCBpZiB3ZSBoaXQgY29udGVudGlvbi5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmICghZG93bl93cml0ZV90cnlsb2NrKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jaykpIHtcXG5AQCAtMjUwNyw4ICsyNjI1LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xcbi1cXHRcXHR2ZmlvX3BjaV96YXBfYmFycyh2ZGV2KTtcXG4rXFx0XFx0dmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghbGlzdF9lbnRyeV9pc19oZWFkKHZkZXYsXFxuQEAgLTI1MzgsNyArMjY1NSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UodmRldiwgXFx1MDAyNmRldl9zZXQtXFx1MDAzZWRldmljZV9saXN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgdmRldi5kZXZfc2V0X2xpc3QpIHtcXG4gXFx0XFx0aWYgKHZkZXYtXFx1MDAzZXZkZXYub3Blbl9jb3VudCBcXHUwMDI2XFx1MDAyNiBfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxcbi1cXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xcbitcXHRcXHRcXHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xcbiBcXHRcXHR1cF93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xcbmluZGV4IDFhMTc3Y2U3ZGU1NDZhLi4zMWZiYWQ5M2Y4OWIxYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuY1xcbkBAIC00LDI0ICs0LDEzIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtYnVmLW1hcHBpbmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1yZXN2LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2N1YXBpL2xpbnV4L2RtYS1idWYuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJ2ZmlvX3BjaV9wcml2LmhcXFwiXFxuIFxcbiBNT0RVTEVfSU1QT1JUX05TKFxcXCJETUFfQlVGXFxcIik7XFxuIFxcbi1zdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XFxuLVxcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuLVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldjtcXG4tXFx0c3RydWN0IGxpc3RfaGVhZCBkbWFidWZzX2VsbTtcXG4tXFx0c2l6ZV90IHNpemU7XFxuLVxcdHN0cnVjdCBwaHlzX3ZlYyAqcGh5c192ZWM7XFxuLVxcdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyO1xcbi1cXHR1MzIgbnJfcmFuZ2VzO1xcbi1cXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbi1cXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbi1cXHR1OCByZXZva2VkIDogMTtcXG4tfTtcXG4tXFxuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXFxuIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudClcXG4ge1xcbkBAIC0zMCw3ICsxOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZixcXG4gXFx0aWYgKCFhdHRhY2htZW50LVxcdTAwM2VwZWVyMnBlZXIpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdGlmIChwcml2LVxcdTAwM2VyZXZva2VkKVxcbitcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSylcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHRpZiAoIWRtYV9idWZfYXR0YWNoX3Jldm9jYWJsZShhdHRhY2htZW50KSlcXG5AQCAtMzksNiArMjgsNDMgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBkbWFfYnVmX21tYXBfaW50ZXJuYWwoKSBoYXMgYXNzZXJ0ZWQgdGhhdCB0aGUgVk1BIGlzXFxuK1xcdCAqIGNvbnRhaW5lZCB3aXRoaW4gdGhlIERNQUJVRiBzaXplIGJlZm9yZSBjYWxsaW5nIHRoaXMuXFxuK1xcdCAqXFxuK1xcdCAqIEFsc28sIGlmIHdlIG9ic2VydmUgdGhhdCB0aGUgYnVmZmVyIGlzIHJldm9rZWQgbm93IHRoZW5cXG4rXFx0ICogcmVmdXNlIHRoZSBtbWFwKCkuICBUaGlzIGlzIGEgYmVsdC1hbmQtYnJhY2VzIGVhcmx5IGZhaWx1cmVcXG4rXFx0ICogdG8gZWFzZSBkZWJ1Z2dpbmcgYSByZXZva2VkIGJ1ZmZlciBiZWluZyB1c2VkLiAgVXNlcnNwYWNlXFxuK1xcdCAqIG1pZ2h0IGFsc28gcmFjZSBhbiBtbWFwKCkgYWdhaW5zdCBhbiBleHBsaWNpdCByZXZvY2F0aW9uLFxcbitcXHQgKiBvciBhbiBhY3Rpb24gZG9pbmcgYSB0ZW1wb3JhcnkgcmV2b2tlOyByYWNlIHNjZW5hcmlvcyBhcmVcXG4rXFx0ICogc3RpbGwgc2FmZSBiZWNhdXNlIHRoZSBmYXVsdCBoYW5kbGVyIHVsdGltYXRlbHkgcHJldmVudHNcXG4rXFx0ICogYWNjZXNzIHRvIGEgcmV2b2tlZCBidWZmZXIgaWYgaXQgaXNuJ3QgY2F1Z2h0IGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoUkVBRF9PTkNFKHByaXYtXFx1MDAzZXN0YXR1cykgIT0gVkZJT19QQ0lfRE1BQlVGX09LKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFx0aWYgKCh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fU0hBUkVEKSA9PSAwKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGlmIChSRUFEX09OQ0UocHJpdi1cXHUwMDNlbWVtYXR0cikgPT0gVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MpXFxuK1xcdFxcdHZtYS1cXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X3dyaXRlY29tYmluZSh2bWEtXFx1MDAzZXZtX3BhZ2VfcHJvdCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS1cXHUwMDNldm1fcGFnZV9wcm90KTtcXG4rXFx0dm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3RfZGVjcnlwdGVkKHZtYS1cXHUwMDNldm1fcGFnZV9wcm90KTtcXG4rXFxuK1xcdC8qIFNlZSBjb21tZW50cyBpbiB2ZmlvX3BjaV9jb3JlX21tYXAoKSByZSBWTV9BTExPV19BTllfVU5DQUNIRUQuICovXFxuK1xcdHZtX2ZsYWdzX3NldCh2bWEsIFZNX0FMTE9XX0FOWV9VTkNBQ0hFRCB8IFZNX0lPIHwgVk1fUEZOTUFQIHxcXG4rXFx0XFx0ICAgICBWTV9ET05URVhQQU5EIHwgVk1fRE9OVERVTVApO1xcbitcXHR2bWEtXFx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XFxuK1xcdHZmaW9fcGNpX3NldF92bWFfb3BzKHZtYSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbisjZW5kaWYgLyogQ09ORklHX1ZGSU9fUENJX0RNQUJVRiAqL1xcbitcXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9kb25lKHN0cnVjdCBrcmVmICprcmVmKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2ID1cXG5AQCAtNTYsNyArODIsNyBAQCB2ZmlvX3BjaV9kbWFfYnVmX21hcChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2htZW50LFxcbiBcXG4gXFx0ZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQocHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4gXFxuLVxcdGlmIChwcml2LVxcdTAwM2VyZXZva2VkKVxcbitcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSylcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7XFxuIFxcbiBcXHRyZXQgPSBkbWFfYnVmX3BoeXNfdmVjX3RvX3NndChhdHRhY2htZW50LCBwcml2LVxcdTAwM2Vwcm92aWRlcixcXG5AQCAtOTUsMTcgKzEyMSwyMDMgQEAgc3RhdGljIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlKHN0cnVjdCBkbWFfYnVmICpkbWFidWYpXFxuIFxcdFxcdHVwX3dyaXRlKFxcdTAwMjZwcml2LVxcdTAwM2V2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcdFxcdHZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZXZkZXYtXFx1MDAzZXZkZXYpO1xcbiBcXHR9XFxuK1xcdGlmIChwcml2LVxcdTAwM2V2ZmlsZSlcXG4rXFx0XFx0ZnB1dChwcml2LVxcdTAwM2V2ZmlsZSk7XFxuIFxcdGtmcmVlKHByaXYtXFx1MDAzZXBoeXNfdmVjKTtcXG4gXFx0a2ZyZWUocHJpdik7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcXG4rI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcXG4gXFx0LmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLFxcbitcXHQubW1hcCA9IHZmaW9fcGNpX2RtYV9idWZfbW1hcCxcXG4rI2VuZGlmXFxuIFxcdC5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfbWFwLFxcbiBcXHQudW5tYXBfZG1hX2J1ZiA9IHZmaW9fcGNpX2RtYV9idWZfdW5tYXAsXFxuIFxcdC5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLFxcbiB9O1xcbiBcXG4raW50IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGZhdWx0X2FkZHIsXFxuK1xcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3BmbilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBHaXZlbiBhIFZNQSAoc3RhcnQsIGVuZCwgcGdvZmZzKSBhbmQgYSBmYXVsdCBhZGRyZXNzLFxcbitcXHQgKiBzZWFyY2ggdGhlIGNvcnJlc3BvbmRpbmcgRE1BQlVGJ3MgcGh5c192ZWNbXSB0byBmaW5kIHRoZVxcbitcXHQgKiByYW5nZSByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MncyBvZmZzZXQgaW50byB0aGUgVk1BLCBhbmRcXG4rXFx0ICogaXRzIFBGTi5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIHBoeXNfdmVjW10gcmFuZ2VzIHJlcHJlc2VudCBjb250aWd1b3VzIHNwYW5zIG9mIFZBc1xcbitcXHQgKiB1cHdhcmRzIGZyb20gdGhlIGJ1ZmZlciBvZmZzZXQgMDsgdGhlIGFjdHVhbCBQRk5zIG1pZ2h0IGJlXFxuK1xcdCAqIGluIGFueSBvcmRlciwgb3ZlcmxhcC9hbGlhcywgZXRjLiAgQ2FsY3VsYXRlIGFuIG9mZnNldCBvZlxcbitcXHQgKiB0aGUgZGVzaXJlZCBwYWdlIGdpdmVuIFZNQSBzdGFydC9wZ29mZiBhbmQgYWRkcmVzcywgdGhlblxcbitcXHQgKiBzZWFyY2ggdXB3YXJkcyBmcm9tIDAgdG8gZmluZCB3aGljaCBzcGFuIGNvbnRhaW5zIGl0LlxcbitcXHQgKlxcbitcXHQgKiBPbiBzdWNjZXNzLCBhIHZhbGlkIFBGTiBmb3IgYSBwYWdlIHNpemVkIGJ5ICdvcmRlcicgaXNcXG4rXFx0ICogcmV0dXJuZWQgaW50byBvdXRfcGZuLlxcbitcXHQgKlxcbitcXHQgKiBGYWlsdXJlIG9jY3VycyBpZjpcXG4rXFx0ICogLSBBIGh1Z2VwYWdlIHdvdWxkIGNyb3NzIHRoZSBlZGdlIG9mIHRoZSBWTUEsXFxuK1xcdCAqIC0gQSBodWdlcGFnZSBpc24ndCBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIGEgcmFuZ2VcXG4rXFx0ICogICAoaW5jbHVkaW5nIHdoZXJlIGl0IHN0cmFkZGxlcyB0aGUgYm91bmRhcnkgYmV0d2VlblxcbitcXHQgKiAgIHJhbmdlcyksXFxuK1xcdCAqIC0gV2UgZmluZCBhIHJhbmdlLCBidXQgdGhlIGZpbmFsIFBGTiBpc24ndCBhbGlnbmVkIHRvIHRoZVxcbitcXHQgKiAgIHJlcXVlc3RlZCBvcmRlci5cXG4rXFx0ICpcXG4rXFx0ICogVXBvbiBmYWlsdXJlLCAtRUFHQUlOIGlzIHJldHVybmVkIGFuZCB0aGUgY2FsbGVyIGlzXFxuK1xcdCAqIGV4cGVjdGVkIHRvIHRyeSBhZ2FpbiB3aXRoIGEgc21hbGxlciBvcmRlciwgd2hpY2ggd2lsbFxcbitcXHQgKiBldmVudHVhbGx5IHN1Y2NlZWQgKG9yZGVyPTAgd2lsbCBhbHdheXMgd29yaykuXFxuK1xcdCAqXFxuK1xcdCAqIEl0J3Mgc3Vib3B0aW1hbCBpZiBETUFCVUZzIGFyZSBjcmVhdGVkIHdpdGggbmVpZ2hib3VyaW5nXFxuK1xcdCAqIHJhbmdlcyB0aGF0IGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHNpbmNlIGh1Z2VwYWdlc1xcbitcXHQgKiBjYW4ndCBzdHJhZGRsZSByYW5nZSBib3VuZGFyaWVzLiAgKFRoZSBjb25zdHJ1Y3Rpb24gb2YgdGhlXFxuK1xcdCAqIHJhbmdlcyBzaG91bGQgbWVyZ2UgdGhlbSBpbiB0aGlzIGNhc2UuKVxcbitcXHQgKlxcbitcXHQgKiBGaW5hbGx5LCB2bWFfcGdvZmZfYWRqdXN0IGlzIHVzZWQgd2l0aCBhIERNQUJVRiBjcmVhdGVkIGZvclxcbitcXHQgKiBhIFZGSU8gQkFSIG1tYXA6IGEgQkFSIG1hcHBlZCB3aXRoIHZtX3Bnb2ZmIFxcdTAwM2UgMCBjcmVhdGVzIGFcXG4rXFx0ICogRE1BQlVGIHN1Y2ggdGhhdCBieXRlIDAgb2YgdGhlIFZNQSBjb3JyZXNwb25kcyB0byBieXRlIDAgb2ZcXG4rXFx0ICogdGhlIERNQUJVRiBhbmQgYnl0ZSAndm1fcGdvZmYgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCcgaW50byB0aGUgQkFSLlxcbitcXHQgKiBUbyBhdm9pZCBkb3VibGUtb2Zmc2V0dGluZyBpbiB0aGlzIHNjZW5hcmlvLCBzdWJ0cmFjdGluZ1xcbitcXHQgKiB2bWFfcGdvZmZfYWRqdXN0IGZyb20gdGhpcyAobm9uLXplcm8pIHZtX3Bnb2ZmIGdlbmVyYXRlc1xcbitcXHQgKiB0aGUgZWZmZWN0aXZlIG9mZnNldC5cXG4rXFx0ICovXFxuK1xcbitcXHRjb25zdCB1bnNpZ25lZCBsb25nIHBhZ2VzaXplID0gUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIG9yZGVyO1xcbitcXHR1bnNpZ25lZCBsb25nIHZtYV9vZmYgPSAoKHZtYS1cXHUwMDNldm1fcGdvZmYgLSBwcml2LVxcdTAwM2V2bWFfcGdvZmZfYWRqdXN0KSBcXHUwMDNjXFx1MDAzY1xcbitcXHRcXHRcXHRcXHQgUEFHRV9TSElGVCkgXFx1MDAyNiBWRklPX1BDSV9PRkZTRVRfTUFTSztcXG4rXFx0dW5zaWduZWQgbG9uZyByb3VuZGVkX3BhZ2VfYWRkciA9IEFMSUdOX0RPV04oZmF1bHRfYWRkciwgcGFnZXNpemUpO1xcbitcXHR1bnNpZ25lZCBsb25nIHJvdW5kZWRfcGFnZV9lbmQgPSByb3VuZGVkX3BhZ2VfYWRkciArIHBhZ2VzaXplO1xcbitcXHR1bnNpZ25lZCBsb25nIGZhdWx0X29mZnNldDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmYXVsdF9vZmZzZXRfZW5kO1xcbitcXHR1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0X29mZnNldCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHJvdW5kZWRfcGFnZV9hZGRyIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9zdGFydCB8fCByb3VuZGVkX3BhZ2VfZW5kIFxcdTAwM2Ugdm1hLVxcdTAwM2V2bV9lbmQpIHtcXG4rXFx0XFx0aWYgKG9yZGVyIFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FQUdBSU47XFxuK1xcbitcXHRcXHQvKiBBIGZhdWx0IGFkZHJlc3Mgb3V0c2lkZSBvZiB0aGUgVk1BIGlzIGFic3VyZC4gKi9cXG4rXFx0XFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXFxuK1xcdFxcdFxcdFxcdTAwMjZwcml2LVxcdTAwM2V2ZGV2LVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJGYXVsdCBhZGRyIDB4JWx4IG91dHNpZGUgVk1BIDB4JWx4LTB4JWx4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRmYXVsdF9hZGRyLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCB2bWEtXFx1MDAzZXZtX2VuZCk7XFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBmYXVsdF9vZmZzZXRbX2VuZF0gaXMgdGhlIHNwYW4gd2l0aGluIHRoZSBETUFCVUZcXG4rXFx0ICogY29ycmVzcG9uZGluZyB0byB0aGUgZmF1bHRpbmcgcGFnZTpcXG4rXFx0ICovXFxuK1xcdGlmICh1bmxpa2VseShjaGVja19hZGRfb3ZlcmZsb3cocm91bmRlZF9wYWdlX2FkZHIgLSB2bWEtXFx1MDAzZXZtX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHR2bWFfb2ZmLCBcXHUwMDI2ZmF1bHRfb2Zmc2V0KSB8fFxcbitcXHRcXHQgICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhmYXVsdF9vZmZzZXQsIHBhZ2VzaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmF1bHRfb2Zmc2V0X2VuZCkpKVxcbitcXHRcXHRyZXR1cm4gLUVGQVVMVDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEl0ZXJhdGUgb3ZlciByYW5nZXMgaW4gdGhlIGJ1ZmZlciwgc3VtbWluZyB0aGVpciBsZW5ndGhzOlxcbitcXHQgKiByYW5nZV9zdGFydF9vZmZzZXQgcmVwcmVzZW50cyB0aGUgY3VycmVudCByYW5nZSdzIHN0YXJ0aW5nXFxuK1xcdCAqIG9mZnNldCBpbiB0aGUgYnVmZmVyIChmcm9tIDAgdXB3YXJkcykuXFxuK1xcdCAqXFxuK1xcdCAqIEEgZmFpbHVyZSBmb3Igb3JkZXIgPT0gMCBpcyB1bmV4cGVjdGVkLCBhbmQgdHJpZ2dlcnMgYVxcbitcXHQgKiBmYXVsdC93YXJuLlxcbitcXHQgKi9cXG4rXFx0cmV0ID0gKG9yZGVyID09IDApID8gLUVGQVVMVCA6IC1FQUdBSU47XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlbnJfcmFuZ2VzOyBpKyspIHtcXG4rXFx0XFx0c2l6ZV90IHJhbmdlX2xlbiA9IHByaXYtXFx1MDAzZXBoeXNfdmVjW2ldLmxlbjtcXG4rXFxuK1xcdFxcdC8qIEVhcmx5IGV4aXQgaWYgcmFuZ2Ugc3RhcnRzIGFmdGVyIHRoZSBwYWdlIGVuZCAqL1xcbitcXHRcXHRpZiAoZmF1bHRfb2Zmc2V0X2VuZCBcXHUwMDNjPSByYW5nZV9zdGFydF9vZmZzZXQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0aWYgKGZhdWx0X29mZnNldCBcXHUwMDNlPSByYW5nZV9zdGFydF9vZmZzZXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGZhdWx0X29mZnNldF9lbmQgXFx1MDAzYz0gcmFuZ2Vfc3RhcnRfb2Zmc2V0ICsgcmFuZ2VfbGVuKSB7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFRoZSBmYXVsdGluZyBwYWdlIGlzIHdob2xseSBjb250YWluZWRcXG4rXFx0XFx0XFx0ICogd2l0aGluIHRoZSBzcGFuIHJlcHJlc2VudGVkIGJ5IHRoaXMgcmFuZ2UsXFxuK1xcdFxcdFxcdCAqIHNvIHZhbGlkYXRlIFBGTiBhbGlnbm1lbnQgZm9yIHRoZSBvcmRlci5cXG4rXFx0XFx0XFx0ICogVGhlIGlmKCkgY29uZGl0aW9uIGVuc3VyZXMgdGhlIHBmblxcbitcXHRcXHRcXHQgKiBhcml0aG1ldGljIHdvbid0IG92ZXJmbG93LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0dW5zaWduZWQgbG9uZyBwZm4gPVxcbitcXHRcXHRcXHRcXHQoKGZhdWx0X29mZnNldCAtIHJhbmdlX3N0YXJ0X29mZnNldCkgK1xcbitcXHRcXHRcXHRcXHQgcHJpdi1cXHUwMDNlcGh5c192ZWNbaV0ucGFkZHIpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuK1xcbitcXHRcXHRcXHRpZiAoSVNfQUxJR05FRChwZm4sIDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXIpKSB7XFxuK1xcdFxcdFxcdFxcdCpvdXRfcGZuID0gcGZuO1xcbitcXHRcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEVsc2Ugb3JkZXIgXFx1MDAzZSAwOyBFQUdBSU4gcmV0cmllcyB3aXRoIHNtYWxsZXJcXG4rXFx0XFx0XFx0ICogb3JkZXJcXG4rXFx0XFx0XFx0ICovXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJhbmdlX3N0YXJ0X29mZnNldCArPSByYW5nZV9sZW47XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcmRlciA9PSAwIFxcdTAwMjZcXHUwMDI2IHJldCAhPSAwKVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgYWRkcmVzcyBmZWxsIG91dHNpZGUgb2YgdGhlIHNwYW4gcmVwcmVzZW50ZWQgYnlcXG4rXFx0XFx0ICogdGhlIChjb25jYXRlbmF0ZWQpIHJhbmdlcy4gIEFzIHNldHVwIG9mIGEgbWFwcGluZ1xcbitcXHRcXHQgKiBlbnN1cmVzIHRoYXQgdGhlIFZNQSBpcyBcXHUwMDNjPSB0aGUgdG90YWwgc2l6ZSBvZiB0aGVcXG4rXFx0XFx0ICogcmFuZ2VzIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIElmIGl0IGRvZXMsIHdhcm5cXG4rXFx0XFx0ICogYW5kIFNJR0JVUy5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcbitcXHRcXHRcXHRcXHUwMDI2cHJpdi1cXHUwMDNldmRldi1cXHUwMDNlcGRldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiTm8gcmFuZ2UgZm9yIGFkZHIgMHglbHgsIG9yZGVyICVkOiBWTUEgMHglbHgtMHglbHggcGdvZmYgMHglbHgsICV1IHJhbmdlcywgc2l6ZSAweCV6eFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZmF1bHRfYWRkciwgb3JkZXIsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLFxcbitcXHRcXHRcXHR2bWEtXFx1MDAzZXZtX3Bnb2ZmLCBwcml2LVxcdTAwM2Vucl9yYW5nZXMsIHByaXYtXFx1MDAzZXNpemUpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLypcXG4rICogQ3JlYXRlIGEgRE1BQlVGIGNvcnJlc3BvbmRpbmcgdG8gcHJpdiwgYWRkIGl0IHRvIHZkZXYtXFx1MDAzZWRtYWJ1ZnMgbGlzdFxcbisgKiBmb3IgdHJhY2tpbmcgKG1lYW5pbmcgY2xlYW51cCBvciByZXZvY2F0aW9uIHdpbGwgemFwIGl0KSwgYW5kIHRha2VcXG4rICogYSB2ZmlvX2RldmljZSByZWdpc3RyYXRpb24uXFxuKyAqL1xcbitzdGF0aWMgaW50IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LCB1MzIgZmxhZ3MpXFxuK3tcXG4rXFx0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xcbitcXG4rXFx0aWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbihcXHUwMDI2dmRldi1cXHUwMDNldmRldikpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0ZXhwX2luZm8ub3BzID0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHM7XFxuK1xcdGV4cF9pbmZvLnNpemUgPSBwcml2LVxcdTAwM2VzaXplO1xcbitcXHRleHBfaW5mby5mbGFncyA9IGZsYWdzO1xcbitcXHRleHBfaW5mby5wcml2ID0gcHJpdjtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWRtYWJ1ZiA9IGRtYV9idWZfZXhwb3J0KFxcdTAwMjZleHBfaW5mbyk7XFxuK1xcdGlmIChJU19FUlIocHJpdi1cXHUwMDNlZG1hYnVmKSkge1xcbitcXHRcXHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KTtcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocHJpdi1cXHUwMDNlZG1hYnVmKTtcXG4rXFx0fVxcbitcXG4rXFx0a3JlZl9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VrcmVmKTtcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wKTtcXG4rXFxuK1xcdC8qIGRtYV9idWZfcHV0KCkgbm93IGZyZWVzIHByaXYgKi9cXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnByaXYtXFx1MDAzZWRtYWJ1ZnNfZWxtKTtcXG4rXFx0ZG93bl93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXHRkbWFfcmVzdl9sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuK1xcdHByaXYtXFx1MDAzZXN0YXR1cyA9IF9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldikgPyBWRklPX1BDSV9ETUFCVUZfT0sgOlxcbitcXHRcXHRWRklPX1BDSV9ETUFCVUZfVEVNUF9SRVZPS0VEO1xcbitcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFidWZzX2VsbSwgXFx1MDAyNnZkZXYtXFx1MDAzZWRtYWJ1ZnMpO1xcbitcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4rXFx0dXBfd3JpdGUoXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxcbiAvKlxcbiAgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IFxcXCJwcml2YXRlIGludGVyY29ubmVjdFxcXCIgYmV0d2VlbiBWRklPIERNQUJVRiBhbmQgaW9tbXVmZC5cXG4gICogSXQgYWxsb3dzIHRoZSB0d28gY28tb3BlcmF0aW5nIGRyaXZlcnMgdG8gZXhjaGFuZ2UgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2ZcXG5AQCAtMTI4LDcgKzM0MCw3IEBAIGludCB2ZmlvX3BjaV9kbWFfYnVmX2lvbW11ZmRfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuIFxcdHByaXYgPSBhdHRhY2htZW50LVxcdTAwM2VkbWFidWYtXFx1MDAzZXByaXY7XFxuLVxcdGlmIChwcml2LVxcdTAwM2VyZXZva2VkKVxcbitcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSylcXG4gXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbiBcXHQvKiBNb3JlIHRoYW4gb25lIHJhbmdlIHRvIGlvbW11ZmQgd2lsbCByZXF1aXJlIHByb3BlciBETUFCVUYgc3VwcG9ydCAqL1xcbkBAIC0yMjQsNyArNDM2LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgZ2V0X2RtYV9idWYgPSB7fTtcXG4gXFx0c3RydWN0IHZmaW9fcmVnaW9uX2RtYV9yYW5nZSAqZG1hX3JhbmdlcztcXG4tXFx0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcXG4gXFx0c2l6ZV90IGxlbmd0aDtcXG4gXFx0aW50IHJldDtcXG5AQCAtMjc0LDYgKzQ4NSw3IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4gXFx0cHJpdi1cXHUwMDNldmRldiA9IHZkZXY7XFxuIFxcdHByaXYtXFx1MDAzZW5yX3JhbmdlcyA9IGdldF9kbWFfYnVmLm5yX3JhbmdlcztcXG4gXFx0cHJpdi1cXHUwMDNlc2l6ZSA9IGxlbmd0aDtcXG4rXFx0cHJpdi1cXHUwMDNlbWVtYXR0ciA9IFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSX05DO1xcbiBcXHRyZXQgPSB2ZGV2LVxcdTAwM2VwY2lfb3BzLVxcdTAwM2VnZXRfZG1hYnVmX3BoeXModmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZXByb3ZpZGVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGdldF9kbWFfYnVmLnJlZ2lvbl9pbmRleCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBwcml2LVxcdTAwM2VwaHlzX3ZlYywgZG1hX3JhbmdlcyxcXG5AQCAtMjg0LDM0ICs0OTYsOSBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuIFxcdGtmcmVlKGRtYV9yYW5nZXMpO1xcbiBcXHRkbWFfcmFuZ2VzID0gTlVMTDtcXG4gXFxuLVxcdGlmICghdmZpb19kZXZpY2VfdHJ5X2dldF9yZWdpc3RyYXRpb24oXFx1MDAyNnZkZXYtXFx1MDAzZXZkZXYpKSB7XFxuLVxcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdHJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgZ2V0X2RtYV9idWYub3Blbl9mbGFncyk7XFxuK1xcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZXJyX2ZyZWVfcGh5cztcXG4tXFx0fVxcbi1cXG4tXFx0ZXhwX2luZm8ub3BzID0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHM7XFxuLVxcdGV4cF9pbmZvLnNpemUgPSBwcml2LVxcdTAwM2VzaXplO1xcbi1cXHRleHBfaW5mby5mbGFncyA9IGdldF9kbWFfYnVmLm9wZW5fZmxhZ3M7XFxuLVxcdGV4cF9pbmZvLnByaXYgPSBwcml2O1xcbi1cXG4tXFx0cHJpdi1cXHUwMDNlZG1hYnVmID0gZG1hX2J1Zl9leHBvcnQoXFx1MDAyNmV4cF9pbmZvKTtcXG4tXFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2VkbWFidWYpKSB7XFxuLVxcdFxcdHJldCA9IFBUUl9FUlIocHJpdi1cXHUwMDNlZG1hYnVmKTtcXG4tXFx0XFx0Z290byBlcnJfZGV2X3B1dDtcXG4tXFx0fVxcbi1cXG4tXFx0a3JlZl9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VrcmVmKTtcXG4tXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZwcml2LVxcdTAwM2Vjb21wKTtcXG4tXFxuLVxcdC8qIGRtYV9idWZfcHV0KCkgbm93IGZyZWVzIHByaXYgKi9cXG4tXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnByaXYtXFx1MDAzZWRtYWJ1ZnNfZWxtKTtcXG4tXFx0ZG93bl93cml0ZShcXHUwMDI2dmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbi1cXHRkbWFfcmVzdl9sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuLVxcdHByaXYtXFx1MDAzZXJldm9rZWQgPSAhX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KTtcXG4tXFx0bGlzdF9hZGRfdGFpbChcXHUwMDI2cHJpdi1cXHUwMDNlZG1hYnVmc19lbG0sIFxcdTAwMjZ2ZGV2LVxcdTAwM2VkbWFidWZzKTtcXG4tXFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuLVxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuLVxcbiBcXHQvKlxcbiBcXHQgKiBkbWFfYnVmX2ZkKCkgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgd2hlbiB0aGUgZmlsZSBjbG9zZXMgdGhlIGRtYWJ1ZlxcbiBcXHQgKiB3aWxsIGJlIHJlbGVhc2VkLlxcbkBAIC0zMjIsOCArNTA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gXFxuLWVycl9kZXZfcHV0Olxcbi1cXHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFxcdTAwMjZ2ZGV2LVxcdTAwM2V2ZGV2KTtcXG4gZXJyX2ZyZWVfcGh5czpcXG4gXFx0a2ZyZWUocHJpdi1cXHUwMDNlcGh5c192ZWMpO1xcbiBlcnJfZnJlZV9wcml2OlxcbkBAIC0zMzIsNDcgKzUxNywxNjQgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiBcXHRrZnJlZShkbWFfcmFuZ2VzKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbisjZW5kaWYgLyogQ09ORklHX1ZGSU9fUENJX0RNQUJVRiAqL1xcbitcXG4raW50IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHQgICB1NjQgcGh5c19zdGFydCwgdTY0IHJlcV9sZW4sXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCByZXNfaW5kZXgpXFxuK3tcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdm1hX3Bnb2ZmID0gdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDI2IChWRklPX1BDSV9PRkZTRVRfTUFTSyBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4rXFx0Y2hhciAqYnVmbmFtZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwcml2LVxcdTAwM2VwaHlzX3ZlYyA9IGt6YWxsb2Nfb2JqKCpwcml2LVxcdTAwM2VwaHlzX3ZlYyk7XFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcGh5c192ZWMpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9wcml2O1xcbitcXHR9XFxuK1xcbitcXHRidWZuYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFxcXCIlczolcy8leFxcXCIsXFxuK1xcdFxcdFxcdCAgICBkZXZfbmFtZShcXHUwMDI2dmRldi1cXHUwMDNldmRldi5kZXZpY2UpLCBwY2lfbmFtZSh2ZGV2LVxcdTAwM2VwZGV2KSxcXG4rXFx0XFx0XFx0ICAgIHJlc19pbmRleCk7XFxuK1xcbitcXHRpZiAoIWJ1Zm5hbWUpIHtcXG4rXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9waHlzO1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgRE1BQlVGIGJlZ2lucyBmcm9tIHRoZSBtbWFwKCkncyBCQVIgb2Zmc2V0LCBpLmUuIHRoZVxcbitcXHQgKiBzdGFydCBvZiB0aGUgVk1BIGNvcnJlc3BvbmRzIHRvIGJ5dGUgMCBvZiB0aGUgRE1BQlVGIGFuZFxcbitcXHQgKiBieXRlICh2bWFfcGdvZmYgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkgb2YgdGhlIEJBUi5cXG4rXFx0ICpcXG4rXFx0ICogdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbigpIHJldmVyc2VzIHRoaXMgb2Zmc2V0IHVzaW5nXFxuK1xcdCAqIHZtYV9wZ29mZl9hZGp1c3QsIHNvIHRoYXQgdWx0aW1hdGVseSBhIGZhdWx0J3Mgb2Zmc2V0IGZyb21cXG4rXFx0ICogdGhlIHN0YXJ0IG9mIHRoZSBfVk1BXyBoYXMgYSBjb25zaXN0ZW50IHVzYWdlIHdoZXRoZXIgdGhlXFxuK1xcdCAqIFZNQSBvcmlnaW5hdGVzIGZyb20gYW4gbW1hcCgpIG9mIHRoZSBWRklPIGRldmljZSBoZXJlIG9yIGFcXG4rXFx0ICogZGlyZWN0IERNQUJVRiBtbWFwKCkuXFxuK1xcdCAqL1xcbitcXHRwcml2LVxcdTAwM2V2ZGV2ID0gdmRldjtcXG4rXFx0cHJpdi1cXHUwMDNlc2l6ZSA9IHJlcV9sZW47XFxuK1xcdHByaXYtXFx1MDAzZW5yX3JhbmdlcyA9IDE7XFxuK1xcdHByaXYtXFx1MDAzZXZtYV9wZ29mZl9hZGp1c3QgPSB2bWFfcGdvZmY7XFxuK1xcdHByaXYtXFx1MDAzZXByb3ZpZGVyID0gcGNpbV9wMnBkbWFfcHJvdmlkZXIodmRldi1cXHUwMDNlcGRldiwgcmVzX2luZGV4KTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2Vwcm92aWRlcikge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlX25hbWU7XFxuK1xcdH1cXG4rXFxuK1xcdHByaXYtXFx1MDAzZXBoeXNfdmVjWzBdLnBhZGRyID0gcGh5c19zdGFydCArICgodTY0KXZtYV9wZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUKTtcXG4rXFx0cHJpdi1cXHUwMDNlcGh5c192ZWNbMF0ubGVuID0gcHJpdi1cXHUwMDNlc2l6ZTtcXG4rXFxuK1xcdHJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgT19DTE9FWEVDIHwgT19SRFdSKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9uYW1lO1xcbitcXG4rXFx0LypcXG4rXFx0ICogT3duZXJzaGlwIG9mIHRoZSBETUFCVUYgZmlsZSB0cmFuc2ZlcnMgdG8gdGhlIFZNQSBzbyB0aGF0XFxuK1xcdCAqIG90aGVyIHVzZXJzIGNhbiBsb2NhdGUgdGhlIERNQUJVRiB2aWEgYSBWQS4gIE93bmVyc2hpcCBvZlxcbitcXHQgKiB0aGUgb3JpZ2luYWwgVkZJTyBkZXZpY2UgZmlsZSBiZWluZyBtbWFwKCllZCB0cmFuc2ZlcnMgdG9cXG4rXFx0ICogcHJpdiwgYW5kIGlzIHB1dCB3aGVuIHRoZSBETUFCVUYgaXMgcmVsZWFzZWQuICBUaGlzXFxuK1xcdCAqIGludGVudGlvbmFsbHkgZG9lcyBub3QgdXNlIGdldF9maWxlKCkvdm1hX3NldF9maWxlKClcXG4rXFx0ICogYmVjYXVzZSB0aGUgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLCBhbmQgb3duZXJzaGlwXFxuK1xcdCAqIG1vdmVzLlxcbitcXHQgKi9cXG4rXFx0cHJpdi1cXHUwMDNldmZpbGUgPSB2bWEtXFx1MDAzZXZtX2ZpbGU7XFxuK1xcdHZtYS1cXHUwMDNldm1fZmlsZSA9IHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlZmlsZTtcXG4rXFx0dm1hLVxcdTAwM2V2bV9wcml2YXRlX2RhdGEgPSBwcml2O1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZW5hbWVfbG9jayk7XFxuK1xcdGtmcmVlKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlbmFtZSk7XFxuK1xcdHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlbmFtZSA9IGJ1Zm5hbWU7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZW5hbWVfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlX25hbWU6XFxuK1xcdGtmcmVlKGJ1Zm5hbWUpO1xcbitlcnJfZnJlZV9waHlzOlxcbitcXHRrZnJlZShwcml2LVxcdTAwM2VwaHlzX3ZlYyk7XFxuK2Vycl9mcmVlX3ByaXY6XFxuK1xcdGtmcmVlKHByaXYpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKiBTZXQgdGhlIERNQUJVRidzIHJldm9jYXRpb24gc3RhdHVzIChPSyBvciB0ZW1wb3JhcmlseS9wZXJtYW5lbnRseSByZXZva2VkKSAqL1xcbitzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMoc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXFxuK1xcdFxcdFxcdFxcdFxcdGVudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMgbmV3X3N0YXR1cylcXG4re1xcbitcXHRib29sIHdhc19yZXZva2VkO1xcbitcXG4rXFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcXHUwMDI2cHJpdi1cXHUwMDNldmRldi1cXHUwMDNlbWVtb3J5X2xvY2spO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfUEVSTV9SRVZPS0VEIHx8XFxuK1xcdCAgICBwcml2LVxcdTAwM2VzdGF0dXMgPT0gbmV3X3N0YXR1cylcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZG1hX3Jlc3ZfbG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YsIE5VTEwpO1xcbitcXHR3YXNfcmV2b2tlZCA9IChwcml2LVxcdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCk7XFxuK1xcbitcXHRpZiAobmV3X3N0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlc3RhdHVzID0gbmV3X3N0YXR1czsgLyogVGVtcCBvciBwZXJtYW5lbnRseSByZXZva2VkICovXFxuK1xcbitcXHRcXHRpZiAod2FzX3Jldm9rZWQpIHtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogVEVNUF9SRVZPS0VEIGlzIGJlaW5nIHVwZ3JhZGVkIHRvXFxuK1xcdFxcdFxcdCAqIFBFUk1fUkVWT0tFRC4gIFRoZSBidWZmZXIgaXMgYWxyZWFkeSBnb25lLFxcbitcXHRcXHRcXHQgKiBkb24ndCB3YWl0IG9uIGl0IGFnYWluLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHRcXHRkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi1cXHUwMDNlZG1hYnVmKTtcXG4rXFx0XFx0ZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdixcXG4rXFx0XFx0XFx0XFx0ICAgICAgRE1BX1JFU1ZfVVNBR0VfQk9PS0tFRVAsIGZhbHNlLFxcbitcXHRcXHRcXHRcXHQgICAgICBNQVhfU0NIRURVTEVfVElNRU9VVCk7XFxuK1xcdFxcdGRtYV9yZXN2X3VubG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHRcXHRrcmVmX3B1dChcXHUwMDI2cHJpdi1cXHUwMDNla3JlZiwgdmZpb19wY2lfZG1hX2J1Zl9kb25lKTtcXG4rXFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2cHJpdi1cXHUwMDNlY29tcCk7XFxuK1xcdFxcdHVubWFwX21hcHBpbmdfcmFuZ2UocHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VmaWxlLVxcdTAwM2VmX21hcHBpbmcsXFxuK1xcdFxcdFxcdFxcdCAgICAwLCBwcml2LVxcdTAwM2VzaXplLCB0cnVlKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUmUtYXJtIHRoZSByZWdpc3RlcmVkIGtyZWYgcmVmZXJlbmNlIGFuZCB0aGVcXG4rXFx0XFx0ICogY29tcGxldGlvbiBzbyB0aGUgcG9zdC1yZXZva2Ugc3RhdGUgbWF0Y2hlcyB0aGVcXG4rXFx0XFx0ICogcG9zdC1jcmVhdGlvbiBzdGF0ZS4gIEFuIHVuLXJldm9rZSBmb2xsb3dlZCBieSBhXFxuK1xcdFxcdCAqIG5ldyBtYXBwaW5nIG5lZWRzIHRoZSBrcmVmIHRvIGJlIG5vbi16ZXJvIGJlZm9yZVxcbitcXHRcXHQgKiBrcmVmX2dldCgpLCBhbmQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKClcXG4rXFx0XFx0ICogZGVsZWdhdGVzIGl0cyBkcmFpbiBiYWNrIHRocm91Z2ggdGhpcyByZXZva2VcXG4rXFx0XFx0ICogcGF0aCBvbiBhIHBvc3NpYmx5LWFscmVhZHktcmV2b2tlZCBkbWEtYnVmLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0a3JlZl9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VrcmVmKTtcXG4rXFx0XFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZWNvbXApO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRwcml2LVxcdTAwM2VzdGF0dXMgPSBWRklPX1BDSV9ETUFCVUZfT0s7XFxuK1xcdFxcdGRtYV9yZXN2X3VubG9jayhwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YpO1xcbitcXHR9XFxuK31cXG4gXFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxcbiB7XFxuIFxcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xcbiBcXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdG1wO1xcbiBcXG4rXFx0LypcXG4rXFx0ICogSG9sZGluZyBtZW1vcnlfbG9jayBlbnN1cmVzIGEgcmFjaW5nIFZNQSBmYXVsdCBvYnNlcnZlc1xcbitcXHQgKiBwcml2LVxcdTAwM2VzdGF0dXMgcHJvcGVybHkuXFxuK1xcdCAqL1xcbiBcXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIFxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHJpdiwgdG1wLCBcXHUwMDI2dmRldi1cXHUwMDNlZG1hYnVmcywgZG1hYnVmc19lbG0pIHtcXG4gXFx0XFx0aWYgKCFnZXRfZmlsZV9hY3RpdmUoXFx1MDAyNnByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlZmlsZSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXG4tXFx0XFx0aWYgKHByaXYtXFx1MDAzZXJldm9rZWQgIT0gcmV2b2tlZCkge1xcbi1cXHRcXHRcXHRkbWFfcmVzdl9sb2NrKHByaXYtXFx1MDAzZWRtYWJ1Zi1cXHUwMDNlcmVzdiwgTlVMTCk7XFxuLVxcdFxcdFxcdGlmIChyZXZva2VkKVxcbi1cXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyZXZva2VkID0gdHJ1ZTtcXG4tXFx0XFx0XFx0ZG1hX2J1Zl9pbnZhbGlkYXRlX21hcHBpbmdzKHByaXYtXFx1MDAzZWRtYWJ1Zik7XFxuLVxcdFxcdFxcdGRtYV9yZXN2X3dhaXRfdGltZW91dChwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZXJlc3YsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xcbi1cXHRcXHRcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4tXFx0XFx0XFx0aWYgKHJldm9rZWQpIHtcXG4tXFx0XFx0XFx0XFx0a3JlZl9wdXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYsIHZmaW9fcGNpX2RtYV9idWZfZG9uZSk7XFxuLVxcdFxcdFxcdFxcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNnByaXYtXFx1MDAzZWNvbXApO1xcbi1cXHRcXHRcXHRcXHQvKlxcbi1cXHRcXHRcXHRcXHQgKiBSZS1hcm0gdGhlIHJlZ2lzdGVyZWQga3JlZiByZWZlcmVuY2UgYW5kIHRoZVxcbi1cXHRcXHRcXHRcXHQgKiBjb21wbGV0aW9uIHNvIHRoZSBwb3N0LXJldm9rZSBzdGF0ZSBtYXRjaGVzIHRoZVxcbi1cXHRcXHRcXHRcXHQgKiBwb3N0LWNyZWF0aW9uIHN0YXRlLiAgQW4gdW4tcmV2b2tlIGZvbGxvd2VkIGJ5IGFcXG4tXFx0XFx0XFx0XFx0ICogbmV3IG1hcHBpbmcgbmVlZHMgdGhlIGtyZWYgdG8gYmUgbm9uLXplcm8gYmVmb3JlXFxuLVxcdFxcdFxcdFxcdCAqIGtyZWZfZ2V0KCksIGFuZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKVxcbi1cXHRcXHRcXHRcXHQgKiBkZWxlZ2F0ZXMgaXRzIGRyYWluIGJhY2sgdGhyb3VnaCB0aGlzIHJldm9rZVxcbi1cXHRcXHRcXHRcXHQgKiBwYXRoIG9uIGEgcG9zc2libHktYWxyZWFkeS1yZXZva2VkIGRtYS1idWYuXFxuLVxcdFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRcXHRrcmVmX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWtyZWYpO1xcbi1cXHRcXHRcXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2cHJpdi1cXHUwMDNlY29tcCk7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdGRtYV9yZXN2X2xvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2LCBOVUxMKTtcXG4tXFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcmV2b2tlZCA9IGZhbHNlO1xcbi1cXHRcXHRcXHRcXHRkbWFfcmVzdl91bmxvY2socHJpdi1cXHUwMDNlZG1hYnVmLVxcdTAwM2VyZXN2KTtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuK1xcdFxcdHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhwcml2LCByZXZva2VkID9cXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOlxcbitcXHRcXHRcXHRcXHRcXHQgICAgVkZJT19QQ0lfRE1BQlVGX09LKTtcXG4gXFx0XFx0ZnB1dChwcml2LVxcdTAwM2VkbWFidWYtXFx1MDAzZWZpbGUpO1xcbiBcXHR9XFxuIH1cXG5AQCAtNDA0LDMgKzcwNiwxMTcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbiBcXHR9XFxuIFxcdHVwX3dyaXRlKFxcdTAwMjZ2ZGV2LVxcdTAwM2VtZW1vcnlfbG9jayk7XFxuIH1cXG4rXFxuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXFxuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSBfX3VzZXIgKmFyZyxcXG4rXFx0c2l6ZV90IGFyZ3N6KVxcbit7XFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlIGRiX3Jldm9rZTtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXFx1MDAzZXBjaV9vcHMtXFx1MDAzZWdldF9kbWFidWZfcGh5cylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeixcXG4rXFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKGRiX3Jldm9rZSkpO1xcbitcXHRpZiAocmV0ICE9IDEpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAoY29weV9mcm9tX3VzZXIoXFx1MDAyNmRiX3Jldm9rZSwgYXJnLCBzaXplb2YoZGJfcmV2b2tlKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfcmV2b2tlLmRtYWJ1Zl9mZCk7XFxuK1xcdGlmIChJU19FUlIoZG1hYnVmKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIoZG1hYnVmKTtcXG4rXFxuK1xcdHByaXYgPSBkbWFidWYtXFx1MDAzZXByaXY7XFxuK1xcdC8qXFxuK1xcdCAqIFNhbml0eS1jaGVjayB0aGUgRE1BQlVGIGlzIHJlYWxseSBhIHZmaW9fcGNpX2RtYV9idWYgX2FuZF9cXG4rXFx0ICogcmVsYXRlcyB0byB0aGUgVkZJTyBkZXZpY2UgaXQgd2FzIHByb3ZpZGVkIHdpdGguXFxuK1xcdCAqXFxuK1xcdCAqIElmIHRoZSBETUFCVUYgcmVsYXRlcyB0byB0aGlzIHZkZXYgdGhlbiBwcml2LVxcdTAwM2V2ZGV2IGlzXFxuK1xcdCAqIHN0YWJsZSBiZWNhdXNlIHRoaXMgb3BlbiBmZCBwcmV2ZW50cyBjbGVhbnVwLlxcbitcXHQgKlxcbitcXHQgKiBJZiBpdCByZWxhdGVzIHRvIGEgZGlmZmVyZW50IHZkZXYsIHJlYWRpbmcgcHJpdi1cXHUwMDNldmRldiBtaWdodFxcbitcXHQgKiByYWNlIHdpdGggYSBjb25jdXJyZW50IGNsZWFudXAgb24gdGhhdCBkZXZpY2UuICBCdXQgaWYgc28sXFxuK1xcdCAqIGl0IHBvaW50cyB0byBhIG5vbi1tYXRjaGluZyB2ZGV2IG9yIE5VTEwgYW5kIGlzIHVudXNhYmxlXFxuK1xcdCAqIGVpdGhlciB3YXkuXFxuK1xcdCAqL1xcbitcXHRpZiAoZG1hYnVmLVxcdTAwM2VvcHMgIT0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHxcXG4rXFx0ICAgIFJFQURfT05DRShwcml2LVxcdTAwM2V2ZGV2KSAhPSB2ZGV2KSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9idWY7XFxuK1xcdH1cXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChyd3NlbV93cml0ZSwgXFx1MDAyNnZkZXYtXFx1MDAzZW1lbW9yeV9sb2NrKSB7XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCkge1xcbitcXHRcXHRcXHRyZXQgPSAtRUJBREZEO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQpO1xcbitcXHRcXHRcXHRyZXQgPSAwO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK291dF9wdXRfYnVmOlxcbitcXHRkbWFfYnVmX3B1dChkbWFidWYpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgX191c2VyICphcmcsXFxuK1xcdHNpemVfdCBhcmdzeilcXG4re1xcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgZGJfYXR0cjtcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XFxuK1xcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRpZiAoIXZkZXYtXFx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXFx1MDAzZXBjaV9vcHMtXFx1MDAzZWdldF9kbWFidWZfcGh5cylcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0cmV0ID0gdmZpb19jaGVja19mZWF0dXJlKGZsYWdzLCBhcmdzeixcXG4rXFx0XFx0XFx0XFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxcbitcXHRcXHRcXHRcXHQgc2l6ZW9mKGRiX2F0dHIpKTtcXG4rXFx0aWYgKHJldCAhPSAxKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aWYgKGNvcHlfZnJvbV91c2VyKFxcdTAwMjZkYl9hdHRyLCBhcmcsIHNpemVvZihkYl9hdHRyKSkpXFxuK1xcdFxcdHJldHVybiAtRUZBVUxUO1xcbitcXG4rXFx0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfYXR0ci5kbWFidWZfZmQpO1xcbitcXHRpZiAoSVNfRVJSKGRtYWJ1ZikpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGRtYWJ1Zik7XFxuK1xcbitcXHQvKiBWZXJpZnkgRE1BQlVGOiBzZWUgY29tbWVudHMgaW4gdmZpb19wY2lfZG1hX2J1Zl9yZXZva2UoKSAqL1xcbitcXHRwcml2ID0gZG1hYnVmLVxcdTAwM2Vwcml2O1xcbitcXHRpZiAoZG1hYnVmLVxcdTAwM2VvcHMgIT0gXFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHxcXG4rXFx0ICAgIFJFQURfT05DRShwcml2LVxcdTAwM2V2ZGV2KSAhPSB2ZGV2KSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdGdvdG8gb3V0X3B1dF9idWY7XFxuK1xcdH1cXG4rXFxuK1xcdHN3aXRjaCAoZGJfYXR0ci5tZW1hdHRyKSB7XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfTkM6XFxuK1xcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0M6XFxuK1xcdFxcdFdSSVRFX09OQ0UocHJpdi1cXHUwMDNlbWVtYXR0ciwgZGJfYXR0ci5tZW1hdHRyKTtcXG4rXFx0XFx0cmV0ID0gMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRU5PRU5UO1xcbitcXHR9XFxuK1xcbitvdXRfcHV0X2J1ZjpcXG4rXFx0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rI2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmggYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxcbmluZGV4IGZjYTlkMGRmYWM5MGY4Li5iM2M3MmRmMDAyYzQ0OCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXFxuQEAgLTIzLDYgKzIzLDI4IEBAIHN0cnVjdCB2ZmlvX3BjaV9pb2V2ZW50ZmQge1xcbiBcXHRib29sXFx0XFx0XFx0dGVzdF9tZW07XFxuIH07XFxuIFxcbitlbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHtcXG4rXFx0VkZJT19QQ0lfRE1BQlVGX09LID0gMCxcXG4rXFx0VkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRCA9IDEsXFxuK1xcdFZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQgPSAyLFxcbit9O1xcbitcXG4rc3RydWN0IHZmaW9fcGNpX2RtYV9idWYge1xcbitcXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xcbitcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgZG1hYnVmc19lbG07XFxuK1xcdHNpemVfdCBzaXplO1xcbitcXHRzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjO1xcbitcXHRzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwcm92aWRlcjtcXG4rXFx0c3RydWN0IGZpbGUgKnZmaWxlO1xcbitcXHR1MzIgbnJfcmFuZ2VzO1xcbitcXHRzdHJ1Y3Qga3JlZiBrcmVmO1xcbitcXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xcbitcXHR1bnNpZ25lZCBsb25nIHZtYV9wZ29mZl9hZGp1c3Q7XFxuK1xcdHUzMiBtZW1hdHRyO1xcbitcXHRlbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHN0YXR1cztcXG4rfTtcXG4rXFxuIGJvb2wgdmZpb19wY2lfaW50eF9tYXNrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuIHZvaWQgdmZpb19wY2lfaW50eF91bm1hc2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gXFxuQEAgLTY4LDcgKzkwLDggQEAgdm9pZCB2ZmlvX2NvbmZpZ19mcmVlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuIGludCB2ZmlvX3BjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbiBcXHRcXHRcXHQgICAgIHBjaV9wb3dlcl90IHN0YXRlKTtcXG4gXFxuLXZvaWQgdmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuK3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xcbit2b2lkIHZmaW9fcGNpX3VucmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gdTE2IHZmaW9fcGNpX21lbW9yeV9sb2NrX2FuZF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4gdm9pZCB2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4gXFx0XFx0XFx0XFx0XFx0dTE2IGNtZCk7XFxuQEAgLTExNCwxMiArMTM3LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIFxcdHJldHVybiAocGRldi1cXHUwMDNlY2xhc3MgXFx1MDAzZVxcdTAwM2UgOCkgPT0gUENJX0NMQVNTX0RJU1BMQVlfVkdBO1xcbiB9XFxuIFxcbitpbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqdnBkbWFidWYsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXFxuK1xcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3Bmbik7XFxuK2ludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4rXFx0XFx0XFx0XFx0ICAgdTY0IHBoeXNfc3RhcnQsIHU2NCByZXFfbGVuLFxcbitcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBpbnQgcmVzX2luZGV4KTtcXG4rdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcXG4rdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xcbit2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcXG4rXFxuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXFxuIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4gXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxcbiBcXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuLXZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XFxuLXZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKTtcXG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlIF9fdXNlciAqYXJnLFxcbitcXHRzaXplX3QgYXJnc3opO1xcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0cihcXG4rXFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuK1xcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBfX3VzZXIgKmFyZyxcXG4rXFx0c2l6ZV90IGFyZ3N6KTtcXG4gI2Vsc2VcXG4gc3RhdGljIGlubGluZSBpbnRcXG4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXFxuQEAgLTEyOCwxMiArMTcwLDIxIEBAIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbiB7XFxuIFxcdHJldHVybiAtRU5PVFRZO1xcbiB9XFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbitcXG4rc3RhdGljIGlubGluZSBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlKFxcbitcXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4rXFx0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXFxuK1xcdHNpemVfdCBhcmdzeilcXG4ge1xcbitcXHRyZXR1cm4gLUVOT1RUWTtcXG4gfVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tXFx0XFx0XFx0XFx0XFx0IGJvb2wgcmV2b2tlZClcXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXFxuK1xcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbitcXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgX191c2VyICphcmcsXFxuK1xcdHNpemVfdCBhcmdzeilcXG4ge1xcbitcXHRyZXR1cm4gLUVOT1RUWTtcXG4gfVxcbiAjZW5kaWZcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oIGIvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcXG5pbmRleCA4NzNkZTIwYTIyNDc1OS4uNGM0MmE3YjJlZTg1NTggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaFxcbkBAIC02Nyw5ICs2NywyMiBAQCBlbnVtIHBjaV9wMnBkbWFfbWFwX3R5cGUge1xcbiBcXHRQQ0lfUDJQRE1BX01BUF9USFJVX0hPU1RfQlJJREdFLFxcbiB9O1xcbiBcXG4tI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXFxuKyNpZmRlZiBDT05GSUdfUENJX1AyUERNQV9DT1JFXFxuIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcXG4gc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBpbnQgYmFyKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuKyNlbmRpZlxcbitcXG4rI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXFxuIGludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXFxuIFxcdFxcdHU2NCBvZmZzZXQpO1xcbiBpbnQgcGNpX3AycGRtYV9kaXN0YW5jZV9tYW55KHN0cnVjdCBwY2lfZGV2ICpwcm92aWRlciwgc3RydWN0IGRldmljZSAqKmNsaWVudHMsXFxuQEAgLTg5LDE1ICsxMDIsNiBAQCBzc2l6ZV90IHBjaV9wMnBkbWFfZW5hYmxlX3Nob3coY2hhciAqcGFnZSwgc3RydWN0IHBjaV9kZXYgKnAycF9kZXYsXFxuIGVudW0gcGNpX3AycGRtYV9tYXBfdHlwZSBwY2lfcDJwZG1hX21hcF90eXBlKHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2UgKmRldik7XFxuICNlbHNlIC8qIENPTkZJR19QQ0lfUDJQRE1BICovXFxuLXN0YXRpYyBpbmxpbmUgaW50IHBjaW1fcDJwZG1hX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLXtcXG4tXFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi19XFxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IHAycGRtYV9wcm92aWRlciAqcGNpbV9wMnBkbWFfcHJvdmlkZXIoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBiYXIpXFxuLXtcXG4tXFx0cmV0dXJuIE5VTEw7XFxuLX1cXG4gc3RhdGljIGlubGluZSBpbnQgcGNpX3AycGRtYV9hZGRfcmVzb3VyY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBiYXIsXFxuIFxcdFxcdHNpemVfdCBzaXplLCB1NjQgb2Zmc2V0KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpLmggYi9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuaW5kZXggMmM0NDU0NTgzYzExNWIuLjUzMWFlYzM1NTY4NmIwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oXFxuQEAgLTU1Nyw3ICs1NTcsNyBAQCBzdHJ1Y3QgcGNpX2RldiB7XFxuIFxcdHUxNlxcdFxcdHBhc2lkX2NhcDtcXHQvKiBQQVNJRCBDYXBhYmlsaXR5IG9mZnNldCAqL1xcbiBcXHR1MTZcXHRcXHRwYXNpZF9mZWF0dXJlcztcXG4gI2VuZGlmXFxuLSNpZmRlZiBDT05GSUdfUENJX1AyUERNQVxcbisjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFfQ09SRVxcbiBcXHRzdHJ1Y3QgcGNpX3AycGRtYSBfX3JjdSAqcDJwZG1hO1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19QQ0lfRE9FXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oIGIvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG5pbmRleCA4OTE2NWI3NjllNWMxNi4uYTJmNTg2ZTRmY2Q4ZDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxcbkBAIC0xMjcsNiArMTI3LDcgQEAgc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlIHtcXG4gXFx0Ym9vbFxcdFxcdFxcdG5lZWRzX3BtX3Jlc3RvcmU6MTtcXG4gXFx0Ym9vbFxcdFxcdFxcdHBtX2ludHhfbWFza2VkOjE7XFxuIFxcdGJvb2xcXHRcXHRcXHRwbV9ydW50aW1lX2VuZ2FnZWQ6MTtcXG4rXFx0Ym9vbFxcdFxcdFxcdHphcF9iYXJzX29uX3Jldm9rZToxO1xcbiBcXHRzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlXFx0KnBjaV9zYXZlZF9zdGF0ZTtcXG4gXFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVxcdCpwbV9zYXZlO1xcbiBcXHRpbnRcXHRcXHRcXHRpb2V2ZW50ZmRzX25yO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbmluZGV4IDVkZTYxOGEzYTVlZWVlLi5hYjMwYjg5Mzk5ZDAzOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ZmaW8uaFxcbkBAIC0xNTM0LDYgKzE1MzQsNTMgQEAgc3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1ZiB7XFxuICAqL1xcbiAjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfTUlHX1BSRUNPUFlfSU5GT3YyICAxMlxcbiBcXG4rLyoqXFxuKyAqIEdpdmVuIGEgZG1hX2J1ZiBmZCBwcmV2aW91c2x5IGNyZWF0ZWQgYnlcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBhIFNFVCBvZiB0aGlzIGZlYXR1cmUgcmVxdWVzdHMgdGhhdFxcbisgKiBhY2Nlc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgRE1BQlVGIGlzIGltbWVkaWF0ZWx5IGFuZCBwZXJtYW5lbnRseVxcbisgKiByZXZva2VkLiAgT24gc3VjY2Vzc2Z1bCByZXR1cm4sIHRoZSBidWZmZXIgaXMgbm90IGFjY2Vzc2libGVcXG4rICogdGhyb3VnaCBhbnkgbW1hcCgpIG9yIGRtYS1idWYgaW1wb3J0LiAgVGhlIGJ1ZmZlciBpcyBwZXJtYW5lbnRseVxcbisgKiBkaXNhYmxlZCwgYW5kIFZGSU8gcmVmdXNlcyBhbGwgbWFwLCBtbWFwLCBhdHRhY2gsIGV0Yy4gcmVxdWVzdHMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6XFxuKyAqXFxuKyAqICBFQkFERiwgRUlOVkFMOiBkbWFidWZfZmQgaXMgbm90IGEgRE1BQlVGIGZkLlxcbisgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuXFxuKyAqICBFQkFERkQ6IFRoZSBETUFCVUYgaXMgYWxyZWFkeSByZXZva2VkLlxcbisgKi9cXG4rI2RlZmluZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIDEzXFxuK1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSB7XFxuK1xcdF9fczMyXFx0ZG1hYnVmX2ZkO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIEdpdmVuIGEgZG1hX2J1ZiBmZCBwcmV2aW91c2x5IGNyZWF0ZWQgYnlcXG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBTRVQgdGhlIG1lbW9yeSBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlXFxuKyAqIHVzZWQgYnkgZnV0dXJlIG1tYXAoKXMgb2YgdGhhdCBmZC4gIFNFVHRpbmcgYSBuZXcgYXR0cmlidXRlIGRvZXNcXG4rICogbm90IGFmZmVjdCBleGlzdGluZyBWTUFzLlxcbisgKlxcbisgKiBUaGUgZGVmYXVsdCwgaWYgbm8gcHJldmlvdXMgU0VUIGhhcyBiZWVuIHBlcmZvcm1lZCwgaXMgTkMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6XFxuKyAqXFxuKyAqICBFQkFERiwgRUlOVkFMOiBkbWFidWZfZmQgaXMgbm90IGEgRE1BQlVGIGZkLlxcbisgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuXFxuKyAqICBFTk9FTlQ6IFRoZSBnaXZlbiBtZW1hdHRyIGlzIG5vdCBzdXBwb3J0ZWQuXFxuKyAqL1xcbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSIDE0XFxuK1xcbisvKiBWYWxpZCBtZW1vcnkgYXR0cmlidXRlcyBmb3IgdGhlIG1lbWF0dHIgZmllbGQgKi9cXG4rZW51bSB2ZmlvX2RldmljZV9kbWFfYnVmX21lbWF0dHIge1xcbitcXHRWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQyA9IDAsIC8qIHBncHJvdF9ub25jYWNoZWQgKi9cXG4rXFx0VkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0MgPSAxLCAvKiBwZ3Byb3Rfd3JpdGVjb21iaW5lICovXFxuK307XFxuK1xcbitzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIge1xcbitcXHRfX3MzMlxcdGRtYWJ1Zl9mZDtcXG4rXFx0X191MzJcXHRtZW1hdHRyO1xcbit9O1xcbitcXG4gLyogLS0tLS0tLS0gQVBJIGZvciBUeXBlMSBWRklPIElPTU1VIC0tLS0tLS0tICovXFxuIFxcbiAvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDA6MjA6MDYuNzg4ODE3ODQzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3NzY0Nzg0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJWRklPX1BDSVwiLFxuICAgIFwiUENJX1AyUERNQVwiLFxuICAgIFwiWk9ORV9ERVZJQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2VcIixcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHJcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfbW1hcFwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmblwiLFxuICAgIFwidmZpb19wY2lfZG1hYnVmX2V4cG9ydFwiLFxuICAgIFwidmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldyBWRklPIGZlYXR1cmVzIChWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFIGFuZCBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUikgYW5kIG1vZGlmaWVzIHRoZSBtbWFwIGhhbmRsaW5nIHRvIHVzZSBETUFCVUYtYmFja2VkIG1tYXBzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTMwNzk3N2I2MTQ5MzU1MDg5YmEwODMxMzNhZjIxMzdkZDE0NWIwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMiAwMDoyMDowNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IGM4ZDRiOTEzZjI2YzEyLi43MTM4NjFhZjQ0ODQ2YSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTIwNjI2LDcgKzIwNjI2LDcgQEAgQjpcdGh0dHBzOi8vYnVnemlsbGEua2VybmVsLm9yZ1xuIEM6XHRpcmM6Ly9pcmMub2Z0Yy5uZXQvbGludXgtcGNpXG4gVDpcdGdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcGNpL3BjaS5naXRcbiBGOlx0RG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL3BjaS9wMnBkbWEucnN0XG4tRjpcdGRyaXZlcnMvcGNpL3AycGRtYS5jXG4rRjpcdGRyaXZlcnMvcGNpL3AycGRtYSpcbiBGOlx0aW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcbiBcbiBQQ0kgUE9XRVIgQ09OVFJPTFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL0tjb25maWcgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5pbmRleCAzM2M4ODQzMmI3Mjg3NS4uNTlkNzBiYzg0Y2M5YWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnXG4rKysgYi9kcml2ZXJzL3BjaS9LY29uZmlnXG5AQCAtMjA2LDExICsyMDYsNyBAQCBjb25maWcgUENJRV9UUEhcbiBjb25maWcgUENJX1AyUERNQVxuIFx0Ym9vbCBcIlBDSSBwZWVyLXRvLXBlZXIgdHJhbnNmZXIgc3VwcG9ydFwiXG4gXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXG4tXHQjXG4tXHQjIFRoZSBuZWVkIGZvciB0aGUgc2NhdHRlcmxpc3QgRE1BIGJ1cyBhZGRyZXNzIGZsYWcgbWVhbnMgUENJIFAyUERNQVxuLVx0IyByZXF1aXJlcyA2NGJpdFxuLVx0I1xuLVx0ZGVwZW5kcyBvbiA2NEJJVFxuK1x0c2VsZWN0IFBDSV9QMlBETUFfQ09SRVxuIFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gXHRzZWxlY3QgTkVFRF9TR19ETUFfRkxBR1NcbiBcdGhlbHBcbkBAIC0yMjYsNiArMjIyLDEwIEBAIGNvbmZpZyBQQ0lfUDJQRE1BXG4gXG4gXHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gXG4rY29uZmlnIFBDSV9QMlBETUFfQ09SRVxuK1x0ZGVmYXVsdCBuXG4rXHRib29sXG4rXG4gY29uZmlnIFBDSV9MQUJFTFxuIFx0ZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpXG4gXHRzZWxlY3QgTkxTXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZVxuaW5kZXggNDFlYmMzYjlhNTE4MjQuLjBiMzI1NzJkNTdhMTU5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGVcbisrKyBiL2RyaXZlcnMvcGNpL01ha2VmaWxlXG5AQCAtMzAsNiArMzAsNyBAQCBvYmotJChDT05GSUdfUENJX1NZU0NBTEwpXHQrPSBzeXNjYWxsLm9cbiBvYmotJChDT05GSUdfUENJX1NUVUIpXHRcdCs9IHBjaS1zdHViLm9cbiBvYmotJChDT05GSUdfUENJX1BGX1NUVUIpXHQrPSBwY2ktcGYtc3R1Yi5vXG4gb2JqLSQoQ09ORklHX1BDSV9FQ0FNKVx0XHQrPSBlY2FtLm9cbitvYmotJChDT05GSUdfUENJX1AyUERNQV9DT1JFKVx0Kz0gcDJwZG1hX2NvcmUub1xuIG9iai0kKENPTkZJR19QQ0lfUDJQRE1BKVx0Kz0gcDJwZG1hLm9cbiBvYmotJChDT05GSUdfWEVOX1BDSURFVl9GUk9OVEVORCkgKz0geGVuLXBjaWZyb250Lm9cbiBvYmotJChDT05GSUdfVkdBX0FSQilcdFx0Kz0gdmdhYXJiLm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wMnBkbWEuYyBiL2RyaXZlcnMvcGNpL3AycGRtYS5jXG5pbmRleCA3Yzg5ODU0MmFmOGQ1ZS4uNTBiMWE3ZGFmNTVjYzQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3BjaS9wMnBkbWEuY1xuKysrIGIvZHJpdmVycy9wY2kvcDJwZG1hLmNcbkBAIC0yMSwxMiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlcV9idWYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4gXG4tc3RydWN0IHBjaV9wMnBkbWEge1xuLVx0c3RydWN0IGdlbl9wb29sICpwb29sO1xuLVx0Ym9vbCBwMnBtZW1fcHVibGlzaGVkO1xuLVx0c3RydWN0IHhhcnJheSBtYXBfdHlwZXM7XG4tXHRzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyIG1lbVtQQ0lfU1REX05VTV9CQVJTXTtcbi19O1xuKyNpbmNsdWRlIFwicDJwZG1hLmhcIlxuIFxuIHN0cnVjdCBwY2lfcDJwZG1hX3BhZ2VtYXAge1xuIFx0c3RydWN0IGRldl9wYWdlbWFwIHBnbWFwO1xuQEAgLTIyNiwxMTAgKzIyMSwxNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wYWdlbWFwX29wcyBwMnBkbWFfcGdtYXBfb3BzID0ge1xuIFx0LmZvbGlvX2ZyZWUgPSBwMnBkbWFfZm9saW9fZnJlZSxcbiB9O1xuIFxuLXN0YXRpYyB2b2lkIHBjaV9wMnBkbWFfcmVsZWFzZSh2b2lkICpkYXRhKVxuK3ZvaWQgcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpXG4ge1xuLVx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhO1xuLVx0c3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTtcbi1cbi1cdHAycGRtYSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuLVx0aWYgKCFwMnBkbWEpXG4tXHRcdHJldHVybjtcbi1cbi1cdC8qIEZsdXNoIGFuZCBkaXNhYmxlIHBjaV9hbGxvY19wMnBfbWVtKCkgKi9cbi1cdHBkZXYtXHUwMDNlcDJwZG1hID0gTlVMTDtcbi1cdGlmIChwMnBkbWEtXHUwMDNlcG9vbClcbi1cdFx0c3luY2hyb25pemVfcmN1KCk7XG4tXHR4YV9kZXN0cm95KFx1MDAyNnAycGRtYS1cdTAwM2VtYXBfdHlwZXMpO1xuLVxuIFx0aWYgKCFwMnBkbWEtXHUwMDNlcG9vbClcbiBcdFx0cmV0dXJuO1xuIFxuK1x0c3luY2hyb25pemVfcmN1KCk7XG4gXHRnZW5fcG9vbF9kZXN0cm95KHAycGRtYS1cdTAwM2Vwb29sKTtcbiBcdHN5c2ZzX3JlbW92ZV9ncm91cChcdTAwMjZwZGV2LVx1MDAzZWRldi5rb2JqLCBcdTAwMjZwMnBtZW1fZ3JvdXApO1xuIH1cbiBcbi0vKipcbi0gKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyc1xuLSAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvclxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZVxuLSAqIGZvciBhIFBDSSBkZXZpY2UuIEl0IGFsbG9jYXRlcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGFcbi0gKiBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgUDJQRE1BIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBtYXBwaW5nIHR5cGVcbi0gKiB0cmFja2luZy5cbi0gKi9cbi1pbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi17XG4tXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwO1xuLVx0aW50IGksIHJldDtcbi1cbi1cdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuLVx0aWYgKHAycClcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRwMnAgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXAycClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHR4YV9pbml0KFx1MDAyNnAycC1cdTAwM2VtYXBfdHlwZXMpO1xuLVx0Lypcbi1cdCAqIEl0ZXJhdGUgb3ZlciBhbGwgc3RhbmRhcmQgUENJIEJBUnMgYW5kIHJlY29yZCBvbmx5IHRob3NlIHRoYXRcbi1cdCAqIGNvcnJlc3BvbmQgdG8gTU1JTyByZWdpb25zLiBTa2lwIG5vbi1tZW1vcnkgcmVzb3VyY2VzIChlLmcuIEkvT1xuLVx0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcbi1cdCAqIHRyYW5zYWN0aW9ucy5cbi1cdCAqL1xuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSsrKSB7XG4tXHRcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHRwMnAtXHUwMDNlbWVtW2ldLm93bmVyID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tXHRcdHAycC1cdTAwM2VtZW1baV0uYnVzX29mZnNldCA9XG4tXHRcdFx0cGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpO1xuLVx0fVxuLVxuLVx0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwY2lfcDJwZG1hX3JlbGVhc2UsIHBkZXYpO1xuLVx0aWYgKHJldClcbi1cdFx0Z290byBvdXRfcDJwO1xuLVxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXHUwMDNlcDJwZG1hLCBwMnApO1xuLVx0cmV0dXJuIDA7XG4tXG4tb3V0X3AycDpcbi1cdGRldm1fa2ZyZWUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHAycCk7XG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1FWFBPUlRfU1lNQk9MX0dQTChwY2ltX3AycGRtYV9pbml0KTtcbi1cbi0vKipcbi0gKiBwY2ltX3AycGRtYV9wcm92aWRlciAtIEdldCBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyXG4tICogQHBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGVuYWJsZSBQMlBETUEgZm9yXG4tICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxuLSAqXG4tICogVGhpcyBmdW5jdGlvbiBnZXRzIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXIgZm9yIGEgUENJIGRldmljZS4gVGhlIGxpZmV0aW1lXG4tICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXG4tICogZHJpdmVyLiBBIGRyaXZlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byB0aGVcbi0gKiBwcm92aWRlciwgYW5kIGFueSBETUEgbWFwcGluZ3MgY3JlYXRlZCBmb3IgYW55IE1NSU8sIGFyZSBhbGwgY2xlYW5lZCB1cFxuLSAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cbi0gKlxuLSAqIFNpbmNlIFAyUCBpcyBhbG1vc3QgYWx3YXlzIHNoYXJlZCB3aXRoIGEgc2Vjb25kIGRyaXZlciB0aGlzIG1lYW5zIHNvbWUgc3lzdGVtXG4tICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8ncyBETUEgbXVzdCBiZSBpbiBwbGFjZSB0byB1c2UgdGhpc1xuLSAqIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSBhIHJldm9rZSBjYW4gYmUgYnVpbHQgdXNpbmcgRE1BQlVGLlxuLSAqL1xuLXN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKVxuLXtcbi1cdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XG4tXG4tXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuLVx0aWYgKFdBUk5fT04oIXAycCkpXG4tXHRcdC8qIFNvbWVvbmUgZm9yZ290IHRvIGNhbGwgdG8gcGNpbV9wMnBkbWFfaW5pdCgpIGJlZm9yZSAqL1xuLVx0XHRyZXR1cm4gTlVMTDtcbi1cbi1cdHJldHVybiBcdTAwMjZwMnAtXHUwMDNlbWVtW2Jhcl07XG4tfVxuLUVYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX3Byb3ZpZGVyKTtcbi1cbiBzdGF0aWMgaW50IHBjaV9wMnBkbWFfc2V0dXBfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwZG1hO1xuQEAgLTkzMiw4ICs4MzMsOCBAQCB2b2lkICpwY2lfYWxsb2NfcDJwbWVtKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSlcbiBcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWE7XG4gXG4gXHQvKlxuLVx0ICogUGFpcnMgd2l0aCBzeW5jaHJvbml6ZV9yY3UoKSBpbiBwY2lfcDJwZG1hX3JlbGVhc2UoKSB0b1xuLVx0ICogZW5zdXJlIHBkZXYtXHUwMDNlcDJwZG1hIGlzIG5vbi1OVUxMIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4rXHQgKiBQYWlycyB3aXRoIHN5bmNocm9uaXplX3JjdSgpIGluIHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKClcbitcdCAqIHRvIGVuc3VyZSBwZGV2LVx1MDAzZXAycGRtYSBpcyBub24tTlVMTCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZVxuIFx0ICogcmVhZC1sb2NrLlxuIFx0ICovXG4gXHRyY3VfcmVhZF9sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcDJwZG1hLmggYi9kcml2ZXJzL3BjaS9wMnBkbWEuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45NDYzODM4MDk5ODE0OVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9wY2kvcDJwZG1hLmhcbkBAIC0wLDAgKzEsMjkgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKy8qXG4rICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydC5cbisgKi9cbitcbisjaWZuZGVmIF9QQ0lfUDJQRE1BX0hcbisjZGVmaW5lIF9QQ0lfUDJQRE1BX0hcbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9nZW5hbGxvYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgveGFycmF5LmhcdTAwM2VcbitcbitzdHJ1Y3QgcGNpX3AycGRtYSB7XG4rXHRzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2w7XG4rXHRib29sIHAycG1lbV9wdWJsaXNoZWQ7XG4rXHRzdHJ1Y3QgeGFycmF5IG1hcF90eXBlcztcbitcdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgbWVtW1BDSV9TVERfTlVNX0JBUlNdO1xuK307XG4rXG4rI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXG4rdm9pZCBwY2lfcDJwZG1hX3JlbGVhc2VfcG9vbChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYSk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3AycGRtYV9yZWxlYXNlX3Bvb2woc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBwY2lfcDJwZG1hICpwMnBkbWEpXG4re1xuK31cbisjZW5kaWZcbitcbisjZW5kaWZcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jIGIvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iYjIxMzhiZjJiYzdiN1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9wY2kvcDJwZG1hX2NvcmUuY1xuQEAgLTAsMCArMSwxMTggQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qXG4rICogUENJIHBlZXItdG8tcGVlciBETUEgc3VwcG9ydCBjb3JlLCBwcm92aWRpbmcgYSBiYXJlLWJvbmVzXG4rICogcGNpbV9wMnBkbWFfcHJvdmlkZXIoKSBpbnRlcmZhY2UgdG8gZHJpdmVycyBldmVuIGlmIGZ1bGwgUDJQRE1BXG4rICogaXNuJ3QgcHJlc2VudC4gIFRoZSBmdWxsIFAyUERNQSBmZWF0dXJlIGlzIGluIHAycGRtYS5jIChzZWVcbisgKiBDT05GSUdfUENJX1AyUERNQSkuXG4rICpcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTYtMjAxOCwgTG9nYW4gR3VudGhvcnBlXG4rICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMTcsIE1pY3Jvc2VtaSBDb3Jwb3JhdGlvblxuKyAqIENvcHlyaWdodCAoYykgMjAxNywgQ2hyaXN0b3BoIEhlbGx3aWdcbisgKiBDb3B5cmlnaHQgKGMpIDIwMTgsIEVpZGV0aWNvbSBJbmMuXG4rICovXG4rXG4rI2RlZmluZSBwcl9mbXQoZm10KSBcInBjaS1wMnBkbWE6IFwiIGZtdFxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2N0eXBlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9nZW5hbGxvYy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWVtcmVtYXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS1wMnBkbWEuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3hhcnJheS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJwMnBkbWEuaFwiXG4rXG4rc3RhdGljIHZvaWQgcGNpX3AycGRtYV9yZWxlYXNlKHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkYXRhO1xuK1x0c3RydWN0IHBjaV9wMnBkbWEgKnAycGRtYTtcbitcbitcdHAycGRtYSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuK1x0aWYgKCFwMnBkbWEpXG4rXHRcdHJldHVybjtcbitcbitcdC8qIEZsdXNoIGFuZCBkaXNhYmxlIHBjaV9hbGxvY19wMnBfbWVtKCkgKi9cbitcdHBkZXYtXHUwMDNlcDJwZG1hID0gTlVMTDtcbitcdHBjaV9wMnBkbWFfcmVsZWFzZV9wb29sKHBkZXYsIHAycGRtYSk7XG4rXHR4YV9kZXN0cm95KFx1MDAyNnAycGRtYS1cdTAwM2VtYXBfdHlwZXMpO1xuK31cbitcbisvKipcbisgKiBwY2ltX3AycGRtYV9pbml0IC0gSW5pdGlhbGlzZSBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyc1xuKyAqIEBwZGV2OiBUaGUgUENJIGRldmljZSB0byBlbmFibGUgUDJQRE1BIGZvclxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgcGVlci10by1wZWVyIERNQSBpbmZyYXN0cnVjdHVyZVxuKyAqIGZvciBhIFBDSSBkZXZpY2UuIEl0IGFsbG9jYXRlcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGRhdGFcbisgKiBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgUDJQRE1BIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBtYXBwaW5nIHR5cGVcbisgKiB0cmFja2luZy5cbisgKi9cbitpbnQgcGNpbV9wMnBkbWFfaW5pdChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHRzdHJ1Y3QgcGNpX3AycGRtYSAqcDJwO1xuK1x0aW50IGksIHJldDtcbitcbitcdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuK1x0aWYgKHAycClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRwMnAgPSBkZXZtX2t6YWxsb2MoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHNpemVvZigqcDJwKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXAycClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHR4YV9pbml0KFx1MDAyNnAycC1cdTAwM2VtYXBfdHlwZXMpO1xuK1x0LypcbitcdCAqIEl0ZXJhdGUgb3ZlciBhbGwgc3RhbmRhcmQgUENJIEJBUnMgYW5kIHJlY29yZCBvbmx5IHRob3NlIHRoYXRcbitcdCAqIGNvcnJlc3BvbmQgdG8gTU1JTyByZWdpb25zLiBTa2lwIG5vbi1tZW1vcnkgcmVzb3VyY2VzIChlLmcuIEkvT1xuK1x0ICogcG9ydCBCQVJzKSBzaW5jZSB0aGV5IGNhbm5vdCBiZSB1c2VkIGZvciBwZWVyLXRvLXBlZXIgKFAyUClcbitcdCAqIHRyYW5zYWN0aW9ucy5cbitcdCAqL1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUENJX1NURF9OVU1fQkFSUzsgaSsrKSB7XG4rXHRcdGlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCBpKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRwMnAtXHUwMDNlbWVtW2ldLm93bmVyID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4rXHRcdHAycC1cdTAwM2VtZW1baV0uYnVzX29mZnNldCA9XG4rXHRcdFx0cGNpX2J1c19hZGRyZXNzKHBkZXYsIGkpIC0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGkpO1xuK1x0fVxuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBwY2lfcDJwZG1hX3JlbGVhc2UsIHBkZXYpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBvdXRfcDJwO1xuK1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKHBkZXYtXHUwMDNlcDJwZG1hLCBwMnApO1xuK1x0cmV0dXJuIDA7XG4rXG4rb3V0X3AycDpcbitcdGRldm1fa2ZyZWUoXHUwMDI2cGRldi1cdTAwM2VkZXYsIHAycCk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChwY2ltX3AycGRtYV9pbml0KTtcbitcbisvKipcbisgKiBwY2ltX3AycGRtYV9wcm92aWRlciAtIEdldCBwZWVyLXRvLXBlZXIgRE1BIHByb3ZpZGVyXG4rICogQHBkZXY6IFRoZSBQQ0kgZGV2aWNlIHRvIGVuYWJsZSBQMlBETUEgZm9yXG4rICogQGJhcjogQkFSIGluZGV4IHRvIGdldCBwcm92aWRlclxuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBnZXRzIHBlZXItdG8tcGVlciBETUEgcHJvdmlkZXIgZm9yIGEgUENJIGRldmljZS4gVGhlIGxpZmV0aW1lXG4rICogb2YgdGhlIHByb3ZpZGVyIChhbmQgb2YgY291cnNlIHRoZSBNTUlPKSBpcyBib3VuZCB0byB0aGUgbGlmZXRpbWUgb2YgdGhlXG4rICogZHJpdmVyLiBBIGRyaXZlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVmZXJlbmNlcyB0byB0aGVcbisgKiBwcm92aWRlciwgYW5kIGFueSBETUEgbWFwcGluZ3MgY3JlYXRlZCBmb3IgYW55IE1NSU8sIGFyZSBhbGwgY2xlYW5lZCB1cFxuKyAqIGJlZm9yZSB0aGUgZHJpdmVyIHJlbW92ZSgpIGNvbXBsZXRlcy5cbisgKlxuKyAqIFNpbmNlIFAyUCBpcyBhbG1vc3QgYWx3YXlzIHNoYXJlZCB3aXRoIGEgc2Vjb25kIGRyaXZlciB0aGlzIG1lYW5zIHNvbWUgc3lzdGVtXG4rICogdG8gbm90aWZ5LCBpbnZhbGlkYXRlIGFuZCByZXZva2UgdGhlIE1NSU8ncyBETUEgbXVzdCBiZSBpbiBwbGFjZSB0byB1c2UgdGhpc1xuKyAqIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSBhIHJldm9rZSBjYW4gYmUgYnVpbHQgdXNpbmcgRE1BQlVGLlxuKyAqL1xuK3N0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnBjaW1fcDJwZG1hX3Byb3ZpZGVyKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyKVxuK3tcbitcdHN0cnVjdCBwY2lfcDJwZG1hICpwMnA7XG4rXG4rXHRpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgYmFyKSBcdTAwMjYgSU9SRVNPVVJDRV9NRU0pKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHAycCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocGRldi1cdTAwM2VwMnBkbWEsIDEpO1xuK1x0aWYgKFdBUk5fT04oIXAycCkpXG4rXHRcdC8qIFNvbWVvbmUgZm9yZ290IHRvIGNhbGwgdG8gcGNpbV9wMnBkbWFfaW5pdCgpIGJlZm9yZSAqL1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHJldHVybiBcdTAwMjZwMnAtXHUwMDNlbWVtW2Jhcl07XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBjaW1fcDJwZG1hX3Byb3ZpZGVyKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWcgYi9kcml2ZXJzL3ZmaW8vcGNpL0tjb25maWdcbmluZGV4IDI5NmJmMDFlMTg1ZWNhLi42N2EyYWUxZmJjMDRiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS9LY29uZmlnXG5AQCAtNiw2ICs2LDggQEAgY29uZmlnIFZGSU9fUENJX0NPUkVcbiBcdHRyaXN0YXRlXG4gXHRzZWxlY3QgVkZJT19WSVJRRkRcbiBcdHNlbGVjdCBJUlFfQllQQVNTX01BTkFHRVJcbitcdHNlbGVjdCBQQ0lfUDJQRE1BX0NPUkVcbitcdHNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUlxuIFxuIGNvbmZpZyBWRklPX1BDSV9JTlRYXG4gXHRkZWZfYm9vbCB5IGlmICFTMzkwXG5AQCAtNTYsNyArNTgsOCBAQCBjb25maWcgVkZJT19QQ0lfWkRFVl9LVk1cbiBcdCAgVG8gZW5hYmxlIHMzOTB4IEtWTSB2ZmlvLXBjaSBleHRlbnNpb25zLCBzYXkgWS5cbiBcbiBjb25maWcgVkZJT19QQ0lfRE1BQlVGXG4tXHRkZWZfYm9vbCB5IGlmIFZGSU9fUENJX0NPUkUgXHUwMDI2XHUwMDI2IFBDSV9QMlBETUEgXHUwMDI2XHUwMDI2IERNQV9TSEFSRURfQlVGRkVSXG4rXHRkZWZfYm9vbCB5IGlmIFBDSV9QMlBETUFcbitcdGRlcGVuZHMgb24gVkZJT19QQ0lfQ09SRVxuIFxuIHNvdXJjZSBcImRyaXZlcnMvdmZpby9wY2kvbWx4NS9LY29uZmlnXCJcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL01ha2VmaWxlIGIvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZVxuaW5kZXggNjEzOGYxYmYyNDFkZjAuLjg4MTQ1MmVhODliZTBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS9NYWtlZmlsZVxuQEAgLTEsOCArMSw3IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gXG4tdmZpby1wY2ktY29yZS15IDo9IHZmaW9fcGNpX2NvcmUubyB2ZmlvX3BjaV9pbnRycy5vIHZmaW9fcGNpX3Jkd3IubyB2ZmlvX3BjaV9jb25maWcub1xuK3ZmaW8tcGNpLWNvcmUteSA6PSB2ZmlvX3BjaV9jb3JlLm8gdmZpb19wY2lfaW50cnMubyB2ZmlvX3BjaV9yZHdyLm8gdmZpb19wY2lfY29uZmlnLm8gdmZpb19wY2lfZG1hYnVmLm9cbiB2ZmlvLXBjaS1jb3JlLSQoQ09ORklHX1ZGSU9fUENJX1pERVZfS1ZNKSArPSB2ZmlvX3BjaV96ZGV2Lm9cbi12ZmlvLXBjaS1jb3JlLSQoQ09ORklHX1ZGSU9fUENJX0RNQUJVRikgKz0gdmZpb19wY2lfZG1hYnVmLm9cbiBvYmotJChDT05GSUdfVkZJT19QQ0lfQ09SRSkgKz0gdmZpby1wY2ktY29yZS5vXG4gXG4gdmZpby1wY2kteSA6PSB2ZmlvX3BjaS5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS9oaXNpbGljb24vaGlzaV9hY2NfdmZpb19wY2kuYyBiL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmNcbmluZGV4IGJiMTIxZjYzNWI5ZjdmLi5kOWYyNmIwY2U5OTFkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvaGlzaWxpY29uL2hpc2lfYWNjX3ZmaW9fcGNpLmNcbkBAIC0xNzI1LDYgKzE3MjUsMTQgQEAgc3RhdGljIGludCBoaXNpX2FjY192ZmlvX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3B1dF92ZGV2O1xuIFxuK1x0LypcbitcdCAqIGhpc2lfYWNjX3ZmaW9fcGNpX21tYXAoKSBjYWxscyBkb3duIHRvXG4rXHQgKiB2ZmlvX3BjaV9jb3JlX21tYXAoKSwgc28gQkFSIG1hcHBpbmdzIGFyZSBzdGlsbFxuK1x0ICogRE1BQlVGLWJhY2tlZC4gIFRoZXkgZG9uJ3QgcmVxdWlyZSBhIHphcCBvbiByZXZva2UsIHNvIG9wdFxuK1x0ICogb3V0OlxuK1x0ICovXG4rXHRoaXNpX2FjY192ZGV2LVx1MDAzZWNvcmVfZGV2aWNlLnphcF9iYXJzX29uX3Jldm9rZSA9IGZhbHNlO1xuK1xuIFx0aGlzaV9hY2NfdmZpb19kZWJ1Z19pbml0KGhpc2lfYWNjX3ZkZXYpO1xuIFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb25maWcuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbmluZGV4IGExMGVkNzMzZjBlM2FmLi5iYzZjY2IyZTEzNWMzYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbisrKyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29uZmlnLmNcbkBAIC01OTAsMTIgKzU5MCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fYmFzaWNfY29uZmlnX3dyaXRlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgaW50IHBvcyxcbiBcdFx0dmlydF9tZW0gPSAhIShsZTE2X3RvX2NwdSgqdmlydF9jbWQpIFx1MDAyNiBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuIFx0XHRuZXdfbWVtID0gISEobmV3X2NtZCBcdTAwMjYgUENJX0NPTU1BTkRfTUVNT1JZKTtcbiBcbi1cdFx0aWYgKCFuZXdfbWVtKSB7XG4tXHRcdFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuLVx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbi1cdFx0fSBlbHNlIHtcbitcdFx0aWYgKCFuZXdfbWVtKVxuK1x0XHRcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XG4rXHRcdGVsc2VcbiBcdFx0XHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuLVx0XHR9XG4gXG4gXHRcdC8qXG4gXHRcdCAqIElmIHRoZSB1c2VyIGlzIHdyaXRpbmcgbWVtL2lvIGVuYWJsZSAobmV3X21lbS9pbykgYW5kIHdlXG5AQCAtNjMxLDcgKzYyOSw3IEBAIHN0YXRpYyBpbnQgdmZpb19iYXNpY19jb25maWdfd3JpdGUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBpbnQgcG9zLFxuIFx0XHQqdmlydF9jbWQgfD0gY3B1X3RvX2xlMTYobmV3X2NtZCBcdTAwMjYgbWFzayk7XG4gXG4gXHRcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4rXHRcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gXHR9XG4gXG5AQCAtNzEyLDE2ICs3MTAsMTQgQEAgc3RhdGljIGludCBfX2luaXQgaW5pdF9wY2lfY2FwX2Jhc2ljX3Blcm0oc3RydWN0IHBlcm1fYml0cyAqcGVybSlcbiBzdGF0aWMgdm9pZCB2ZmlvX2xvY2tfYW5kX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHRcdCAgcGNpX3Bvd2VyX3Qgc3RhdGUpXG4ge1xuLVx0aWYgKHN0YXRlIFx1MDAzZT0gUENJX0QzaG90KSB7XG4tXHRcdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuLVx0fSBlbHNlIHtcbitcdGlmIChzdGF0ZSBcdTAwM2U9IFBDSV9EM2hvdClcbitcdFx0dmZpb19wY2lfbG9ja19yZXZva2VfYmFycyh2ZGV2KTtcbitcdGVsc2VcbiBcdFx0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cdH1cbiBcbiBcdHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZSh2ZGV2LCBzdGF0ZSk7XG4gXHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbitcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIH1cbiBcbkBAIC05MDgsMTEgKzkwNCwxMCBAQCBzdGF0aWMgaW50IHZmaW9fZXhwX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXG4gXHRcdFx0XHRcdFx0IFx1MDAyNmNhcCk7XG4gXG4gXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAoY2FwIFx1MDAyNiBQQ0lfRVhQX0RFVkNBUF9GTFIpKSB7XG4tXHRcdFx0dmZpb19wY2lfemFwX2FuZF9kb3duX3dyaXRlX21lbW9yeV9sb2NrKHZkZXYpO1xuLVx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbitcdFx0XHR2ZmlvX3BjaV9sb2NrX3Jldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHRcdHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cdTAwM2VwZGV2KTtcbiBcdFx0XHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHRcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4rXHRcdFx0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0XHRcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTkzLDExICs5ODgsMTAgQEAgc3RhdGljIGludCB2ZmlvX2FmX2NvbmZpZ193cml0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIGludCBwb3MsXG4gXHRcdFx0XHRcdFx0XHUwMDI2Y2FwKTtcbiBcbiBcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IChjYXAgXHUwMDI2IFBDSV9BRl9DQVBfRkxSKSBcdTAwMjZcdTAwMjYgKGNhcCBcdTAwMjYgUENJX0FGX0NBUF9UUCkpIHtcbi1cdFx0XHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG4tXHRcdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuK1x0XHRcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XG4gXHRcdFx0cGNpX3RyeV9yZXNldF9mdW5jdGlvbih2ZGV2LVx1MDAzZXBkZXYpO1xuIFx0XHRcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHRcdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbitcdFx0XHRcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XG4gXHRcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gXHRcdH1cbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYyBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jXG5pbmRleCAwNTBlNzU0Mjk1MmVkMS4uMDA1OWMxNzZkNjI3MDYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY1xuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmNcbkBAIC0xMiw2ICsxMiw4IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYXBlcnR1cmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RldmljZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2V2ZW50ZmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG5AQCAtMzE5LDggKzMyMSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfcnVudGltZV9wbV9lbnRyeShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHQgKiBUaGUgdmRldiBwb3dlciByZWxhdGVkIGZsYWdzIGFyZSBwcm90ZWN0ZWQgd2l0aCAnbWVtb3J5X2xvY2snXG4gXHQgKiBzZW1hcGhvcmUuXG4gXHQgKi9cbi1cdHZmaW9fcGNpX3phcF9hbmRfZG93bl93cml0ZV9tZW1vcnlfbG9jayh2ZGV2KTtcbi1cdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCB0cnVlKTtcbitcdHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnModmRldik7XG4gXG4gXHRpZiAodmRldi1cdTAwM2VwbV9ydW50aW1lX2VuZ2FnZWQpIHtcbiBcdFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG5AQCAtNDA2LDcgKzQwNyw3IEBAIHN0YXRpYyB2b2lkIHZmaW9fcGNpX3J1bnRpbWVfcG1fZXhpdChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4gXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0X192ZmlvX3BjaV9ydW50aW1lX3BtX2V4aXQodmRldik7XG4gXHRpZiAoX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIGZhbHNlKTtcbitcdFx0dmZpb19wY2lfdW5yZXZva2VfYmFycyh2ZGV2KTtcbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIH1cbiBcbkBAIC0xMjU2LDYgKzEyNTcsOCBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3NldF9pcnFzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHZmaW9fcGNpX3Jldm9rZV9iYXJzKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4rXG4gc3RhdGljIGludCB2ZmlvX3BjaV9pb2N0bF9yZXNldChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHR2b2lkIF9fdXNlciAqYXJnKVxuIHtcbkBAIC0xMjY0LDcgKzEyNjcsNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2lvY3RsX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcbiBcdGlmICghdmRldi1cdTAwM2VyZXNldF93b3JrcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2sodmRldik7XG4rXHRkb3duX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFxuIFx0LypcbiBcdCAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgd2hpbGUgdGhlIHBvd2VyIHN0YXRlIGlzIG5vbi1EMC4gSWZcbkBAIC0xMjc0LDEzICsxMjc3LDE4IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfaW9jdGxfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuIFx0ICogaGF2ZSBOb1NvZnRSc3QtLCB0aGUgcmVzZXQgZnVuY3Rpb24gY2FuIGNhdXNlIHRoZSBQQ0kgY29uZmlnIHNwYWNlXG4gXHQgKiByZXNldCB3aXRob3V0IHJlc3RvcmluZyB0aGUgb3JpZ2luYWwgc3RhdGUgKHNhdmVkIGxvY2FsbHkgaW5cbiBcdCAqICd2ZGV2LVx1MDAzZXBtX3NhdmUnKS5cbitcdCAqXG4rXHQgKiBUaGUgemFwIGlzIGRvbmUgYWZ0ZXIgbWFraW5nIHRoZSBkZXZpY2UgYWNjZXNzaWJsZSBpbiBEMCxcbitcdCAqIGJlY2F1c2UgYSBETUFCVUYgaW1wb3J0ZXIgY291bGQgYWNjZXNzIHRoZSBkZXZpY2UgYXMgcGFydFxuK1x0ICogb2YgaXRzIHJldm9jYXRpb24gY2xlYW51cC5cbiBcdCAqL1xuIFx0dmZpb19wY2lfc2V0X3Bvd2VyX3N0YXRlKHZkZXYsIFBDSV9EMCk7XG4gXG4tXHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XG4rXHR2ZmlvX3BjaV9yZXZva2VfYmFycyh2ZGV2KTtcbitcbiBcdHJldCA9IHBjaV90cnlfcmVzZXRfZnVuY3Rpb24odmRldi1cdTAwM2VwZGV2KTtcbiBcdGlmIChfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpKVxuLVx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuK1x0XHR2ZmlvX3BjaV91bnJldm9rZV9iYXJzKHZkZXYpO1xuIFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuQEAgLTE1NjksNiArMTU3NywxMCBAQCBpbnQgdmZpb19wY2lfY29yZV9pb2N0bF9mZWF0dXJlKHN0cnVjdCB2ZmlvX2RldmljZSAqZGV2aWNlLCB1MzIgZmxhZ3MsXG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfdG9rZW4odmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUY6XG4gXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zih2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XG4rXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0U6XG4rXHRcdHJldHVybiB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuK1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUjpcbitcdFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIodmRldiwgZmxhZ3MsIGFyZywgYXJnc3opO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FTk9UVFk7XG4gXHR9XG5AQCAtMTY0OCwyMCArMTY2MCwzNyBAQCBzc2l6ZV90IHZmaW9fcGNpX2NvcmVfd3JpdGUoc3RydWN0IHZmaW9fZGV2aWNlICpjb3JlX3ZkZXYsIGNvbnN0IGNoYXIgX191c2VyICpidVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh2ZmlvX3BjaV9jb3JlX3dyaXRlKTtcbiBcbi1zdGF0aWMgdm9pZCB2ZmlvX3BjaV96YXBfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4rc3RhdGljIHZvaWQgdmZpb19wY2lfcmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIHtcbi1cdHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2ID0gXHUwMDI2dmRldi1cdTAwM2V2ZGV2O1xuLVx0bG9mZl90IHN0YXJ0ID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX0JBUjBfUkVHSU9OX0lOREVYKTtcbi1cdGxvZmZfdCBlbmQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfUk9NX1JFR0lPTl9JTkRFWCk7XG4tXHRsb2ZmX3QgbGVuID0gZW5kIC0gc3RhcnQ7XG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1x0dmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHZkZXYsIHRydWUpO1xuIFxuLVx0dW5tYXBfbWFwcGluZ19yYW5nZShjb3JlX3ZkZXYtXHUwMDNlaW5vZGUtXHUwMDNlaV9tYXBwaW5nLCBzdGFydCwgbGVuLCB0cnVlKTtcbitcdC8qXG4rXHQgKiBJZiBhIGRyaXZlciBjb3VsZCBwb3NzaWJseSBjcmVhdGUgQkFSIG1hcHBpbmdzIGluIHRoZVxuK1x0ICogdmRldidzIGFkZHJlc3Nfc3BhY2UsIGRvIGFuIGFkZGl0aW9uYWwgemFwIG9uIHJldm9rZS4gIFNlZVxuK1x0ICogdmZpb19wY2lfY29yZV9yZWdpc3Rlcl9kZXZpY2UoKS5cbitcdCAqL1xuK1x0aWYgKHZkZXYtXHUwMDNlemFwX2JhcnNfb25fcmV2b2tlKSB7XG4rXHRcdHN0cnVjdCB2ZmlvX2RldmljZSAqY29yZV92ZGV2ID0gXHUwMDI2dmRldi1cdTAwM2V2ZGV2O1xuK1x0XHRsb2ZmX3Qgc3RhcnQgPSBWRklPX1BDSV9JTkRFWF9UT19PRkZTRVQoVkZJT19QQ0lfQkFSMF9SRUdJT05fSU5ERVgpO1xuK1x0XHRsb2ZmX3QgZW5kID0gVkZJT19QQ0lfSU5ERVhfVE9fT0ZGU0VUKFZGSU9fUENJX1JPTV9SRUdJT05fSU5ERVgpO1xuK1x0XHRsb2ZmX3QgbGVuID0gZW5kIC0gc3RhcnQ7XG4rXG4rXHRcdHVubWFwX21hcHBpbmdfcmFuZ2UoY29yZV92ZGV2LVx1MDAzZWlub2RlLVx1MDAzZWlfbWFwcGluZyxcbitcdFx0XHRcdCAgICBzdGFydCwgbGVuLCB0cnVlKTtcbitcdH1cbiB9XG4gXG4tdm9pZCB2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuK3ZvaWQgdmZpb19wY2lfbG9ja19yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4ge1xuIFx0ZG93bl93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cdHZmaW9fcGNpX3phcF9iYXJzKHZkZXYpO1xuK1x0dmZpb19wY2lfcmV2b2tlX2JhcnModmRldik7XG4rfVxuK1xuK3ZvaWQgdmZpb19wY2lfdW5yZXZva2VfYmFycyhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpXG4re1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbitcdHZmaW9fcGNpX2RtYV9idWZfbW92ZSh2ZGV2LCBmYWxzZSk7XG4gfVxuIFxuIHUxNiB2ZmlvX3BjaV9tZW1vcnlfbG9ja19hbmRfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbkBAIC0xNjgzLDE4ICsxNzEyLDYgQEAgdm9pZCB2ZmlvX3BjaV9tZW1vcnlfdW5sb2NrX2FuZF9yZXN0b3JlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTE2IGNcbiBcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIH1cbiBcbi1zdGF0aWMgdW5zaWduZWQgbG9uZyB2bWFfdG9fcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLXtcbi1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXHRpbnQgaW5kZXggPSB2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDNlXHUwMDNlIChWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKTtcbi1cdHU2NCBwZ29mZjtcbi1cbi1cdHBnb2ZmID0gdm1hLVx1MDAzZXZtX3Bnb2ZmIFx1MDAyNlxuLVx0XHQoKDFVIFx1MDAzY1x1MDAzYyAoVkZJT19QQ0lfT0ZGU0VUX1NISUZUIC0gUEFHRV9TSElGVCkpIC0gMSk7XG4tXG4tXHRyZXR1cm4gKHBjaV9yZXNvdXJjZV9zdGFydCh2ZGV2LVx1MDAzZXBkZXYsIGluZGV4KSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCkgKyBwZ29mZjtcbi19XG4tXG4gdm1fZmF1bHRfdCB2ZmlvX3BjaV92bWZfaW5zZXJ0X3BmbihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgcGZuLFxuQEAgLTE3MjIsMjQgKzE3MzksMTAzIEBAIHN0YXRpYyB2bV9mYXVsdF90IHZmaW9fcGNpX21tYXBfaHVnZV9mYXVsdChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbiBcdFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1mLVx1MDAzZXZtYTtcbi1cdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4tXHR1bnNpZ25lZCBsb25nIGFkZHIgPSB2bWYtXHUwMDNlYWRkcmVzcyBcdTAwMjYgfigoUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyBvcmRlcikgLSAxKTtcbi1cdHVuc2lnbmVkIGxvbmcgcGdvZmYgPSAoYWRkciAtIHZtYS1cdTAwM2V2bV9zdGFydCkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4tXHR1bnNpZ25lZCBsb25nIHBmbiA9IHZtYV90b19wZm4odm1hKSArIHBnb2ZmO1xuLVx0dm1fZmF1bHRfdCByZXQgPSBWTV9GQVVMVF9GQUxMQkFDSztcbi1cbi1cdGlmIChpc19hbGlnbmVkX2Zvcl9vcmRlcih2bWEsIGFkZHIsIHBmbiwgb3JkZXIpKSB7XG4tXHRcdHNjb3BlZF9ndWFyZChyd3NlbV9yZWFkLCBcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKVxuLVx0XHRcdHJldCA9IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHZkZXYsIHZtZiwgcGZuLCBvcmRlcik7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiA9IHZtYS1cdTAwM2V2bV9wcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XG4rXHR1bnNpZ25lZCBsb25nIHBmbiA9IDA7XG4rXHR2bV9mYXVsdF90IHJldCA9IFZNX0ZBVUxUX1NJR0JVUztcbitcbitcdC8qXG4rXHQgKiBUaGUgb25seSB0aGluZyB0aGlzIGNhbiByZWx5IG9uIGlzIHRoYXQgdGhlIERNQUJVRiByZWxhdGluZ1xuK1x0ICogdG8gdGhlIFZNQSdzIHZtX2ZpbGUgZXhpc3RzIChwcml2KS5cbitcdCAqXG4rXHQgKiBBIERNQUJVRiBmb3IgYSBWRklPIGRldmljZSBmZCBtbWFwKCkgaG9sZHMgYSByZWZlcmVuY2UgdG9cbitcdCAqIHRoZSBvcmlnaW5hbCBWRklPIGRldmljZSBmZCwgYnV0IGFuIGV4cGxpY2l0bHktZXhwb3J0ZWRcbitcdCAqIERNQUJVRiBkb2VzIG5vdC4gIFRoZSBvcmlnaW5hbCBmZCBtaWdodCBoYXZlIGNsb3NlZCxcbitcdCAqIG1lYW5pbmcgdGhpcyBmYXVsdCBjYW4gcmFjZSB3aXRoXG4rXHQgKiB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKSwgbWVhbmluZyB0aGUgYnVmZmVyIGNvdWxkIGhhdmVcbitcdCAqIGJlZW4gcmV2b2tlZCAoaW4gd2hpY2ggY2FzZSBwcml2LVx1MDAzZXZkZXYgbWlnaHQgYmUgTlVMTCksIGFuZFxuK1x0ICogdGhlIFZGSU8gZGV2aWNlIHJlZ2lzdHJhdGlvbiBtaWdodCBoYXZlIGJlZW4gZHJvcHBlZC5cbitcdCAqXG4rXHQgKiBXaXRoIHRoZSBnb2FsIG9mIHRha2luZyB2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrIGluIGEgd29ybGQgd2hlcmVcbitcdCAqIHZkZXYgbWlnaHQgbm90IHN0aWxsIGV4aXN0OlxuK1x0ICpcbitcdCAqIDEuIFRha2UgdGhlIHJlc3YgbG9jayBvbiB0aGUgRE1BQlVGOlxuK1x0ICogIC0gSWYgcmFjaW5nIGNsZWFudXAgZ290IGluIGZpcnN0LCB0aGUgYnVmZmVyIGlzIHJldm9rZWQ7XG4rXHQgKiAgICBzdG9wL2V4aXQgaWYgc28uXG4rXHQgKiAgLSBJZiB3ZSBnb3QgaW4gZmlyc3QsIHRoZSBidWZmZXIgaXMgbm90IHJldm9rZWQgc28gdmRldiBpc1xuK1x0ICogICAgbm9uLU5VTEwsIGFjY2Vzc2libGUsIGFuZCBjbGVhbnVwIF9oYXMgbm90IHlldCBwdXQgdGhlXG4rXHQgKiAgICBWRklPIGRldmljZSByZWdpc3RyYXRpb25fLiAgU28sIHRoZSBkZXZpY2UgcmVmY291bnQgbXVzdFxuK1x0ICogICAgYmUgXHUwMDNlMC5cbitcdCAqXG4rXHQgKiAyLiBUYWtlIHZmaW9fZGV2aWNlIHJlZ2lzdHJhdGlvbiAocmVmY291bnQgZ3VhcmFudGVlZCBcdTAwM2UwXG4rXHQgKiAgICBoZXJlYWZ0ZXIpLlxuK1x0ICpcbitcdCAqIDMuIFVubG9jayB0aGUgRE1BQlVGJ3MgcmVzdiBsb2NrOlxuK1x0ICogIC0gQSByYWNpbmcgY2xlYW51cCBjYW4gbm93IGNvbXBsZXRlLlxuK1x0ICogIC0gQnV0LCB0aGUgZGV2aWNlIHJlZmNvdW50IFx1MDAzZTAsIG1lYW5pbmcgdGhlIHZmaW9fZGV2aWNlXG4rXHQgKiAgICAoYW5kIHZmaW9fcGNpZV9jb3JlIGRldmljZSB2ZGV2KSBoYXZlIG5vdCB5ZXQgYmVlblxuK1x0ICogICAgZnJlZWQuICB2ZGV2IGlzIGFjY2Vzc2libGUsIGV2ZW4gaWYgdGhlIERNQUJVRiBoYXMgYmVlblxuK1x0ICogICAgcmV2b2tlZCBvciBjbGVhbnVwIGhhcyBoYXBwZW5lZCwgYmVjYXVzZVxuK1x0ICogICAgdmZpb191bnJlZ2lzdGVyX2dyb3VwX2RldigpIGNhbid0IGNvbXBsZXRlLlxuK1x0ICpcbitcdCAqIDQuIFRha2UgdGhlIHZkZXYtXHUwMDNlbWVtb3J5X2xvY2tcbitcdCAqICAtIEVpdGhlciB0aGUgRE1BQlVGIGlzIHVzYWJsZSwgb3IgaGFzIGJlZW4gY2xlYW5lZCB1cC5cbitcdCAqICAgIFdoaWNoZXZlciwgaXQgY2FuIG5vIGxvbmdlciBjaGFuZ2UgdW5kZXIgdXMuXG4rXHQgKiAgLSBUZXN0IHRoZSBETUFCVUYgcmV2b2NhdGlvbiBzdGF0dXMgYWdhaW46IGlmIGl0IHdhc1xuK1x0ICogICAgcmV2b2tlZCBiZXR3ZWVuIDEgYW5kIDQgcmV0dXJuIGEgU0lHQlVTLiBPdGhlcndpc2UsXG4rXHQgKiAgICByZXR1cm4gYSBQRk4uXG4rXHQgKiAgLSBJdCdzIG5vdCBuZWNlc3NhcnkgdG8gYWxzbyB0YWtlIHRoZSByZXN2IGxvY2ssIGJlY2F1c2VcbitcdCAqICAgIHRoZSBzdGF0dXMvdmRldiBjYW4ndCBjaGFuZ2Ugd2hpbGUgbWVtb3J5X2xvY2sgaXMgaGVsZC5cbitcdCAqXG4rXHQgKiA1LiBVbmxvY2ssIGRvbmUuXG4rXHQgKi9cbitcbitcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgIT0gVkZJT19QQ0lfRE1BQlVGX09LKSB7XG4rXHRcdHByX2RlYnVnX3JhdGVsaW1pdGVkKFwiJXMgVkEgMHglbHgsIHBnb2ZmIDB4JWx4OiBETUFCVUYgcmV2b2tlZC9jbGVhbmVkIHVwXFxuXCIsXG4rXHRcdFx0XHQgICAgIF9fZnVuY19fLCB2bWYtXHUwMDNlYWRkcmVzcywgdm1hLVx1MDAzZXZtX3Bnb2ZmKTtcbitcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRyZXR1cm4gVk1fRkFVTFRfU0lHQlVTO1xuK1x0fVxuK1xuK1x0LyogSWYgdGhlIGJ1ZmZlciBpc24ndCByZXZva2VkLCB2ZGV2IGlzIHZhbGlkICovXG4rXHR2ZGV2ID0gcHJpdi1cdTAwM2V2ZGV2O1xuK1xuK1x0aWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpKSB7XG4rXHRcdC8qXG4rXHRcdCAqIElmIHZkZXYgIT0gTlVMTCAoYWJvdmUpLCB0aGUgcmVnaXN0cmF0aW9uIHNob3VsZFxuK1x0XHQgKiBhbHJlYWR5IGJlIFx1MDAzZTAgYW5kIHNvIHRoaXMgdHJ5X2dldCBzaG91bGQgbmV2ZXJcbitcdFx0ICogZmFpbC5cbitcdFx0ICovXG4rXHRcdGRldl93YXJuKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsIFwiJXM6IFVuZXhwZWN0ZWQgcmVnaXN0cmF0aW9uIGZhaWx1cmVcXG5cIixcbitcdFx0XHQgX19mdW5jX18pO1xuK1x0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXHRcdHJldHVybiBWTV9GQVVMVF9TSUdCVVM7XG4rXHR9XG4rXHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXG4rXHRzY29wZWRfZ3VhcmQocndzZW1fcmVhZCwgXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jaykge1xuK1x0XHQvKiBSZXZvY2F0aW9uIHN0YXR1cyBtdXN0IGJlIHJlLXJlYWQsIHVuZGVyIG1lbW9yeV9sb2NrICovXG4rXHRcdGlmIChwcml2LVx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfT0spIHtcbitcdFx0XHRpbnQgcHJlcyA9IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4ocHJpdiwgdm1hLFxuK1x0XHRcdFx0XHRcdFx0ICAgICB2bWYtXHUwMDNlYWRkcmVzcyxcbitcdFx0XHRcdFx0XHRcdCAgICAgb3JkZXIsIFx1MDAyNnBmbik7XG4rXG4rXHRcdFx0aWYgKHByZXMgPT0gMClcbitcdFx0XHRcdHJldCA9IHZmaW9fcGNpX3ZtZl9pbnNlcnRfcGZuKHZkZXYsIHZtZixcbitcdFx0XHRcdFx0XHRcdCAgICAgIHBmbiwgb3JkZXIpO1xuK1x0XHRcdGVsc2UgaWYgKHByZXMgPT0gLUVBR0FJTilcbitcdFx0XHRcdHJldCA9IFZNX0ZBVUxUX0ZBTExCQUNLO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRkZXZfZGJnX3JhdGVsaW1pdGVkKFx1MDAyNnZkZXYtXHUwMDNlcGRldi1cdTAwM2VkZXYsXG4tXHRcdFx0ICAgXCIlcygsb3JkZXIgPSAlZCkgQkFSICVsZCBwYWdlIG9mZnNldCAweCVseDogMHgleFxcblwiLFxuLVx0XHRcdCAgICBfX2Z1bmNfXywgb3JkZXIsXG4tXHRcdFx0ICAgIHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwM2VcdTAwM2Vcbi1cdFx0XHRcdChWRklPX1BDSV9PRkZTRVRfU0hJRlQgLSBQQUdFX1NISUZUKSxcbi1cdFx0XHQgICAgcGdvZmYsICh1bnNpZ25lZCBpbnQpcmV0KTtcbitcdFx0XHQgICAgXCIlcyhvcmRlciA9ICVkKSBQRk4gMHglbHgsIFZBIDB4JWx4LCBwZ29mZiAweCVseDogMHgleFxcblwiLFxuK1x0XHRcdCAgICBfX2Z1bmNfXywgb3JkZXIsIHBmbiwgdm1mLVx1MDAzZWFkZHJlc3MsXG4rXHRcdFx0ICAgIHZtYS1cdTAwM2V2bV9wZ29mZiwgKHVuc2lnbmVkIGludClyZXQpO1xuIFxuK1x0dmZpb19kZXZpY2VfcHV0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMTc1NSw2ICsxODUxLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgdmZpb19wY2lfbW1hcF9vcHMgPSB7XG4gI2VuZGlmXG4gfTtcbiBcbit2b2lkIHZmaW9fcGNpX3NldF92bWFfb3BzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuK3tcbitcdHZtYS1cdTAwM2V2bV9vcHMgPSBcdTAwMjZ2ZmlvX3BjaV9tbWFwX29wcztcbit9XG4rXG4gaW50IHZmaW9fcGNpX2NvcmVfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2ID1cbkBAIC0xODAzLDcgKzE5MDQsMTIgQEAgaW50IHZmaW9fcGNpX2NvcmVfbW1hcChzdHJ1Y3QgdmZpb19kZXZpY2UgKmNvcmVfdmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gdmRldjtcbitcdHJldCA9IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1Zih2ZGV2LCB2bWEsXG4rXHRcdFx0XHRcdCAgICAgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIGluZGV4KSxcbitcdFx0XHRcdFx0ICAgICByZXFfbGVuLCBpbmRleCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuIFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4gXHR2bWEtXHUwMDNldm1fcGFnZV9wcm90ID0gcGdwcm90X2RlY3J5cHRlZCh2bWEtXHUwMDNldm1fcGFnZV9wcm90KTtcbiBcbkBAIC0yMjIyLDYgKzIzMjgsMTcgQEAgaW50IHZmaW9fcGNpX2NvcmVfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldilcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gb3V0X3ZmO1xuIFxuK1x0LypcbitcdCAqIElmIGEgZHJpdmVyIG92ZXJyaWRlcyAubW1hcCwgaXQgaGFzIHRvIGJlIGFzc3VtZWQgdGhhdCBpdFxuK1x0ICogbWlnaHQgbm90IHVzZSB0aGUgRE1BQlVGLWJhY2tlZCBjb3JlIG1tYXA7IHRoaXMgZmxhZ1xuK1x0ICogZW5hYmxlcyBhIHphcCBhdCByZXZva2UgdGltZS4gIERyaXZlcnMgY2FuIG9wdCBvdXQgYnlcbitcdCAqIGNsZWFyaW5nIHRoaXMgZmxhZyBhZnRlciByZWdpc3RyYXRpb24sIGUuZy4gaWYgdGhlaXIgLm1tYXBcbitcdCAqIG92ZXJyaWRlIGNhbGxzIGRvd24gdG8gdmZpb19wY2lfY29yZV9tbWFwKCkgc28gdGhhdCBtYXBzXG4rXHQgKiBhcmUgRE1BQlVGLWJhY2tlZC5cbitcdCAqL1xuK1x0aWYgKHZkZXYtXHUwMDNldmRldi5vcHMtXHUwMDNlbW1hcCAhPSB2ZmlvX3BjaV9jb3JlX21tYXApXG4rXHRcdHZkZXYtXHUwMDNlemFwX2JhcnNfb25fcmV2b2tlID0gdHJ1ZTtcbitcbiBcdHZmaW9fcGNpX3Byb2JlX3Bvd2VyX3N0YXRlKHZkZXYpO1xuIFxuIFx0LypcbkBAIC0yNDk3LDkgKzI2MTQsMTAgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxuIFx0XHR9XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFRha2UgdGhlIG1lbW9yeSB3cml0ZSBsb2NrIGZvciBlYWNoIGRldmljZSBhbmQgemFwIEJBUlxuLVx0XHQgKiBtYXBwaW5ncyB0byBwcmV2ZW50IHRoZSB1c2VyIGFjY2Vzc2luZyB0aGUgZGV2aWNlIHdoaWxlIGluXG4tXHRcdCAqIHJlc2V0LiAgTG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIGlzIHByb25lIHRvIGRlYWRsb2NrLFxuK1x0XHQgKiBUYWtlIHRoZSBtZW1vcnkgd3JpdGUgbG9jayBmb3IgZWFjaCBkZXZpY2UgYW5kXG4rXHRcdCAqIHphcC9yZXZva2UgQkFSIG1hcHBpbmdzIHRvIHByZXZlbnQgdGhlIHVzZXIgKG9yXG4rXHRcdCAqIHBlZXJzKSBhY2Nlc3NpbmcgdGhlIGRldmljZSB3aGlsZSBpbiByZXNldC5cbitcdFx0ICogTG9ja2luZyBtdWx0aXBsZSBkZXZpY2VzIGlzIHByb25lIHRvIGRlYWRsb2NrLFxuIFx0XHQgKiBydW5hd2F5IGFuZCB1bndpbmQgaWYgd2UgaGl0IGNvbnRlbnRpb24uXG4gXHRcdCAqL1xuIFx0XHRpZiAoIWRvd25fd3JpdGVfdHJ5bG9jayhcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKSkge1xuQEAgLTI1MDcsOCArMjYyNSw3IEBAIHN0YXRpYyBpbnQgdmZpb19wY2lfZGV2X3NldF9ob3RfcmVzZXQoc3RydWN0IHZmaW9fZGV2aWNlX3NldCAqZGV2X3NldCxcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFxuLVx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgdHJ1ZSk7XG4tXHRcdHZmaW9fcGNpX3phcF9iYXJzKHZkZXYpO1xuK1x0XHR2ZmlvX3BjaV9yZXZva2VfYmFycyh2ZGV2KTtcbiBcdH1cbiBcbiBcdGlmICghbGlzdF9lbnRyeV9pc19oZWFkKHZkZXYsXG5AQCAtMjUzOCw3ICsyNjU1LDcgQEAgc3RhdGljIGludCB2ZmlvX3BjaV9kZXZfc2V0X2hvdF9yZXNldChzdHJ1Y3QgdmZpb19kZXZpY2Vfc2V0ICpkZXZfc2V0LFxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tX3JldmVyc2UodmRldiwgXHUwMDI2ZGV2X3NldC1cdTAwM2VkZXZpY2VfbGlzdCxcbiBcdFx0XHRcdFx0IHZkZXYuZGV2X3NldF9saXN0KSB7XG4gXHRcdGlmICh2ZGV2LVx1MDAzZXZkZXYub3Blbl9jb3VudCBcdTAwMjZcdTAwMjYgX192ZmlvX3BjaV9tZW1vcnlfZW5hYmxlZCh2ZGV2KSlcbi1cdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX21vdmUodmRldiwgZmFsc2UpO1xuK1x0XHRcdHZmaW9fcGNpX3VucmV2b2tlX2JhcnModmRldik7XG4gXHRcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5pbmRleCAxYTE3N2NlN2RlNTQ2YS4uMzFmYmFkOTNmODliMWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG4rKysgYi9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jXG5AQCAtNCwyNCArNCwxMyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1idWYtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLXAycGRtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLXJlc3YuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3VhcGkvbGludXgvZG1hLWJ1Zi5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJ2ZmlvX3BjaV9wcml2LmhcIlxuIFxuIE1PRFVMRV9JTVBPUlRfTlMoXCJETUFfQlVGXCIpO1xuIFxuLXN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmIHtcbi1cdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4tXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXY7XG4tXHRzdHJ1Y3QgbGlzdF9oZWFkIGRtYWJ1ZnNfZWxtO1xuLVx0c2l6ZV90IHNpemU7XG4tXHRzdHJ1Y3QgcGh5c192ZWMgKnBoeXNfdmVjO1xuLVx0c3RydWN0IHAycGRtYV9wcm92aWRlciAqcHJvdmlkZXI7XG4tXHR1MzIgbnJfcmFuZ2VzO1xuLVx0c3RydWN0IGtyZWYga3JlZjtcbi1cdHN0cnVjdCBjb21wbGV0aW9uIGNvbXA7XG4tXHR1OCByZXZva2VkIDogMTtcbi19O1xuLVxuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4gc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLFxuIFx0XHRcdFx0ICAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudClcbiB7XG5AQCAtMzAsNyArMTksNyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRpZiAoIWF0dGFjaG1lbnQtXHUwMDNlcGVlcjJwZWVyKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRpZiAocHJpdi1cdTAwM2VyZXZva2VkKVxuK1x0aWYgKHByaXYtXHUwMDNlc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSylcbiBcdFx0cmV0dXJuIC1FTk9ERVY7XG4gXG4gXHRpZiAoIWRtYV9idWZfYXR0YWNoX3Jldm9jYWJsZShhdHRhY2htZW50KSlcbkBAIC0zOSw2ICsyOCw0MyBAQCBzdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4re1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbitcbitcdC8qXG4rXHQgKiBkbWFfYnVmX21tYXBfaW50ZXJuYWwoKSBoYXMgYXNzZXJ0ZWQgdGhhdCB0aGUgVk1BIGlzXG4rXHQgKiBjb250YWluZWQgd2l0aGluIHRoZSBETUFCVUYgc2l6ZSBiZWZvcmUgY2FsbGluZyB0aGlzLlxuK1x0ICpcbitcdCAqIEFsc28sIGlmIHdlIG9ic2VydmUgdGhhdCB0aGUgYnVmZmVyIGlzIHJldm9rZWQgbm93IHRoZW5cbitcdCAqIHJlZnVzZSB0aGUgbW1hcCgpLiAgVGhpcyBpcyBhIGJlbHQtYW5kLWJyYWNlcyBlYXJseSBmYWlsdXJlXG4rXHQgKiB0byBlYXNlIGRlYnVnZ2luZyBhIHJldm9rZWQgYnVmZmVyIGJlaW5nIHVzZWQuICBVc2Vyc3BhY2VcbitcdCAqIG1pZ2h0IGFsc28gcmFjZSBhbiBtbWFwKCkgYWdhaW5zdCBhbiBleHBsaWNpdCByZXZvY2F0aW9uLFxuK1x0ICogb3IgYW4gYWN0aW9uIGRvaW5nIGEgdGVtcG9yYXJ5IHJldm9rZTsgcmFjZSBzY2VuYXJpb3MgYXJlXG4rXHQgKiBzdGlsbCBzYWZlIGJlY2F1c2UgdGhlIGZhdWx0IGhhbmRsZXIgdWx0aW1hdGVseSBwcmV2ZW50c1xuK1x0ICogYWNjZXNzIHRvIGEgcmV2b2tlZCBidWZmZXIgaWYgaXQgaXNuJ3QgY2F1Z2h0IGhlcmUuXG4rXHQgKi9cbitcdGlmIChSRUFEX09OQ0UocHJpdi1cdTAwM2VzdGF0dXMpICE9IFZGSU9fUENJX0RNQUJVRl9PSylcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHRpZiAoKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSA9PSAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGlmIChSRUFEX09OQ0UocHJpdi1cdTAwM2VtZW1hdHRyKSA9PSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQylcbitcdFx0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF93cml0ZWNvbWJpbmUodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4rXHRlbHNlXG4rXHRcdHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS1cdTAwM2V2bV9wYWdlX3Byb3QpO1xuK1x0dm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCA9IHBncHJvdF9kZWNyeXB0ZWQodm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG4rXG4rXHQvKiBTZWUgY29tbWVudHMgaW4gdmZpb19wY2lfY29yZV9tbWFwKCkgcmUgVk1fQUxMT1dfQU5ZX1VOQ0FDSEVELiAqL1xuK1x0dm1fZmxhZ3Nfc2V0KHZtYSwgVk1fQUxMT1dfQU5ZX1VOQ0FDSEVEIHwgVk1fSU8gfCBWTV9QRk5NQVAgfFxuK1x0XHQgICAgIFZNX0RPTlRFWFBBTkQgfCBWTV9ET05URFVNUCk7XG4rXHR2bWEtXHUwMDNldm1fcHJpdmF0ZV9kYXRhID0gcHJpdjtcbitcdHZmaW9fcGNpX3NldF92bWFfb3BzKHZtYSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi9cbitcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUoc3RydWN0IGtyZWYgKmtyZWYpXG4ge1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYgPVxuQEAgLTU2LDcgKzgyLDcgQEAgdmZpb19wY2lfZG1hX2J1Zl9tYXAoc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNobWVudCxcbiBcbiBcdGRtYV9yZXN2X2Fzc2VydF9oZWxkKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuIFxuLVx0aWYgKHByaXYtXHUwMDNlcmV2b2tlZClcbitcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9ERVYpO1xuIFxuIFx0cmV0ID0gZG1hX2J1Zl9waHlzX3ZlY190b19zZ3QoYXR0YWNobWVudCwgcHJpdi1cdTAwM2Vwcm92aWRlcixcbkBAIC05NSwxNyArMTIxLDIwMyBAQCBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3JlbGVhc2Uoc3RydWN0IGRtYV9idWYgKmRtYWJ1ZilcbiBcdFx0dXBfd3JpdGUoXHUwMDI2cHJpdi1cdTAwM2V2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcdFx0dmZpb19kZXZpY2VfcHV0X3JlZ2lzdHJhdGlvbihcdTAwMjZwcml2LVx1MDAzZXZkZXYtXHUwMDNldmRldik7XG4gXHR9XG4rXHRpZiAocHJpdi1cdTAwM2V2ZmlsZSlcbitcdFx0ZnB1dChwcml2LVx1MDAzZXZmaWxlKTtcbiBcdGtmcmVlKHByaXYtXHUwMDNlcGh5c192ZWMpO1xuIFx0a2ZyZWUocHJpdik7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgdmZpb19wY2lfZG1hYnVmX29wcyA9IHtcbisjaWZkZWYgQ09ORklHX1ZGSU9fUENJX0RNQUJVRlxuIFx0LmF0dGFjaCA9IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoLFxuK1x0Lm1tYXAgPSB2ZmlvX3BjaV9kbWFfYnVmX21tYXAsXG4rI2VuZGlmXG4gXHQubWFwX2RtYV9idWYgPSB2ZmlvX3BjaV9kbWFfYnVmX21hcCxcbiBcdC51bm1hcF9kbWFfYnVmID0gdmZpb19wY2lfZG1hX2J1Zl91bm1hcCxcbiBcdC5yZWxlYXNlID0gdmZpb19wY2lfZG1hX2J1Zl9yZWxlYXNlLFxuIH07XG4gXG4raW50IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXG4rXHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBmYXVsdF9hZGRyLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nICpvdXRfcGZuKVxuK3tcbitcdC8qXG4rXHQgKiBHaXZlbiBhIFZNQSAoc3RhcnQsIGVuZCwgcGdvZmZzKSBhbmQgYSBmYXVsdCBhZGRyZXNzLFxuK1x0ICogc2VhcmNoIHRoZSBjb3JyZXNwb25kaW5nIERNQUJVRidzIHBoeXNfdmVjW10gdG8gZmluZCB0aGVcbitcdCAqIHJhbmdlIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcydzIG9mZnNldCBpbnRvIHRoZSBWTUEsIGFuZFxuK1x0ICogaXRzIFBGTi5cbitcdCAqXG4rXHQgKiBUaGUgcGh5c192ZWNbXSByYW5nZXMgcmVwcmVzZW50IGNvbnRpZ3VvdXMgc3BhbnMgb2YgVkFzXG4rXHQgKiB1cHdhcmRzIGZyb20gdGhlIGJ1ZmZlciBvZmZzZXQgMDsgdGhlIGFjdHVhbCBQRk5zIG1pZ2h0IGJlXG4rXHQgKiBpbiBhbnkgb3JkZXIsIG92ZXJsYXAvYWxpYXMsIGV0Yy4gIENhbGN1bGF0ZSBhbiBvZmZzZXQgb2ZcbitcdCAqIHRoZSBkZXNpcmVkIHBhZ2UgZ2l2ZW4gVk1BIHN0YXJ0L3Bnb2ZmIGFuZCBhZGRyZXNzLCB0aGVuXG4rXHQgKiBzZWFyY2ggdXB3YXJkcyBmcm9tIDAgdG8gZmluZCB3aGljaCBzcGFuIGNvbnRhaW5zIGl0LlxuK1x0ICpcbitcdCAqIE9uIHN1Y2Nlc3MsIGEgdmFsaWQgUEZOIGZvciBhIHBhZ2Ugc2l6ZWQgYnkgJ29yZGVyJyBpc1xuK1x0ICogcmV0dXJuZWQgaW50byBvdXRfcGZuLlxuK1x0ICpcbitcdCAqIEZhaWx1cmUgb2NjdXJzIGlmOlxuK1x0ICogLSBBIGh1Z2VwYWdlIHdvdWxkIGNyb3NzIHRoZSBlZGdlIG9mIHRoZSBWTUEsXG4rXHQgKiAtIEEgaHVnZXBhZ2UgaXNuJ3QgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBhIHJhbmdlXG4rXHQgKiAgIChpbmNsdWRpbmcgd2hlcmUgaXQgc3RyYWRkbGVzIHRoZSBib3VuZGFyeSBiZXR3ZWVuXG4rXHQgKiAgIHJhbmdlcyksXG4rXHQgKiAtIFdlIGZpbmQgYSByYW5nZSwgYnV0IHRoZSBmaW5hbCBQRk4gaXNuJ3QgYWxpZ25lZCB0byB0aGVcbitcdCAqICAgcmVxdWVzdGVkIG9yZGVyLlxuK1x0ICpcbitcdCAqIFVwb24gZmFpbHVyZSwgLUVBR0FJTiBpcyByZXR1cm5lZCBhbmQgdGhlIGNhbGxlciBpc1xuK1x0ICogZXhwZWN0ZWQgdG8gdHJ5IGFnYWluIHdpdGggYSBzbWFsbGVyIG9yZGVyLCB3aGljaCB3aWxsXG4rXHQgKiBldmVudHVhbGx5IHN1Y2NlZWQgKG9yZGVyPTAgd2lsbCBhbHdheXMgd29yaykuXG4rXHQgKlxuK1x0ICogSXQncyBzdWJvcHRpbWFsIGlmIERNQUJVRnMgYXJlIGNyZWF0ZWQgd2l0aCBuZWlnaGJvdXJpbmdcbitcdCAqIHJhbmdlcyB0aGF0IGFyZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMsIHNpbmNlIGh1Z2VwYWdlc1xuK1x0ICogY2FuJ3Qgc3RyYWRkbGUgcmFuZ2UgYm91bmRhcmllcy4gIChUaGUgY29uc3RydWN0aW9uIG9mIHRoZVxuK1x0ICogcmFuZ2VzIHNob3VsZCBtZXJnZSB0aGVtIGluIHRoaXMgY2FzZS4pXG4rXHQgKlxuK1x0ICogRmluYWxseSwgdm1hX3Bnb2ZmX2FkanVzdCBpcyB1c2VkIHdpdGggYSBETUFCVUYgY3JlYXRlZCBmb3JcbitcdCAqIGEgVkZJTyBCQVIgbW1hcDogYSBCQVIgbWFwcGVkIHdpdGggdm1fcGdvZmYgXHUwMDNlIDAgY3JlYXRlcyBhXG4rXHQgKiBETUFCVUYgc3VjaCB0aGF0IGJ5dGUgMCBvZiB0aGUgVk1BIGNvcnJlc3BvbmRzIHRvIGJ5dGUgMCBvZlxuK1x0ICogdGhlIERNQUJVRiBhbmQgYnl0ZSAndm1fcGdvZmYgXHUwMDNjXHUwMDNjIFBBR0VfU0hJRlQnIGludG8gdGhlIEJBUi5cbitcdCAqIFRvIGF2b2lkIGRvdWJsZS1vZmZzZXR0aW5nIGluIHRoaXMgc2NlbmFyaW8sIHN1YnRyYWN0aW5nXG4rXHQgKiB2bWFfcGdvZmZfYWRqdXN0IGZyb20gdGhpcyAobm9uLXplcm8pIHZtX3Bnb2ZmIGdlbmVyYXRlc1xuK1x0ICogdGhlIGVmZmVjdGl2ZSBvZmZzZXQuXG4rXHQgKi9cbitcbitcdGNvbnN0IHVuc2lnbmVkIGxvbmcgcGFnZXNpemUgPSBQQUdFX1NJWkUgXHUwMDNjXHUwMDNjIG9yZGVyO1xuK1x0dW5zaWduZWQgbG9uZyB2bWFfb2ZmID0gKCh2bWEtXHUwMDNldm1fcGdvZmYgLSBwcml2LVx1MDAzZXZtYV9wZ29mZl9hZGp1c3QpIFx1MDAzY1x1MDAzY1xuK1x0XHRcdFx0IFBBR0VfU0hJRlQpIFx1MDAyNiBWRklPX1BDSV9PRkZTRVRfTUFTSztcbitcdHVuc2lnbmVkIGxvbmcgcm91bmRlZF9wYWdlX2FkZHIgPSBBTElHTl9ET1dOKGZhdWx0X2FkZHIsIHBhZ2VzaXplKTtcbitcdHVuc2lnbmVkIGxvbmcgcm91bmRlZF9wYWdlX2VuZCA9IHJvdW5kZWRfcGFnZV9hZGRyICsgcGFnZXNpemU7XG4rXHR1bnNpZ25lZCBsb25nIGZhdWx0X29mZnNldDtcbitcdHVuc2lnbmVkIGxvbmcgZmF1bHRfb2Zmc2V0X2VuZDtcbitcdHVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3RhcnRfb2Zmc2V0ID0gMDtcbitcdHVuc2lnbmVkIGludCBpO1xuK1x0aW50IHJldDtcbitcbitcdGlmIChyb3VuZGVkX3BhZ2VfYWRkciBcdTAwM2Mgdm1hLVx1MDAzZXZtX3N0YXJ0IHx8IHJvdW5kZWRfcGFnZV9lbmQgXHUwMDNlIHZtYS1cdTAwM2V2bV9lbmQpIHtcbitcdFx0aWYgKG9yZGVyIFx1MDAzZSAwKVxuK1x0XHRcdHJldHVybiAtRUFHQUlOO1xuK1xuK1x0XHQvKiBBIGZhdWx0IGFkZHJlc3Mgb3V0c2lkZSBvZiB0aGUgVk1BIGlzIGFic3VyZC4gKi9cbitcdFx0ZGV2X3dhcm5fcmF0ZWxpbWl0ZWQoXG4rXHRcdFx0XHUwMDI2cHJpdi1cdTAwM2V2ZGV2LVx1MDAzZXBkZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmF1bHQgYWRkciAweCVseCBvdXRzaWRlIFZNQSAweCVseC0weCVseFxcblwiLFxuK1x0XHRcdGZhdWx0X2FkZHIsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCk7XG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIGZhdWx0X29mZnNldFtfZW5kXSBpcyB0aGUgc3BhbiB3aXRoaW4gdGhlIERNQUJVRlxuK1x0ICogY29ycmVzcG9uZGluZyB0byB0aGUgZmF1bHRpbmcgcGFnZTpcbitcdCAqL1xuK1x0aWYgKHVubGlrZWx5KGNoZWNrX2FkZF9vdmVyZmxvdyhyb3VuZGVkX3BhZ2VfYWRkciAtIHZtYS1cdTAwM2V2bV9zdGFydCxcbitcdFx0XHRcdFx0dm1hX29mZiwgXHUwMDI2ZmF1bHRfb2Zmc2V0KSB8fFxuK1x0XHQgICAgIGNoZWNrX2FkZF9vdmVyZmxvdyhmYXVsdF9vZmZzZXQsIHBhZ2VzaXplLFxuK1x0XHRcdFx0XHRcdTAwMjZmYXVsdF9vZmZzZXRfZW5kKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0LypcbitcdCAqIEl0ZXJhdGUgb3ZlciByYW5nZXMgaW4gdGhlIGJ1ZmZlciwgc3VtbWluZyB0aGVpciBsZW5ndGhzOlxuK1x0ICogcmFuZ2Vfc3RhcnRfb2Zmc2V0IHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgcmFuZ2UncyBzdGFydGluZ1xuK1x0ICogb2Zmc2V0IGluIHRoZSBidWZmZXIgKGZyb20gMCB1cHdhcmRzKS5cbitcdCAqXG4rXHQgKiBBIGZhaWx1cmUgZm9yIG9yZGVyID09IDAgaXMgdW5leHBlY3RlZCwgYW5kIHRyaWdnZXJzIGFcbitcdCAqIGZhdWx0L3dhcm4uXG4rXHQgKi9cbitcdHJldCA9IChvcmRlciA9PSAwKSA/IC1FRkFVTFQgOiAtRUFHQUlOO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2Vucl9yYW5nZXM7IGkrKykge1xuK1x0XHRzaXplX3QgcmFuZ2VfbGVuID0gcHJpdi1cdTAwM2VwaHlzX3ZlY1tpXS5sZW47XG4rXG4rXHRcdC8qIEVhcmx5IGV4aXQgaWYgcmFuZ2Ugc3RhcnRzIGFmdGVyIHRoZSBwYWdlIGVuZCAqL1xuK1x0XHRpZiAoZmF1bHRfb2Zmc2V0X2VuZCBcdTAwM2M9IHJhbmdlX3N0YXJ0X29mZnNldClcbitcdFx0XHRicmVhaztcbitcbitcdFx0aWYgKGZhdWx0X29mZnNldCBcdTAwM2U9IHJhbmdlX3N0YXJ0X29mZnNldCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGZhdWx0X29mZnNldF9lbmQgXHUwMDNjPSByYW5nZV9zdGFydF9vZmZzZXQgKyByYW5nZV9sZW4pIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRoZSBmYXVsdGluZyBwYWdlIGlzIHdob2xseSBjb250YWluZWRcbitcdFx0XHQgKiB3aXRoaW4gdGhlIHNwYW4gcmVwcmVzZW50ZWQgYnkgdGhpcyByYW5nZSxcbitcdFx0XHQgKiBzbyB2YWxpZGF0ZSBQRk4gYWxpZ25tZW50IGZvciB0aGUgb3JkZXIuXG4rXHRcdFx0ICogVGhlIGlmKCkgY29uZGl0aW9uIGVuc3VyZXMgdGhlIHBmblxuK1x0XHRcdCAqIGFyaXRobWV0aWMgd29uJ3Qgb3ZlcmZsb3cuXG4rXHRcdFx0ICovXG4rXHRcdFx0dW5zaWduZWQgbG9uZyBwZm4gPVxuK1x0XHRcdFx0KChmYXVsdF9vZmZzZXQgLSByYW5nZV9zdGFydF9vZmZzZXQpICtcbitcdFx0XHRcdCBwcml2LVx1MDAzZXBoeXNfdmVjW2ldLnBhZGRyKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbitcbitcdFx0XHRpZiAoSVNfQUxJR05FRChwZm4sIDEgXHUwMDNjXHUwMDNjIG9yZGVyKSkge1xuK1x0XHRcdFx0Km91dF9wZm4gPSBwZm47XG4rXHRcdFx0XHRyZXQgPSAwO1xuK1x0XHRcdH1cbitcdFx0XHQvKlxuK1x0XHRcdCAqIEVsc2Ugb3JkZXIgXHUwMDNlIDA7IEVBR0FJTiByZXRyaWVzIHdpdGggc21hbGxlclxuK1x0XHRcdCAqIG9yZGVyXG4rXHRcdFx0ICovXG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0cmFuZ2Vfc3RhcnRfb2Zmc2V0ICs9IHJhbmdlX2xlbjtcbitcdH1cbitcbitcdGlmIChvcmRlciA9PSAwIFx1MDAyNlx1MDAyNiByZXQgIT0gMClcbitcdFx0LypcbitcdFx0ICogVGhlIGFkZHJlc3MgZmVsbCBvdXRzaWRlIG9mIHRoZSBzcGFuIHJlcHJlc2VudGVkIGJ5XG4rXHRcdCAqIHRoZSAoY29uY2F0ZW5hdGVkKSByYW5nZXMuICBBcyBzZXR1cCBvZiBhIG1hcHBpbmdcbitcdFx0ICogZW5zdXJlcyB0aGF0IHRoZSBWTUEgaXMgXHUwMDNjPSB0aGUgdG90YWwgc2l6ZSBvZiB0aGVcbitcdFx0ICogcmFuZ2VzIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4gIElmIGl0IGRvZXMsIHdhcm5cbitcdFx0ICogYW5kIFNJR0JVUy5cbitcdFx0ICovXG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxuK1x0XHRcdFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VwZGV2LVx1MDAzZWRldixcbitcdFx0XHRcIk5vIHJhbmdlIGZvciBhZGRyIDB4JWx4LCBvcmRlciAlZDogVk1BIDB4JWx4LTB4JWx4IHBnb2ZmIDB4JWx4LCAldSByYW5nZXMsIHNpemUgMHglenhcXG5cIixcbitcdFx0XHRmYXVsdF9hZGRyLCBvcmRlciwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLFxuK1x0XHRcdHZtYS1cdTAwM2V2bV9wZ29mZiwgcHJpdi1cdTAwM2Vucl9yYW5nZXMsIHByaXYtXHUwMDNlc2l6ZSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKlxuKyAqIENyZWF0ZSBhIERNQUJVRiBjb3JyZXNwb25kaW5nIHRvIHByaXYsIGFkZCBpdCB0byB2ZGV2LVx1MDAzZWRtYWJ1ZnMgbGlzdFxuKyAqIGZvciB0cmFja2luZyAobWVhbmluZyBjbGVhbnVwIG9yIHJldm9jYXRpb24gd2lsbCB6YXAgaXQpLCBhbmQgdGFrZVxuKyAqIGEgdmZpb19kZXZpY2UgcmVnaXN0cmF0aW9uLlxuKyAqL1xuK3N0YXRpYyBpbnQgdmZpb19wY2lfZG1hYnVmX2V4cG9ydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgIHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2LCB1MzIgZmxhZ3MpXG4re1xuK1x0REVGSU5FX0RNQV9CVUZfRVhQT1JUX0lORk8oZXhwX2luZm8pO1xuK1xuK1x0aWYgKCF2ZmlvX2RldmljZV90cnlfZ2V0X3JlZ2lzdHJhdGlvbihcdTAwMjZ2ZGV2LVx1MDAzZXZkZXYpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGV4cF9pbmZvLm9wcyA9IFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHM7XG4rXHRleHBfaW5mby5zaXplID0gcHJpdi1cdTAwM2VzaXplO1xuK1x0ZXhwX2luZm8uZmxhZ3MgPSBmbGFncztcbitcdGV4cF9pbmZvLnByaXYgPSBwcml2O1xuK1xuK1x0cHJpdi1cdTAwM2VkbWFidWYgPSBkbWFfYnVmX2V4cG9ydChcdTAwMjZleHBfaW5mbyk7XG4rXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlZG1hYnVmKSkge1xuK1x0XHR2ZmlvX2RldmljZV9wdXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldik7XG4rXHRcdHJldHVybiBQVFJfRVJSKHByaXYtXHUwMDNlZG1hYnVmKTtcbitcdH1cbitcbitcdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4rXG4rXHQvKiBkbWFfYnVmX3B1dCgpIG5vdyBmcmVlcyBwcml2ICovXG4rXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWRtYWJ1ZnNfZWxtKTtcbitcdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuK1x0cHJpdi1cdTAwM2VzdGF0dXMgPSBfX3ZmaW9fcGNpX21lbW9yeV9lbmFibGVkKHZkZXYpID8gVkZJT19QQ0lfRE1BQlVGX09LIDpcbitcdFx0VkZJT19QQ0lfRE1BQlVGX1RFTVBfUkVWT0tFRDtcbitcdGxpc3RfYWRkX3RhaWwoXHUwMDI2cHJpdi1cdTAwM2VkbWFidWZzX2VsbSwgXHUwMDI2dmRldi1cdTAwM2VkbWFidWZzKTtcbitcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbitcdHVwX3dyaXRlKFx1MDAyNnZkZXYtXHUwMDNlbWVtb3J5X2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4gLypcbiAgKiBUaGlzIGlzIGEgdGVtcG9yYXJ5IFwicHJpdmF0ZSBpbnRlcmNvbm5lY3RcIiBiZXR3ZWVuIFZGSU8gRE1BQlVGIGFuZCBpb21tdWZkLlxuICAqIEl0IGFsbG93cyB0aGUgdHdvIGNvLW9wZXJhdGluZyBkcml2ZXJzIHRvIGV4Y2hhbmdlIHRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mXG5AQCAtMTI4LDcgKzM0MCw3IEBAIGludCB2ZmlvX3BjaV9kbWFfYnVmX2lvbW11ZmRfbWFwKHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaG1lbnQsXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdHByaXYgPSBhdHRhY2htZW50LVx1MDAzZWRtYWJ1Zi1cdTAwM2Vwcml2O1xuLVx0aWYgKHByaXYtXHUwMDNlcmV2b2tlZClcbitcdGlmIChwcml2LVx1MDAzZXN0YXR1cyAhPSBWRklPX1BDSV9ETUFCVUZfT0spXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0LyogTW9yZSB0aGFuIG9uZSByYW5nZSB0byBpb21tdWZkIHdpbGwgcmVxdWlyZSBwcm9wZXIgRE1BQlVGIHN1cHBvcnQgKi9cbkBAIC0yMjQsNyArNDM2LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIHtcbiBcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYgZ2V0X2RtYV9idWYgPSB7fTtcbiBcdHN0cnVjdCB2ZmlvX3JlZ2lvbl9kbWFfcmFuZ2UgKmRtYV9yYW5nZXM7XG4tXHRERUZJTkVfRE1BX0JVRl9FWFBPUlRfSU5GTyhleHBfaW5mbyk7XG4gXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcbiBcdHNpemVfdCBsZW5ndGg7XG4gXHRpbnQgcmV0O1xuQEAgLTI3NCw2ICs0ODUsNyBAQCBpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4gXHRwcml2LVx1MDAzZXZkZXYgPSB2ZGV2O1xuIFx0cHJpdi1cdTAwM2Vucl9yYW5nZXMgPSBnZXRfZG1hX2J1Zi5ucl9yYW5nZXM7XG4gXHRwcml2LVx1MDAzZXNpemUgPSBsZW5ndGg7XG4rXHRwcml2LVx1MDAzZW1lbWF0dHIgPSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQztcbiBcdHJldCA9IHZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXModmRldiwgXHUwMDI2cHJpdi1cdTAwM2Vwcm92aWRlcixcbiBcdFx0XHRcdFx0ICAgICBnZXRfZG1hX2J1Zi5yZWdpb25faW5kZXgsXG4gXHRcdFx0XHRcdCAgICAgcHJpdi1cdTAwM2VwaHlzX3ZlYywgZG1hX3JhbmdlcyxcbkBAIC0yODQsMzQgKzQ5Niw5IEBAIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbiBcdGtmcmVlKGRtYV9yYW5nZXMpO1xuIFx0ZG1hX3JhbmdlcyA9IE5VTEw7XG4gXG4tXHRpZiAoIXZmaW9fZGV2aWNlX3RyeV9nZXRfcmVnaXN0cmF0aW9uKFx1MDAyNnZkZXYtXHUwMDNldmRldikpIHtcbi1cdFx0cmV0ID0gLUVOT0RFVjtcbitcdHJldCA9IHZmaW9fcGNpX2RtYWJ1Zl9leHBvcnQodmRldiwgcHJpdiwgZ2V0X2RtYV9idWYub3Blbl9mbGFncyk7XG4rXHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycl9mcmVlX3BoeXM7XG4tXHR9XG4tXG4tXHRleHBfaW5mby5vcHMgPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzO1xuLVx0ZXhwX2luZm8uc2l6ZSA9IHByaXYtXHUwMDNlc2l6ZTtcbi1cdGV4cF9pbmZvLmZsYWdzID0gZ2V0X2RtYV9idWYub3Blbl9mbGFncztcbi1cdGV4cF9pbmZvLnByaXYgPSBwcml2O1xuLVxuLVx0cHJpdi1cdTAwM2VkbWFidWYgPSBkbWFfYnVmX2V4cG9ydChcdTAwMjZleHBfaW5mbyk7XG4tXHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlZG1hYnVmKSkge1xuLVx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlZG1hYnVmKTtcbi1cdFx0Z290byBlcnJfZGV2X3B1dDtcbi1cdH1cbi1cbi1cdGtyZWZfaW5pdChcdTAwMjZwcml2LVx1MDAzZWtyZWYpO1xuLVx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNnByaXYtXHUwMDNlY29tcCk7XG4tXG4tXHQvKiBkbWFfYnVmX3B1dCgpIG5vdyBmcmVlcyBwcml2ICovXG4tXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwcml2LVx1MDAzZWRtYWJ1ZnNfZWxtKTtcbi1cdGRvd25fd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4tXHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuLVx0cHJpdi1cdTAwM2VyZXZva2VkID0gIV9fdmZpb19wY2lfbWVtb3J5X2VuYWJsZWQodmRldik7XG4tXHRsaXN0X2FkZF90YWlsKFx1MDAyNnByaXYtXHUwMDNlZG1hYnVmc19lbG0sIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcyk7XG4tXHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4tXHR1cF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbi1cbiBcdC8qXG4gXHQgKiBkbWFfYnVmX2ZkKCkgY29uc3VtZXMgdGhlIHJlZmVyZW5jZSwgd2hlbiB0aGUgZmlsZSBjbG9zZXMgdGhlIGRtYWJ1ZlxuIFx0ICogd2lsbCBiZSByZWxlYXNlZC5cbkBAIC0zMjIsOCArNTA5LDYgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFxuIFx0cmV0dXJuIHJldDtcbiBcbi1lcnJfZGV2X3B1dDpcbi1cdHZmaW9fZGV2aWNlX3B1dF9yZWdpc3RyYXRpb24oXHUwMDI2dmRldi1cdTAwM2V2ZGV2KTtcbiBlcnJfZnJlZV9waHlzOlxuIFx0a2ZyZWUocHJpdi1cdTAwM2VwaHlzX3ZlYyk7XG4gZXJyX2ZyZWVfcHJpdjpcbkBAIC0zMzIsNDcgKzUxNywxNjQgQEAgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0a2ZyZWUoZG1hX3Jhbmdlcyk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbisjZW5kaWYgLyogQ09ORklHX1ZGSU9fUENJX0RNQUJVRiAqL1xuK1xuK2ludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuK1x0XHRcdFx0ICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0XHQgICB1NjQgcGh5c19zdGFydCwgdTY0IHJlcV9sZW4sXG4rXHRcdFx0XHQgICB1bnNpZ25lZCBpbnQgcmVzX2luZGV4KVxuK3tcbitcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuK1x0dW5zaWduZWQgbG9uZyB2bWFfcGdvZmYgPSB2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDI2IChWRklPX1BDSV9PRkZTRVRfTUFTSyBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVCk7XG4rXHRjaGFyICpidWZuYW1lO1xuK1x0aW50IHJldDtcbitcbitcdHByaXYgPSBremFsbG9jX29iaigqcHJpdik7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cHJpdi1cdTAwM2VwaHlzX3ZlYyA9IGt6YWxsb2Nfb2JqKCpwcml2LVx1MDAzZXBoeXNfdmVjKTtcbitcdGlmICghcHJpdi1cdTAwM2VwaHlzX3ZlYykge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9mcmVlX3ByaXY7XG4rXHR9XG4rXG4rXHRidWZuYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsIFwiJXM6JXMvJXhcIixcbitcdFx0XHQgICAgZGV2X25hbWUoXHUwMDI2dmRldi1cdTAwM2V2ZGV2LmRldmljZSksIHBjaV9uYW1lKHZkZXYtXHUwMDNlcGRldiksXG4rXHRcdFx0ICAgIHJlc19pbmRleCk7XG4rXG4rXHRpZiAoIWJ1Zm5hbWUpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byBlcnJfZnJlZV9waHlzO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZSBETUFCVUYgYmVnaW5zIGZyb20gdGhlIG1tYXAoKSdzIEJBUiBvZmZzZXQsIGkuZS4gdGhlXG4rXHQgKiBzdGFydCBvZiB0aGUgVk1BIGNvcnJlc3BvbmRzIHRvIGJ5dGUgMCBvZiB0aGUgRE1BQlVGIGFuZFxuK1x0ICogYnl0ZSAodm1hX3Bnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSBvZiB0aGUgQkFSLlxuK1x0ICpcbitcdCAqIHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oKSByZXZlcnNlcyB0aGlzIG9mZnNldCB1c2luZ1xuK1x0ICogdm1hX3Bnb2ZmX2FkanVzdCwgc28gdGhhdCB1bHRpbWF0ZWx5IGEgZmF1bHQncyBvZmZzZXQgZnJvbVxuK1x0ICogdGhlIHN0YXJ0IG9mIHRoZSBfVk1BXyBoYXMgYSBjb25zaXN0ZW50IHVzYWdlIHdoZXRoZXIgdGhlXG4rXHQgKiBWTUEgb3JpZ2luYXRlcyBmcm9tIGFuIG1tYXAoKSBvZiB0aGUgVkZJTyBkZXZpY2UgaGVyZSBvciBhXG4rXHQgKiBkaXJlY3QgRE1BQlVGIG1tYXAoKS5cbitcdCAqL1xuK1x0cHJpdi1cdTAwM2V2ZGV2ID0gdmRldjtcbitcdHByaXYtXHUwMDNlc2l6ZSA9IHJlcV9sZW47XG4rXHRwcml2LVx1MDAzZW5yX3JhbmdlcyA9IDE7XG4rXHRwcml2LVx1MDAzZXZtYV9wZ29mZl9hZGp1c3QgPSB2bWFfcGdvZmY7XG4rXHRwcml2LVx1MDAzZXByb3ZpZGVyID0gcGNpbV9wMnBkbWFfcHJvdmlkZXIodmRldi1cdTAwM2VwZGV2LCByZXNfaW5kZXgpO1xuK1x0aWYgKCFwcml2LVx1MDAzZXByb3ZpZGVyKSB7XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX2ZyZWVfbmFtZTtcbitcdH1cbitcbitcdHByaXYtXHUwMDNlcGh5c192ZWNbMF0ucGFkZHIgPSBwaHlzX3N0YXJ0ICsgKCh1NjQpdm1hX3Bnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKTtcbitcdHByaXYtXHUwMDNlcGh5c192ZWNbMF0ubGVuID0gcHJpdi1cdTAwM2VzaXplO1xuK1xuK1x0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBPX0NMT0VYRUMgfCBPX1JEV1IpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfZnJlZV9uYW1lO1xuK1xuK1x0LypcbitcdCAqIE93bmVyc2hpcCBvZiB0aGUgRE1BQlVGIGZpbGUgdHJhbnNmZXJzIHRvIHRoZSBWTUEgc28gdGhhdFxuK1x0ICogb3RoZXIgdXNlcnMgY2FuIGxvY2F0ZSB0aGUgRE1BQlVGIHZpYSBhIFZBLiAgT3duZXJzaGlwIG9mXG4rXHQgKiB0aGUgb3JpZ2luYWwgVkZJTyBkZXZpY2UgZmlsZSBiZWluZyBtbWFwKCllZCB0cmFuc2ZlcnMgdG9cbitcdCAqIHByaXYsIGFuZCBpcyBwdXQgd2hlbiB0aGUgRE1BQlVGIGlzIHJlbGVhc2VkLiAgVGhpc1xuK1x0ICogaW50ZW50aW9uYWxseSBkb2VzIG5vdCB1c2UgZ2V0X2ZpbGUoKS92bWFfc2V0X2ZpbGUoKVxuK1x0ICogYmVjYXVzZSB0aGUgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkLCBhbmQgb3duZXJzaGlwXG4rXHQgKiBtb3Zlcy5cbitcdCAqL1xuK1x0cHJpdi1cdTAwM2V2ZmlsZSA9IHZtYS1cdTAwM2V2bV9maWxlO1xuK1x0dm1hLVx1MDAzZXZtX2ZpbGUgPSBwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlO1xuK1x0dm1hLVx1MDAzZXZtX3ByaXZhdGVfZGF0YSA9IHByaXY7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2cHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlbmFtZV9sb2NrKTtcbitcdGtmcmVlKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZW5hbWUpO1xuK1x0cHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlbmFtZSA9IGJ1Zm5hbWU7XG4rXHRzcGluX3VubG9jayhcdTAwMjZwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VuYW1lX2xvY2spO1xuK1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWVfbmFtZTpcbitcdGtmcmVlKGJ1Zm5hbWUpO1xuK2Vycl9mcmVlX3BoeXM6XG4rXHRrZnJlZShwcml2LVx1MDAzZXBoeXNfdmVjKTtcbitlcnJfZnJlZV9wcml2OlxuK1x0a2ZyZWUocHJpdik7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKiBTZXQgdGhlIERNQUJVRidzIHJldm9jYXRpb24gc3RhdHVzIChPSyBvciB0ZW1wb3JhcmlseS9wZXJtYW5lbnRseSByZXZva2VkKSAqL1xuK3N0YXRpYyB2b2lkIHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdixcbitcdFx0XHRcdFx0ZW51bSB2ZmlvX3BjaV9kbWFfYnVmX3N0YXR1cyBuZXdfc3RhdHVzKVxuK3tcbitcdGJvb2wgd2FzX3Jldm9rZWQ7XG4rXG4rXHRsb2NrZGVwX2Fzc2VydF9oZWxkX3dyaXRlKFx1MDAyNnByaXYtXHUwMDNldmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VzdGF0dXMgPT0gVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCB8fFxuK1x0ICAgIHByaXYtXHUwMDNlc3RhdHVzID09IG5ld19zdGF0dXMpXG4rXHRcdHJldHVybjtcbitcbitcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4rXHR3YXNfcmV2b2tlZCA9IChwcml2LVx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfVEVNUF9SRVZPS0VEKTtcbitcbitcdGlmIChuZXdfc3RhdHVzICE9IFZGSU9fUENJX0RNQUJVRl9PSykge1xuK1x0XHRwcml2LVx1MDAzZXN0YXR1cyA9IG5ld19zdGF0dXM7IC8qIFRlbXAgb3IgcGVybWFuZW50bHkgcmV2b2tlZCAqL1xuK1xuK1x0XHRpZiAod2FzX3Jldm9rZWQpIHtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFRFTVBfUkVWT0tFRCBpcyBiZWluZyB1cGdyYWRlZCB0b1xuK1x0XHRcdCAqIFBFUk1fUkVWT0tFRC4gIFRoZSBidWZmZXIgaXMgYWxyZWFkeSBnb25lLFxuK1x0XHRcdCAqIGRvbid0IHdhaXQgb24gaXQgYWdhaW4uXG4rXHRcdFx0ICovXG4rXHRcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRkbWFfYnVmX2ludmFsaWRhdGVfbWFwcGluZ3MocHJpdi1cdTAwM2VkbWFidWYpO1xuK1x0XHRkbWFfcmVzdl93YWl0X3RpbWVvdXQocHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdixcbitcdFx0XHRcdCAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSxcbitcdFx0XHRcdCAgICAgIE1BWF9TQ0hFRFVMRV9USU1FT1VUKTtcbitcdFx0ZG1hX3Jlc3ZfdW5sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YpO1xuK1x0XHRrcmVmX3B1dChcdTAwMjZwcml2LVx1MDAzZWtyZWYsIHZmaW9fcGNpX2RtYV9idWZfZG9uZSk7XG4rXHRcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2Vjb21wKTtcbitcdFx0dW5tYXBfbWFwcGluZ19yYW5nZShwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlLVx1MDAzZWZfbWFwcGluZyxcbitcdFx0XHRcdCAgICAwLCBwcml2LVx1MDAzZXNpemUsIHRydWUpO1xuK1x0XHQvKlxuK1x0XHQgKiBSZS1hcm0gdGhlIHJlZ2lzdGVyZWQga3JlZiByZWZlcmVuY2UgYW5kIHRoZVxuK1x0XHQgKiBjb21wbGV0aW9uIHNvIHRoZSBwb3N0LXJldm9rZSBzdGF0ZSBtYXRjaGVzIHRoZVxuK1x0XHQgKiBwb3N0LWNyZWF0aW9uIHN0YXRlLiAgQW4gdW4tcmV2b2tlIGZvbGxvd2VkIGJ5IGFcbitcdFx0ICogbmV3IG1hcHBpbmcgbmVlZHMgdGhlIGtyZWYgdG8gYmUgbm9uLXplcm8gYmVmb3JlXG4rXHRcdCAqIGtyZWZfZ2V0KCksIGFuZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKVxuK1x0XHQgKiBkZWxlZ2F0ZXMgaXRzIGRyYWluIGJhY2sgdGhyb3VnaCB0aGlzIHJldm9rZVxuK1x0XHQgKiBwYXRoIG9uIGEgcG9zc2libHktYWxyZWFkeS1yZXZva2VkIGRtYS1idWYuXG4rXHRcdCAqL1xuK1x0XHRrcmVmX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmKTtcbitcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2cHJpdi1cdTAwM2Vjb21wKTtcbitcdH0gZWxzZSB7XG4rXHRcdHByaXYtXHUwMDNlc3RhdHVzID0gVkZJT19QQ0lfRE1BQlVGX09LO1xuK1x0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4rXHR9XG4rfVxuIFxuIHZvaWQgdmZpb19wY2lfZG1hX2J1Zl9tb3ZlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgYm9vbCByZXZva2VkKVxuIHtcbiBcdHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICpwcml2O1xuIFx0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnRtcDtcbiBcbitcdC8qXG4rXHQgKiBIb2xkaW5nIG1lbW9yeV9sb2NrIGVuc3VyZXMgYSByYWNpbmcgVk1BIGZhdWx0IG9ic2VydmVzXG4rXHQgKiBwcml2LVx1MDAzZXN0YXR1cyBwcm9wZXJseS5cbitcdCAqL1xuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZF93cml0ZShcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKTtcbiBcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwcml2LCB0bXAsIFx1MDAyNnZkZXYtXHUwMDNlZG1hYnVmcywgZG1hYnVmc19lbG0pIHtcbiBcdFx0aWYgKCFnZXRfZmlsZV9hY3RpdmUoXHUwMDI2cHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlZmlsZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChwcml2LVx1MDAzZXJldm9rZWQgIT0gcmV2b2tlZCkge1xuLVx0XHRcdGRtYV9yZXN2X2xvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdiwgTlVMTCk7XG4tXHRcdFx0aWYgKHJldm9rZWQpXG4tXHRcdFx0XHRwcml2LVx1MDAzZXJldm9rZWQgPSB0cnVlO1xuLVx0XHRcdGRtYV9idWZfaW52YWxpZGF0ZV9tYXBwaW5ncyhwcml2LVx1MDAzZWRtYWJ1Zik7XG4tXHRcdFx0ZG1hX3Jlc3Zfd2FpdF90aW1lb3V0KHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsXG4tXHRcdFx0XHRcdCAgICAgIERNQV9SRVNWX1VTQUdFX0JPT0tLRUVQLCBmYWxzZSxcbi1cdFx0XHRcdFx0ICAgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpO1xuLVx0XHRcdGRtYV9yZXN2X3VubG9jayhwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VyZXN2KTtcbi1cdFx0XHRpZiAocmV2b2tlZCkge1xuLVx0XHRcdFx0a3JlZl9wdXQoXHUwMDI2cHJpdi1cdTAwM2VrcmVmLCB2ZmlvX3BjaV9kbWFfYnVmX2RvbmUpO1xuLVx0XHRcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuLVx0XHRcdFx0Lypcbi1cdFx0XHRcdCAqIFJlLWFybSB0aGUgcmVnaXN0ZXJlZCBrcmVmIHJlZmVyZW5jZSBhbmQgdGhlXG4tXHRcdFx0XHQgKiBjb21wbGV0aW9uIHNvIHRoZSBwb3N0LXJldm9rZSBzdGF0ZSBtYXRjaGVzIHRoZVxuLVx0XHRcdFx0ICogcG9zdC1jcmVhdGlvbiBzdGF0ZS4gIEFuIHVuLXJldm9rZSBmb2xsb3dlZCBieSBhXG4tXHRcdFx0XHQgKiBuZXcgbWFwcGluZyBuZWVkcyB0aGUga3JlZiB0byBiZSBub24temVybyBiZWZvcmVcbi1cdFx0XHRcdCAqIGtyZWZfZ2V0KCksIGFuZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoKVxuLVx0XHRcdFx0ICogZGVsZWdhdGVzIGl0cyBkcmFpbiBiYWNrIHRocm91Z2ggdGhpcyByZXZva2Vcbi1cdFx0XHRcdCAqIHBhdGggb24gYSBwb3NzaWJseS1hbHJlYWR5LXJldm9rZWQgZG1hLWJ1Zi5cbi1cdFx0XHRcdCAqL1xuLVx0XHRcdFx0a3JlZl9pbml0KFx1MDAyNnByaXYtXHUwMDNla3JlZik7XG4tXHRcdFx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZwcml2LVx1MDAzZWNvbXApO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHRkbWFfcmVzdl9sb2NrKHByaXYtXHUwMDNlZG1hYnVmLVx1MDAzZXJlc3YsIE5VTEwpO1xuLVx0XHRcdFx0cHJpdi1cdTAwM2VyZXZva2VkID0gZmFsc2U7XG4tXHRcdFx0XHRkbWFfcmVzdl91bmxvY2socHJpdi1cdTAwM2VkbWFidWYtXHUwMDNlcmVzdik7XG4tXHRcdFx0fVxuLVx0XHR9XG4rXHRcdHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1cyhwcml2LCByZXZva2VkID9cbitcdFx0XHRcdFx0ICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOlxuK1x0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX09LKTtcbiBcdFx0ZnB1dChwcml2LVx1MDAzZWRtYWJ1Zi1cdTAwM2VmaWxlKTtcbiBcdH1cbiB9XG5AQCAtNDA0LDMgKzcwNiwxMTcgQEAgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuIFx0fVxuIFx0dXBfd3JpdGUoXHUwMDI2dmRldi1cdTAwM2VtZW1vcnlfbG9jayk7XG4gfVxuK1xuKyNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4raW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcbitcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4rXHRzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgZGJfcmV2b2tlO1xuK1x0c3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXY7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0aW50IHJldDtcbitcbitcdGlmICghdmRldi1cdTAwM2VwY2lfb3BzIHx8ICF2ZGV2LVx1MDAzZXBjaV9vcHMtXHUwMDNlZ2V0X2RtYWJ1Zl9waHlzKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRyZXQgPSB2ZmlvX2NoZWNrX2ZlYXR1cmUoZmxhZ3MsIGFyZ3N6LFxuK1x0XHRcdFx0IFZGSU9fREVWSUNFX0ZFQVRVUkVfU0VULFxuK1x0XHRcdFx0IHNpemVvZihkYl9yZXZva2UpKTtcbitcdGlmIChyZXQgIT0gMSlcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkYl9yZXZva2UsIGFyZywgc2l6ZW9mKGRiX3Jldm9rZSkpKVxuK1x0XHRyZXR1cm4gLUVGQVVMVDtcbitcbitcdGRtYWJ1ZiA9IGRtYV9idWZfZ2V0KGRiX3Jldm9rZS5kbWFidWZfZmQpO1xuK1x0aWYgKElTX0VSUihkbWFidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuK1xuK1x0cHJpdiA9IGRtYWJ1Zi1cdTAwM2Vwcml2O1xuK1x0LypcbitcdCAqIFNhbml0eS1jaGVjayB0aGUgRE1BQlVGIGlzIHJlYWxseSBhIHZmaW9fcGNpX2RtYV9idWYgX2FuZF9cbitcdCAqIHJlbGF0ZXMgdG8gdGhlIFZGSU8gZGV2aWNlIGl0IHdhcyBwcm92aWRlZCB3aXRoLlxuK1x0ICpcbitcdCAqIElmIHRoZSBETUFCVUYgcmVsYXRlcyB0byB0aGlzIHZkZXYgdGhlbiBwcml2LVx1MDAzZXZkZXYgaXNcbitcdCAqIHN0YWJsZSBiZWNhdXNlIHRoaXMgb3BlbiBmZCBwcmV2ZW50cyBjbGVhbnVwLlxuK1x0ICpcbitcdCAqIElmIGl0IHJlbGF0ZXMgdG8gYSBkaWZmZXJlbnQgdmRldiwgcmVhZGluZyBwcml2LVx1MDAzZXZkZXYgbWlnaHRcbitcdCAqIHJhY2Ugd2l0aCBhIGNvbmN1cnJlbnQgY2xlYW51cCBvbiB0aGF0IGRldmljZS4gIEJ1dCBpZiBzbyxcbitcdCAqIGl0IHBvaW50cyB0byBhIG5vbi1tYXRjaGluZyB2ZGV2IG9yIE5VTEwgYW5kIGlzIHVudXNhYmxlXG4rXHQgKiBlaXRoZXIgd2F5LlxuK1x0ICovXG4rXHRpZiAoZG1hYnVmLVx1MDAzZW9wcyAhPSBcdTAwMjZ2ZmlvX3BjaV9kbWFidWZfb3BzIHx8XG4rXHQgICAgUkVBRF9PTkNFKHByaXYtXHUwMDNldmRldikgIT0gdmRldikge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dF9wdXRfYnVmO1xuK1x0fVxuK1xuK1x0c2NvcGVkX2d1YXJkKHJ3c2VtX3dyaXRlLCBcdTAwMjZ2ZGV2LVx1MDAzZW1lbW9yeV9sb2NrKSB7XG4rXHRcdGlmIChwcml2LVx1MDAzZXN0YXR1cyA9PSBWRklPX1BDSV9ETUFCVUZfUEVSTV9SRVZPS0VEKSB7XG4rXHRcdFx0cmV0ID0gLUVCQURGRDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdixcbitcdFx0XHRcdFx0XHQgICAgVkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCk7XG4rXHRcdFx0cmV0ID0gMDtcbitcdFx0fVxuK1x0fVxuK1xuK291dF9wdXRfYnVmOlxuK1x0ZG1hX2J1Zl9wdXQoZG1hYnVmKTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyKFxuK1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4rXHRzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIgX191c2VyICphcmcsXG4rXHRzaXplX3QgYXJnc3opXG4re1xuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIGRiX2F0dHI7XG4rXHRzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdjtcbitcdHN0cnVjdCBkbWFfYnVmICpkbWFidWY7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCF2ZGV2LVx1MDAzZXBjaV9vcHMgfHwgIXZkZXYtXHUwMDNlcGNpX29wcy1cdTAwM2VnZXRfZG1hYnVmX3BoeXMpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IHZmaW9fY2hlY2tfZmVhdHVyZShmbGFncywgYXJnc3osXG4rXHRcdFx0XHQgVkZJT19ERVZJQ0VfRkVBVFVSRV9TRVQsXG4rXHRcdFx0XHQgc2l6ZW9mKGRiX2F0dHIpKTtcbitcdGlmIChyZXQgIT0gMSlcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdGlmIChjb3B5X2Zyb21fdXNlcihcdTAwMjZkYl9hdHRyLCBhcmcsIHNpemVvZihkYl9hdHRyKSkpXG4rXHRcdHJldHVybiAtRUZBVUxUO1xuK1xuK1x0ZG1hYnVmID0gZG1hX2J1Zl9nZXQoZGJfYXR0ci5kbWFidWZfZmQpO1xuK1x0aWYgKElTX0VSUihkbWFidWYpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihkbWFidWYpO1xuK1xuK1x0LyogVmVyaWZ5IERNQUJVRjogc2VlIGNvbW1lbnRzIGluIHZmaW9fcGNpX2RtYV9idWZfcmV2b2tlKCkgKi9cbitcdHByaXYgPSBkbWFidWYtXHUwMDNlcHJpdjtcbitcdGlmIChkbWFidWYtXHUwMDNlb3BzICE9IFx1MDAyNnZmaW9fcGNpX2RtYWJ1Zl9vcHMgfHxcbitcdCAgICBSRUFEX09OQ0UocHJpdi1cdTAwM2V2ZGV2KSAhPSB2ZGV2KSB7XG4rXHRcdHJldCA9IC1FTk9ERVY7XG4rXHRcdGdvdG8gb3V0X3B1dF9idWY7XG4rXHR9XG4rXG4rXHRzd2l0Y2ggKGRiX2F0dHIubWVtYXR0cikge1xuK1x0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9OQzpcbitcdGNhc2UgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfV0M6XG4rXHRcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VtZW1hdHRyLCBkYl9hdHRyLm1lbWF0dHIpO1xuK1x0XHRyZXQgPSAwO1xuK1x0XHRicmVhaztcbitcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IC1FTk9FTlQ7XG4rXHR9XG4rXG4rb3V0X3B1dF9idWY6XG4rXHRkbWFfYnVmX3B1dChkbWFidWYpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rI2VuZGlmIC8qIENPTkZJR19WRklPX1BDSV9ETUFCVUYgKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaCBiL2RyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oXG5pbmRleCBmY2E5ZDBkZmFjOTBmOC4uYjNjNzJkZjAwMmM0NDggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaFxuKysrIGIvZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmhcbkBAIC0yMyw2ICsyMywyOCBAQCBzdHJ1Y3QgdmZpb19wY2lfaW9ldmVudGZkIHtcbiBcdGJvb2xcdFx0XHR0ZXN0X21lbTtcbiB9O1xuIFxuK2VudW0gdmZpb19wY2lfZG1hX2J1Zl9zdGF0dXMge1xuK1x0VkZJT19QQ0lfRE1BQlVGX09LID0gMCxcbitcdFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgPSAxLFxuK1x0VkZJT19QQ0lfRE1BQlVGX1BFUk1fUkVWT0tFRCA9IDIsXG4rfTtcbitcbitzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiB7XG4rXHRzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmO1xuK1x0c3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2O1xuK1x0c3RydWN0IGxpc3RfaGVhZCBkbWFidWZzX2VsbTtcbitcdHNpemVfdCBzaXplO1xuK1x0c3RydWN0IHBoeXNfdmVjICpwaHlzX3ZlYztcbitcdHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyO1xuK1x0c3RydWN0IGZpbGUgKnZmaWxlO1xuK1x0dTMyIG5yX3JhbmdlcztcbitcdHN0cnVjdCBrcmVmIGtyZWY7XG4rXHRzdHJ1Y3QgY29tcGxldGlvbiBjb21wO1xuK1x0dW5zaWduZWQgbG9uZyB2bWFfcGdvZmZfYWRqdXN0O1xuK1x0dTMyIG1lbWF0dHI7XG4rXHRlbnVtIHZmaW9fcGNpX2RtYV9idWZfc3RhdHVzIHN0YXR1cztcbit9O1xuK1xuIGJvb2wgdmZpb19wY2lfaW50eF9tYXNrKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gdm9pZCB2ZmlvX3BjaV9pbnR4X3VubWFzayhzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIFxuQEAgLTY4LDcgKzkwLDggQEAgdm9pZCB2ZmlvX2NvbmZpZ19mcmVlKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4gaW50IHZmaW9fcGNpX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0ICAgICBwY2lfcG93ZXJfdCBzdGF0ZSk7XG4gXG4tdm9pZCB2ZmlvX3BjaV96YXBfYW5kX2Rvd25fd3JpdGVfbWVtb3J5X2xvY2soc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbit2b2lkIHZmaW9fcGNpX2xvY2tfcmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbit2b2lkIHZmaW9fcGNpX3VucmV2b2tlX2JhcnMoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KTtcbiB1MTYgdmZpb19wY2lfbWVtb3J5X2xvY2tfYW5kX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYpO1xuIHZvaWQgdmZpb19wY2lfbWVtb3J5X3VubG9ja19hbmRfcmVzdG9yZShzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4gXHRcdFx0XHRcdHUxNiBjbWQpO1xuQEAgLTExNCwxMiArMTM3LDMxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRyZXR1cm4gKHBkZXYtXHUwMDNlY2xhc3MgXHUwMDNlXHUwMDNlIDgpID09IFBDSV9DTEFTU19ESVNQTEFZX1ZHQTtcbiB9XG4gXG4raW50IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnZwZG1hYnVmLFxuK1x0XHRcdCAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbitcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsXG4rXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqb3V0X3Bmbik7XG4raW50IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXG4rXHRcdFx0XHQgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCAgIHU2NCBwaHlzX3N0YXJ0LCB1NjQgcmVxX2xlbixcbitcdFx0XHRcdCAgIHVuc2lnbmVkIGludCByZXNfaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4rdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuK3ZvaWQgdmZpb19wY2lfc2V0X3ZtYV9vcHMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xuK1xuICNpZmRlZiBDT05GSUdfVkZJT19QQ0lfRE1BQlVGXG4gaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuIFx0XHRcdFx0ICBzdHJ1Y3QgdmZpb19kZXZpY2VfZmVhdHVyZV9kbWFfYnVmIF9fdXNlciAqYXJnLFxuIFx0XHRcdFx0ICBzaXplX3QgYXJnc3opO1xuLXZvaWQgdmZpb19wY2lfZG1hX2J1Zl9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldik7XG4tdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpO1xuK2ludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXG4rXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlIF9fdXNlciAqYXJnLFxuK1x0c2l6ZV90IGFyZ3N6KTtcbitpbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0cihcbitcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyIF9fdXNlciAqYXJnLFxuK1x0c2l6ZV90IGFyZ3N6KTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgaW50XG4gdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG5AQCAtMTI4LDEyICsxNzAsMjEgQEAgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCB1MzIgZmxhZ3MsXG4ge1xuIFx0cmV0dXJuIC1FTk9UVFk7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcbitcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxuK1x0c3RydWN0IHZmaW9fZGV2aWNlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UgX191c2VyICphcmcsXG4rXHRzaXplX3QgYXJnc3opXG4ge1xuK1x0cmV0dXJuIC1FTk9UVFk7XG4gfVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxuLVx0XHRcdFx0XHQgYm9vbCByZXZva2VkKVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHIoXG4rXHRzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcbitcdHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciBfX3VzZXIgKmFyZyxcbitcdHNpemVfdCBhcmdzeilcbiB7XG4rXHRyZXR1cm4gLUVOT1RUWTtcbiB9XG4gI2VuZGlmXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1wMnBkbWEuaFxuaW5kZXggODczZGUyMGEyMjQ3NTkuLjRjNDJhN2IyZWU4NTU4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wY2ktcDJwZG1hLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLXAycGRtYS5oXG5AQCAtNjcsOSArNjcsMjIgQEAgZW51bSBwY2lfcDJwZG1hX21hcF90eXBlIHtcbiBcdFBDSV9QMlBETUFfTUFQX1RIUlVfSE9TVF9CUklER0UsXG4gfTtcbiBcbi0jaWZkZWYgQ09ORklHX1BDSV9QMlBETUFcbisjaWZkZWYgQ09ORklHX1BDSV9QMlBETUFfQ09SRVxuIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTtcbiBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhcik7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuK3tcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rc3RhdGljIGlubGluZSBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbitcdFx0XHRcdFx0XHRcdCAgIGludCBiYXIpXG4re1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuKyNlbmRpZlxuK1xuKyNpZmRlZiBDT05GSUdfUENJX1AyUERNQVxuIGludCBwY2lfcDJwZG1hX2FkZF9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IGJhciwgc2l6ZV90IHNpemUsXG4gXHRcdHU2NCBvZmZzZXQpO1xuIGludCBwY2lfcDJwZG1hX2Rpc3RhbmNlX21hbnkoc3RydWN0IHBjaV9kZXYgKnByb3ZpZGVyLCBzdHJ1Y3QgZGV2aWNlICoqY2xpZW50cyxcbkBAIC04OSwxNSArMTAyLDYgQEAgc3NpemVfdCBwY2lfcDJwZG1hX2VuYWJsZV9zaG93KGNoYXIgKnBhZ2UsIHN0cnVjdCBwY2lfZGV2ICpwMnBfZGV2LFxuIGVudW0gcGNpX3AycGRtYV9tYXBfdHlwZSBwY2lfcDJwZG1hX21hcF90eXBlKHN0cnVjdCBwMnBkbWFfcHJvdmlkZXIgKnByb3ZpZGVyLFxuIFx0XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2UgKmRldik7XG4gI2Vsc2UgLyogQ09ORklHX1BDSV9QMlBETUEgKi9cbi1zdGF0aWMgaW5saW5lIGludCBwY2ltX3AycGRtYV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLXtcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbi19XG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgcDJwZG1hX3Byb3ZpZGVyICpwY2ltX3AycGRtYV9wcm92aWRlcihzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi1cdFx0XHRcdFx0XHRcdCAgIGludCBiYXIpXG4te1xuLVx0cmV0dXJuIE5VTEw7XG4tfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBjaV9wMnBkbWFfYWRkX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgYmFyLFxuIFx0XHRzaXplX3Qgc2l6ZSwgdTY0IG9mZnNldClcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmhcbmluZGV4IDJjNDQ1NDU4M2MxMTViLi41MzFhZWMzNTU2ODZiMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGNpLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmhcbkBAIC01NTcsNyArNTU3LDcgQEAgc3RydWN0IHBjaV9kZXYge1xuIFx0dTE2XHRcdHBhc2lkX2NhcDtcdC8qIFBBU0lEIENhcGFiaWxpdHkgb2Zmc2V0ICovXG4gXHR1MTZcdFx0cGFzaWRfZmVhdHVyZXM7XG4gI2VuZGlmXG4tI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BXG4rI2lmZGVmIENPTkZJR19QQ0lfUDJQRE1BX0NPUkVcbiBcdHN0cnVjdCBwY2lfcDJwZG1hIF9fcmN1ICpwMnBkbWE7XG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19QQ0lfRE9FXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L3ZmaW9fcGNpX2NvcmUuaFxuaW5kZXggODkxNjViNzY5ZTVjMTYuLmEyZjU4NmU0ZmNkOGQ0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC92ZmlvX3BjaV9jb3JlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvdmZpb19wY2lfY29yZS5oXG5AQCAtMTI3LDYgKzEyNyw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSB7XG4gXHRib29sXHRcdFx0bmVlZHNfcG1fcmVzdG9yZToxO1xuIFx0Ym9vbFx0XHRcdHBtX2ludHhfbWFza2VkOjE7XG4gXHRib29sXHRcdFx0cG1fcnVudGltZV9lbmdhZ2VkOjE7XG4rXHRib29sXHRcdFx0emFwX2JhcnNfb25fcmV2b2tlOjE7XG4gXHRzdHJ1Y3QgcGNpX3NhdmVkX3N0YXRlXHQqcGNpX3NhdmVkX3N0YXRlO1xuIFx0c3RydWN0IHBjaV9zYXZlZF9zdGF0ZVx0KnBtX3NhdmU7XG4gXHRpbnRcdFx0XHRpb2V2ZW50ZmRzX25yO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC92ZmlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5pbmRleCA1ZGU2MThhM2E1ZWVlZS4uYWIzMGI4OTM5OWQwMzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvdmZpby5oXG5AQCAtMTUzNCw2ICsxNTM0LDUzIEBAIHN0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWYge1xuICAqL1xuICNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9NSUdfUFJFQ09QWV9JTkZPdjIgIDEyXG4gXG4rLyoqXG4rICogR2l2ZW4gYSBkbWFfYnVmIGZkIHByZXZpb3VzbHkgY3JlYXRlZCBieVxuKyAqIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRiwgYSBTRVQgb2YgdGhpcyBmZWF0dXJlIHJlcXVlc3RzIHRoYXRcbisgKiBhY2Nlc3MgdG8gdGhlIGNvcnJlc3BvbmRpbmcgRE1BQlVGIGlzIGltbWVkaWF0ZWx5IGFuZCBwZXJtYW5lbnRseVxuKyAqIHJldm9rZWQuICBPbiBzdWNjZXNzZnVsIHJldHVybiwgdGhlIGJ1ZmZlciBpcyBub3QgYWNjZXNzaWJsZVxuKyAqIHRocm91Z2ggYW55IG1tYXAoKSBvciBkbWEtYnVmIGltcG9ydC4gIFRoZSBidWZmZXIgaXMgcGVybWFuZW50bHlcbisgKiBkaXNhYmxlZCwgYW5kIFZGSU8gcmVmdXNlcyBhbGwgbWFwLCBtbWFwLCBhdHRhY2gsIGV0Yy4gcmVxdWVzdHMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgLTEgYW5kIGVycm5vIGlzIHNldCBvbiBmYWlsdXJlOlxuKyAqXG4rICogIEVCQURGLCBFSU5WQUw6IGRtYWJ1Zl9mZCBpcyBub3QgYSBETUFCVUYgZmQuXG4rICogIEVOT0RFVjogVGhlIGRtYWJ1Zl9mZCBkb2VzIG5vdCBtYXRjaCB0aGlzIFZGSU8gZGV2aWNlLlxuKyAqICBFQkFERkQ6IFRoZSBETUFCVUYgaXMgYWxyZWFkeSByZXZva2VkLlxuKyAqL1xuKyNkZWZpbmUgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX1JFVk9LRSAxM1xuK1xuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlIHtcbitcdF9fczMyXHRkbWFidWZfZmQ7XG4rfTtcbitcbisvKipcbisgKiBHaXZlbiBhIGRtYV9idWYgZmQgcHJldmlvdXNseSBjcmVhdGVkIGJ5XG4rICogVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGLCBTRVQgdGhlIG1lbW9yeSBhdHRyaWJ1dGUgdGhhdCB3aWxsIGJlXG4rICogdXNlZCBieSBmdXR1cmUgbW1hcCgpcyBvZiB0aGF0IGZkLiAgU0VUdGluZyBhIG5ldyBhdHRyaWJ1dGUgZG9lc1xuKyAqIG5vdCBhZmZlY3QgZXhpc3RpbmcgVk1Bcy5cbisgKlxuKyAqIFRoZSBkZWZhdWx0LCBpZiBubyBwcmV2aW91cyBTRVQgaGFzIGJlZW4gcGVyZm9ybWVkLCBpcyBOQy5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCAtMSBhbmQgZXJybm8gaXMgc2V0IG9uIGZhaWx1cmU6XG4rICpcbisgKiAgRUJBREYsIEVJTlZBTDogZG1hYnVmX2ZkIGlzIG5vdCBhIERNQUJVRiBmZC5cbisgKiAgRU5PREVWOiBUaGUgZG1hYnVmX2ZkIGRvZXMgbm90IG1hdGNoIHRoaXMgVkZJTyBkZXZpY2UuXG4rICogIEVOT0VOVDogVGhlIGdpdmVuIG1lbWF0dHIgaXMgbm90IHN1cHBvcnRlZC5cbisgKi9cbisjZGVmaW5lIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSIDE0XG4rXG4rLyogVmFsaWQgbWVtb3J5IGF0dHJpYnV0ZXMgZm9yIHRoZSBtZW1hdHRyIGZpZWxkICovXG4rZW51bSB2ZmlvX2RldmljZV9kbWFfYnVmX21lbWF0dHIge1xuK1x0VkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJfTkMgPSAwLCAvKiBwZ3Byb3Rfbm9uY2FjaGVkICovXG4rXHRWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfTUVNQVRUUl9XQyA9IDEsIC8qIHBncHJvdF93cml0ZWNvbWJpbmUgKi9cbit9O1xuK1xuK3N0cnVjdCB2ZmlvX2RldmljZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0ciB7XG4rXHRfX3MzMlx0ZG1hYnVmX2ZkO1xuK1x0X191MzJcdG1lbWF0dHI7XG4rfTtcbitcbiAvKiAtLS0tLS0tLSBBUEkgZm9yIFR5cGUxIFZGSU8gSU9NTVUgLS0tLS0tLS0gKi9cbiBcbiAvKipcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjA2Ljc4ODgyMDA5M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNDI3NTA4MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IFZGSU8gUENJIERNQS1CVUYgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBzZXJpZXMsIGFuZCBpdCdzIG1ha2luZyBzb21lIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gaG93IFZGSU8gaW50ZXJhY3RzIHdpdGggUENJIFAyUERNQSBhbmQgRE1BLUJVRi4gIFRoZSBnb2FsLCBpdCBzZWVtcywgaXMgdG8gaW1wcm92ZSBETUEtQlVGIGludGVncmF0aW9uIHdpdGhpbiB0aGUgVkZJTyBmcmFtZXdvcmsuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBjb2RlIGlzIHRvdWNoZWQgYW5kIGlmIGl04oCZcyBpbnRlcmVzdGluZyBlbm91Z2ggZm9yIGZ1enppbmcuXG5cbkZpcnN0bHksIHRoZXkndmUgaW50cm9kdWNlZCBgQ09ORklHX1BDSV9QMlBETUFfQ09SRWAsIGFuZCBjcnVjaWFsbHksIHRoZXkndmUgc2hpZnRlZCBgQ09ORklHX1ZGSU9fUENJX0RNQUJVRmAgdG8gbm93ICpkZXBlbmQqIG9uIGBQQ0lfUDJQRE1BYCByYXRoZXIgdGhhbiByZXF1aXJpbmcgKmJvdGgqIGBQQ0lfUDJQRE1BYCBhbmQgYERNQV9TSEFSRURfQlVGRkVSYCwgd2hpY2ggaXMgc29tZXRoaW5nIHRvIGltbWVkaWF0ZWx5IG5vdGUuIFRoZXkndmUgYWxzbyBhZGRlZCB0aGVzZSBuZXcgVkZJTyBmZWF0dXJlczogYFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0VgIGFuZCBgVkZJT19ERVZJQ0VfRkVBVFVSRV9ETUFfQlVGX01FTUFUVFJgLiBUaGlzIGlzIGludGVyZXN0aW5nOyB0aGVzZSBmZWF0dXJlcyBzdWdnZXN0IGVuaGFuY2VkIGNvbnRyb2wgYW5kIG1hbmFnZW1lbnQgb3ZlciBETUEtQlVGcy5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyBhcmUgaGFwcGVuaW5nIGluIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuY2AsIGBkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jYCwgYW5kIGBkcml2ZXJzL3BjaS9wMnBkbWFfY29yZS5jYC4gV2Uga25vdyBWRklPIGl0c2VsZiBpcyByZWFjaGFibGUgYW5kIGlzIGFjdGl2ZWx5IGZ1enplZCBieSBzeXprYWxsZXIsIHNvIHRoYXTigJlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBjYW4gc2VlIHRoZSBuZXcgZmVhdHVyZXMgYXJlIGhhbmRsZWQgaW4gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAsIHdoaWNoIGFsc28gaGFuZGxlcyBvdGhlciBpb2N0bHMgdGhhdCBtYXkgYmUgZ29vZCB0byBmdXp6LlxuXG5Ob3csIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gV2UgbmVlZDogYENPTkZJR19WRklPX1BDSV9DT1JFYCwgYENPTkZJR19WRklPX1BDSWAsIGBDT05GSUdfUENJX1AyUERNQWAsIGFuZCBgQ09ORklHX1ZGSU9fUENJX0RNQUJVRmAuICBgVkZJT19QQ0lfRE1BQlVGYCBpcyBzcGVjaWZpY2FsbHkgY29uZGl0aW9uYWwgaW4gdGhlIEtjb25maWcgd2l0aDogYGRlZl9ib29sIHkgaWYgUENJX1AyUERNQWAsIGFuZCBkZXBlbmRlbnQgb24gYFZGSU9fUENJX0NPUkVgLCBzbyB0byBlbmFibGUgZXZlcnl0aGluZyBpdCBzZWVtcyB3ZSBuZWVkIGBWRklPX1BDSWAgYXMgdGhhdCBicmluZ3MgaW4gYFZGSU9fUENJX0NPUkVgIHdoaWNoIHRoZW4gcHVsbHMgaW4gYFZGSU9fUENJX0RNQUJVRmAuIGBQQ0lfUDJQRE1BYCwgaW4gdGhlIFBDSSBLY29uZmlnLCByZXF1aXJlcyBgWk9ORV9ERVZJQ0VgLiBTbywgdGhlIG1pbmltYWwgc2V0IGlzOiBgUENJX1AyUERNQWAsIGBaT05FX0RFVklDRWAsIGFuZCBgVkZJT19QQ0lgLlxuXG5UaGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gYXJlIHRoZSBuZXcgZmVhdHVyZSBoYW5kbGVyczogYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZWAsIGB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9tZW1hdHRyYCwgYW5kIHRoZSBjaGFuZ2VzIHRvIGB2ZmlvX3BjaV9jb3JlX21tYXBgLiAgQWxzbywgdGhlIG5ldyBmdW5jdGlvbiBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYCBhbmQgc3VwcG9ydGluZyBmdW5jdGlvbnMgbGlrZSBgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbmAsIGB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0YCwgYHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZmAsIGFuZCBgdmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzYC4gIFRoZXnigJlyZSBhbGwgY2FsbGVkIGZyb20gYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAgYW5kIHNlZW0gbGlrZSBwcmltZSB0YXJnZXRzIGZvciBmdXJ0aGVyIGV4YW1pbmF0aW9uIGFuZCBmdXp6aW5nLiBOb3csIGxldOKAmXMgZ2V0IHRoZSB0ZXN0aW5nIHRvb2xzIHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTc5MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjE3LjIxNjMzMzA2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDkwMjU4ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYz0xNTYyPWludCB2ZmlvX3BjaV9jb3JlX2lvY3RsX2ZlYXR1cmUoc3RydWN0IHZmaW9fZGV2aWNlICpkZXZpY2UsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jLTE1ODAtXFx0Y2FzZSBWRklPX0RFVklDRV9GRUFUVVJFX0RNQV9CVUZfUkVWT0tFOlxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE1ODE6XFx0XFx0cmV0dXJuIHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZSh2ZGV2LCBmbGFncywgYXJnLCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTU4Mi1cXHRjYXNlIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSOlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz02ODI9dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy03MTAtI2lmZGVmIENPTkZJR19WRklPX1BDSV9ETUFCVUZcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjcxMTppbnQgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlKFxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNzEyLVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTU0PWludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsIHUzMiBmbGFncyxcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oLTE1Ni1cXHRcXHRcXHRcXHQgIHNpemVfdCBhcmdzeik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTU3OmludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTU4LVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTY3PXZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTczLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfcHJpdi5oOjE3NDpzdGF0aWMgaW5saW5lIGludCB2ZmlvX3BjaV9jb3JlX2ZlYXR1cmVfZG1hX2J1Zl9yZXZva2UoXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2LmgtMTc1LVxcdHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDoyMC4zMDY2MDE3NTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk1Njk5NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFZGSU8gUENJIExhbmRzY2FwZTogRmVhdHVyZSBBY2Nlc3MgYW5kIERNQSBCdWZmZXIgTWFwcGluZyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IFZGSU8tUENJJ3MgaW5uZXIgd29ya2luZ3MuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiBob3cgZmVhdHVyZXMgYXJlIGFjY2Vzc2VkLiBJdCBzZWVtcyBsaWtlIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IGZvciBtYW5hZ2luZyB0aG9zZSBmZWF0dXJlcyBpcyB0aGUgYHZmaW9fcGNpX2NvcmVfaW9jdGxfZmVhdHVyZWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgaW50ZXJhY3Rpb24gZmxvdyBwcmVjaXNlbHkuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIHNldCBhbmQgZ2V0IHRoaW5ncyB1c2luZyB0aGlzIG1ldGhvZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHdlIGFyZSBhYmxlIHRvIGRvIHRoYXQsIGFuZCBpbiB3aGF0IHNpdHVhdGlvbnMuXG5cbkJleW9uZCB0aGF0LCBJJ20gdGhpbmtpbmcgYWJvdXQgRE1BIGJ1ZmZlciBtYXBwaW5nLCBhbmQgaG93IHRoYXQgcmVsYXRlcyB0byB0aGUgZmVhdHVyZXMgb2YgdGhlIGRldmljZSB0aGF0IHdlIGFyZSBhY2Nlc3NpbmcuIEknbSBnb2luZyB0byB0dXJuIG15IGF0dGVudGlvbiB0byBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYC4gSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIGludGVyYWN0aW9uIG9mIHRoYXQgZnVuY3Rpb25hbGl0eS4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBpbnRvIHdoYXQgZGF0YSBzdHJ1Y3R1cmVzIHN1cHBvcnQgdGhlIGludGVyYWN0aW9uLiBIb3cgZG9lcyB0aGlzIGZpdCBpbnRvIHRoZSBsYXJnZXIgcGljdHVyZSBvZiBzZWN1cmUgRE1BIGFjY2VzcyB3aXRoaW4gVkZJTz8gQXJlIHRoZXJlIHNwZWNpZmljIHByb3RlY3Rpb25zIGludm9sdmVkLCBhbmQgaWYgc28sIGhvdyBkbyB0aGV5IHdvcms/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgd29ya2luZyBhcyB0aGV5IHNob3VsZCBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgwODcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDoyMy41MDIzMDQxMjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY2NjI2MDkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9kbWFfYnVmX21tYXBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0xND1zdGF0aWMgaW50IHZmaW9fcGNpX2RtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTMwLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6MzE6c3RhdGljIGludCB2ZmlvX3BjaV9kbWFfYnVmX21tYXAoc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0zMi17XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTEzMD1zdGF0aWMgY29uc3Qgc3RydWN0IGRtYV9idWZfb3BzIHZmaW9fcGNpX2RtYWJ1Zl9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTEzMi1cXHQuYXR0YWNoID0gdmZpb19wY2lfZG1hX2J1Zl9hdHRhY2gsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoxMzM6XFx0Lm1tYXAgPSB2ZmlvX3BjaV9kbWFfYnVmX21tYXAsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xMzQtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjI2LjE2ODU3MTgyN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMzU2MjczMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5gKipcblxuT2theSwgSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbmAuIEl0J3MgYmVlbiBhIHdoaWxlIHNpbmNlIEkgbGFzdCBkdWcgaW50byB0aGUgRE1BIGJ1ZmZlciBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgVkZJTy1QQ0kgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gd29ya3MsIHBhcnRpY3VsYXJseSBpdHMgcm9sZSBpbiBsb2NhdGluZyB0aGUgcGh5c2ljYWwgZnJhbWUgbnVtYmVyIChQRk4pIGFzc29jaWF0ZWQgd2l0aCBhIERNQSBidWZmZXIuIFRoaXMgaXMga2V5IGZvciBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9mIG1lbW9yeSBtYXBwaW5nIG9yIERNQSBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIGRyaXZlci4gS25vd2luZyBpdHMgYmVoYXZpb3Igd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaG93IFZGSU8gaW50ZXJhY3RzIHdpdGggRE1BIGFuZCBwYWdlIGFsbG9jYXRpb24uIEkgbmVlZCB0byByZW1lbWJlciB0aGUgYXJndW1lbnRzLCB0aGUgcmV0dXJuIHZhbHVlcywgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIGFjY29tcGxpc2guIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQncyB1c2VkIHdpdGhpbiB0aGUgd2lkZXIgVkZJTy1QQ0kgZnJhbWV3b3JrLiBXaGF0IG90aGVyIFZGSU8gZnVuY3Rpb25zIGRvZXMgaXQgZGVwZW5kIG9uIG9yIGNvb3JkaW5hdGUgd2l0aD8gVGltZSB0byBicmVhayBvdXQgdGhlIGNvZGUgYW5kIHRoZSBjb21taXQgbG9ncy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg3NDksIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDoyOS40MDQyMDQzNTRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyNDQwNzk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jPTE3Mzg9c3RhdGljIHZtX2ZhdWx0X3QgdmZpb19wY2lfbW1hcF9odWdlX2ZhdWx0KHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9jb3JlLmMtMTgyMC1cXHRcXHRpZiAocHJpdi1cXHUwMDNlc3RhdHVzID09IFZGSU9fUENJX0RNQUJVRl9PSykge1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfY29yZS5jOjE4MjE6XFx0XFx0XFx0aW50IHByZXMgPSB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHByaXYsIHZtYSxcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2NvcmUuYy0xODIyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdm1mLVxcdTAwM2VhZGRyZXNzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz0xMzA9c3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfYnVmX29wcyB2ZmlvX3BjaV9kbWFidWZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xMzktXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzoxNDA6aW50IHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm4oc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0xNDEtXFx0XFx0XFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTUyMj1pbnQgdmZpb19wY2lfY29yZV9tbWFwX3ByZXBfZG1hYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNTU1LVxcdCAqXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzo1NTY6XFx0ICogdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbigpIHJldmVyc2VzIHRoaXMgb2Zmc2V0IHVzaW5nXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy01NTctXFx0ICogdm1hX3Bnb2ZmX2FkanVzdCwgc28gdGhhdCB1bHRpbWF0ZWx5IGEgZmF1bHQncyBvZmZzZXQgZnJvbVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg9MTM1PXN0YXRpYyBpbmxpbmUgYm9vbCB2ZmlvX3BjaV9pc192Z2Eoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xMzktXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9wcml2Lmg6MTQwOmludCB2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuKHN0cnVjdCB2ZmlvX3BjaV9kbWFfYnVmICp2cGRtYWJ1ZixcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX3ByaXYuaC0xNDEtXFx0XFx0XFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDAwOjIwOjMxLjcyODYyMTYzNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5MTM0OTg2NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTXkgbWluZCdzIGF1dG9tYXRpY2FsbHkganVtcGluZyB0byBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAuIFRoaXMgZnVuY3Rpb24sIG1vcmUgdGhhbiBsaWtlbHksIGlzIHRoZSBsaW5jaHBpbiB3ZSdyZSBnb2luZyB0byBiZSBmb2N1c2luZyBvbi4gSXQncyB0aGUgcG9pbnQgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZywgdGhlIHBsYWNlIHdoZXJlIHdlIHRyYW5zaXRpb24gZGF0YSwgYW5kIGl0IGlzIGdvaW5nIHRvIHNldCB1cCB3aGVyZSBhbGwgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSB3aWxsIGJlIGhhbmRsZWQuIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgbnVhbmNlcyBvZiBETUEtQlVGIGV4cG9ydCB3aXRoaW4gdGhlIFZGSU8gY29udGV4dC4gV2hhdCBhcmUgdGhlIGtleSBjb25zaWRlcmF0aW9ucz8gTWVtb3J5IG1hcHBpbmdzLCBhY2Nlc3MgcGVybWlzc2lvbnMsIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIOKAkyB0aG9zZSBhcmUgdGhlIHR5cGVzIG9mIHRoaW5ncyBJJ20gbWVudGFsbHkgcGFyc2luZyBhcyBJIGdvLiBMZXQncyBzZWUgaG93IHRoZXkndmUgaGFuZGxlZCB0aGF0LCBhbmQgaG93IGl0IGlzIGFsbCBwbHVtYmVkLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHRoaXMgZXhwb3J0LiBMZXQncyBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZXkndmUgZG9uZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk3MjAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDozNC42NDIxMjQxODJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNTU0Nzg1ODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfZG1hYnVmX2V4cG9ydFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jPTE0MD1pbnQgdmZpb19wY2lfZG1hX2J1Zl9maW5kX3BmbihzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdixcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtMjg0LSAqL1xcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM6Mjg1OnN0YXRpYyBpbnQgdmZpb19wY2lfZG1hYnVmX2V4cG9ydChzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy0yODYtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgdmZpb19wY2lfZG1hX2J1ZiAqcHJpdiwgdTMyIGZsYWdzKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz00MzM9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmKHN0cnVjdCB2ZmlvX3BjaV9jb3JlX2RldmljZSAqdmRldiwgdTMyIGZsYWdzLFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy00OTgtXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzo0OTk6XFx0cmV0ID0gdmZpb19wY2lfZG1hYnVmX2V4cG9ydCh2ZGV2LCBwcml2LCBnZXRfZG1hX2J1Zi5vcGVuX2ZsYWdzKTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTUwMC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz01MjI9aW50IHZmaW9fcGNpX2NvcmVfbW1hcF9wcmVwX2RtYWJ1ZihzdHJ1Y3QgdmZpb19wY2lfY29yZV9kZXZpY2UgKnZkZXYsXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTU3NC1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjU3NTpcXHRyZXQgPSB2ZmlvX3BjaV9kbWFidWZfZXhwb3J0KHZkZXYsIHByaXYsIE9fQ0xPRVhFQyB8IE9fUkRXUik7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy01NzYtXFx0aWYgKHJldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMDA6MjA6MzYuOTk3NjE1MTg1WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzM2MTg1ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIGB2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXNgLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGZvciBtYW5hZ2luZyBETUEgYnVmZmVyIHN0YXR1cyB3aXRoaW4gdGhlIFZGSU8tUENJIGZyYW1ld29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgaXQncyBpbnRlcmFjdGluZyB3aXRoIHRoZSBETUEgYnVmZmVyIGl0c2VsZiwgYW5kIHdoYXQgaW1wbGljYXRpb25zIGl0IGhhcyBmb3IgdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBNeSBwcmltYXJ5IGNvbmNlcm4gaXMgYWx3YXlzIHBlcmZvcm1hbmNlIGFuZCBzZWN1cml0eTsgaG93IGlzIHRoaXMgaGFuZGxlZCBoZXJlPyBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gbWVtb3J5IGJhcnJpZXJzLCBjYWNoZSBjb2hlcmVuY3ksIGFuZCB0aGUgcG90ZW50aWFsIGZvciByYWNlIGNvbmRpdGlvbnMg4oCTIHRoaXMgYXJlYSBpcyBub3RvcmlvdXNseSB0cmlja3kuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMsIGVzcGVjaWFsbHkgdGhlIG9uZXMgcmVsYXRlZCB0byBzZXR0aW5nIGZsYWdzIG9yIHVwZGF0aW5nIHN0YXRlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgcm9idXN0LCBlc3BlY2lhbGx5IHdpdGggcmVnYXJkIHRvIHRoZSB2YXJpb3VzIHBvc3NpYmxlIGd1ZXN0IE9TIGJlaGF2aW9ycyBhbmQgcG90ZW50aWFsIG1hbGljaW91cyBhdHRlbXB0cyBhdCBhY2Nlc3NpbmcgZGF0YSB0aGV5IHNob3VsZG4ndC4gTGV0J3Mgc2VlIGhvdyB0aGV5IGRlYWwgd2l0aCB0aGUgYnVmZmVyIHN0YXR1cyBhbmQgaG93IHRoZXkgZG8gZXJyb3IgaGFuZGxpbmcsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA1MjMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDo0MC4xNzEyMzczMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MDE5MzkwMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmM9NTIyPWludCB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWYoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LFxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy02MDgtLyogU2V0IHRoZSBETUFCVUYncyByZXZvY2F0aW9uIHN0YXR1cyAoT0sgb3IgdGVtcG9yYXJpbHkvcGVybWFuZW50bHkgcmV2b2tlZCkgKi9cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjYwOTpzdGF0aWMgdm9pZCB2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMoc3RydWN0IHZmaW9fcGNpX2RtYV9idWYgKnByaXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy02MTAtXFx0XFx0XFx0XFx0XFx0ZW51bSB2ZmlvX3BjaV9kbWFfYnVmX3N0YXR1cyBuZXdfc3RhdHVzKVxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz02NjE9dm9pZCB2ZmlvX3BjaV9kbWFfYnVmX21vdmUoc3RydWN0IHZmaW9fcGNpX2NvcmVfZGV2aWNlICp2ZGV2LCBib29sIHJldm9rZWQpXFxuLS1cXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jLTY3NC1cXHRcXHRcXHRjb250aW51ZTtcXG5kcml2ZXJzL3ZmaW8vcGNpL3ZmaW9fcGNpX2RtYWJ1Zi5jOjY3NTpcXHRcXHR2ZmlvX3BjaV9kbWFfYnVmX3NldF9zdGF0dXMocHJpdiwgcmV2b2tlZCA/XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy02NzYtXFx0XFx0XFx0XFx0XFx0ICAgIFZGSU9fUENJX0RNQUJVRl9URU1QX1JFVk9LRUQgOlxcbi0tXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYz03MTE9aW50IHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZShcXG4tLVxcbmRyaXZlcnMvdmZpby9wY2kvdmZpb19wY2lfZG1hYnVmLmMtNzU5LVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYzo3NjA6XFx0XFx0XFx0dmZpb19wY2lfZG1hX2J1Zl9zZXRfc3RhdHVzKHByaXYsXFxuZHJpdmVycy92ZmlvL3BjaS92ZmlvX3BjaV9kbWFidWYuYy03NjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFZGSU9fUENJX0RNQUJVRl9QRVJNX1JFVk9LRUQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDo0Mi44NzMxODIxODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzUxNDk4MTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBWRklPIFBDSSBETUEtQlVGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHNvbWUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIFZGSU8gUENJIERNQS1CVUYgc3VwcG9ydC4gV2UncmUgdGFsa2luZyBuZXcgaW9jdGxzIGFuZCBtbWFwIGhhbmRsaW5nIGhlcmUsIHdoaWNoIG1lYW5zIGl0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSB0byBhZGQgdGhhdCB0byB0aGUgZnV6emluZyBxdWV1ZS5cblxuTm93LCBmb3IgdGhlIGltcG9ydGFudCBzeW1ib2xzIHRvIGZvY3VzIG9uOiBgdmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfcmV2b2tlYCwgYHZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX21lbWF0dHJgLCBgdmZpb19wY2lfZG1hX2J1Zl9tbWFwYCwgYHZmaW9fcGNpX2RtYV9idWZfZmluZF9wZm5gLCBgdmZpb19wY2lfZG1hYnVmX2V4cG9ydGAsIGB2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWZgLCBhbmQgYHZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c2AuIFRoZXNlIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0byBleGFtaW5lIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5OZXh0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSBgVkZJT19QQ0lgLCBgUENJX1AyUERNQWAsIGFuZCBgWk9ORV9ERVZJQ0VgLiBIbW0sIGxldCdzIGp1c3QgY29uZmlybSB0aGF0IGBaT05FX0RFVklDRWAgaXMgaW5kZWVkIGEgaGFyZCByZXF1aXJlbWVudC4gQWgsIHllcywgYFBDSV9QMlBETUFgIGRlcGVuZHMgb24gYFpPTkVfREVWSUNFYCwgc28gd2UgYWJzb2x1dGVseSBuZWVkIHRvIGhhdmUgdGhhdCBlbmFibGVkLiBHb29kLCBkb3VibGUtY2hlY2tlZC5cblxuTm93LCBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGp1c3QgYFZGSU9fUENJYCBpcyBzdWZmaWNpZW50LCBvciBpZiBgVkZJT19QQ0lfQ09SRWAgaXMgYWxzbyBuZWNlc3NhcnkuIEV4Y2VsbGVudCwgYFZGSU9fUENJYCBzZWxlY3RzIGBWRklPX1BDSV9DT1JFYCwgc28gdGhhdCBzaW1wbGlmaWVzIHRoaW5ncy4gV2UncmUgZ29vZCB3aXRoIGp1c3QgZW5hYmxpbmcgYFZGSU9fUENJYC5cblxuTGV0J3Mgc2VlLCB3aGF0IGFib3V0IGBWRklPX1BDSV9ETUFCVUZgPyBJcyB0aGF0IGEgc2VwYXJhdGUgY29uZmlnIG9wdGlvbj8gWWVzLCBpdCBpcyEgV2FpdC4uLiBpdCdzIGEgYGRlZl9ib29sIHkgaWYgUENJX1AyUERNQWAuIFNvLCBpdCdzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBpZiBgUENJX1AyUERNQWAgaXMgZW5hYmxlZC4gT2theSwgdGhhdCdzIGdvb2QgdG8ga25vdy4gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBlbmFibGluZyB0aGF0IGV4cGxpY2l0bHkuXG5cbkxldCBtZSBzZWUsIGFyZSB0aGVyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWd1cmF0aW9ucyB0byBrZWVwIGFuIGV5ZSBvbj8gYFBDSV9QMlBETUFfQ09SRWAgbG9va3MgcmVsZXZhbnQsIGJ1dCBpdCdzIHNlbGVjdGVkIGJ5IGJvdGggYFBDSV9QMlBETUFgIGFuZCBgVkZJT19QQ0lfQ09SRWAuIFNpbmNlIHdlIGFscmVhZHkga25vdyB0aGF0IHRoZXNlIGNvbmZpZ3MgYXJlIGFscmVhZHkgYWN0aXZhdGVkLCBpdCdzIGVuYWJsZWQgYXV0b21hdGljYWxseS4gR29vZC5cblxuQWxyaWdodCwgd2l0aCBhbGwgdGhhdCBvdXQgb2YgdGhlIHdheSwgSSB0aGluayBJJ20gcmVhZHkgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgdG8gZG9jdW1lbnQgdGhlc2UgZmluZGluZ3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMzQxLCJPdXRwdXRUb2tlbnMiOjI0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQwMDoyMDo1MC4zODgxNjYzMDZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzgyOTIxNjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0clwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9tbWFwXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFidWZfZXhwb3J0XCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWZcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGSU8gZmVhdHVyZXMgKFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0UgYW5kIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSKSBhbmQgbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxpbmcgdG8gdXNlIERNQUJVRi1iYWNrZWQgbW1hcHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlZGSU9fUENJXCIsXG4gICAgXCJQQ0lfUDJQRE1BXCIsXG4gICAgXCJaT05FX0RFVklDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZmaW9fcGNpX2NvcmVfZmVhdHVyZV9kbWFfYnVmX3Jldm9rZVwiLFxuICAgIFwidmZpb19wY2lfY29yZV9mZWF0dXJlX2RtYV9idWZfbWVtYXR0clwiLFxuICAgIFwidmZpb19wY2lfZG1hX2J1Zl9tbWFwXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFfYnVmX2ZpbmRfcGZuXCIsXG4gICAgXCJ2ZmlvX3BjaV9kbWFidWZfZXhwb3J0XCIsXG4gICAgXCJ2ZmlvX3BjaV9jb3JlX21tYXBfcHJlcF9kbWFidWZcIixcbiAgICBcInZmaW9fcGNpX2RtYV9idWZfc2V0X3N0YXR1c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV3IFZGSU8gZmVhdHVyZXMgKFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9SRVZPS0UgYW5kIFZGSU9fREVWSUNFX0ZFQVRVUkVfRE1BX0JVRl9NRU1BVFRSKSBhbmQgbW9kaWZpZXMgdGhlIG1tYXAgaGFuZGxpbmcgdG8gdXNlIERNQUJVRi1iYWNrZWQgbW1hcHMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow9sl9q[1] Phase: Succeeded StartedAt: 2026-07-02 00:21:49 +0000 UTC FinishedAt: 2026-07-02 00:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 00:21:49 +0000 UTC FinishedAt: 2026-07-02 00:21:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2] Phase: Succeeded StartedAt: 2026-07-02 00:21:49 +0000 UTC FinishedAt: 2026-07-02 01:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-02 00:21:49 +0000 UTC FinishedAt: 2026-07-02 01:54:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-02 00:21:49 +0000 UTC FinishedAt: 2026-07-02 00:22:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-02 00:21:49 +0000 UTC FinishedAt: 2026-07-02 00:22:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow9sl9q/series-workflow9sl9q-convert-artifact-1071964222/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-02 00:22:09 +0000 UTC FinishedAt: 2026-07-02 00:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-02 00:22:09 +0000 UTC FinishedAt: 2026-07-02 00:51:34 +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:*c52915da-6c91-47af-a88c-e46ad899b8e0,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-workflow9sl9q/series-workflow9sl9q-convert-artifact-1071964222/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": "45cb7ac5-6d33-45c4-a107-a77d954a5eaf", "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-workflow9sl9q/series-workflow9sl9q-build-action-1633466660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-02 00:22:09 +0000 UTC FinishedAt: 2026-07-02 00:51:03 +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:*c52915da-6c91-47af-a88c-e46ad899b8e0,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-workflow9sl9q/series-workflow9sl9q-convert-artifact-1071964222/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": "45cb7ac5-6d33-45c4-a107-a77d954a5eaf", "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-workflow9sl9q/series-workflow9sl9q-build-action-1633466660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-02 00:51:34 +0000 UTC FinishedAt: 2026-07-02 00:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-02 00:51:34 +0000 UTC FinishedAt: 2026-07-02 00:51:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-02 00:51:34 +0000 UTC FinishedAt: 2026-07-02 00:53:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-02 00:51:35 +0000 UTC FinishedAt: 2026-07-02 00:52:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflow9sl9q/series-workflow9sl9q-convert-artifact-1818352241/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-02 00:53:11 +0000 UTC FinishedAt: 2026-07-02 00:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-02 00:53:11 +0000 UTC FinishedAt: 2026-07-02 00:55:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45cb7ac5-6d33-45c4-a107-a77d954a5eaf,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-workflow9sl9q/series-workflow9sl9q-build-action-1633466660/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-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-02 00:55:29 +0000 UTC FinishedAt: 2026-07-02 00:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-02 00:55:29 +0000 UTC FinishedAt: 2026-07-02 00:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-02 00:55:29 +0000 UTC FinishedAt: 2026-07-02 01:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-02 00:55:29 +0000 UTC FinishedAt: 2026-07-02 01:17:00 +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:*c52915da-6c91-47af-a88c-e46ad899b8e0,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-workflow9sl9q/series-workflow9sl9q-convert-artifact-1818352241/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": "92b84be1-be40-412d-a152-8b96daea846a", "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-workflow9sl9q/series-workflow9sl9q-build-action-3669456957/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-02 00:55:29 +0000 UTC FinishedAt: 2026-07-02 01:16:50 +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:*c52915da-6c91-47af-a88c-e46ad899b8e0,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-workflow9sl9q/series-workflow9sl9q-convert-artifact-1818352241/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": "92b84be1-be40-412d-a152-8b96daea846a", "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-workflow9sl9q/series-workflow9sl9q-build-action-3669456957/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-02 01:17:00 +0000 UTC FinishedAt: 2026-07-02 01:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-02 01:17:00 +0000 UTC FinishedAt: 2026-07-02 01:17:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-02 01:17:00 +0000 UTC FinishedAt: 2026-07-02 01:19:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-02 01:17:00 +0000 UTC FinishedAt: 2026-07-02 01:19:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*92b84be1-be40-412d-a152-8b96daea846a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9sl9q/series-workflow9sl9q-build-action-3669456957/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-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-02 01:19:20 +0000 UTC FinishedAt: 2026-07-02 01:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-02 01:19:20 +0000 UTC FinishedAt: 2026-07-02 01:54:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*45cb7ac5-6d33-45c4-a107-a77d954a5eaf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*92b84be1-be40-412d-a152-8b96daea846a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9sl9q/series-workflow9sl9q-build-action-1633466660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9sl9q/series-workflow9sl9q-build-action-3669456957/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-02 01:19:20 +0000 UTC FinishedAt: 2026-07-02 01:19:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-02 01:19:20 +0000 UTC FinishedAt: 2026-07-02 01:19:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["vfio_pci_core_feature_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9sl9q/series-workflow9sl9q-convert-artifact-2974399526/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-02 01:19:20 +0000 UTC FinishedAt: 2026-07-02 01:19:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-02 01:19:20 +0000 UTC FinishedAt: 2026-07-02 01:19:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-02 01:19:20 +0000 UTC FinishedAt: 2026-07-02 01:19:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-02 01:19:30 +0000 UTC FinishedAt: 2026-07-02 01:54:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow9sl9q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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_dma_buf_revoke","vfio_pci_core_feature_dma_buf_memattr","vfio_pci_dma_buf_mmap","vfio_pci_dma_buf_find_pfn","vfio_pci_dmabuf_export","vfio_pci_core_mmap_prep_dmabuf","vfio_pci_dma_buf_set_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8cd9520d35a6c38db6567e97dd93b1f11f185dc6","config_name":"upstream-apparmor-kasan.config","enable_configs":["VFIO_PCI","PCI_P2PDMA","ZONE_DEVICE"],"series_id":"be016584-b668-49a5-9a4e-17d653b9f658","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-02 01:19:30 +0000 UTC FinishedAt: 2026-07-02 01:54:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*45cb7ac5-6d33-45c4-a107-a77d954a5eaf,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*92b84be1-be40-412d-a152-8b96daea846a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9sl9q/series-workflow9sl9q-build-action-1633466660/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9sl9q/series-workflow9sl9q-build-action-3669456957/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow9sl9q/series-workflow9sl9q-convert-artifact-2974399526/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}