Name: series-workflowfcgjg Phase: Succeeded StartedAt: 2026-07-26 03:19:45 +0000 UTC FinishedAt: 2026-07-26 06:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[0] Phase: Succeeded StartedAt: 2026-07-26 03:19:45 +0000 UTC FinishedAt: 2026-07-26 03:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[0].run-triage Phase: Succeeded StartedAt: 2026-07-26 03:19:45 +0000 UTC FinishedAt: 2026-07-26 03:50:19 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_DEV", "CAN_CTUCANFD_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_DEV", "CAN_CTUCANFD_PCI" ], "series_id": "5372b7ff-ca10-473d-9e08-e4d46b96f1e7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctucan_pci_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9DVFVDQU5GRF9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHVjYW5fcGNpX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluY29ycmVjdCB1bm1hcCBhZGRyZXNzIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIHRoZSBDVFUgQ0FOIEZEIFBDSSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDI3MDQ3MmYzOTkyNjlkMWNiMTZmMmZiNTZkOGNhYjU2YTBmOTM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMDM6NDg6NDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jIGIvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXG5pbmRleCA2MjU3ODhmYTg5NzY2Mi4uZjg0NTk1MWM1ZDUxMzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuY1xuQEAgLTE5NCw3ICYjNDM7MTk0LDcgQEAgc3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIFx0a2ZyZWUoYmRhdGEpO1xuIGVycl9wY2lfaW91bm1hcF9iYXIwOlxuLVx0cGNpX2lvdW5tYXAocGRldiwgY3JhX2FkZHIpO1xuJiM0MztcdHBjaV9pb3VubWFwKHBkZXYsIGJhcjBfYmFzZSk7XG4gZXJyX3BjaV9pb3VubWFwX2JhcjE6XG4gXHRwY2lfaW91bm1hcChwZGV2LCBhZGRyKTtcbiBlcnJfcmVsZWFzZV9yZWdpb25zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0RFViYjMzQ7LAogICAgJiMzNDtDQU5fQ1RVQ0FORkRfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3R1Y2FuX3BjaV9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbmNvcnJlY3QgdW5tYXAgYWRkcmVzcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiB0aGUgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGQyNzA0NzJmMzk5MjY5ZDFjYjE2ZjJmYjU2ZDhjYWI1NmEwZjkzNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDAzOjQ4OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jIGIvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jCmluZGV4IDYyNTc4OGZhODk3NjYyLi5mODQ1OTUxYzVkNTEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYwpAQCAtMTk0LDcgJiM0MzsxOTQsNyBAQCBzdGF0aWMgaW50IGN0dWNhbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGJkYXRhKTsKIGVycl9wY2lfaW91bm1hcF9iYXIwOgotCXBjaV9pb3VubWFwKHBkZXYsIGNyYV9hZGRyKTsKJiM0MzsJcGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTsKIGVycl9wY2lfaW91bm1hcF9iYXIxOgogCXBjaV9pb3VubWFwKHBkZXYsIGFkZHIpOwogZXJyX3JlbGVhc2VfcmVnaW9uczoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQ1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQQ0kgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jYC4gVGhlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBhIGNvcnJlY3Rpb24gaW4gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgc3dhcHBpbmcgYHBjaV9pb3VubWFwKHBkZXYsIGNyYV9hZGRyKTtgIGZvciBgcGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTtgLiBJdCYjMzk7cyBhIGNsZWFudXAsIG5vdGhpbmcgdG9vIGV4Y2l0aW5nIGluIGl0c2VsZi4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzIHdpdGggdGhlc2UgdGhpbmdzLCBpcyAmIzM0O2NhbiB3ZSBmdXp6IHRoaXM/JiMzNDsgQW5kIHRoYXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhpcyBkcml2ZXIgaXMgZXZlbiAqcHJvYmVkKiBpbiBhbiBlbXVsYXRlZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFJlYWRpbmcgdGhlIGNvZGUsIGl0JiMzOTtzIGEgUENJIGRyaXZlciBmb3IgQ1RVIENBTiBGRC4gUmlnaHQsIGEgc3BlY2lmaWMgSVAgY29yZS4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgYmFkIHNpZ24gZm9yIFFFTVUgY29tcGF0aWJpbGl0eSwgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgcmFyZWx5IHdvcmsgb3V0LW9mLXRoZS1ib3guIE15IGd1dCBzYXlzICYjMzQ7cHJvYmFibHkgbm90LCYjMzQ7IHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGVtdWxhdG9yIGZvciB0aGlzIHBhcnRpY3VsYXIgaGFyZHdhcmUuCgpCdXQgdGhpcyBpcyBhbiAqZXJyb3IqIHBhdGggd2l0aGluIGAucHJvYmVgLiBUaGUgZnVuY3Rpb24gd29uJiMzOTt0IGV2ZW4gKmJlKiBjYWxsZWQgaWYgdGhlIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgcmlnaHQ/IEFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBtYXJrIHRoZXNlIGFzIG5vdCB3b3J0aCBmdXp6aW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSByZWFsIGhhcmR3YXJlLiBJdCYjMzk7cyBhIHByb2JlIGVycm9yIHBhdGguCgpPa2F5LCB3YWl0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbiB3aXRoIGBzeXpfcGNpX3ZwY2lgIGFuZCBzaW1pbGFyIG1lY2hhbmlzbXMuIEJ1dCBpcyBpdCBzb3BoaXN0aWNhdGVkIGVub3VnaCB0byBpbmplY3QgYSBDVFUgQ0FOIEZEIGRldmljZT8gVGhlIGluamVjdGlvbiBtaWdodCBiZSB0aGVyZSwgYnV0IGl0IGxpa2VseSByZXF1aXJlcyBkZXRhaWxlZCBkcml2ZXIga25vd2xlZGdlLgoKU28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkcml2ZXIgaXRzZWxmIGluIG1vcmUgZGV0YWlsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkIGJ5IFN5emthbGxlciYjMzk7cyB2aXJ0dWFsIFBDSSBpbmplY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3R1Y2FuX3BjaV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9NTM9c3RhdGljIHZvaWQgY3R1Y2FuX3BjaV9zZXRfZHJ2ZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTY0LS8qKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjY1OiAqIGN0dWNhbl9wY2lfcHJvYmUgLSBQQ0kgcmVnaXN0cmF0aW9uIGNhbGxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02Ni0gKiBAcGRldjpcdEhhbmRsZSB0byB0aGUgcGNpIGRldmljZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzMtICovXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM6NzQ6c3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTc1LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz0yNzA9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGN0dWNhbl9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzItXHQuaWRfdGFibGUgPSBjdHVjYW5fcGNpX3RibCxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzoyNzM6XHQucHJvYmUgPSBjdHVjYW5fcGNpX3Byb2JlLFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTI3NC1cdC5yZW1vdmUgPSBjdHVjYW5fcGNpX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGEgU2ltcGxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBhIGZpeCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGN0dWNhbl9wY2lfcHJvYmVgLiBUaGUgZGV2aWNlIGluIHF1ZXN0aW9uIGlzIGEgUENJIGRldmljZSwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4gTm93LCBjYW4gc3l6a2FsbGVyIGV2ZW4gKnJlYWNoKiB0aGlzIGVycm9yIHBhdGg/IFllYWgsIGl0IHNob3VsZCBiZSBwb3NzaWJsZS4gSSYjMzk7dmUgc2VlbiBpdCBkb25lIHdpdGggYHN5el9wY2lfdnBjaWAsIGBzeXpfcGNpX2RldmljZV9hZGRgLCBvciBzaW1pbGFyIHN5c2NhbGxzLiBJZiB0aGUgUENJIHN1YnN5c3RlbSBpcyBlbmFibGVkIGFuZCBzeXprYWxsZXIgY2FuIGluamVjdCBQQ0kgZGV2aWNlcywgdGhlbiBpdCAqc2hvdWxkKiBiZSBhYmxlIHRvIGZ1enogUENJIHByb2JlIGZ1bmN0aW9ucy4KCkJ1dCBpcyB0aGlzIHBhdGNoLCBhIHNpbmdsZSBsaW5lIGNoYW5nZSDigJMgc3BlY2lmaWNhbGx5LCBzd2FwcGluZyBgY3JhX2FkZHJgIGZvciBgYmFyMF9iYXNlYCBpbiBhIGBwY2lfaW91bm1hcGAgY2FsbCBpbiBhbiBlcnJvciBwYXRoIOKAkyBldmVuIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gSXQmIzM5O3MgYSBQQ0kgZHJpdmVyIHByb2JlIGVycm9yIHBhdGgsIHNvIHRoZXJlJiMzOTtzIGEgY2hhbmNlLiBJZiB0aGUgZnV6emVyIGNhbiBpbmplY3QgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBhbiBlcnJvciAqZHVyaW5nKiB0aGUgcHJvYmUsIHdlIG1pZ2h0IHNlZSB0aGlzIGNvZGUgZ2V0IGV4ZXJjaXNlZC4gU28sIGJlZm9yZSBJIGRpc21pc3MgaXQgb3V0cmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgY3R1Y2FuZmRfcGNpX3Byb2JlYCBhY3R1YWxseSBkb2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBwcm9iZSYjMzk7cyBsb2dpYyBpcyB0aGUga2V5IHRvIHNlZWluZyBpZiBzeXprYWxsZXIgY2FuIGdldCB0byB0aGUgZXJyb3IgcGF0aCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHRsaXN0X2FkZChcdTAwMjZwcml2LVx1MDAzZXBlZXJzX29uX3BkZXYsIFx1MDAyNmJkYXRhLVx1MDAzZW5kZXZfbGlzdF9oZWFkKTtcbiAgNjE6XHRcdHByaXYtXHUwMDNlaXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdC8qKlxuICA2NTpcdCAqIGN0dWNhbl9wY2lfcHJvYmUgLSBQQ0kgcmVnaXN0cmF0aW9uIGNhbGxcbiAgNjY6XHQgKiBAcGRldjpcdEhhbmRsZSB0byB0aGUgcGNpIGRldmljZSBzdHJ1Y3R1cmVcbiAgNjc6XHQgKiBAZW50Olx0UG9pbnRlciB0byB0aGUgZW50cnkgZnJvbSBjdHVjYW5fcGNpX3RibFxuICA2ODpcdCAqXG4gIDY5Olx0ICogVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIENBTlxuICA3MDpcdCAqIGRldmljZS5cbiAgNzE6XHQgKlxuICA3MjpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIGFuZCBmYWlsdXJlIHZhbHVlIG9uIGVycm9yXG4gIDczOlx0ICovXG4gIDc0Olx0c3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuICA3NTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuICA3NjpcdHtcbiAgNzc6XHRcdHN0cnVjdCBkZXZpY2VcdCpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiAgNzg6XHRcdHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEgPSBlbnQtXHUwMDNlZHJpdmVyX2RhdGE7XG4gIDc5Olx0XHRzdHJ1Y3QgY3R1Y2FuX3BjaV9ib2FyZF9kYXRhICpiZGF0YTtcbiAgODA6XHRcdHZvaWQgX19pb21lbSAqYWRkcjtcbiAgODE6XHRcdHZvaWQgX19pb21lbSAqY3JhX2FkZHI7XG4gIDgyOlx0XHR2b2lkIF9faW9tZW0gKmJhcjBfYmFzZTtcbiAgODM6XHRcdHUzMiBjcmFfYTJwX2llO1xuICA4NDpcdFx0dTMyIGN0dWNhbl9pZCA9IDA7XG4gIDg1Olx0XHRpbnQgcmV0O1xuICA4NjpcdFx0dW5zaWduZWQgaW50IG50eGJ1ZnM7XG4gIDg3Olx0XHR1bnNpZ25lZCBpbnQgbnVtX2NvcmVzID0gMTtcbiAgODg6XHRcdHVuc2lnbmVkIGludCBjb3JlX2kgPSAwO1xuICA4OTpcdFx0aW50IGlycTtcbiAgOTA6XHRcdGludCBtc2lfb2sgPSAwO1xuICA5MTpcdFxuICA5MjpcdFx0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7XG4gIDkzOlx0XHRpZiAocmV0KSB7XG4gIDk0Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtwY2lfZW5hYmxlX2RldmljZSBGQUlMRURcXG5cJiMzNDspO1xuICA5NTpcdFx0XHRnb3RvIGVycjtcbiAgOTY6XHRcdH1cbiAgOTc6XHRcbiAgOTg6XHRcdHJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgS0JVSUxEX01PRE5BTUUpO1xuICA5OTpcdFx0aWYgKHJldCkge1xuIDEwMDpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7cGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRURcXG5cJiMzNDspO1xuIDEwMTpcdFx0XHRnb3RvIGVycl9kaXNhYmxlX2RldmljZTtcbiAxMDI6XHRcdH1cbiAxMDM6XHRcbiAxMDQ6XHRcdHJldCA9IHBjaV9lbmFibGVfbXNpKHBkZXYpO1xuIDEwNTpcdFx0aWYgKCFyZXQpIHtcbiAxMDY6XHRcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtNU0kgZW5hYmxlZFxcblwmIzM0Oyk7XG4gMTA3Olx0XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIDEwODpcdFx0XHRtc2lfb2sgPSAxO1xuIDEwOTpcdFx0fVxuIDExMDpcdFxuIDExMTpcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtjdHVjYW4gQkFSMCAweCUwOGxseCAweCUwOGxseFxcblwmIzM0OyxcbiAxMTI6XHRcdFx0IChsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLFxuIDExMzpcdFx0XHQgKGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTtcbiAxMTQ6XHRcbiAxMTU6XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7Y3R1Y2FuIEJBUjEgMHglMDhsbHggMHglMDhsbHhcXG5cJiMzNDssXG4gMTE2Olx0XHRcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSxcbiAxMTc6XHRcdFx0IChsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7XG4gMTE4Olx0XG4gMTE5Olx0XHRhZGRyID0gcGNpX2lvbWFwKHBkZXYsIDEsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpO1xuIDEyMDpcdFx0aWYgKCFhZGRyKSB7XG4gMTIxOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtQQ0kgQkFSIDEgY2Fubm90IGJlIG1hcHBlZFxcblwmIzM0Oyk7XG4gMTIyOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTIzOlx0XHRcdGdvdG8gZXJyX3JlbGVhc2VfcmVnaW9ucztcbiAxMjQ6XHRcdH1cbiAxMjU6XHRcbiAxMjY6XHRcdC8qIEN5Y2xvbmUgSVYgUENJIEV4cHJlc3MgQ29udHJvbCBSZWdpc3RlcnMgQXJlYSAqL1xuIDEyNzpcdFx0YmFyMF9iYXNlID0gcGNpX2lvbWFwKHBkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpO1xuIDEyODpcdFx0aWYgKCFiYXIwX2Jhc2UpIHtcbiAxMjk6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1BDSSBCQVIgMCBjYW5ub3QgYmUgbWFwcGVkXFxuXCYjMzQ7KTtcbiAxMzA6XHRcdFx0cmV0ID0gLUVJTztcbiAxMzE6XHRcdFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMTtcbiAxMzI6XHRcdH1cbiAxMzM6XHRcbiAxMzQ6XHRcdGlmIChkcml2ZXJfZGF0YSA9PSBDVFVDQU5fV0lUSE9VVF9DVFVDQU5fSUQpIHtcbiAxMzU6XHRcdFx0Y3JhX2FkZHIgPSBiYXIwX2Jhc2U7XG4gMTM2Olx0XHRcdG51bV9jb3JlcyA9IDI7XG4gMTM3Olx0XHR9IGVsc2Uge1xuIDEzODpcdFx0XHRjcmFfYWRkciA9IGJhcjBfYmFzZSAmIzQzOyBDVFVDQU5fQkFSMF9DUkFfQkFTRTtcbiAxMzk6XHRcdFx0Y3R1Y2FuX2lkID0gaW9yZWFkMzIoYmFyMF9iYXNlICYjNDM7IENUVUNBTl9CQVIwX0NUVUNBTl9JRCk7XG4gMTQwOlx0XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7Y3R1Y2FuX2lkIDB4JTA4bHhcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nKWN0dWNhbl9pZCk7XG4gMTQxOlx0XHRcdG51bV9jb3JlcyA9IGN0dWNhbl9pZCBcdTAwMjYgMHhmO1xuIDE0MjpcdFx0fVxuIDE0MzpcdFxuIDE0NDpcdFx0aXJxID0gcGRldi1cdTAwM2VpcnE7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRudHhidWZzID0gNDtcbiAxNDc6XHRcbiAxNDg6XHRcdGJkYXRhID0ga3phbGxvY19vYmooKmJkYXRhKTtcbiAxNDk6XHRcdGlmICghYmRhdGEpIHtcbiAxNTA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxNTE6XHRcdFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMDtcbiAxNTI6XHRcdH1cbiAxNTM6XHRcbiAxNTQ6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJkYXRhLVx1MDAzZW5kZXZfbGlzdF9oZWFkKTtcbiAxNTU6XHRcdGJkYXRhLVx1MDAzZWJhcjBfYmFzZSA9IGJhcjBfYmFzZTtcbiAxNTY6XHRcdGJkYXRhLVx1MDAzZWNyYV9iYXNlID0gY3JhX2FkZHI7XG4gMTU3Olx0XHRiZGF0YS1cdTAwM2ViYXIxX2Jhc2UgPSBhZGRyO1xuIDE1ODpcdFx0YmRhdGEtXHUwMDNldXNlX21zaSA9IG1zaV9vaztcbiAxNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBDSSBEcml2ZXIgRXJyb3IgUGF0aCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZXJyb3IgcGF0aCwgYGVycl9wY2lfaW91bm1hcF9iYXIwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZ2V0cyB0cmlnZ2VyZWQgaWYgYGt6YWxsb2Nfb2JqYCBmYWlscy4gV2FpdCwgaXMgdGhhdCBqdXN0IGEgbWFjcm8gZm9yIGBremFsbG9jYD8gTGV0IG1lIHNlZS4uLiB5ZWFoLCBpdCBsb29rcyBsaWtlIGBremFsbG9jX29iaigqYmRhdGEpO2AgaXMgbW9zdCBsaWtlbHkgYGt6YWxsb2Moc2l6ZW9mKCpiZGF0YSksIEdGUF9LRVJORUwpYC4gUHJvYmFibHkgYSBjdXN0b20gbWFjcm8gaW4gdGhpcyBkcml2ZXIgb3Iga2VybmVsIHZlcnNpb24uIEdvdCBpdC4gSWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCB3ZSBoaXQgYGVycl9wY2lfaW91bm1hcF9iYXIwYCwgd2hpY2ggdW5tYXBzIGBiYXIwX2Jhc2VgLgoKVGhlIGJ1ZywgYXBwYXJlbnRseSwgd2FzIHRoYXQgaXQgd2FzIHVubWFwcGluZyBgY3JhX2FkZHJgIGluc3RlYWQgb2YgYGJhcjBfYmFzZWAuIEFuZCBmcm9tIHdoYXQgSSBzZWUgYGNyYV9hZGRyYCBjYW4gYmUgYGJhcjBfYmFzZWAgb3IgYGJhcjBfYmFzZSAmIzQzOyBDVFVDQU5fQkFSMF9DUkFfQkFTRWAuIFRoYXQgdW5tYXBwaW5nIG9mIGBjcmFfYWRkcmAgaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaWYgaXQmIzM5O3Mgb2Zmc2V0LiBPa2F5LgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcXVlc3Rpb246IENhbiB3ZSBmdXp6IHRoaXM/IEl0JiMzOTtzIGEgUENJIGRyaXZlciYjMzk7cyBwcm9iZSBlcnJvciBwYXRoLiBTeXprYWxsZXIgY2FuIGluamVjdCBQQ0kgZGV2aWNlcyBhbmQgdHJpZ2dlciBwcm9iZSBmdW5jdGlvbnMsIHBsdXMgaXQgY2FuIHVzZSBmYXVsdCBpbmplY3Rpb24gdG8gbWFrZSBga3phbGxvY2AgZmFpbCwgd2hpY2ggc2hvdWxkIGRlZmluaXRlbHkgdHJpZ2dlciB0aGlzIGV4YWN0IGVycm9yIHBhdGguIEV4Y2VsbGVudCEKCkJ1dCwgZG9lcyBzeXprYWxsZXIgc3VwcG9ydCB0aGlzICpzcGVjaWZpYyogZHJpdmVyLCB0aGUgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyPyBMZXQgbWUgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIGlmIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLiBIbW0sIHRoZSBub3RlIGFib3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIGNhcmRzIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLi4uIElzIENUVSBDQU4gRkQgc3VjaCBhIHZlbmRvci1zcGVjaWZpYyBjYXJkPyBJdCYjMzk7cyBvcGVuLXNvdXJjZSwgZnJvbSB0aGUgQ3plY2ggVGVjaG5pY2FsIFVuaXZlcnNpdHksIGFuZCBjYW4gYmUgaW1wbGVtZW50ZWQgb24gRlBHQXMuIE9rYXksIG5vdCBpbmhlcmVudGx5IHZlbmRvci1zcGVjaWZpYy4KClNvLCBpcyBpdCBlbXVsYXRlZCBpbiBRRU1VPyBRRU1VIGhhcyBzb21lIENBTiBlbXVsYXRpb24sIFNKQTEwMDAsIEt2YXNlciwgZXRjLiwgYnV0IGRvZXMgaXQgZW11bGF0ZSAqdGhpcyogc3BlY2lmaWMgb25lPyBJIGNhbiBjaGVjayB0aGUgUUVNVSBzb3VyY2Ugb3IgZG8gYSBxdWljayBzZWFyY2guLi4gV2FpdCBhIG1pbnV0ZS4uLiBZZXMhIFFFTVUgZG9lcyBlbXVsYXRlIENUVSBDQU4gRkQhIEl0IHdhcyBhZGRlZCBhcm91bmQgMjAyMC4gT2theSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LCBidXQgaWYgdGhhdCYjMzk7cyByaWdodCwgdGhpcyBpcyBsb29raW5nIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q1RVIENBTiBGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWc9MT1jb25maWcgQ0FOX0NUVUNBTkZEXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMy1cdGhlbHBcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnOjQ6XHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIENUVSBDQU4gRkQgb3Blbi1zb3VyY2UgSVAgY29yZS5cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTUtXHQgIE1vcmUgZG9jdW1lbnRhdGlvbiBhbmQgY29yZSBzb3VyY2VzIGF0IHByb2plY3QgcGFnZVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oLTMtICpcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oOjQ6ICogQ1RVIENBTiBGRCBJUCBDb3JlXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC01LSAqXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkLmg9Mjk9c3RydWN0IGN0dWNhbl9wcml2IHtcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC02Mi0gKiBAZGV2Olx0SGFuZGxlIHRvIHRoZSBnZW5lcmljIGRldmljZSBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oOjYzOiAqIEBhZGRyOlx0QmFzZSBhZGRyZXNzIG9mIENUVSBDQU4gRkQgY29yZSBhZGRyZXNzXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC02NC0gKiBAaXJxOlx0SW50ZXJydXB0IG51bWJlclxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMy0gKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy01LSAqXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0xNjA9c3RhdGljIGNvbnN0IGNoYXIgKmN0dWNhbl9zdGF0ZV90b19zdHIoZW51bSBjYW5fc3RhdGUgc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0xNjktLyoqXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjE3MDogKiBjdHVjYW5fcmVzZXQoKSAtIElzc3VlcyBzb2Z0d2FyZSByZXNldCByZXF1ZXN0IHRvIENUVSBDQU4gRkRcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTcxLSAqIEBuZGV2Olx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9MTc1PXN0YXRpYyBpbnQgY3R1Y2FuX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTk3LS8qKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzoxOTg6ICogY3R1Y2FuX3NldF9idHIoKSAtIFNldHMgQ0FOIGJ1cyBiaXQgdGltaW5nIGluIENUVSBDQU4gRkRcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTk5LSAqIEBuZGV2Olx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9MjA1PXN0YXRpYyBpbnQgY3R1Y2FuX3NldF9idHIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCwgYm9vbCBub21pbmFsKVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMjIyLVx0ICogcGhhc2UxX3NlZyBjb21iaW5lZC4gdHNlZzEgaXMgdGhlbiBzcGxpdCBpbiBoYWxmIGFuZCBzdG9yZWQgaW50byBwcm9nX3NlZyBhbmQgcGhhc2Vfc2VnMS5cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MjIzOlx0ICogSW4gQ1RVIENBTiBGRCwgUFJPUCBpcyA2LzcgYml0cyB3aWRlIGJ1dCBQSDEgb25seSA2LzUsIHNvIHdlIG11c3QgcmUtZGlzdHJpYnV0ZSB0aGVcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMjI0LVx0ICogdmFsdWVzIGhlcmUuXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0yNzU9c3RhdGljIGludCBjdHVjYW5fc2V0X2RhdGFfYml0dGltaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMjg0LS8qKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzoyODU6ICogY3R1Y2FuX3NldF9zZWNvbmRhcnlfc2FtcGxlX3BvaW50KCkgLSBTZXRzIHNlY29uZGFyeSBzYW1wbGUgcG9pbnQgaW4gQ1RVIENBTiBGRFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0yODYtICogQG5kZXY6XHRQb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0yOTA9c3RhdGljIGludCBjdHVjYW5fc2V0X3NlY29uZGFyeV9zYW1wbGVfcG9pbnQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0zMjEtLyoqXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjMyMjogKiBjdHVjYW5fc2V0X21vZGUoKSAtIFNldHMgQ1RVIENBTiBGRHMgbW9kZVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0zMjMtICogQHByaXY6XHRQb2ludGVyIHRvIHByaXZhdGUgZGF0YVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9NTk2PXN0YXRpYyBuZXRkZXZfdHhfdCBjdHVjYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTY0MC0gKiBjdHVjYW5fcmVhZF9yeF9mcmFtZSgpIC0gUmVhZHMgZnJhbWUgZnJvbSBSWCBGSUZPXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjY0MTogKiBAcHJpdjpcdFBvaW50ZXIgdG8gQ1RVIENBTiBGRCYjMzk7cyBwcml2YXRlIGRhdGFcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtNjQyLSAqIEBjZjpcdFx0UG9pbnRlciB0byBDQU4gZnJhbWUgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz03MTA9c3RhdGljIGludCBjdHVjYW5fcngoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy03NDgtLyoqXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjc0OTogKiBjdHVjYW5fcmVhZF9mYXVsdF9zdGF0ZSgpIC0gUmVhZHMgQ1RVIENBTiBGRHMgZmF1bHQgY29uZmluZW1lbnQgc3RhdGUuXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTc1MC0gKiBAcHJpdjpcdFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz05OTU9c3RhdGljIHZvaWQgY3R1Y2FuX3R4X2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTEwOTUtICpcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MTA5NjogKiBUaGlzIGlzIHRoZSBDVFUgQ0FOIEZEIElTUi4gSXQgY2hlY2tzIGZvciB0aGUgdHlwZSBvZiBpbnRlcnJ1cHRcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTA5Ny0gKiBhbmQgaW52b2tlcyB0aGUgY29ycmVzcG9uZGluZyBJU1IuXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0xNDU5PU1PRFVMRV9BVVRIT1IoXCYjMzQ7T25kcmVqIElsbGUgXHUwMDNjb25kcmVqLmlsbGVAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MTQ2MDpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7Q1RVIENBTiBGRCBpbnRlcmZhY2VcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rZnJhbWUuaC0zLSAqXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfa2ZyYW1lLmg6NDogKiBDVFUgQ0FOIEZEIElQIENvcmVcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rZnJhbWUuaC01LSAqXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2tyZWdzLmgtMy0gKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2tyZWdzLmg6NDogKiBDVFUgQ0FOIEZEIElQIENvcmVcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rcmVncy5oLTUtICpcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMy0gKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjQ6ICogQ1RVIENBTiBGRCBJUCBDb3JlXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNS0gKlxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz03ND1zdGF0aWMgaW50IGN0dWNhbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTE3My1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjE3NDpcdFx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O0NUVSBDQU4gRkQgY29yZSAlZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMTc1LVx0XHRcdFx0IGNvcmVfaSk7XG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jPTI4MT1NT0RVTEVfQVVUSE9SKFwmIzM0O1BhdmVsIFBpc2EgXHUwMDNjcGlzYUBjbXAuZmVsay5jdnV0LmN6XHUwMDNlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzoyODI6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NUVSBDQU4gRkQgZm9yIFBDSSBidXNcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jLTMtICpcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jOjQ6ICogQ1RVIENBTiBGRCBJUCBDb3JlXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGxhdGZvcm0uYy01LSAqXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BsYXRmb3JtLmM9MTI1PU1PRFVMRV9BVVRIT1IoXCYjMzQ7TWFydGluIEplcmFiZWtcJiMzNDspO1xuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BsYXRmb3JtLmM6MTI2Ok1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtDVFUgQ0FOIEZEIGZvciBwbGF0Zm9ybVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG9uZS1saW5lIHBhdGNoIGluIGBjdHVjYW5fcGNpX3Byb2JlYC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gc2tpcCBmdXp6aW5nIGNlcnRhaW4gZHJpdmVyIGNoYW5nZXMsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHF1YWxpZmllcy4gVGhlIGluc3RydWN0aW9ucyBhcmUgc3BlY2lmaWMgYWJvdXQgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIG9yIHRlYXJkb3duIHJvdXRpbmVzLCBzbyBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4KCkZpcnN0IHRob3VnaHQ6IFRoaXMgaXMganVzdCBhIHNpbmdsZS1saW5lIGVycm9yIGhhbmRsaW5nIGZpeCB3aXRoaW4gYC5wcm9iZWAsIG5vdCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIuIEFuZCwgY3J1Y2lhbGx5LCBgQ1RVIENBTiBGRGAgaXMgZW11bGF0ZWQgaW4gUUVNVSwgc28gaXTigJlzIG5vdCB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgdGhlIGZ1enplciB3b3VsZG4mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8uIEkga25vdyB0aGF0IGJlY2F1c2UgaXQmIzM5O3MgaW4gYGh3L25ldC9jYW4vY3R1Y2FuX2NvcmUuY2AgYW5kIGBody9uZXQvY2FuL2N0dWNhbl9wY2kuY2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IG5vIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoaXMgaXNuJiMzOTt0IHRoYXQuCgpNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGxlYW4gdG93YXJkcyAqZnV6emFibGUqLiBUaGUgZXJyb3IgcGF0aCBpbiBhIGAucHJvYmVgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBieSBmdXp6aW5nLiBBIGZ1enplciBjYW4gaW5qZWN0IGEgUENJIGRldmljZSBhbmQgdGhlbiB0cmlnZ2VyIGZhaWx1cmVzLCBsaWtlIHdpdGggZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgQkFScy4KCkJ1dCB3YWl0LCB0aGUgaW5zdHJ1Y3Rpb25zIGFsc28gc2F5IG5vIHRlYXJkb3duIGNhbGxiYWNrcywgbGlrZSBgLnJlbW92ZWAgb3IgYC5zaHV0ZG93bmAuIFRoaXMgKmlzKiBhIGAucHJvYmVgIGZ1bmN0aW9uLCBub3QgYC5yZW1vdmVgLCBvciBgLnNodXRkb3duYCwgc28gaXQmIzM5O3Mgbm90IGEgdGVhcmRvd24gY2FsbGJhY2suIEJ1dCBpcyBpdCB3b3J0aCBpdD8KCk9rYXksIG9rYXksIEkgdGhpbmsgdGhpcyAqaXMqIHdvcnRoIGZ1enppbmcuIFN5emthbGxlciBpcyBkZWZpbml0ZWx5IGNhcGFibGUgb2YgaGl0dGluZyBQQ0kgcHJvYmUgZnVuY3Rpb25zIGFuZCB0aGVpciBlcnJvciBwYXRocy4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYgYWdhaW4uIEl0JiMzOTtzIGEgdmVyeSBzaW1wbGUgY2hhbmdlIGluIHRoZSBgY3R1Y2FuX3BjaV9wcm9iZWAgZXJyb3IgaGFuZGxpbmcgcGF0aC4gSWYgd2UgZnV6eiBpdCwgdGhlIGZvY3VzIHdvdWxkIGJlIG9uIGBjdHVjYW5fcGNpX3Byb2JlYC4gVG8gcnVuIGl0LCBJJiMzOTtkIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZ1enplciBoYXMgYENPTkZJR19DQU5fQ1RVQ0FORkRgIGFuZCBgQ09ORklHX0NBTl9DVFVDQU5GRF9QQ0lgIGVuYWJsZWQuIExldCYjMzk7cyBzZW5kIGl0IHRvIHRoZSBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU5fQ1RVQ0FORkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZzoxOmNvbmZpZyBDQU5fQ1RVQ0FORkRcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtDVFUgQ0FOLUZEIElQIGNvcmVcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZzoxNDpjb25maWcgQ0FOX0NUVUNBTkZEX1BDSVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtDVFUgQ0FOLUZEIElQIGNvcmUgUENJL1BDSWUgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMjMtXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZzoyNDpjb25maWcgQ0FOX0NUVUNBTkZEX1BMQVRGT1JNXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZy0yNS1cdHRyaXN0YXRlIFwmIzM0O0NUVSBDQU4tRkQgSVAgY29yZSBwbGF0Zm9ybSAoRlBHQSwgU29DKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIERlcGVuZGVuY2llczogQ0FOX0NUVUNBTkZEX1BDSSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENBTl9DVFVDQU5GRF9QQ0lgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cywgZHJpdmVycywgb3IgbW9kdWxlcyB0aGlzIHBhcnRpY3VsYXIgZWxlbWVudCByZWxpZXMgdXBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyBwb3RlbnRpYWwgaW1wYWN0cyBvZiBjaGFuZ2VzLCB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzLCBvciBldmVuIHNpbXBseSB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeTogYXJlIHRoZXJlIGFueSBrZXJuZWwgbW9kdWxlcywgc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2VzLCBvciBvdGhlciBzb2Z0d2FyZSBjb21wb25lbnRzIGl0IGRlcGVuZHMgb24/IEFyZSB0aGVyZSBhbnkgdXBzdHJlYW0vZG93bnN0cmVhbSBjb25zaWRlcmF0aW9ucz8gU3BlY2lmaWNhbGx5LCBkb2VzIGl0IGludGVyZmFjZSB3aXRoIGFueSBvdGhlciBzdWJzeXN0ZW1zIHRoYXQgbWlnaHQgcmVxdWlyZSBjb29yZGluYXRpb24/IFRoaW5raW5nIGZ1cnRoZXIsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBpdCBtaWdodCBpbnRyb2R1Y2Ugd2l0aCBvdGhlciBoYXJkd2FyZSBvciBzb2Z0d2FyZT8gSSYjMzk7bGwgbmVlZCB0byB0cmFjayB0aGVzZSBkZXBlbmRlbmNpZXMgZG93biBhbmQgbWFwIHRoZW0sIGlmIEkgaGF2ZW4mIzM5O3QgYWxyZWFkeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBDQU5fQ1RVQ0FORkRcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0NUVSBDQU4tRkQgSVAgY29yZVwmIzM0OyBpZiBDT01QSUxFX1RFU1RcbiAgIDM6XHRcdGhlbHBcbiAgIDQ6XHRcdCAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciB0aGUgQ1RVIENBTiBGRCBvcGVuLXNvdXJjZSBJUCBjb3JlLlxuICAgNTpcdFx0ICBNb3JlIGRvY3VtZW50YXRpb24gYW5kIGNvcmUgc291cmNlcyBhdCBwcm9qZWN0IHBhZ2VcbiAgIDY6XHRcdCAgKGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy9jdHVjYW5mZF9pcF9jb3JlKS5cbiAgIDc6XHRcdCAgVGhlIGNvcmUgaW50ZWdyYXRpb24gdG8gWGlsaW54IFp5bnEgc3lzdGVtIGFzIHBsYXRmb3JtIGRyaXZlclxuICAgODpcdFx0ICBpcyBhdmFpbGFibGUgKGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy96eW5xL3p5bnEtY2FuLXNqYTEwMDAtdG9wKS5cbiAgIDk6XHRcdCAgSW1wbGVtZW50YXRpb24gb24gSW50ZWwgRlBHQS1iYXNlZCBQQ0kgRXhwcmVzcyBib2FyZCBpcyBhdmFpbGFibGVcbiAgMTA6XHRcdCAgZnJvbSBwcm9qZWN0IChodHRwczovL2dpdGxhYi5mZWwuY3Z1dC5jei9jYW5idXMvcGNpZS1jdHVjYW5mZCkgYW5kXG4gIDExOlx0XHQgIG9uIEludGVsIFNvQyBmcm9tIHByb2plY3QgKGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy9pbnRlbC1zb2MtY3R1Y2FuZmQpLlxuICAxMjpcdFx0ICBHdWlkZXBvc3QgQ1RVIEZFRSBDQU4gYnVzIHByb2plY3RzIHBhZ2UgaHR0cHM6Ly9jYW5idXMucGFnZXMuZmVsLmN2dXQuY3ovIC5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgQ0FOX0NUVUNBTkZEX1BDSVxuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7Q1RVIENBTi1GRCBJUCBjb3JlIFBDSS9QQ0llIGRyaXZlclwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMTc6XHRcdHNlbGVjdCBDQU5fQ1RVQ0FORkRcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBkcml2ZXIgYWRkcyBQQ0kvUENJZSBzdXBwb3J0IGZvciBDVFUgQ0FOLUZEIElQIGNvcmUuXG4gIDIwOlx0XHQgIFRoZSBwcm9qZWN0IHByb3ZpZGluZyBGUEdBIGRlc2lnbiBmb3IgSW50ZWwgRVA0Q0dYMTUgYmFzZWQgREI0Q0dYMTVcbiAgMjE6XHRcdCAgUENJZSBib2FyZCB3aXRoIFBpS1JPTi5jb20gZGVzaWduZWQgdHJhbnNjZWl2ZXIgcmlzZXIgc2hpZWxkIGlzIGF2YWlsYWJsZVxuICAyMjpcdFx0ICBhdCBodHRwczovL2dpdGxhYi5mZWwuY3Z1dC5jei9jYW5idXMvcGNpZS1jdHVjYW5mZCAuXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIENBTl9DVFVDQU5GRF9QTEFURk9STVxuICAyNTpcdFx0dHJpc3RhdGUgXCYjMzQ7Q1RVIENBTi1GRCBJUCBjb3JlIHBsYXRmb3JtIChGUEdBLCBTb0MpIGRyaXZlclwmIzM0O1xuICAyNjpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IE9GXG4gIDI3Olx0XHRzZWxlY3QgQ0FOX0NUVUNBTkZEXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoZSBjb3JlIGhhcyBiZWVuIHRlc3RlZCB0b2dldGhlciB3aXRoIE9wZW5Db3JlcyBTSkExMDAwXG4gIDMwOlx0XHQgIG1vZGlmaWVkIHRvIGJlIENBTiBGRCBmcmFtZXMgdG9sZXJhbnQgb24gTWljcm9aZWQgWnlucSBiYXNlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI3OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ0FOX0NUVUNBTkZEX1BDSWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGRlcGVuZHMgZGlyZWN0bHkgb24gYFBDSWAsIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBvZiBjb3Vyc2UsIGl0JiMzOTtzIGFsc28gYSBDQU4gY29udHJvbGxlciwgc28gdGhhdCBtYWtlcyBtZSB0aGluayBpdCBuZWVkcyB0aGUgcGFyZW50IGBDQU5gIHN1YnN5c3RlbSBlbmFibGVkIGFzIHdlbGwuIE15IG5leHQgc3RlcCBoZXJlIGlzIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBzb21ld2hlcmUgaW4gYGRyaXZlcnMvbmV0L2Nhbi9gLiBMZXQgbWUgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvY2FuL0tjb25maWdgLCBvciBzb21ld2hlcmUgc2ltaWxhciwgdG8gcGlucG9pbnQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ0FOX0NUVUNBTkZEYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBhbmQgdGhhdCBldmVyeXRoaW5nIGlzIHdpcmVkIHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vS2NvbmZpZz0yNDc9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jYzc3MC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzoyNDg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yNDktc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2Nhbi9lc2QvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIENBTiBCdXMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgb3ZlcmFyY2hpbmcgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhpcyBDQU4gYnVzIG1vZHVsZS4gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIHJlbGV2YW50IGRyaXZlciBkaXJlY3RvcnksIHdoaWNoIEkgYXNzdW1lIGlzIGBkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhbmQgcGFyZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYWJvdXQgdGhlIHJlbGF0aW9uc2hpcHMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51Y29uZmlnIENBTl9ERVZcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0NBTiBEZXZpY2UgRHJpdmVyc1wmIzM0O1xuICAgNTpcdFx0ZGVmYXVsdCB5XG4gICA2Olx0XHRkZXBlbmRzIG9uIENBTlxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoQ0FOKSBpcyBzZXJpYWwgY29tbXVuaWNhdGlvbnMgcHJvdG9jb2wgdXAgdG9cbiAgIDk6XHRcdCAgMU1iaXQvcyBmb3IgaXRzIG9yaWdpbmFsIHJlbGVhc2UgKG5vdyBrbm93biBhcyBDbGFzc2ljYWwgQ0FOKSBhbmQgdXBcbiAgMTA6XHRcdCAgdG8gOE1iaXQvcyBmb3IgdGhlIG1vcmUgcmVjZW50IENBTiB3aXRoIEZsZXhpYmxlIERhdGEtUmF0ZVxuICAxMTpcdFx0ICAoQ0FOLUZEKS4gVGhlIENBTiBidXMgd2FzIG9yaWdpbmFsbHkgbWFpbmx5IGZvciBhdXRvbW90aXZlLCBidXQgaXMgbm93XG4gIDEyOlx0XHQgIHdpZGVseSB1c2VkIGluIG1hcmluZSAoTk1FQTIwMDApLCBpbmR1c3RyaWFsLCBhbmQgbWVkaWNhbFxuICAxMzpcdFx0ICBhcHBsaWNhdGlvbnMuIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIENBTiBuZXR3b3JrIHByb3RvY29sIGZhbWlseVxuICAxNDpcdFx0ICBQRl9DQU4gaXMgY29udGFpbmVkIGluIFx1MDAzY0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4ucnN0XHUwMDNlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUaGlzIHNlY3Rpb24gY29udGFpbnMgYWxsIHRoZSBDQU4oLUZEKSBkZXZpY2UgZHJpdmVycyBpbmNsdWRpbmcgdGhlXG4gIDE3Olx0XHQgIHZpcnR1YWwgb25lcy4gSWYgeW91IG93biBzdWNoIGRldmljZXMgb3IgcGxhbiB0byB1c2UgdGhlIHZpcnR1YWwgQ0FOXG4gIDE4Olx0XHQgIGludGVyZmFjZXMgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMsIHNheSBZIGhlcmUuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBDQU4gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBDQU5fREVWYCBhbmQgYENBTmAuIE5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUgb3ZlcmFsbCBDQU4gY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L2Nhbi9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGBDQU5gIG9wdGlvbi4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZCB3aGVuIGVuYWJsaW5nIHRoZSBDQU4gc3Vic3lzdGVtPyBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJyZWxhdGlvbnNoaXBzIG9mIHRoZXNlIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIENBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWctNS1cbm5ldC9jYW4vS2NvbmZpZzo2Om1lbnVjb25maWcgQ0FOXG5uZXQvY2FuL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0NBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDQU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBDQU4gZHJpdmVyIG9wdGlvbnM6IGBDQU5gLCBgQ0FOX0RFVmAsIGFuZCBgQ0FOX0NUVUNBTkZEX1BDSWAuIEl0IHNlZW1zIGxpa2UgYENBTl9DVFVDQU5GRGAgaXMgc2VsZWN0ZWQgaW5kaXJlY3RseSBieSBgQ0FOX0NUVUNBTkZEX1BDSWAuIFRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IEkgbmVlZCBzaG91bGQgYmUgYFsmIzM0O0NBTiYjMzQ7LCAmIzM0O0NBTl9ERVYmIzM0OywgJiMzNDtDQU5fQ1RVQ0FORkRfUENJJiMzNDtdYC4gVGhpcyBzZWVtcyBsb2dpY2FsIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMuCgpOb3csIEkgc2hvdWxkIHJlLWV4YW1pbmUgYGN0dWNhbl9wY2lfcHJvYmVgLiBJcyB0aGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IEFic29sdXRlbHkuIEl0JiMzOTtzIGEgUENJIHByb2JlIGZ1bmN0aW9uLCBhbmQgc3l6a2FsbGVyIGlzIHdlbGwtc3VpdGVkIGZvciB0YXJnZXRpbmcgdGhvc2UuIFRoZSBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgY3R1Y2FuX3BjaV9wcm9iZWAuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSB3ZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHJlY2VudCBwYXRjaC4gQmFzZWQgb24gbXkgcXVpY2sgcmV2aWV3LCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBgY3R1Y2FuX3BjaV9wcm9iZWAuIEhvd2V2ZXIsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIG9uZSBsYXN0IHRpbWUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0dWNhbl9wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jPTUzPXN0YXRpYyB2b2lkIGN0dWNhbl9wY2lfc2V0X2RydmRhdGEoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02NC0vKipcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzo2NTogKiBjdHVjYW5fcGNpX3Byb2JlIC0gUENJIHJlZ2lzdHJhdGlvbiBjYWxsXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNjYtICogQHBkZXY6XHRIYW5kbGUgdG8gdGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTczLSAqL1xuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjc0OnN0YXRpYyBpbnQgY3R1Y2FuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy03NS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9MjcwPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjdHVjYW5fcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMjcyLVx0LmlkX3RhYmxlID0gY3R1Y2FuX3BjaV90YmwsXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM6MjczOlx0LnByb2JlID0gY3R1Y2FuX3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzQtXHQucmVtb3ZlID0gY3R1Y2FuX3BjaV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjgwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIE1vZGlmaWNhdGlvbioqCgpSaWdodCwgc28gdGhlIG9ubHkgZnVuY3Rpb24gdG91Y2hlZCBoZXJlIGlzIGBjdHVjYW5fcGNpX3Byb2JlYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBjaGFuZ2UgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBtZWFuaW5nIGl0JiMzOTtzIGFsdGVyaW5nIHRoZSAqYmVoYXZpb3IqIG9mIHRoZSBjb2RlLCBhbmQgc3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gQ2FuIHRoaXMgY29kZSBhY3R1YWxseSAqZXhlY3V0ZSogdW5kZXIgYW55IGNpcmN1bXN0YW5jZXM/CgpUaGUgdGV4dCBzYXlzIHllcywgaXQgaXMuIFRoZSBlcnJvciBwYXRoIGlzIHRyaWdnZXJlZCBieSBhIGZhaWx1cmUgaW4gZWl0aGVyIGBremFsbG9jX29iamAgb3Igc29tZXRoaW5nIHRoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoYXQgaW5pdGlhbGl6YXRpb24uIFRoYXQgc291bmRzIHJlYXNvbmFibGUuIElmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCBvciBzb21ldGhpbmcgZWxzZSBnb2VzIHNpZGV3YXlzIGluIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB0aGF0IGZvbGxvd3MgYGt6YWxsb2Nfb2JqYCwgd2UmIzM5O2xsIGp1bXAgdG8gYGVycl9wY2lfaW91bm1hcF9iYXIwYC4KCk5vdywgSSB3YW50IHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IGNhbiB0cmlnZ2VyIHRoaXMuIFdoYXQsIHNwZWNpZmljYWxseSwgY291bGQgZmFpbCAqYWZ0ZXIqIHRoZSBga3phbGxvY19vYmpgIGNhbGwgdGhhdCB3b3VsZCBsZWFkIHVzIGRvd24gdGhpcyBlcnJvciBwYXRoPyBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgY29tZXMgYWZ0ZXIgdGhlIGNhbGwgdG8gdW5kZXJzdGFuZCB3aGF0IHNjZW5hcmlvcyB0aGlzIGNoYW5nZSBhZGRyZXNzZXMgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGJyb2FkZXIgY29uY2VybiBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDg6XHRcdGJkYXRhID0ga3phbGxvY19vYmooKmJkYXRhKTtcbiAxNDk6XHRcdGlmICghYmRhdGEpIHtcbiAxNTA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxNTE6XHRcdFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMDtcbiAxNTI6XHRcdH1cbiAxNTM6XHRcbiAxNTQ6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJkYXRhLVx1MDAzZW5kZXZfbGlzdF9oZWFkKTtcbiAxNTU6XHRcdGJkYXRhLVx1MDAzZWJhcjBfYmFzZSA9IGJhcjBfYmFzZTtcbiAxNTY6XHRcdGJkYXRhLVx1MDAzZWNyYV9iYXNlID0gY3JhX2FkZHI7XG4gMTU3Olx0XHRiZGF0YS1cdTAwM2ViYXIxX2Jhc2UgPSBhZGRyO1xuIDE1ODpcdFx0YmRhdGEtXHUwMDNldXNlX21zaSA9IG1zaV9vaztcbiAxNTk6XHRcbiAxNjA6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBiZGF0YSk7XG4gMTYxOlx0XG4gMTYyOlx0XHRyZXQgPSBjdHVjYW5fcHJvYmVfY29tbW9uKGRldiwgYWRkciwgaXJxLCBudHhidWZzLCAxMDAwMDAwMDAsXG4gMTYzOlx0XHRcdFx0XHQgIDAsIGN0dWNhbl9wY2lfc2V0X2RydmRhdGEpO1xuIDE2NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAxNjU6XHRcdFx0Z290byBlcnJfZnJlZV9ib2FyZDtcbiAxNjY6XHRcbiAxNjc6XHRcdGNvcmVfaSYjNDM7JiM0Mzs7XG4gMTY4Olx0XG4gMTY5Olx0XHR3aGlsZSAoY29yZV9pIFx1MDAzYyBudW1fY29yZXMpIHtcbiAxNzA6XHRcdFx0YWRkciAmIzQzOz0gMHg0MDAwO1xuIDE3MTpcdFx0XHRyZXQgPSBjdHVjYW5fcHJvYmVfY29tbW9uKGRldiwgYWRkciwgaXJxLCBudHhidWZzLCAxMDAwMDAwMDAsXG4gMTcyOlx0XHRcdFx0XHRcdCAgMCwgY3R1Y2FuX3BjaV9zZXRfZHJ2ZGF0YSk7XG4gMTczOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAxNzQ6XHRcdFx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O0NUVSBDQU4gRkQgY29yZSAlZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcXG5cJiMzNDssXG4gMTc1Olx0XHRcdFx0XHQgY29yZV9pKTtcbiAxNzY6XHRcdFx0XHRicmVhaztcbiAxNzc6XHRcdFx0fVxuIDE3ODpcdFx0XHRjb3JlX2kmIzQzOyYjNDM7O1xuIDE3OTpcdFx0fVxuIDE4MDpcdFxuIDE4MTpcdFx0LyogZW5hYmxlIGludGVycnVwdCBpblxuIDE4MjpcdFx0ICogQXZhbG9uLU1NIHRvIFBDSSBFeHByZXNzIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXJcbiAxODM6XHRcdCAqL1xuIDE4NDpcdFx0Y3JhX2EycF9pZSA9IGlvcmVhZDMyKGNyYV9hZGRyICYjNDM7IENZQ0xPTkVfSVZfQ1JBX0EyUF9JRSk7XG4gMTg1Olx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O2NyYV9hMnBfaWUgMHglMDh4XFxuXCYjMzQ7LCBjcmFfYTJwX2llKTtcbiAxODY6XHRcdGNyYV9hMnBfaWUgfD0gMTtcbiAxODc6XHRcdGlvd3JpdGUzMihjcmFfYTJwX2llLCBjcmFfYWRkciAmIzQzOyBDWUNMT05FX0lWX0NSQV9BMlBfSUUpO1xuIDE4ODpcdFx0Y3JhX2EycF9pZSA9IGlvcmVhZDMyKGNyYV9hZGRyICYjNDM7IENZQ0xPTkVfSVZfQ1JBX0EyUF9JRSk7XG4gMTg5Olx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O2NyYV9hMnBfaWUgMHglMDh4XFxuXCYjMzQ7LCBjcmFfYTJwX2llKTtcbiAxOTA6XHRcbiAxOTE6XHRcdHJldHVybiAwO1xuIDE5MjpcdFxuIDE5MzpcdGVycl9mcmVlX2JvYXJkOlxuIDE5NDpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIDE5NTpcdFx0a2ZyZWUoYmRhdGEpO1xuIDE5NjpcdGVycl9wY2lfaW91bm1hcF9iYXIwOlxuIDE5NzpcdFx0cGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ1RVIENBTiBGRCBQQ0kgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIENUVSBDQU4gRkQgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGl0cyBlcnJvciBoYW5kbGluZyBkdXJpbmcgdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQsIHllcywgdGhlIGBjdHVjYW5fcHJvYmVfY29tbW9uYCBmdW5jdGlvbiAqY2FuKiBmYWlsLCBhbmQgd2hlbiBpdCBkb2VzLCBpdCBjb3JyZWN0bHkgZ29lcyBkb3duIHRoZSBlcnJvciBwYXRoIHRvIGBlcnJfZnJlZV9ib2FyZGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYGVycl9wY2lfaW91bm1hcF9iYXIwYC4gVGhhdCBtZWFucyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgYWN0dWFsbHkgYSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgcGFydCBvZiB0aGUgY29kZSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIHRvIGNvbmZpcm0uCgpOb3csIGxldCBtZSBzb2xpZGlmeSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYmFzZWQgb24gdGhpcyB1bmRlcnN0YW5kaW5nOgoKKiAgICoqYFdvcnRoRnV6emluZzogdHJ1ZWAqKjogRGVmaW5pdGVseS4gVGhpcyBpcyBhIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcgcGF0aCB0aGF0IG5lZWRzIHRvIGJlIHRlc3RlZCB2aWdvcm91c2x5LiBGYXVsdCBpbmplY3Rpb24gb3IgaW50ZW50aW9uYWxseSBpbnZhbGlkIGRldmljZSBjb25maWd1cmF0aW9ucyBjb3VsZCBkZWZpbml0ZWx5IHRyaWdnZXIgdGhpcy4KKiAgICoqYEZvY3VzU3ltYm9sczogWyYjMzQ7Y3R1Y2FuX3BjaV9wcm9iZSYjMzQ7XWAqKjogVGhlIGZvY3VzIGlzLCBhcyBleHBlY3RlZCwgb24gdGhlIGBjdHVjYW5fcGNpX3Byb2JlYCBmdW5jdGlvbiBpdHNlbGYsIHdoaWNoIGlzIHdoZXJlIHRoZSBwcm9iZSBvcGVyYXRpb24gc3RhcnRzLgoqICAgKipgRW5hYmxlQ29uZmlnczogWyYjMzQ7Q0FOJiMzNDssICYjMzQ7Q0FOX0RFViYjMzQ7LCAmIzM0O0NBTl9DVFVDQU5GRF9QQ0kmIzM0O11gKio6IEkgbmVlZCB0byBlbmFibGUgdGhlIGNvcmUgQ0FOIGZ1bmN0aW9uYWxpdHksIHRoZSBDQU4gZGV2aWNlIHN1cHBvcnQsIGFuZCB0aGUgc3BlY2lmaWMgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyLiBJIHdhcyBicmllZmx5IHBvbmRlcmluZyB0aGUgaW5jbHVzaW9uIG9mIGBDQU5fQ1RVQ0FORkRgIHNlcGFyYXRlbHksIGJ1dCBzaW5jZSBgQ0FOX0NUVUNBTkZEX1BDSWAgKnNlbGVjdHMqIGl0LCBpdCBpcywgaW4gZmFjdCwgcmVkdW5kYW50LiBXaGlsZSBpdCB3b3VsZG4mIzM5O3QgaHVydCB0byBpbmNsdWRlIGl0LCBpdCYjMzk7cyBjbGVhbmVyIHRvIG9taXQgaXQsIHNvIHRoZSBmaW5hbCBzZXQgc3RheXMgYXMgc2hvd24uIEFuZCB5ZXMsIGBDQU5fREVWYCBpcyBlbmFibGVkIHdpdGggYENBTmAgYnV0IGl0JiMzOTtzIGdvb2QgdG8gYmUgZXhwbGljaXQuIGBQQ0lgIGlzIGFsc28gbmVlZGVkLCBidXQgYXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGl0JiMzOTtzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gY2FsbCBpdCBvdXQuCgpGaW5hbGx5LCBqdXN0IG91dCBvZiBjdXJpb3NpdHksIEkgZG91YmxlLWNoZWNrZWQgd2hldGhlciBga3phbGxvY19vYmpgIGlzIGEgbWFjcm8uIEl0JiMzOTtzIG5vdCBjcml0aWNhbCB0byB0aGUgZnV6emluZyBzZXR1cCwgYnV0IEkgZW5qb3kga25vd2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz03ND1zdGF0aWMgaW50IGN0dWNhbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTE0Ny1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzoxNDg6XHRiZGF0YSA9IGt6YWxsb2Nfb2JqKCpiZGF0YSk7XG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMTQ5LVx0aWYgKCFiZGF0YSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ5NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBLZXJuZWwgTW9kdWxlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCBgY3R1Y2FuZmRfcGNpLmNgIGFuZCBJJiMzOTttIHNlZWluZyBhIHJlZmVyZW5jZSB0byBga3phbGxvY19vYmpgLiBUaGF0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBCdXQgdGhlIGNvbXBpbGVyIGlzIGNvbXBsYWluaW5nIHRoYXQgaXQmIzM5O3MgdW5kZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoYXQmIzM5O3MgYSBiaXQgcGVycGxleGluZy4gVGhpcyBpc24mIzM5O3QgdGhlIGtpbmQgb2YgZnVuY3Rpb24geW91JiMzOTtkIGV4cGVjdCB0byBiZSBkZWNsYXJlZCBsb2NhbGx5LCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHBhcnQgb2YgYSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lLiBTbywgdGhlIGtleSBxdWVzdGlvbiBub3cgaXM6IHdoZXJlIHRoZSBoZWNrICppcyogYGt6YWxsb2Nfb2JqYCBkZWZpbmVkPyBJIG5lZWQgdG8gdHJhY2sgZG93biBpdHMgb3JpZ2luLiBJcyBpdCBhIGZ1bmN0aW9uLCBhIG1hY3JvPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYW5kIHBlcmhhcHMgdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0bHksIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBkZWNsYXJhdGlvbiBpcyBsdXJraW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZGVmaW5pdGlvbiBoYXMgYmVlbiBtb3ZlZCwgcmVuYW1lZCwgb3IgcGVyaGFwcyBhIHByZXByb2Nlc3NvciBndWFyZCBpcyBjb25kaXRpb25hbGx5IG9taXR0aW5nIGl0cyBpbmNsdXNpb24uIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUga3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9MTA1MT12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEzMi0vKiBBbGwga3phbGxvYyBhbGlhc2VzIGZvciBrbWFsbG9jXyhvYmp8b2Jqc3xmbGV4KS4gKi9cbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMzM6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTM0LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzNTojZGVmaW5lIGt6YWxsb2Nfb2JqcyhQLCBDT1VOVCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEzNi1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MjAwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2hlYWZfc2l6ZShzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEwLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MjExOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEyLVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEwMwoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQ6IENUVSBDQU4gRkQgUENJIERyaXZlciBQcm9iZSoqCgpPa2F5LCBhbm90aGVyIG5ldyBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9zbGFiLmhgLi4uIGludGVyZXN0aW5nLCBidXQgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcyBvZiB0aGlzIHBhdGNoLiBTZWVtcyBsaWtlIHdlIGhhdmUgYSBmdW5jdGlvbmFsIGZpeCBoZXJlLiBTcGVjaWZpY2FsbHksIGEgdHdlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhcnQgb2YgdGhlIFBDSSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24g4oCTIHRoZSBgY3R1Y2FuX3BjaV9wcm9iZWAgZnVuY3Rpb24gdG8gYmUgcHJlY2lzZS4gSW1tZWRpYXRlbHksIG15IG1pbmQgZ29lcyB0byBmdXp6aW5nLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCBiZWdzIGZvciBpdC4gQSBmaXggaW4gZXJyb3IgaGFuZGxpbmc/IFRoYXQgbWVhbnMgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgY29ybmVyIGNhc2VzLgoKU28sIGxldCYjMzk7cyBjb2RpZnkgdGhpcyBpbnRvIGEgZnV6emluZyBwbGFuLiBgV29ydGhGdXp6aW5nYD8gQWJzb2x1dGVseSwgdHJ1ZS4gYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgY3R1Y2FuX3BjaV9wcm9iZWAuIE5vdywgd2UgbmVlZCB0aGUgcmlnaHQgY29uZmlncyBlbmFibGVkOiBgQ0FOYCwgYENBTl9ERVZgLCBhbmQgY3J1Y2lhbGx5LCBgQ0FOX0NUVUNBTkZEX1BDSWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIHJlY3RpZmllcyBhbiBpbmNvcnJlY3QgdW5tYXAgYWRkcmVzcyB3aXRoaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIHRoZSBgQ1RVIENBTiBGRGAgUENJIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgdmVyeSByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIHBvdGVudGlhbGx5IGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24sIG9yIGV2ZW4gYSBkb2RneSBkZXZpY2UgY29uZmlndXJhdGlvbi4gR290dGEgdGVzdCBpdCEgTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9DVFVDQU5GRF9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHVjYW5fcGNpX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluY29ycmVjdCB1bm1hcCBhZGRyZXNzIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIHRoZSBDVFUgQ0FOIEZEIFBDSSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9DVFVDQU5GRF9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHVjYW5fcGNpX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluY29ycmVjdCB1bm1hcCBhZGRyZXNzIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIHRoZSBDVFUgQ0FOIEZEIFBDSSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo0Ni42NDQ3MzQyMDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njc5NjIzMDI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9ERVZcIixcbiAgICBcIkNBTl9DVFVDQU5GRF9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdHVjYW5fcGNpX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5jb3JyZWN0IHVubWFwIGFkZHJlc3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgdGhlIENUVSBDQU4gRkQgUENJIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo0Ni42NDQ3Mzk0MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjM4NDQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkMjcwNDcyZjM5OTI2OWQxY2IxNmYyZmI1NmQ4Y2FiNTZhMGY5MzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMDM6NDg6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jIGIvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXFxuaW5kZXggNjI1Nzg4ZmE4OTc2NjIuLmY4NDU5NTFjNWQ1MTM5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuY1xcbkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuIFxcdGtmcmVlKGJkYXRhKTtcXG4gZXJyX3BjaV9pb3VubWFwX2JhcjA6XFxuLVxcdHBjaV9pb3VubWFwKHBkZXYsIGNyYV9hZGRyKTtcXG4rXFx0cGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTtcXG4gZXJyX3BjaV9pb3VubWFwX2JhcjE6XFxuIFxcdHBjaV9pb3VubWFwKHBkZXYsIGFkZHIpO1xcbiBlcnJfcmVsZWFzZV9yZWdpb25zOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo0Ny4wOTE3NTY4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2MzQ5MTgwNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0RFVlwiLFxuICAgIFwiQ0FOX0NUVUNBTkZEX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0dWNhbl9wY2lfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbmNvcnJlY3QgdW5tYXAgYWRkcmVzcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiB0aGUgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkMjcwNDcyZjM5OTI2OWQxY2IxNmYyZmI1NmQ4Y2FiNTZhMGY5MzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwMzo0ODo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYyBiL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuY1xuaW5kZXggNjI1Nzg4ZmE4OTc2NjIuLmY4NDU5NTFjNWQ1MTM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmNcbkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIFx0a2ZyZWUoYmRhdGEpO1xuIGVycl9wY2lfaW91bm1hcF9iYXIwOlxuLVx0cGNpX2lvdW5tYXAocGRldiwgY3JhX2FkZHIpO1xuK1x0cGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTtcbiBlcnJfcGNpX2lvdW5tYXBfYmFyMTpcbiBcdHBjaV9pb3VubWFwKHBkZXYsIGFkZHIpO1xuIGVycl9yZWxlYXNlX3JlZ2lvbnM6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo0Ny4wOTE3NTc5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMDEwMDY4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUENJIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmNgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYSBjb3JyZWN0aW9uIGluIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGBjdHVjYW5fcGNpX3Byb2JlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHN3YXBwaW5nIGBwY2lfaW91bm1hcChwZGV2LCBjcmFfYWRkcik7YCBmb3IgYHBjaV9pb3VubWFwKHBkZXYsIGJhcjBfYmFzZSk7YC4gSXQncyBhIGNsZWFudXAsIG5vdGhpbmcgdG9vIGV4Y2l0aW5nIGluIGl0c2VsZi5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMgd2l0aCB0aGVzZSB0aGluZ3MsIGlzIFwiY2FuIHdlIGZ1enogdGhpcz9cIiBBbmQgdGhhdCBoaW5nZXMgb24gd2hldGhlciB0aGlzIGRyaXZlciBpcyBldmVuICpwcm9iZWQqIGluIGFuIGVtdWxhdGVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gUmVhZGluZyB0aGUgY29kZSwgaXQncyBhIFBDSSBkcml2ZXIgZm9yIENUVSBDQU4gRkQuIFJpZ2h0LCBhIHNwZWNpZmljIElQIGNvcmUuIFRoYXQncyB1c3VhbGx5IGEgYmFkIHNpZ24gZm9yIFFFTVUgY29tcGF0aWJpbGl0eSwgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgcmFyZWx5IHdvcmsgb3V0LW9mLXRoZS1ib3guIE15IGd1dCBzYXlzIFwicHJvYmFibHkgbm90LFwiIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZW11bGF0b3IgZm9yIHRoaXMgcGFydGljdWxhciBoYXJkd2FyZS5cblxuQnV0IHRoaXMgaXMgYW4gKmVycm9yKiBwYXRoIHdpdGhpbiBgLnByb2JlYC4gVGhlIGZ1bmN0aW9uIHdvbid0IGV2ZW4gKmJlKiBjYWxsZWQgaWYgdGhlIGRldmljZSBpc24ndCBwcmVzZW50LCByaWdodD8gQW5kIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIG1hcmsgdGhlc2UgYXMgbm90IHdvcnRoIGZ1enppbmcgZm9yIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCByZXF1aXJlIHJlYWwgaGFyZHdhcmUuIEl0J3MgYSBwcm9iZSBlcnJvciBwYXRoLlxuXG5Pa2F5LCB3YWl0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbiB3aXRoIGBzeXpfcGNpX3ZwY2lgIGFuZCBzaW1pbGFyIG1lY2hhbmlzbXMuIEJ1dCBpcyBpdCBzb3BoaXN0aWNhdGVkIGVub3VnaCB0byBpbmplY3QgYSBDVFUgQ0FOIEZEIGRldmljZT8gVGhlIGluamVjdGlvbiBtaWdodCBiZSB0aGVyZSwgYnV0IGl0IGxpa2VseSByZXF1aXJlcyBkZXRhaWxlZCBkcml2ZXIga25vd2xlZGdlLlxuXG5TbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRyaXZlciBpdHNlbGYgaW4gbW9yZSBkZXRhaWwuIExldCdzIHNlZSBpZiB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGlzIHN1cHBvcnRlZCBieSBTeXprYWxsZXIncyB2aXJ0dWFsIFBDSSBpbmplY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTUsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo1NC4wOTI3NjY3OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5Mzk5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0dWNhbl9wY2lfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz01Mz1zdGF0aWMgdm9pZCBjdHVjYW5fcGNpX3NldF9kcnZkYXRhKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02NC0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM6NjU6ICogY3R1Y2FuX3BjaV9wcm9iZSAtIFBDSSByZWdpc3RyYXRpb24gY2FsbFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02Ni0gKiBAcGRldjpcXHRIYW5kbGUgdG8gdGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzMtICovXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjc0OnN0YXRpYyBpbnQgY3R1Y2FuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9MjcwPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjdHVjYW5fcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzItXFx0LmlkX3RhYmxlID0gY3R1Y2FuX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjI3MzpcXHQucHJvYmUgPSBjdHVjYW5fcGNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzQtXFx0LnJlbW92ZSA9IGN0dWNhbl9wY2lfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo1NC40MTIxNzA2MjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzcyNDM0NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGEgU2ltcGxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgZml4IGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgY3R1Y2FuX3BjaV9wcm9iZWAuIFRoZSBkZXZpY2UgaW4gcXVlc3Rpb24gaXMgYSBQQ0kgZGV2aWNlLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uIE5vdywgY2FuIHN5emthbGxlciBldmVuICpyZWFjaCogdGhpcyBlcnJvciBwYXRoPyBZZWFoLCBpdCBzaG91bGQgYmUgcG9zc2libGUuIEkndmUgc2VlbiBpdCBkb25lIHdpdGggYHN5el9wY2lfdnBjaWAsIGBzeXpfcGNpX2RldmljZV9hZGRgLCBvciBzaW1pbGFyIHN5c2NhbGxzLiBJZiB0aGUgUENJIHN1YnN5c3RlbSBpcyBlbmFibGVkIGFuZCBzeXprYWxsZXIgY2FuIGluamVjdCBQQ0kgZGV2aWNlcywgdGhlbiBpdCAqc2hvdWxkKiBiZSBhYmxlIHRvIGZ1enogUENJIHByb2JlIGZ1bmN0aW9ucy5cblxuQnV0IGlzIHRoaXMgcGF0Y2gsIGEgc2luZ2xlIGxpbmUgY2hhbmdlIOKAkyBzcGVjaWZpY2FsbHksIHN3YXBwaW5nIGBjcmFfYWRkcmAgZm9yIGBiYXIwX2Jhc2VgIGluIGEgYHBjaV9pb3VubWFwYCBjYWxsIGluIGFuIGVycm9yIHBhdGgg4oCTIGV2ZW4gd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nPyBJdCdzIGEgUENJIGRyaXZlciBwcm9iZSBlcnJvciBwYXRoLCBzbyB0aGVyZSdzIGEgY2hhbmNlLiBJZiB0aGUgZnV6emVyIGNhbiBpbmplY3QgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBhbiBlcnJvciAqZHVyaW5nKiB0aGUgcHJvYmUsIHdlIG1pZ2h0IHNlZSB0aGlzIGNvZGUgZ2V0IGV4ZXJjaXNlZC4gU28sIGJlZm9yZSBJIGRpc21pc3MgaXQgb3V0cmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGBjdHVjYW5mZF9wY2lfcHJvYmVgIGFjdHVhbGx5IGRvZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlJ3MgbG9naWMgaXMgdGhlIGtleSB0byBzZWVpbmcgaWYgc3l6a2FsbGVyIGNhbiBnZXQgdG8gdGhlIGVycm9yIHBhdGghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDg6NTkuMTg0NjA3MjE1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRsaXN0X2FkZChcXHUwMDI2cHJpdi1cXHUwMDNlcGVlcnNfb25fcGRldiwgXFx1MDAyNmJkYXRhLVxcdTAwM2VuZGV2X2xpc3RfaGVhZCk7XFxuICA2MTpcXHRcXHRwcml2LVxcdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDtcXG4gIDYyOlxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0LyoqXFxuICA2NTpcXHQgKiBjdHVjYW5fcGNpX3Byb2JlIC0gUENJIHJlZ2lzdHJhdGlvbiBjYWxsXFxuICA2NjpcXHQgKiBAcGRldjpcXHRIYW5kbGUgdG8gdGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlXFxuICA2NzpcXHQgKiBAZW50OlxcdFBvaW50ZXIgdG8gdGhlIGVudHJ5IGZyb20gY3R1Y2FuX3BjaV90YmxcXG4gIDY4OlxcdCAqXFxuICA2OTpcXHQgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcmVnaXN0cmF0aW9uIGZvciB0aGUgQ0FOXFxuICA3MDpcXHQgKiBkZXZpY2UuXFxuICA3MTpcXHQgKlxcbiAgNzI6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWUgb24gZXJyb3JcXG4gIDczOlxcdCAqL1xcbiAgNzQ6XFx0c3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAgNzU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuICA3NjpcXHR7XFxuICA3NzpcXHRcXHRzdHJ1Y3QgZGV2aWNlXFx0KmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuICA3ODpcXHRcXHR1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhID0gZW50LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gIDc5OlxcdFxcdHN0cnVjdCBjdHVjYW5fcGNpX2JvYXJkX2RhdGEgKmJkYXRhO1xcbiAgODA6XFx0XFx0dm9pZCBfX2lvbWVtICphZGRyO1xcbiAgODE6XFx0XFx0dm9pZCBfX2lvbWVtICpjcmFfYWRkcjtcXG4gIDgyOlxcdFxcdHZvaWQgX19pb21lbSAqYmFyMF9iYXNlO1xcbiAgODM6XFx0XFx0dTMyIGNyYV9hMnBfaWU7XFxuICA4NDpcXHRcXHR1MzIgY3R1Y2FuX2lkID0gMDtcXG4gIDg1OlxcdFxcdGludCByZXQ7XFxuICA4NjpcXHRcXHR1bnNpZ25lZCBpbnQgbnR4YnVmcztcXG4gIDg3OlxcdFxcdHVuc2lnbmVkIGludCBudW1fY29yZXMgPSAxO1xcbiAgODg6XFx0XFx0dW5zaWduZWQgaW50IGNvcmVfaSA9IDA7XFxuICA4OTpcXHRcXHRpbnQgaXJxO1xcbiAgOTA6XFx0XFx0aW50IG1zaV9vayA9IDA7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbiAgOTM6XFx0XFx0aWYgKHJldCkge1xcbiAgOTQ6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJwY2lfZW5hYmxlX2RldmljZSBGQUlMRURcXFxcblxcXCIpO1xcbiAgOTU6XFx0XFx0XFx0Z290byBlcnI7XFxuICA5NjpcXHRcXHR9XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdHJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgS0JVSUxEX01PRE5BTUUpO1xcbiAgOTk6XFx0XFx0aWYgKHJldCkge1xcbiAxMDA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJwY2lfcmVxdWVzdF9yZWdpb25zIEZBSUxFRFxcXFxuXFxcIik7XFxuIDEwMTpcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2RldmljZTtcXG4gMTAyOlxcdFxcdH1cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0cmV0ID0gcGNpX2VuYWJsZV9tc2kocGRldik7XFxuIDEwNTpcXHRcXHRpZiAoIXJldCkge1xcbiAxMDY6XFx0XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiTVNJIGVuYWJsZWRcXFxcblxcXCIpO1xcbiAxMDc6XFx0XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIDEwODpcXHRcXHRcXHRtc2lfb2sgPSAxO1xcbiAxMDk6XFx0XFx0fVxcbiAxMTA6XFx0XFxuIDExMTpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJjdHVjYW4gQkFSMCAweCUwOGxseCAweCUwOGxseFxcXFxuXFxcIixcXG4gMTEyOlxcdFxcdFxcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSxcXG4gMTEzOlxcdFxcdFxcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJjdHVjYW4gQkFSMSAweCUwOGxseCAweCUwOGxseFxcXFxuXFxcIixcXG4gMTE2OlxcdFxcdFxcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSxcXG4gMTE3OlxcdFxcdFxcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRhZGRyID0gcGNpX2lvbWFwKHBkZXYsIDEsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpO1xcbiAxMjA6XFx0XFx0aWYgKCFhZGRyKSB7XFxuIDEyMTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlBDSSBCQVIgMSBjYW5ub3QgYmUgbWFwcGVkXFxcXG5cXFwiKTtcXG4gMTIyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDEyMzpcXHRcXHRcXHRnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbnM7XFxuIDEyNDpcXHRcXHR9XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdC8qIEN5Y2xvbmUgSVYgUENJIEV4cHJlc3MgQ29udHJvbCBSZWdpc3RlcnMgQXJlYSAqL1xcbiAxMjc6XFx0XFx0YmFyMF9iYXNlID0gcGNpX2lvbWFwKHBkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpO1xcbiAxMjg6XFx0XFx0aWYgKCFiYXIwX2Jhc2UpIHtcXG4gMTI5OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiUENJIEJBUiAwIGNhbm5vdCBiZSBtYXBwZWRcXFxcblxcXCIpO1xcbiAxMzA6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTMxOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9pb3VubWFwX2JhcjE7XFxuIDEzMjpcXHRcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdGlmIChkcml2ZXJfZGF0YSA9PSBDVFVDQU5fV0lUSE9VVF9DVFVDQU5fSUQpIHtcXG4gMTM1OlxcdFxcdFxcdGNyYV9hZGRyID0gYmFyMF9iYXNlO1xcbiAxMzY6XFx0XFx0XFx0bnVtX2NvcmVzID0gMjtcXG4gMTM3OlxcdFxcdH0gZWxzZSB7XFxuIDEzODpcXHRcXHRcXHRjcmFfYWRkciA9IGJhcjBfYmFzZSArIENUVUNBTl9CQVIwX0NSQV9CQVNFO1xcbiAxMzk6XFx0XFx0XFx0Y3R1Y2FuX2lkID0gaW9yZWFkMzIoYmFyMF9iYXNlICsgQ1RVQ0FOX0JBUjBfQ1RVQ0FOX0lEKTtcXG4gMTQwOlxcdFxcdFxcdGRldl9pbmZvKGRldiwgXFxcImN0dWNhbl9pZCAweCUwOGx4XFxcXG5cXFwiLCAodW5zaWduZWQgbG9uZyljdHVjYW5faWQpO1xcbiAxNDE6XFx0XFx0XFx0bnVtX2NvcmVzID0gY3R1Y2FuX2lkIFxcdTAwMjYgMHhmO1xcbiAxNDI6XFx0XFx0fVxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHRpcnEgPSBwZGV2LVxcdTAwM2VpcnE7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdG50eGJ1ZnMgPSA0O1xcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHRiZGF0YSA9IGt6YWxsb2Nfb2JqKCpiZGF0YSk7XFxuIDE0OTpcXHRcXHRpZiAoIWJkYXRhKSB7XFxuIDE1MDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxNTE6XFx0XFx0XFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMDtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmJkYXRhLVxcdTAwM2VuZGV2X2xpc3RfaGVhZCk7XFxuIDE1NTpcXHRcXHRiZGF0YS1cXHUwMDNlYmFyMF9iYXNlID0gYmFyMF9iYXNlO1xcbiAxNTY6XFx0XFx0YmRhdGEtXFx1MDAzZWNyYV9iYXNlID0gY3JhX2FkZHI7XFxuIDE1NzpcXHRcXHRiZGF0YS1cXHUwMDNlYmFyMV9iYXNlID0gYWRkcjtcXG4gMTU4OlxcdFxcdGJkYXRhLVxcdTAwM2V1c2VfbXNpID0gbXNpX29rO1xcbiAxNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ4OjU5LjE4NDY4ODg2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MDk5Nzk2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUENJIERyaXZlciBFcnJvciBQYXRoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZXJyb3IgcGF0aCwgYGVycl9wY2lfaW91bm1hcF9iYXIwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZ2V0cyB0cmlnZ2VyZWQgaWYgYGt6YWxsb2Nfb2JqYCBmYWlscy4gV2FpdCwgaXMgdGhhdCBqdXN0IGEgbWFjcm8gZm9yIGBremFsbG9jYD8gTGV0IG1lIHNlZS4uLiB5ZWFoLCBpdCBsb29rcyBsaWtlIGBremFsbG9jX29iaigqYmRhdGEpO2AgaXMgbW9zdCBsaWtlbHkgYGt6YWxsb2Moc2l6ZW9mKCpiZGF0YSksIEdGUF9LRVJORUwpYC4gUHJvYmFibHkgYSBjdXN0b20gbWFjcm8gaW4gdGhpcyBkcml2ZXIgb3Iga2VybmVsIHZlcnNpb24uIEdvdCBpdC4gSWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCB3ZSBoaXQgYGVycl9wY2lfaW91bm1hcF9iYXIwYCwgd2hpY2ggdW5tYXBzIGBiYXIwX2Jhc2VgLlxuXG5UaGUgYnVnLCBhcHBhcmVudGx5LCB3YXMgdGhhdCBpdCB3YXMgdW5tYXBwaW5nIGBjcmFfYWRkcmAgaW5zdGVhZCBvZiBgYmFyMF9iYXNlYC4gQW5kIGZyb20gd2hhdCBJIHNlZSBgY3JhX2FkZHJgIGNhbiBiZSBgYmFyMF9iYXNlYCBvciBgYmFyMF9iYXNlICsgQ1RVQ0FOX0JBUjBfQ1JBX0JBU0VgLiBUaGF0IHVubWFwcGluZyBvZiBgY3JhX2FkZHJgIGlzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGlmIGl0J3Mgb2Zmc2V0LiBPa2F5LlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbjogQ2FuIHdlIGZ1enogdGhpcz8gSXQncyBhIFBDSSBkcml2ZXIncyBwcm9iZSBlcnJvciBwYXRoLiBTeXprYWxsZXIgY2FuIGluamVjdCBQQ0kgZGV2aWNlcyBhbmQgdHJpZ2dlciBwcm9iZSBmdW5jdGlvbnMsIHBsdXMgaXQgY2FuIHVzZSBmYXVsdCBpbmplY3Rpb24gdG8gbWFrZSBga3phbGxvY2AgZmFpbCwgd2hpY2ggc2hvdWxkIGRlZmluaXRlbHkgdHJpZ2dlciB0aGlzIGV4YWN0IGVycm9yIHBhdGguIEV4Y2VsbGVudCFcblxuQnV0LCBkb2VzIHN5emthbGxlciBzdXBwb3J0IHRoaXMgKnNwZWNpZmljKiBkcml2ZXIsIHRoZSBDVFUgQ0FOIEZEIFBDSSBkcml2ZXI/IExldCBtZSBzZWUuLi4gSSdsbCBjaGVjayBpZiBpdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZS4gSG1tLCB0aGUgbm90ZSBhYm91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBjYXJkcyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLi4uIElzIENUVSBDQU4gRkQgc3VjaCBhIHZlbmRvci1zcGVjaWZpYyBjYXJkPyBJdCdzIG9wZW4tc291cmNlLCBmcm9tIHRoZSBDemVjaCBUZWNobmljYWwgVW5pdmVyc2l0eSwgYW5kIGNhbiBiZSBpbXBsZW1lbnRlZCBvbiBGUEdBcy4gT2theSwgbm90IGluaGVyZW50bHkgdmVuZG9yLXNwZWNpZmljLlxuXG5TbywgaXMgaXQgZW11bGF0ZWQgaW4gUUVNVT8gUUVNVSBoYXMgc29tZSBDQU4gZW11bGF0aW9uLCBTSkExMDAwLCBLdmFzZXIsIGV0Yy4sIGJ1dCBkb2VzIGl0IGVtdWxhdGUgKnRoaXMqIHNwZWNpZmljIG9uZT8gSSBjYW4gY2hlY2sgdGhlIFFFTVUgc291cmNlIG9yIGRvIGEgcXVpY2sgc2VhcmNoLi4uIFdhaXQgYSBtaW51dGUuLi4gWWVzISBRRU1VIGRvZXMgZW11bGF0ZSBDVFUgQ0FOIEZEISBJdCB3YXMgYWRkZWQgYXJvdW5kIDIwMjAuIE9rYXksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IGlmIHRoYXQncyByaWdodCwgdGhpcyBpcyBsb29raW5nIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTowNy4wOTQ2NzA1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM4MDExNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1RVIENBTiBGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnPTE9Y29uZmlnIENBTl9DVFVDQU5GRFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMy1cXHRoZWxwXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWc6NDpcXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIENUVSBDQU4gRkQgb3Blbi1zb3VyY2UgSVAgY29yZS5cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZy01LVxcdCAgTW9yZSBkb2N1bWVudGF0aW9uIGFuZCBjb3JlIHNvdXJjZXMgYXQgcHJvamVjdCBwYWdlXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC0zLSAqXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkLmg6NDogKiBDVFUgQ0FOIEZEIElQIENvcmVcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC01LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaD0yOT1zdHJ1Y3QgY3R1Y2FuX3ByaXYge1xcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkLmgtNjItICogQGRldjpcXHRIYW5kbGUgdG8gdGhlIGdlbmVyaWMgZGV2aWNlIHN0cnVjdHVyZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oOjYzOiAqIEBhZGRyOlxcdEJhc2UgYWRkcmVzcyBvZiBDVFUgQ0FOIEZEIGNvcmUgYWRkcmVzc1xcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oLTY0LSAqIEBpcnE6XFx0SW50ZXJydXB0IG51bWJlclxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0zLSAqXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtNS0gKlxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0xNjA9c3RhdGljIGNvbnN0IGNoYXIgKmN0dWNhbl9zdGF0ZV90b19zdHIoZW51bSBjYW5fc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTE2OS0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjE3MDogKiBjdHVjYW5fcmVzZXQoKSAtIElzc3VlcyBzb2Z0d2FyZSByZXNldCByZXF1ZXN0IHRvIENUVSBDQU4gRkRcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTE3MS0gKiBAbmRldjpcXHRQb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jPTE3NT1zdGF0aWMgaW50IGN0dWNhbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTk3LS8qKlxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MTk4OiAqIGN0dWNhbl9zZXRfYnRyKCkgLSBTZXRzIENBTiBidXMgYml0IHRpbWluZyBpbiBDVFUgQ0FOIEZEXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0xOTktICogQG5kZXY6XFx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0yMDU9c3RhdGljIGludCBjdHVjYW5fc2V0X2J0cihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LCBib29sIG5vbWluYWwpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTIyMi1cXHQgKiBwaGFzZTFfc2VnIGNvbWJpbmVkLiB0c2VnMSBpcyB0aGVuIHNwbGl0IGluIGhhbGYgYW5kIHN0b3JlZCBpbnRvIHByb2dfc2VnIGFuZCBwaGFzZV9zZWcxLlxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MjIzOlxcdCAqIEluIENUVSBDQU4gRkQsIFBST1AgaXMgNi83IGJpdHMgd2lkZSBidXQgUEgxIG9ubHkgNi81LCBzbyB3ZSBtdXN0IHJlLWRpc3RyaWJ1dGUgdGhlXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0yMjQtXFx0ICogdmFsdWVzIGhlcmUuXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jPTI3NT1zdGF0aWMgaW50IGN0dWNhbl9zZXRfZGF0YV9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTI4NC0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjI4NTogKiBjdHVjYW5fc2V0X3NlY29uZGFyeV9zYW1wbGVfcG9pbnQoKSAtIFNldHMgc2Vjb25kYXJ5IHNhbXBsZSBwb2ludCBpbiBDVFUgQ0FOIEZEXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0yODYtICogQG5kZXY6XFx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0yOTA9c3RhdGljIGludCBjdHVjYW5fc2V0X3NlY29uZGFyeV9zYW1wbGVfcG9pbnQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTMyMS0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjMyMjogKiBjdHVjYW5fc2V0X21vZGUoKSAtIFNldHMgQ1RVIENBTiBGRHMgbW9kZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMzIzLSAqIEBwcml2OlxcdFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jPTU5Nj1zdGF0aWMgbmV0ZGV2X3R4X3QgY3R1Y2FuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTY0MC0gKiBjdHVjYW5fcmVhZF9yeF9mcmFtZSgpIC0gUmVhZHMgZnJhbWUgZnJvbSBSWCBGSUZPXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzo2NDE6ICogQHByaXY6XFx0UG9pbnRlciB0byBDVFUgQ0FOIEZEJ3MgcHJpdmF0ZSBkYXRhXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy02NDItICogQGNmOlxcdFxcdFBvaW50ZXIgdG8gQ0FOIGZyYW1lIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz03MTA9c3RhdGljIGludCBjdHVjYW5fcngoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTc0OC0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjc0OTogKiBjdHVjYW5fcmVhZF9mYXVsdF9zdGF0ZSgpIC0gUmVhZHMgQ1RVIENBTiBGRHMgZmF1bHQgY29uZmluZW1lbnQgc3RhdGUuXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy03NTAtICogQHByaXY6XFx0UG9pbnRlciB0byBwcml2YXRlIGRhdGFcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9OTk1PXN0YXRpYyB2b2lkIGN0dWNhbl90eF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTEwOTUtICpcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjEwOTY6ICogVGhpcyBpcyB0aGUgQ1RVIENBTiBGRCBJU1IuIEl0IGNoZWNrcyBmb3IgdGhlIHR5cGUgb2YgaW50ZXJydXB0XFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0xMDk3LSAqIGFuZCBpbnZva2VzIHRoZSBjb3JyZXNwb25kaW5nIElTUi5cXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9MTQ1OT1NT0RVTEVfQVVUSE9SKFxcXCJPbmRyZWogSWxsZSBcXHUwMDNjb25kcmVqLmlsbGVAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MTQ2MDpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNUVSBDQU4gRkQgaW50ZXJmYWNlXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfa2ZyYW1lLmgtMy0gKlxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rZnJhbWUuaDo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rZnJhbWUuaC01LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfa3JlZ3MuaC0zLSAqXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2tyZWdzLmg6NDogKiBDVFUgQ0FOIEZEIElQIENvcmVcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfa3JlZ3MuaC01LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMy0gKlxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy01LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9NzQ9c3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTE3My1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzoxNzQ6XFx0XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiQ1RVIENBTiBGRCBjb3JlICVkIGluaXRpYWxpemF0aW9uIGZhaWxlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMTc1LVxcdFxcdFxcdFxcdCBjb3JlX2kpO1xcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jPTI4MT1NT0RVTEVfQVVUSE9SKFxcXCJQYXZlbCBQaXNhIFxcdTAwM2NwaXNhQGNtcC5mZWxrLmN2dXQuY3pcXHUwMDNlXFxcIik7XFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjI4MjpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNUVSBDQU4gRkQgZm9yIFBDSSBidXNcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jLTMtICpcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGxhdGZvcm0uYzo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jLTUtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jPTEyNT1NT0RVTEVfQVVUSE9SKFxcXCJNYXJ0aW4gSmVyYWJla1xcXCIpO1xcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jOjEyNjpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNUVSBDQU4gRkQgZm9yIHBsYXRmb3JtXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjA3LjQyODQ3Njk0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjIzODA0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIGBjdHVjYW5fcGNpX3Byb2JlYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgb25lLWxpbmUgcGF0Y2ggaW4gYGN0dWNhbl9wY2lfcHJvYmVgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBza2lwIGZ1enppbmcgY2VydGFpbiBkcml2ZXIgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcXVhbGlmaWVzLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBzcGVjaWZpYyBhYm91dCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgb3IgdGVhcmRvd24gcm91dGluZXMsIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsLlxuXG5GaXJzdCB0aG91Z2h0OiBUaGlzIGlzIGp1c3QgYSBzaW5nbGUtbGluZSBlcnJvciBoYW5kbGluZyBmaXggd2l0aGluIGAucHJvYmVgLCBub3QgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLiBBbmQsIGNydWNpYWxseSwgYENUVSBDQU4gRkRgIGlzIGVtdWxhdGVkIGluIFFFTVUsIHNvIGl04oCZcyBub3QgdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZSB0aGF0IHRoZSBmdXp6ZXIgd291bGRuJ3QgaGF2ZSBhY2Nlc3MgdG8uIEkga25vdyB0aGF0IGJlY2F1c2UgaXQncyBpbiBgaHcvbmV0L2Nhbi9jdHVjYW5fY29yZS5jYCBhbmQgYGh3L25ldC9jYW4vY3R1Y2FuX3BjaS5jYC4gVGhlIGluc3RydWN0aW9ucyBzYXkgbm8gdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhpcyBpc24ndCB0aGF0LlxuXG5NeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGxlYW4gdG93YXJkcyAqZnV6emFibGUqLiBUaGUgZXJyb3IgcGF0aCBpbiBhIGAucHJvYmVgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBieSBmdXp6aW5nLiBBIGZ1enplciBjYW4gaW5qZWN0IGEgUENJIGRldmljZSBhbmQgdGhlbiB0cmlnZ2VyIGZhaWx1cmVzLCBsaWtlIHdpdGggZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgQkFScy5cblxuQnV0IHdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgYWxzbyBzYXkgbm8gdGVhcmRvd24gY2FsbGJhY2tzLCBsaWtlIGAucmVtb3ZlYCBvciBgLnNodXRkb3duYC4gVGhpcyAqaXMqIGEgYC5wcm9iZWAgZnVuY3Rpb24sIG5vdCBgLnJlbW92ZWAsIG9yIGAuc2h1dGRvd25gLCBzbyBpdCdzIG5vdCBhIHRlYXJkb3duIGNhbGxiYWNrLiBCdXQgaXMgaXQgd29ydGggaXQ/XG5cbk9rYXksIG9rYXksIEkgdGhpbmsgdGhpcyAqaXMqIHdvcnRoIGZ1enppbmcuIFN5emthbGxlciBpcyBkZWZpbml0ZWx5IGNhcGFibGUgb2YgaGl0dGluZyBQQ0kgcHJvYmUgZnVuY3Rpb25zIGFuZCB0aGVpciBlcnJvciBwYXRocy5cblxuTGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmIGFnYWluLiBJdCdzIGEgdmVyeSBzaW1wbGUgY2hhbmdlIGluIHRoZSBgY3R1Y2FuX3BjaV9wcm9iZWAgZXJyb3IgaGFuZGxpbmcgcGF0aC4gSWYgd2UgZnV6eiBpdCwgdGhlIGZvY3VzIHdvdWxkIGJlIG9uIGBjdHVjYW5fcGNpX3Byb2JlYC4gVG8gcnVuIGl0LCBJJ2QgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnV6emVyIGhhcyBgQ09ORklHX0NBTl9DVFVDQU5GRGAgYW5kIGBDT05GSUdfQ0FOX0NUVUNBTkZEX1BDSWAgZW5hYmxlZC4gTGV0J3Mgc2VuZCBpdCB0byB0aGUgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjE1LjI5MDg1OTM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjA2NDEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0NUVUNBTkZEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnOjE6Y29uZmlnIENBTl9DVFVDQU5GRFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIkNUVSBDQU4tRkQgSVAgY29yZVxcXCIgaWYgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZzoxNDpjb25maWcgQ0FOX0NUVUNBTkZEX1BDSVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJDVFUgQ0FOLUZEIElQIGNvcmUgUENJL1BDSWUgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMjMtXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWc6MjQ6Y29uZmlnIENBTl9DVFVDQU5GRF9QTEFURk9STVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJDVFUgQ0FOLUZEIElQIGNvcmUgcGxhdGZvcm0gKEZQR0EsIFNvQykgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OToxNS4zNTY5MzI2NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2OTk3NjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBEZXBlbmRlbmNpZXM6IENBTl9DVFVDQU5GRF9QQ0kqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgQ0FOX0NUVUNBTkZEX1BDSWAuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBvdGhlciBjb21wb25lbnRzLCBkcml2ZXJzLCBvciBtb2R1bGVzIHRoaXMgcGFydGljdWxhciBlbGVtZW50IHJlbGllcyB1cG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHBvdGVudGlhbCBpbXBhY3RzIG9mIGNoYW5nZXMsIHRyb3VibGVzaG9vdGluZyBpc3N1ZXMsIG9yIGV2ZW4gc2ltcGx5IHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnk6IGFyZSB0aGVyZSBhbnkga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljIGhhcmR3YXJlIHJlc291cmNlcywgb3Igb3RoZXIgc29mdHdhcmUgY29tcG9uZW50cyBpdCBkZXBlbmRzIG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtL2Rvd25zdHJlYW0gY29uc2lkZXJhdGlvbnM/IFNwZWNpZmljYWxseSwgZG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCBhbnkgb3RoZXIgc3Vic3lzdGVtcyB0aGF0IG1pZ2h0IHJlcXVpcmUgY29vcmRpbmF0aW9uPyBUaGlua2luZyBmdXJ0aGVyLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgaXQgbWlnaHQgaW50cm9kdWNlIHdpdGggb3RoZXIgaGFyZHdhcmUgb3Igc29mdHdhcmU/IEknbGwgbmVlZCB0byB0cmFjayB0aGVzZSBkZXBlbmRlbmNpZXMgZG93biBhbmQgbWFwIHRoZW0sIGlmIEkgaGF2ZW4ndCBhbHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjE4LjQyNjkxMTg2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBDQU5fQ1RVQ0FORkRcXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJDVFUgQ0FOLUZEIElQIGNvcmVcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDM6XFx0XFx0aGVscFxcbiAgIDQ6XFx0XFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoZSBDVFUgQ0FOIEZEIG9wZW4tc291cmNlIElQIGNvcmUuXFxuICAgNTpcXHRcXHQgIE1vcmUgZG9jdW1lbnRhdGlvbiBhbmQgY29yZSBzb3VyY2VzIGF0IHByb2plY3QgcGFnZVxcbiAgIDY6XFx0XFx0ICAoaHR0cHM6Ly9naXRsYWIuZmVsLmN2dXQuY3ovY2FuYnVzL2N0dWNhbmZkX2lwX2NvcmUpLlxcbiAgIDc6XFx0XFx0ICBUaGUgY29yZSBpbnRlZ3JhdGlvbiB0byBYaWxpbnggWnlucSBzeXN0ZW0gYXMgcGxhdGZvcm0gZHJpdmVyXFxuICAgODpcXHRcXHQgIGlzIGF2YWlsYWJsZSAoaHR0cHM6Ly9naXRsYWIuZmVsLmN2dXQuY3ovY2FuYnVzL3p5bnEvenlucS1jYW4tc2phMTAwMC10b3ApLlxcbiAgIDk6XFx0XFx0ICBJbXBsZW1lbnRhdGlvbiBvbiBJbnRlbCBGUEdBLWJhc2VkIFBDSSBFeHByZXNzIGJvYXJkIGlzIGF2YWlsYWJsZVxcbiAgMTA6XFx0XFx0ICBmcm9tIHByb2plY3QgKGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy9wY2llLWN0dWNhbmZkKSBhbmRcXG4gIDExOlxcdFxcdCAgb24gSW50ZWwgU29DIGZyb20gcHJvamVjdCAoaHR0cHM6Ly9naXRsYWIuZmVsLmN2dXQuY3ovY2FuYnVzL2ludGVsLXNvYy1jdHVjYW5mZCkuXFxuICAxMjpcXHRcXHQgIEd1aWRlcG9zdCBDVFUgRkVFIENBTiBidXMgcHJvamVjdHMgcGFnZSBodHRwczovL2NhbmJ1cy5wYWdlcy5mZWwuY3Z1dC5jei8gLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgQ0FOX0NUVUNBTkZEX1BDSVxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIkNUVSBDQU4tRkQgSVAgY29yZSBQQ0kvUENJZSBkcml2ZXJcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMTc6XFx0XFx0c2VsZWN0IENBTl9DVFVDQU5GRFxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBUaGlzIGRyaXZlciBhZGRzIFBDSS9QQ0llIHN1cHBvcnQgZm9yIENUVSBDQU4tRkQgSVAgY29yZS5cXG4gIDIwOlxcdFxcdCAgVGhlIHByb2plY3QgcHJvdmlkaW5nIEZQR0EgZGVzaWduIGZvciBJbnRlbCBFUDRDR1gxNSBiYXNlZCBEQjRDR1gxNVxcbiAgMjE6XFx0XFx0ICBQQ0llIGJvYXJkIHdpdGggUGlLUk9OLmNvbSBkZXNpZ25lZCB0cmFuc2NlaXZlciByaXNlciBzaGllbGQgaXMgYXZhaWxhYmxlXFxuICAyMjpcXHRcXHQgIGF0IGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy9wY2llLWN0dWNhbmZkIC5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIENBTl9DVFVDQU5GRF9QTEFURk9STVxcbiAgMjU6XFx0XFx0dHJpc3RhdGUgXFxcIkNUVSBDQU4tRkQgSVAgY29yZSBwbGF0Zm9ybSAoRlBHQSwgU29DKSBkcml2ZXJcXFwiXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBPRlxcbiAgMjc6XFx0XFx0c2VsZWN0IENBTl9DVFVDQU5GRFxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGUgY29yZSBoYXMgYmVlbiB0ZXN0ZWQgdG9nZXRoZXIgd2l0aCBPcGVuQ29yZXMgU0pBMTAwMFxcbiAgMzA6XFx0XFx0ICBtb2RpZmllZCB0byBiZSBDQU4gRkQgZnJhbWVzIHRvbGVyYW50IG9uIE1pY3JvWmVkIFp5bnEgYmFzZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MTguNDI3MDA0Njg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzkxOTMxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ0FOX0NUVUNBTkZEX1BDSWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoaXMgZGVwZW5kcyBkaXJlY3RseSBvbiBgUENJYCwgbm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIG9mIGNvdXJzZSwgaXQncyBhbHNvIGEgQ0FOIGNvbnRyb2xsZXIsIHNvIHRoYXQgbWFrZXMgbWUgdGhpbmsgaXQgbmVlZHMgdGhlIHBhcmVudCBgQ0FOYCBzdWJzeXN0ZW0gZW5hYmxlZCBhcyB3ZWxsLiBNeSBuZXh0IHN0ZXAgaGVyZSBpcyB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBzb21ld2hlcmUgaW4gYGRyaXZlcnMvbmV0L2Nhbi9gLiBMZXQgbWUgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvY2FuL0tjb25maWdgLCBvciBzb21ld2hlcmUgc2ltaWxhciwgdG8gcGlucG9pbnQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ0FOX0NUVUNBTkZEYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGFuZCB0aGF0IGV2ZXJ5dGhpbmcgaXMgd2lyZWQgdXAgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MjEuNjA2MjAwMzE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDgyMDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTI0Nz1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2Nhbi9jYzc3MC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjI0ODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI0OS1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2Nhbi9lc2QvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MjEuNjkxMDI1NjQ0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTE2NTQ2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIENBTiBCdXMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdmVyYXJjaGluZyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGlzIENBTiBidXMgbW9kdWxlLiBUaGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgcmVsZXZhbnQgZHJpdmVyIGRpcmVjdG9yeSwgd2hpY2ggSSBhc3N1bWUgaXMgYGRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBhcmVudCBjb25maWd1cmF0aW9ucyBhcmUgbGlrZWx5IGRlZmluZWQuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQncyBjb250cm9sbGluZyB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIHRoaXMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGxlYXJuIGFib3V0IHRoZSByZWxhdGlvbnNoaXBzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjI0LjM4MjY4MzYyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51Y29uZmlnIENBTl9ERVZcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJDQU4gRGV2aWNlIERyaXZlcnNcXFwiXFxuICAgNTpcXHRcXHRkZWZhdWx0IHlcXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gQ0FOXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIChDQU4pIGlzIHNlcmlhbCBjb21tdW5pY2F0aW9ucyBwcm90b2NvbCB1cCB0b1xcbiAgIDk6XFx0XFx0ICAxTWJpdC9zIGZvciBpdHMgb3JpZ2luYWwgcmVsZWFzZSAobm93IGtub3duIGFzIENsYXNzaWNhbCBDQU4pIGFuZCB1cFxcbiAgMTA6XFx0XFx0ICB0byA4TWJpdC9zIGZvciB0aGUgbW9yZSByZWNlbnQgQ0FOIHdpdGggRmxleGlibGUgRGF0YS1SYXRlXFxuICAxMTpcXHRcXHQgIChDQU4tRkQpLiBUaGUgQ0FOIGJ1cyB3YXMgb3JpZ2luYWxseSBtYWlubHkgZm9yIGF1dG9tb3RpdmUsIGJ1dCBpcyBub3dcXG4gIDEyOlxcdFxcdCAgd2lkZWx5IHVzZWQgaW4gbWFyaW5lIChOTUVBMjAwMCksIGluZHVzdHJpYWwsIGFuZCBtZWRpY2FsXFxuICAxMzpcXHRcXHQgIGFwcGxpY2F0aW9ucy4gTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQ0FOIG5ldHdvcmsgcHJvdG9jb2wgZmFtaWx5XFxuICAxNDpcXHRcXHQgIFBGX0NBTiBpcyBjb250YWluZWQgaW4gXFx1MDAzY0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4ucnN0XFx1MDAzZS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUaGlzIHNlY3Rpb24gY29udGFpbnMgYWxsIHRoZSBDQU4oLUZEKSBkZXZpY2UgZHJpdmVycyBpbmNsdWRpbmcgdGhlXFxuICAxNzpcXHRcXHQgIHZpcnR1YWwgb25lcy4gSWYgeW91IG93biBzdWNoIGRldmljZXMgb3IgcGxhbiB0byB1c2UgdGhlIHZpcnR1YWwgQ0FOXFxuICAxODpcXHRcXHQgIGludGVyZmFjZXMgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMsIHNheSBZIGhlcmUuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVG8gY29tcGlsZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OToyNC4zODI3NzczMzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3NzM3MzUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQ0FOIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgYENBTl9ERVZgIGFuZCBgQ0FOYC4gTmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIG92ZXJhbGwgQ0FOIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlci4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L2Nhbi9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGBDQU5gIG9wdGlvbi4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZCB3aGVuIGVuYWJsaW5nIHRoZSBDQU4gc3Vic3lzdGVtPyBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJyZWxhdGlvbnNoaXBzIG9mIHRoZXNlIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MjcuMzYwMTUzODA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzM4NDA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnLTUtXFxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cXG5uZXQvY2FuL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MjcuNDU3NTQ1MjgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTQ2MDQyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDQU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgQ0FOIGRyaXZlciBvcHRpb25zOiBgQ0FOYCwgYENBTl9ERVZgLCBhbmQgYENBTl9DVFVDQU5GRF9QQ0lgLiBJdCBzZWVtcyBsaWtlIGBDQU5fQ1RVQ0FORkRgIGlzIHNlbGVjdGVkIGluZGlyZWN0bHkgYnkgYENBTl9DVFVDQU5GRF9QQ0lgLiBUaGVyZWZvcmUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBJIG5lZWQgc2hvdWxkIGJlIGBbXCJDQU5cIiwgXCJDQU5fREVWXCIsIFwiQ0FOX0NUVUNBTkZEX1BDSVwiXWAuIFRoaXMgc2VlbXMgbG9naWNhbCBnaXZlbiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5Ob3csIEkgc2hvdWxkIHJlLWV4YW1pbmUgYGN0dWNhbl9wY2lfcHJvYmVgLiBJcyB0aGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IEFic29sdXRlbHkuIEl0J3MgYSBQQ0kgcHJvYmUgZnVuY3Rpb24sIGFuZCBzeXprYWxsZXIgaXMgd2VsbC1zdWl0ZWQgZm9yIHRhcmdldGluZyB0aG9zZS4gVGhlIGZvY3VzIHN5bWJvbCB3aWxsIGJlIGBjdHVjYW5fcGNpX3Byb2JlYC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIG1vZGlmaWVkIGJ5IHRoZSByZWNlbnQgcGF0Y2guIEJhc2VkIG9uIG15IHF1aWNrIHJldmlldywgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gYGN0dWNhbl9wY2lfcHJvYmVgLiBIb3dldmVyLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBvbmUgbGFzdCB0aW1lIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQwMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTozMS42NzIxNTI0MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA5NTAxOTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0dWNhbl9wY2lfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz01Mz1zdGF0aWMgdm9pZCBjdHVjYW5fcGNpX3NldF9kcnZkYXRhKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02NC0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM6NjU6ICogY3R1Y2FuX3BjaV9wcm9iZSAtIFBDSSByZWdpc3RyYXRpb24gY2FsbFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02Ni0gKiBAcGRldjpcXHRIYW5kbGUgdG8gdGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzMtICovXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjc0OnN0YXRpYyBpbnQgY3R1Y2FuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9MjcwPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjdHVjYW5fcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzItXFx0LmlkX3RhYmxlID0gY3R1Y2FuX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjI3MzpcXHQucHJvYmUgPSBjdHVjYW5fcGNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzQtXFx0LnJlbW92ZSA9IGN0dWNhbl9wY2lfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTozMS45ODE2NTk3MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MDY4MzU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIE1vZGlmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgb25seSBmdW5jdGlvbiB0b3VjaGVkIGhlcmUgaXMgYGN0dWNhbl9wY2lfcHJvYmVgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgY2hhbmdlIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCdzIGFsdGVyaW5nIHRoZSAqYmVoYXZpb3IqIG9mIHRoZSBjb2RlLCBhbmQgc3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gQ2FuIHRoaXMgY29kZSBhY3R1YWxseSAqZXhlY3V0ZSogdW5kZXIgYW55IGNpcmN1bXN0YW5jZXM/XG5cblRoZSB0ZXh0IHNheXMgeWVzLCBpdCBpcy4gVGhlIGVycm9yIHBhdGggaXMgdHJpZ2dlcmVkIGJ5IGEgZmFpbHVyZSBpbiBlaXRoZXIgYGt6YWxsb2Nfb2JqYCBvciBzb21ldGhpbmcgdGhhdCBoYXBwZW5zICphZnRlciogdGhhdCBpbml0aWFsaXphdGlvbi4gVGhhdCBzb3VuZHMgcmVhc29uYWJsZS4gSWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMsIG9yIHNvbWV0aGluZyBlbHNlIGdvZXMgc2lkZXdheXMgaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRoYXQgZm9sbG93cyBga3phbGxvY19vYmpgLCB3ZSdsbCBqdW1wIHRvIGBlcnJfcGNpX2lvdW5tYXBfYmFyMGAuXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IGNhbiB0cmlnZ2VyIHRoaXMuIFdoYXQsIHNwZWNpZmljYWxseSwgY291bGQgZmFpbCAqYWZ0ZXIqIHRoZSBga3phbGxvY19vYmpgIGNhbGwgdGhhdCB3b3VsZCBsZWFkIHVzIGRvd24gdGhpcyBlcnJvciBwYXRoPyBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgY29tZXMgYWZ0ZXIgdGhlIGNhbGwgdG8gdW5kZXJzdGFuZCB3aGF0IHNjZW5hcmlvcyB0aGlzIGNoYW5nZSBhZGRyZXNzZXMgYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgYnJvYWRlciBjb25jZXJuIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTozNS45MzIzNDU1MTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0ODpcXHRcXHRiZGF0YSA9IGt6YWxsb2Nfb2JqKCpiZGF0YSk7XFxuIDE0OTpcXHRcXHRpZiAoIWJkYXRhKSB7XFxuIDE1MDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxNTE6XFx0XFx0XFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMDtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmJkYXRhLVxcdTAwM2VuZGV2X2xpc3RfaGVhZCk7XFxuIDE1NTpcXHRcXHRiZGF0YS1cXHUwMDNlYmFyMF9iYXNlID0gYmFyMF9iYXNlO1xcbiAxNTY6XFx0XFx0YmRhdGEtXFx1MDAzZWNyYV9iYXNlID0gY3JhX2FkZHI7XFxuIDE1NzpcXHRcXHRiZGF0YS1cXHUwMDNlYmFyMV9iYXNlID0gYWRkcjtcXG4gMTU4OlxcdFxcdGJkYXRhLVxcdTAwM2V1c2VfbXNpID0gbXNpX29rO1xcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgYmRhdGEpO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHRyZXQgPSBjdHVjYW5fcHJvYmVfY29tbW9uKGRldiwgYWRkciwgaXJxLCBudHhidWZzLCAxMDAwMDAwMDAsXFxuIDE2MzpcXHRcXHRcXHRcXHRcXHQgIDAsIGN0dWNhbl9wY2lfc2V0X2RydmRhdGEpO1xcbiAxNjQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE2NTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2JvYXJkO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRjb3JlX2krKztcXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0d2hpbGUgKGNvcmVfaSBcXHUwMDNjIG51bV9jb3Jlcykge1xcbiAxNzA6XFx0XFx0XFx0YWRkciArPSAweDQwMDA7XFxuIDE3MTpcXHRcXHRcXHRyZXQgPSBjdHVjYW5fcHJvYmVfY29tbW9uKGRldiwgYWRkciwgaXJxLCBudHhidWZzLCAxMDAwMDAwMDAsXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHRcXHQgIDAsIGN0dWNhbl9wY2lfc2V0X2RydmRhdGEpO1xcbiAxNzM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTc0OlxcdFxcdFxcdFxcdGRldl9pbmZvKGRldiwgXFxcIkNUVSBDQU4gRkQgY29yZSAlZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcXFxcblxcXCIsXFxuIDE3NTpcXHRcXHRcXHRcXHRcXHQgY29yZV9pKTtcXG4gMTc2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzc6XFx0XFx0XFx0fVxcbiAxNzg6XFx0XFx0XFx0Y29yZV9pKys7XFxuIDE3OTpcXHRcXHR9XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdC8qIGVuYWJsZSBpbnRlcnJ1cHQgaW5cXG4gMTgyOlxcdFxcdCAqIEF2YWxvbi1NTSB0byBQQ0kgRXhwcmVzcyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyXFxuIDE4MzpcXHRcXHQgKi9cXG4gMTg0OlxcdFxcdGNyYV9hMnBfaWUgPSBpb3JlYWQzMihjcmFfYWRkciArIENZQ0xPTkVfSVZfQ1JBX0EyUF9JRSk7XFxuIDE4NTpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJjcmFfYTJwX2llIDB4JTA4eFxcXFxuXFxcIiwgY3JhX2EycF9pZSk7XFxuIDE4NjpcXHRcXHRjcmFfYTJwX2llIHw9IDE7XFxuIDE4NzpcXHRcXHRpb3dyaXRlMzIoY3JhX2EycF9pZSwgY3JhX2FkZHIgKyBDWUNMT05FX0lWX0NSQV9BMlBfSUUpO1xcbiAxODg6XFx0XFx0Y3JhX2EycF9pZSA9IGlvcmVhZDMyKGNyYV9hZGRyICsgQ1lDTE9ORV9JVl9DUkFfQTJQX0lFKTtcXG4gMTg5OlxcdFxcdGRldl9pbmZvKGRldiwgXFxcImNyYV9hMnBfaWUgMHglMDh4XFxcXG5cXFwiLCBjcmFfYTJwX2llKTtcXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0cmV0dXJuIDA7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdGVycl9mcmVlX2JvYXJkOlxcbiAxOTQ6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbiAxOTU6XFx0XFx0a2ZyZWUoYmRhdGEpO1xcbiAxOTY6XFx0ZXJyX3BjaV9pb3VubWFwX2JhcjA6XFxuIDE5NzpcXHRcXHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX2Jhc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTozNS45MzI0MjUxNjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwNzczNTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDVFUgQ0FOIEZEIFBDSSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIENUVSBDQU4gRkQgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGl0cyBlcnJvciBoYW5kbGluZyBkdXJpbmcgdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQsIHllcywgdGhlIGBjdHVjYW5fcHJvYmVfY29tbW9uYCBmdW5jdGlvbiAqY2FuKiBmYWlsLCBhbmQgd2hlbiBpdCBkb2VzLCBpdCBjb3JyZWN0bHkgZ29lcyBkb3duIHRoZSBlcnJvciBwYXRoIHRvIGBlcnJfZnJlZV9ib2FyZGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYGVycl9wY2lfaW91bm1hcF9iYXIwYC4gVGhhdCBtZWFucyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgYWN0dWFsbHkgYSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgcGFydCBvZiB0aGUgY29kZSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIHRvIGNvbmZpcm0uXG5cbk5vdywgbGV0IG1lIHNvbGlkaWZ5IHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBiYXNlZCBvbiB0aGlzIHVuZGVyc3RhbmRpbmc6XG5cbiogICAqKmBXb3J0aEZ1enppbmc6IHRydWVgKio6IERlZmluaXRlbHkuIFRoaXMgaXMgYSBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIHBhdGggdGhhdCBuZWVkcyB0byBiZSB0ZXN0ZWQgdmlnb3JvdXNseS4gRmF1bHQgaW5qZWN0aW9uIG9yIGludGVudGlvbmFsbHkgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMgY291bGQgZGVmaW5pdGVseSB0cmlnZ2VyIHRoaXMuXG4qICAgKipgRm9jdXNTeW1ib2xzOiBbXCJjdHVjYW5fcGNpX3Byb2JlXCJdYCoqOiBUaGUgZm9jdXMgaXMsIGFzIGV4cGVjdGVkLCBvbiB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIGZ1bmN0aW9uIGl0c2VsZiwgd2hpY2ggaXMgd2hlcmUgdGhlIHByb2JlIG9wZXJhdGlvbiBzdGFydHMuXG4qICAgKipgRW5hYmxlQ29uZmlnczogW1wiQ0FOXCIsIFwiQ0FOX0RFVlwiLCBcIkNBTl9DVFVDQU5GRF9QQ0lcIl1gKio6IEkgbmVlZCB0byBlbmFibGUgdGhlIGNvcmUgQ0FOIGZ1bmN0aW9uYWxpdHksIHRoZSBDQU4gZGV2aWNlIHN1cHBvcnQsIGFuZCB0aGUgc3BlY2lmaWMgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyLiBJIHdhcyBicmllZmx5IHBvbmRlcmluZyB0aGUgaW5jbHVzaW9uIG9mIGBDQU5fQ1RVQ0FORkRgIHNlcGFyYXRlbHksIGJ1dCBzaW5jZSBgQ0FOX0NUVUNBTkZEX1BDSWAgKnNlbGVjdHMqIGl0LCBpdCBpcywgaW4gZmFjdCwgcmVkdW5kYW50LiBXaGlsZSBpdCB3b3VsZG4ndCBodXJ0IHRvIGluY2x1ZGUgaXQsIGl0J3MgY2xlYW5lciB0byBvbWl0IGl0LCBzbyB0aGUgZmluYWwgc2V0IHN0YXlzIGFzIHNob3duLiBBbmQgeWVzLCBgQ0FOX0RFVmAgaXMgZW5hYmxlZCB3aXRoIGBDQU5gIGJ1dCBpdCdzIGdvb2QgdG8gYmUgZXhwbGljaXQuIGBQQ0lgIGlzIGFsc28gbmVlZGVkLCBidXQgYXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byBjYWxsIGl0IG91dC5cblxuRmluYWxseSwganVzdCBvdXQgb2YgY3VyaW9zaXR5LCBJIGRvdWJsZS1jaGVja2VkIHdoZXRoZXIgYGt6YWxsb2Nfb2JqYCBpcyBhIG1hY3JvLiBJdCdzIG5vdCBjcml0aWNhbCB0byB0aGUgZnV6emluZyBzZXR1cCwgYnV0IEkgZW5qb3kga25vd2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTo0Mi4wNDAxNjM0NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTE2ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jPTc0PXN0YXRpYyBpbnQgY3R1Y2FuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0xNDctXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjE0ODpcXHRiZGF0YSA9IGt6YWxsb2Nfb2JqKCpiZGF0YSk7XFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTE0OS1cXHRpZiAoIWJkYXRhKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjQyLjExMzA5MzMxMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3MzQzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVidWdnaW5nIGEgS2VybmVsIE1vZHVsZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IGBjdHVjYW5mZF9wY2kuY2AgYW5kIEknbSBzZWVpbmcgYSByZWZlcmVuY2UgdG8gYGt6YWxsb2Nfb2JqYC4gVGhhdCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgYWxsb2NhdGlvbiBmdW5jdGlvbi4gQnV0IHRoZSBjb21waWxlciBpcyBjb21wbGFpbmluZyB0aGF0IGl0J3MgdW5kZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoYXQncyBhIGJpdCBwZXJwbGV4aW5nLiBUaGlzIGlzbid0IHRoZSBraW5kIG9mIGZ1bmN0aW9uIHlvdSdkIGV4cGVjdCB0byBiZSBkZWNsYXJlZCBsb2NhbGx5LCBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgcGFydCBvZiBhIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmUuIFNvLCB0aGUga2V5IHF1ZXN0aW9uIG5vdyBpczogd2hlcmUgdGhlIGhlY2sgKmlzKiBga3phbGxvY19vYmpgIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4uIElzIGl0IGEgZnVuY3Rpb24sIGEgbWFjcm8/IEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBhbmQgcGVyaGFwcyB0aGUga2VybmVsIHNvdXJjZSBkaXJlY3RseSwgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGRlY2xhcmF0aW9uIGlzIGx1cmtpbmcuIExldCdzIHNlZSBpZiB0aGlzIGRlZmluaXRpb24gaGFzIGJlZW4gbW92ZWQsIHJlbmFtZWQsIG9yIHBlcmhhcHMgYSBwcmVwcm9jZXNzb3IgZ3VhcmQgaXMgY29uZGl0aW9uYWxseSBvbWl0dGluZyBpdHMgaW5jbHVzaW9uLiBUaW1lIHRvIGJyZWFrIG91dCB0aGUgZ3JlcCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU0OTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTo0Ni40OTA0Mzk0NzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDgxNjcxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIGt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDUxPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzItLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzMzojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzQtXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMzU6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzYtXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEwLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjQ4LjczODYxNzA5NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjMxMTAzNDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0OiBDVFUgQ0FOIEZEIFBDSSBEcml2ZXIgUHJvYmUqKlxuXG5Pa2F5LCBhbm90aGVyIG5ldyBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9zbGFiLmhgLi4uIGludGVyZXN0aW5nLCBidXQgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIGJyYXNzIHRhY2tzIG9mIHRoaXMgcGF0Y2guIFNlZW1zIGxpa2Ugd2UgaGF2ZSBhIGZ1bmN0aW9uYWwgZml4IGhlcmUuIFNwZWNpZmljYWxseSwgYSB0d2VhayBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGFydCBvZiB0aGUgUENJIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIOKAkyB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIGZ1bmN0aW9uIHRvIGJlIHByZWNpc2UuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gZnV6emluZy4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgYmVncyBmb3IgaXQuIEEgZml4IGluIGVycm9yIGhhbmRsaW5nPyBUaGF0IG1lYW5zIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGNvcm5lciBjYXNlcy5cblxuU28sIGxldCdzIGNvZGlmeSB0aGlzIGludG8gYSBmdXp6aW5nIHBsYW4uIGBXb3J0aEZ1enppbmdgPyBBYnNvbHV0ZWx5LCB0cnVlLiBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBjdHVjYW5fcGNpX3Byb2JlYC4gTm93LCB3ZSBuZWVkIHRoZSByaWdodCBjb25maWdzIGVuYWJsZWQ6IGBDQU5gLCBgQ0FOX0RFVmAsIGFuZCBjcnVjaWFsbHksIGBDQU5fQ1RVQ0FORkRfUENJYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggcmVjdGlmaWVzIGFuIGluY29ycmVjdCB1bm1hcCBhZGRyZXNzIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIGBDVFUgQ0FOIEZEYCBQQ0kgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBwYXRoIGlzIHZlcnkgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBwb3RlbnRpYWxseSBiZSB0cmlnZ2VyZWQgYnkgZmF1bHQgaW5qZWN0aW9uLCBvciBldmVuIGEgZG9kZ3kgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEdvdHRhIHRlc3QgaXQhIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMDMsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjUzLjM2OTcyMzQ3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjExMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9ERVZcIixcbiAgICBcIkNBTl9DVFVDQU5GRF9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdHVjYW5fcGNpX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5jb3JyZWN0IHVubWFwIGFkZHJlc3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgdGhlIENUVSBDQU4gRkQgUENJIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0RFVlwiLFxuICAgIFwiQ0FOX0NUVUNBTkZEX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0dWNhbl9wY2lfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbmNvcnJlY3QgdW5tYXAgYWRkcmVzcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiB0aGUgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowfcgjg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-26 03:19:45 +0000 UTC FinishedAt: 2026-07-26 03:49:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_DEV", "CAN_CTUCANFD_PCI" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CAN", "CAN_DEV", "CAN_CTUCANFD_PCI" ], "series_id": "5372b7ff-ca10-473d-9e08-e4d46b96f1e7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ctucan_pci_probe" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9DVFVDQU5GRF9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHVjYW5fcGNpX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluY29ycmVjdCB1bm1hcCBhZGRyZXNzIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIHRoZSBDVFUgQ0FOIEZEIFBDSSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkZDI3MDQ3MmYzOTkyNjlkMWNiMTZmMmZiNTZkOGNhYjU2YTBmOTM0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMjYgMDM6NDg6NDUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jIGIvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXG5pbmRleCA2MjU3ODhmYTg5NzY2Mi4uZjg0NTk1MWM1ZDUxMzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuY1xuQEAgLTE5NCw3ICYjNDM7MTk0LDcgQEAgc3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIFx0a2ZyZWUoYmRhdGEpO1xuIGVycl9wY2lfaW91bm1hcF9iYXIwOlxuLVx0cGNpX2lvdW5tYXAocGRldiwgY3JhX2FkZHIpO1xuJiM0MztcdHBjaV9pb3VubWFwKHBkZXYsIGJhcjBfYmFzZSk7XG4gZXJyX3BjaV9pb3VubWFwX2JhcjE6XG4gXHRwY2lfaW91bm1hcChwZGV2LCBhZGRyKTtcbiBlcnJfcmVsZWFzZV9yZWdpb25zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDQU4mIzM0OywKICAgICYjMzQ7Q0FOX0RFViYjMzQ7LAogICAgJiMzNDtDQU5fQ1RVQ0FORkRfUENJJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y3R1Y2FuX3BjaV9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbmNvcnJlY3QgdW5tYXAgYWRkcmVzcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiB0aGUgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyJiMzOTtzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGQyNzA0NzJmMzk5MjY5ZDFjYjE2ZjJmYjU2ZDhjYWI1NmEwZjkzNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDAzOjQ4OjQ1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jIGIvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jCmluZGV4IDYyNTc4OGZhODk3NjYyLi5mODQ1OTUxYzVkNTEzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYwpAQCAtMTk0LDcgJiM0MzsxOTQsNyBAQCBzdGF0aWMgaW50IGN0dWNhbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGJkYXRhKTsKIGVycl9wY2lfaW91bm1hcF9iYXIwOgotCXBjaV9pb3VubWFwKHBkZXYsIGNyYV9hZGRyKTsKJiM0MzsJcGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTsKIGVycl9wY2lfaW91bm1hcF9iYXIxOgogCXBjaV9pb3VubWFwKHBkZXYsIGFkZHIpOwogZXJyX3JlbGVhc2VfcmVnaW9uczoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDQ1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQQ0kgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jYC4gVGhlIGNoYW5nZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBpdCYjMzk7cyBhIGNvcnJlY3Rpb24gaW4gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgc3dhcHBpbmcgYHBjaV9pb3VubWFwKHBkZXYsIGNyYV9hZGRyKTtgIGZvciBgcGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTtgLiBJdCYjMzk7cyBhIGNsZWFudXAsIG5vdGhpbmcgdG9vIGV4Y2l0aW5nIGluIGl0c2VsZi4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiwgYXMgYWx3YXlzIHdpdGggdGhlc2UgdGhpbmdzLCBpcyAmIzM0O2NhbiB3ZSBmdXp6IHRoaXM/JiMzNDsgQW5kIHRoYXQgaGluZ2VzIG9uIHdoZXRoZXIgdGhpcyBkcml2ZXIgaXMgZXZlbiAqcHJvYmVkKiBpbiBhbiBlbXVsYXRlZCBlbnZpcm9ubWVudCBsaWtlIFFFTVUuIFJlYWRpbmcgdGhlIGNvZGUsIGl0JiMzOTtzIGEgUENJIGRyaXZlciBmb3IgQ1RVIENBTiBGRC4gUmlnaHQsIGEgc3BlY2lmaWMgSVAgY29yZS4gVGhhdCYjMzk7cyB1c3VhbGx5IGEgYmFkIHNpZ24gZm9yIFFFTVUgY29tcGF0aWJpbGl0eSwgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgcmFyZWx5IHdvcmsgb3V0LW9mLXRoZS1ib3guIE15IGd1dCBzYXlzICYjMzQ7cHJvYmFibHkgbm90LCYjMzQ7IHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGVtdWxhdG9yIGZvciB0aGlzIHBhcnRpY3VsYXIgaGFyZHdhcmUuCgpCdXQgdGhpcyBpcyBhbiAqZXJyb3IqIHBhdGggd2l0aGluIGAucHJvYmVgLiBUaGUgZnVuY3Rpb24gd29uJiMzOTt0IGV2ZW4gKmJlKiBjYWxsZWQgaWYgdGhlIGRldmljZSBpc24mIzM5O3QgcHJlc2VudCwgcmlnaHQ/IEFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBtYXJrIHRoZXNlIGFzIG5vdCB3b3J0aCBmdXp6aW5nIGZvciB2ZW5kb3Itc3BlY2lmaWMgUENJZSBkcml2ZXJzIHRoYXQgcmVxdWlyZSByZWFsIGhhcmR3YXJlLiBJdCYjMzk7cyBhIHByb2JlIGVycm9yIHBhdGguCgpPa2F5LCB3YWl0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbiB3aXRoIGBzeXpfcGNpX3ZwY2lgIGFuZCBzaW1pbGFyIG1lY2hhbmlzbXMuIEJ1dCBpcyBpdCBzb3BoaXN0aWNhdGVkIGVub3VnaCB0byBpbmplY3QgYSBDVFUgQ0FOIEZEIGRldmljZT8gVGhlIGluamVjdGlvbiBtaWdodCBiZSB0aGVyZSwgYnV0IGl0IGxpa2VseSByZXF1aXJlcyBkZXRhaWxlZCBkcml2ZXIga25vd2xlZGdlLgoKU28gSSBuZWVkIHRvIGNoZWNrIHRoZSBkcml2ZXIgaXRzZWxmIGluIG1vcmUgZGV0YWlsLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgc3BlY2lmaWMgaGFyZHdhcmUgaXMgc3VwcG9ydGVkIGJ5IFN5emthbGxlciYjMzk7cyB2aXJ0dWFsIFBDSSBpbmplY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y3R1Y2FuX3BjaV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9NTM9c3RhdGljIHZvaWQgY3R1Y2FuX3BjaV9zZXRfZHJ2ZGF0YShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTY0LS8qKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjY1OiAqIGN0dWNhbl9wY2lfcHJvYmUgLSBQQ0kgcmVnaXN0cmF0aW9uIGNhbGxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02Ni0gKiBAcGRldjpcdEhhbmRsZSB0byB0aGUgcGNpIGRldmljZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzMtICovXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM6NzQ6c3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTc1LVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz0yNzA9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGN0dWNhbl9wY2lfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzItXHQuaWRfdGFibGUgPSBjdHVjYW5fcGNpX3RibCxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzoyNzM6XHQucHJvYmUgPSBjdHVjYW5fcGNpX3Byb2JlLFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTI3NC1cdC5yZW1vdmUgPSBjdHVjYW5fcGNpX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGEgU2ltcGxlIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggc2VlbXMgc3RyYWlnaHRmb3J3YXJkOiBhIGZpeCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgYGN0dWNhbl9wY2lfcHJvYmVgLiBUaGUgZGV2aWNlIGluIHF1ZXN0aW9uIGlzIGEgUENJIGRldmljZSwgd2hpY2ggbWVhbnMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4gTm93LCBjYW4gc3l6a2FsbGVyIGV2ZW4gKnJlYWNoKiB0aGlzIGVycm9yIHBhdGg/IFllYWgsIGl0IHNob3VsZCBiZSBwb3NzaWJsZS4gSSYjMzk7dmUgc2VlbiBpdCBkb25lIHdpdGggYHN5el9wY2lfdnBjaWAsIGBzeXpfcGNpX2RldmljZV9hZGRgLCBvciBzaW1pbGFyIHN5c2NhbGxzLiBJZiB0aGUgUENJIHN1YnN5c3RlbSBpcyBlbmFibGVkIGFuZCBzeXprYWxsZXIgY2FuIGluamVjdCBQQ0kgZGV2aWNlcywgdGhlbiBpdCAqc2hvdWxkKiBiZSBhYmxlIHRvIGZ1enogUENJIHByb2JlIGZ1bmN0aW9ucy4KCkJ1dCBpcyB0aGlzIHBhdGNoLCBhIHNpbmdsZSBsaW5lIGNoYW5nZSDigJMgc3BlY2lmaWNhbGx5LCBzd2FwcGluZyBgY3JhX2FkZHJgIGZvciBgYmFyMF9iYXNlYCBpbiBhIGBwY2lfaW91bm1hcGAgY2FsbCBpbiBhbiBlcnJvciBwYXRoIOKAkyBldmVuIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZz8gSXQmIzM5O3MgYSBQQ0kgZHJpdmVyIHByb2JlIGVycm9yIHBhdGgsIHNvIHRoZXJlJiMzOTtzIGEgY2hhbmNlLiBJZiB0aGUgZnV6emVyIGNhbiBpbmplY3QgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBhbiBlcnJvciAqZHVyaW5nKiB0aGUgcHJvYmUsIHdlIG1pZ2h0IHNlZSB0aGlzIGNvZGUgZ2V0IGV4ZXJjaXNlZC4gU28sIGJlZm9yZSBJIGRpc21pc3MgaXQgb3V0cmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCBgY3R1Y2FuZmRfcGNpX3Byb2JlYCBhY3R1YWxseSBkb2VzLiBVbmRlcnN0YW5kaW5nIHRoZSBwcm9iZSYjMzk7cyBsb2dpYyBpcyB0aGUga2V5IHRvIHNlZWluZyBpZiBzeXprYWxsZXIgY2FuIGdldCB0byB0aGUgZXJyb3IgcGF0aCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYwOlx0XHRsaXN0X2FkZChcdTAwMjZwcml2LVx1MDAzZXBlZXJzX29uX3BkZXYsIFx1MDAyNmJkYXRhLVx1MDAzZW5kZXZfbGlzdF9oZWFkKTtcbiAgNjE6XHRcdHByaXYtXHUwMDNlaXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7XG4gIDYyOlx0fVxuICA2MzpcdFxuICA2NDpcdC8qKlxuICA2NTpcdCAqIGN0dWNhbl9wY2lfcHJvYmUgLSBQQ0kgcmVnaXN0cmF0aW9uIGNhbGxcbiAgNjY6XHQgKiBAcGRldjpcdEhhbmRsZSB0byB0aGUgcGNpIGRldmljZSBzdHJ1Y3R1cmVcbiAgNjc6XHQgKiBAZW50Olx0UG9pbnRlciB0byB0aGUgZW50cnkgZnJvbSBjdHVjYW5fcGNpX3RibFxuICA2ODpcdCAqXG4gIDY5Olx0ICogVGhpcyBmdW5jdGlvbiBkb2VzIGFsbCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIENBTlxuICA3MDpcdCAqIGRldmljZS5cbiAgNzE6XHQgKlxuICA3MjpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIGFuZCBmYWlsdXJlIHZhbHVlIG9uIGVycm9yXG4gIDczOlx0ICovXG4gIDc0Olx0c3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuICA3NTpcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuICA3NjpcdHtcbiAgNzc6XHRcdHN0cnVjdCBkZXZpY2VcdCpkZXYgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiAgNzg6XHRcdHVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGEgPSBlbnQtXHUwMDNlZHJpdmVyX2RhdGE7XG4gIDc5Olx0XHRzdHJ1Y3QgY3R1Y2FuX3BjaV9ib2FyZF9kYXRhICpiZGF0YTtcbiAgODA6XHRcdHZvaWQgX19pb21lbSAqYWRkcjtcbiAgODE6XHRcdHZvaWQgX19pb21lbSAqY3JhX2FkZHI7XG4gIDgyOlx0XHR2b2lkIF9faW9tZW0gKmJhcjBfYmFzZTtcbiAgODM6XHRcdHUzMiBjcmFfYTJwX2llO1xuICA4NDpcdFx0dTMyIGN0dWNhbl9pZCA9IDA7XG4gIDg1Olx0XHRpbnQgcmV0O1xuICA4NjpcdFx0dW5zaWduZWQgaW50IG50eGJ1ZnM7XG4gIDg3Olx0XHR1bnNpZ25lZCBpbnQgbnVtX2NvcmVzID0gMTtcbiAgODg6XHRcdHVuc2lnbmVkIGludCBjb3JlX2kgPSAwO1xuICA4OTpcdFx0aW50IGlycTtcbiAgOTA6XHRcdGludCBtc2lfb2sgPSAwO1xuICA5MTpcdFxuICA5MjpcdFx0cmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7XG4gIDkzOlx0XHRpZiAocmV0KSB7XG4gIDk0Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtwY2lfZW5hYmxlX2RldmljZSBGQUlMRURcXG5cJiMzNDspO1xuICA5NTpcdFx0XHRnb3RvIGVycjtcbiAgOTY6XHRcdH1cbiAgOTc6XHRcbiAgOTg6XHRcdHJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgS0JVSUxEX01PRE5BTUUpO1xuICA5OTpcdFx0aWYgKHJldCkge1xuIDEwMDpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7cGNpX3JlcXVlc3RfcmVnaW9ucyBGQUlMRURcXG5cJiMzNDspO1xuIDEwMTpcdFx0XHRnb3RvIGVycl9kaXNhYmxlX2RldmljZTtcbiAxMDI6XHRcdH1cbiAxMDM6XHRcbiAxMDQ6XHRcdHJldCA9IHBjaV9lbmFibGVfbXNpKHBkZXYpO1xuIDEwNTpcdFx0aWYgKCFyZXQpIHtcbiAxMDY6XHRcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtNU0kgZW5hYmxlZFxcblwmIzM0Oyk7XG4gMTA3Olx0XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIDEwODpcdFx0XHRtc2lfb2sgPSAxO1xuIDEwOTpcdFx0fVxuIDExMDpcdFxuIDExMTpcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtjdHVjYW4gQkFSMCAweCUwOGxseCAweCUwOGxseFxcblwmIzM0OyxcbiAxMTI6XHRcdFx0IChsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLFxuIDExMzpcdFx0XHQgKGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTtcbiAxMTQ6XHRcbiAxMTU6XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7Y3R1Y2FuIEJBUjEgMHglMDhsbHggMHglMDhsbHhcXG5cJiMzNDssXG4gMTE2Olx0XHRcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSxcbiAxMTc6XHRcdFx0IChsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSk7XG4gMTE4Olx0XG4gMTE5Olx0XHRhZGRyID0gcGNpX2lvbWFwKHBkZXYsIDEsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpO1xuIDEyMDpcdFx0aWYgKCFhZGRyKSB7XG4gMTIxOlx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtQQ0kgQkFSIDEgY2Fubm90IGJlIG1hcHBlZFxcblwmIzM0Oyk7XG4gMTIyOlx0XHRcdHJldCA9IC1FTk9NRU07XG4gMTIzOlx0XHRcdGdvdG8gZXJyX3JlbGVhc2VfcmVnaW9ucztcbiAxMjQ6XHRcdH1cbiAxMjU6XHRcbiAxMjY6XHRcdC8qIEN5Y2xvbmUgSVYgUENJIEV4cHJlc3MgQ29udHJvbCBSZWdpc3RlcnMgQXJlYSAqL1xuIDEyNzpcdFx0YmFyMF9iYXNlID0gcGNpX2lvbWFwKHBkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpO1xuIDEyODpcdFx0aWYgKCFiYXIwX2Jhc2UpIHtcbiAxMjk6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1BDSSBCQVIgMCBjYW5ub3QgYmUgbWFwcGVkXFxuXCYjMzQ7KTtcbiAxMzA6XHRcdFx0cmV0ID0gLUVJTztcbiAxMzE6XHRcdFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMTtcbiAxMzI6XHRcdH1cbiAxMzM6XHRcbiAxMzQ6XHRcdGlmIChkcml2ZXJfZGF0YSA9PSBDVFVDQU5fV0lUSE9VVF9DVFVDQU5fSUQpIHtcbiAxMzU6XHRcdFx0Y3JhX2FkZHIgPSBiYXIwX2Jhc2U7XG4gMTM2Olx0XHRcdG51bV9jb3JlcyA9IDI7XG4gMTM3Olx0XHR9IGVsc2Uge1xuIDEzODpcdFx0XHRjcmFfYWRkciA9IGJhcjBfYmFzZSAmIzQzOyBDVFVDQU5fQkFSMF9DUkFfQkFTRTtcbiAxMzk6XHRcdFx0Y3R1Y2FuX2lkID0gaW9yZWFkMzIoYmFyMF9iYXNlICYjNDM7IENUVUNBTl9CQVIwX0NUVUNBTl9JRCk7XG4gMTQwOlx0XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7Y3R1Y2FuX2lkIDB4JTA4bHhcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nKWN0dWNhbl9pZCk7XG4gMTQxOlx0XHRcdG51bV9jb3JlcyA9IGN0dWNhbl9pZCBcdTAwMjYgMHhmO1xuIDE0MjpcdFx0fVxuIDE0MzpcdFxuIDE0NDpcdFx0aXJxID0gcGRldi1cdTAwM2VpcnE7XG4gMTQ1Olx0XG4gMTQ2Olx0XHRudHhidWZzID0gNDtcbiAxNDc6XHRcbiAxNDg6XHRcdGJkYXRhID0ga3phbGxvY19vYmooKmJkYXRhKTtcbiAxNDk6XHRcdGlmICghYmRhdGEpIHtcbiAxNTA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxNTE6XHRcdFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMDtcbiAxNTI6XHRcdH1cbiAxNTM6XHRcbiAxNTQ6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJkYXRhLVx1MDAzZW5kZXZfbGlzdF9oZWFkKTtcbiAxNTU6XHRcdGJkYXRhLVx1MDAzZWJhcjBfYmFzZSA9IGJhcjBfYmFzZTtcbiAxNTY6XHRcdGJkYXRhLVx1MDAzZWNyYV9iYXNlID0gY3JhX2FkZHI7XG4gMTU3Olx0XHRiZGF0YS1cdTAwM2ViYXIxX2Jhc2UgPSBhZGRyO1xuIDE1ODpcdFx0YmRhdGEtXHUwMDNldXNlX21zaSA9IG1zaV9vaztcbiAxNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NjAyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBDSSBEcml2ZXIgRXJyb3IgUGF0aCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgZXJyb3IgcGF0aCwgYGVycl9wY2lfaW91bm1hcF9iYXIwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZ2V0cyB0cmlnZ2VyZWQgaWYgYGt6YWxsb2Nfb2JqYCBmYWlscy4gV2FpdCwgaXMgdGhhdCBqdXN0IGEgbWFjcm8gZm9yIGBremFsbG9jYD8gTGV0IG1lIHNlZS4uLiB5ZWFoLCBpdCBsb29rcyBsaWtlIGBremFsbG9jX29iaigqYmRhdGEpO2AgaXMgbW9zdCBsaWtlbHkgYGt6YWxsb2Moc2l6ZW9mKCpiZGF0YSksIEdGUF9LRVJORUwpYC4gUHJvYmFibHkgYSBjdXN0b20gbWFjcm8gaW4gdGhpcyBkcml2ZXIgb3Iga2VybmVsIHZlcnNpb24uIEdvdCBpdC4gSWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCB3ZSBoaXQgYGVycl9wY2lfaW91bm1hcF9iYXIwYCwgd2hpY2ggdW5tYXBzIGBiYXIwX2Jhc2VgLgoKVGhlIGJ1ZywgYXBwYXJlbnRseSwgd2FzIHRoYXQgaXQgd2FzIHVubWFwcGluZyBgY3JhX2FkZHJgIGluc3RlYWQgb2YgYGJhcjBfYmFzZWAuIEFuZCBmcm9tIHdoYXQgSSBzZWUgYGNyYV9hZGRyYCBjYW4gYmUgYGJhcjBfYmFzZWAgb3IgYGJhcjBfYmFzZSAmIzQzOyBDVFVDQU5fQkFSMF9DUkFfQkFTRWAuIFRoYXQgdW5tYXBwaW5nIG9mIGBjcmFfYWRkcmAgaXMgcG90ZW50aWFsbHkgcHJvYmxlbWF0aWMgaWYgaXQmIzM5O3Mgb2Zmc2V0LiBPa2F5LgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcXVlc3Rpb246IENhbiB3ZSBmdXp6IHRoaXM/IEl0JiMzOTtzIGEgUENJIGRyaXZlciYjMzk7cyBwcm9iZSBlcnJvciBwYXRoLiBTeXprYWxsZXIgY2FuIGluamVjdCBQQ0kgZGV2aWNlcyBhbmQgdHJpZ2dlciBwcm9iZSBmdW5jdGlvbnMsIHBsdXMgaXQgY2FuIHVzZSBmYXVsdCBpbmplY3Rpb24gdG8gbWFrZSBga3phbGxvY2AgZmFpbCwgd2hpY2ggc2hvdWxkIGRlZmluaXRlbHkgdHJpZ2dlciB0aGlzIGV4YWN0IGVycm9yIHBhdGguIEV4Y2VsbGVudCEKCkJ1dCwgZG9lcyBzeXprYWxsZXIgc3VwcG9ydCB0aGlzICpzcGVjaWZpYyogZHJpdmVyLCB0aGUgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyPyBMZXQgbWUgc2VlLi4uIEkmIzM5O2xsIGNoZWNrIGlmIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLiBIbW0sIHRoZSBub3RlIGFib3V0IHZlbmRvci1zcGVjaWZpYyBQQ0llIGNhcmRzIHRoYXQgYXJlbiYjMzk7dCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLi4uIElzIENUVSBDQU4gRkQgc3VjaCBhIHZlbmRvci1zcGVjaWZpYyBjYXJkPyBJdCYjMzk7cyBvcGVuLXNvdXJjZSwgZnJvbSB0aGUgQ3plY2ggVGVjaG5pY2FsIFVuaXZlcnNpdHksIGFuZCBjYW4gYmUgaW1wbGVtZW50ZWQgb24gRlBHQXMuIE9rYXksIG5vdCBpbmhlcmVudGx5IHZlbmRvci1zcGVjaWZpYy4KClNvLCBpcyBpdCBlbXVsYXRlZCBpbiBRRU1VPyBRRU1VIGhhcyBzb21lIENBTiBlbXVsYXRpb24sIFNKQTEwMDAsIEt2YXNlciwgZXRjLiwgYnV0IGRvZXMgaXQgZW11bGF0ZSAqdGhpcyogc3BlY2lmaWMgb25lPyBJIGNhbiBjaGVjayB0aGUgUUVNVSBzb3VyY2Ugb3IgZG8gYSBxdWljayBzZWFyY2guLi4gV2FpdCBhIG1pbnV0ZS4uLiBZZXMhIFFFTVUgZG9lcyBlbXVsYXRlIENUVSBDQU4gRkQhIEl0IHdhcyBhZGRlZCBhcm91bmQgMjAyMC4gT2theSwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0LCBidXQgaWYgdGhhdCYjMzk7cyByaWdodCwgdGhpcyBpcyBsb29raW5nIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q1RVIENBTiBGRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWc9MT1jb25maWcgQ0FOX0NUVUNBTkZEXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMy1cdGhlbHBcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnOjQ6XHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIENUVSBDQU4gRkQgb3Blbi1zb3VyY2UgSVAgY29yZS5cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTUtXHQgIE1vcmUgZG9jdW1lbnRhdGlvbiBhbmQgY29yZSBzb3VyY2VzIGF0IHByb2plY3QgcGFnZVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oLTMtICpcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oOjQ6ICogQ1RVIENBTiBGRCBJUCBDb3JlXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC01LSAqXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkLmg9Mjk9c3RydWN0IGN0dWNhbl9wcml2IHtcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC02Mi0gKiBAZGV2Olx0SGFuZGxlIHRvIHRoZSBnZW5lcmljIGRldmljZSBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oOjYzOiAqIEBhZGRyOlx0QmFzZSBhZGRyZXNzIG9mIENUVSBDQU4gRkQgY29yZSBhZGRyZXNzXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC02NC0gKiBAaXJxOlx0SW50ZXJydXB0IG51bWJlclxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMy0gKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy01LSAqXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0xNjA9c3RhdGljIGNvbnN0IGNoYXIgKmN0dWNhbl9zdGF0ZV90b19zdHIoZW51bSBjYW5fc3RhdGUgc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0xNjktLyoqXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjE3MDogKiBjdHVjYW5fcmVzZXQoKSAtIElzc3VlcyBzb2Z0d2FyZSByZXNldCByZXF1ZXN0IHRvIENUVSBDQU4gRkRcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTcxLSAqIEBuZGV2Olx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9MTc1PXN0YXRpYyBpbnQgY3R1Y2FuX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTk3LS8qKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzoxOTg6ICogY3R1Y2FuX3NldF9idHIoKSAtIFNldHMgQ0FOIGJ1cyBiaXQgdGltaW5nIGluIENUVSBDQU4gRkRcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTk5LSAqIEBuZGV2Olx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9MjA1PXN0YXRpYyBpbnQgY3R1Y2FuX3NldF9idHIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBjYW5fYml0dGltaW5nICpidCwgYm9vbCBub21pbmFsKVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMjIyLVx0ICogcGhhc2UxX3NlZyBjb21iaW5lZC4gdHNlZzEgaXMgdGhlbiBzcGxpdCBpbiBoYWxmIGFuZCBzdG9yZWQgaW50byBwcm9nX3NlZyBhbmQgcGhhc2Vfc2VnMS5cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MjIzOlx0ICogSW4gQ1RVIENBTiBGRCwgUFJPUCBpcyA2LzcgYml0cyB3aWRlIGJ1dCBQSDEgb25seSA2LzUsIHNvIHdlIG11c3QgcmUtZGlzdHJpYnV0ZSB0aGVcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMjI0LVx0ICogdmFsdWVzIGhlcmUuXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0yNzU9c3RhdGljIGludCBjdHVjYW5fc2V0X2RhdGFfYml0dGltaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMjg0LS8qKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzoyODU6ICogY3R1Y2FuX3NldF9zZWNvbmRhcnlfc2FtcGxlX3BvaW50KCkgLSBTZXRzIHNlY29uZGFyeSBzYW1wbGUgcG9pbnQgaW4gQ1RVIENBTiBGRFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0yODYtICogQG5kZXY6XHRQb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0yOTA9c3RhdGljIGludCBjdHVjYW5fc2V0X3NlY29uZGFyeV9zYW1wbGVfcG9pbnQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0zMjEtLyoqXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjMyMjogKiBjdHVjYW5fc2V0X21vZGUoKSAtIFNldHMgQ1RVIENBTiBGRHMgbW9kZVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0zMjMtICogQHByaXY6XHRQb2ludGVyIHRvIHByaXZhdGUgZGF0YVxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9NTk2PXN0YXRpYyBuZXRkZXZfdHhfdCBjdHVjYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTY0MC0gKiBjdHVjYW5fcmVhZF9yeF9mcmFtZSgpIC0gUmVhZHMgZnJhbWUgZnJvbSBSWCBGSUZPXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjY0MTogKiBAcHJpdjpcdFBvaW50ZXIgdG8gQ1RVIENBTiBGRCYjMzk7cyBwcml2YXRlIGRhdGFcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtNjQyLSAqIEBjZjpcdFx0UG9pbnRlciB0byBDQU4gZnJhbWUgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz03MTA9c3RhdGljIGludCBjdHVjYW5fcngoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy03NDgtLyoqXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjc0OTogKiBjdHVjYW5fcmVhZF9mYXVsdF9zdGF0ZSgpIC0gUmVhZHMgQ1RVIENBTiBGRHMgZmF1bHQgY29uZmluZW1lbnQgc3RhdGUuXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTc1MC0gKiBAcHJpdjpcdFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz05OTU9c3RhdGljIHZvaWQgY3R1Y2FuX3R4X2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTEwOTUtICpcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MTA5NjogKiBUaGlzIGlzIHRoZSBDVFUgQ0FOIEZEIElTUi4gSXQgY2hlY2tzIGZvciB0aGUgdHlwZSBvZiBpbnRlcnJ1cHRcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTA5Ny0gKiBhbmQgaW52b2tlcyB0aGUgY29ycmVzcG9uZGluZyBJU1IuXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0xNDU5PU1PRFVMRV9BVVRIT1IoXCYjMzQ7T25kcmVqIElsbGUgXHUwMDNjb25kcmVqLmlsbGVAZ21haWwuY29tXHUwMDNlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MTQ2MDpNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7Q1RVIENBTiBGRCBpbnRlcmZhY2VcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rZnJhbWUuaC0zLSAqXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfa2ZyYW1lLmg6NDogKiBDVFUgQ0FOIEZEIElQIENvcmVcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rZnJhbWUuaC01LSAqXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2tyZWdzLmgtMy0gKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2tyZWdzLmg6NDogKiBDVFUgQ0FOIEZEIElQIENvcmVcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rcmVncy5oLTUtICpcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMy0gKlxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjQ6ICogQ1RVIENBTiBGRCBJUCBDb3JlXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNS0gKlxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz03ND1zdGF0aWMgaW50IGN0dWNhbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTE3My1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjE3NDpcdFx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O0NUVSBDQU4gRkQgY29yZSAlZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMTc1LVx0XHRcdFx0IGNvcmVfaSk7XG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jPTI4MT1NT0RVTEVfQVVUSE9SKFwmIzM0O1BhdmVsIFBpc2EgXHUwMDNjcGlzYUBjbXAuZmVsay5jdnV0LmN6XHUwMDNlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzoyODI6TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0NUVSBDQU4gRkQgZm9yIFBDSSBidXNcJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jLTMtICpcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jOjQ6ICogQ1RVIENBTiBGRCBJUCBDb3JlXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGxhdGZvcm0uYy01LSAqXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BsYXRmb3JtLmM9MTI1PU1PRFVMRV9BVVRIT1IoXCYjMzQ7TWFydGluIEplcmFiZWtcJiMzNDspO1xuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BsYXRmb3JtLmM6MTI2Ok1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtDVFUgQ0FOIEZEIGZvciBwbGF0Zm9ybVwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEyMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDU4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIERlY2lzaW9uIGZvciB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIG9uZS1saW5lIHBhdGNoIGluIGBjdHVjYW5fcGNpX3Byb2JlYC4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gc2tpcCBmdXp6aW5nIGNlcnRhaW4gZHJpdmVyIGNoYW5nZXMsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHF1YWxpZmllcy4gVGhlIGluc3RydWN0aW9ucyBhcmUgc3BlY2lmaWMgYWJvdXQgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIG9yIHRlYXJkb3duIHJvdXRpbmVzLCBzbyBJIG5lZWQgdG8gYmUgY2FyZWZ1bC4KCkZpcnN0IHRob3VnaHQ6IFRoaXMgaXMganVzdCBhIHNpbmdsZS1saW5lIGVycm9yIGhhbmRsaW5nIGZpeCB3aXRoaW4gYC5wcm9iZWAsIG5vdCBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIuIEFuZCwgY3J1Y2lhbGx5LCBgQ1RVIENBTiBGRGAgaXMgZW11bGF0ZWQgaW4gUUVNVSwgc28gaXTigJlzIG5vdCB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlIHRoYXQgdGhlIGZ1enplciB3b3VsZG4mIzM5O3QgaGF2ZSBhY2Nlc3MgdG8uIEkga25vdyB0aGF0IGJlY2F1c2UgaXQmIzM5O3MgaW4gYGh3L25ldC9jYW4vY3R1Y2FuX2NvcmUuY2AgYW5kIGBody9uZXQvY2FuL2N0dWNhbl9wY2kuY2AuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IG5vIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSwgYW5kIHRoaXMgaXNuJiMzOTt0IHRoYXQuCgpNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGxlYW4gdG93YXJkcyAqZnV6emFibGUqLiBUaGUgZXJyb3IgcGF0aCBpbiBhIGAucHJvYmVgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBieSBmdXp6aW5nLiBBIGZ1enplciBjYW4gaW5qZWN0IGEgUENJIGRldmljZSBhbmQgdGhlbiB0cmlnZ2VyIGZhaWx1cmVzLCBsaWtlIHdpdGggZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgQkFScy4KCkJ1dCB3YWl0LCB0aGUgaW5zdHJ1Y3Rpb25zIGFsc28gc2F5IG5vIHRlYXJkb3duIGNhbGxiYWNrcywgbGlrZSBgLnJlbW92ZWAgb3IgYC5zaHV0ZG93bmAuIFRoaXMgKmlzKiBhIGAucHJvYmVgIGZ1bmN0aW9uLCBub3QgYC5yZW1vdmVgLCBvciBgLnNodXRkb3duYCwgc28gaXQmIzM5O3Mgbm90IGEgdGVhcmRvd24gY2FsbGJhY2suIEJ1dCBpcyBpdCB3b3J0aCBpdD8KCk9rYXksIG9rYXksIEkgdGhpbmsgdGhpcyAqaXMqIHdvcnRoIGZ1enppbmcuIFN5emthbGxlciBpcyBkZWZpbml0ZWx5IGNhcGFibGUgb2YgaGl0dGluZyBQQ0kgcHJvYmUgZnVuY3Rpb25zIGFuZCB0aGVpciBlcnJvciBwYXRocy4KCkxldCYjMzk7cyBsb29rIGF0IHRoZSBwYXRjaCBpdHNlbGYgYWdhaW4uIEl0JiMzOTtzIGEgdmVyeSBzaW1wbGUgY2hhbmdlIGluIHRoZSBgY3R1Y2FuX3BjaV9wcm9iZWAgZXJyb3IgaGFuZGxpbmcgcGF0aC4gSWYgd2UgZnV6eiBpdCwgdGhlIGZvY3VzIHdvdWxkIGJlIG9uIGBjdHVjYW5fcGNpX3Byb2JlYC4gVG8gcnVuIGl0LCBJJiMzOTtkIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGZ1enplciBoYXMgYENPTkZJR19DQU5fQ1RVQ0FORkRgIGFuZCBgQ09ORklHX0NBTl9DVFVDQU5GRF9QQ0lgIGVuYWJsZWQuIExldCYjMzk7cyBzZW5kIGl0IHRvIHRoZSBmdXp6ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBDQU5fQ1RVQ0FORkQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZzoxOmNvbmZpZyBDQU5fQ1RVQ0FORkRcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTItXHR0cmlzdGF0ZSBcJiMzNDtDVFUgQ0FOLUZEIElQIGNvcmVcJiMzNDsgaWYgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMTMtXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZzoxNDpjb25maWcgQ0FOX0NUVUNBTkZEX1BDSVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMTUtXHR0cmlzdGF0ZSBcJiMzNDtDVFUgQ0FOLUZEIElQIGNvcmUgUENJL1BDSWUgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMjMtXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZzoyNDpjb25maWcgQ0FOX0NUVUNBTkZEX1BMQVRGT1JNXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZy0yNS1cdHRyaXN0YXRlIFwmIzM0O0NUVSBDQU4tRkQgSVAgY29yZSBwbGF0Zm9ybSAoRlBHQSwgU29DKSBkcml2ZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIERlcGVuZGVuY2llczogQ0FOX0NUVUNBTkZEX1BDSSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBkZXBlbmRlbmNpZXMgb2YgYENBTl9DVFVDQU5GRF9QQ0lgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgb3RoZXIgY29tcG9uZW50cywgZHJpdmVycywgb3IgbW9kdWxlcyB0aGlzIHBhcnRpY3VsYXIgZWxlbWVudCByZWxpZXMgdXBvbiB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgY3JpdGljYWwgZm9yIGFzc2Vzc2luZyBwb3RlbnRpYWwgaW1wYWN0cyBvZiBjaGFuZ2VzLCB0cm91Ymxlc2hvb3RpbmcgaXNzdWVzLCBvciBldmVuIHNpbXBseSB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZSB3aXRoaW4gdGhlIG92ZXJhbGwgc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSYjMzk7bGwgbmVlZCB0byBpZGVudGlmeTogYXJlIHRoZXJlIGFueSBrZXJuZWwgbW9kdWxlcywgc3BlY2lmaWMgaGFyZHdhcmUgcmVzb3VyY2VzLCBvciBvdGhlciBzb2Z0d2FyZSBjb21wb25lbnRzIGl0IGRlcGVuZHMgb24/IEFyZSB0aGVyZSBhbnkgdXBzdHJlYW0vZG93bnN0cmVhbSBjb25zaWRlcmF0aW9ucz8gU3BlY2lmaWNhbGx5LCBkb2VzIGl0IGludGVyZmFjZSB3aXRoIGFueSBvdGhlciBzdWJzeXN0ZW1zIHRoYXQgbWlnaHQgcmVxdWlyZSBjb29yZGluYXRpb24/IFRoaW5raW5nIGZ1cnRoZXIsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cyBpdCBtaWdodCBpbnRyb2R1Y2Ugd2l0aCBvdGhlciBoYXJkd2FyZSBvciBzb2Z0d2FyZT8gSSYjMzk7bGwgbmVlZCB0byB0cmFjayB0aGVzZSBkZXBlbmRlbmNpZXMgZG93biBhbmQgbWFwIHRoZW0sIGlmIEkgaGF2ZW4mIzM5O3QgYWxyZWFkeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdGNvbmZpZyBDQU5fQ1RVQ0FORkRcbiAgIDI6XHRcdHRyaXN0YXRlIFwmIzM0O0NUVSBDQU4tRkQgSVAgY29yZVwmIzM0OyBpZiBDT01QSUxFX1RFU1RcbiAgIDM6XHRcdGhlbHBcbiAgIDQ6XHRcdCAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciB0aGUgQ1RVIENBTiBGRCBvcGVuLXNvdXJjZSBJUCBjb3JlLlxuICAgNTpcdFx0ICBNb3JlIGRvY3VtZW50YXRpb24gYW5kIGNvcmUgc291cmNlcyBhdCBwcm9qZWN0IHBhZ2VcbiAgIDY6XHRcdCAgKGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy9jdHVjYW5mZF9pcF9jb3JlKS5cbiAgIDc6XHRcdCAgVGhlIGNvcmUgaW50ZWdyYXRpb24gdG8gWGlsaW54IFp5bnEgc3lzdGVtIGFzIHBsYXRmb3JtIGRyaXZlclxuICAgODpcdFx0ICBpcyBhdmFpbGFibGUgKGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy96eW5xL3p5bnEtY2FuLXNqYTEwMDAtdG9wKS5cbiAgIDk6XHRcdCAgSW1wbGVtZW50YXRpb24gb24gSW50ZWwgRlBHQS1iYXNlZCBQQ0kgRXhwcmVzcyBib2FyZCBpcyBhdmFpbGFibGVcbiAgMTA6XHRcdCAgZnJvbSBwcm9qZWN0IChodHRwczovL2dpdGxhYi5mZWwuY3Z1dC5jei9jYW5idXMvcGNpZS1jdHVjYW5mZCkgYW5kXG4gIDExOlx0XHQgIG9uIEludGVsIFNvQyBmcm9tIHByb2plY3QgKGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy9pbnRlbC1zb2MtY3R1Y2FuZmQpLlxuICAxMjpcdFx0ICBHdWlkZXBvc3QgQ1RVIEZFRSBDQU4gYnVzIHByb2plY3RzIHBhZ2UgaHR0cHM6Ly9jYW5idXMucGFnZXMuZmVsLmN2dXQuY3ovIC5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgQ0FOX0NUVUNBTkZEX1BDSVxuICAxNTpcdFx0dHJpc3RhdGUgXCYjMzQ7Q1RVIENBTi1GRCBJUCBjb3JlIFBDSS9QQ0llIGRyaXZlclwmIzM0O1xuICAxNjpcdFx0ZGVwZW5kcyBvbiBQQ0lcbiAgMTc6XHRcdHNlbGVjdCBDQU5fQ1RVQ0FORkRcbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBkcml2ZXIgYWRkcyBQQ0kvUENJZSBzdXBwb3J0IGZvciBDVFUgQ0FOLUZEIElQIGNvcmUuXG4gIDIwOlx0XHQgIFRoZSBwcm9qZWN0IHByb3ZpZGluZyBGUEdBIGRlc2lnbiBmb3IgSW50ZWwgRVA0Q0dYMTUgYmFzZWQgREI0Q0dYMTVcbiAgMjE6XHRcdCAgUENJZSBib2FyZCB3aXRoIFBpS1JPTi5jb20gZGVzaWduZWQgdHJhbnNjZWl2ZXIgcmlzZXIgc2hpZWxkIGlzIGF2YWlsYWJsZVxuICAyMjpcdFx0ICBhdCBodHRwczovL2dpdGxhYi5mZWwuY3Z1dC5jei9jYW5idXMvcGNpZS1jdHVjYW5mZCAuXG4gIDIzOlx0XG4gIDI0Olx0Y29uZmlnIENBTl9DVFVDQU5GRF9QTEFURk9STVxuICAyNTpcdFx0dHJpc3RhdGUgXCYjMzQ7Q1RVIENBTi1GRCBJUCBjb3JlIHBsYXRmb3JtIChGUEdBLCBTb0MpIGRyaXZlclwmIzM0O1xuICAyNjpcdFx0ZGVwZW5kcyBvbiBIQVNfSU9NRU0gXHUwMDI2XHUwMDI2IE9GXG4gIDI3Olx0XHRzZWxlY3QgQ0FOX0NUVUNBTkZEXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoZSBjb3JlIGhhcyBiZWVuIHRlc3RlZCB0b2dldGhlciB3aXRoIE9wZW5Db3JlcyBTSkExMDAwXG4gIDMwOlx0XHQgIG1vZGlmaWVkIHRvIGJlIENBTiBGRCBmcmFtZXMgdG9sZXJhbnQgb24gTWljcm9aZWQgWnlucSBiYXNlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI3OQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgUmVhc29uaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ0FOX0NUVUNBTkZEX1BDSWAuIEl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGlzIGRlcGVuZHMgZGlyZWN0bHkgb24gYFBDSWAsIG5vIHN1cnByaXNlcyB0aGVyZS4gTm93LCBvZiBjb3Vyc2UsIGl0JiMzOTtzIGFsc28gYSBDQU4gY29udHJvbGxlciwgc28gdGhhdCBtYWtlcyBtZSB0aGluayBpdCBuZWVkcyB0aGUgcGFyZW50IGBDQU5gIHN1YnN5c3RlbSBlbmFibGVkIGFzIHdlbGwuIE15IG5leHQgc3RlcCBoZXJlIGlzIHRvIGNvbmZpcm0gdGhvc2UgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBzb21ld2hlcmUgaW4gYGRyaXZlcnMvbmV0L2Nhbi9gLiBMZXQgbWUgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvY2FuL0tjb25maWdgLCBvciBzb21ld2hlcmUgc2ltaWxhciwgdG8gcGlucG9pbnQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ0FOX0NUVUNBTkZEYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBhbmQgdGhhdCBldmVyeXRoaW5nIGlzIHdpcmVkIHVwIGNvcnJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXCYjMzQ7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vS2NvbmZpZz0yNDc9c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jYzc3MC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZzoyNDg6c291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL25ldC9jYW4vS2NvbmZpZy0yNDktc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2Nhbi9lc2QvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipJbnZlc3RpZ2F0aW5nIENBTiBCdXMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgb3ZlcmFyY2hpbmcgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdGhpcyBDQU4gYnVzIG1vZHVsZS4gVGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYEtjb25maWdgIGZpbGUgaW4gdGhlIHJlbGV2YW50IGRyaXZlciBkaXJlY3RvcnksIHdoaWNoIEkgYXNzdW1lIGlzIGBkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIGRlcGVuZGVuY2llcyBhbmQgcGFyZW50IGNvbmZpZ3VyYXRpb25zIGFyZSBsaWtlbHkgZGVmaW5lZC4gSSYjMzk7bGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3MgY29udHJvbGxpbmcgdGhlIG9wdGlvbnMgcmVsYXRlZCB0byB0aGlzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gbGVhcm4gYWJvdXQgdGhlIHJlbGF0aW9uc2hpcHMgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51Y29uZmlnIENBTl9ERVZcbiAgIDQ6XHRcdHRyaXN0YXRlIFwmIzM0O0NBTiBEZXZpY2UgRHJpdmVyc1wmIzM0O1xuICAgNTpcdFx0ZGVmYXVsdCB5XG4gICA2Olx0XHRkZXBlbmRzIG9uIENBTlxuICAgNzpcdFx0aGVscFxuICAgODpcdFx0ICBDb250cm9sbGVyIEFyZWEgTmV0d29yayAoQ0FOKSBpcyBzZXJpYWwgY29tbXVuaWNhdGlvbnMgcHJvdG9jb2wgdXAgdG9cbiAgIDk6XHRcdCAgMU1iaXQvcyBmb3IgaXRzIG9yaWdpbmFsIHJlbGVhc2UgKG5vdyBrbm93biBhcyBDbGFzc2ljYWwgQ0FOKSBhbmQgdXBcbiAgMTA6XHRcdCAgdG8gOE1iaXQvcyBmb3IgdGhlIG1vcmUgcmVjZW50IENBTiB3aXRoIEZsZXhpYmxlIERhdGEtUmF0ZVxuICAxMTpcdFx0ICAoQ0FOLUZEKS4gVGhlIENBTiBidXMgd2FzIG9yaWdpbmFsbHkgbWFpbmx5IGZvciBhdXRvbW90aXZlLCBidXQgaXMgbm93XG4gIDEyOlx0XHQgIHdpZGVseSB1c2VkIGluIG1hcmluZSAoTk1FQTIwMDApLCBpbmR1c3RyaWFsLCBhbmQgbWVkaWNhbFxuICAxMzpcdFx0ICBhcHBsaWNhdGlvbnMuIE1vcmUgaW5mb3JtYXRpb24gb24gdGhlIENBTiBuZXR3b3JrIHByb3RvY29sIGZhbWlseVxuICAxNDpcdFx0ICBQRl9DQU4gaXMgY29udGFpbmVkIGluIFx1MDAzY0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4ucnN0XHUwMDNlLlxuICAxNTpcdFxuICAxNjpcdFx0ICBUaGlzIHNlY3Rpb24gY29udGFpbnMgYWxsIHRoZSBDQU4oLUZEKSBkZXZpY2UgZHJpdmVycyBpbmNsdWRpbmcgdGhlXG4gIDE3Olx0XHQgIHZpcnR1YWwgb25lcy4gSWYgeW91IG93biBzdWNoIGRldmljZXMgb3IgcGxhbiB0byB1c2UgdGhlIHZpcnR1YWwgQ0FOXG4gIDE4Olx0XHQgIGludGVyZmFjZXMgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMsIHNheSBZIGhlcmUuXG4gIDE5Olx0XG4gIDIwOlx0XHQgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxNDEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byBDQU4gQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGBDQU5fREVWYCBhbmQgYENBTmAuIE5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUgb3ZlcmFsbCBDQU4gY29uZmlndXJhdGlvbi4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgbmV0L2Nhbi9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGBDQU5gIG9wdGlvbi4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZCB3aGVuIGVuYWJsaW5nIHRoZSBDQU4gc3Vic3lzdGVtPyBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJyZWxhdGlvbnNoaXBzIG9mIHRoZXNlIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW51Y29uZmlnIENBTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jYW4vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY2FuL0tjb25maWctNS1cbm5ldC9jYW4vS2NvbmZpZzo2Om1lbnVjb25maWcgQ0FOXG5uZXQvY2FuL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0NBTiBidXMgc3Vic3lzdGVtIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDMKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBDQU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZSBDQU4gZHJpdmVyIG9wdGlvbnM6IGBDQU5gLCBgQ0FOX0RFVmAsIGFuZCBgQ0FOX0NUVUNBTkZEX1BDSWAuIEl0IHNlZW1zIGxpa2UgYENBTl9DVFVDQU5GRGAgaXMgc2VsZWN0ZWQgaW5kaXJlY3RseSBieSBgQ0FOX0NUVUNBTkZEX1BDSWAuIFRoZXJlZm9yZSwgdGhlIGBFbmFibGVDb25maWdzYCBsaXN0IEkgbmVlZCBzaG91bGQgYmUgYFsmIzM0O0NBTiYjMzQ7LCAmIzM0O0NBTl9ERVYmIzM0OywgJiMzNDtDQU5fQ1RVQ0FORkRfUENJJiMzNDtdYC4gVGhpcyBzZWVtcyBsb2dpY2FsIGdpdmVuIHRoZSBkZXBlbmRlbmNpZXMuCgpOb3csIEkgc2hvdWxkIHJlLWV4YW1pbmUgYGN0dWNhbl9wY2lfcHJvYmVgLiBJcyB0aGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IEFic29sdXRlbHkuIEl0JiMzOTtzIGEgUENJIHByb2JlIGZ1bmN0aW9uLCBhbmQgc3l6a2FsbGVyIGlzIHdlbGwtc3VpdGVkIGZvciB0YXJnZXRpbmcgdGhvc2UuIFRoZSBmb2N1cyBzeW1ib2wgd2lsbCBiZSBgY3R1Y2FuX3BjaV9wcm9iZWAuCgpKdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayBpZiB0aGVyZSB3ZXJlIGFueSBvdGhlciBmdW5jdGlvbnMgbW9kaWZpZWQgYnkgdGhlIHJlY2VudCBwYXRjaC4gQmFzZWQgb24gbXkgcXVpY2sgcmV2aWV3LCBpdCBzZWVtcyBsaWtlIHRoZSBjaGFuZ2VzIGFyZSBpc29sYXRlZCB0byBgY3R1Y2FuX3BjaV9wcm9iZWAuIEhvd2V2ZXIsIGxldCBtZSBkb3VibGUtY2hlY2sgdGhlIHBhdGNoIG9uZSBsYXN0IHRpbWUgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2N0dWNhbl9wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jPTUzPXN0YXRpYyB2b2lkIGN0dWNhbl9wY2lfc2V0X2RydmRhdGEoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02NC0vKipcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzo2NTogKiBjdHVjYW5fcGNpX3Byb2JlIC0gUENJIHJlZ2lzdHJhdGlvbiBjYWxsXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNjYtICogQHBkZXY6XHRIYW5kbGUgdG8gdGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTczLSAqL1xuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjc0OnN0YXRpYyBpbnQgY3R1Y2FuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy03NS1cdFx0XHQgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9MjcwPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjdHVjYW5fcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMjcyLVx0LmlkX3RhYmxlID0gY3R1Y2FuX3BjaV90YmwsXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM6MjczOlx0LnByb2JlID0gY3R1Y2FuX3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzQtXHQucmVtb3ZlID0gY3R1Y2FuX3BjaV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMjgwCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIE1vZGlmaWNhdGlvbioqCgpSaWdodCwgc28gdGhlIG9ubHkgZnVuY3Rpb24gdG91Y2hlZCBoZXJlIGlzIGBjdHVjYW5fcGNpX3Byb2JlYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIFRoZSBjaGFuZ2UgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBtZWFuaW5nIGl0JiMzOTtzIGFsdGVyaW5nIHRoZSAqYmVoYXZpb3IqIG9mIHRoZSBjb2RlLCBhbmQgc3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gQ2FuIHRoaXMgY29kZSBhY3R1YWxseSAqZXhlY3V0ZSogdW5kZXIgYW55IGNpcmN1bXN0YW5jZXM/CgpUaGUgdGV4dCBzYXlzIHllcywgaXQgaXMuIFRoZSBlcnJvciBwYXRoIGlzIHRyaWdnZXJlZCBieSBhIGZhaWx1cmUgaW4gZWl0aGVyIGBremFsbG9jX29iamAgb3Igc29tZXRoaW5nIHRoYXQgaGFwcGVucyAqYWZ0ZXIqIHRoYXQgaW5pdGlhbGl6YXRpb24uIFRoYXQgc291bmRzIHJlYXNvbmFibGUuIElmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCBvciBzb21ldGhpbmcgZWxzZSBnb2VzIHNpZGV3YXlzIGluIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB0aGF0IGZvbGxvd3MgYGt6YWxsb2Nfb2JqYCwgd2UmIzM5O2xsIGp1bXAgdG8gYGVycl9wY2lfaW91bm1hcF9iYXIwYC4KCk5vdywgSSB3YW50IHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IGNhbiB0cmlnZ2VyIHRoaXMuIFdoYXQsIHNwZWNpZmljYWxseSwgY291bGQgZmFpbCAqYWZ0ZXIqIHRoZSBga3phbGxvY19vYmpgIGNhbGwgdGhhdCB3b3VsZCBsZWFkIHVzIGRvd24gdGhpcyBlcnJvciBwYXRoPyBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgY29tZXMgYWZ0ZXIgdGhlIGNhbGwgdG8gdW5kZXJzdGFuZCB3aGF0IHNjZW5hcmlvcyB0aGlzIGNoYW5nZSBhZGRyZXNzZXMgYW5kIGVuc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhIGJyb2FkZXIgY29uY2VybiBpbiB0aGlzIHBhcnQgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDAzOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNDg6XHRcdGJkYXRhID0ga3phbGxvY19vYmooKmJkYXRhKTtcbiAxNDk6XHRcdGlmICghYmRhdGEpIHtcbiAxNTA6XHRcdFx0cmV0ID0gLUVOT01FTTtcbiAxNTE6XHRcdFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMDtcbiAxNTI6XHRcdH1cbiAxNTM6XHRcbiAxNTQ6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmJkYXRhLVx1MDAzZW5kZXZfbGlzdF9oZWFkKTtcbiAxNTU6XHRcdGJkYXRhLVx1MDAzZWJhcjBfYmFzZSA9IGJhcjBfYmFzZTtcbiAxNTY6XHRcdGJkYXRhLVx1MDAzZWNyYV9iYXNlID0gY3JhX2FkZHI7XG4gMTU3Olx0XHRiZGF0YS1cdTAwM2ViYXIxX2Jhc2UgPSBhZGRyO1xuIDE1ODpcdFx0YmRhdGEtXHUwMDNldXNlX21zaSA9IG1zaV9vaztcbiAxNTk6XHRcbiAxNjA6XHRcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBiZGF0YSk7XG4gMTYxOlx0XG4gMTYyOlx0XHRyZXQgPSBjdHVjYW5fcHJvYmVfY29tbW9uKGRldiwgYWRkciwgaXJxLCBudHhidWZzLCAxMDAwMDAwMDAsXG4gMTYzOlx0XHRcdFx0XHQgIDAsIGN0dWNhbl9wY2lfc2V0X2RydmRhdGEpO1xuIDE2NDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAxNjU6XHRcdFx0Z290byBlcnJfZnJlZV9ib2FyZDtcbiAxNjY6XHRcbiAxNjc6XHRcdGNvcmVfaSYjNDM7JiM0Mzs7XG4gMTY4Olx0XG4gMTY5Olx0XHR3aGlsZSAoY29yZV9pIFx1MDAzYyBudW1fY29yZXMpIHtcbiAxNzA6XHRcdFx0YWRkciAmIzQzOz0gMHg0MDAwO1xuIDE3MTpcdFx0XHRyZXQgPSBjdHVjYW5fcHJvYmVfY29tbW9uKGRldiwgYWRkciwgaXJxLCBudHhidWZzLCAxMDAwMDAwMDAsXG4gMTcyOlx0XHRcdFx0XHRcdCAgMCwgY3R1Y2FuX3BjaV9zZXRfZHJ2ZGF0YSk7XG4gMTczOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiAxNzQ6XHRcdFx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O0NUVSBDQU4gRkQgY29yZSAlZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcXG5cJiMzNDssXG4gMTc1Olx0XHRcdFx0XHQgY29yZV9pKTtcbiAxNzY6XHRcdFx0XHRicmVhaztcbiAxNzc6XHRcdFx0fVxuIDE3ODpcdFx0XHRjb3JlX2kmIzQzOyYjNDM7O1xuIDE3OTpcdFx0fVxuIDE4MDpcdFxuIDE4MTpcdFx0LyogZW5hYmxlIGludGVycnVwdCBpblxuIDE4MjpcdFx0ICogQXZhbG9uLU1NIHRvIFBDSSBFeHByZXNzIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXJcbiAxODM6XHRcdCAqL1xuIDE4NDpcdFx0Y3JhX2EycF9pZSA9IGlvcmVhZDMyKGNyYV9hZGRyICYjNDM7IENZQ0xPTkVfSVZfQ1JBX0EyUF9JRSk7XG4gMTg1Olx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O2NyYV9hMnBfaWUgMHglMDh4XFxuXCYjMzQ7LCBjcmFfYTJwX2llKTtcbiAxODY6XHRcdGNyYV9hMnBfaWUgfD0gMTtcbiAxODc6XHRcdGlvd3JpdGUzMihjcmFfYTJwX2llLCBjcmFfYWRkciAmIzQzOyBDWUNMT05FX0lWX0NSQV9BMlBfSUUpO1xuIDE4ODpcdFx0Y3JhX2EycF9pZSA9IGlvcmVhZDMyKGNyYV9hZGRyICYjNDM7IENZQ0xPTkVfSVZfQ1JBX0EyUF9JRSk7XG4gMTg5Olx0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O2NyYV9hMnBfaWUgMHglMDh4XFxuXCYjMzQ7LCBjcmFfYTJwX2llKTtcbiAxOTA6XHRcbiAxOTE6XHRcdHJldHVybiAwO1xuIDE5MjpcdFxuIDE5MzpcdGVycl9mcmVlX2JvYXJkOlxuIDE5NDpcdFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIDE5NTpcdFx0a2ZyZWUoYmRhdGEpO1xuIDE5NjpcdGVycl9wY2lfaW91bm1hcF9iYXIwOlxuIDE5NzpcdFx0cGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ1NjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ1RVIENBTiBGRCBQQ0kgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIENUVSBDQU4gRkQgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGl0cyBlcnJvciBoYW5kbGluZyBkdXJpbmcgdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQsIHllcywgdGhlIGBjdHVjYW5fcHJvYmVfY29tbW9uYCBmdW5jdGlvbiAqY2FuKiBmYWlsLCBhbmQgd2hlbiBpdCBkb2VzLCBpdCBjb3JyZWN0bHkgZ29lcyBkb3duIHRoZSBlcnJvciBwYXRoIHRvIGBlcnJfZnJlZV9ib2FyZGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYGVycl9wY2lfaW91bm1hcF9iYXIwYC4gVGhhdCBtZWFucyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgYWN0dWFsbHkgYSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgcGFydCBvZiB0aGUgY29kZSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIHRvIGNvbmZpcm0uCgpOb3csIGxldCBtZSBzb2xpZGlmeSB0aGUgZnV6emluZyBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgYmFzZWQgb24gdGhpcyB1bmRlcnN0YW5kaW5nOgoKKiAgICoqYFdvcnRoRnV6emluZzogdHJ1ZWAqKjogRGVmaW5pdGVseS4gVGhpcyBpcyBhIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcgcGF0aCB0aGF0IG5lZWRzIHRvIGJlIHRlc3RlZCB2aWdvcm91c2x5LiBGYXVsdCBpbmplY3Rpb24gb3IgaW50ZW50aW9uYWxseSBpbnZhbGlkIGRldmljZSBjb25maWd1cmF0aW9ucyBjb3VsZCBkZWZpbml0ZWx5IHRyaWdnZXIgdGhpcy4KKiAgICoqYEZvY3VzU3ltYm9sczogWyYjMzQ7Y3R1Y2FuX3BjaV9wcm9iZSYjMzQ7XWAqKjogVGhlIGZvY3VzIGlzLCBhcyBleHBlY3RlZCwgb24gdGhlIGBjdHVjYW5fcGNpX3Byb2JlYCBmdW5jdGlvbiBpdHNlbGYsIHdoaWNoIGlzIHdoZXJlIHRoZSBwcm9iZSBvcGVyYXRpb24gc3RhcnRzLgoqICAgKipgRW5hYmxlQ29uZmlnczogWyYjMzQ7Q0FOJiMzNDssICYjMzQ7Q0FOX0RFViYjMzQ7LCAmIzM0O0NBTl9DVFVDQU5GRF9QQ0kmIzM0O11gKio6IEkgbmVlZCB0byBlbmFibGUgdGhlIGNvcmUgQ0FOIGZ1bmN0aW9uYWxpdHksIHRoZSBDQU4gZGV2aWNlIHN1cHBvcnQsIGFuZCB0aGUgc3BlY2lmaWMgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyLiBJIHdhcyBicmllZmx5IHBvbmRlcmluZyB0aGUgaW5jbHVzaW9uIG9mIGBDQU5fQ1RVQ0FORkRgIHNlcGFyYXRlbHksIGJ1dCBzaW5jZSBgQ0FOX0NUVUNBTkZEX1BDSWAgKnNlbGVjdHMqIGl0LCBpdCBpcywgaW4gZmFjdCwgcmVkdW5kYW50LiBXaGlsZSBpdCB3b3VsZG4mIzM5O3QgaHVydCB0byBpbmNsdWRlIGl0LCBpdCYjMzk7cyBjbGVhbmVyIHRvIG9taXQgaXQsIHNvIHRoZSBmaW5hbCBzZXQgc3RheXMgYXMgc2hvd24uIEFuZCB5ZXMsIGBDQU5fREVWYCBpcyBlbmFibGVkIHdpdGggYENBTmAgYnV0IGl0JiMzOTtzIGdvb2QgdG8gYmUgZXhwbGljaXQuIGBQQ0lgIGlzIGFsc28gbmVlZGVkLCBidXQgYXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGl0JiMzOTtzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8gY2FsbCBpdCBvdXQuCgpGaW5hbGx5LCBqdXN0IG91dCBvZiBjdXJpb3NpdHksIEkgZG91YmxlLWNoZWNrZWQgd2hldGhlciBga3phbGxvY19vYmpgIGlzIGEgbWFjcm8uIEl0JiMzOTtzIG5vdCBjcml0aWNhbCB0byB0aGUgZnV6emluZyBzZXR1cCwgYnV0IEkgZW5qb3kga25vd2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz03ND1zdGF0aWMgaW50IGN0dWNhbl9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTE0Ny1cbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzoxNDg6XHRiZGF0YSA9IGt6YWxsb2Nfb2JqKCpiZGF0YSk7XG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMTQ5LVx0aWYgKCFiZGF0YSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTQ5NwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWJ1Z2dpbmcgYSBLZXJuZWwgTW9kdWxlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkmIzM5O20gbG9va2luZyBhdCBgY3R1Y2FuZmRfcGNpLmNgIGFuZCBJJiMzOTttIHNlZWluZyBhIHJlZmVyZW5jZSB0byBga3phbGxvY19vYmpgLiBUaGF0IHNlZW1zIGxpa2UgaXQgc2hvdWxkIGJlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBhbGxvY2F0aW9uIGZ1bmN0aW9uLiBCdXQgdGhlIGNvbXBpbGVyIGlzIGNvbXBsYWluaW5nIHRoYXQgaXQmIzM5O3MgdW5kZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoYXQmIzM5O3MgYSBiaXQgcGVycGxleGluZy4gVGhpcyBpc24mIzM5O3QgdGhlIGtpbmQgb2YgZnVuY3Rpb24geW91JiMzOTtkIGV4cGVjdCB0byBiZSBkZWNsYXJlZCBsb2NhbGx5LCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IHBhcnQgb2YgYSBjb3JlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lLiBTbywgdGhlIGtleSBxdWVzdGlvbiBub3cgaXM6IHdoZXJlIHRoZSBoZWNrICppcyogYGt6YWxsb2Nfb2JqYCBkZWZpbmVkPyBJIG5lZWQgdG8gdHJhY2sgZG93biBpdHMgb3JpZ2luLiBJcyBpdCBhIGZ1bmN0aW9uLCBhIG1hY3JvPyBJIG5lZWQgdG8gY2hlY2sgdGhlIHJlbGV2YW50IGhlYWRlciBmaWxlcywgYW5kIHBlcmhhcHMgdGhlIGtlcm5lbCBzb3VyY2UgZGlyZWN0bHksIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhhdCBkZWNsYXJhdGlvbiBpcyBsdXJraW5nLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgZGVmaW5pdGlvbiBoYXMgYmVlbiBtb3ZlZCwgcmVuYW1lZCwgb3IgcGVyaGFwcyBhIHByZXByb2Nlc3NvciBndWFyZCBpcyBjb25kaXRpb25hbGx5IG9taXR0aW5nIGl0cyBpbmNsdXNpb24uIFRpbWUgdG8gYnJlYWsgb3V0IHRoZSBncmVwIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZWZpbmUga3phbGxvY19vYmomIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zbGFiLmg9MTA1MT12b2lkICprbWFsbG9jX25vbG9jayhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7XG4tLVxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEzMi0vKiBBbGwga3phbGxvYyBhbGlhc2VzIGZvciBrbWFsbG9jXyhvYmp8b2Jqc3xmbGV4KS4gKi9cbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMzM6I2RlZmluZSBremFsbG9jX29iaihQLCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L3NsYWIuaC0xMTM0LVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzNTojZGVmaW5lIGt6YWxsb2Nfb2JqcyhQLCBDT1VOVCwgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9zbGFiLmgtMTEzNi1cdF9fYWxsb2Nfb2JqcyhremFsbG9jLCBkZWZhdWx0X2dmcChfX1ZBX0FSR1NfXyksIHR5cGVvZihQKSwgQ09VTlQpXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg9MjAwPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGttZW1fY2FjaGVfc2hlYWZfc2l6ZShzdHJ1Y3Qgc2xhYl9zaGVhZiAqc2hlYWYpXG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEwLVxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmg6MjExOiNkZWZpbmUga3phbGxvY19vYmooUCwgLi4uKSBcXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEyLVx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAwMzo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjEwMwoJCQkJCQkJb3V0cHV0OiAxMDYKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQ6IENUVSBDQU4gRkQgUENJIERyaXZlciBQcm9iZSoqCgpPa2F5LCBhbm90aGVyIG5ldyBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9zbGFiLmhgLi4uIGludGVyZXN0aW5nLCBidXQgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBicmFzcyB0YWNrcyBvZiB0aGlzIHBhdGNoLiBTZWVtcyBsaWtlIHdlIGhhdmUgYSBmdW5jdGlvbmFsIGZpeCBoZXJlLiBTcGVjaWZpY2FsbHksIGEgdHdlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhcnQgb2YgdGhlIFBDSSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24g4oCTIHRoZSBgY3R1Y2FuX3BjaV9wcm9iZWAgZnVuY3Rpb24gdG8gYmUgcHJlY2lzZS4gSW1tZWRpYXRlbHksIG15IG1pbmQgZ29lcyB0byBmdXp6aW5nLiBUaGlzIGlzIHByZWNpc2VseSB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCBiZWdzIGZvciBpdC4gQSBmaXggaW4gZXJyb3IgaGFuZGxpbmc/IFRoYXQgbWVhbnMgcG90ZW50aWFsbHkgZXhwbG9pdGFibGUgY29ybmVyIGNhc2VzLgoKU28sIGxldCYjMzk7cyBjb2RpZnkgdGhpcyBpbnRvIGEgZnV6emluZyBwbGFuLiBgV29ydGhGdXp6aW5nYD8gQWJzb2x1dGVseSwgdHJ1ZS4gYEZvY3VzU3ltYm9sc2Agd2lsbCBiZSBgY3R1Y2FuX3BjaV9wcm9iZWAuIE5vdywgd2UgbmVlZCB0aGUgcmlnaHQgY29uZmlncyBlbmFibGVkOiBgQ0FOYCwgYENBTl9ERVZgLCBhbmQgY3J1Y2lhbGx5LCBgQ0FOX0NUVUNBTkZEX1BDSWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIHBhdGNoIHJlY3RpZmllcyBhbiBpbmNvcnJlY3QgdW5tYXAgYWRkcmVzcyB3aXRoaW4gdGhlIGVycm9yIGhhbmRsaW5nIG9mIHRoZSBgQ1RVIENBTiBGRGAgUENJIGRyaXZlciYjMzk7cyBwcm9iZSBmdW5jdGlvbi4gVGhpcyBjb2RlIHBhdGggaXMgdmVyeSByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIHBvdGVudGlhbGx5IGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24sIG9yIGV2ZW4gYSBkb2RneSBkZXZpY2UgY29uZmlndXJhdGlvbi4gR290dGEgdGVzdCBpdCEgTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMDM6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9DVFVDQU5GRF9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHVjYW5fcGNpX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluY29ycmVjdCB1bm1hcCBhZGRyZXNzIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIHRoZSBDVFUgQ0FOIEZEIFBDSSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NBTiYjMzQ7LAogICAgJiMzNDtDQU5fREVWJiMzNDssCiAgICAmIzM0O0NBTl9DVFVDQU5GRF9QQ0kmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjdHVjYW5fcGNpX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluY29ycmVjdCB1bm1hcCBhZGRyZXNzIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIHRoZSBDVFUgQ0FOIEZEIFBDSSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo0Ni42NDQ3MzQyMDRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njc5NjIzMDI0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9ERVZcIixcbiAgICBcIkNBTl9DVFVDQU5GRF9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdHVjYW5fcGNpX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5jb3JyZWN0IHVubWFwIGFkZHJlc3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgdGhlIENUVSBDQU4gRkQgUENJIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo0Ni42NDQ3Mzk0MDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0NjM4NDQxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGRkMjcwNDcyZjM5OTI2OWQxY2IxNmYyZmI1NmQ4Y2FiNTZhMGY5MzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMjYgMDM6NDg6NDUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jIGIvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXFxuaW5kZXggNjI1Nzg4ZmE4OTc2NjIuLmY4NDU5NTFjNWQ1MTM5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuY1xcbkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7XFxuIFxcdGtmcmVlKGJkYXRhKTtcXG4gZXJyX3BjaV9pb3VubWFwX2JhcjA6XFxuLVxcdHBjaV9pb3VubWFwKHBkZXYsIGNyYV9hZGRyKTtcXG4rXFx0cGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTtcXG4gZXJyX3BjaV9pb3VubWFwX2JhcjE6XFxuIFxcdHBjaV9pb3VubWFwKHBkZXYsIGFkZHIpO1xcbiBlcnJfcmVsZWFzZV9yZWdpb25zOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo0Ny4wOTE3NTY4NloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjY2MzQ5MTgwNjc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0RFVlwiLFxuICAgIFwiQ0FOX0NUVUNBTkZEX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0dWNhbl9wY2lfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbmNvcnJlY3QgdW5tYXAgYWRkcmVzcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiB0aGUgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkMjcwNDcyZjM5OTI2OWQxY2IxNmYyZmI1NmQ4Y2FiNTZhMGY5MzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAwMzo0ODo0NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYyBiL2RyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuY1xuaW5kZXggNjI1Nzg4ZmE4OTc2NjIuLmY4NDU5NTFjNWQ1MTM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXG4rKysgYi9kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmNcbkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xuIFx0a2ZyZWUoYmRhdGEpO1xuIGVycl9wY2lfaW91bm1hcF9iYXIwOlxuLVx0cGNpX2lvdW5tYXAocGRldiwgY3JhX2FkZHIpO1xuK1x0cGNpX2lvdW5tYXAocGRldiwgYmFyMF9iYXNlKTtcbiBlcnJfcGNpX2lvdW5tYXBfYmFyMTpcbiBcdHBjaV9pb3VubWFwKHBkZXYsIGFkZHIpO1xuIGVycl9yZWxlYXNlX3JlZ2lvbnM6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo0Ny4wOTE3NTc5OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMDEwMDY4NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUENJIERyaXZlciBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmNgLiBUaGUgY2hhbmdlIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0J3MgYSBjb3JyZWN0aW9uIGluIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gdGhlIGBjdHVjYW5fcGNpX3Byb2JlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHN3YXBwaW5nIGBwY2lfaW91bm1hcChwZGV2LCBjcmFfYWRkcik7YCBmb3IgYHBjaV9pb3VubWFwKHBkZXYsIGJhcjBfYmFzZSk7YC4gSXQncyBhIGNsZWFudXAsIG5vdGhpbmcgdG9vIGV4Y2l0aW5nIGluIGl0c2VsZi5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMgd2l0aCB0aGVzZSB0aGluZ3MsIGlzIFwiY2FuIHdlIGZ1enogdGhpcz9cIiBBbmQgdGhhdCBoaW5nZXMgb24gd2hldGhlciB0aGlzIGRyaXZlciBpcyBldmVuICpwcm9iZWQqIGluIGFuIGVtdWxhdGVkIGVudmlyb25tZW50IGxpa2UgUUVNVS4gUmVhZGluZyB0aGUgY29kZSwgaXQncyBhIFBDSSBkcml2ZXIgZm9yIENUVSBDQU4gRkQuIFJpZ2h0LCBhIHNwZWNpZmljIElQIGNvcmUuIFRoYXQncyB1c3VhbGx5IGEgYmFkIHNpZ24gZm9yIFFFTVUgY29tcGF0aWJpbGl0eSwgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlcnMgcmFyZWx5IHdvcmsgb3V0LW9mLXRoZS1ib3guIE15IGd1dCBzYXlzIFwicHJvYmFibHkgbm90LFwiIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZW11bGF0b3IgZm9yIHRoaXMgcGFydGljdWxhciBoYXJkd2FyZS5cblxuQnV0IHRoaXMgaXMgYW4gKmVycm9yKiBwYXRoIHdpdGhpbiBgLnByb2JlYC4gVGhlIGZ1bmN0aW9uIHdvbid0IGV2ZW4gKmJlKiBjYWxsZWQgaWYgdGhlIGRldmljZSBpc24ndCBwcmVzZW50LCByaWdodD8gQW5kIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIG1hcmsgdGhlc2UgYXMgbm90IHdvcnRoIGZ1enppbmcgZm9yIHZlbmRvci1zcGVjaWZpYyBQQ0llIGRyaXZlcnMgdGhhdCByZXF1aXJlIHJlYWwgaGFyZHdhcmUuIEl0J3MgYSBwcm9iZSBlcnJvciBwYXRoLlxuXG5Pa2F5LCB3YWl0LCBTeXprYWxsZXIgKmRvZXMqIGhhdmUgdmlydHVhbCBQQ0kgZGV2aWNlIGluamVjdGlvbiB3aXRoIGBzeXpfcGNpX3ZwY2lgIGFuZCBzaW1pbGFyIG1lY2hhbmlzbXMuIEJ1dCBpcyBpdCBzb3BoaXN0aWNhdGVkIGVub3VnaCB0byBpbmplY3QgYSBDVFUgQ0FOIEZEIGRldmljZT8gVGhlIGluamVjdGlvbiBtaWdodCBiZSB0aGVyZSwgYnV0IGl0IGxpa2VseSByZXF1aXJlcyBkZXRhaWxlZCBkcml2ZXIga25vd2xlZGdlLlxuXG5TbyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRyaXZlciBpdHNlbGYgaW4gbW9yZSBkZXRhaWwuIExldCdzIHNlZSBpZiB0aGlzIHNwZWNpZmljIGhhcmR3YXJlIGlzIHN1cHBvcnRlZCBieSBTeXprYWxsZXIncyB2aXJ0dWFsIFBDSSBpbmplY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTUsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo1NC4wOTI3NjY3OTNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5Mzk5MDI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0dWNhbl9wY2lfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz01Mz1zdGF0aWMgdm9pZCBjdHVjYW5fcGNpX3NldF9kcnZkYXRhKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02NC0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM6NjU6ICogY3R1Y2FuX3BjaV9wcm9iZSAtIFBDSSByZWdpc3RyYXRpb24gY2FsbFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02Ni0gKiBAcGRldjpcXHRIYW5kbGUgdG8gdGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzMtICovXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjc0OnN0YXRpYyBpbnQgY3R1Y2FuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9MjcwPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjdHVjYW5fcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzItXFx0LmlkX3RhYmxlID0gY3R1Y2FuX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjI3MzpcXHQucHJvYmUgPSBjdHVjYW5fcGNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzQtXFx0LnJlbW92ZSA9IGN0dWNhbl9wY2lfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0ODo1NC40MTIxNzA2MjZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzcyNDM0NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIGEgU2ltcGxlIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGEgZml4IGluIHRoZSBlcnJvciBoYW5kbGluZyBvZiBgY3R1Y2FuX3BjaV9wcm9iZWAuIFRoZSBkZXZpY2UgaW4gcXVlc3Rpb24gaXMgYSBQQ0kgZGV2aWNlLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIFBDSSBzdWJzeXN0ZW0uIE5vdywgY2FuIHN5emthbGxlciBldmVuICpyZWFjaCogdGhpcyBlcnJvciBwYXRoPyBZZWFoLCBpdCBzaG91bGQgYmUgcG9zc2libGUuIEkndmUgc2VlbiBpdCBkb25lIHdpdGggYHN5el9wY2lfdnBjaWAsIGBzeXpfcGNpX2RldmljZV9hZGRgLCBvciBzaW1pbGFyIHN5c2NhbGxzLiBJZiB0aGUgUENJIHN1YnN5c3RlbSBpcyBlbmFibGVkIGFuZCBzeXprYWxsZXIgY2FuIGluamVjdCBQQ0kgZGV2aWNlcywgdGhlbiBpdCAqc2hvdWxkKiBiZSBhYmxlIHRvIGZ1enogUENJIHByb2JlIGZ1bmN0aW9ucy5cblxuQnV0IGlzIHRoaXMgcGF0Y2gsIGEgc2luZ2xlIGxpbmUgY2hhbmdlIOKAkyBzcGVjaWZpY2FsbHksIHN3YXBwaW5nIGBjcmFfYWRkcmAgZm9yIGBiYXIwX2Jhc2VgIGluIGEgYHBjaV9pb3VubWFwYCBjYWxsIGluIGFuIGVycm9yIHBhdGgg4oCTIGV2ZW4gd29ydGggdGhlIGVmZm9ydCBvZiBmdXp6aW5nPyBJdCdzIGEgUENJIGRyaXZlciBwcm9iZSBlcnJvciBwYXRoLCBzbyB0aGVyZSdzIGEgY2hhbmNlLiBJZiB0aGUgZnV6emVyIGNhbiBpbmplY3QgdGhlIGRldmljZSBhbmQgdHJpZ2dlciBhbiBlcnJvciAqZHVyaW5nKiB0aGUgcHJvYmUsIHdlIG1pZ2h0IHNlZSB0aGlzIGNvZGUgZ2V0IGV4ZXJjaXNlZC4gU28sIGJlZm9yZSBJIGRpc21pc3MgaXQgb3V0cmlnaHQsIGxldCdzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB3aGF0IGBjdHVjYW5mZF9wY2lfcHJvYmVgIGFjdHVhbGx5IGRvZXMuIFVuZGVyc3RhbmRpbmcgdGhlIHByb2JlJ3MgbG9naWMgaXMgdGhlIGtleSB0byBzZWVpbmcgaWYgc3l6a2FsbGVyIGNhbiBnZXQgdG8gdGhlIGVycm9yIHBhdGghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDYsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDg6NTkuMTg0NjA3MjE1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODAxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MDpcXHRcXHRsaXN0X2FkZChcXHUwMDI2cHJpdi1cXHUwMDNlcGVlcnNfb25fcGRldiwgXFx1MDAyNmJkYXRhLVxcdTAwM2VuZGV2X2xpc3RfaGVhZCk7XFxuICA2MTpcXHRcXHRwcml2LVxcdTAwM2VpcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDtcXG4gIDYyOlxcdH1cXG4gIDYzOlxcdFxcbiAgNjQ6XFx0LyoqXFxuICA2NTpcXHQgKiBjdHVjYW5fcGNpX3Byb2JlIC0gUENJIHJlZ2lzdHJhdGlvbiBjYWxsXFxuICA2NjpcXHQgKiBAcGRldjpcXHRIYW5kbGUgdG8gdGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlXFxuICA2NzpcXHQgKiBAZW50OlxcdFBvaW50ZXIgdG8gdGhlIGVudHJ5IGZyb20gY3R1Y2FuX3BjaV90YmxcXG4gIDY4OlxcdCAqXFxuICA2OTpcXHQgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgYWxsIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgcmVnaXN0cmF0aW9uIGZvciB0aGUgQ0FOXFxuICA3MDpcXHQgKiBkZXZpY2UuXFxuICA3MTpcXHQgKlxcbiAgNzI6XFx0ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MgYW5kIGZhaWx1cmUgdmFsdWUgb24gZXJyb3JcXG4gIDczOlxcdCAqL1xcbiAgNzQ6XFx0c3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAgNzU6XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuICA3NjpcXHR7XFxuICA3NzpcXHRcXHRzdHJ1Y3QgZGV2aWNlXFx0KmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuICA3ODpcXHRcXHR1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhID0gZW50LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4gIDc5OlxcdFxcdHN0cnVjdCBjdHVjYW5fcGNpX2JvYXJkX2RhdGEgKmJkYXRhO1xcbiAgODA6XFx0XFx0dm9pZCBfX2lvbWVtICphZGRyO1xcbiAgODE6XFx0XFx0dm9pZCBfX2lvbWVtICpjcmFfYWRkcjtcXG4gIDgyOlxcdFxcdHZvaWQgX19pb21lbSAqYmFyMF9iYXNlO1xcbiAgODM6XFx0XFx0dTMyIGNyYV9hMnBfaWU7XFxuICA4NDpcXHRcXHR1MzIgY3R1Y2FuX2lkID0gMDtcXG4gIDg1OlxcdFxcdGludCByZXQ7XFxuICA4NjpcXHRcXHR1bnNpZ25lZCBpbnQgbnR4YnVmcztcXG4gIDg3OlxcdFxcdHVuc2lnbmVkIGludCBudW1fY29yZXMgPSAxO1xcbiAgODg6XFx0XFx0dW5zaWduZWQgaW50IGNvcmVfaSA9IDA7XFxuICA4OTpcXHRcXHRpbnQgaXJxO1xcbiAgOTA6XFx0XFx0aW50IG1zaV9vayA9IDA7XFxuICA5MTpcXHRcXG4gIDkyOlxcdFxcdHJldCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbiAgOTM6XFx0XFx0aWYgKHJldCkge1xcbiAgOTQ6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJwY2lfZW5hYmxlX2RldmljZSBGQUlMRURcXFxcblxcXCIpO1xcbiAgOTU6XFx0XFx0XFx0Z290byBlcnI7XFxuICA5NjpcXHRcXHR9XFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdHJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgS0JVSUxEX01PRE5BTUUpO1xcbiAgOTk6XFx0XFx0aWYgKHJldCkge1xcbiAxMDA6XFx0XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJwY2lfcmVxdWVzdF9yZWdpb25zIEZBSUxFRFxcXFxuXFxcIik7XFxuIDEwMTpcXHRcXHRcXHRnb3RvIGVycl9kaXNhYmxlX2RldmljZTtcXG4gMTAyOlxcdFxcdH1cXG4gMTAzOlxcdFxcbiAxMDQ6XFx0XFx0cmV0ID0gcGNpX2VuYWJsZV9tc2kocGRldik7XFxuIDEwNTpcXHRcXHRpZiAoIXJldCkge1xcbiAxMDY6XFx0XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiTVNJIGVuYWJsZWRcXFxcblxcXCIpO1xcbiAxMDc6XFx0XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIDEwODpcXHRcXHRcXHRtc2lfb2sgPSAxO1xcbiAxMDk6XFx0XFx0fVxcbiAxMTA6XFx0XFxuIDExMTpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJjdHVjYW4gQkFSMCAweCUwOGxseCAweCUwOGxseFxcXFxuXFxcIixcXG4gMTEyOlxcdFxcdFxcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSxcXG4gMTEzOlxcdFxcdFxcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpO1xcbiAxMTQ6XFx0XFxuIDExNTpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJjdHVjYW4gQkFSMSAweCUwOGxseCAweCUwOGxseFxcXFxuXFxcIixcXG4gMTE2OlxcdFxcdFxcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKSxcXG4gMTE3OlxcdFxcdFxcdCAobG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRhZGRyID0gcGNpX2lvbWFwKHBkZXYsIDEsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpO1xcbiAxMjA6XFx0XFx0aWYgKCFhZGRyKSB7XFxuIDEyMTpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlBDSSBCQVIgMSBjYW5ub3QgYmUgbWFwcGVkXFxcXG5cXFwiKTtcXG4gMTIyOlxcdFxcdFxcdHJldCA9IC1FTk9NRU07XFxuIDEyMzpcXHRcXHRcXHRnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbnM7XFxuIDEyNDpcXHRcXHR9XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdC8qIEN5Y2xvbmUgSVYgUENJIEV4cHJlc3MgQ29udHJvbCBSZWdpc3RlcnMgQXJlYSAqL1xcbiAxMjc6XFx0XFx0YmFyMF9iYXNlID0gcGNpX2lvbWFwKHBkZXYsIDAsIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpO1xcbiAxMjg6XFx0XFx0aWYgKCFiYXIwX2Jhc2UpIHtcXG4gMTI5OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiUENJIEJBUiAwIGNhbm5vdCBiZSBtYXBwZWRcXFxcblxcXCIpO1xcbiAxMzA6XFx0XFx0XFx0cmV0ID0gLUVJTztcXG4gMTMxOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9pb3VubWFwX2JhcjE7XFxuIDEzMjpcXHRcXHR9XFxuIDEzMzpcXHRcXG4gMTM0OlxcdFxcdGlmIChkcml2ZXJfZGF0YSA9PSBDVFVDQU5fV0lUSE9VVF9DVFVDQU5fSUQpIHtcXG4gMTM1OlxcdFxcdFxcdGNyYV9hZGRyID0gYmFyMF9iYXNlO1xcbiAxMzY6XFx0XFx0XFx0bnVtX2NvcmVzID0gMjtcXG4gMTM3OlxcdFxcdH0gZWxzZSB7XFxuIDEzODpcXHRcXHRcXHRjcmFfYWRkciA9IGJhcjBfYmFzZSArIENUVUNBTl9CQVIwX0NSQV9CQVNFO1xcbiAxMzk6XFx0XFx0XFx0Y3R1Y2FuX2lkID0gaW9yZWFkMzIoYmFyMF9iYXNlICsgQ1RVQ0FOX0JBUjBfQ1RVQ0FOX0lEKTtcXG4gMTQwOlxcdFxcdFxcdGRldl9pbmZvKGRldiwgXFxcImN0dWNhbl9pZCAweCUwOGx4XFxcXG5cXFwiLCAodW5zaWduZWQgbG9uZyljdHVjYW5faWQpO1xcbiAxNDE6XFx0XFx0XFx0bnVtX2NvcmVzID0gY3R1Y2FuX2lkIFxcdTAwMjYgMHhmO1xcbiAxNDI6XFx0XFx0fVxcbiAxNDM6XFx0XFxuIDE0NDpcXHRcXHRpcnEgPSBwZGV2LVxcdTAwM2VpcnE7XFxuIDE0NTpcXHRcXG4gMTQ2OlxcdFxcdG50eGJ1ZnMgPSA0O1xcbiAxNDc6XFx0XFxuIDE0ODpcXHRcXHRiZGF0YSA9IGt6YWxsb2Nfb2JqKCpiZGF0YSk7XFxuIDE0OTpcXHRcXHRpZiAoIWJkYXRhKSB7XFxuIDE1MDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxNTE6XFx0XFx0XFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMDtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmJkYXRhLVxcdTAwM2VuZGV2X2xpc3RfaGVhZCk7XFxuIDE1NTpcXHRcXHRiZGF0YS1cXHUwMDNlYmFyMF9iYXNlID0gYmFyMF9iYXNlO1xcbiAxNTY6XFx0XFx0YmRhdGEtXFx1MDAzZWNyYV9iYXNlID0gY3JhX2FkZHI7XFxuIDE1NzpcXHRcXHRiZGF0YS1cXHUwMDNlYmFyMV9iYXNlID0gYWRkcjtcXG4gMTU4OlxcdFxcdGJkYXRhLVxcdTAwM2V1c2VfbXNpID0gbXNpX29rO1xcbiAxNTk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ4OjU5LjE4NDY4ODg2NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5MDk5Nzk2MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUENJIERyaXZlciBFcnJvciBQYXRoIGZvciBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZXJyb3IgcGF0aCwgYGVycl9wY2lfaW91bm1hcF9iYXIwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQgZ2V0cyB0cmlnZ2VyZWQgaWYgYGt6YWxsb2Nfb2JqYCBmYWlscy4gV2FpdCwgaXMgdGhhdCBqdXN0IGEgbWFjcm8gZm9yIGBremFsbG9jYD8gTGV0IG1lIHNlZS4uLiB5ZWFoLCBpdCBsb29rcyBsaWtlIGBremFsbG9jX29iaigqYmRhdGEpO2AgaXMgbW9zdCBsaWtlbHkgYGt6YWxsb2Moc2l6ZW9mKCpiZGF0YSksIEdGUF9LRVJORUwpYC4gUHJvYmFibHkgYSBjdXN0b20gbWFjcm8gaW4gdGhpcyBkcml2ZXIgb3Iga2VybmVsIHZlcnNpb24uIEdvdCBpdC4gSWYgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCB3ZSBoaXQgYGVycl9wY2lfaW91bm1hcF9iYXIwYCwgd2hpY2ggdW5tYXBzIGBiYXIwX2Jhc2VgLlxuXG5UaGUgYnVnLCBhcHBhcmVudGx5LCB3YXMgdGhhdCBpdCB3YXMgdW5tYXBwaW5nIGBjcmFfYWRkcmAgaW5zdGVhZCBvZiBgYmFyMF9iYXNlYC4gQW5kIGZyb20gd2hhdCBJIHNlZSBgY3JhX2FkZHJgIGNhbiBiZSBgYmFyMF9iYXNlYCBvciBgYmFyMF9iYXNlICsgQ1RVQ0FOX0JBUjBfQ1JBX0JBU0VgLiBUaGF0IHVubWFwcGluZyBvZiBgY3JhX2FkZHJgIGlzIHBvdGVudGlhbGx5IHByb2JsZW1hdGljIGlmIGl0J3Mgb2Zmc2V0LiBPa2F5LlxuXG5Ob3csIHRoZSBpbnRlcmVzdGluZyBxdWVzdGlvbjogQ2FuIHdlIGZ1enogdGhpcz8gSXQncyBhIFBDSSBkcml2ZXIncyBwcm9iZSBlcnJvciBwYXRoLiBTeXprYWxsZXIgY2FuIGluamVjdCBQQ0kgZGV2aWNlcyBhbmQgdHJpZ2dlciBwcm9iZSBmdW5jdGlvbnMsIHBsdXMgaXQgY2FuIHVzZSBmYXVsdCBpbmplY3Rpb24gdG8gbWFrZSBga3phbGxvY2AgZmFpbCwgd2hpY2ggc2hvdWxkIGRlZmluaXRlbHkgdHJpZ2dlciB0aGlzIGV4YWN0IGVycm9yIHBhdGguIEV4Y2VsbGVudCFcblxuQnV0LCBkb2VzIHN5emthbGxlciBzdXBwb3J0IHRoaXMgKnNwZWNpZmljKiBkcml2ZXIsIHRoZSBDVFUgQ0FOIEZEIFBDSSBkcml2ZXI/IExldCBtZSBzZWUuLi4gSSdsbCBjaGVjayBpZiBpdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZS4gSG1tLCB0aGUgbm90ZSBhYm91dCB2ZW5kb3Itc3BlY2lmaWMgUENJZSBjYXJkcyB0aGF0IGFyZW4ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLi4uIElzIENUVSBDQU4gRkQgc3VjaCBhIHZlbmRvci1zcGVjaWZpYyBjYXJkPyBJdCdzIG9wZW4tc291cmNlLCBmcm9tIHRoZSBDemVjaCBUZWNobmljYWwgVW5pdmVyc2l0eSwgYW5kIGNhbiBiZSBpbXBsZW1lbnRlZCBvbiBGUEdBcy4gT2theSwgbm90IGluaGVyZW50bHkgdmVuZG9yLXNwZWNpZmljLlxuXG5TbywgaXMgaXQgZW11bGF0ZWQgaW4gUUVNVT8gUUVNVSBoYXMgc29tZSBDQU4gZW11bGF0aW9uLCBTSkExMDAwLCBLdmFzZXIsIGV0Yy4sIGJ1dCBkb2VzIGl0IGVtdWxhdGUgKnRoaXMqIHNwZWNpZmljIG9uZT8gSSBjYW4gY2hlY2sgdGhlIFFFTVUgc291cmNlIG9yIGRvIGEgcXVpY2sgc2VhcmNoLi4uIFdhaXQgYSBtaW51dGUuLi4gWWVzISBRRU1VIGRvZXMgZW11bGF0ZSBDVFUgQ0FOIEZEISBJdCB3YXMgYWRkZWQgYXJvdW5kIDIwMjAuIE9rYXksIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCwgYnV0IGlmIHRoYXQncyByaWdodCwgdGhpcyBpcyBsb29raW5nIGxpa2UgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU2MDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTowNy4wOTQ2NzA1MVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMzM4MDExNDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ1RVIENBTiBGRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnPTE9Y29uZmlnIENBTl9DVFVDQU5GRFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMy1cXHRoZWxwXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWc6NDpcXHQgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIENUVSBDQU4gRkQgb3Blbi1zb3VyY2UgSVAgY29yZS5cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZy01LVxcdCAgTW9yZSBkb2N1bWVudGF0aW9uIGFuZCBjb3JlIHNvdXJjZXMgYXQgcHJvamVjdCBwYWdlXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC0zLSAqXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkLmg6NDogKiBDVFUgQ0FOIEZEIElQIENvcmVcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaC01LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmQuaD0yOT1zdHJ1Y3QgY3R1Y2FuX3ByaXYge1xcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkLmgtNjItICogQGRldjpcXHRIYW5kbGUgdG8gdGhlIGdlbmVyaWMgZGV2aWNlIHN0cnVjdHVyZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oOjYzOiAqIEBhZGRyOlxcdEJhc2UgYWRkcmVzcyBvZiBDVFUgQ0FOIEZEIGNvcmUgYWRkcmVzc1xcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZC5oLTY0LSAqIEBpcnE6XFx0SW50ZXJydXB0IG51bWJlclxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0zLSAqXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtNS0gKlxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0xNjA9c3RhdGljIGNvbnN0IGNoYXIgKmN0dWNhbl9zdGF0ZV90b19zdHIoZW51bSBjYW5fc3RhdGUgc3RhdGUpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTE2OS0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjE3MDogKiBjdHVjYW5fcmVzZXQoKSAtIElzc3VlcyBzb2Z0d2FyZSByZXNldCByZXF1ZXN0IHRvIENUVSBDQU4gRkRcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTE3MS0gKiBAbmRldjpcXHRQb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jPTE3NT1zdGF0aWMgaW50IGN0dWNhbl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMTk3LS8qKlxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MTk4OiAqIGN0dWNhbl9zZXRfYnRyKCkgLSBTZXRzIENBTiBidXMgYml0IHRpbWluZyBpbiBDVFUgQ0FOIEZEXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0xOTktICogQG5kZXY6XFx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0yMDU9c3RhdGljIGludCBjdHVjYW5fc2V0X2J0cihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgc3RydWN0IGNhbl9iaXR0aW1pbmcgKmJ0LCBib29sIG5vbWluYWwpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTIyMi1cXHQgKiBwaGFzZTFfc2VnIGNvbWJpbmVkLiB0c2VnMSBpcyB0aGVuIHNwbGl0IGluIGhhbGYgYW5kIHN0b3JlZCBpbnRvIHByb2dfc2VnIGFuZCBwaGFzZV9zZWcxLlxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MjIzOlxcdCAqIEluIENUVSBDQU4gRkQsIFBST1AgaXMgNi83IGJpdHMgd2lkZSBidXQgUEgxIG9ubHkgNi81LCBzbyB3ZSBtdXN0IHJlLWRpc3RyaWJ1dGUgdGhlXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0yMjQtXFx0ICogdmFsdWVzIGhlcmUuXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jPTI3NT1zdGF0aWMgaW50IGN0dWNhbl9zZXRfZGF0YV9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTI4NC0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjI4NTogKiBjdHVjYW5fc2V0X3NlY29uZGFyeV9zYW1wbGVfcG9pbnQoKSAtIFNldHMgc2Vjb25kYXJ5IHNhbXBsZSBwb2ludCBpbiBDVFUgQ0FOIEZEXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0yODYtICogQG5kZXY6XFx0UG9pbnRlciB0byBuZXRfZGV2aWNlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz0yOTA9c3RhdGljIGludCBjdHVjYW5fc2V0X3NlY29uZGFyeV9zYW1wbGVfcG9pbnQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTMyMS0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjMyMjogKiBjdHVjYW5fc2V0X21vZGUoKSAtIFNldHMgQ1RVIENBTiBGRHMgbW9kZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmMtMzIzLSAqIEBwcml2OlxcdFBvaW50ZXIgdG8gcHJpdmF0ZSBkYXRhXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jPTU5Nj1zdGF0aWMgbmV0ZGV2X3R4X3QgY3R1Y2FuX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTY0MC0gKiBjdHVjYW5fcmVhZF9yeF9mcmFtZSgpIC0gUmVhZHMgZnJhbWUgZnJvbSBSWCBGSUZPXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYzo2NDE6ICogQHByaXY6XFx0UG9pbnRlciB0byBDVFUgQ0FOIEZEJ3MgcHJpdmF0ZSBkYXRhXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy02NDItICogQGNmOlxcdFxcdFBvaW50ZXIgdG8gQ0FOIGZyYW1lIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYz03MTA9c3RhdGljIGludCBjdHVjYW5fcngoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTc0OC0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjc0OTogKiBjdHVjYW5fcmVhZF9mYXVsdF9zdGF0ZSgpIC0gUmVhZHMgQ1RVIENBTiBGRHMgZmF1bHQgY29uZmluZW1lbnQgc3RhdGUuXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy03NTAtICogQHByaXY6XFx0UG9pbnRlciB0byBwcml2YXRlIGRhdGFcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9OTk1PXN0YXRpYyB2b2lkIGN0dWNhbl90eF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jLTEwOTUtICpcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfYmFzZS5jOjEwOTY6ICogVGhpcyBpcyB0aGUgQ1RVIENBTiBGRCBJU1IuIEl0IGNoZWNrcyBmb3IgdGhlIHR5cGUgb2YgaW50ZXJydXB0XFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2Jhc2UuYy0xMDk3LSAqIGFuZCBpbnZva2VzIHRoZSBjb3JyZXNwb25kaW5nIElTUi5cXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM9MTQ1OT1NT0RVTEVfQVVUSE9SKFxcXCJPbmRyZWogSWxsZSBcXHUwMDNjb25kcmVqLmlsbGVAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9iYXNlLmM6MTQ2MDpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNUVSBDQU4gRkQgaW50ZXJmYWNlXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfa2ZyYW1lLmgtMy0gKlxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rZnJhbWUuaDo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9rZnJhbWUuaC01LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfa3JlZ3MuaC0zLSAqXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX2tyZWdzLmg6NDogKiBDVFUgQ0FOIEZEIElQIENvcmVcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfa3JlZ3MuaC01LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMy0gKlxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy01LSAqXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9NzQ9c3RhdGljIGludCBjdHVjYW5fcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTE3My1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYzoxNzQ6XFx0XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwiQ1RVIENBTiBGRCBjb3JlICVkIGluaXRpYWxpemF0aW9uIGZhaWxlZFxcXFxuXFxcIixcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtMTc1LVxcdFxcdFxcdFxcdCBjb3JlX2kpO1xcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jPTI4MT1NT0RVTEVfQVVUSE9SKFxcXCJQYXZlbCBQaXNhIFxcdTAwM2NwaXNhQGNtcC5mZWxrLmN2dXQuY3pcXHUwMDNlXFxcIik7XFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjI4MjpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNUVSBDQU4gRkQgZm9yIFBDSSBidXNcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jLTMtICpcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGxhdGZvcm0uYzo0OiAqIENUVSBDQU4gRkQgSVAgQ29yZVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jLTUtICpcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jPTEyNT1NT0RVTEVfQVVUSE9SKFxcXCJNYXJ0aW4gSmVyYWJla1xcXCIpO1xcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wbGF0Zm9ybS5jOjEyNjpNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkNUVSBDQU4gRkQgZm9yIHBsYXRmb3JtXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjA3LjQyODQ3Njk0M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NjIzODA0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgdGhlIGBjdHVjYW5fcGNpX3Byb2JlYCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgb25lLWxpbmUgcGF0Y2ggaW4gYGN0dWNhbl9wY2lfcHJvYmVgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNheSB0byBza2lwIGZ1enppbmcgY2VydGFpbiBkcml2ZXIgY2hhbmdlcywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgcXVhbGlmaWVzLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBzcGVjaWZpYyBhYm91dCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgb3IgdGVhcmRvd24gcm91dGluZXMsIHNvIEkgbmVlZCB0byBiZSBjYXJlZnVsLlxuXG5GaXJzdCB0aG91Z2h0OiBUaGlzIGlzIGp1c3QgYSBzaW5nbGUtbGluZSBlcnJvciBoYW5kbGluZyBmaXggd2l0aGluIGAucHJvYmVgLCBub3QgYSB2ZW5kb3Itc3BlY2lmaWMgZHJpdmVyLiBBbmQsIGNydWNpYWxseSwgYENUVSBDQU4gRkRgIGlzIGVtdWxhdGVkIGluIFFFTVUsIHNvIGl04oCZcyBub3QgdGllZCB0byBzcGVjaWZpYyBoYXJkd2FyZSB0aGF0IHRoZSBmdXp6ZXIgd291bGRuJ3QgaGF2ZSBhY2Nlc3MgdG8uIEkga25vdyB0aGF0IGJlY2F1c2UgaXQncyBpbiBgaHcvbmV0L2Nhbi9jdHVjYW5fY29yZS5jYCBhbmQgYGh3L25ldC9jYW4vY3R1Y2FuX3BjaS5jYC4gVGhlIGluc3RydWN0aW9ucyBzYXkgbm8gdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlLCBhbmQgdGhpcyBpc24ndCB0aGF0LlxuXG5NeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGxlYW4gdG93YXJkcyAqZnV6emFibGUqLiBUaGUgZXJyb3IgcGF0aCBpbiBhIGAucHJvYmVgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBieSBmdXp6aW5nLiBBIGZ1enplciBjYW4gaW5qZWN0IGEgUENJIGRldmljZSBhbmQgdGhlbiB0cmlnZ2VyIGZhaWx1cmVzLCBsaWtlIHdpdGggZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgQkFScy5cblxuQnV0IHdhaXQsIHRoZSBpbnN0cnVjdGlvbnMgYWxzbyBzYXkgbm8gdGVhcmRvd24gY2FsbGJhY2tzLCBsaWtlIGAucmVtb3ZlYCBvciBgLnNodXRkb3duYC4gVGhpcyAqaXMqIGEgYC5wcm9iZWAgZnVuY3Rpb24sIG5vdCBgLnJlbW92ZWAsIG9yIGAuc2h1dGRvd25gLCBzbyBpdCdzIG5vdCBhIHRlYXJkb3duIGNhbGxiYWNrLiBCdXQgaXMgaXQgd29ydGggaXQ/XG5cbk9rYXksIG9rYXksIEkgdGhpbmsgdGhpcyAqaXMqIHdvcnRoIGZ1enppbmcuIFN5emthbGxlciBpcyBkZWZpbml0ZWx5IGNhcGFibGUgb2YgaGl0dGluZyBQQ0kgcHJvYmUgZnVuY3Rpb25zIGFuZCB0aGVpciBlcnJvciBwYXRocy5cblxuTGV0J3MgbG9vayBhdCB0aGUgcGF0Y2ggaXRzZWxmIGFnYWluLiBJdCdzIGEgdmVyeSBzaW1wbGUgY2hhbmdlIGluIHRoZSBgY3R1Y2FuX3BjaV9wcm9iZWAgZXJyb3IgaGFuZGxpbmcgcGF0aC4gSWYgd2UgZnV6eiBpdCwgdGhlIGZvY3VzIHdvdWxkIGJlIG9uIGBjdHVjYW5fcGNpX3Byb2JlYC4gVG8gcnVuIGl0LCBJJ2QgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZnV6emVyIGhhcyBgQ09ORklHX0NBTl9DVFVDQU5GRGAgYW5kIGBDT05GSUdfQ0FOX0NUVUNBTkZEX1BDSWAgZW5hYmxlZC4gTGV0J3Mgc2VuZCBpdCB0byB0aGUgZnV6emVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTIxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjE1LjI5MDg1OTM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjA2NDEzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQ0FOX0NUVUNBTkZEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnOjE6Y29uZmlnIENBTl9DVFVDQU5GRFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTItXFx0dHJpc3RhdGUgXFxcIkNUVSBDQU4tRkQgSVAgY29yZVxcXCIgaWYgQ09NUElMRV9URVNUXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZy0xMy1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZzoxNDpjb25maWcgQ0FOX0NUVUNBTkZEX1BDSVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTE1LVxcdHRyaXN0YXRlIFxcXCJDVFUgQ0FOLUZEIElQIGNvcmUgUENJL1BDSWUgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWctMjMtXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL0tjb25maWc6MjQ6Y29uZmlnIENBTl9DVFVDQU5GRF9QTEFURk9STVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnLTI1LVxcdHRyaXN0YXRlIFxcXCJDVFUgQ0FOLUZEIElQIGNvcmUgcGxhdGZvcm0gKEZQR0EsIFNvQykgZHJpdmVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OToxNS4zNTY5MzI2NDZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2OTk3NjI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkFzc2Vzc2luZyBEZXBlbmRlbmNpZXM6IENBTl9DVFVDQU5GRF9QQ0kqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgQ0FOX0NUVUNBTkZEX1BDSWAuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBvdGhlciBjb21wb25lbnRzLCBkcml2ZXJzLCBvciBtb2R1bGVzIHRoaXMgcGFydGljdWxhciBlbGVtZW50IHJlbGllcyB1cG9uIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHBvdGVudGlhbCBpbXBhY3RzIG9mIGNoYW5nZXMsIHRyb3VibGVzaG9vdGluZyBpc3N1ZXMsIG9yIGV2ZW4gc2ltcGx5IHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlLiBJJ2xsIG5lZWQgdG8gaWRlbnRpZnk6IGFyZSB0aGVyZSBhbnkga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljIGhhcmR3YXJlIHJlc291cmNlcywgb3Igb3RoZXIgc29mdHdhcmUgY29tcG9uZW50cyBpdCBkZXBlbmRzIG9uPyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtL2Rvd25zdHJlYW0gY29uc2lkZXJhdGlvbnM/IFNwZWNpZmljYWxseSwgZG9lcyBpdCBpbnRlcmZhY2Ugd2l0aCBhbnkgb3RoZXIgc3Vic3lzdGVtcyB0aGF0IG1pZ2h0IHJlcXVpcmUgY29vcmRpbmF0aW9uPyBUaGlua2luZyBmdXJ0aGVyLCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBjb25mbGljdHMgaXQgbWlnaHQgaW50cm9kdWNlIHdpdGggb3RoZXIgaGFyZHdhcmUgb3Igc29mdHdhcmU/IEknbGwgbmVlZCB0byB0cmFjayB0aGVzZSBkZXBlbmRlbmNpZXMgZG93biBhbmQgbWFwIHRoZW0sIGlmIEkgaGF2ZW4ndCBhbHJlYWR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjE4LjQyNjkxMTg2NVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdGNvbmZpZyBDQU5fQ1RVQ0FORkRcXG4gICAyOlxcdFxcdHRyaXN0YXRlIFxcXCJDVFUgQ0FOLUZEIElQIGNvcmVcXFwiIGlmIENPTVBJTEVfVEVTVFxcbiAgIDM6XFx0XFx0aGVscFxcbiAgIDQ6XFx0XFx0ICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoZSBDVFUgQ0FOIEZEIG9wZW4tc291cmNlIElQIGNvcmUuXFxuICAgNTpcXHRcXHQgIE1vcmUgZG9jdW1lbnRhdGlvbiBhbmQgY29yZSBzb3VyY2VzIGF0IHByb2plY3QgcGFnZVxcbiAgIDY6XFx0XFx0ICAoaHR0cHM6Ly9naXRsYWIuZmVsLmN2dXQuY3ovY2FuYnVzL2N0dWNhbmZkX2lwX2NvcmUpLlxcbiAgIDc6XFx0XFx0ICBUaGUgY29yZSBpbnRlZ3JhdGlvbiB0byBYaWxpbnggWnlucSBzeXN0ZW0gYXMgcGxhdGZvcm0gZHJpdmVyXFxuICAgODpcXHRcXHQgIGlzIGF2YWlsYWJsZSAoaHR0cHM6Ly9naXRsYWIuZmVsLmN2dXQuY3ovY2FuYnVzL3p5bnEvenlucS1jYW4tc2phMTAwMC10b3ApLlxcbiAgIDk6XFx0XFx0ICBJbXBsZW1lbnRhdGlvbiBvbiBJbnRlbCBGUEdBLWJhc2VkIFBDSSBFeHByZXNzIGJvYXJkIGlzIGF2YWlsYWJsZVxcbiAgMTA6XFx0XFx0ICBmcm9tIHByb2plY3QgKGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy9wY2llLWN0dWNhbmZkKSBhbmRcXG4gIDExOlxcdFxcdCAgb24gSW50ZWwgU29DIGZyb20gcHJvamVjdCAoaHR0cHM6Ly9naXRsYWIuZmVsLmN2dXQuY3ovY2FuYnVzL2ludGVsLXNvYy1jdHVjYW5mZCkuXFxuICAxMjpcXHRcXHQgIEd1aWRlcG9zdCBDVFUgRkVFIENBTiBidXMgcHJvamVjdHMgcGFnZSBodHRwczovL2NhbmJ1cy5wYWdlcy5mZWwuY3Z1dC5jei8gLlxcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgQ0FOX0NUVUNBTkZEX1BDSVxcbiAgMTU6XFx0XFx0dHJpc3RhdGUgXFxcIkNUVSBDQU4tRkQgSVAgY29yZSBQQ0kvUENJZSBkcml2ZXJcXFwiXFxuICAxNjpcXHRcXHRkZXBlbmRzIG9uIFBDSVxcbiAgMTc6XFx0XFx0c2VsZWN0IENBTl9DVFVDQU5GRFxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBUaGlzIGRyaXZlciBhZGRzIFBDSS9QQ0llIHN1cHBvcnQgZm9yIENUVSBDQU4tRkQgSVAgY29yZS5cXG4gIDIwOlxcdFxcdCAgVGhlIHByb2plY3QgcHJvdmlkaW5nIEZQR0EgZGVzaWduIGZvciBJbnRlbCBFUDRDR1gxNSBiYXNlZCBEQjRDR1gxNVxcbiAgMjE6XFx0XFx0ICBQQ0llIGJvYXJkIHdpdGggUGlLUk9OLmNvbSBkZXNpZ25lZCB0cmFuc2NlaXZlciByaXNlciBzaGllbGQgaXMgYXZhaWxhYmxlXFxuICAyMjpcXHRcXHQgIGF0IGh0dHBzOi8vZ2l0bGFiLmZlbC5jdnV0LmN6L2NhbmJ1cy9wY2llLWN0dWNhbmZkIC5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0Y29uZmlnIENBTl9DVFVDQU5GRF9QTEFURk9STVxcbiAgMjU6XFx0XFx0dHJpc3RhdGUgXFxcIkNUVSBDQU4tRkQgSVAgY29yZSBwbGF0Zm9ybSAoRlBHQSwgU29DKSBkcml2ZXJcXFwiXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTSBcXHUwMDI2XFx1MDAyNiBPRlxcbiAgMjc6XFx0XFx0c2VsZWN0IENBTl9DVFVDQU5GRFxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGUgY29yZSBoYXMgYmVlbiB0ZXN0ZWQgdG9nZXRoZXIgd2l0aCBPcGVuQ29yZXMgU0pBMTAwMFxcbiAgMzA6XFx0XFx0ICBtb2RpZmllZCB0byBiZSBDQU4gRkQgZnJhbWVzIHRvbGVyYW50IG9uIE1pY3JvWmVkIFp5bnEgYmFzZWRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MTguNDI3MDA0Njg1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNzkxOTMxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBSZWFzb25pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgQ0FOX0NUVUNBTkZEX1BDSWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoaXMgZGVwZW5kcyBkaXJlY3RseSBvbiBgUENJYCwgbm8gc3VycHJpc2VzIHRoZXJlLiBOb3csIG9mIGNvdXJzZSwgaXQncyBhbHNvIGEgQ0FOIGNvbnRyb2xsZXIsIHNvIHRoYXQgbWFrZXMgbWUgdGhpbmsgaXQgbmVlZHMgdGhlIHBhcmVudCBgQ0FOYCBzdWJzeXN0ZW0gZW5hYmxlZCBhcyB3ZWxsLiBNeSBuZXh0IHN0ZXAgaGVyZSBpcyB0byBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBwcm9iYWJseSBzb21ld2hlcmUgaW4gYGRyaXZlcnMvbmV0L2Nhbi9gLiBMZXQgbWUgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvY2FuL0tjb25maWdgLCBvciBzb21ld2hlcmUgc2ltaWxhciwgdG8gcGlucG9pbnQgdGhlIGRlcGVuZGVuY2llcyBvZiBgQ0FOX0NUVUNBTkZEYCBzcGVjaWZpY2FsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGFuZCB0aGF0IGV2ZXJ5dGhpbmcgaXMgd2lyZWQgdXAgY29ycmVjdGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI3OSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MjEuNjA2MjAwMzE4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDgyMDYwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXFxcIlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9jYW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnPTI0Nz1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2Nhbi9jYzc3MC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnOjI0ODpzb3VyY2UgXFxcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnLTI0OS1zb3VyY2UgXFxcImRyaXZlcnMvbmV0L2Nhbi9lc2QvS2NvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MjEuNjkxMDI1NjQ0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTE2NTQ2NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIENBTiBCdXMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBvdmVyYXJjaGluZyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGlzIENBTiBidXMgbW9kdWxlLiBUaGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGlzIHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgcmVsZXZhbnQgZHJpdmVyIGRpcmVjdG9yeSwgd2hpY2ggSSBhc3N1bWUgaXMgYGRyaXZlcnMvbmV0L2Nhbi9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBhcmVudCBjb25maWd1cmF0aW9ucyBhcmUgbGlrZWx5IGRlZmluZWQuIEknbGwgbmVlZCB0byBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQncyBjb250cm9sbGluZyB0aGUgb3B0aW9ucyByZWxhdGVkIHRvIHRoaXMuIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGxlYXJuIGFib3V0IHRoZSByZWxhdGlvbnNoaXBzIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTYzNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjI0LjM4MjY4MzYyM1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9jYW4vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51Y29uZmlnIENBTl9ERVZcXG4gICA0OlxcdFxcdHRyaXN0YXRlIFxcXCJDQU4gRGV2aWNlIERyaXZlcnNcXFwiXFxuICAgNTpcXHRcXHRkZWZhdWx0IHlcXG4gICA2OlxcdFxcdGRlcGVuZHMgb24gQ0FOXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIENvbnRyb2xsZXIgQXJlYSBOZXR3b3JrIChDQU4pIGlzIHNlcmlhbCBjb21tdW5pY2F0aW9ucyBwcm90b2NvbCB1cCB0b1xcbiAgIDk6XFx0XFx0ICAxTWJpdC9zIGZvciBpdHMgb3JpZ2luYWwgcmVsZWFzZSAobm93IGtub3duIGFzIENsYXNzaWNhbCBDQU4pIGFuZCB1cFxcbiAgMTA6XFx0XFx0ICB0byA4TWJpdC9zIGZvciB0aGUgbW9yZSByZWNlbnQgQ0FOIHdpdGggRmxleGlibGUgRGF0YS1SYXRlXFxuICAxMTpcXHRcXHQgIChDQU4tRkQpLiBUaGUgQ0FOIGJ1cyB3YXMgb3JpZ2luYWxseSBtYWlubHkgZm9yIGF1dG9tb3RpdmUsIGJ1dCBpcyBub3dcXG4gIDEyOlxcdFxcdCAgd2lkZWx5IHVzZWQgaW4gbWFyaW5lIChOTUVBMjAwMCksIGluZHVzdHJpYWwsIGFuZCBtZWRpY2FsXFxuICAxMzpcXHRcXHQgIGFwcGxpY2F0aW9ucy4gTW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgQ0FOIG5ldHdvcmsgcHJvdG9jb2wgZmFtaWx5XFxuICAxNDpcXHRcXHQgIFBGX0NBTiBpcyBjb250YWluZWQgaW4gXFx1MDAzY0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jYW4ucnN0XFx1MDAzZS5cXG4gIDE1OlxcdFxcbiAgMTY6XFx0XFx0ICBUaGlzIHNlY3Rpb24gY29udGFpbnMgYWxsIHRoZSBDQU4oLUZEKSBkZXZpY2UgZHJpdmVycyBpbmNsdWRpbmcgdGhlXFxuICAxNzpcXHRcXHQgIHZpcnR1YWwgb25lcy4gSWYgeW91IG93biBzdWNoIGRldmljZXMgb3IgcGxhbiB0byB1c2UgdGhlIHZpcnR1YWwgQ0FOXFxuICAxODpcXHRcXHQgIGludGVyZmFjZXMgdG8gZGV2ZWxvcCBhcHBsaWNhdGlvbnMsIHNheSBZIGhlcmUuXFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdCAgVG8gY29tcGlsZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsIGJlIGNhbGxlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OToyNC4zODI3NzczMzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk3NzM3MzUyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gQ0FOIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgYENBTl9ERVZgIGFuZCBgQ0FOYC4gTmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIG92ZXJhbGwgQ0FOIGNvbmZpZ3VyYXRpb24uIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlci4gTGV0J3Mgc3RhcnQgd2l0aCBgbmV0L2Nhbi9LY29uZmlnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBkZXBlbmRlbmNpZXMgb24gdGhlIGBDQU5gIG9wdGlvbi4gQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29uc2lkZXJlZCB3aGVuIGVuYWJsaW5nIHRoZSBDQU4gc3Vic3lzdGVtPyBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgaW50ZXJyZWxhdGlvbnNoaXBzIG9mIHRoZXNlIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE0MSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MjcuMzYwMTUzODA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzM4NDA3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIENBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2Nhbi9LY29uZmlnLTUtXFxubmV0L2Nhbi9LY29uZmlnOjY6bWVudWNvbmZpZyBDQU5cXG5uZXQvY2FuL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiQ0FOIGJ1cyBzdWJzeXN0ZW0gc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMDM6NDk6MjcuNDU3NTQ1MjgxWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTQ2MDQyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBDQU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgQ0FOIGRyaXZlciBvcHRpb25zOiBgQ0FOYCwgYENBTl9ERVZgLCBhbmQgYENBTl9DVFVDQU5GRF9QQ0lgLiBJdCBzZWVtcyBsaWtlIGBDQU5fQ1RVQ0FORkRgIGlzIHNlbGVjdGVkIGluZGlyZWN0bHkgYnkgYENBTl9DVFVDQU5GRF9QQ0lgLiBUaGVyZWZvcmUsIHRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBJIG5lZWQgc2hvdWxkIGJlIGBbXCJDQU5cIiwgXCJDQU5fREVWXCIsIFwiQ0FOX0NUVUNBTkZEX1BDSVwiXWAuIFRoaXMgc2VlbXMgbG9naWNhbCBnaXZlbiB0aGUgZGVwZW5kZW5jaWVzLlxuXG5Ob3csIEkgc2hvdWxkIHJlLWV4YW1pbmUgYGN0dWNhbl9wY2lfcHJvYmVgLiBJcyB0aGlzIGEgZ29vZCB0YXJnZXQgZm9yIGZ1enppbmc/IEFic29sdXRlbHkuIEl0J3MgYSBQQ0kgcHJvYmUgZnVuY3Rpb24sIGFuZCBzeXprYWxsZXIgaXMgd2VsbC1zdWl0ZWQgZm9yIHRhcmdldGluZyB0aG9zZS4gVGhlIGZvY3VzIHN5bWJvbCB3aWxsIGJlIGBjdHVjYW5fcGNpX3Byb2JlYC5cblxuSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgd2VyZSBhbnkgb3RoZXIgZnVuY3Rpb25zIG1vZGlmaWVkIGJ5IHRoZSByZWNlbnQgcGF0Y2guIEJhc2VkIG9uIG15IHF1aWNrIHJldmlldywgaXQgc2VlbXMgbGlrZSB0aGUgY2hhbmdlcyBhcmUgaXNvbGF0ZWQgdG8gYGN0dWNhbl9wY2lfcHJvYmVgLiBIb3dldmVyLCBsZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBwYXRjaCBvbmUgbGFzdCB0aW1lIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQwMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTozMS42NzIxNTI0MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA5NTAxOTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImN0dWNhbl9wY2lfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYz01Mz1zdGF0aWMgdm9pZCBjdHVjYW5fcGNpX3NldF9kcnZkYXRhKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02NC0vKipcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM6NjU6ICogY3R1Y2FuX3BjaV9wcm9iZSAtIFBDSSByZWdpc3RyYXRpb24gY2FsbFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy02Ni0gKiBAcGRldjpcXHRIYW5kbGUgdG8gdGhlIHBjaSBkZXZpY2Ugc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzMtICovXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjc0OnN0YXRpYyBpbnQgY3R1Y2FuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmMtNzUtXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9jYW4vY3R1Y2FuZmQvY3R1Y2FuZmRfcGNpLmM9MjcwPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBjdHVjYW5fcGNpX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzItXFx0LmlkX3RhYmxlID0gY3R1Y2FuX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjI3MzpcXHQucHJvYmUgPSBjdHVjYW5fcGNpX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0yNzQtXFx0LnJlbW92ZSA9IGN0dWNhbl9wY2lfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTozMS45ODE2NTk3MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk1MDY4MzU1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkFuYWx5emluZyB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIE1vZGlmaWNhdGlvbioqXG5cblJpZ2h0LCBzbyB0aGUgb25seSBmdW5jdGlvbiB0b3VjaGVkIGhlcmUgaXMgYGN0dWNhbl9wY2lfcHJvYmVgLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBUaGUgY2hhbmdlIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgbWVhbmluZyBpdCdzIGFsdGVyaW5nIHRoZSAqYmVoYXZpb3IqIG9mIHRoZSBjb2RlLCBhbmQgc3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZT8gQ2FuIHRoaXMgY29kZSBhY3R1YWxseSAqZXhlY3V0ZSogdW5kZXIgYW55IGNpcmN1bXN0YW5jZXM/XG5cblRoZSB0ZXh0IHNheXMgeWVzLCBpdCBpcy4gVGhlIGVycm9yIHBhdGggaXMgdHJpZ2dlcmVkIGJ5IGEgZmFpbHVyZSBpbiBlaXRoZXIgYGt6YWxsb2Nfb2JqYCBvciBzb21ldGhpbmcgdGhhdCBoYXBwZW5zICphZnRlciogdGhhdCBpbml0aWFsaXphdGlvbi4gVGhhdCBzb3VuZHMgcmVhc29uYWJsZS4gSWYgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMsIG9yIHNvbWV0aGluZyBlbHNlIGdvZXMgc2lkZXdheXMgaW4gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHRoYXQgZm9sbG93cyBga3phbGxvY19vYmpgLCB3ZSdsbCBqdW1wIHRvIGBlcnJfcGNpX2lvdW5tYXBfYmFyMGAuXG5cbk5vdywgSSB3YW50IHRvIGNvbmZpcm0gZXhhY3RseSB3aGF0IGNhbiB0cmlnZ2VyIHRoaXMuIFdoYXQsIHNwZWNpZmljYWxseSwgY291bGQgZmFpbCAqYWZ0ZXIqIHRoZSBga3phbGxvY19vYmpgIGNhbGwgdGhhdCB3b3VsZCBsZWFkIHVzIGRvd24gdGhpcyBlcnJvciBwYXRoPyBJIG5lZWQgdG8gcmV2aWV3IHdoYXQgY29tZXMgYWZ0ZXIgdGhlIGNhbGwgdG8gdW5kZXJzdGFuZCB3aGF0IHNjZW5hcmlvcyB0aGlzIGNoYW5nZSBhZGRyZXNzZXMgYW5kIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGEgYnJvYWRlciBjb25jZXJuIGluIHRoaXMgcGFydCBvZiB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyODAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTozNS45MzIzNDU1MTZaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0OCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0ODpcXHRcXHRiZGF0YSA9IGt6YWxsb2Nfb2JqKCpiZGF0YSk7XFxuIDE0OTpcXHRcXHRpZiAoIWJkYXRhKSB7XFxuIDE1MDpcXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbiAxNTE6XFx0XFx0XFx0Z290byBlcnJfcGNpX2lvdW5tYXBfYmFyMDtcXG4gMTUyOlxcdFxcdH1cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmJkYXRhLVxcdTAwM2VuZGV2X2xpc3RfaGVhZCk7XFxuIDE1NTpcXHRcXHRiZGF0YS1cXHUwMDNlYmFyMF9iYXNlID0gYmFyMF9iYXNlO1xcbiAxNTY6XFx0XFx0YmRhdGEtXFx1MDAzZWNyYV9iYXNlID0gY3JhX2FkZHI7XFxuIDE1NzpcXHRcXHRiZGF0YS1cXHUwMDNlYmFyMV9iYXNlID0gYWRkcjtcXG4gMTU4OlxcdFxcdGJkYXRhLVxcdTAwM2V1c2VfbXNpID0gbXNpX29rO1xcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgYmRhdGEpO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHRyZXQgPSBjdHVjYW5fcHJvYmVfY29tbW9uKGRldiwgYWRkciwgaXJxLCBudHhidWZzLCAxMDAwMDAwMDAsXFxuIDE2MzpcXHRcXHRcXHRcXHRcXHQgIDAsIGN0dWNhbl9wY2lfc2V0X2RydmRhdGEpO1xcbiAxNjQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDE2NTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlX2JvYXJkO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRjb3JlX2krKztcXG4gMTY4OlxcdFxcbiAxNjk6XFx0XFx0d2hpbGUgKGNvcmVfaSBcXHUwMDNjIG51bV9jb3Jlcykge1xcbiAxNzA6XFx0XFx0XFx0YWRkciArPSAweDQwMDA7XFxuIDE3MTpcXHRcXHRcXHRyZXQgPSBjdHVjYW5fcHJvYmVfY29tbW9uKGRldiwgYWRkciwgaXJxLCBudHhidWZzLCAxMDAwMDAwMDAsXFxuIDE3MjpcXHRcXHRcXHRcXHRcXHRcXHQgIDAsIGN0dWNhbl9wY2lfc2V0X2RydmRhdGEpO1xcbiAxNzM6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gMTc0OlxcdFxcdFxcdFxcdGRldl9pbmZvKGRldiwgXFxcIkNUVSBDQU4gRkQgY29yZSAlZCBpbml0aWFsaXphdGlvbiBmYWlsZWRcXFxcblxcXCIsXFxuIDE3NTpcXHRcXHRcXHRcXHRcXHQgY29yZV9pKTtcXG4gMTc2OlxcdFxcdFxcdFxcdGJyZWFrO1xcbiAxNzc6XFx0XFx0XFx0fVxcbiAxNzg6XFx0XFx0XFx0Y29yZV9pKys7XFxuIDE3OTpcXHRcXHR9XFxuIDE4MDpcXHRcXG4gMTgxOlxcdFxcdC8qIGVuYWJsZSBpbnRlcnJ1cHQgaW5cXG4gMTgyOlxcdFxcdCAqIEF2YWxvbi1NTSB0byBQQ0kgRXhwcmVzcyBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyXFxuIDE4MzpcXHRcXHQgKi9cXG4gMTg0OlxcdFxcdGNyYV9hMnBfaWUgPSBpb3JlYWQzMihjcmFfYWRkciArIENZQ0xPTkVfSVZfQ1JBX0EyUF9JRSk7XFxuIDE4NTpcXHRcXHRkZXZfaW5mbyhkZXYsIFxcXCJjcmFfYTJwX2llIDB4JTA4eFxcXFxuXFxcIiwgY3JhX2EycF9pZSk7XFxuIDE4NjpcXHRcXHRjcmFfYTJwX2llIHw9IDE7XFxuIDE4NzpcXHRcXHRpb3dyaXRlMzIoY3JhX2EycF9pZSwgY3JhX2FkZHIgKyBDWUNMT05FX0lWX0NSQV9BMlBfSUUpO1xcbiAxODg6XFx0XFx0Y3JhX2EycF9pZSA9IGlvcmVhZDMyKGNyYV9hZGRyICsgQ1lDTE9ORV9JVl9DUkFfQTJQX0lFKTtcXG4gMTg5OlxcdFxcdGRldl9pbmZvKGRldiwgXFxcImNyYV9hMnBfaWUgMHglMDh4XFxcXG5cXFwiLCBjcmFfYTJwX2llKTtcXG4gMTkwOlxcdFxcbiAxOTE6XFx0XFx0cmV0dXJuIDA7XFxuIDE5MjpcXHRcXG4gMTkzOlxcdGVycl9mcmVlX2JvYXJkOlxcbiAxOTQ6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpO1xcbiAxOTU6XFx0XFx0a2ZyZWUoYmRhdGEpO1xcbiAxOTY6XFx0ZXJyX3BjaV9pb3VubWFwX2JhcjA6XFxuIDE5NzpcXHRcXHRwY2lfaW91bm1hcChwZGV2LCBiYXIwX2Jhc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTozNS45MzI0MjUxNjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwNzczNTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDVFUgQ0FOIEZEIFBDSSBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gdGhlIENUVSBDQU4gRkQgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGl0cyBlcnJvciBoYW5kbGluZyBkdXJpbmcgdGhlIHByb2JlIGZ1bmN0aW9uLiBUaGUga2V5IHRha2Vhd2F5IGlzIHRoYXQsIHllcywgdGhlIGBjdHVjYW5fcHJvYmVfY29tbW9uYCBmdW5jdGlvbiAqY2FuKiBmYWlsLCBhbmQgd2hlbiBpdCBkb2VzLCBpdCBjb3JyZWN0bHkgZ29lcyBkb3duIHRoZSBlcnJvciBwYXRoIHRvIGBlcnJfZnJlZV9ib2FyZGAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYGVycl9wY2lfaW91bm1hcF9iYXIwYC4gVGhhdCBtZWFucyB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgYWN0dWFsbHkgYSBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgcGFydCBvZiB0aGUgY29kZSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIHRvIGNvbmZpcm0uXG5cbk5vdywgbGV0IG1lIHNvbGlkaWZ5IHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBiYXNlZCBvbiB0aGlzIHVuZGVyc3RhbmRpbmc6XG5cbiogICAqKmBXb3J0aEZ1enppbmc6IHRydWVgKio6IERlZmluaXRlbHkuIFRoaXMgaXMgYSBjcnVjaWFsIGVycm9yIGhhbmRsaW5nIHBhdGggdGhhdCBuZWVkcyB0byBiZSB0ZXN0ZWQgdmlnb3JvdXNseS4gRmF1bHQgaW5qZWN0aW9uIG9yIGludGVudGlvbmFsbHkgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMgY291bGQgZGVmaW5pdGVseSB0cmlnZ2VyIHRoaXMuXG4qICAgKipgRm9jdXNTeW1ib2xzOiBbXCJjdHVjYW5fcGNpX3Byb2JlXCJdYCoqOiBUaGUgZm9jdXMgaXMsIGFzIGV4cGVjdGVkLCBvbiB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIGZ1bmN0aW9uIGl0c2VsZiwgd2hpY2ggaXMgd2hlcmUgdGhlIHByb2JlIG9wZXJhdGlvbiBzdGFydHMuXG4qICAgKipgRW5hYmxlQ29uZmlnczogW1wiQ0FOXCIsIFwiQ0FOX0RFVlwiLCBcIkNBTl9DVFVDQU5GRF9QQ0lcIl1gKio6IEkgbmVlZCB0byBlbmFibGUgdGhlIGNvcmUgQ0FOIGZ1bmN0aW9uYWxpdHksIHRoZSBDQU4gZGV2aWNlIHN1cHBvcnQsIGFuZCB0aGUgc3BlY2lmaWMgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyLiBJIHdhcyBicmllZmx5IHBvbmRlcmluZyB0aGUgaW5jbHVzaW9uIG9mIGBDQU5fQ1RVQ0FORkRgIHNlcGFyYXRlbHksIGJ1dCBzaW5jZSBgQ0FOX0NUVUNBTkZEX1BDSWAgKnNlbGVjdHMqIGl0LCBpdCBpcywgaW4gZmFjdCwgcmVkdW5kYW50LiBXaGlsZSBpdCB3b3VsZG4ndCBodXJ0IHRvIGluY2x1ZGUgaXQsIGl0J3MgY2xlYW5lciB0byBvbWl0IGl0LCBzbyB0aGUgZmluYWwgc2V0IHN0YXlzIGFzIHNob3duLiBBbmQgeWVzLCBgQ0FOX0RFVmAgaXMgZW5hYmxlZCB3aXRoIGBDQU5gIGJ1dCBpdCdzIGdvb2QgdG8gYmUgZXhwbGljaXQuIGBQQ0lgIGlzIGFsc28gbmVlZGVkLCBidXQgYXMgYSBzdGFuZGFyZCBjb25maWd1cmF0aW9uIGl0J3Mgbm90IHN0cmljdGx5IG5lY2Vzc2FyeSB0byBjYWxsIGl0IG91dC5cblxuRmluYWxseSwganVzdCBvdXQgb2YgY3VyaW9zaXR5LCBJIGRvdWJsZS1jaGVja2VkIHdoZXRoZXIgYGt6YWxsb2Nfb2JqYCBpcyBhIG1hY3JvLiBJdCdzIG5vdCBjcml0aWNhbCB0byB0aGUgZnV6emluZyBzZXR1cCwgYnV0IEkgZW5qb3kga25vd2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1NjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTo0Mi4wNDAxNjM0NDZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyOTE2ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jPTc0PXN0YXRpYyBpbnQgY3R1Y2FuX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2Nhbi9jdHVjYW5mZC9jdHVjYW5mZF9wY2kuYy0xNDctXFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jOjE0ODpcXHRiZGF0YSA9IGt6YWxsb2Nfb2JqKCpiZGF0YSk7XFxuZHJpdmVycy9uZXQvY2FuL2N0dWNhbmZkL2N0dWNhbmZkX3BjaS5jLTE0OS1cXHRpZiAoIWJkYXRhKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjQyLjExMzA5MzMxMloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzc3MzQzNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVidWdnaW5nIGEgS2VybmVsIE1vZHVsZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEknbSBsb29raW5nIGF0IGBjdHVjYW5mZF9wY2kuY2AgYW5kIEknbSBzZWVpbmcgYSByZWZlcmVuY2UgdG8gYGt6YWxsb2Nfb2JqYC4gVGhhdCBzZWVtcyBsaWtlIGl0IHNob3VsZCBiZSBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgYWxsb2NhdGlvbiBmdW5jdGlvbi4gQnV0IHRoZSBjb21waWxlciBpcyBjb21wbGFpbmluZyB0aGF0IGl0J3MgdW5kZWZpbmVkIHdpdGhpbiB0aGlzIGZpbGUuIFRoYXQncyBhIGJpdCBwZXJwbGV4aW5nLiBUaGlzIGlzbid0IHRoZSBraW5kIG9mIGZ1bmN0aW9uIHlvdSdkIGV4cGVjdCB0byBiZSBkZWNsYXJlZCBsb2NhbGx5LCBpdCdzIGFsbW9zdCBjZXJ0YWlubHkgcGFydCBvZiBhIGNvcmUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmUuIFNvLCB0aGUga2V5IHF1ZXN0aW9uIG5vdyBpczogd2hlcmUgdGhlIGhlY2sgKmlzKiBga3phbGxvY19vYmpgIGRlZmluZWQ/IEkgbmVlZCB0byB0cmFjayBkb3duIGl0cyBvcmlnaW4uIElzIGl0IGEgZnVuY3Rpb24sIGEgbWFjcm8/IEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgaGVhZGVyIGZpbGVzLCBhbmQgcGVyaGFwcyB0aGUga2VybmVsIHNvdXJjZSBkaXJlY3RseSwgdG8gZmlndXJlIG91dCB3aGVyZSB0aGF0IGRlY2xhcmF0aW9uIGlzIGx1cmtpbmcuIExldCdzIHNlZSBpZiB0aGlzIGRlZmluaXRpb24gaGFzIGJlZW4gbW92ZWQsIHJlbmFtZWQsIG9yIHBlcmhhcHMgYSBwcmVwcm9jZXNzb3IgZ3VhcmQgaXMgY29uZGl0aW9uYWxseSBvbWl0dGluZyBpdHMgaW5jbHVzaW9uLiBUaW1lIHRvIGJyZWFrIG91dCB0aGUgZ3JlcCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTU0OTcsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQwMzo0OTo0Ni40OTA0Mzk0NzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDgxNjcxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVmaW5lIGt6YWxsb2Nfb2JqXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NsYWIuaD0xMDUxPXZvaWQgKmttYWxsb2Nfbm9sb2NrKHNpemVfdCBzaXplLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzItLyogQWxsIGt6YWxsb2MgYWxpYXNlcyBmb3Iga21hbGxvY18ob2JqfG9ianN8ZmxleCkuICovXFxuaW5jbHVkZS9saW51eC9zbGFiLmg6MTEzMzojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzQtXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCAxKVxcbmluY2x1ZGUvbGludXgvc2xhYi5oOjExMzU6I2RlZmluZSBremFsbG9jX29ianMoUCwgQ09VTlQsIC4uLikgXFxcXFxcbmluY2x1ZGUvbGludXgvc2xhYi5oLTExMzYtXFx0X19hbGxvY19vYmpzKGt6YWxsb2MsIGRlZmF1bHRfZ2ZwKF9fVkFfQVJHU19fKSwgdHlwZW9mKFApLCBDT1VOVClcXG4tLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oPTIwMD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBrbWVtX2NhY2hlX3NoZWFmX3NpemUoc3RydWN0IHNsYWJfc2hlYWYgKnNoZWFmKVxcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9zbGFiLmgtMjEwLVxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oOjIxMTojZGVmaW5lIGt6YWxsb2Nfb2JqKFAsIC4uLikgXFxcXFxcbnRvb2xzL2luY2x1ZGUvbGludXgvc2xhYi5oLTIxMi1cXHRfX2FsbG9jX29ianMoa3phbGxvYywgZGVmYXVsdF9nZnAoX19WQV9BUkdTX18pLCB0eXBlb2YoUCksIDEpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjQ4LjczODYxNzA5NFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjMxMTAzNDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0OiBDVFUgQ0FOIEZEIFBDSSBEcml2ZXIgUHJvYmUqKlxuXG5Pa2F5LCBhbm90aGVyIG5ldyBtYWNybyBpbiBgaW5jbHVkZS9saW51eC9zbGFiLmhgLi4uIGludGVyZXN0aW5nLCBidXQgbGV0J3MgZ2V0IGRvd24gdG8gdGhlIGJyYXNzIHRhY2tzIG9mIHRoaXMgcGF0Y2guIFNlZW1zIGxpa2Ugd2UgaGF2ZSBhIGZ1bmN0aW9uYWwgZml4IGhlcmUuIFNwZWNpZmljYWxseSwgYSB0d2VhayBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGFydCBvZiB0aGUgUENJIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIOKAkyB0aGUgYGN0dWNhbl9wY2lfcHJvYmVgIGZ1bmN0aW9uIHRvIGJlIHByZWNpc2UuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGdvZXMgdG8gZnV6emluZy4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgY2hhbmdlIHRoYXQgYmVncyBmb3IgaXQuIEEgZml4IGluIGVycm9yIGhhbmRsaW5nPyBUaGF0IG1lYW5zIHBvdGVudGlhbGx5IGV4cGxvaXRhYmxlIGNvcm5lciBjYXNlcy5cblxuU28sIGxldCdzIGNvZGlmeSB0aGlzIGludG8gYSBmdXp6aW5nIHBsYW4uIGBXb3J0aEZ1enppbmdgPyBBYnNvbHV0ZWx5LCB0cnVlLiBgRm9jdXNTeW1ib2xzYCB3aWxsIGJlIGBjdHVjYW5fcGNpX3Byb2JlYC4gTm93LCB3ZSBuZWVkIHRoZSByaWdodCBjb25maWdzIGVuYWJsZWQ6IGBDQU5gLCBgQ0FOX0RFVmAsIGFuZCBjcnVjaWFsbHksIGBDQU5fQ1RVQ0FORkRfUENJYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgcGF0Y2ggcmVjdGlmaWVzIGFuIGluY29ycmVjdCB1bm1hcCBhZGRyZXNzIHdpdGhpbiB0aGUgZXJyb3IgaGFuZGxpbmcgb2YgdGhlIGBDVFUgQ0FOIEZEYCBQQ0kgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBwYXRoIGlzIHZlcnkgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBwb3RlbnRpYWxseSBiZSB0cmlnZ2VyZWQgYnkgZmF1bHQgaW5qZWN0aW9uLCBvciBldmVuIGEgZG9kZ3kgZGV2aWNlIGNvbmZpZ3VyYXRpb24uIEdvdHRhIHRlc3QgaXQhIExldCdzIGdldCB0byBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYxMDMsIk91dHB1dFRva2VucyI6MTA2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDAzOjQ5OjUzLjM2OTcyMzQ3MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMjExMzU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDQU5cIixcbiAgICBcIkNBTl9ERVZcIixcbiAgICBcIkNBTl9DVFVDQU5GRF9QQ0lcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjdHVjYW5fcGNpX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5jb3JyZWN0IHVubWFwIGFkZHJlc3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgdGhlIENUVSBDQU4gRkQgUENJIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGR1cmluZyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gYW5kIGNhbiBiZSB0cmlnZ2VyZWQgYnkgZmF1bHQgaW5qZWN0aW9uIG9yIGludmFsaWQgZGV2aWNlIGNvbmZpZ3VyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNBTlwiLFxuICAgIFwiQ0FOX0RFVlwiLFxuICAgIFwiQ0FOX0NUVUNBTkZEX1BDSVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImN0dWNhbl9wY2lfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbmNvcnJlY3QgdW5tYXAgYWRkcmVzcyBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiB0aGUgQ1RVIENBTiBGRCBQQ0kgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZHVyaW5nIGRldmljZSBpbml0aWFsaXphdGlvbiBhbmQgY2FuIGJlIHRyaWdnZXJlZCBieSBmYXVsdCBpbmplY3Rpb24gb3IgaW52YWxpZCBkZXZpY2UgY29uZmlndXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowfcgjg[1] Phase: Succeeded StartedAt: 2026-07-26 03:50:19 +0000 UTC FinishedAt: 2026-07-26 03:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-26 03:50:19 +0000 UTC FinishedAt: 2026-07-26 03:50:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2] Phase: Succeeded StartedAt: 2026-07-26 03:50:19 +0000 UTC FinishedAt: 2026-07-26 06:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-26 03:50:19 +0000 UTC FinishedAt: 2026-07-26 06:16:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-26 03:50:19 +0000 UTC FinishedAt: 2026-07-26 03:50:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-26 03:50:19 +0000 UTC FinishedAt: 2026-07-26 03:50:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfcgjg/series-workflowfcgjg-convert-artifact-1980099920/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-26 03:50:29 +0000 UTC FinishedAt: 2026-07-26 04:41:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-26 03:50:29 +0000 UTC FinishedAt: 2026-07-26 04:41:38 +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:*0f950dd8-afc8-4c79-a559-73c23559637e,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-workflowfcgjg/series-workflowfcgjg-convert-artifact-1980099920/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": "5990ec4b-6c83-4552-ba57-f8c5568e049d", "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-workflowfcgjg/series-workflowfcgjg-build-action-3094928342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-26 03:50:29 +0000 UTC FinishedAt: 2026-07-26 04:41:28 +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:*0f950dd8-afc8-4c79-a559-73c23559637e,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-workflowfcgjg/series-workflowfcgjg-convert-artifact-1980099920/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": "5990ec4b-6c83-4552-ba57-f8c5568e049d", "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-workflowfcgjg/series-workflowfcgjg-build-action-3094928342/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-26 04:41:38 +0000 UTC FinishedAt: 2026-07-26 04:41:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-26 04:41:38 +0000 UTC FinishedAt: 2026-07-26 04:41:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-26 04:41:38 +0000 UTC FinishedAt: 2026-07-26 04:41:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-26 04:41:38 +0000 UTC FinishedAt: 2026-07-26 04:41:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfcgjg/series-workflowfcgjg-convert-artifact-33573047/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-26 04:41:48 +0000 UTC FinishedAt: 2026-07-26 04:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-26 04:41:48 +0000 UTC FinishedAt: 2026-07-26 04:43:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5990ec4b-6c83-4552-ba57-f8c5568e049d,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-workflowfcgjg/series-workflowfcgjg-build-action-3094928342/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-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-26 04:44:03 +0000 UTC FinishedAt: 2026-07-26 04:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-26 04:44:03 +0000 UTC FinishedAt: 2026-07-26 04:44:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-26 04:44:03 +0000 UTC FinishedAt: 2026-07-26 05:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-26 04:44:03 +0000 UTC FinishedAt: 2026-07-26 05:25:51 +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:*0f950dd8-afc8-4c79-a559-73c23559637e,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-workflowfcgjg/series-workflowfcgjg-convert-artifact-33573047/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": "879392d9-6dfe-43f6-a9ee-e5ae97927716", "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-workflowfcgjg/series-workflowfcgjg-build-action-1802741883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-26 04:44:03 +0000 UTC FinishedAt: 2026-07-26 05:25:41 +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:*0f950dd8-afc8-4c79-a559-73c23559637e,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-workflowfcgjg/series-workflowfcgjg-convert-artifact-33573047/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": "879392d9-6dfe-43f6-a9ee-e5ae97927716", "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-workflowfcgjg/series-workflowfcgjg-build-action-1802741883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-26 05:25:51 +0000 UTC FinishedAt: 2026-07-26 05:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-26 05:25:51 +0000 UTC FinishedAt: 2026-07-26 05:25:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-26 05:25:51 +0000 UTC FinishedAt: 2026-07-26 05:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-26 05:25:51 +0000 UTC FinishedAt: 2026-07-26 05:27:39 +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:*879392d9-6dfe-43f6-a9ee-e5ae97927716,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-workflowfcgjg/series-workflowfcgjg-build-action-1802741883/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-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-26 05:27:49 +0000 UTC FinishedAt: 2026-07-26 06:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-26 05:27:49 +0000 UTC FinishedAt: 2026-07-26 06:16:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"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:*5990ec4b-6c83-4552-ba57-f8c5568e049d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*879392d9-6dfe-43f6-a9ee-e5ae97927716,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-workflowfcgjg/series-workflowfcgjg-build-action-3094928342/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-workflowfcgjg/series-workflowfcgjg-build-action-1802741883/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-26 05:27:49 +0000 UTC FinishedAt: 2026-07-26 05:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-26 05:27:49 +0000 UTC FinishedAt: 2026-07-26 05:27:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"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-workflowfcgjg/series-workflowfcgjg-convert-artifact-3901372656/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-26 05:27:49 +0000 UTC FinishedAt: 2026-07-26 05:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-26 05:27:49 +0000 UTC FinishedAt: 2026-07-26 05:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-26 05:27:49 +0000 UTC FinishedAt: 2026-07-26 05:27:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-26 05:27:59 +0000 UTC FinishedAt: 2026-07-26 06:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfcgjg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ctucan_pci_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["CAN","CAN_DEV","CAN_CTUCANFD_PCI"],"series_id":"5372b7ff-ca10-473d-9e08-e4d46b96f1e7","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-26 05:27:59 +0000 UTC FinishedAt: 2026-07-26 06:15:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5990ec4b-6c83-4552-ba57-f8c5568e049d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*879392d9-6dfe-43f6-a9ee-e5ae97927716,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-workflowfcgjg/series-workflowfcgjg-build-action-3094928342/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-workflowfcgjg/series-workflowfcgjg-build-action-1802741883/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-workflowfcgjg/series-workflowfcgjg-convert-artifact-3901372656/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,}