Name: series-workflowvb42l Phase: Succeeded StartedAt: 2026-08-25 11:28:37 +0000 UTC FinishedAt: 2026-08-25 15:28:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[0] Phase: Succeeded StartedAt: 2026-08-25 11:28:37 +0000 UTC FinishedAt: 2026-08-25 11:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 11:28:37 +0000 UTC FinishedAt: 2026-08-25 11:49:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS" ], "series_id": "b600bbfc-766b-48b5-88bf-2ab5e86dacbf" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "gadget_dev_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0X2Rldl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGdhZGdldF9kZXZfaW9jdGxgIHdoZXJlIGBkZXYtXHUwMDNlZ2FkZ2V0YCB3YXMgYWNjZXNzZWQgb3V0c2lkZSBvZiB0aGUgYGRldi1cdTAwM2Vsb2NrYCBzcGlubG9jaywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgZGV2LVx1MDAzZWdhZGdldGAgaXMgY2xlYXJlZCBjb25jdXJyZW50bHkuIEJ5IG1vdmluZyB0aGUgYXNzaWdubWVudCBpbnNpZGUgdGhlIGxvY2sgYW5kIGFkZGluZyBhIE5VTEwgY2hlY2ssIGl0IHByZXZlbnRzIHRoaXMgY3Jhc2guIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKGxpa2UgcGFnZSBmYXVsdHMgZm9yIE5VTEwgZGVyZWZzKSBhbmQgS0FTQU4gKGlmIGl0IHdlcmUgYSB1c2UtYWZ0ZXItZnJlZSkuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIGlvY3RsIGhhbmRsZXIgb2YgZ2FkZ2V0ZnMgYnkgZmV0Y2hpbmcgdGhlIGdhZGdldCBwb2ludGVyIHVuZGVyIHRoZSBkZXZpY2UgbG9jayBhbmQgY2hlY2tpbmcgaXQgZm9yIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJkNzkxMjE4ZWJjNjg4MzcwOTJmODg1N2M2MTU1NzMyNmFiOTQzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMTo0Nzo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbmluZGV4IGQ4N2E4YWI1MTUxMDcuLmU5ZjdkN2MxYTZhM2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuQEAgLTEyNTEsMTQgJiM0MzsxMjUxLDE1IEBAIGVwMF9wb2xsIChzdHJ1Y3QgZmlsZSAqZmQsIHBvbGxfdGFibGUgKndhaXQpXG4gc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIHtcbiBcdHN0cnVjdCBkZXZfZGF0YVx0XHQqZGV2ID0gZmQtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0c3RydWN0IHVzYl9nYWRnZXRcdCpnYWRnZXQgPSBkZXYtXHUwMDNlZ2FkZ2V0O1xuJiM0MztcdHN0cnVjdCB1c2JfZ2FkZ2V0XHQqZ2FkZ2V0O1xuIFx0bG9uZyByZXQgPSAtRU5PVFRZO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0Z2FkZ2V0ID0gZGV2LVx1MDAzZWdhZGdldDtcbiBcdGlmIChkZXYtXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX09QRU5FRCB8fFxuIFx0XHRcdGRldi1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfVU5CT1VORCkge1xuIFx0XHQvKiBOb3QgYm91bmQgdG8gYSBVREMgKi9cbi1cdH0gZWxzZSBpZiAoZ2FkZ2V0LVx1MDAzZW9wcy1cdTAwM2Vpb2N0bCkge1xuJiM0MztcdH0gZWxzZSBpZiAoZ2FkZ2V0IFx1MDAyNlx1MDAyNiBnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsKSB7XG4gXHRcdCYjNDM7JiM0MztkZXYtXHUwMDNldWRjX3VzYWdlO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhZGdldF9kZXZfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIGlvY3RsIGhhbmRsZXIgb2YgZ2FkZ2V0ZnMgYnkgZmV0Y2hpbmcgdGhlIGdhZGdldCBwb2ludGVyIHVuZGVyIHRoZSBkZXZpY2UgbG9jayBhbmQgY2hlY2tpbmcgaXQgZm9yIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkNzkxMjE4ZWJjNjg4MzcwOTJmODg1N2M2MTU1NzMyNmFiOTQzYWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMTo0Nzo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwppbmRleCBkODdhOGFiNTE1MTA3Li5lOWY3ZDdjMWE2YTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCkBAIC0xMjUxLDE0ICYjNDM7MTI1MSwxNSBAQCBlcDBfcG9sbCAoc3RydWN0IGZpbGUgKmZkLCBwb2xsX3RhYmxlICp3YWl0KQogc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGZkLSZndDtwcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0mZ3Q7Z2FkZ2V0OwomIzQzOwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OwogCWxvbmcgcmV0ID0gLUVOT1RUWTsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtkZXYtJmd0O2xvY2spOwomIzQzOwlnYWRnZXQgPSBkZXYtJmd0O2dhZGdldDsKIAlpZiAoZGV2LSZndDtzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8CiAJCQlkZXYtJmd0O3N0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7CiAJCS8qIE5vdCBib3VuZCB0byBhIFVEQyAqLwotCX0gZWxzZSBpZiAoZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsKSB7CiYjNDM7CX0gZWxzZSBpZiAoZ2FkZ2V0ICZhbXA7JmFtcDsgZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsKSB7CiAJCSYjNDM7JiM0MztkZXYtJmd0O3VkY191c2FnZTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7ZGV2LSZndDtsb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZ2FkZ2V0X2Rldl9pb2N0bGAgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBoZXJlIOKAkyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhIHVzZS1hZnRlci1mcmVlLCBvciBwb3NzaWJseSBldmVuIGEgcmFjZSBjb25kaXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwdWxsaW5nIHRoZSBgZ2FkZ2V0YCBwb2ludGVyIGZyb20gdGhlIGBkZXZgIHN0cnVjdHVyZSAqYmVmb3JlKiBncmFiYmluZyB0aGUgbG9jaywgd2hpY2ggaXMgYSBiaWcgbm8tbm8sIGFuZCBjb3VsZCBhbGxvdyBmb3IgZWl0aGVyIG9mIHRoZSB0d28gc2NlbmFyaW9zIHRvIGhhcHBlbi4KClRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgY2xldmVyOiBpdCBtb3ZlcyB0aGUgYXNzaWdubWVudCBvZiBgZ2FkZ2V0YCB0byBhZnRlciB0aGUgYHNwaW5fbG9ja19pcnFgLiBUaGlzIGVuc3VyZXMgdGhlIGBnYWRnZXRgIHBvaW50ZXIgaXMgdmFsaWQgYW5kIGNvbnNpc3RlbnQgd2l0aGluIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGVuIHRoZSBjb25kaXRpb25hbCB0aGF0IGNoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIGBnYWRnZXRgIGlzIG1vZGlmaWVkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90IGBnYWRnZXRgIGlzIG51bGwgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gZm9yIGFueSBwYXRjaCBsaWtlIHRoaXMgaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBBbmQgYWZ0ZXIgdGhpbmtpbmcgYWJvdXQgaXQgZm9yIGEgc2Vjb25kLCBJIHJlYWxpemUgeWVzLCB0aGUgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IGlzIGluZGVlZCByZWFjaGFibGUgdGhyb3VnaCBlbXVsYXRpb24sIGxpa2Ugd2l0aCBhIGR1bW15X2hjZCBvciBvdGhlciBzb2Z0d2FyZS1iYXNlZCBzb2x1dGlvbnMuIFNvIHRoaXMgaXMgYWN0dWFsbHkgYSBzaWduaWZpY2FudCBmaXgsIGFuZCBwb3RlbnRpYWxseSBwcmV2ZW50cyBhIGNyYXNoIGluIGVtdWxhdGVkIGVudmlyb25tZW50cy4KClRpbWUgdG8gZmluZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgYW5kIGFwcHJvdmVkIGZvciBhIHJlbGVhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0X2Rldl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTIyMD1lcDBfcG9sbCAoc3RydWN0IGZpbGUgKmZkLCBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMjUwLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjEyNTE6c3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTEyNTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM4LVx0LnBvbGwgPVx0XHRlcDBfcG9sbCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxOTM5Olx0LnVubG9ja2VkX2lvY3RsID0gZ2FkZ2V0X2Rldl9pb2N0bCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTQwLVx0LnJlbGVhc2UgPVx0ZGV2X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBpbm9kZS5jYCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmb3IgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYXMgdGhleSBzYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgdGhpcyBsZWdhY3kgaW5vZGUtYmFzZWQgVVNCIGdhZGdldCBkcml2ZXIuIFRoaXMgc3BlY2lmaWMgZmlsZSBhbmQgaXRzIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpa2VseSBjb250cm9sIGZlYXR1cmVzIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb25zIG92ZXIgdGhlIFVTQiBnYWRnZXQgaW50ZXJmYWNlLiBJIG5lZWQgdG8gc2VlIHdoaWNoIGRldmljZSB0eXBlcyBhcmUgc3VwcG9ydGVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBtYXNzIHN0b3JhZ2UsIG1heWJlIGEgbmV0d29yayBpbnRlcmZhY2UsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBJcyB0aGlzIG1vZHVsZSBldmVuIGVuYWJsZWQgYnkgZGVmYXVsdD8gQXJlIHRoZXJlIGNvbXBpbGUtdGltZSBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBsaWtlIGRlYnVnIGZsYWdzIG9yIHNwZWNpZmljIGZlYXR1cmUgdG9nZ2xlcz8gVGhlIEtjb25maWcgZmlsZSB3aWxsIHJldmVhbCB0aGUgbG9naWMgYmVoaW5kIGFsbCBvZiB0aGlzLCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcnVsZXMsIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBzZWUgd2hhdCB3ZSYjMzk7cmUgYWN0dWFsbHkgYnVpbGRpbmcgYW5kIHdoYXQgdGhlIG9wdGlvbnMgYXJlIHRvIHRhaWxvciB0aGlzIGRyaXZlciB0byBzcGVjaWZpYyB1c2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5vZGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlPTE0PWdfbWlkaS15XHRcdFx0Oj0gZ21pZGkub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZToxNTpnYWRnZXRmcy15XHRcdFx0Oj0gaW5vZGUub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZS0xNi1nX21hc3Nfc3RvcmFnZS15XHRcdDo9IG1hc3Nfc3RvcmFnZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eSByZXNpZGUuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBpcyB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSB0cmFkaXRpb25hbCwgb3IgbGVnYWN5LCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbG9jYXRlZC4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIGNvbmZpcm0gdGhhdCBgZ2FkZ2V0ZnNgIGlzIGRlZmluZWQgdGhlcmU7IHRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzb2xpZCBncm91bmRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgdGhlc2UgVVNCIGdhZGdldCBmZWF0dXJlcy4gVGltZSB0byB2ZXJpZnkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9HQURHRVRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9MTkwPWNvbmZpZyBVU0JfR19OQ01cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA1LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjIwNjpjb25maWcgVVNCX0dBREdFVEZTXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA3LVx0dHJpc3RhdGUgXCYjMzQ7R2FkZ2V0IEZpbGVzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZGVwZW5kZW5jaWVzOgoKKipBbmFseXppbmcgdGhlIGBVU0JfR0FER0VURlNgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIGBVU0JfR0FER0VURlNgLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoZSBwdXp6bGUgb2YgcHJvdmlkaW5nIFVTQiBkZXZpY2UgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlICpmb3VuZGF0aW9uYWwqIGJ1aWxkaW5nIGJsb2NrcyB0aGlzIHJlbGllcyB1cG9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSwgZGVidWcsIGFuZCBldmVuIG9wdGltaXplIGFueXRoaW5nIHVzaW5nIEdhZGdldEZTLgoKSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgd2UmIzM5O2xsIG5lZWQgY29yZSBVU0IgaW5mcmFzdHJ1Y3R1cmUgLSB0aGUgVVNCIGNvcmUgaXRzZWxmLCBvZiBjb3Vyc2UuIFRoYXQmIzM5O3MgYSBnaXZlbi4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgaG9zdCBjb250cm9sbGVyIGRyaXZlciBmcmFtZXdvcmssIG9yLCBtb3JlIHNwZWNpZmljYWxseSBpbiB0aGlzIGNvbnRleHQsIHRoZSAqZGV2aWNlKiBjb250cm9sbGVyIGRyaXZlciBmcmFtZXdvcmsuIEdhZGdldEZTIGlzIGVtdWxhdGluZyBhIFVTQiBkZXZpY2UsIHNvIGl0IG5lZWRzIHRvIGludGVyZmFjZSB3aXRoIHdoYXRldmVyIGhhcmR3YXJlIHN1cHBvcnRzIHRoYXQgcm9sZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIG1vcmUgZ2VuZXJpYyBhYnN0cmFjdGlvbj8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCknigJltIGFsc28gYXNzdW1pbmcgd2XigJlsbCBlbmNvdW50ZXIgZGVwZW5kZW5jaWVzIG9uIHRoZSBmaWxlIHN5c3RlbSBsYXllcnMgc2luY2UgR2FkZ2V0RlMgbGV2ZXJhZ2VzIGZpbGUgc3lzdGVtIHNlbWFudGljcyBmb3IgaXRzIGRldmljZSBlbXVsYXRpb24uIFdoYXQgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQ/IEJ1ZmZlcnMgZm9yIHRyYW5zZmVycywgbGlrZWx5IGEgZmV3IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhhdC4KCkl0JiMzOTtzIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbjsgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkbyBzby4gTGV0JiMzOTtzIHNlZSBob3cgZGVlcCB0aGVzZSBkZXBlbmRlbmNpZXMgZ28sIGFuZCBob3cgbXVjaCB0aGV5IGludGVybWluZ2xlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MsIGFuZCBtYXliZSBldmVuIHNvbWUgYWN0dWFsIGNvZGUgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBxdWljayBhc3Nlc3NtZW50IHdpbGwgcmV2ZWFsIHdoaWNoIHBpZWNlcyBhcmUgc29saWQgYW5kIHdoaWNoIG9uZXMgYXJlIHBvdGVudGlhbGx5IGdvaW5nIHRvIGdpdmUgbWUgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VURlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTE5MD1jb25maWcgVVNCX0dfTkNNXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMDY6Y29uZmlnIFVTQl9HQURHRVRGU1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNy1cdHRyaXN0YXRlIFwmIzM0O0dhZGdldCBGaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEkgcmVtZW1iZXIgd2Ugd2VyZSBkaXNjdXNzaW5nIHRoZSBsZWdhY3kgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeWAgZGlyZWN0b3J5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMgb2YgdGhhdCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gYXJvdW5kIGxpbmUgMjA2IGlzIHdoZXJlIEkgcmVjYWxsIHNvbWV0aGluZyByZWxldmFudCBiZWluZyBkZWZpbmVkLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHNlY3Rpb24gd2Ugd2VyZSB3b3JraW5nIHdpdGggYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGluZmx1ZW5jZWQuIExldCYjMzk7cyBnZXQgdGhlIGZpbGUgb3BlbiBhbmQgZ2V0IHRvIHRoYXQgbGluZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0ICBvZiBzZXZlcmFsIGV0aGVybmV0IGZyYW1lcyBpbnRvIG9uZSBVU0IgdHJhbnNmZXIgYW5kIGRpZmZlcmVudFxuIDIwMTpcdFx0ICBhbGlnbm1lbnQgcG9zc2liaWxpdGllcy5cbiAyMDI6XHRcbiAyMDM6XHRcdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuIDIwNDpcdFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcJiMzNDtnX25jbVwmIzM0Oy5cbiAyMDU6XHRcbiAyMDY6XHRjb25maWcgVVNCX0dBREdFVEZTXG4gMjA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtHYWRnZXQgRmlsZXN5c3RlbVwmIzM0O1xuIDIwODpcdFx0aGVscFxuIDIwOTpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGZpbGVzeXN0ZW0gYmFzZWQgQVBJIHRoYXQgbGV0cyB1c2VyIG1vZGVcbiAyMTA6XHRcdCAgcHJvZ3JhbXMgaW1wbGVtZW50IGEgc2luZ2xlLWNvbmZpZ3VyYXRpb24gVVNCIGRldmljZSwgaW5jbHVkaW5nXG4gMjExOlx0XHQgIGVuZHBvaW50IEkvTyBhbmQgY29udHJvbCByZXF1ZXN0cyB0aGF0IGRvbiYjMzk7dCByZWxhdGUgdG8gZW51bWVyYXRpb24uXG4gMjEyOlx0XHQgIEFsbCBlbmRwb2ludHMsIHRyYW5zZmVyIHNwZWVkcywgYW5kIHRyYW5zZmVyIHR5cGVzIHN1cHBvcnRlZCBieVxuIDIxMzpcdFx0ICB0aGUgaGFyZHdhcmUgYXJlIGF2YWlsYWJsZSwgdGhyb3VnaCByZWFkKCkgYW5kIHdyaXRlKCkgY2FsbHMuXG4gMjE0Olx0XG4gMjE1Olx0XHQgIFNheSBcJiMzNDt5XCYjMzQ7IHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcJiMzNDttXCYjMzQ7IHRvIGJ1aWxkIGFcbiAyMTY6XHRcdCAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgXCYjMzQ7Z2FkZ2V0ZnNcJiMzNDsuXG4gMjE3Olx0XG4gMjE4Olx0Y29uZmlnIFVTQl9GVU5DVElPTkZTXG4gMjE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtGdW5jdGlvbiBGaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGl0JiMzOTtzIHNldCB0byBgVVNCX0dBREdFVEZTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBgVVNCX0dBREdFVEZTYOKApiB0aGF0JiMzOTtzIGZvciB1c2Vyc3BhY2UgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIGlzbiYjMzk7dCBpdD8mIzM0Oy4gVGhlbiwgYSBxdWVzdGlvbiBwb3BzIGludG8gbXkgbWluZDogaXMgYFVTQl9HQURHRVRGU2AgY29udGluZ2VudCBvbiBgVVNCX0dBREdFVGA/IEl0IHNlZW1zIGxvZ2ljYWxseSBzb3VuZDsgSSBtZWFuLCB5b3UmIzM5O2QgdGhpbmsgdGhlIHVzZXIgc3BhY2UgdGhpbmcgd291bGQgZGVwZW5kIG9uIHRoZSBiYXNlIGdhZGdldCBpbmZyYXN0cnVjdHVyZS4gQmV0dGVyIHRvIGJlIHN1cmUuIFRpbWUgdG8gZ28gdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIHNjYW4gdGhlIHRvcCwgcXVpY2tseSwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgdGhhdCBqdW1wIG91dCBhdCBtZS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgdG8gbWluaW1pemUgZGVidWdnaW5nIGxhdGVyLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIHVuZGVybHlpbmcgZmVhdHVyZXMgb2YgdGhlIGtlcm5lbCBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIEdhZGdldCBzdXBwb3J0IG9uIGEgc3lzdGVtIGludm9sdmVzXG4gICA0Olx0IyAgICAoYSkgYSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIsIGFuZFxuICAgNTpcdCMgICAgKGIpIHRoZSBnYWRnZXQgZHJpdmVyIHVzaW5nIGl0LlxuICAgNjpcdCNcbiAgIDc6XHQjIE5PVEU6ICBHYWRnZXQgc3VwcG9ydCAqKiBET0VTIE5PVCAqKiBkZXBlbmQgb24gaG9zdC1zaWRlIENPTkZJR19VU0IgISFcbiAgIDg6XHQjXG4gICA5Olx0IyAgLSBIb3N0IHN5c3RlbXMgKGxpa2UgUENzKSBuZWVkIENPTkZJR19VU0IgKHdpdGggXCYjMzQ7QVwmIzM0OyBqYWNrcykuXG4gIDEwOlx0IyAgLSBQZXJpcGhlcmFscyAobGlrZSBQREFzKSBuZWVkIENPTkZJR19VU0JfR0FER0VUICh3aXRoIFwmIzM0O0JcJiMzNDsgamFja3MpLlxuICAxMTpcdCMgIC0gU29tZSBzeXN0ZW1zIGhhdmUgYm90aCBraW5kcyBvZiBjb250cm9sbGVycy5cbiAgMTI6XHQjXG4gIDEzOlx0IyBXaXRoIGhlbHAgZnJvbSBhIHNwZWNpYWwgdHJhbnNjZWl2ZXIgYW5kIGEgXCYjMzQ7TWluaS1BQlwmIzM0OyBqYWNrLCBzeXN0ZW1zIHdpdGhcbiAgMTQ6XHQjIGJvdGgga2luZHMgb2YgY29udHJvbGxlciBjYW4gYWxzbyBzdXBwb3J0IFwmIzM0O1VTQiBPbi10aGUtR29cJiMzNDsgKENPTkZJR19VU0JfT1RHKS5cbiAgMTU6XHQjXG4gIDE2Olx0IyBBIExpbnV4IFwmIzM0O0dhZGdldCBEcml2ZXJcJiMzNDsgdGFsa3MgdG8gdGhlIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXJcbiAgMTc6XHQjIGRyaXZlciB0aHJvdWdoIHRoZSBhYnN0cmFjdCBcJiMzNDtnYWRnZXRcJiMzNDsgQVBJLiAgU29tZSBvdGhlciBvcGVyYXRpbmdcbiAgMTg6XHQjIHN5c3RlbXMgY2FsbCB0aGVzZSBcJiMzNDtjbGllbnRcJiMzNDsgZHJpdmVycywgb2Ygd2hpY2ggXCYjMzQ7Y2xhc3MgZHJpdmVyc1wmIzM0O1xuICAxOTpcdCMgYXJlIGEgc3Vic2V0IChpbXBsZW1lbnRpbmcgYSBVU0IgZGV2aWNlIGNsYXNzIHNwZWNpZmljYXRpb24pLlxuICAyMDpcdCMgQSBnYWRnZXQgZHJpdmVyIGltcGxlbWVudHMgb25lIG9yIG1vcmUgVVNCIGZ1bmN0aW9ucyB1c2luZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gSSB3YW50IHRvIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBzZWxlY3RhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBnYWRnZXQgZHJpdmVycyBhcmUgZXhwb3NlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBidWlsZCBvcHRpb25zIGhlcmUsIHRoZSBrbm9icyB0aGF0IEkgY2FuIHR3ZWFrIHRvIHRhaWxvciB0aGUgVVNCIGdhZGdldCBjYXBhYmlsaXRpZXMgZm9yIGEgc3BlY2lmaWMgdXNlIGNhc2Ugb3IgaGFyZHdhcmUgcGxhdGZvcm0uIFRoaXMgZmlsZSBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJyZWFkdGggb2YgdGhlIGdhZGdldCBzdWJzeXN0ZW0gYW5kIGhvdyBkaWZmZXJlbnQgZ2FkZ2V0IGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiBJdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvc3NpYmlsaXRpZXMgYW5kIGNvbnN0cmFpbnRzIHdoZW4gYnVpbGRpbmcgYSBjdXN0b20gVVNCIEdhZGdldCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHN1cHBvcnQgZm9yIG1hc3Mgc3RvcmFnZSwgc2VyaWFsIHBvcnRzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBwZXJoYXBzIGV2ZW4gY3VzdG9tIGZ1bmN0aW9ucy4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY3J1Y2lhbCBiZWZvcmUgbW92aW5nIG9uIHRvIGluZGl2aWR1YWwgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00OTU9Y29uZmlnIFVTQl9DT05GSUdGU19GX1RDTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTUwOC1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjUwOTpzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcHJldHR5IHN1cmUgdGhlIHJlbGV2YW50IHN0dWZmIGZvciB0aGlzIGxpdmVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9gIGRpcmVjdG9yeS4gUmlnaHQsIGFuZCBJIHJlbWVtYmVyIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBzb21ldGhpbmcgYXJvdW5kIGxpbmUgNTA5LiBJJiMzOTtsbCBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gYWRkcmVzcyB0aGUgaXNzdWUgSSYjMzk7bSB3b3JraW5nIG9uLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTA6XHRcdCAgdGhlIGRldmljZSBmaWxlIHRvIGdldCBvciBzZXQgcHJpbnRlciBzdGF0dXMuXG4gNDkxOlx0XG4gNDkyOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X3ByaW50ZXIucnN0XG4gNDkzOlx0XHQgIHdoaWNoIGluY2x1ZGVzIHNhbXBsZSBjb2RlIGZvciBhY2Nlc3NpbmcgdGhlIGRldmljZSBmaWxlLlxuIDQ5NDpcdFxuIDQ5NTpcdGNvbmZpZyBVU0JfQ09ORklHRlNfRl9UQ01cbiA0OTY6XHRcdGJvb2wgXCYjMzQ7VVNCIEdhZGdldCBUYXJnZXQgRmFicmljXCYjMzQ7XG4gNDk3Olx0XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFXG4gNDk4Olx0XHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xuIDQ5OTpcdFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcbiA1MDA6XHRcdHNlbGVjdCBVU0JfRl9UQ01cbiA1MDE6XHRcdGhlbHBcbiA1MDI6XHRcdCAgVGhpcyBmYWJyaWMgaXMgYSBVU0IgZ2FkZ2V0IGNvbXBvbmVudC4gVHdvIFVTQiBwcm90b2NvbHMgYXJlXG4gNTAzOlx0XHQgIHN1cHBvcnRlZCB0aGF0IGlzIEJCQiBvciBCT1QgKEJ1bGsgT25seSBUcmFuc3BvcnQpIGFuZCBVQVNcbiA1MDQ6XHRcdCAgKFVTQiBBdHRhY2hlZCBTQ1NJKS4gQk9UIGlzIGFkdmVydGlzZWQgb24gYWx0ZXJuYXRpdmVcbiA1MDU6XHRcdCAgaW50ZXJmYWNlIDAgKHByaW1hcnkpIGFuZCBVQVMgaXMgb24gYWx0ZXJuYXRpdmUgaW50ZXJmYWNlIDEuXG4gNTA2Olx0XHQgIEJvdGggcHJvdG9jb2xzIGNhbiB3b3JrIG9uIFVTQjIuMCBhbmQgVVNCMy4wLlxuIDUwNzpcdFx0ICBVQVMgdXRpbGl6ZXMgdGhlIFVTQiAzLjAgZmVhdHVyZSBjYWxsZWQgc3RyZWFtcyBzdXBwb3J0LlxuIDUwODpcdFxuIDUwOTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcJiMzNDtcbiA1MTA6XHRcbiA1MTE6XHRlbmRpZiAjIFVTQl9HQURHRVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgYFVTQl9HQURHRVRgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGUgYmlnIHBhcmVudCwgdGhlIHRoaW5nIHRoYXQgZW5jb21wYXNzZXMgdGhlIHdob2xlIFVTQiBnYWRnZXQgc3lzdGVtLiBUaGVuLCBgVVNCX0dBREdFVEZTYCBzcGVjaWZpY2FsbHkgZW5hYmxlcyB0aGUgZHJpdmVyIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoYXQgYnJvYWRlciBmcmFtZXdvcmsuIE5vdywgaGVyZSYjMzk7cyBhIGN1cnZlYmFsbC4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgVVNCX0RVTU1ZX0hDRGAgaXMgYWxzbyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGNydWNpYWwgZm9yIGVtdWxhdGluZyB0aGUgYmVoYXZpb3Igb2YgYSBVU0IgZ2FkZ2V0LiBIb3dldmVyLCBpdCYjMzk7cyBgVVNCX0dBREdFVGAgYW5kIGBVU0JfR0FER0VURlNgIHRoYXQgYXJlIHRoZSBwcmltYXJ5IGVuYWJsZXJzIG9mIHRoZSBjb3JlIGNvZGUsIHJpZ2h0PwoKQWxyaWdodCwgbmV4dCBzdGVwOiBJIHdhbnQgdG8gY29uZmlybSBteSBzdXNwaWNpb24gcmVnYXJkaW5nIHRoZSByZWFjaGFiaWxpdHkgb2YgYGdhZGdldF9kZXZfaW9jdGxgLiBUaW1lIHRvIHNlZSBpZiB0aGUga2VybmVsIGFjdHVhbGx5IGNhbGxzIHRoaXMgZnVuY3Rpb24uIEFoYSEgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGdhZGdldF9kZXZfaW9jdGxgIGlzIGluZGVlZCB0aGUgYHVubG9ja2VkX2lvY3RsYCBmdW5jdGlvbiB0aWVkIHRvIGBlcDBfb3BlcmF0aW9uc2AuIEFuZCBub3cgdGhhdCBJIGhhdmUgdGhlIGxpbmssIEkgcmVtZW1iZXIgdGhhdCBgZXAwX29wZXJhdGlvbnNgIGlzIGRlZmluZWQgd2l0aGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgZW5kcG9pbnQgemVybyBvcGVyYXRpb25zIHJlc2lkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwMF9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTE1PWdhZGdldF9kZXZfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTMxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXAwX29wZXJhdGlvbnMgPSB7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzMy1cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjAxNj1nYWRnZXRmc19maWxsX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNTktXHRkZXYtXHUwMDNlc2IgPSBzYjtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDYwOlx0cmMgPSBnYWRnZXRmc19jcmVhdGVfZmlsZShzYiwgQ0hJUCwgZGV2LCBcdTAwMjZlcDBfb3BlcmF0aW9ucyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA2MS1cdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTcwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgZ2FkZ2V0ZnNgIGlvY3RsIEhhbmRsZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIGBpb2N0bGAgaGFuZGxlciwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRoZSBgQ0hJUGAgZmlsZSB3aXRoaW4gdGhlIGBnYWRnZXRmc2AgY29udGV4dC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgaXMgbGlrZWx5IGFibGUgdG8gcmVhY2ggdGhpcyBwb2ludCBpcyBjcnVjaWFsLiBJdCBtZWFucyB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZyBhbmQgZXhwbG9pdGluZyB2dWxuZXJhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGBnYWRnZXRfZGV2X2lvY3RsYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBkaXNzZWN0IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCB0aGUgb3BlcmF0aW9ucyBpdCBwZXJmb3JtcyBvbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAob3IgZW11bGF0ZWQgaGFyZHdhcmUgaW4gdGhpcyBjYXNlKSwgYW5kIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yay4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3dzLCByYWNlIGNvbmRpdGlvbnMsIGJ1ZmZlciBvdmVyZmxvd3MsIHVzZS1hZnRlci1mcmVlcywgb3IgYW55IG90aGVyIGNsYXNzaWMgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zIC0gZGVlcCBkaXZpbmcgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTA6XHRcbjEyNTE6XHRzdGF0aWMgbG9uZyBnYWRnZXRfZGV2X2lvY3RsIChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4xMjUyOlx0e1xuMTI1MzpcdFx0c3RydWN0IGRldl9kYXRhXHRcdCpkZXYgPSBmZC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4xMjU0Olx0XHRzdHJ1Y3QgdXNiX2dhZGdldFx0KmdhZGdldDtcbjEyNTU6XHRcdGxvbmcgcmV0ID0gLUVOT1RUWTtcbjEyNTY6XHRcbjEyNTc6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuMTI1ODpcdFx0Z2FkZ2V0ID0gZGV2LVx1MDAzZWdhZGdldDtcbjEyNTk6XHRcdGlmIChkZXYtXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX09QRU5FRCB8fFxuMTI2MDpcdFx0XHRcdGRldi1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfVU5CT1VORCkge1xuMTI2MTpcdFx0XHQvKiBOb3QgYm91bmQgdG8gYSBVREMgKi9cbjEyNjI6XHRcdH0gZWxzZSBpZiAoZ2FkZ2V0IFx1MDAyNlx1MDAyNiBnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsKSB7XG4xMjYzOlx0XHRcdCYjNDM7JiM0MztkZXYtXHUwMDNldWRjX3VzYWdlO1xuMTI2NDpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuMTI2NTpcdFxuMTI2NjpcdFx0XHRyZXQgPSBnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsIChnYWRnZXQsIGNvZGUsIHZhbHVlKTtcbjEyNjc6XHRcbjEyNjg6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4xMjY5Olx0XHRcdC0tZGV2LVx1MDAzZXVkY191c2FnZTtcbjEyNzA6XHRcdH1cbjEyNzE6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4xMjcyOlx0XG4xMjczOlx0XHRyZXR1cm4gcmV0O1xuMTI3NDpcdH1cbjEyNzU6XHRcbjEyNzY6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI3NzpcdFxuMTI3ODpcdC8qIFRoZSBpbi1rZXJuZWwgZ2FkZ2V0IGRyaXZlciBoYW5kbGVzIG1vc3QgZXAwIGlzc3VlcywgaW4gcGFydGljdWxhclxuMTI3OTpcdCAqIGVudW1lcmF0aW5nIHRoZSBzaW5nbGUgY29uZmlndXJhdGlvbiAoYXMgcHJvdmlkZWQgZnJvbSB1c2VyIHNwYWNlKS5cbjEyODA6XHQgKlxuMTI4MTpcdCAqIFVucmVjb2duaXplZCBlcDAgcmVxdWVzdHMgbWF5IGJlIGhhbmRsZWQgaW4gdXNlciBzcGFjZS5cbjEyODI6XHQgKi9cbjEyODM6XHRcbjEyODQ6XHRzdGF0aWMgdm9pZCBtYWtlX3F1YWxpZmllciAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4xMjg1Olx0e1xuMTI4NjpcdFx0c3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvclx0XHRxdWFsO1xuMTI4NzpcdFx0c3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvclx0XHQqZGVzYztcbjEyODg6XHRcbjEyODk6XHRcdHF1YWwuYkxlbmd0aCA9IHNpemVvZiBxdWFsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2FkZ2V0RlMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZpeGluZyBzb21ldGhpbmcgaW1wb3J0YW50IOKAkyBhIGZ1bmN0aW9uYWwgYnVnLCBzcGVjaWZpY2FsbHkgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWUuIEl0IGxvb2tzIGxpa2UgYGdhZGdldGAgd2FzIGJlaW5nIHJlYWQgYmVmb3JlIHRoZSBsb2NrIHdhcyBhY3F1aXJlZCwgYW5kIHRoZW4gZGVyZWZlcmVuY2VkLCB3aGljaCBpcyBhIGNsYXNzaWMgcmVjaXBlIGZvciB0cm91YmxlLgoKTXkgcmVhc29uaW5nIGZvciB0aGUgZnV6emluZyBhbmFseXNpcyBpcyB0aGF0IHRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBpb2N0bCBoYW5kbGVyIGZvciB0aGUgZ2FkZ2V0ZnMgZGV2aWNlLCBgZ2FkZ2V0X2Rldl9pb2N0bGAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhlIGNyaXRpY2FsIGlzc3VlIG9mIGZldGNoaW5nIHRoZSBgZ2FkZ2V0YCBwb2ludGVyIHNhZmVseSwgdW5kZXIgdGhlIGRldmljZSBsb2NrLCBhbmQgYWxzbyBpbmNsdWRlcyBhIGBOVUxMYCBjaGVjay4gU28sIHRoaXMgaXMgYSBkZWZpbml0ZSB3aW4gdG8gYWRkIHRvIHRoZSBmdXp6aW5nIGNhbXBhaWduLgoKRm9yIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAsIG9idmlvdXNseSwgYW5kIHRoZSBgUmVhc29uaW5nYCBpcyBkZXRhaWxlZCBlbm91Z2ggdG8gZXhwbGFpbiB3aGF0IGlzIGJlaW5nIGFkZHJlc3NlZC4gSSBhbSBzZXR0aW5nIHRoZSBgRm9jdXNTeW1ib2xzYCB0byBgZ2FkZ2V0X2Rldl9pb2N0bGAuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgVVNCX0dBREdFVEZTYCBpcyB0aGUga2V5IG9uZSwgc2luY2UgaXQgZW5hYmxlcyBgaW5vZGUub2AsIHdoZXJlIGBnYWRnZXRfZGV2X2lvY3RsYCBsaXZlcy4gYFVTQl9HQURHRVRgIGlzIHRoZSBwYXJlbnQgY29uZmlnLCBidXQgdGhlIGRvY3VtZW50YXRpb24gc2FpZCB0byBvbmx5IGVuYWJsZSB0aGUgbmVlZGVkIGNvbmZpZ3MsIGFuZCBgVVNCX0dBREdFVEZTYCBpcyBlbm91Z2guCgpJIHNob3VsZCBhbHNvIGNoZWNrIHdoZXRoZXIgYFVTQl9EVU1NWV9IQ0RgIGlzIG5lZWRlZC4gRXZlbiB0aG91Z2ggaXQmIzM5O3MgdHlwaWNhbGx5IGluY2x1ZGVkIGluIHN5emthbGxlciBjb25maWdzLCBJIHdhbnQgdG8gYmUgcHJlY2lzZS4gQ2hlY2tpbmcgZGVwZW5kZW5jaWVzIGlzIGtleSBoZXJlLiBUaGUgaW5zdHJ1Y3Rpb25zIG1lbnRpb24gdG8gcmV2aWV3IGBkZXBlbmRzIG9uYCBsaW5lcyB0byBjYXRjaCBhbGwgdGhlIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncy4gYFVTQl9HQURHRVRGU2AgZGVwZW5kcyBvbiBgVVNCX0dBREdFVGAuIFNvIGxldCYjMzk7cyBjaGVjayBgVVNCX0dBREdFVGAmIzM5O3MgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoxNzptZW51Y29uZmlnIFVTQl9HQURHRVRcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIEdhZGdldCBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDc9aWYgVVNCX0dBREdFVFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0OTpjb25maWcgVVNCX0dBREdFVF9ERUJVR1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNTAtXHRib29sIFwmIzM0O0RlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNjItXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo2Mzpjb25maWcgVVNCX0dBREdFVF9WRVJCT1NFXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy02NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgTWVzc2FnZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc2LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6Nzc6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRklMRVNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6ODg6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRlNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgaW4gZGVidWdmcyAoREVWRUxPUE1FTlQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctOTgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo5OTpjb25maWcgVVNCX0dBREdFVF9WQlVTX0RSQVdcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEwMC1cdGludCBcJiMzNDtNYXhpbXVtIFZCVVMgUG93ZXIgdXNhZ2UgKDItNTAwIG1BKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTExNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjExNjpjb25maWcgVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMTctXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIHN0b3JhZ2UgcGlwZWxpbmUgYnVmZmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxNy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgVVNCIGdhZGdldCBzdWJzeXN0ZW0uIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgZmVhdHVyZXMgdGhhdCBjYW4gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBidXQgYWxzbyBvcHRpb25zIGZvciBzcGVjaWZpYyBVU0IgZ2FkZ2V0IGNvbnRyb2xsZXJzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIGNhcGFiaWxpdGllcy4gSSBob3BlIHRoaXMgcHJvdmlkZXMgdGhlIHN0YXJ0aW5nIHBvaW50IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTA6XHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXCYjMzQ7QlwmIzM0OyBqYWNrcykuXG4gIDExOlx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxuICAxMjpcdCNcbiAgMTM6XHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcJiMzNDtNaW5pLUFCXCYjMzQ7IGphY2ssIHN5c3RlbXMgd2l0aFxuICAxNDpcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXCYjMzQ7VVNCIE9uLXRoZS1Hb1wmIzM0OyAoQ09ORklHX1VTQl9PVEcpLlxuICAxNTpcdCNcbiAgMTY6XHRcbiAgMTc6XHRtZW51Y29uZmlnIFVTQl9HQURHRVRcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgMjA6XHRcdHNlbGVjdCBOTFNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXG4gIDIzOlx0XHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cbiAgMjQ6XHRcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcbiAgMjU6XHRcdCAgIHlvdSBjYW4mIzM5O3QgY29ubmVjdCBhIFwmIzM0O3RvLXRoZS1ob3N0XCYjMzQ7IGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXG4gIDI2Olx0XG4gIDI3Olx0XHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcbiAgMjg6XHRcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcbiAgMjk6XHRcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTcwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIGJhc2VkIG9uIHRoZSB3YXkgdGhpcyBpcyBzdHJ1Y3R1cmVkLCBpdCBhcHBlYXJzIHRoYXQgYFVTQl9HQURHRVRgIHNpdHMgYXQgdGhlIHRvcCBsZXZlbCBpbiB0aGUgbWVudWNvbmZpZy4gVGhhdCBtYWtlcyBzZW5zZS4gSXQgbWVhbnMgdGhhdCBgVVNCX0dBREdFVGAgYW5kIGBVU0JfR0FER0VURlNgIGFyZSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE5vdywgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfR0FER0VURlNgLiBJIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9yIG92ZXJsb29rZWQgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciByZWxhdGVkIGZlYXR1cmVzLiBJdCYjMzk7cyBhbHdheXMgd29ydGggZG91YmxlLWNoZWNraW5nIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdCAgb2Ygc2V2ZXJhbCBldGhlcm5ldCBmcmFtZXMgaW50byBvbmUgVVNCIHRyYW5zZmVyIGFuZCBkaWZmZXJlbnRcbiAyMDE6XHRcdCAgYWxpZ25tZW50IHBvc3NpYmlsaXRpZXMuXG4gMjAyOlx0XG4gMjAzOlx0XHQgIFNheSBcJiMzNDt5XCYjMzQ7IHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcJiMzNDttXCYjMzQ7IHRvIGJ1aWxkIGFcbiAyMDQ6XHRcdCAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgXCYjMzQ7Z19uY21cJiMzNDsuXG4gMjA1Olx0XG4gMjA2Olx0Y29uZmlnIFVTQl9HQURHRVRGU1xuIDIwNzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2FkZ2V0IEZpbGVzeXN0ZW1cJiMzNDtcbiAyMDg6XHRcdGhlbHBcbiAyMDk6XHRcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBmaWxlc3lzdGVtIGJhc2VkIEFQSSB0aGF0IGxldHMgdXNlciBtb2RlXG4gMjEwOlx0XHQgIHByb2dyYW1zIGltcGxlbWVudCBhIHNpbmdsZS1jb25maWd1cmF0aW9uIFVTQiBkZXZpY2UsIGluY2x1ZGluZ1xuIDIxMTpcdFx0ICBlbmRwb2ludCBJL08gYW5kIGNvbnRyb2wgcmVxdWVzdHMgdGhhdCBkb24mIzM5O3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxuIDIxMjpcdFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcbiAyMTM6XHRcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4gMjE2Olx0XHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFwmIzM0O2dhZGdldGZzXCYjMzQ7LlxuIDIxNzpcdFxuIDIxODpcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xuIDIxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7RnVuY3Rpb24gRmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzMAoJCQkJCQkJb3V0cHV0OiAxMDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkVsaW1pbmF0aW5nIEV4dHJhbmVvdXMgQ29tcGxleGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwcm9ibGVtLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gemVyb2luZyBpbiBvbiBpcyB0aGUgcG90ZW50aWFsIGZvciBleHRlcm5hbCBkZXBlbmRlbmNpZXMuICBNeSBicmFpbiBpbW1lZGlhdGVseSBzY2FucyBmb3IgYW55dGhpbmcgSSBtaWdodCBiZSByZWx5aW5nIG9uIG91dHNpZGUgb2YgdGhlIGltbWVkaWF0ZSBzY29wZSwgYW55IGxpYnJhcmllcyBvciBleHRlcm5hbCBBUElzIHRoYXQgY291bGQgaW50cm9kdWNlIGZyYWdpbGl0eSBvciB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gVGhhbmtmdWxseSwgaXQmIzM5O3MgY2xlYXIgdGhlcmUgYXJlICpubyogb3RoZXIgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGZhbnRhc3RpYzsgaXQgc2ltcGxpZmllcyB0aGUgYW5hbHlzaXMgY29uc2lkZXJhYmx5LiBUaGUgY2xlYW5lciB0aGUgc29sdXRpb24sIHRoZSBiZXR0ZXIuCgpOb3csIHdpdGggZGVwZW5kZW5jaWVzIG91dCBvZiB0aGUgd2F5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIGxvZ2ljIGFuZCB0aGUgY3J1Y2lhbCBwYXJ0IG9mIHRoaXMgcHJvY2Vzcy4gVGhlIG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvLCBjYWxsIHRoYXQgYHNldC1yZXN1bHRzYCBmdW5jdGlvbiBvciB3aGF0ZXZlciBpdCYjMzk7cyBjYWxsZWQuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIHJlbGV2YW50LiBUaGF0JiMzOTtzIHdoYXQgSSBhbSBmb2N1c2VkIG9uIGF0IHRoaXMgbW9tZW50LgoKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0X2Rldl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgaW9jdGwgaGFuZGxlciBvZiBnYWRnZXRmcyBieSBmZXRjaGluZyB0aGUgZ2FkZ2V0IHBvaW50ZXIgdW5kZXIgdGhlIGRldmljZSBsb2NrIGFuZCBjaGVja2luZyBpdCBmb3IgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhZGdldF9kZXZfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIGlvY3RsIGhhbmRsZXIgb2YgZ2FkZ2V0ZnMgYnkgZmV0Y2hpbmcgdGhlIGdhZGdldCBwb2ludGVyIHVuZGVyIHRoZSBkZXZpY2UgbG9jayBhbmQgY2hlY2tpbmcgaXQgZm9yIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVx1MDAzZWdhZGdldGAgd2FzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIGBkZXYtXHUwMDNlbG9ja2Agc3BpbmxvY2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGRldi1cdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkNzkxMjE4ZWJjNjg4MzcwOTJmODg1N2M2MTU1NzMyNmFiOTQzYWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMTo0Nzo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwppbmRleCBkODdhOGFiNTE1MTA3Li5lOWY3ZDdjMWE2YTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCkBAIC0xMjUxLDE0ICYjNDM7MTI1MSwxNSBAQCBlcDBfcG9sbCAoc3RydWN0IGZpbGUgKmZkLCBwb2xsX3RhYmxlICp3YWl0KQogc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGZkLSZndDtwcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0mZ3Q7Z2FkZ2V0OwomIzQzOwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OwogCWxvbmcgcmV0ID0gLUVOT1RUWTsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtkZXYtJmd0O2xvY2spOwomIzQzOwlnYWRnZXQgPSBkZXYtJmd0O2dhZGdldDsKIAlpZiAoZGV2LSZndDtzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8CiAJCQlkZXYtJmd0O3N0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7CiAJCS8qIE5vdCBib3VuZCB0byBhIFVEQyAqLwotCX0gZWxzZSBpZiAoZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsKSB7CiYjNDM7CX0gZWxzZSBpZiAoZ2FkZ2V0ICZhbXA7JmFtcDsgZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsKSB7CiAJCSYjNDM7JiM0MztkZXYtJmd0O3VkY191c2FnZTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7ZGV2LSZndDtsb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgR2FkZ2V0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGdhZGdldF9kZXZfaW9jdGxgIGluIGBpbm9kZS5jYCB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgbGVnYWN5IGRyaXZlci4gSXQmIzM5O3MgbWFraW5nIGEgc2VlbWluZ2x5IHNtYWxsIGJ1dCBwb3RlbnRpYWxseSBjcnVjaWFsIGNoYW5nZS4gRmlyc3QsIHRoZXkmIzM5O3ZlIG1vdmVkIHRoZSBhc3NpZ25tZW50IG9mIGBnYWRnZXQgPSBkZXYtJmd0O2dhZGdldDtgIGluc2lkZSBhIGBzcGluX2xvY2tfaXJxKCZhbXA7ZGV2LSZndDtsb2NrKTtgIGJsb2NrLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlOyB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gYGRldi0mZ3Q7Z2FkZ2V0YC4gVGhlIGxvY2sgc3VnZ2VzdHMgdGhhdCBgZ2FkZ2V0YCBtaWdodCBiZSBtb2RpZmllZCBlbHNld2hlcmUgY29uY3VycmVudGx5LCBhbmQgdGhpcyBjaGFuZ2UgYWltcyB0byBlbnN1cmUgdGhhdCBhY2Nlc3MgaXMgc2VyaWFsaXplZC4KClNlY29uZGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIE5VTEwgY2hlY2s6IGBnYWRnZXQgJmFtcDsmYW1wOyBnYWRnZXQtJmd0O29wcy0mZ3Q7aW9jdGxgIGJlZm9yZSB0aGUgYWN0dWFsIGBnYWRnZXQtJmd0O29wcy0mZ3Q7aW9jdGxgIGNhbGwuIFRoYXQgc2NyZWFtcyAmIzM0O251bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcm90ZWN0aW9uJiMzNDsgdG8gbWUuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhleSYjMzk7dmUgZm91bmQgYSBzY2VuYXJpbyB3aGVyZSBgZ2FkZ2V0YCBjb3VsZCBiZSBOVUxMLCBvciBwZXJoYXBzIGV2ZW4gd29yc2UsIHRoYXQgYGdhZGdldC0mZ3Q7b3BzYCBjb3VsZCBiZSB1bmluaXRpYWxpemVkIG9yIE5VTEwuIE1heWJlIHRoZSBnYWRnZXQgZ2V0cyB1bmJvdW5kL2Rpc2Nvbm5lY3RlZCBpbiBhIHJhY2UgY29uZGl0aW9uLiBUaGlzIGxvb2tzIGxpa2UgZWl0aGVyIGEgZml4IGZvciBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBvciBzb21lIGtpbmQgb2YgcmFjZSBjb25kaXRpb24gd2hlcmUgYGRldi0mZ3Q7Z2FkZ2V0YCBpcyBhY2Nlc3NlZCBiZWZvcmUgaXQmIzM5O3MgZnVsbHkgaW5pdGlhbGl6ZWQgb3Igd2hpbGUgaXQmIzM5O3MgYmVpbmcgZGVhbGxvY2F0ZWQgb3IgbW9kaWZpZWQgaW4gYW5vdGhlciB0aHJlYWQuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgbG9jayBhbmQgdGhlIE5VTEwgY2hlY2sgc3RyZW5ndGhlbnMgdGhhdCBhc3N1bXB0aW9uLgoKSSYjMzk7ZCBiZXR0ZXIgZ28gZGVlcGVyIGFuZCBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQgYW5kIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIHZ1bG5lcmFiaWxpdHkuIFdlIG5lZWQgdG8gdHJhY2UgYWxsIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDU6XHRcdH1cbjEyNDY6XHRvdXQ6XG4xMjQ3Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuMTI0ODpcdFx0cmV0dXJuIG1hc2s7XG4xMjQ5Olx0fVxuMTI1MDpcdFxuMTI1MTpcdHN0YXRpYyBsb25nIGdhZGdldF9kZXZfaW9jdGwgKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbjEyNTI6XHR7XG4xMjUzOlx0XHRzdHJ1Y3QgZGV2X2RhdGFcdFx0KmRldiA9IGZkLVx1MDAzZXByaXZhdGVfZGF0YTtcbjEyNTQ6XHRcdHN0cnVjdCB1c2JfZ2FkZ2V0XHQqZ2FkZ2V0O1xuMTI1NTpcdFx0bG9uZyByZXQgPSAtRU5PVFRZO1xuMTI1NjpcdFxuMTI1NzpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4xMjU4Olx0XHRnYWRnZXQgPSBkZXYtXHUwMDNlZ2FkZ2V0O1xuMTI1OTpcdFx0aWYgKGRldi1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8XG4xMjYwOlx0XHRcdFx0ZGV2LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7XG4xMjYxOlx0XHRcdC8qIE5vdCBib3VuZCB0byBhIFVEQyAqL1xuMTI2MjpcdFx0fSBlbHNlIGlmIChnYWRnZXQgXHUwMDI2XHUwMDI2IGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpIHtcbjEyNjM6XHRcdFx0JiM0MzsmIzQzO2Rldi1cdTAwM2V1ZGNfdXNhZ2U7XG4xMjY0Olx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4xMjY1Olx0XG4xMjY2Olx0XHRcdHJldCA9IGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGwgKGdhZGdldCwgY29kZSwgdmFsdWUpO1xuMTI2NzpcdFxuMTI2ODpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbjEyNjk6XHRcdFx0LS1kZXYtXHUwMDNldWRjX3VzYWdlO1xuMTI3MDpcdFx0fVxuMTI3MTpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbjEyNzI6XHRcbjEyNzM6XHRcdHJldHVybiByZXQ7XG4xMjc0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDkxCgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSB3aXRoaW4gdGhlIGdhZGdldCBkcml2ZXIuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGlzIGEgcmFjZSBjb25kaXRpb246IHNwZWNpZmljYWxseSwgYSBzaXR1YXRpb24gd2hlcmUgYGRldi0mZ3Q7Z2FkZ2V0YCBjYW4gYmUgYWNjZXNzZWQgYW5kIHBvdGVudGlhbGx5IGJlIGBOVUxMYCBvciBtb2RpZmllZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGFub3RoZXIgdGhyZWFkIGlzIHVzaW5nIGl0LCB3aGljaCBpcyBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGV2ZW4gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBgZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsYCBmdW5jdGlvbiBpcyBjYWxsZWQuCgpUaGUgZml4IGl0c2VsZiBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIHRoZXNlIHR5cGVzIG9mIGlzc3Vlcy4gVGhleSYjMzk7cmUgbW92aW5nIHRoZSBhY2Nlc3MgdG8gYGRldi0mZ3Q7Z2FkZ2V0YCB3aXRoaW4gYSBzcGlubG9jayAoYGRldi0mZ3Q7bG9ja2ApIHRvIHByb3RlY3QgaXQgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMuIFRoZXkgYXJlIGFsc28gaW1wbGVtZW50aW5nIGEgTlVMTCBjaGVjayB0byBlbnN1cmUgYGdhZGdldGAgaXNuJiMzOTt0IGFjY2Vzc2VkIGJlZm9yZSBpdCYjMzk7cyBiZWVuIGluaXRpYWxpemVkLCB3aGljaCBpcyBjcnVjaWFsLgoKRnJvbSBhIGRlYnVnZ2luZyBwZXJzcGVjdGl2ZSwgdGhpcyB0eXBlIG9mIGJ1ZyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHdvdWxkIGhhdmUgY2F1Z2h0IGR1cmluZyB0ZXN0aW5nLCBwYXJ0aWN1bGFybHkgaWYgaXQgd2FzIGEgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIHdvdWxkIGZsYWcgdGhlIG1lbW9yeSBjb3JydXB0aW9uIGluIHRoZSBzZWNvbmQgaXNzdWUsIGFsb25nIHdpdGggcmVndWxhciBidWcgZGV0ZWN0b3JzLiBTdGFuZGFyZCBrZXJuZWwgZXJyb3IgaGFuZGxpbmcsIGxpa2UgdGhlIGhhcmR3YXJlJiMzOTtzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcm90ZWN0aW9uLCB3b3VsZCBhbHNvIGNhdGNoIHRoZSBjcmFzaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gQmVjYXVzZSBpdCYjMzk7cyBhIE5VTEwgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUsIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUgYW5kIHdvdWxkbiYjMzk7dCBwcm92aWRlIGFueXRoaW5nIGJleW9uZCB3aGF0IHRoZSBvdGhlciB0b29scyBjYW4uIEl0JiMzOTtzIGEgY29uY3VycmVuY3kgaXNzdWUgY291cGxlZCB3aXRoIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IHByb2JsZW0sIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgc2l0dWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVx1MDAzZWdhZGdldGAgd2FzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIGBkZXYtXHUwMDNlbG9ja2Agc3BpbmxvY2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGRldi1cdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVx1MDAzZWdhZGdldGAgd2FzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIGBkZXYtXHUwMDNlbG9ja2Agc3BpbmxvY2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGRldi1cdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ3OjU0LjY0NzM4Nzc1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjk1NzIwMTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfR0FER0VURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYWRnZXRfZGV2X2lvY3RsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVxcdTAwM2VnYWRnZXRgIHdhcyBhY2Nlc3NlZCBvdXRzaWRlIG9mIHRoZSBgZGV2LVxcdTAwM2Vsb2NrYCBzcGlubG9jaywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgZGV2LVxcdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIGlvY3RsIGhhbmRsZXIgb2YgZ2FkZ2V0ZnMgYnkgZmV0Y2hpbmcgdGhlIGdhZGdldCBwb2ludGVyIHVuZGVyIHRoZSBkZXZpY2UgbG9jayBhbmQgY2hlY2tpbmcgaXQgZm9yIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDc6NTQuNjQ3MzkyMjc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjUyMzQ4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZDc5MTIxOGViYzY4ODM3MDkyZjg4NTdjNjE1NTczMjZhYjk0M2FlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDExOjQ3OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xcbmluZGV4IGQ4N2E4YWI1MTUxMDcuLmU5ZjdkN2MxYTZhM2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXFxuQEAgLTEyNTEsMTQgKzEyNTEsMTUgQEAgZXAwX3BvbGwgKHN0cnVjdCBmaWxlICpmZCwgcG9sbF90YWJsZSAqd2FpdClcXG4gc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZfZGF0YVxcdFxcdCpkZXYgPSBmZC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbi1cXHRzdHJ1Y3QgdXNiX2dhZGdldFxcdCpnYWRnZXQgPSBkZXYtXFx1MDAzZWdhZGdldDtcXG4rXFx0c3RydWN0IHVzYl9nYWRnZXRcXHQqZ2FkZ2V0O1xcbiBcXHRsb25nIHJldCA9IC1FTk9UVFk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRnYWRnZXQgPSBkZXYtXFx1MDAzZWdhZGdldDtcXG4gXFx0aWYgKGRldi1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX09QRU5FRCB8fFxcbiBcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7XFxuIFxcdFxcdC8qIE5vdCBib3VuZCB0byBhIFVEQyAqL1xcbi1cXHR9IGVsc2UgaWYgKGdhZGdldC1cXHUwMDNlb3BzLVxcdTAwM2Vpb2N0bCkge1xcbitcXHR9IGVsc2UgaWYgKGdhZGdldCBcXHUwMDI2XFx1MDAyNiBnYWRnZXQtXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwpIHtcXG4gXFx0XFx0KytkZXYtXFx1MDAzZXVkY191c2FnZTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDc6NTUuNDEzMjYzMjU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODk4Mjk0Mjk0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0X2Rldl9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGluIHRoZSBpb2N0bCBoYW5kbGVyIG9mIGdhZGdldGZzIGJ5IGZldGNoaW5nIHRoZSBnYWRnZXQgcG9pbnRlciB1bmRlciB0aGUgZGV2aWNlIGxvY2sgYW5kIGNoZWNraW5nIGl0IGZvciBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkNzkxMjE4ZWJjNjg4MzcwOTJmODg1N2M2MTU1NzMyNmFiOTQzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMTo0Nzo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuaW5kZXggZDg3YThhYjUxNTEwNy4uZTlmN2Q3YzFhNmEzZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5AQCAtMTI1MSwxNCArMTI1MSwxNSBAQCBlcDBfcG9sbCAoc3RydWN0IGZpbGUgKmZkLCBwb2xsX3RhYmxlICp3YWl0KVxuIHN0YXRpYyBsb25nIGdhZGdldF9kZXZfaW9jdGwgKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiB7XG4gXHRzdHJ1Y3QgZGV2X2RhdGFcdFx0KmRldiA9IGZkLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdHN0cnVjdCB1c2JfZ2FkZ2V0XHQqZ2FkZ2V0ID0gZGV2LVx1MDAzZWdhZGdldDtcbitcdHN0cnVjdCB1c2JfZ2FkZ2V0XHQqZ2FkZ2V0O1xuIFx0bG9uZyByZXQgPSAtRU5PVFRZO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4rXHRnYWRnZXQgPSBkZXYtXHUwMDNlZ2FkZ2V0O1xuIFx0aWYgKGRldi1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8XG4gXHRcdFx0ZGV2LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7XG4gXHRcdC8qIE5vdCBib3VuZCB0byBhIFVEQyAqL1xuLVx0fSBlbHNlIGlmIChnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsKSB7XG4rXHR9IGVsc2UgaWYgKGdhZGdldCBcdTAwMjZcdTAwMjYgZ2FkZ2V0LVx1MDAzZW9wcy1cdTAwM2Vpb2N0bCkge1xuIFx0XHQrK2Rldi1cdTAwM2V1ZGNfdXNhZ2U7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0Nzo1NS40MTMyNjQ3MTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzkzMzQ5ODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGdhZGdldF9kZXZfaW9jdGxgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBoZXJlIOKAkyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhIHVzZS1hZnRlci1mcmVlLCBvciBwb3NzaWJseSBldmVuIGEgcmFjZSBjb25kaXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwdWxsaW5nIHRoZSBgZ2FkZ2V0YCBwb2ludGVyIGZyb20gdGhlIGBkZXZgIHN0cnVjdHVyZSAqYmVmb3JlKiBncmFiYmluZyB0aGUgbG9jaywgd2hpY2ggaXMgYSBiaWcgbm8tbm8sIGFuZCBjb3VsZCBhbGxvdyBmb3IgZWl0aGVyIG9mIHRoZSB0d28gc2NlbmFyaW9zIHRvIGhhcHBlbi5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBjbGV2ZXI6IGl0IG1vdmVzIHRoZSBhc3NpZ25tZW50IG9mIGBnYWRnZXRgIHRvIGFmdGVyIHRoZSBgc3Bpbl9sb2NrX2lycWAuIFRoaXMgZW5zdXJlcyB0aGUgYGdhZGdldGAgcG9pbnRlciBpcyB2YWxpZCBhbmQgY29uc2lzdGVudCB3aXRoaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZW4gdGhlIGNvbmRpdGlvbmFsIHRoYXQgY2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgYGdhZGdldGAgaXMgbW9kaWZpZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QgYGdhZGdldGAgaXMgbnVsbCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBhbnkgcGF0Y2ggbGlrZSB0aGlzIGlzOiBpcyB0aGlzIHJlYWNoYWJsZT8gQW5kIGFmdGVyIHRoaW5raW5nIGFib3V0IGl0IGZvciBhIHNlY29uZCwgSSByZWFsaXplIHllcywgdGhlIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eSBpcyBpbmRlZWQgcmVhY2hhYmxlIHRocm91Z2ggZW11bGF0aW9uLCBsaWtlIHdpdGggYSBkdW1teV9oY2Qgb3Igb3RoZXIgc29mdHdhcmUtYmFzZWQgc29sdXRpb25zLiBTbyB0aGlzIGlzIGFjdHVhbGx5IGEgc2lnbmlmaWNhbnQgZml4LCBhbmQgcG90ZW50aWFsbHkgcHJldmVudHMgYSBjcmFzaCBpbiBlbXVsYXRlZCBlbnZpcm9ubWVudHMuXG5cblRpbWUgdG8gZmluZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgYW5kIGFwcHJvdmVkIGZvciBhIHJlbGVhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0ODowMi4yMDY2MTcxMjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwOTc5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2FkZ2V0X2Rldl9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTEyMjA9ZXAwX3BvbGwgKHN0cnVjdCBmaWxlICpmZCwgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMjUwLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxMjUxOnN0YXRpYyBsb25nIGdhZGdldF9kZXZfaW9jdGwgKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTI1Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM4LVxcdC5wb2xsID1cXHRcXHRlcDBfcG9sbCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzOTpcXHQudW5sb2NrZWRfaW9jdGwgPSBnYWRnZXRfZGV2X2lvY3RsLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTQwLVxcdC5yZWxlYXNlID1cXHRkZXZfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MDIuMjU0NzE5Nzg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwMDE2OTU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGlub2RlLmNgIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYXMgdGhleSBzYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgdGhpcyBsZWdhY3kgaW5vZGUtYmFzZWQgVVNCIGdhZGdldCBkcml2ZXIuIFRoaXMgc3BlY2lmaWMgZmlsZSBhbmQgaXRzIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpa2VseSBjb250cm9sIGZlYXR1cmVzIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb25zIG92ZXIgdGhlIFVTQiBnYWRnZXQgaW50ZXJmYWNlLiBJIG5lZWQgdG8gc2VlIHdoaWNoIGRldmljZSB0eXBlcyBhcmUgc3VwcG9ydGVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBtYXNzIHN0b3JhZ2UsIG1heWJlIGEgbmV0d29yayBpbnRlcmZhY2UsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBJcyB0aGlzIG1vZHVsZSBldmVuIGVuYWJsZWQgYnkgZGVmYXVsdD8gQXJlIHRoZXJlIGNvbXBpbGUtdGltZSBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBsaWtlIGRlYnVnIGZsYWdzIG9yIHNwZWNpZmljIGZlYXR1cmUgdG9nZ2xlcz8gVGhlIEtjb25maWcgZmlsZSB3aWxsIHJldmVhbCB0aGUgbG9naWMgYmVoaW5kIGFsbCBvZiB0aGlzLCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcnVsZXMsIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSBhY3R1YWxseSBidWlsZGluZyBhbmQgd2hhdCB0aGUgb3B0aW9ucyBhcmUgdG8gdGFpbG9yIHRoaXMgZHJpdmVyIHRvIHNwZWNpZmljIHVzZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjA1Ljc1NDg5MTAyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk0MzIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbm9kZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGU9MTQ9Z19taWRpLXlcXHRcXHRcXHQ6PSBnbWlkaS5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZToxNTpnYWRnZXRmcy15XFx0XFx0XFx0Oj0gaW5vZGUub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGUtMTYtZ19tYXNzX3N0b3JhZ2UteVxcdFxcdDo9IG1hc3Nfc3RvcmFnZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjA1LjgwNDgzNzAwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjM3MzYxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IHJlc2lkZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGlzIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSB0cmFkaXRpb25hbCwgb3IgbGVnYWN5LCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbG9jYXRlZC4gTGV0J3MgZGl2ZSBpbiBhbmQgY29uZmlybSB0aGF0IGBnYWRnZXRmc2AgaXMgZGVmaW5lZCB0aGVyZTsgdGhhdCdsbCBnaXZlIG1lIGEgc29saWQgZ3JvdW5kaW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgZm9yIHRoZXNlIFVTQiBnYWRnZXQgZmVhdHVyZXMuIFRpbWUgdG8gdmVyaWZ5IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNDExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MDkuNTI4NTc1Mzk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTI3OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfR0FER0VURlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJHYWRnZXQgRmlsZXN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MDkuNTc0NTA3NzQ0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MTk4MTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGRlcGVuZGVuY2llczpcblxuKipBbmFseXppbmcgdGhlIGBVU0JfR0FER0VURlNgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBgVVNCX0dBREdFVEZTYC4gVGhhdCdzIGEga2V5IHBpZWNlIGluIHRoZSBwdXp6bGUgb2YgcHJvdmlkaW5nIFVTQiBkZXZpY2UgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlICpmb3VuZGF0aW9uYWwqIGJ1aWxkaW5nIGJsb2NrcyB0aGlzIHJlbGllcyB1cG9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSwgZGVidWcsIGFuZCBldmVuIG9wdGltaXplIGFueXRoaW5nIHVzaW5nIEdhZGdldEZTLlxuXG5JJ20gdGhpbmtpbmcsIG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIHdlJ2xsIG5lZWQgY29yZSBVU0IgaW5mcmFzdHJ1Y3R1cmUgLSB0aGUgVVNCIGNvcmUgaXRzZWxmLCBvZiBjb3Vyc2UuIFRoYXQncyBhIGdpdmVuLiBUaGVuIHRoZXJlJ3MgdGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZnJhbWV3b3JrLCBvciwgbW9yZSBzcGVjaWZpY2FsbHkgaW4gdGhpcyBjb250ZXh0LCB0aGUgKmRldmljZSogY29udHJvbGxlciBkcml2ZXIgZnJhbWV3b3JrLiBHYWRnZXRGUyBpcyBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlLCBzbyBpdCBuZWVkcyB0byBpbnRlcmZhY2Ugd2l0aCB3aGF0ZXZlciBoYXJkd2FyZSBzdXBwb3J0cyB0aGF0IHJvbGUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBtb3JlIGdlbmVyaWMgYWJzdHJhY3Rpb24/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQuXG5cbknigJltIGFsc28gYXNzdW1pbmcgd2XigJlsbCBlbmNvdW50ZXIgZGVwZW5kZW5jaWVzIG9uIHRoZSBmaWxlIHN5c3RlbSBsYXllcnMgc2luY2UgR2FkZ2V0RlMgbGV2ZXJhZ2VzIGZpbGUgc3lzdGVtIHNlbWFudGljcyBmb3IgaXRzIGRldmljZSBlbXVsYXRpb24uIFdoYXQgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQ/IEJ1ZmZlcnMgZm9yIHRyYW5zZmVycywgbGlrZWx5IGEgZmV3IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhhdC5cblxuSXQncyBhIHByb2Nlc3Mgb2YgZWxpbWluYXRpb247IGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZG8gc28uIExldCdzIHNlZSBob3cgZGVlcCB0aGVzZSBkZXBlbmRlbmNpZXMgZ28sIGFuZCBob3cgbXVjaCB0aGV5IGludGVybWluZ2xlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncywgYW5kIG1heWJlIGV2ZW4gc29tZSBhY3R1YWwgY29kZSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIHF1aWNrIGFzc2Vzc21lbnQgd2lsbCByZXZlYWwgd2hpY2ggcGllY2VzIGFyZSBzb2xpZCBhbmQgd2hpY2ggb25lcyBhcmUgcG90ZW50aWFsbHkgZ29pbmcgdG8gZ2l2ZSBtZSBoZWFkYWNoZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjEzLjU0NjQ5MTU1M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjY0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9HQURHRVRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTE5MD1jb25maWcgVVNCX0dfTkNNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMDY6Y29uZmlnIFVTQl9HQURHRVRGU1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDctXFx0dHJpc3RhdGUgXFxcIkdhZGdldCBGaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0ODoxMy41OTIyMjM3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE2NzYyNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJIHJlbWVtYmVyIHdlIHdlcmUgZGlzY3Vzc2luZyB0aGUgbGVnYWN5IFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3lgIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXRhaWxzIG9mIHRoYXQgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gYXJvdW5kIGxpbmUgMjA2IGlzIHdoZXJlIEkgcmVjYWxsIHNvbWV0aGluZyByZWxldmFudCBiZWluZyBkZWZpbmVkLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHNlY3Rpb24gd2Ugd2VyZSB3b3JraW5nIHdpdGggYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGluZmx1ZW5jZWQuIExldCdzIGdldCB0aGUgZmlsZSBvcGVuIGFuZCBnZXQgdG8gdGhhdCBsaW5lIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MTcuMTA4OTg4NjQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0ICBvZiBzZXZlcmFsIGV0aGVybmV0IGZyYW1lcyBpbnRvIG9uZSBVU0IgdHJhbnNmZXIgYW5kIGRpZmZlcmVudFxcbiAyMDE6XFx0XFx0ICBhbGlnbm1lbnQgcG9zc2liaWxpdGllcy5cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiAyMDQ6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ19uY21cXFwiLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgVVNCX0dBREdFVEZTXFxuIDIwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2FkZ2V0IEZpbGVzeXN0ZW1cXFwiXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxcbiAyMTA6XFx0XFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcXG4gMjExOlxcdFxcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxcbiAyMTI6XFx0XFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG4gMjEzOlxcdFxcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIFNheSBcXFwieVxcXCIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFxcXCJtXFxcIiB0byBidWlsZCBhXFxuIDIxNjpcXHRcXHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFxcXCJnYWRnZXRmc1xcXCIuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xcbiAyMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkZ1bmN0aW9uIEZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjE3LjEwOTA1NDY1M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgwNzY2NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGl0J3Mgc2V0IHRvIGBVU0JfR0FER0VURlNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBVU0JfR0FER0VURlNg4oCmIHRoYXQncyBmb3IgdXNlcnNwYWNlIGdhZGdldCBmdW5jdGlvbmFsaXR5LCBpc24ndCBpdD9cIi4gVGhlbiwgYSBxdWVzdGlvbiBwb3BzIGludG8gbXkgbWluZDogaXMgYFVTQl9HQURHRVRGU2AgY29udGluZ2VudCBvbiBgVVNCX0dBREdFVGA/IEl0IHNlZW1zIGxvZ2ljYWxseSBzb3VuZDsgSSBtZWFuLCB5b3UnZCB0aGluayB0aGUgdXNlciBzcGFjZSB0aGluZyB3b3VsZCBkZXBlbmQgb24gdGhlIGJhc2UgZ2FkZ2V0IGluZnJhc3RydWN0dXJlLiBCZXR0ZXIgdG8gYmUgc3VyZS4gVGltZSB0byBnbyB0byB0aGUgc291cmNlLiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYCBmaWxlLiBJJ2xsIHNjYW4gdGhlIHRvcCwgcXVpY2tseSwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgdGhhdCBqdW1wIG91dCBhdCBtZS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgdG8gbWluaW1pemUgZGVidWdnaW5nIGxhdGVyLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIHVuZGVybHlpbmcgZmVhdHVyZXMgb2YgdGhlIGtlcm5lbCBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MjAuODg5ODIzMzM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIEdhZGdldCBzdXBwb3J0IG9uIGEgc3lzdGVtIGludm9sdmVzXFxuICAgNDpcXHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXFxuICAgNTpcXHQjICAgIChiKSB0aGUgZ2FkZ2V0IGRyaXZlciB1c2luZyBpdC5cXG4gICA2OlxcdCNcXG4gICA3OlxcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxcbiAgIDg6XFx0I1xcbiAgIDk6XFx0IyAgLSBIb3N0IHN5c3RlbXMgKGxpa2UgUENzKSBuZWVkIENPTkZJR19VU0IgKHdpdGggXFxcIkFcXFwiIGphY2tzKS5cXG4gIDEwOlxcdCMgIC0gUGVyaXBoZXJhbHMgKGxpa2UgUERBcykgbmVlZCBDT05GSUdfVVNCX0dBREdFVCAod2l0aCBcXFwiQlxcXCIgamFja3MpLlxcbiAgMTE6XFx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxcbiAgMTI6XFx0I1xcbiAgMTM6XFx0IyBXaXRoIGhlbHAgZnJvbSBhIHNwZWNpYWwgdHJhbnNjZWl2ZXIgYW5kIGEgXFxcIk1pbmktQUJcXFwiIGphY2ssIHN5c3RlbXMgd2l0aFxcbiAgMTQ6XFx0IyBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXIgY2FuIGFsc28gc3VwcG9ydCBcXFwiVVNCIE9uLXRoZS1Hb1xcXCIgKENPTkZJR19VU0JfT1RHKS5cXG4gIDE1OlxcdCNcXG4gIDE2OlxcdCMgQSBMaW51eCBcXFwiR2FkZ2V0IERyaXZlclxcXCIgdGFsa3MgdG8gdGhlIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXJcXG4gIDE3OlxcdCMgZHJpdmVyIHRocm91Z2ggdGhlIGFic3RyYWN0IFxcXCJnYWRnZXRcXFwiIEFQSS4gIFNvbWUgb3RoZXIgb3BlcmF0aW5nXFxuICAxODpcXHQjIHN5c3RlbXMgY2FsbCB0aGVzZSBcXFwiY2xpZW50XFxcIiBkcml2ZXJzLCBvZiB3aGljaCBcXFwiY2xhc3MgZHJpdmVyc1xcXCJcXG4gIDE5OlxcdCMgYXJlIGEgc3Vic2V0IChpbXBsZW1lbnRpbmcgYSBVU0IgZGV2aWNlIGNsYXNzIHNwZWNpZmljYXRpb24pLlxcbiAgMjA6XFx0IyBBIGdhZGdldCBkcml2ZXIgaW1wbGVtZW50cyBvbmUgb3IgbW9yZSBVU0IgZnVuY3Rpb25zIHVzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjIwLjg4OTg5MzQ1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk1Mzc1OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gSSB3YW50IHRvIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBzZWxlY3RhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBnYWRnZXQgZHJpdmVycyBhcmUgZXhwb3NlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGJ1aWxkIG9wdGlvbnMgaGVyZSwgdGhlIGtub2JzIHRoYXQgSSBjYW4gdHdlYWsgdG8gdGFpbG9yIHRoZSBVU0IgZ2FkZ2V0IGNhcGFiaWxpdGllcyBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSBvciBoYXJkd2FyZSBwbGF0Zm9ybS4gVGhpcyBmaWxlIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJlYWR0aCBvZiB0aGUgZ2FkZ2V0IHN1YnN5c3RlbSBhbmQgaG93IGRpZmZlcmVudCBnYWRnZXQgY29uZmlndXJhdGlvbnMgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3NzaWJpbGl0aWVzIGFuZCBjb25zdHJhaW50cyB3aGVuIGJ1aWxkaW5nIGEgY3VzdG9tIFVTQiBHYWRnZXQgaW1wbGVtZW50YXRpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHN1cHBvcnQgZm9yIG1hc3Mgc3RvcmFnZSwgc2VyaWFsIHBvcnRzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBwZXJoYXBzIGV2ZW4gY3VzdG9tIGZ1bmN0aW9ucy4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY3J1Y2lhbCBiZWZvcmUgbW92aW5nIG9uIHRvIGluZGl2aWR1YWwgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjI0LjE4NTI3MTU2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NTQ1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcXFwiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ5NT1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfVENNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MDgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NTA5OnNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTUxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MjQuMjM2MjMxNDAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzODA3MDE1OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgdGhlIHJlbGV2YW50IHN0dWZmIGZvciB0aGlzIGxpdmVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9gIGRpcmVjdG9yeS4gUmlnaHQsIGFuZCBJIHJlbWVtYmVyIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNvbWV0aGluZyBhcm91bmQgbGluZSA1MDkuIEknbGwgb3BlbiB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBpc3N1ZSBJJ20gd29ya2luZyBvbi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzIyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6NDguMDQzMjQ5NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDkwOlxcdFxcdCAgdGhlIGRldmljZSBmaWxlIHRvIGdldCBvciBzZXQgcHJpbnRlciBzdGF0dXMuXFxuIDQ5MTpcXHRcXG4gNDkyOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfcHJpbnRlci5yc3RcXG4gNDkzOlxcdFxcdCAgd2hpY2ggaW5jbHVkZXMgc2FtcGxlIGNvZGUgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlIGZpbGUuXFxuIDQ5NDpcXHRcXG4gNDk1OlxcdGNvbmZpZyBVU0JfQ09ORklHRlNfRl9UQ01cXG4gNDk2OlxcdFxcdGJvb2wgXFxcIlVTQiBHYWRnZXQgVGFyZ2V0IEZhYnJpY1xcXCJcXG4gNDk3OlxcdFxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkVcXG4gNDk4OlxcdFxcdGRlcGVuZHMgb24gVVNCX0NPTkZJR0ZTXFxuIDQ5OTpcXHRcXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxcbiA1MDA6XFx0XFx0c2VsZWN0IFVTQl9GX1RDTVxcbiA1MDE6XFx0XFx0aGVscFxcbiA1MDI6XFx0XFx0ICBUaGlzIGZhYnJpYyBpcyBhIFVTQiBnYWRnZXQgY29tcG9uZW50LiBUd28gVVNCIHByb3RvY29scyBhcmVcXG4gNTAzOlxcdFxcdCAgc3VwcG9ydGVkIHRoYXQgaXMgQkJCIG9yIEJPVCAoQnVsayBPbmx5IFRyYW5zcG9ydCkgYW5kIFVBU1xcbiA1MDQ6XFx0XFx0ICAoVVNCIEF0dGFjaGVkIFNDU0kpLiBCT1QgaXMgYWR2ZXJ0aXNlZCBvbiBhbHRlcm5hdGl2ZVxcbiA1MDU6XFx0XFx0ICBpbnRlcmZhY2UgMCAocHJpbWFyeSkgYW5kIFVBUyBpcyBvbiBhbHRlcm5hdGl2ZSBpbnRlcmZhY2UgMS5cXG4gNTA2OlxcdFxcdCAgQm90aCBwcm90b2NvbHMgY2FuIHdvcmsgb24gVVNCMi4wIGFuZCBVU0IzLjAuXFxuIDUwNzpcXHRcXHQgIFVBUyB1dGlsaXplcyB0aGUgVVNCIDMuMCBmZWF0dXJlIGNhbGxlZCBzdHJlYW1zIHN1cHBvcnQuXFxuIDUwODpcXHRcXG4gNTA5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXFxcIlxcbiA1MTA6XFx0XFxuIDUxMTpcXHRlbmRpZiAjIFVTQl9HQURHRVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6NDguMDQzMzMyODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNTgwOTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGBVU0JfR0FER0VUYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIGJpZyBwYXJlbnQsIHRoZSB0aGluZyB0aGF0IGVuY29tcGFzc2VzIHRoZSB3aG9sZSBVU0IgZ2FkZ2V0IHN5c3RlbS4gVGhlbiwgYFVTQl9HQURHRVRGU2Agc3BlY2lmaWNhbGx5IGVuYWJsZXMgdGhlIGRyaXZlciBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IGJyb2FkZXIgZnJhbWV3b3JrLiBOb3csIGhlcmUncyBhIGN1cnZlYmFsbC4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgVVNCX0RVTU1ZX0hDRGAgaXMgYWxzbyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGNydWNpYWwgZm9yIGVtdWxhdGluZyB0aGUgYmVoYXZpb3Igb2YgYSBVU0IgZ2FkZ2V0LiBIb3dldmVyLCBpdCdzIGBVU0JfR0FER0VUYCBhbmQgYFVTQl9HQURHRVRGU2AgdGhhdCBhcmUgdGhlIHByaW1hcnkgZW5hYmxlcnMgb2YgdGhlIGNvcmUgY29kZSwgcmlnaHQ/XG5cbkFscmlnaHQsIG5leHQgc3RlcDogSSB3YW50IHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uIHJlZ2FyZGluZyB0aGUgcmVhY2hhYmlsaXR5IG9mIGBnYWRnZXRfZGV2X2lvY3RsYC4gVGltZSB0byBzZWUgaWYgdGhlIGtlcm5lbCBhY3R1YWxseSBjYWxscyB0aGlzIGZ1bmN0aW9uLiBBaGEhIEkndmUgY29uZmlybWVkIHRoYXQgYGdhZGdldF9kZXZfaW9jdGxgIGlzIGluZGVlZCB0aGUgYHVubG9ja2VkX2lvY3RsYCBmdW5jdGlvbiB0aWVkIHRvIGBlcDBfb3BlcmF0aW9uc2AuIEFuZCBub3cgdGhhdCBJIGhhdmUgdGhlIGxpbmssIEkgcmVtZW1iZXIgdGhhdCBgZXAwX29wZXJhdGlvbnNgIGlzIGRlZmluZWQgd2l0aGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBlbmRwb2ludCB6ZXJvIG9wZXJhdGlvbnMgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjUyLjk1OTE0NDU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg2ODc1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXAwX29wZXJhdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTE1PWdhZGdldF9kZXZfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXAwX29wZXJhdGlvbnMgPSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzMtXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjAxNj1nYWRnZXRmc19maWxsX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA1OS1cXHRkZXYtXFx1MDAzZXNiID0gc2I7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwNjA6XFx0cmMgPSBnYWRnZXRmc19jcmVhdGVfZmlsZShzYiwgQ0hJUCwgZGV2LCBcXHUwMDI2ZXAwX29wZXJhdGlvbnMpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDYxLVxcdGlmIChyYykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0ODo1My4xNjc4MzY2ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzODAzMjg3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGdhZGdldGZzYCBpb2N0bCBIYW5kbGVyKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IHRoZSBgaW9jdGxgIGhhbmRsZXIsIHNwZWNpZmljYWxseSB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB0aGUgYENISVBgIGZpbGUgd2l0aGluIHRoZSBgZ2FkZ2V0ZnNgIGNvbnRleHQuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGlzIGxpa2VseSBhYmxlIHRvIHJlYWNoIHRoaXMgcG9pbnQgaXMgY3J1Y2lhbC4gSXQgbWVhbnMgd2UndmUgZ290IGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZyBhbmQgZXhwbG9pdGluZyB2dWxuZXJhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGBnYWRnZXRfZGV2X2lvY3RsYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBkaXNzZWN0IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCB0aGUgb3BlcmF0aW9ucyBpdCBwZXJmb3JtcyBvbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAob3IgZW11bGF0ZWQgaGFyZHdhcmUgaW4gdGhpcyBjYXNlKSwgYW5kIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yay4gV2UncmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MsIHJhY2UgY29uZGl0aW9ucywgYnVmZmVyIG92ZXJmbG93cywgdXNlLWFmdGVyLWZyZWVzLCBvciBhbnkgb3RoZXIgY2xhc3NpYyB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMgLSBkZWVwIGRpdmluZyBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTcwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MDYuNTQ4MTY3NjA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI1MDpcXHRcXG4xMjUxOlxcdHN0YXRpYyBsb25nIGdhZGdldF9kZXZfaW9jdGwgKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG4xMjUyOlxcdHtcXG4xMjUzOlxcdFxcdHN0cnVjdCBkZXZfZGF0YVxcdFxcdCpkZXYgPSBmZC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbjEyNTQ6XFx0XFx0c3RydWN0IHVzYl9nYWRnZXRcXHQqZ2FkZ2V0O1xcbjEyNTU6XFx0XFx0bG9uZyByZXQgPSAtRU5PVFRZO1xcbjEyNTY6XFx0XFxuMTI1NzpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbjEyNTg6XFx0XFx0Z2FkZ2V0ID0gZGV2LVxcdTAwM2VnYWRnZXQ7XFxuMTI1OTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8XFxuMTI2MDpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7XFxuMTI2MTpcXHRcXHRcXHQvKiBOb3QgYm91bmQgdG8gYSBVREMgKi9cXG4xMjYyOlxcdFxcdH0gZWxzZSBpZiAoZ2FkZ2V0IFxcdTAwMjZcXHUwMDI2IGdhZGdldC1cXHUwMDNlb3BzLVxcdTAwM2Vpb2N0bCkge1xcbjEyNjM6XFx0XFx0XFx0KytkZXYtXFx1MDAzZXVkY191c2FnZTtcXG4xMjY0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0XFx0cmV0ID0gZ2FkZ2V0LVxcdTAwM2VvcHMtXFx1MDAzZWlvY3RsIChnYWRnZXQsIGNvZGUsIHZhbHVlKTtcXG4xMjY3OlxcdFxcbjEyNjg6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4xMjY5OlxcdFxcdFxcdC0tZGV2LVxcdTAwM2V1ZGNfdXNhZ2U7XFxuMTI3MDpcXHRcXHR9XFxuMTI3MTpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTI3MjpcXHRcXG4xMjczOlxcdFxcdHJldHVybiByZXQ7XFxuMTI3NDpcXHR9XFxuMTI3NTpcXHRcXG4xMjc2OlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuMTI3NzpcXHRcXG4xMjc4OlxcdC8qIFRoZSBpbi1rZXJuZWwgZ2FkZ2V0IGRyaXZlciBoYW5kbGVzIG1vc3QgZXAwIGlzc3VlcywgaW4gcGFydGljdWxhclxcbjEyNzk6XFx0ICogZW51bWVyYXRpbmcgdGhlIHNpbmdsZSBjb25maWd1cmF0aW9uIChhcyBwcm92aWRlZCBmcm9tIHVzZXIgc3BhY2UpLlxcbjEyODA6XFx0ICpcXG4xMjgxOlxcdCAqIFVucmVjb2duaXplZCBlcDAgcmVxdWVzdHMgbWF5IGJlIGhhbmRsZWQgaW4gdXNlciBzcGFjZS5cXG4xMjgyOlxcdCAqL1xcbjEyODM6XFx0XFxuMTI4NDpcXHRzdGF0aWMgdm9pZCBtYWtlX3F1YWxpZmllciAoc3RydWN0IGRldl9kYXRhICpkZXYpXFxuMTI4NTpcXHR7XFxuMTI4NjpcXHRcXHRzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yXFx0XFx0cXVhbDtcXG4xMjg3OlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3JcXHRcXHQqZGVzYztcXG4xMjg4OlxcdFxcbjEyODk6XFx0XFx0cXVhbC5iTGVuZ3RoID0gc2l6ZW9mIHF1YWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjA2LjU0ODI5NTMyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDU1Nzc2MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2FkZ2V0RlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZml4aW5nIHNvbWV0aGluZyBpbXBvcnRhbnQg4oCTIGEgZnVuY3Rpb25hbCBidWcsIHNwZWNpZmljYWxseSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgZ2FkZ2V0YCB3YXMgYmVpbmcgcmVhZCBiZWZvcmUgdGhlIGxvY2sgd2FzIGFjcXVpcmVkLCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQsIHdoaWNoIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHRyb3VibGUuXG5cbk15IHJlYXNvbmluZyBmb3IgdGhlIGZ1enppbmcgYW5hbHlzaXMgaXMgdGhhdCB0aGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgaW9jdGwgaGFuZGxlciBmb3IgdGhlIGdhZGdldGZzIGRldmljZSwgYGdhZGdldF9kZXZfaW9jdGxgLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoZSBjcml0aWNhbCBpc3N1ZSBvZiBmZXRjaGluZyB0aGUgYGdhZGdldGAgcG9pbnRlciBzYWZlbHksIHVuZGVyIHRoZSBkZXZpY2UgbG9jaywgYW5kIGFsc28gaW5jbHVkZXMgYSBgTlVMTGAgY2hlY2suIFNvLCB0aGlzIGlzIGEgZGVmaW5pdGUgd2luIHRvIGFkZCB0byB0aGUgZnV6emluZyBjYW1wYWlnbi5cblxuRm9yIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24sIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCwgb2J2aW91c2x5LCBhbmQgdGhlIGBSZWFzb25pbmdgIGlzIGRldGFpbGVkIGVub3VnaCB0byBleHBsYWluIHdoYXQgaXMgYmVpbmcgYWRkcmVzc2VkLiBJIGFtIHNldHRpbmcgdGhlIGBGb2N1c1N5bWJvbHNgIHRvIGBnYWRnZXRfZGV2X2lvY3RsYC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgVVNCX0dBREdFVEZTYCBpcyB0aGUga2V5IG9uZSwgc2luY2UgaXQgZW5hYmxlcyBgaW5vZGUub2AsIHdoZXJlIGBnYWRnZXRfZGV2X2lvY3RsYCBsaXZlcy4gYFVTQl9HQURHRVRgIGlzIHRoZSBwYXJlbnQgY29uZmlnLCBidXQgdGhlIGRvY3VtZW50YXRpb24gc2FpZCB0byBvbmx5IGVuYWJsZSB0aGUgbmVlZGVkIGNvbmZpZ3MsIGFuZCBgVVNCX0dBREdFVEZTYCBpcyBlbm91Z2guXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgd2hldGhlciBgVVNCX0RVTU1ZX0hDRGAgaXMgbmVlZGVkLiBFdmVuIHRob3VnaCBpdCdzIHR5cGljYWxseSBpbmNsdWRlZCBpbiBzeXprYWxsZXIgY29uZmlncywgSSB3YW50IHRvIGJlIHByZWNpc2UuIENoZWNraW5nIGRlcGVuZGVuY2llcyBpcyBrZXkgaGVyZS4gVGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHRvIHJldmlldyBgZGVwZW5kcyBvbmAgbGluZXMgdG8gY2F0Y2ggYWxsIHRoZSBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuIGBVU0JfR0FER0VURlNgIGRlcGVuZHMgb24gYFVTQl9HQURHRVRgLiBTbyBsZXQncyBjaGVjayBgVVNCX0dBREdFVGAncyBkZXBlbmRlbmNpZXMgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgzNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjE0LjAwNDA3Mzc0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4Njk4MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfR0FER0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE3Om1lbnVjb25maWcgVVNCX0dBREdFVFxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJVU0IgR2FkZ2V0IFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00Nz1pZiBVU0JfR0FER0VUXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDk6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MC1cXHRib29sIFxcXCJEZWJ1Z2dpbmcgbWVzc2FnZXMgKERFVkVMT1BNRU5UKVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTYyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjYzOmNvbmZpZyBVU0JfR0FER0VUX1ZFUkJPU0VcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy02NC1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBNZXNzYWdlcyAoREVWRUxPUE1FTlQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNzYtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6Nzc6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRklMRVNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgKERFVkVMT1BNRU5UKVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg3LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjg4OmNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZTXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctODktXFx0Ym9vbCBcXFwiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIGluIGRlYnVnZnMgKERFVkVMT1BNRU5UKVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTk4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjk5OmNvbmZpZyBVU0JfR0FER0VUX1ZCVVNfRFJBV1xcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEwMC1cXHRpbnQgXFxcIk1heGltdW0gVkJVUyBQb3dlciB1c2FnZSAoMi01MDAgbUEpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTE1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjExNjpjb25maWcgVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTE3LVxcdGludCBcXFwiTnVtYmVyIG9mIHN0b3JhZ2UgcGlwZWxpbmUgYnVmZmVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MTQuMzIyNzc2NjY4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDkzNTUyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgMTcuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgVVNCIGdhZGdldCBzdWJzeXN0ZW0uIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBmZWF0dXJlcyB0aGF0IGNhbiBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIGJ1dCBhbHNvIG9wdGlvbnMgZm9yIHNwZWNpZmljIFVTQiBnYWRnZXQgY29udHJvbGxlcnMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZhcmlvdXMgY2FwYWJpbGl0aWVzLiBJIGhvcGUgdGhpcyBwcm92aWRlcyB0aGUgc3RhcnRpbmcgcG9pbnQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MTcuODcyMTM0NTE4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdCMgIC0gUGVyaXBoZXJhbHMgKGxpa2UgUERBcykgbmVlZCBDT05GSUdfVVNCX0dBREdFVCAod2l0aCBcXFwiQlxcXCIgamFja3MpLlxcbiAgMTE6XFx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxcbiAgMTI6XFx0I1xcbiAgMTM6XFx0IyBXaXRoIGhlbHAgZnJvbSBhIHNwZWNpYWwgdHJhbnNjZWl2ZXIgYW5kIGEgXFxcIk1pbmktQUJcXFwiIGphY2ssIHN5c3RlbXMgd2l0aFxcbiAgMTQ6XFx0IyBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXIgY2FuIGFsc28gc3VwcG9ydCBcXFwiVVNCIE9uLXRoZS1Hb1xcXCIgKENPTkZJR19VU0JfT1RHKS5cXG4gIDE1OlxcdCNcXG4gIDE2OlxcdFxcbiAgMTc6XFx0bWVudWNvbmZpZyBVU0JfR0FER0VUXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEdhZGdldCBTdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0c2VsZWN0IFVTQl9DT01NT05cXG4gIDIwOlxcdFxcdHNlbGVjdCBOTFNcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXFxuICAyMzpcXHRcXHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cXG4gIDI0OlxcdFxcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcXG4gIDI1OlxcdFxcdCAgIHlvdSBjYW4ndCBjb25uZWN0IGEgXFxcInRvLXRoZS1ob3N0XFxcIiBjb25uZWN0b3IgdG8gYSBwZXJpcGhlcmFsLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcXG4gIDI4OlxcdFxcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcXG4gIDI5OlxcdFxcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OToxNy44NzIyMjg1NjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxOTEwNDk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgYmFzZWQgb24gdGhlIHdheSB0aGlzIGlzIHN0cnVjdHVyZWQsIGl0IGFwcGVhcnMgdGhhdCBgVVNCX0dBREdFVGAgc2l0cyBhdCB0aGUgdG9wIGxldmVsIGluIHRoZSBtZW51Y29uZmlnLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCBtZWFucyB0aGF0IGBVU0JfR0FER0VUYCBhbmQgYFVTQl9HQURHRVRGU2AgYXJlIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UncmUgZGVhbGluZyB3aXRoLiBOb3csIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfR0FER0VURlNgLiBJIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb3Igb3Zlcmxvb2tlZCBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEl0J3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTcwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OToyMS4zOTEzMzU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0ICBvZiBzZXZlcmFsIGV0aGVybmV0IGZyYW1lcyBpbnRvIG9uZSBVU0IgdHJhbnNmZXIgYW5kIGRpZmZlcmVudFxcbiAyMDE6XFx0XFx0ICBhbGlnbm1lbnQgcG9zc2liaWxpdGllcy5cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiAyMDQ6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ19uY21cXFwiLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgVVNCX0dBREdFVEZTXFxuIDIwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2FkZ2V0IEZpbGVzeXN0ZW1cXFwiXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxcbiAyMTA6XFx0XFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcXG4gMjExOlxcdFxcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxcbiAyMTI6XFx0XFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG4gMjEzOlxcdFxcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIFNheSBcXFwieVxcXCIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFxcXCJtXFxcIiB0byBidWlsZCBhXFxuIDIxNjpcXHRcXHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFxcXCJnYWRnZXRmc1xcXCIuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xcbiAyMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkZ1bmN0aW9uIEZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjIxLjM5MTQxOTczWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Nzc1NDcxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRWxpbWluYXRpbmcgRXh0cmFuZW91cyBDb21wbGV4aXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwcm9ibGVtLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEknbSB6ZXJvaW5nIGluIG9uIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIGRlcGVuZGVuY2llcy4gIE15IGJyYWluIGltbWVkaWF0ZWx5IHNjYW5zIGZvciBhbnl0aGluZyBJIG1pZ2h0IGJlIHJlbHlpbmcgb24gb3V0c2lkZSBvZiB0aGUgaW1tZWRpYXRlIHNjb3BlLCBhbnkgbGlicmFyaWVzIG9yIGV4dGVybmFsIEFQSXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgZnJhZ2lsaXR5IG9yIHVubmVjZXNzYXJ5IG92ZXJoZWFkLiBUaGFua2Z1bGx5LCBpdCdzIGNsZWFyIHRoZXJlIGFyZSAqbm8qIG90aGVyIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBmYW50YXN0aWM7IGl0IHNpbXBsaWZpZXMgdGhlIGFuYWx5c2lzIGNvbnNpZGVyYWJseS4gVGhlIGNsZWFuZXIgdGhlIHNvbHV0aW9uLCB0aGUgYmV0dGVyLlxuXG5Ob3csIHdpdGggZGVwZW5kZW5jaWVzIG91dCBvZiB0aGUgd2F5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBUaGUgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8sIGNhbGwgdGhhdCBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIG9yIHdoYXRldmVyIGl0J3MgY2FsbGVkLiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyByZWxldmFudC4gVGhhdCdzIHdoYXQgSSBhbSBmb2N1c2VkIG9uIGF0IHRoaXMgbW9tZW50LlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTMwLCJPdXRwdXRUb2tlbnMiOjEwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MjUuMTY4OTY5MDE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3MjE0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9HQURHRVRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhZGdldF9kZXZfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgaW9jdGwgaGFuZGxlciBvZiBnYWRnZXRmcyBieSBmZXRjaGluZyB0aGUgZ2FkZ2V0IHBvaW50ZXIgdW5kZXIgdGhlIGRldmljZSBsb2NrIGFuZCBjaGVja2luZyBpdCBmb3IgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9HQURHRVRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhZGdldF9kZXZfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgaW9jdGwgaGFuZGxlciBvZiBnYWRnZXRmcyBieSBmZXRjaGluZyB0aGUgZ2FkZ2V0IHBvaW50ZXIgdW5kZXIgdGhlIGRldmljZSBsb2NrIGFuZCBjaGVja2luZyBpdCBmb3IgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OToyNS4yNDI2OTY0OTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzYxODgzNzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MjUuMjQzMTI2MzU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2MzYxNDQ5NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVxcdTAwM2VnYWRnZXRgIHdhcyBhY2Nlc3NlZCBvdXRzaWRlIG9mIHRoZSBgZGV2LVxcdTAwM2Vsb2NrYCBzcGlubG9jaywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgZGV2LVxcdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmQ3OTEyMThlYmM2ODgzNzA5MmY4ODU3YzYxNTU3MzI2YWI5NDNhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDExOjQ3OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5pbmRleCBkODdhOGFiNTE1MTA3Li5lOWY3ZDdjMWE2YTNkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG4rKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbkBAIC0xMjUxLDE0ICsxMjUxLDE1IEBAIGVwMF9wb2xsIChzdHJ1Y3QgZmlsZSAqZmQsIHBvbGxfdGFibGUgKndhaXQpXG4gc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIHtcbiBcdHN0cnVjdCBkZXZfZGF0YVx0XHQqZGV2ID0gZmQtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0c3RydWN0IHVzYl9nYWRnZXRcdCpnYWRnZXQgPSBkZXYtXHUwMDNlZ2FkZ2V0O1xuK1x0c3RydWN0IHVzYl9nYWRnZXRcdCpnYWRnZXQ7XG4gXHRsb25nIHJldCA9IC1FTk9UVFk7XG4gXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbitcdGdhZGdldCA9IGRldi1cdTAwM2VnYWRnZXQ7XG4gXHRpZiAoZGV2LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9PUEVORUQgfHxcbiBcdFx0XHRkZXYtXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX1VOQk9VTkQpIHtcbiBcdFx0LyogTm90IGJvdW5kIHRvIGEgVURDICovXG4tXHR9IGVsc2UgaWYgKGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpIHtcbitcdH0gZWxzZSBpZiAoZ2FkZ2V0IFx1MDAyNlx1MDAyNiBnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsKSB7XG4gXHRcdCsrZGV2LVx1MDAzZXVkY191c2FnZTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjI1LjI0MzEyNzQ0OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDE2OTg5OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGdhZGdldF9kZXZfaW9jdGxgIGluIGBpbm9kZS5jYCB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgbGVnYWN5IGRyaXZlci4gSXQncyBtYWtpbmcgYSBzZWVtaW5nbHkgc21hbGwgYnV0IHBvdGVudGlhbGx5IGNydWNpYWwgY2hhbmdlLiBGaXJzdCwgdGhleSd2ZSBtb3ZlZCB0aGUgYXNzaWdubWVudCBvZiBgZ2FkZ2V0ID0gZGV2LVx1MDAzZWdhZGdldDtgIGluc2lkZSBhIGBzcGluX2xvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtgIGJsb2NrLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlOyB0aGV5J3JlIHRyeWluZyB0byBwcm90ZWN0IGFjY2VzcyB0byBgZGV2LVx1MDAzZWdhZGdldGAuIFRoZSBsb2NrIHN1Z2dlc3RzIHRoYXQgYGdhZGdldGAgbWlnaHQgYmUgbW9kaWZpZWQgZWxzZXdoZXJlIGNvbmN1cnJlbnRseSwgYW5kIHRoaXMgY2hhbmdlIGFpbXMgdG8gZW5zdXJlIHRoYXQgYWNjZXNzIGlzIHNlcmlhbGl6ZWQuXG5cblNlY29uZGx5LCB0aGV5J3ZlIGFkZGVkIGEgTlVMTCBjaGVjazogYGdhZGdldCBcdTAwMjZcdTAwMjYgZ2FkZ2V0LVx1MDAzZW9wcy1cdTAwM2Vpb2N0bGAgYmVmb3JlIHRoZSBhY3R1YWwgYGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGxgIGNhbGwuIFRoYXQgc2NyZWFtcyBcIm51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcm90ZWN0aW9uXCIgdG8gbWUuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGV5J3ZlIGZvdW5kIGEgc2NlbmFyaW8gd2hlcmUgYGdhZGdldGAgY291bGQgYmUgTlVMTCwgb3IgcGVyaGFwcyBldmVuIHdvcnNlLCB0aGF0IGBnYWRnZXQtXHUwMDNlb3BzYCBjb3VsZCBiZSB1bmluaXRpYWxpemVkIG9yIE5VTEwuIE1heWJlIHRoZSBnYWRnZXQgZ2V0cyB1bmJvdW5kL2Rpc2Nvbm5lY3RlZCBpbiBhIHJhY2UgY29uZGl0aW9uLiBUaGlzIGxvb2tzIGxpa2UgZWl0aGVyIGEgZml4IGZvciBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBvciBzb21lIGtpbmQgb2YgcmFjZSBjb25kaXRpb24gd2hlcmUgYGRldi1cdTAwM2VnYWRnZXRgIGlzIGFjY2Vzc2VkIGJlZm9yZSBpdCdzIGZ1bGx5IGluaXRpYWxpemVkIG9yIHdoaWxlIGl0J3MgYmVpbmcgZGVhbGxvY2F0ZWQgb3IgbW9kaWZpZWQgaW4gYW5vdGhlciB0aHJlYWQuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgbG9jayBhbmQgdGhlIE5VTEwgY2hlY2sgc3RyZW5ndGhlbnMgdGhhdCBhc3N1bXB0aW9uLlxuXG5JJ2QgYmV0dGVyIGdvIGRlZXBlciBhbmQgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZ2FkZ2V0X2Rldl9pb2N0bGAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IGFuZCB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZSB2dWxuZXJhYmlsaXR5LiBXZSBuZWVkIHRvIHRyYWNlIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OTozMy4yNjAxMjA2MjJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQ1OlxcdFxcdH1cXG4xMjQ2OlxcdG91dDpcXG4xMjQ3OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4xMjQ4OlxcdFxcdHJldHVybiBtYXNrO1xcbjEyNDk6XFx0fVxcbjEyNTA6XFx0XFxuMTI1MTpcXHRzdGF0aWMgbG9uZyBnYWRnZXRfZGV2X2lvY3RsIChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuMTI1MjpcXHR7XFxuMTI1MzpcXHRcXHRzdHJ1Y3QgZGV2X2RhdGFcXHRcXHQqZGV2ID0gZmQtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xMjU0OlxcdFxcdHN0cnVjdCB1c2JfZ2FkZ2V0XFx0KmdhZGdldDtcXG4xMjU1OlxcdFxcdGxvbmcgcmV0ID0gLUVOT1RUWTtcXG4xMjU2OlxcdFxcbjEyNTc6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4xMjU4OlxcdFxcdGdhZGdldCA9IGRldi1cXHUwMDNlZ2FkZ2V0O1xcbjEyNTk6XFx0XFx0aWYgKGRldi1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX09QRU5FRCB8fFxcbjEyNjA6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfVU5CT1VORCkge1xcbjEyNjE6XFx0XFx0XFx0LyogTm90IGJvdW5kIHRvIGEgVURDICovXFxuMTI2MjpcXHRcXHR9IGVsc2UgaWYgKGdhZGdldCBcXHUwMDI2XFx1MDAyNiBnYWRnZXQtXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwpIHtcXG4xMjYzOlxcdFxcdFxcdCsrZGV2LVxcdTAwM2V1ZGNfdXNhZ2U7XFxuMTI2NDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTI2NTpcXHRcXG4xMjY2OlxcdFxcdFxcdHJldCA9IGdhZGdldC1cXHUwMDNlb3BzLVxcdTAwM2Vpb2N0bCAoZ2FkZ2V0LCBjb2RlLCB2YWx1ZSk7XFxuMTI2NzpcXHRcXG4xMjY4OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTI2OTpcXHRcXHRcXHQtLWRldi1cXHUwMDNldWRjX3VzYWdlO1xcbjEyNzA6XFx0XFx0fVxcbjEyNzE6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbjEyNzI6XFx0XFxuMTI3MzpcXHRcXHRyZXR1cm4gcmV0O1xcbjEyNzQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OTozMy4yNjAyNDMwMDJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0NDMxNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc2FmZXR5IGlzc3VlIHdpdGhpbiB0aGUgZ2FkZ2V0IGRyaXZlci4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgYSByYWNlIGNvbmRpdGlvbjogc3BlY2lmaWNhbGx5LCBhIHNpdHVhdGlvbiB3aGVyZSBgZGV2LVx1MDAzZWdhZGdldGAgY2FuIGJlIGFjY2Vzc2VkIGFuZCBwb3RlbnRpYWxseSBiZSBgTlVMTGAgb3IgbW9kaWZpZWQgYXQgdGhlIHNhbWUgdGltZSBhcyBhbm90aGVyIHRocmVhZCBpcyB1c2luZyBpdCwgd2hpY2ggaXMgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBldmVuIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgYGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGxgIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZpeCBpdHNlbGYgaXMgcHJldHR5IHN0YW5kYXJkIGZvciB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuIFRoZXkncmUgbW92aW5nIHRoZSBhY2Nlc3MgdG8gYGRldi1cdTAwM2VnYWRnZXRgIHdpdGhpbiBhIHNwaW5sb2NrIChgZGV2LVx1MDAzZWxvY2tgKSB0byBwcm90ZWN0IGl0IGZyb20gY29uY3VycmVudCBtb2RpZmljYXRpb25zLiBUaGV5IGFyZSBhbHNvIGltcGxlbWVudGluZyBhIE5VTEwgY2hlY2sgdG8gZW5zdXJlIGBnYWRnZXRgIGlzbid0IGFjY2Vzc2VkIGJlZm9yZSBpdCdzIGJlZW4gaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGNydWNpYWwuXG5cbkZyb20gYSBkZWJ1Z2dpbmcgcGVyc3BlY3RpdmUsIHRoaXMgdHlwZSBvZiBidWcgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSB3b3VsZCBoYXZlIGNhdWdodCBkdXJpbmcgdGVzdGluZywgcGFydGljdWxhcmx5IGlmIGl0IHdhcyBhIHVzZS1hZnRlci1mcmVlLCB3aGljaCB3b3VsZCBmbGFnIHRoZSBtZW1vcnkgY29ycnVwdGlvbiBpbiB0aGUgc2Vjb25kIGlzc3VlLCBhbG9uZyB3aXRoIHJlZ3VsYXIgYnVnIGRldGVjdG9ycy4gU3RhbmRhcmQga2VybmVsIGVycm9yIGhhbmRsaW5nLCBsaWtlIHRoZSBoYXJkd2FyZSdzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcm90ZWN0aW9uLCB3b3VsZCBhbHNvIGNhdGNoIHRoZSBjcmFzaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gQmVjYXVzZSBpdCdzIGEgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSwgS01TQU4gaXMgb3ZlcmtpbGwgaGVyZSBhbmQgd291bGRuJ3QgcHJvdmlkZSBhbnl0aGluZyBiZXlvbmQgd2hhdCB0aGUgb3RoZXIgdG9vbHMgY2FuLiBJdCdzIGEgY29uY3VycmVuY3kgaXNzdWUgY291cGxlZCB3aXRoIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IHByb2JsZW0sIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkxLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjQxLjYwNDU2MTU0MloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgZ2FkZ2V0X2Rldl9pb2N0bGAgd2hlcmUgYGRldi1cXHUwMDNlZ2FkZ2V0YCB3YXMgYWNjZXNzZWQgb3V0c2lkZSBvZiB0aGUgYGRldi1cXHUwMDNlbG9ja2Agc3BpbmxvY2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGRldi1cXHUwMDNlZ2FkZ2V0YCBpcyBjbGVhcmVkIGNvbmN1cnJlbnRseS4gQnkgbW92aW5nIHRoZSBhc3NpZ25tZW50IGluc2lkZSB0aGUgbG9jayBhbmQgYWRkaW5nIGEgTlVMTCBjaGVjaywgaXQgcHJldmVudHMgdGhpcyBjcmFzaC4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAobGlrZSBwYWdlIGZhdWx0cyBmb3IgTlVMTCBkZXJlZnMpIGFuZCBLQVNBTiAoaWYgaXQgd2VyZSBhIHVzZS1hZnRlci1mcmVlKS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGdhZGdldF9kZXZfaW9jdGxgIHdoZXJlIGBkZXYtXFx1MDAzZWdhZGdldGAgd2FzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIGBkZXYtXFx1MDAzZWxvY2tgIHNwaW5sb2NrLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGlmIGBkZXYtXFx1MDAzZWdhZGdldGAgaXMgY2xlYXJlZCBjb25jdXJyZW50bHkuIEJ5IG1vdmluZyB0aGUgYXNzaWdubWVudCBpbnNpZGUgdGhlIGxvY2sgYW5kIGFkZGluZyBhIE5VTEwgY2hlY2ssIGl0IHByZXZlbnRzIHRoaXMgY3Jhc2guIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKGxpa2UgcGFnZSBmYXVsdHMgZm9yIE5VTEwgZGVyZWZzKSBhbmQgS0FTQU4gKGlmIGl0IHdlcmUgYSB1c2UtYWZ0ZXItZnJlZSkuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb42l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 11:28:37 +0000 UTC FinishedAt: 2026-08-25 11:49:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_GADGET", "USB_GADGETFS" ], "series_id": "b600bbfc-766b-48b5-88bf-2ab5e86dacbf" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "gadget_dev_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0X2Rldl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGdhZGdldF9kZXZfaW9jdGxgIHdoZXJlIGBkZXYtXHUwMDNlZ2FkZ2V0YCB3YXMgYWNjZXNzZWQgb3V0c2lkZSBvZiB0aGUgYGRldi1cdTAwM2Vsb2NrYCBzcGlubG9jaywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgZGV2LVx1MDAzZWdhZGdldGAgaXMgY2xlYXJlZCBjb25jdXJyZW50bHkuIEJ5IG1vdmluZyB0aGUgYXNzaWdubWVudCBpbnNpZGUgdGhlIGxvY2sgYW5kIGFkZGluZyBhIE5VTEwgY2hlY2ssIGl0IHByZXZlbnRzIHRoaXMgY3Jhc2guIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKGxpa2UgcGFnZSBmYXVsdHMgZm9yIE5VTEwgZGVyZWZzKSBhbmQgS0FTQU4gKGlmIGl0IHdlcmUgYSB1c2UtYWZ0ZXItZnJlZSkuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIGlvY3RsIGhhbmRsZXIgb2YgZ2FkZ2V0ZnMgYnkgZmV0Y2hpbmcgdGhlIGdhZGdldCBwb2ludGVyIHVuZGVyIHRoZSBkZXZpY2UgbG9jayBhbmQgY2hlY2tpbmcgaXQgZm9yIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0NzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDJkNzkxMjE4ZWJjNjg4MzcwOTJmODg1N2M2MTU1NzMyNmFiOTQzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMTo0Nzo1MyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbmluZGV4IGQ4N2E4YWI1MTUxMDcuLmU5ZjdkN2MxYTZhM2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuQEAgLTEyNTEsMTQgJiM0MzsxMjUxLDE1IEBAIGVwMF9wb2xsIChzdHJ1Y3QgZmlsZSAqZmQsIHBvbGxfdGFibGUgKndhaXQpXG4gc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIHtcbiBcdHN0cnVjdCBkZXZfZGF0YVx0XHQqZGV2ID0gZmQtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0c3RydWN0IHVzYl9nYWRnZXRcdCpnYWRnZXQgPSBkZXYtXHUwMDNlZ2FkZ2V0O1xuJiM0MztcdHN0cnVjdCB1c2JfZ2FkZ2V0XHQqZ2FkZ2V0O1xuIFx0bG9uZyByZXQgPSAtRU5PVFRZO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0Z2FkZ2V0ID0gZGV2LVx1MDAzZWdhZGdldDtcbiBcdGlmIChkZXYtXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX09QRU5FRCB8fFxuIFx0XHRcdGRldi1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfVU5CT1VORCkge1xuIFx0XHQvKiBOb3QgYm91bmQgdG8gYSBVREMgKi9cbi1cdH0gZWxzZSBpZiAoZ2FkZ2V0LVx1MDAzZW9wcy1cdTAwM2Vpb2N0bCkge1xuJiM0MztcdH0gZWxzZSBpZiAoZ2FkZ2V0IFx1MDAyNlx1MDAyNiBnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsKSB7XG4gXHRcdCYjNDM7JiM0MztkZXYtXHUwMDNldWRjX3VzYWdlO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhZGdldF9kZXZfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIGlvY3RsIGhhbmRsZXIgb2YgZ2FkZ2V0ZnMgYnkgZmV0Y2hpbmcgdGhlIGdhZGdldCBwb2ludGVyIHVuZGVyIHRoZSBkZXZpY2UgbG9jayBhbmQgY2hlY2tpbmcgaXQgZm9yIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkNzkxMjE4ZWJjNjg4MzcwOTJmODg1N2M2MTU1NzMyNmFiOTQzYWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMTo0Nzo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwppbmRleCBkODdhOGFiNTE1MTA3Li5lOWY3ZDdjMWE2YTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCkBAIC0xMjUxLDE0ICYjNDM7MTI1MSwxNSBAQCBlcDBfcG9sbCAoc3RydWN0IGZpbGUgKmZkLCBwb2xsX3RhYmxlICp3YWl0KQogc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGZkLSZndDtwcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0mZ3Q7Z2FkZ2V0OwomIzQzOwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OwogCWxvbmcgcmV0ID0gLUVOT1RUWTsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtkZXYtJmd0O2xvY2spOwomIzQzOwlnYWRnZXQgPSBkZXYtJmd0O2dhZGdldDsKIAlpZiAoZGV2LSZndDtzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8CiAJCQlkZXYtJmd0O3N0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7CiAJCS8qIE5vdCBib3VuZCB0byBhIFVEQyAqLwotCX0gZWxzZSBpZiAoZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsKSB7CiYjNDM7CX0gZWxzZSBpZiAoZ2FkZ2V0ICZhbXA7JmFtcDsgZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsKSB7CiAJCSYjNDM7JiM0MztkZXYtJmd0O3VkY191c2FnZTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7ZGV2LSZndDtsb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTI1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgZ2FkZ2V0X2Rldl9pb2N0bGAgZnVuY3Rpb24uIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBoZXJlIOKAkyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhIHVzZS1hZnRlci1mcmVlLCBvciBwb3NzaWJseSBldmVuIGEgcmFjZSBjb25kaXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwdWxsaW5nIHRoZSBgZ2FkZ2V0YCBwb2ludGVyIGZyb20gdGhlIGBkZXZgIHN0cnVjdHVyZSAqYmVmb3JlKiBncmFiYmluZyB0aGUgbG9jaywgd2hpY2ggaXMgYSBiaWcgbm8tbm8sIGFuZCBjb3VsZCBhbGxvdyBmb3IgZWl0aGVyIG9mIHRoZSB0d28gc2NlbmFyaW9zIHRvIGhhcHBlbi4KClRoZSBmaXggaXMgc3RyYWlnaHRmb3J3YXJkLCBidXQgY2xldmVyOiBpdCBtb3ZlcyB0aGUgYXNzaWdubWVudCBvZiBgZ2FkZ2V0YCB0byBhZnRlciB0aGUgYHNwaW5fbG9ja19pcnFgLiBUaGlzIGVuc3VyZXMgdGhlIGBnYWRnZXRgIHBvaW50ZXIgaXMgdmFsaWQgYW5kIGNvbnNpc3RlbnQgd2l0aGluIHRoZSBjcml0aWNhbCBzZWN0aW9uLiBUaGVuIHRoZSBjb25kaXRpb25hbCB0aGF0IGNoZWNrcyB0aGUgZXhpc3RlbmNlIG9mIGBnYWRnZXRgIGlzIG1vZGlmaWVkIHRvIGNoZWNrIHdoZXRoZXIgb3Igbm90IGBnYWRnZXRgIGlzIG51bGwgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gZm9yIGFueSBwYXRjaCBsaWtlIHRoaXMgaXM6IGlzIHRoaXMgcmVhY2hhYmxlPyBBbmQgYWZ0ZXIgdGhpbmtpbmcgYWJvdXQgaXQgZm9yIGEgc2Vjb25kLCBJIHJlYWxpemUgeWVzLCB0aGUgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IGlzIGluZGVlZCByZWFjaGFibGUgdGhyb3VnaCBlbXVsYXRpb24sIGxpa2Ugd2l0aCBhIGR1bW15X2hjZCBvciBvdGhlciBzb2Z0d2FyZS1iYXNlZCBzb2x1dGlvbnMuIFNvIHRoaXMgaXMgYWN0dWFsbHkgYSBzaWduaWZpY2FudCBmaXgsIGFuZCBwb3RlbnRpYWxseSBwcmV2ZW50cyBhIGNyYXNoIGluIGVtdWxhdGVkIGVudmlyb25tZW50cy4KClRpbWUgdG8gZmluZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgYW5kIGFwcHJvdmVkIGZvciBhIHJlbGVhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z2FkZ2V0X2Rldl9pb2N0bCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTIyMD1lcDBfcG9sbCAoc3RydWN0IGZpbGUgKmZkLCBwb2xsX3RhYmxlICp3YWl0KVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMjUwLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjEyNTE6c3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTEyNTIte1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTMyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwMF9vcGVyYXRpb25zID0ge1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM4LVx0LnBvbGwgPVx0XHRlcDBfcG9sbCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxOTM5Olx0LnVubG9ja2VkX2lvY3RsID0gZ2FkZ2V0X2Rldl9pb2N0bCxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTQwLVx0LnJlbGVhc2UgPVx0ZGV2X3JlbGVhc2UsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA0NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGBpbm9kZS5jYCBLY29uZmlnKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBLY29uZmlnYCBmb3IgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYXMgdGhleSBzYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgdGhpcyBsZWdhY3kgaW5vZGUtYmFzZWQgVVNCIGdhZGdldCBkcml2ZXIuIFRoaXMgc3BlY2lmaWMgZmlsZSBhbmQgaXRzIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpa2VseSBjb250cm9sIGZlYXR1cmVzIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb25zIG92ZXIgdGhlIFVTQiBnYWRnZXQgaW50ZXJmYWNlLiBJIG5lZWQgdG8gc2VlIHdoaWNoIGRldmljZSB0eXBlcyBhcmUgc3VwcG9ydGVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBtYXNzIHN0b3JhZ2UsIG1heWJlIGEgbmV0d29yayBpbnRlcmZhY2UsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBJcyB0aGlzIG1vZHVsZSBldmVuIGVuYWJsZWQgYnkgZGVmYXVsdD8gQXJlIHRoZXJlIGNvbXBpbGUtdGltZSBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBsaWtlIGRlYnVnIGZsYWdzIG9yIHNwZWNpZmljIGZlYXR1cmUgdG9nZ2xlcz8gVGhlIEtjb25maWcgZmlsZSB3aWxsIHJldmVhbCB0aGUgbG9naWMgYmVoaW5kIGFsbCBvZiB0aGlzLCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcnVsZXMsIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBzZWUgd2hhdCB3ZSYjMzk7cmUgYWN0dWFsbHkgYnVpbGRpbmcgYW5kIHdoYXQgdGhlIG9wdGlvbnMgYXJlIHRvIHRhaWxvciB0aGlzIGRyaXZlciB0byBzcGVjaWZpYyB1c2UgY2FzZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5vZGVcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlPTE0PWdfbWlkaS15XHRcdFx0Oj0gZ21pZGkub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZToxNTpnYWRnZXRmcy15XHRcdFx0Oj0gaW5vZGUub1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZS0xNi1nX21hc3Nfc3RvcmFnZS15XHRcdDo9IG1hc3Nfc3RvcmFnZS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eSByZXNpZGUuIE15IGZpcnN0IGluc3RpbmN0LCBhbmQgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBpcyB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ2AgZmlsZS4gSSYjMzk7bSBhc3N1bWluZyB0aGF0JiMzOTtzIHdoZXJlIHRoZSB0cmFkaXRpb25hbCwgb3IgbGVnYWN5LCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbG9jYXRlZC4gTGV0JiMzOTtzIGRpdmUgaW4gYW5kIGNvbmZpcm0gdGhhdCBgZ2FkZ2V0ZnNgIGlzIGRlZmluZWQgdGhlcmU7IHRoYXQmIzM5O2xsIGdpdmUgbWUgYSBzb2xpZCBncm91bmRpbmcgcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgdGhlc2UgVVNCIGdhZGdldCBmZWF0dXJlcy4gVGltZSB0byB2ZXJpZnkhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFVTQl9HQURHRVRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc9MTkwPWNvbmZpZyBVU0JfR19OQ01cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA1LVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnOjIwNjpjb25maWcgVVNCX0dBREdFVEZTXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA3LVx0dHJpc3RhdGUgXCYjMzQ7R2FkZ2V0IEZpbGVzeXN0ZW1cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzEyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZGVwZW5kZW5jaWVzOgoKKipBbmFseXppbmcgdGhlIGBVU0JfR0FER0VURlNgIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIGBVU0JfR0FER0VURlNgLiBUaGF0JiMzOTtzIGEga2V5IHBpZWNlIGluIHRoZSBwdXp6bGUgb2YgcHJvdmlkaW5nIFVTQiBkZXZpY2UgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlICpmb3VuZGF0aW9uYWwqIGJ1aWxkaW5nIGJsb2NrcyB0aGlzIHJlbGllcyB1cG9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSwgZGVidWcsIGFuZCBldmVuIG9wdGltaXplIGFueXRoaW5nIHVzaW5nIEdhZGdldEZTLgoKSSYjMzk7bSB0aGlua2luZywgb2ZmIHRoZSB0b3Agb2YgbXkgaGVhZCwgd2UmIzM5O2xsIG5lZWQgY29yZSBVU0IgaW5mcmFzdHJ1Y3R1cmUgLSB0aGUgVVNCIGNvcmUgaXRzZWxmLCBvZiBjb3Vyc2UuIFRoYXQmIzM5O3MgYSBnaXZlbi4gVGhlbiB0aGVyZSYjMzk7cyB0aGUgaG9zdCBjb250cm9sbGVyIGRyaXZlciBmcmFtZXdvcmssIG9yLCBtb3JlIHNwZWNpZmljYWxseSBpbiB0aGlzIGNvbnRleHQsIHRoZSAqZGV2aWNlKiBjb250cm9sbGVyIGRyaXZlciBmcmFtZXdvcmsuIEdhZGdldEZTIGlzIGVtdWxhdGluZyBhIFVTQiBkZXZpY2UsIHNvIGl0IG5lZWRzIHRvIGludGVyZmFjZSB3aXRoIHdoYXRldmVyIGhhcmR3YXJlIHN1cHBvcnRzIHRoYXQgcm9sZS4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzcGVjaWZpYyBoYXJkd2FyZSBvciBhIG1vcmUgZ2VuZXJpYyBhYnN0cmFjdGlvbj8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCknigJltIGFsc28gYXNzdW1pbmcgd2XigJlsbCBlbmNvdW50ZXIgZGVwZW5kZW5jaWVzIG9uIHRoZSBmaWxlIHN5c3RlbSBsYXllcnMgc2luY2UgR2FkZ2V0RlMgbGV2ZXJhZ2VzIGZpbGUgc3lzdGVtIHNlbWFudGljcyBmb3IgaXRzIGRldmljZSBlbXVsYXRpb24uIFdoYXQgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQ/IEJ1ZmZlcnMgZm9yIHRyYW5zZmVycywgbGlrZWx5IGEgZmV3IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhhdC4KCkl0JiMzOTtzIGEgcHJvY2VzcyBvZiBlbGltaW5hdGlvbjsgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBkbyBzby4gTGV0JiMzOTtzIHNlZSBob3cgZGVlcCB0aGVzZSBkZXBlbmRlbmNpZXMgZ28sIGFuZCBob3cgbXVjaCB0aGV5IGludGVybWluZ2xlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCB0aGUgZGV2aWNlIHRyZWUgYmluZGluZ3MsIGFuZCBtYXliZSBldmVuIHNvbWUgYWN0dWFsIGNvZGUgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4gVGhpcyBxdWljayBhc3Nlc3NtZW50IHdpbGwgcmV2ZWFsIHdoaWNoIHBpZWNlcyBhcmUgc29saWQgYW5kIHdoaWNoIG9uZXMgYXJlIHBvdGVudGlhbGx5IGdvaW5nIHRvIGdpdmUgbWUgaGVhZGFjaGVzIGRvd24gdGhlIGxpbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VURlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTE5MD1jb25maWcgVVNCX0dfTkNNXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMDY6Y29uZmlnIFVTQl9HQURHRVRGU1xuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNy1cdHRyaXN0YXRlIFwmIzM0O0dhZGdldCBGaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMDcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZGl2ZSBpbnRvIHRoaXMuIEkgcmVtZW1iZXIgd2Ugd2VyZSBkaXNjdXNzaW5nIHRoZSBsZWdhY3kgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeWAgZGlyZWN0b3J5LiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGRldGFpbHMgb2YgdGhhdCBLY29uZmlnIGZpbGUuIExldCYjMzk7cyBzZWUuLi4gYXJvdW5kIGxpbmUgMjA2IGlzIHdoZXJlIEkgcmVjYWxsIHNvbWV0aGluZyByZWxldmFudCBiZWluZyBkZWZpbmVkLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHNlY3Rpb24gd2Ugd2VyZSB3b3JraW5nIHdpdGggYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGluZmx1ZW5jZWQuIExldCYjMzk7cyBnZXQgdGhlIGZpbGUgb3BlbiBhbmQgZ2V0IHRvIHRoYXQgbGluZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdFx0ICBvZiBzZXZlcmFsIGV0aGVybmV0IGZyYW1lcyBpbnRvIG9uZSBVU0IgdHJhbnNmZXIgYW5kIGRpZmZlcmVudFxuIDIwMTpcdFx0ICBhbGlnbm1lbnQgcG9zc2liaWxpdGllcy5cbiAyMDI6XHRcbiAyMDM6XHRcdCAgU2F5IFwmIzM0O3lcJiMzNDsgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFwmIzM0O21cJiMzNDsgdG8gYnVpbGQgYVxuIDIwNDpcdFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcJiMzNDtnX25jbVwmIzM0Oy5cbiAyMDU6XHRcbiAyMDY6XHRjb25maWcgVVNCX0dBREdFVEZTXG4gMjA3Olx0XHR0cmlzdGF0ZSBcJiMzNDtHYWRnZXQgRmlsZXN5c3RlbVwmIzM0O1xuIDIwODpcdFx0aGVscFxuIDIwOTpcdFx0ICBUaGlzIGRyaXZlciBwcm92aWRlcyBhIGZpbGVzeXN0ZW0gYmFzZWQgQVBJIHRoYXQgbGV0cyB1c2VyIG1vZGVcbiAyMTA6XHRcdCAgcHJvZ3JhbXMgaW1wbGVtZW50IGEgc2luZ2xlLWNvbmZpZ3VyYXRpb24gVVNCIGRldmljZSwgaW5jbHVkaW5nXG4gMjExOlx0XHQgIGVuZHBvaW50IEkvTyBhbmQgY29udHJvbCByZXF1ZXN0cyB0aGF0IGRvbiYjMzk7dCByZWxhdGUgdG8gZW51bWVyYXRpb24uXG4gMjEyOlx0XHQgIEFsbCBlbmRwb2ludHMsIHRyYW5zZmVyIHNwZWVkcywgYW5kIHRyYW5zZmVyIHR5cGVzIHN1cHBvcnRlZCBieVxuIDIxMzpcdFx0ICB0aGUgaGFyZHdhcmUgYXJlIGF2YWlsYWJsZSwgdGhyb3VnaCByZWFkKCkgYW5kIHdyaXRlKCkgY2FsbHMuXG4gMjE0Olx0XG4gMjE1Olx0XHQgIFNheSBcJiMzNDt5XCYjMzQ7IHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcJiMzNDttXCYjMzQ7IHRvIGJ1aWxkIGFcbiAyMTY6XHRcdCAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgXCYjMzQ7Z2FkZ2V0ZnNcJiMzNDsuXG4gMjE3Olx0XG4gMjE4Olx0Y29uZmlnIFVTQl9GVU5DVElPTkZTXG4gMjE5Olx0XHR0cmlzdGF0ZSBcJiMzNDtGdW5jdGlvbiBGaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MTgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWcgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGl0JiMzOTtzIHNldCB0byBgVVNCX0dBREdFVEZTYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1JpZ2h0LCBgVVNCX0dBREdFVEZTYOKApiB0aGF0JiMzOTtzIGZvciB1c2Vyc3BhY2UgZ2FkZ2V0IGZ1bmN0aW9uYWxpdHksIGlzbiYjMzk7dCBpdD8mIzM0Oy4gVGhlbiwgYSBxdWVzdGlvbiBwb3BzIGludG8gbXkgbWluZDogaXMgYFVTQl9HQURHRVRGU2AgY29udGluZ2VudCBvbiBgVVNCX0dBREdFVGA/IEl0IHNlZW1zIGxvZ2ljYWxseSBzb3VuZDsgSSBtZWFuLCB5b3UmIzM5O2QgdGhpbmsgdGhlIHVzZXIgc3BhY2UgdGhpbmcgd291bGQgZGVwZW5kIG9uIHRoZSBiYXNlIGdhZGdldCBpbmZyYXN0cnVjdHVyZS4gQmV0dGVyIHRvIGJlIHN1cmUuIFRpbWUgdG8gZ28gdG8gdGhlIHNvdXJjZS4gTGV0JiMzOTtzIGhlYWQgc3RyYWlnaHQgdG8gdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdgIGZpbGUuIEkmIzM5O2xsIHNjYW4gdGhlIHRvcCwgcXVpY2tseSwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgdGhhdCBqdW1wIG91dCBhdCBtZS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgdG8gbWluaW1pemUgZGVidWdnaW5nIGxhdGVyLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIHVuZGVybHlpbmcgZmVhdHVyZXMgb2YgdGhlIGtlcm5lbCBhcmUgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgVVNCIEdhZGdldCBzdXBwb3J0IG9uIGEgc3lzdGVtIGludm9sdmVzXG4gICA0Olx0IyAgICAoYSkgYSBwZXJpcGhlcmFsIGNvbnRyb2xsZXIsIGFuZFxuICAgNTpcdCMgICAgKGIpIHRoZSBnYWRnZXQgZHJpdmVyIHVzaW5nIGl0LlxuICAgNjpcdCNcbiAgIDc6XHQjIE5PVEU6ICBHYWRnZXQgc3VwcG9ydCAqKiBET0VTIE5PVCAqKiBkZXBlbmQgb24gaG9zdC1zaWRlIENPTkZJR19VU0IgISFcbiAgIDg6XHQjXG4gICA5Olx0IyAgLSBIb3N0IHN5c3RlbXMgKGxpa2UgUENzKSBuZWVkIENPTkZJR19VU0IgKHdpdGggXCYjMzQ7QVwmIzM0OyBqYWNrcykuXG4gIDEwOlx0IyAgLSBQZXJpcGhlcmFscyAobGlrZSBQREFzKSBuZWVkIENPTkZJR19VU0JfR0FER0VUICh3aXRoIFwmIzM0O0JcJiMzNDsgamFja3MpLlxuICAxMTpcdCMgIC0gU29tZSBzeXN0ZW1zIGhhdmUgYm90aCBraW5kcyBvZiBjb250cm9sbGVycy5cbiAgMTI6XHQjXG4gIDEzOlx0IyBXaXRoIGhlbHAgZnJvbSBhIHNwZWNpYWwgdHJhbnNjZWl2ZXIgYW5kIGEgXCYjMzQ7TWluaS1BQlwmIzM0OyBqYWNrLCBzeXN0ZW1zIHdpdGhcbiAgMTQ6XHQjIGJvdGgga2luZHMgb2YgY29udHJvbGxlciBjYW4gYWxzbyBzdXBwb3J0IFwmIzM0O1VTQiBPbi10aGUtR29cJiMzNDsgKENPTkZJR19VU0JfT1RHKS5cbiAgMTU6XHQjXG4gIDE2Olx0IyBBIExpbnV4IFwmIzM0O0dhZGdldCBEcml2ZXJcJiMzNDsgdGFsa3MgdG8gdGhlIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXJcbiAgMTc6XHQjIGRyaXZlciB0aHJvdWdoIHRoZSBhYnN0cmFjdCBcJiMzNDtnYWRnZXRcJiMzNDsgQVBJLiAgU29tZSBvdGhlciBvcGVyYXRpbmdcbiAgMTg6XHQjIHN5c3RlbXMgY2FsbCB0aGVzZSBcJiMzNDtjbGllbnRcJiMzNDsgZHJpdmVycywgb2Ygd2hpY2ggXCYjMzQ7Y2xhc3MgZHJpdmVyc1wmIzM0O1xuICAxOTpcdCMgYXJlIGEgc3Vic2V0IChpbXBsZW1lbnRpbmcgYSBVU0IgZGV2aWNlIGNsYXNzIHNwZWNpZmljYXRpb24pLlxuICAyMDpcdCMgQSBnYWRnZXQgZHJpdmVyIGltcGxlbWVudHMgb25lIG9yIG1vcmUgVVNCIGZ1bmN0aW9ucyB1c2luZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzU1CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgdGhlIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gSSB3YW50IHRvIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBzZWxlY3RhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBnYWRnZXQgZHJpdmVycyBhcmUgZXhwb3NlZC4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgY29yZSBidWlsZCBvcHRpb25zIGhlcmUsIHRoZSBrbm9icyB0aGF0IEkgY2FuIHR3ZWFrIHRvIHRhaWxvciB0aGUgVVNCIGdhZGdldCBjYXBhYmlsaXRpZXMgZm9yIGEgc3BlY2lmaWMgdXNlIGNhc2Ugb3IgaGFyZHdhcmUgcGxhdGZvcm0uIFRoaXMgZmlsZSBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGJyZWFkdGggb2YgdGhlIGdhZGdldCBzdWJzeXN0ZW0gYW5kIGhvdyBkaWZmZXJlbnQgZ2FkZ2V0IGNvbmZpZ3VyYXRpb25zIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkLiBJdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBvc3NpYmlsaXRpZXMgYW5kIGNvbnN0cmFpbnRzIHdoZW4gYnVpbGRpbmcgYSBjdXN0b20gVVNCIEdhZGdldCBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHN1cHBvcnQgZm9yIG1hc3Mgc3RvcmFnZSwgc2VyaWFsIHBvcnRzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBwZXJoYXBzIGV2ZW4gY3VzdG9tIGZ1bmN0aW9ucy4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY3J1Y2lhbCBiZWZvcmUgbW92aW5nIG9uIHRvIGluZGl2aWR1YWwgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00OTU9Y29uZmlnIFVTQl9DT05GSUdGU19GX1RDTVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTUwOC1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjUwOTpzb3VyY2UgXCYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCYjMzQ7XG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3MjIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O20gcHJldHR5IHN1cmUgdGhlIHJlbGV2YW50IHN0dWZmIGZvciB0aGlzIGxpdmVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9gIGRpcmVjdG9yeS4gUmlnaHQsIGFuZCBJIHJlbWVtYmVyIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgaW50ZXJlc3RlZCBpbiBzb21ldGhpbmcgYXJvdW5kIGxpbmUgNTA5LiBJJiMzOTtsbCBvcGVuIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQmIzM5O3Mgd2hhdC4gSG9wZWZ1bGx5LCBJJiMzOTtsbCBmaW5kIHRoZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gYWRkcmVzcyB0aGUgaXNzdWUgSSYjMzk7bSB3b3JraW5nIG9uLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0OTA6XHRcdCAgdGhlIGRldmljZSBmaWxlIHRvIGdldCBvciBzZXQgcHJpbnRlciBzdGF0dXMuXG4gNDkxOlx0XG4gNDkyOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgRG9jdW1lbnRhdGlvbi91c2IvZ2FkZ2V0X3ByaW50ZXIucnN0XG4gNDkzOlx0XHQgIHdoaWNoIGluY2x1ZGVzIHNhbXBsZSBjb2RlIGZvciBhY2Nlc3NpbmcgdGhlIGRldmljZSBmaWxlLlxuIDQ5NDpcdFxuIDQ5NTpcdGNvbmZpZyBVU0JfQ09ORklHRlNfRl9UQ01cbiA0OTY6XHRcdGJvb2wgXCYjMzQ7VVNCIEdhZGdldCBUYXJnZXQgRmFicmljXCYjMzQ7XG4gNDk3Olx0XHRkZXBlbmRzIG9uIFRBUkdFVF9DT1JFXG4gNDk4Olx0XHRkZXBlbmRzIG9uIFVTQl9DT05GSUdGU1xuIDQ5OTpcdFx0c2VsZWN0IFVTQl9MSUJDT01QT1NJVEVcbiA1MDA6XHRcdHNlbGVjdCBVU0JfRl9UQ01cbiA1MDE6XHRcdGhlbHBcbiA1MDI6XHRcdCAgVGhpcyBmYWJyaWMgaXMgYSBVU0IgZ2FkZ2V0IGNvbXBvbmVudC4gVHdvIFVTQiBwcm90b2NvbHMgYXJlXG4gNTAzOlx0XHQgIHN1cHBvcnRlZCB0aGF0IGlzIEJCQiBvciBCT1QgKEJ1bGsgT25seSBUcmFuc3BvcnQpIGFuZCBVQVNcbiA1MDQ6XHRcdCAgKFVTQiBBdHRhY2hlZCBTQ1NJKS4gQk9UIGlzIGFkdmVydGlzZWQgb24gYWx0ZXJuYXRpdmVcbiA1MDU6XHRcdCAgaW50ZXJmYWNlIDAgKHByaW1hcnkpIGFuZCBVQVMgaXMgb24gYWx0ZXJuYXRpdmUgaW50ZXJmYWNlIDEuXG4gNTA2Olx0XHQgIEJvdGggcHJvdG9jb2xzIGNhbiB3b3JrIG9uIFVTQjIuMCBhbmQgVVNCMy4wLlxuIDUwNzpcdFx0ICBVQVMgdXRpbGl6ZXMgdGhlIFVTQiAzLjAgZmVhdHVyZSBjYWxsZWQgc3RyZWFtcyBzdXBwb3J0LlxuIDUwODpcdFxuIDUwOTpcdHNvdXJjZSBcJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcJiMzNDtcbiA1MTA6XHRcbiA1MTE6XHRlbmRpZiAjIFVTQl9HQURHRVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI4NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSXQgc2VlbXMgYFVTQl9HQURHRVRgIGlzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCB0aGUgYmlnIHBhcmVudCwgdGhlIHRoaW5nIHRoYXQgZW5jb21wYXNzZXMgdGhlIHdob2xlIFVTQiBnYWRnZXQgc3lzdGVtLiBUaGVuLCBgVVNCX0dBREdFVEZTYCBzcGVjaWZpY2FsbHkgZW5hYmxlcyB0aGUgZHJpdmVyIGZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoYXQgYnJvYWRlciBmcmFtZXdvcmsuIE5vdywgaGVyZSYjMzk7cyBhIGN1cnZlYmFsbC4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgVVNCX0RVTU1ZX0hDRGAgaXMgYWxzbyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGNydWNpYWwgZm9yIGVtdWxhdGluZyB0aGUgYmVoYXZpb3Igb2YgYSBVU0IgZ2FkZ2V0LiBIb3dldmVyLCBpdCYjMzk7cyBgVVNCX0dBREdFVGAgYW5kIGBVU0JfR0FER0VURlNgIHRoYXQgYXJlIHRoZSBwcmltYXJ5IGVuYWJsZXJzIG9mIHRoZSBjb3JlIGNvZGUsIHJpZ2h0PwoKQWxyaWdodCwgbmV4dCBzdGVwOiBJIHdhbnQgdG8gY29uZmlybSBteSBzdXNwaWNpb24gcmVnYXJkaW5nIHRoZSByZWFjaGFiaWxpdHkgb2YgYGdhZGdldF9kZXZfaW9jdGxgLiBUaW1lIHRvIHNlZSBpZiB0aGUga2VybmVsIGFjdHVhbGx5IGNhbGxzIHRoaXMgZnVuY3Rpb24uIEFoYSEgSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYGdhZGdldF9kZXZfaW9jdGxgIGlzIGluZGVlZCB0aGUgYHVubG9ja2VkX2lvY3RsYCBmdW5jdGlvbiB0aWVkIHRvIGBlcDBfb3BlcmF0aW9uc2AuIEFuZCBub3cgdGhhdCBJIGhhdmUgdGhlIGxpbmssIEkgcmVtZW1iZXIgdGhhdCBgZXAwX29wZXJhdGlvbnNgIGlzIGRlZmluZWQgd2l0aGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoZWFydCBvZiB0aGUgZW5kcG9pbnQgemVybyBvcGVyYXRpb25zIHJlc2lkZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VwMF9vcGVyYXRpb25zJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTE1PWdhZGdldF9kZXZfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTMxLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXAwX29wZXJhdGlvbnMgPSB7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTkzMy1cbi0tXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjAxNj1nYWRnZXRmc19maWxsX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTIwNTktXHRkZXYtXHUwMDNlc2IgPSBzYjtcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoyMDYwOlx0cmMgPSBnYWRnZXRmc19jcmVhdGVfZmlsZShzYiwgQ0hJUCwgZGV2LCBcdTAwMjZlcDBfb3BlcmF0aW9ucyk7XG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA2MS1cdGlmIChyYykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTcwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgZ2FkZ2V0ZnNgIGlvY3RsIEhhbmRsZXIqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIGBpb2N0bGAgaGFuZGxlciwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgcmVzcG9uc2libGUgZm9yIHRoZSBgQ0hJUGAgZmlsZSB3aXRoaW4gdGhlIGBnYWRnZXRmc2AgY29udGV4dC4gVGhlIGZhY3QgdGhhdCBzeXprYWxsZXIgaXMgbGlrZWx5IGFibGUgdG8gcmVhY2ggdGhpcyBwb2ludCBpcyBjcnVjaWFsLiBJdCBtZWFucyB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZyBhbmQgZXhwbG9pdGluZyB2dWxuZXJhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGBnYWRnZXRfZGV2X2lvY3RsYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBkaXNzZWN0IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCB0aGUgb3BlcmF0aW9ucyBpdCBwZXJmb3JtcyBvbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAob3IgZW11bGF0ZWQgaGFyZHdhcmUgaW4gdGhpcyBjYXNlKSwgYW5kIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yay4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3dzLCByYWNlIGNvbmRpdGlvbnMsIGJ1ZmZlciBvdmVyZmxvd3MsIHVzZS1hZnRlci1mcmVlcywgb3IgYW55IG90aGVyIGNsYXNzaWMgdnVsbmVyYWJpbGl0aWVzLiBUaGlzIGlzIHdoZXJlIHRoZSByZWFsIHdvcmsgYmVnaW5zIC0gZGVlcCBkaXZpbmcgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNTA6XHRcbjEyNTE6XHRzdGF0aWMgbG9uZyBnYWRnZXRfZGV2X2lvY3RsIChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4xMjUyOlx0e1xuMTI1MzpcdFx0c3RydWN0IGRldl9kYXRhXHRcdCpkZXYgPSBmZC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4xMjU0Olx0XHRzdHJ1Y3QgdXNiX2dhZGdldFx0KmdhZGdldDtcbjEyNTU6XHRcdGxvbmcgcmV0ID0gLUVOT1RUWTtcbjEyNTY6XHRcbjEyNTc6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuMTI1ODpcdFx0Z2FkZ2V0ID0gZGV2LVx1MDAzZWdhZGdldDtcbjEyNTk6XHRcdGlmIChkZXYtXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX09QRU5FRCB8fFxuMTI2MDpcdFx0XHRcdGRldi1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfVU5CT1VORCkge1xuMTI2MTpcdFx0XHQvKiBOb3QgYm91bmQgdG8gYSBVREMgKi9cbjEyNjI6XHRcdH0gZWxzZSBpZiAoZ2FkZ2V0IFx1MDAyNlx1MDAyNiBnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsKSB7XG4xMjYzOlx0XHRcdCYjNDM7JiM0MztkZXYtXHUwMDNldWRjX3VzYWdlO1xuMTI2NDpcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuMTI2NTpcdFxuMTI2NjpcdFx0XHRyZXQgPSBnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsIChnYWRnZXQsIGNvZGUsIHZhbHVlKTtcbjEyNjc6XHRcbjEyNjg6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4xMjY5Olx0XHRcdC0tZGV2LVx1MDAzZXVkY191c2FnZTtcbjEyNzA6XHRcdH1cbjEyNzE6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4xMjcyOlx0XG4xMjczOlx0XHRyZXR1cm4gcmV0O1xuMTI3NDpcdH1cbjEyNzU6XHRcbjEyNzY6XHQvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuMTI3NzpcdFxuMTI3ODpcdC8qIFRoZSBpbi1rZXJuZWwgZ2FkZ2V0IGRyaXZlciBoYW5kbGVzIG1vc3QgZXAwIGlzc3VlcywgaW4gcGFydGljdWxhclxuMTI3OTpcdCAqIGVudW1lcmF0aW5nIHRoZSBzaW5nbGUgY29uZmlndXJhdGlvbiAoYXMgcHJvdmlkZWQgZnJvbSB1c2VyIHNwYWNlKS5cbjEyODA6XHQgKlxuMTI4MTpcdCAqIFVucmVjb2duaXplZCBlcDAgcmVxdWVzdHMgbWF5IGJlIGhhbmRsZWQgaW4gdXNlciBzcGFjZS5cbjEyODI6XHQgKi9cbjEyODM6XHRcbjEyODQ6XHRzdGF0aWMgdm9pZCBtYWtlX3F1YWxpZmllciAoc3RydWN0IGRldl9kYXRhICpkZXYpXG4xMjg1Olx0e1xuMTI4NjpcdFx0c3RydWN0IHVzYl9xdWFsaWZpZXJfZGVzY3JpcHRvclx0XHRxdWFsO1xuMTI4NzpcdFx0c3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvclx0XHQqZGVzYztcbjEyODg6XHRcbjEyODk6XHRcdHF1YWwuYkxlbmd0aCA9IHNpemVvZiBxdWFsO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODM1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgR2FkZ2V0RlMgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGZpeGluZyBzb21ldGhpbmcgaW1wb3J0YW50IOKAkyBhIGZ1bmN0aW9uYWwgYnVnLCBzcGVjaWZpY2FsbHkgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWUuIEl0IGxvb2tzIGxpa2UgYGdhZGdldGAgd2FzIGJlaW5nIHJlYWQgYmVmb3JlIHRoZSBsb2NrIHdhcyBhY3F1aXJlZCwgYW5kIHRoZW4gZGVyZWZlcmVuY2VkLCB3aGljaCBpcyBhIGNsYXNzaWMgcmVjaXBlIGZvciB0cm91YmxlLgoKTXkgcmVhc29uaW5nIGZvciB0aGUgZnV6emluZyBhbmFseXNpcyBpcyB0aGF0IHRoaXMgY2hhbmdlIG1vZGlmaWVzIHRoZSBpb2N0bCBoYW5kbGVyIGZvciB0aGUgZ2FkZ2V0ZnMgZGV2aWNlLCBgZ2FkZ2V0X2Rldl9pb2N0bGAuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhlIGNyaXRpY2FsIGlzc3VlIG9mIGZldGNoaW5nIHRoZSBgZ2FkZ2V0YCBwb2ludGVyIHNhZmVseSwgdW5kZXIgdGhlIGRldmljZSBsb2NrLCBhbmQgYWxzbyBpbmNsdWRlcyBhIGBOVUxMYCBjaGVjay4gU28sIHRoaXMgaXMgYSBkZWZpbml0ZSB3aW4gdG8gYWRkIHRvIHRoZSBmdXp6aW5nIGNhbXBhaWduLgoKRm9yIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24sIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAsIG9idmlvdXNseSwgYW5kIHRoZSBgUmVhc29uaW5nYCBpcyBkZXRhaWxlZCBlbm91Z2ggdG8gZXhwbGFpbiB3aGF0IGlzIGJlaW5nIGFkZHJlc3NlZC4gSSBhbSBzZXR0aW5nIHRoZSBgRm9jdXNTeW1ib2xzYCB0byBgZ2FkZ2V0X2Rldl9pb2N0bGAuCgpOb3csIGxldCYjMzk7cyB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgVVNCX0dBREdFVEZTYCBpcyB0aGUga2V5IG9uZSwgc2luY2UgaXQgZW5hYmxlcyBgaW5vZGUub2AsIHdoZXJlIGBnYWRnZXRfZGV2X2lvY3RsYCBsaXZlcy4gYFVTQl9HQURHRVRgIGlzIHRoZSBwYXJlbnQgY29uZmlnLCBidXQgdGhlIGRvY3VtZW50YXRpb24gc2FpZCB0byBvbmx5IGVuYWJsZSB0aGUgbmVlZGVkIGNvbmZpZ3MsIGFuZCBgVVNCX0dBREdFVEZTYCBpcyBlbm91Z2guCgpJIHNob3VsZCBhbHNvIGNoZWNrIHdoZXRoZXIgYFVTQl9EVU1NWV9IQ0RgIGlzIG5lZWRlZC4gRXZlbiB0aG91Z2ggaXQmIzM5O3MgdHlwaWNhbGx5IGluY2x1ZGVkIGluIHN5emthbGxlciBjb25maWdzLCBJIHdhbnQgdG8gYmUgcHJlY2lzZS4gQ2hlY2tpbmcgZGVwZW5kZW5jaWVzIGlzIGtleSBoZXJlLiBUaGUgaW5zdHJ1Y3Rpb25zIG1lbnRpb24gdG8gcmV2aWV3IGBkZXBlbmRzIG9uYCBsaW5lcyB0byBjYXRjaCBhbGwgdGhlIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncy4gYFVTQl9HQURHRVRGU2AgZGVwZW5kcyBvbiBgVVNCX0dBREdFVGAuIFNvIGxldCYjMzk7cyBjaGVjayBgVVNCX0dBREdFVGAmIzM5O3MgZGVwZW5kZW5jaWVzIHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBVU0JfR0FER0VUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTYtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzoxNzptZW51Y29uZmlnIFVTQl9HQURHRVRcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE4LVx0dHJpc3RhdGUgXCYjMzQ7VVNCIEdhZGdldCBTdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc9NDc9aWYgVVNCX0dBREdFVFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo0OTpjb25maWcgVVNCX0dBREdFVF9ERUJVR1xuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNTAtXHRib29sIFwmIzM0O0RlYnVnZ2luZyBtZXNzYWdlcyAoREVWRUxPUE1FTlQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNjItXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo2Mzpjb25maWcgVVNCX0dBREdFVF9WRVJCT1NFXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy02NC1cdGJvb2wgXCYjMzQ7VmVyYm9zZSBkZWJ1Z2dpbmcgTWVzc2FnZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc2LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6Nzc6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRklMRVNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgKERFVkVMT1BNRU5UKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg3LVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6ODg6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRlNcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgaW4gZGVidWdmcyAoREVWRUxPUE1FTlQpXCYjMzQ7XG4tLVxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctOTgtXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZzo5OTpjb25maWcgVVNCX0dBREdFVF9WQlVTX0RSQVdcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEwMC1cdGludCBcJiMzNDtNYXhpbXVtIFZCVVMgUG93ZXIgdXNhZ2UgKDItNTAwIG1BKVwmIzM0O1xuLS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTExNS1cbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjExNjpjb25maWcgVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy0xMTctXHRpbnQgXCYjMzQ7TnVtYmVyIG9mIHN0b3JhZ2UgcGlwZWxpbmUgYnVmZmVyc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDM4CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipFeGFtaW5pbmcgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG15IGF0dGVudGlvbiBhcm91bmQgbGluZSAxNy4gSSYjMzk7bSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgVVNCIGdhZGdldCBzdWJzeXN0ZW0uIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGNvcmUgZmVhdHVyZXMgdGhhdCBjYW4gYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCBidXQgYWxzbyBvcHRpb25zIGZvciBzcGVjaWZpYyBVU0IgZ2FkZ2V0IGNvbnRyb2xsZXJzLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSB2YXJpb3VzIGNhcGFiaWxpdGllcy4gSSBob3BlIHRoaXMgcHJvdmlkZXMgdGhlIHN0YXJ0aW5nIHBvaW50IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTA6XHQjICAtIFBlcmlwaGVyYWxzIChsaWtlIFBEQXMpIG5lZWQgQ09ORklHX1VTQl9HQURHRVQgKHdpdGggXCYjMzQ7QlwmIzM0OyBqYWNrcykuXG4gIDExOlx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxuICAxMjpcdCNcbiAgMTM6XHQjIFdpdGggaGVscCBmcm9tIGEgc3BlY2lhbCB0cmFuc2NlaXZlciBhbmQgYSBcJiMzNDtNaW5pLUFCXCYjMzQ7IGphY2ssIHN5c3RlbXMgd2l0aFxuICAxNDpcdCMgYm90aCBraW5kcyBvZiBjb250cm9sbGVyIGNhbiBhbHNvIHN1cHBvcnQgXCYjMzQ7VVNCIE9uLXRoZS1Hb1wmIzM0OyAoQ09ORklHX1VTQl9PVEcpLlxuICAxNTpcdCNcbiAgMTY6XHRcbiAgMTc6XHRtZW51Y29uZmlnIFVTQl9HQURHRVRcbiAgMTg6XHRcdHRyaXN0YXRlIFwmIzM0O1VTQiBHYWRnZXQgU3VwcG9ydFwmIzM0O1xuICAxOTpcdFx0c2VsZWN0IFVTQl9DT01NT05cbiAgMjA6XHRcdHNlbGVjdCBOTFNcbiAgMjE6XHRcdGhlbHBcbiAgMjI6XHRcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXG4gIDIzOlx0XHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cbiAgMjQ6XHRcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcbiAgMjU6XHRcdCAgIHlvdSBjYW4mIzM5O3QgY29ubmVjdCBhIFwmIzM0O3RvLXRoZS1ob3N0XCYjMzQ7IGNvbm5lY3RvciB0byBhIHBlcmlwaGVyYWwuXG4gIDI2Olx0XG4gIDI3Olx0XHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcbiAgMjg6XHRcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcbiAgMjk6XHRcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTcwCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIGJhc2VkIG9uIHRoZSB3YXkgdGhpcyBpcyBzdHJ1Y3R1cmVkLCBpdCBhcHBlYXJzIHRoYXQgYFVTQl9HQURHRVRgIHNpdHMgYXQgdGhlIHRvcCBsZXZlbCBpbiB0aGUgbWVudWNvbmZpZy4gVGhhdCBtYWtlcyBzZW5zZS4gSXQgbWVhbnMgdGhhdCBgVVNCX0dBREdFVGAgYW5kIGBVU0JfR0FER0VURlNgIGFyZSB0aGUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb25zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIE5vdywgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfR0FER0VURlNgLiBJIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9yIG92ZXJsb29rZWQgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gd2l0aCBvdGhlciByZWxhdGVkIGZlYXR1cmVzLiBJdCYjMzk7cyBhbHdheXMgd29ydGggZG91YmxlLWNoZWNraW5nIHRoZXNlIHNvcnRzIG9mIGNvbmZpZ3VyYXRpb25zLCBwYXJ0aWN1bGFybHkgd2hlbiBkZWFsaW5nIHdpdGgga2VybmVsIG1vZHVsZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDExOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRcdCAgb2Ygc2V2ZXJhbCBldGhlcm5ldCBmcmFtZXMgaW50byBvbmUgVVNCIHRyYW5zZmVyIGFuZCBkaWZmZXJlbnRcbiAyMDE6XHRcdCAgYWxpZ25tZW50IHBvc3NpYmlsaXRpZXMuXG4gMjAyOlx0XG4gMjAzOlx0XHQgIFNheSBcJiMzNDt5XCYjMzQ7IHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcJiMzNDttXCYjMzQ7IHRvIGJ1aWxkIGFcbiAyMDQ6XHRcdCAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgXCYjMzQ7Z19uY21cJiMzNDsuXG4gMjA1Olx0XG4gMjA2Olx0Y29uZmlnIFVTQl9HQURHRVRGU1xuIDIwNzpcdFx0dHJpc3RhdGUgXCYjMzQ7R2FkZ2V0IEZpbGVzeXN0ZW1cJiMzNDtcbiAyMDg6XHRcdGhlbHBcbiAyMDk6XHRcdCAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBmaWxlc3lzdGVtIGJhc2VkIEFQSSB0aGF0IGxldHMgdXNlciBtb2RlXG4gMjEwOlx0XHQgIHByb2dyYW1zIGltcGxlbWVudCBhIHNpbmdsZS1jb25maWd1cmF0aW9uIFVTQiBkZXZpY2UsIGluY2x1ZGluZ1xuIDIxMTpcdFx0ICBlbmRwb2ludCBJL08gYW5kIGNvbnRyb2wgcmVxdWVzdHMgdGhhdCBkb24mIzM5O3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxuIDIxMjpcdFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcbiAyMTM6XHRcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxuIDIxNDpcdFxuIDIxNTpcdFx0ICBTYXkgXCYjMzQ7eVwmIzM0OyB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgXCYjMzQ7bVwmIzM0OyB0byBidWlsZCBhXG4gMjE2Olx0XHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFwmIzM0O2dhZGdldGZzXCYjMzQ7LlxuIDIxNzpcdFxuIDIxODpcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xuIDIxOTpcdFx0dHJpc3RhdGUgXCYjMzQ7RnVuY3Rpb24gRmlsZXN5c3RlbVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEzMAoJCQkJCQkJb3V0cHV0OiAxMDAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkVsaW1pbmF0aW5nIEV4dHJhbmVvdXMgQ29tcGxleGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwcm9ibGVtLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gemVyb2luZyBpbiBvbiBpcyB0aGUgcG90ZW50aWFsIGZvciBleHRlcm5hbCBkZXBlbmRlbmNpZXMuICBNeSBicmFpbiBpbW1lZGlhdGVseSBzY2FucyBmb3IgYW55dGhpbmcgSSBtaWdodCBiZSByZWx5aW5nIG9uIG91dHNpZGUgb2YgdGhlIGltbWVkaWF0ZSBzY29wZSwgYW55IGxpYnJhcmllcyBvciBleHRlcm5hbCBBUElzIHRoYXQgY291bGQgaW50cm9kdWNlIGZyYWdpbGl0eSBvciB1bm5lY2Vzc2FyeSBvdmVyaGVhZC4gVGhhbmtmdWxseSwgaXQmIzM5O3MgY2xlYXIgdGhlcmUgYXJlICpubyogb3RoZXIgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGZhbnRhc3RpYzsgaXQgc2ltcGxpZmllcyB0aGUgYW5hbHlzaXMgY29uc2lkZXJhYmx5LiBUaGUgY2xlYW5lciB0aGUgc29sdXRpb24sIHRoZSBiZXR0ZXIuCgpOb3csIHdpdGggZGVwZW5kZW5jaWVzIG91dCBvZiB0aGUgd2F5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIGxvZ2ljIGFuZCB0aGUgY3J1Y2lhbCBwYXJ0IG9mIHRoaXMgcHJvY2Vzcy4gVGhlIG5leHQgc3RlcCBpcyBjbGVhcmx5IHRvLCBjYWxsIHRoYXQgYHNldC1yZXN1bHRzYCBmdW5jdGlvbiBvciB3aGF0ZXZlciBpdCYjMzk7cyBjYWxsZWQuIFRoaXMgaXMgdGhlIGx5bmNocGluLCB0aGUgZnVuY3Rpb24gdGhhdCB3aWxsIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIHJlbGV2YW50LiBUaGF0JiMzOTtzIHdoYXQgSSBhbSBmb2N1c2VkIG9uIGF0IHRoaXMgbW9tZW50LgoKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9HQURHRVQmIzM0OywKICAgICYjMzQ7VVNCX0dBREdFVEZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2FkZ2V0X2Rldl9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgaW9jdGwgaGFuZGxlciBvZiBnYWRnZXRmcyBieSBmZXRjaGluZyB0aGUgZ2FkZ2V0IHBvaW50ZXIgdW5kZXIgdGhlIGRldmljZSBsb2NrIGFuZCBjaGVja2luZyBpdCBmb3IgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfR0FER0VUJiMzNDssCiAgICAmIzM0O1VTQl9HQURHRVRGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dhZGdldF9kZXZfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIGlvY3RsIGhhbmRsZXIgb2YgZ2FkZ2V0ZnMgYnkgZmV0Y2hpbmcgdGhlIGdhZGdldCBwb2ludGVyIHVuZGVyIHRoZSBkZXZpY2UgbG9jayBhbmQgY2hlY2tpbmcgaXQgZm9yIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVx1MDAzZWdhZGdldGAgd2FzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIGBkZXYtXHUwMDNlbG9ja2Agc3BpbmxvY2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGRldi1cdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJkNzkxMjE4ZWJjNjg4MzcwOTJmODg1N2M2MTU1NzMyNmFiOTQzYWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAxMTo0Nzo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYwppbmRleCBkODdhOGFiNTE1MTA3Li5lOWY3ZDdjMWE2YTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jCkBAIC0xMjUxLDE0ICYjNDM7MTI1MSwxNSBAQCBlcDBfcG9sbCAoc3RydWN0IGZpbGUgKmZkLCBwb2xsX3RhYmxlICp3YWl0KQogc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGZkLSZndDtwcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGRldi0mZ3Q7Z2FkZ2V0OwomIzQzOwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OwogCWxvbmcgcmV0ID0gLUVOT1RUWTsKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtkZXYtJmd0O2xvY2spOwomIzQzOwlnYWRnZXQgPSBkZXYtJmd0O2dhZGdldDsKIAlpZiAoZGV2LSZndDtzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8CiAJCQlkZXYtJmd0O3N0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7CiAJCS8qIE5vdCBib3VuZCB0byBhIFVEQyAqLwotCX0gZWxzZSBpZiAoZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsKSB7CiYjNDM7CX0gZWxzZSBpZiAoZ2FkZ2V0ICZhbXA7JmFtcDsgZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsKSB7CiAJCSYjNDM7JiM0MztkZXYtJmd0O3VkY191c2FnZTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7ZGV2LSZndDtsb2NrKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyMgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBVU0IgR2FkZ2V0IERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGdhZGdldF9kZXZfaW9jdGxgIGluIGBpbm9kZS5jYCB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgbGVnYWN5IGRyaXZlci4gSXQmIzM5O3MgbWFraW5nIGEgc2VlbWluZ2x5IHNtYWxsIGJ1dCBwb3RlbnRpYWxseSBjcnVjaWFsIGNoYW5nZS4gRmlyc3QsIHRoZXkmIzM5O3ZlIG1vdmVkIHRoZSBhc3NpZ25tZW50IG9mIGBnYWRnZXQgPSBkZXYtJmd0O2dhZGdldDtgIGluc2lkZSBhIGBzcGluX2xvY2tfaXJxKCZhbXA7ZGV2LSZndDtsb2NrKTtgIGJsb2NrLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlOyB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gYGRldi0mZ3Q7Z2FkZ2V0YC4gVGhlIGxvY2sgc3VnZ2VzdHMgdGhhdCBgZ2FkZ2V0YCBtaWdodCBiZSBtb2RpZmllZCBlbHNld2hlcmUgY29uY3VycmVudGx5LCBhbmQgdGhpcyBjaGFuZ2UgYWltcyB0byBlbnN1cmUgdGhhdCBhY2Nlc3MgaXMgc2VyaWFsaXplZC4KClNlY29uZGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIE5VTEwgY2hlY2s6IGBnYWRnZXQgJmFtcDsmYW1wOyBnYWRnZXQtJmd0O29wcy0mZ3Q7aW9jdGxgIGJlZm9yZSB0aGUgYWN0dWFsIGBnYWRnZXQtJmd0O29wcy0mZ3Q7aW9jdGxgIGNhbGwuIFRoYXQgc2NyZWFtcyAmIzM0O251bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcm90ZWN0aW9uJiMzNDsgdG8gbWUuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoYXQgdGhleSYjMzk7dmUgZm91bmQgYSBzY2VuYXJpbyB3aGVyZSBgZ2FkZ2V0YCBjb3VsZCBiZSBOVUxMLCBvciBwZXJoYXBzIGV2ZW4gd29yc2UsIHRoYXQgYGdhZGdldC0mZ3Q7b3BzYCBjb3VsZCBiZSB1bmluaXRpYWxpemVkIG9yIE5VTEwuIE1heWJlIHRoZSBnYWRnZXQgZ2V0cyB1bmJvdW5kL2Rpc2Nvbm5lY3RlZCBpbiBhIHJhY2UgY29uZGl0aW9uLiBUaGlzIGxvb2tzIGxpa2UgZWl0aGVyIGEgZml4IGZvciBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBvciBzb21lIGtpbmQgb2YgcmFjZSBjb25kaXRpb24gd2hlcmUgYGRldi0mZ3Q7Z2FkZ2V0YCBpcyBhY2Nlc3NlZCBiZWZvcmUgaXQmIzM5O3MgZnVsbHkgaW5pdGlhbGl6ZWQgb3Igd2hpbGUgaXQmIzM5O3MgYmVpbmcgZGVhbGxvY2F0ZWQgb3IgbW9kaWZpZWQgaW4gYW5vdGhlciB0aHJlYWQuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgbG9jayBhbmQgdGhlIE5VTEwgY2hlY2sgc3RyZW5ndGhlbnMgdGhhdCBhc3N1bXB0aW9uLgoKSSYjMzk7ZCBiZXR0ZXIgZ28gZGVlcGVyIGFuZCBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB0byBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlIGNvbnRleHQgYW5kIHRoZSBleGFjdCBuYXR1cmUgb2YgdGhlIHZ1bG5lcmFiaWxpdHkuIFdlIG5lZWQgdG8gdHJhY2UgYWxsIHBvc3NpYmxlIGV4ZWN1dGlvbiBwYXRocy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEyNDU6XHRcdH1cbjEyNDY6XHRvdXQ6XG4xMjQ3Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2ZGV2LVx1MDAzZWxvY2spO1xuMTI0ODpcdFx0cmV0dXJuIG1hc2s7XG4xMjQ5Olx0fVxuMTI1MDpcdFxuMTI1MTpcdHN0YXRpYyBsb25nIGdhZGdldF9kZXZfaW9jdGwgKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbjEyNTI6XHR7XG4xMjUzOlx0XHRzdHJ1Y3QgZGV2X2RhdGFcdFx0KmRldiA9IGZkLVx1MDAzZXByaXZhdGVfZGF0YTtcbjEyNTQ6XHRcdHN0cnVjdCB1c2JfZ2FkZ2V0XHQqZ2FkZ2V0O1xuMTI1NTpcdFx0bG9uZyByZXQgPSAtRU5PVFRZO1xuMTI1NjpcdFxuMTI1NzpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4xMjU4Olx0XHRnYWRnZXQgPSBkZXYtXHUwMDNlZ2FkZ2V0O1xuMTI1OTpcdFx0aWYgKGRldi1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8XG4xMjYwOlx0XHRcdFx0ZGV2LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7XG4xMjYxOlx0XHRcdC8qIE5vdCBib3VuZCB0byBhIFVEQyAqL1xuMTI2MjpcdFx0fSBlbHNlIGlmIChnYWRnZXQgXHUwMDI2XHUwMDI2IGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpIHtcbjEyNjM6XHRcdFx0JiM0MzsmIzQzO2Rldi1cdTAwM2V1ZGNfdXNhZ2U7XG4xMjY0Olx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4xMjY1Olx0XG4xMjY2Olx0XHRcdHJldCA9IGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGwgKGdhZGdldCwgY29kZSwgdmFsdWUpO1xuMTI2NzpcdFxuMTI2ODpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbjEyNjk6XHRcdFx0LS1kZXYtXHUwMDNldWRjX3VzYWdlO1xuMTI3MDpcdFx0fVxuMTI3MTpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbjEyNzI6XHRcbjEyNzM6XHRcdHJldHVybiByZXQ7XG4xMjc0Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDkxCgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IHNhZmV0eSBpc3N1ZSB3aXRoaW4gdGhlIGdhZGdldCBkcml2ZXIuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGlzIGEgcmFjZSBjb25kaXRpb246IHNwZWNpZmljYWxseSwgYSBzaXR1YXRpb24gd2hlcmUgYGRldi0mZ3Q7Z2FkZ2V0YCBjYW4gYmUgYWNjZXNzZWQgYW5kIHBvdGVudGlhbGx5IGJlIGBOVUxMYCBvciBtb2RpZmllZCBhdCB0aGUgc2FtZSB0aW1lIGFzIGFub3RoZXIgdGhyZWFkIGlzIHVzaW5nIGl0LCB3aGljaCBpcyBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIG9yIGV2ZW4gYSB1c2UtYWZ0ZXItZnJlZSB3aGVuIHRoZSBgZ2FkZ2V0LSZndDtvcHMtJmd0O2lvY3RsYCBmdW5jdGlvbiBpcyBjYWxsZWQuCgpUaGUgZml4IGl0c2VsZiBpcyBwcmV0dHkgc3RhbmRhcmQgZm9yIHRoZXNlIHR5cGVzIG9mIGlzc3Vlcy4gVGhleSYjMzk7cmUgbW92aW5nIHRoZSBhY2Nlc3MgdG8gYGRldi0mZ3Q7Z2FkZ2V0YCB3aXRoaW4gYSBzcGlubG9jayAoYGRldi0mZ3Q7bG9ja2ApIHRvIHByb3RlY3QgaXQgZnJvbSBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMuIFRoZXkgYXJlIGFsc28gaW1wbGVtZW50aW5nIGEgTlVMTCBjaGVjayB0byBlbnN1cmUgYGdhZGdldGAgaXNuJiMzOTt0IGFjY2Vzc2VkIGJlZm9yZSBpdCYjMzk7cyBiZWVuIGluaXRpYWxpemVkLCB3aGljaCBpcyBjcnVjaWFsLgoKRnJvbSBhIGRlYnVnZ2luZyBwZXJzcGVjdGl2ZSwgdGhpcyB0eXBlIG9mIGJ1ZyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIHdvdWxkIGhhdmUgY2F1Z2h0IGR1cmluZyB0ZXN0aW5nLCBwYXJ0aWN1bGFybHkgaWYgaXQgd2FzIGEgdXNlLWFmdGVyLWZyZWUsIHdoaWNoIHdvdWxkIGZsYWcgdGhlIG1lbW9yeSBjb3JydXB0aW9uIGluIHRoZSBzZWNvbmQgaXNzdWUsIGFsb25nIHdpdGggcmVndWxhciBidWcgZGV0ZWN0b3JzLiBTdGFuZGFyZCBrZXJuZWwgZXJyb3IgaGFuZGxpbmcsIGxpa2UgdGhlIGhhcmR3YXJlJiMzOTtzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcm90ZWN0aW9uLCB3b3VsZCBhbHNvIGNhdGNoIHRoZSBjcmFzaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gQmVjYXVzZSBpdCYjMzk7cyBhIE5VTEwgZGVyZWZlcmVuY2Ugb3IgdXNlLWFmdGVyLWZyZWUsIEtNU0FOIGlzIG92ZXJraWxsIGhlcmUgYW5kIHdvdWxkbiYjMzk7dCBwcm92aWRlIGFueXRoaW5nIGJleW9uZCB3aGF0IHRoZSBvdGhlciB0b29scyBjYW4uIEl0JiMzOTtzIGEgY29uY3VycmVuY3kgaXNzdWUgY291cGxlZCB3aXRoIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IHByb2JsZW0sIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgc2l0dWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAxMTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVx1MDAzZWdhZGdldGAgd2FzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIGBkZXYtXHUwMDNlbG9ja2Agc3BpbmxvY2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGRldi1cdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVx1MDAzZWdhZGdldGAgd2FzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIGBkZXYtXHUwMDNlbG9ja2Agc3BpbmxvY2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGRldi1cdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ3OjU0LjY0NzM4Nzc1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjk1NzIwMTM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfR0FER0VUXCIsXG4gICAgXCJVU0JfR0FER0VURlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnYWRnZXRfZGV2X2lvY3RsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVxcdTAwM2VnYWRnZXRgIHdhcyBhY2Nlc3NlZCBvdXRzaWRlIG9mIHRoZSBgZGV2LVxcdTAwM2Vsb2NrYCBzcGlubG9jaywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgZGV2LVxcdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgdXNlLWFmdGVyLWZyZWUgaW4gdGhlIGlvY3RsIGhhbmRsZXIgb2YgZ2FkZ2V0ZnMgYnkgZmV0Y2hpbmcgdGhlIGdhZGdldCBwb2ludGVyIHVuZGVyIHRoZSBkZXZpY2UgbG9jayBhbmQgY2hlY2tpbmcgaXQgZm9yIE5VTEwuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDc6NTQuNjQ3MzkyMjc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjUyMzQ4ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAyZDc5MTIxOGViYzY4ODM3MDkyZjg4NTdjNjE1NTczMjZhYjk0M2FlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDI1IDExOjQ3OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xcbmluZGV4IGQ4N2E4YWI1MTUxMDcuLmU5ZjdkN2MxYTZhM2QgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXFxuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXFxuQEAgLTEyNTEsMTQgKzEyNTEsMTUgQEAgZXAwX3BvbGwgKHN0cnVjdCBmaWxlICpmZCwgcG9sbF90YWJsZSAqd2FpdClcXG4gc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxcbiB7XFxuIFxcdHN0cnVjdCBkZXZfZGF0YVxcdFxcdCpkZXYgPSBmZC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbi1cXHRzdHJ1Y3QgdXNiX2dhZGdldFxcdCpnYWRnZXQgPSBkZXYtXFx1MDAzZWdhZGdldDtcXG4rXFx0c3RydWN0IHVzYl9nYWRnZXRcXHQqZ2FkZ2V0O1xcbiBcXHRsb25nIHJldCA9IC1FTk9UVFk7XFxuIFxcbiBcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRnYWRnZXQgPSBkZXYtXFx1MDAzZWdhZGdldDtcXG4gXFx0aWYgKGRldi1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX09QRU5FRCB8fFxcbiBcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7XFxuIFxcdFxcdC8qIE5vdCBib3VuZCB0byBhIFVEQyAqL1xcbi1cXHR9IGVsc2UgaWYgKGdhZGdldC1cXHUwMDNlb3BzLVxcdTAwM2Vpb2N0bCkge1xcbitcXHR9IGVsc2UgaWYgKGdhZGdldCBcXHUwMDI2XFx1MDAyNiBnYWRnZXQtXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwpIHtcXG4gXFx0XFx0KytkZXYtXFx1MDAzZXVkY191c2FnZTtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDc6NTUuNDEzMjYzMjU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODk4Mjk0Mjk0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0dBREdFVFwiLFxuICAgIFwiVVNCX0dBREdFVEZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2FkZ2V0X2Rldl9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIG9yIHVzZS1hZnRlci1mcmVlIGluIHRoZSBpb2N0bCBoYW5kbGVyIG9mIGdhZGdldGZzIGJ5IGZldGNoaW5nIHRoZSBnYWRnZXQgcG9pbnRlciB1bmRlciB0aGUgZGV2aWNlIGxvY2sgYW5kIGNoZWNraW5nIGl0IGZvciBOVUxMLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDJkNzkxMjE4ZWJjNjg4MzcwOTJmODg1N2M2MTU1NzMyNmFiOTQzYWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAyNSAxMTo0Nzo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuaW5kZXggZDg3YThhYjUxNTEwNy4uZTlmN2Q3YzFhNmEzZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1xuKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5AQCAtMTI1MSwxNCArMTI1MSwxNSBAQCBlcDBfcG9sbCAoc3RydWN0IGZpbGUgKmZkLCBwb2xsX3RhYmxlICp3YWl0KVxuIHN0YXRpYyBsb25nIGdhZGdldF9kZXZfaW9jdGwgKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcbiB7XG4gXHRzdHJ1Y3QgZGV2X2RhdGFcdFx0KmRldiA9IGZkLVx1MDAzZXByaXZhdGVfZGF0YTtcbi1cdHN0cnVjdCB1c2JfZ2FkZ2V0XHQqZ2FkZ2V0ID0gZGV2LVx1MDAzZWdhZGdldDtcbitcdHN0cnVjdCB1c2JfZ2FkZ2V0XHQqZ2FkZ2V0O1xuIFx0bG9uZyByZXQgPSAtRU5PVFRZO1xuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4rXHRnYWRnZXQgPSBkZXYtXHUwMDNlZ2FkZ2V0O1xuIFx0aWYgKGRldi1cdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8XG4gXHRcdFx0ZGV2LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7XG4gXHRcdC8qIE5vdCBib3VuZCB0byBhIFVEQyAqL1xuLVx0fSBlbHNlIGlmIChnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsKSB7XG4rXHR9IGVsc2UgaWYgKGdhZGdldCBcdTAwMjZcdTAwMjYgZ2FkZ2V0LVx1MDAzZW9wcy1cdTAwM2Vpb2N0bCkge1xuIFx0XHQrK2Rldi1cdTAwM2V1ZGNfdXNhZ2U7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZkZXYtXHUwMDNlbG9jayk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0Nzo1NS40MTMyNjQ3MTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzkzMzQ5ODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGdhZGdldF9kZXZfaW9jdGxgIGZ1bmN0aW9uLiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBoZXJlIOKAkyBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBhIHVzZS1hZnRlci1mcmVlLCBvciBwb3NzaWJseSBldmVuIGEgcmFjZSBjb25kaXRpb24uIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBwdWxsaW5nIHRoZSBgZ2FkZ2V0YCBwb2ludGVyIGZyb20gdGhlIGBkZXZgIHN0cnVjdHVyZSAqYmVmb3JlKiBncmFiYmluZyB0aGUgbG9jaywgd2hpY2ggaXMgYSBiaWcgbm8tbm8sIGFuZCBjb3VsZCBhbGxvdyBmb3IgZWl0aGVyIG9mIHRoZSB0d28gc2NlbmFyaW9zIHRvIGhhcHBlbi5cblxuVGhlIGZpeCBpcyBzdHJhaWdodGZvcndhcmQsIGJ1dCBjbGV2ZXI6IGl0IG1vdmVzIHRoZSBhc3NpZ25tZW50IG9mIGBnYWRnZXRgIHRvIGFmdGVyIHRoZSBgc3Bpbl9sb2NrX2lycWAuIFRoaXMgZW5zdXJlcyB0aGUgYGdhZGdldGAgcG9pbnRlciBpcyB2YWxpZCBhbmQgY29uc2lzdGVudCB3aXRoaW4gdGhlIGNyaXRpY2FsIHNlY3Rpb24uIFRoZW4gdGhlIGNvbmRpdGlvbmFsIHRoYXQgY2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgYGdhZGdldGAgaXMgbW9kaWZpZWQgdG8gY2hlY2sgd2hldGhlciBvciBub3QgYGdhZGdldGAgaXMgbnVsbCBiZWZvcmUgZGVyZWZlcmVuY2luZyBpdC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGZvciBhbnkgcGF0Y2ggbGlrZSB0aGlzIGlzOiBpcyB0aGlzIHJlYWNoYWJsZT8gQW5kIGFmdGVyIHRoaW5raW5nIGFib3V0IGl0IGZvciBhIHNlY29uZCwgSSByZWFsaXplIHllcywgdGhlIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eSBpcyBpbmRlZWQgcmVhY2hhYmxlIHRocm91Z2ggZW11bGF0aW9uLCBsaWtlIHdpdGggYSBkdW1teV9oY2Qgb3Igb3RoZXIgc29mdHdhcmUtYmFzZWQgc29sdXRpb25zLiBTbyB0aGlzIGlzIGFjdHVhbGx5IGEgc2lnbmlmaWNhbnQgZml4LCBhbmQgcG90ZW50aWFsbHkgcHJldmVudHMgYSBjcmFzaCBpbiBlbXVsYXRlZCBlbnZpcm9ubWVudHMuXG5cblRpbWUgdG8gZmluZCB0aGUgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIHRvIGJlIGNvbXBsZXRlbHkgc3VyZSBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBhc3BlY3RzLiBUaGlzIG5lZWRzIHRvIGJlIGNoZWNrZWQgYW5kIGFwcHJvdmVkIGZvciBhIHJlbGVhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0ODowMi4yMDY2MTcxMjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwOTc5NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2FkZ2V0X2Rldl9pb2N0bFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jPTEyMjA9ZXAwX3BvbGwgKHN0cnVjdCBmaWxlICpmZCwgcG9sbF90YWJsZSAqd2FpdClcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xMjUwLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYzoxMjUxOnN0YXRpYyBsb25nIGdhZGdldF9kZXZfaW9jdGwgKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMTI1Mi17XFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MTkzMj1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTM4LVxcdC5wb2xsID1cXHRcXHRlcDBfcG9sbCxcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM6MTkzOTpcXHQudW5sb2NrZWRfaW9jdGwgPSBnYWRnZXRfZGV2X2lvY3RsLFxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0xOTQwLVxcdC5yZWxlYXNlID1cXHRkZXZfcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MDIuMjU0NzE5Nzg5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwMDE2OTU5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgYGlub2RlLmNgIEtjb25maWcqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZm9yIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgYXMgdGhleSBzYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYnVpbGQgc3lzdGVtIGludGVncmF0ZXMgdGhpcyBsZWdhY3kgaW5vZGUtYmFzZWQgVVNCIGdhZGdldCBkcml2ZXIuIFRoaXMgc3BlY2lmaWMgZmlsZSBhbmQgaXRzIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGxpa2VseSBjb250cm9sIGZlYXR1cmVzIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gaW50ZXJhY3Rpb25zIG92ZXIgdGhlIFVTQiBnYWRnZXQgaW50ZXJmYWNlLiBJIG5lZWQgdG8gc2VlIHdoaWNoIGRldmljZSB0eXBlcyBhcmUgc3VwcG9ydGVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdC4gQXJlIHdlIGRlYWxpbmcgd2l0aCBtYXNzIHN0b3JhZ2UsIG1heWJlIGEgbmV0d29yayBpbnRlcmZhY2UsIG9yIHNvbWV0aGluZyBtb3JlIHNwZWNpYWxpemVkPyBJcyB0aGlzIG1vZHVsZSBldmVuIGVuYWJsZWQgYnkgZGVmYXVsdD8gQXJlIHRoZXJlIGNvbXBpbGUtdGltZSBvcHRpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLCBsaWtlIGRlYnVnIGZsYWdzIG9yIHNwZWNpZmljIGZlYXR1cmUgdG9nZ2xlcz8gVGhlIEtjb25maWcgZmlsZSB3aWxsIHJldmVhbCB0aGUgbG9naWMgYmVoaW5kIGFsbCBvZiB0aGlzLCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gcnVsZXMsIGFuZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBzZWUgd2hhdCB3ZSdyZSBhY3R1YWxseSBidWlsZGluZyBhbmQgd2hhdCB0aGUgb3B0aW9ucyBhcmUgdG8gdGFpbG9yIHRoaXMgZHJpdmVyIHRvIHNwZWNpZmljIHVzZSBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA0NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjA1Ljc1NDg5MTAyM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk0MzIyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbm9kZVxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGU9MTQ9Z19taWRpLXlcXHRcXHRcXHQ6PSBnbWlkaS5vXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9NYWtlZmlsZToxNTpnYWRnZXRmcy15XFx0XFx0XFx0Oj0gaW5vZGUub1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvTWFrZWZpbGUtMTYtZ19tYXNzX3N0b3JhZ2UteVxcdFxcdDo9IG1hc3Nfc3RvcmFnZS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjA1LjgwNDgzNzAwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjM3MzYxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgVVNCIEdhZGdldCBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgVVNCIGdhZGdldCBmdW5jdGlvbmFsaXR5IHJlc2lkZS4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGlzIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYCBmaWxlLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSB0cmFkaXRpb25hbCwgb3IgbGVnYWN5LCBVU0IgZ2FkZ2V0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbG9jYXRlZC4gTGV0J3MgZGl2ZSBpbiBhbmQgY29uZmlybSB0aGF0IGBnYWRnZXRmc2AgaXMgZGVmaW5lZCB0aGVyZTsgdGhhdCdsbCBnaXZlIG1lIGEgc29saWQgZ3JvdW5kaW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBsYW5kc2NhcGUgZm9yIHRoZXNlIFVTQiBnYWRnZXQgZmVhdHVyZXMuIFRpbWUgdG8gdmVyaWZ5IVxuXG5cbiIsIklucHV0VG9rZW5zIjozNDExLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MDkuNTI4NTc1Mzk3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1OTI3OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfR0FER0VURlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZz0xOTA9Y29uZmlnIFVTQl9HX05DTVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnLTIwNS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWc6MjA2OmNvbmZpZyBVU0JfR0FER0VURlNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA3LVxcdHRyaXN0YXRlIFxcXCJHYWRnZXQgRmlsZXN5c3RlbVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MDkuNTc0NTA3NzQ0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk3MTk4MTI4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRob3NlIGRlcGVuZGVuY2llczpcblxuKipBbmFseXppbmcgdGhlIGBVU0JfR0FER0VURlNgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBgVVNCX0dBREdFVEZTYC4gVGhhdCdzIGEga2V5IHBpZWNlIGluIHRoZSBwdXp6bGUgb2YgcHJvdmlkaW5nIFVTQiBkZXZpY2UgZnVuY3Rpb25hbGl0eSBpbiB0aGUga2VybmVsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlICpmb3VuZGF0aW9uYWwqIGJ1aWxkaW5nIGJsb2NrcyB0aGlzIHJlbGllcyB1cG9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIHRvIHByb3Blcmx5IGNvbmZpZ3VyZSwgZGVidWcsIGFuZCBldmVuIG9wdGltaXplIGFueXRoaW5nIHVzaW5nIEdhZGdldEZTLlxuXG5JJ20gdGhpbmtpbmcsIG9mZiB0aGUgdG9wIG9mIG15IGhlYWQsIHdlJ2xsIG5lZWQgY29yZSBVU0IgaW5mcmFzdHJ1Y3R1cmUgLSB0aGUgVVNCIGNvcmUgaXRzZWxmLCBvZiBjb3Vyc2UuIFRoYXQncyBhIGdpdmVuLiBUaGVuIHRoZXJlJ3MgdGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZnJhbWV3b3JrLCBvciwgbW9yZSBzcGVjaWZpY2FsbHkgaW4gdGhpcyBjb250ZXh0LCB0aGUgKmRldmljZSogY29udHJvbGxlciBkcml2ZXIgZnJhbWV3b3JrLiBHYWRnZXRGUyBpcyBlbXVsYXRpbmcgYSBVU0IgZGV2aWNlLCBzbyBpdCBuZWVkcyB0byBpbnRlcmZhY2Ugd2l0aCB3aGF0ZXZlciBoYXJkd2FyZSBzdXBwb3J0cyB0aGF0IHJvbGUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc3BlY2lmaWMgaGFyZHdhcmUgb3IgYSBtb3JlIGdlbmVyaWMgYWJzdHJhY3Rpb24/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQuXG5cbknigJltIGFsc28gYXNzdW1pbmcgd2XigJlsbCBlbmNvdW50ZXIgZGVwZW5kZW5jaWVzIG9uIHRoZSBmaWxlIHN5c3RlbSBsYXllcnMgc2luY2UgR2FkZ2V0RlMgbGV2ZXJhZ2VzIGZpbGUgc3lzdGVtIHNlbWFudGljcyBmb3IgaXRzIGRldmljZSBlbXVsYXRpb24uIFdoYXQgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQ/IEJ1ZmZlcnMgZm9yIHRyYW5zZmVycywgbGlrZWx5IGEgZmV3IGtlcm5lbCBjb25maWd1cmF0aW9ucyBmb3IgdGhhdC5cblxuSXQncyBhIHByb2Nlc3Mgb2YgZWxpbWluYXRpb247IGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gZG8gc28uIExldCdzIHNlZSBob3cgZGVlcCB0aGVzZSBkZXBlbmRlbmNpZXMgZ28sIGFuZCBob3cgbXVjaCB0aGV5IGludGVybWluZ2xlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMsIHRoZSBkZXZpY2UgdHJlZSBiaW5kaW5ncywgYW5kIG1heWJlIGV2ZW4gc29tZSBhY3R1YWwgY29kZSB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlLiBUaGlzIHF1aWNrIGFzc2Vzc21lbnQgd2lsbCByZXZlYWwgd2hpY2ggcGllY2VzIGFyZSBzb2xpZCBhbmQgd2hpY2ggb25lcyBhcmUgcG90ZW50aWFsbHkgZ29pbmcgdG8gZ2l2ZSBtZSBoZWFkYWNoZXMgZG93biB0aGUgbGluZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzcxMiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjEzLjU0NjQ5MTU1M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3MjY0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFVTQl9HQURHRVRGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnPTE5MD1jb25maWcgVVNCX0dfTkNNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWctMjA1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZzoyMDY6Y29uZmlnIFVTQl9HQURHRVRGU1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZy0yMDctXFx0dHJpc3RhdGUgXFxcIkdhZGdldCBGaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0ODoxMy41OTIyMjM3OFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTE2NzYyNzYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGlzLiBJIHJlbWVtYmVyIHdlIHdlcmUgZGlzY3Vzc2luZyB0aGUgbGVnYWN5IFVTQiBnYWRnZXQgY29uZmlndXJhdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3lgIGRpcmVjdG9yeS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXRhaWxzIG9mIHRoYXQgS2NvbmZpZyBmaWxlLiBMZXQncyBzZWUuLi4gYXJvdW5kIGxpbmUgMjA2IGlzIHdoZXJlIEkgcmVjYWxsIHNvbWV0aGluZyByZWxldmFudCBiZWluZyBkZWZpbmVkLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGV4YWN0IHNlY3Rpb24gd2Ugd2VyZSB3b3JraW5nIHdpdGggYW5kIHdoYXQgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGluZmx1ZW5jZWQuIExldCdzIGdldCB0aGUgZmlsZSBvcGVuIGFuZCBnZXQgdG8gdGhhdCBsaW5lIVxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MTcuMTA4OTg4NjQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0OTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0ICBvZiBzZXZlcmFsIGV0aGVybmV0IGZyYW1lcyBpbnRvIG9uZSBVU0IgdHJhbnNmZXIgYW5kIGRpZmZlcmVudFxcbiAyMDE6XFx0XFx0ICBhbGlnbm1lbnQgcG9zc2liaWxpdGllcy5cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiAyMDQ6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ19uY21cXFwiLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgVVNCX0dBREdFVEZTXFxuIDIwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2FkZ2V0IEZpbGVzeXN0ZW1cXFwiXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxcbiAyMTA6XFx0XFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcXG4gMjExOlxcdFxcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxcbiAyMTI6XFx0XFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG4gMjEzOlxcdFxcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIFNheSBcXFwieVxcXCIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFxcXCJtXFxcIiB0byBidWlsZCBhXFxuIDIxNjpcXHRcXHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFxcXCJnYWRnZXRmc1xcXCIuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xcbiAyMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkZ1bmN0aW9uIEZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjE3LjEwOTA1NDY1M1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzgwNzY2NjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZyBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGl0J3Mgc2V0IHRvIGBVU0JfR0FER0VURlNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiUmlnaHQsIGBVU0JfR0FER0VURlNg4oCmIHRoYXQncyBmb3IgdXNlcnNwYWNlIGdhZGdldCBmdW5jdGlvbmFsaXR5LCBpc24ndCBpdD9cIi4gVGhlbiwgYSBxdWVzdGlvbiBwb3BzIGludG8gbXkgbWluZDogaXMgYFVTQl9HQURHRVRGU2AgY29udGluZ2VudCBvbiBgVVNCX0dBREdFVGA/IEl0IHNlZW1zIGxvZ2ljYWxseSBzb3VuZDsgSSBtZWFuLCB5b3UnZCB0aGluayB0aGUgdXNlciBzcGFjZSB0aGluZyB3b3VsZCBkZXBlbmQgb24gdGhlIGJhc2UgZ2FkZ2V0IGluZnJhc3RydWN0dXJlLiBCZXR0ZXIgdG8gYmUgc3VyZS4gVGltZSB0byBnbyB0byB0aGUgc291cmNlLiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnYCBmaWxlLiBJJ2xsIHNjYW4gdGhlIHRvcCwgcXVpY2tseSwgYW5kIHNlZSBpZiB0aGVyZSBhcmUgYW55IGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMgdGhhdCBqdW1wIG91dCBhdCBtZS4gR290dGEgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgaW4gcGxhY2UgdG8gbWluaW1pemUgZGVidWdnaW5nIGxhdGVyLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgdGhlIHVuZGVybHlpbmcgZmVhdHVyZXMgb2YgdGhlIGtlcm5lbCBhcmUgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MjAuODg5ODIzMzM2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgVVNCIEdhZGdldCBzdXBwb3J0IG9uIGEgc3lzdGVtIGludm9sdmVzXFxuICAgNDpcXHQjICAgIChhKSBhIHBlcmlwaGVyYWwgY29udHJvbGxlciwgYW5kXFxuICAgNTpcXHQjICAgIChiKSB0aGUgZ2FkZ2V0IGRyaXZlciB1c2luZyBpdC5cXG4gICA2OlxcdCNcXG4gICA3OlxcdCMgTk9URTogIEdhZGdldCBzdXBwb3J0ICoqIERPRVMgTk9UICoqIGRlcGVuZCBvbiBob3N0LXNpZGUgQ09ORklHX1VTQiAhIVxcbiAgIDg6XFx0I1xcbiAgIDk6XFx0IyAgLSBIb3N0IHN5c3RlbXMgKGxpa2UgUENzKSBuZWVkIENPTkZJR19VU0IgKHdpdGggXFxcIkFcXFwiIGphY2tzKS5cXG4gIDEwOlxcdCMgIC0gUGVyaXBoZXJhbHMgKGxpa2UgUERBcykgbmVlZCBDT05GSUdfVVNCX0dBREdFVCAod2l0aCBcXFwiQlxcXCIgamFja3MpLlxcbiAgMTE6XFx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxcbiAgMTI6XFx0I1xcbiAgMTM6XFx0IyBXaXRoIGhlbHAgZnJvbSBhIHNwZWNpYWwgdHJhbnNjZWl2ZXIgYW5kIGEgXFxcIk1pbmktQUJcXFwiIGphY2ssIHN5c3RlbXMgd2l0aFxcbiAgMTQ6XFx0IyBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXIgY2FuIGFsc28gc3VwcG9ydCBcXFwiVVNCIE9uLXRoZS1Hb1xcXCIgKENPTkZJR19VU0JfT1RHKS5cXG4gIDE1OlxcdCNcXG4gIDE2OlxcdCMgQSBMaW51eCBcXFwiR2FkZ2V0IERyaXZlclxcXCIgdGFsa3MgdG8gdGhlIFVTQiBQZXJpcGhlcmFsIENvbnRyb2xsZXJcXG4gIDE3OlxcdCMgZHJpdmVyIHRocm91Z2ggdGhlIGFic3RyYWN0IFxcXCJnYWRnZXRcXFwiIEFQSS4gIFNvbWUgb3RoZXIgb3BlcmF0aW5nXFxuICAxODpcXHQjIHN5c3RlbXMgY2FsbCB0aGVzZSBcXFwiY2xpZW50XFxcIiBkcml2ZXJzLCBvZiB3aGljaCBcXFwiY2xhc3MgZHJpdmVyc1xcXCJcXG4gIDE5OlxcdCMgYXJlIGEgc3Vic2V0IChpbXBsZW1lbnRpbmcgYSBVU0IgZGV2aWNlIGNsYXNzIHNwZWNpZmljYXRpb24pLlxcbiAgMjA6XFx0IyBBIGdhZGdldCBkcml2ZXIgaW1wbGVtZW50cyBvbmUgb3IgbW9yZSBVU0IgZnVuY3Rpb25zIHVzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjIwLjg4OTg5MzQ1NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjk1Mzc1OTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyB0aGUgVVNCIEdhZGdldCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgZm9yIFVTQiBnYWRnZXQgZnVuY3Rpb25hbGl0eS4gSSB3YW50IHRvIHNlZSB3aGF0IGZlYXR1cmVzIGFyZSBzZWxlY3RhYmxlLCB3aGF0IGRlcGVuZGVuY2llcyBleGlzdCwgYW5kIGhvdyB0aGUgdmFyaW91cyBnYWRnZXQgZHJpdmVycyBhcmUgZXhwb3NlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGJ1aWxkIG9wdGlvbnMgaGVyZSwgdGhlIGtub2JzIHRoYXQgSSBjYW4gdHdlYWsgdG8gdGFpbG9yIHRoZSBVU0IgZ2FkZ2V0IGNhcGFiaWxpdGllcyBmb3IgYSBzcGVjaWZpYyB1c2UgY2FzZSBvciBoYXJkd2FyZSBwbGF0Zm9ybS4gVGhpcyBmaWxlIGlzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnJlYWR0aCBvZiB0aGUgZ2FkZ2V0IHN1YnN5c3RlbSBhbmQgaG93IGRpZmZlcmVudCBnYWRnZXQgY29uZmlndXJhdGlvbnMgY2FuIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQuIEl0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBwb3NzaWJpbGl0aWVzIGFuZCBjb25zdHJhaW50cyB3aGVuIGJ1aWxkaW5nIGEgY3VzdG9tIFVTQiBHYWRnZXQgaW1wbGVtZW50YXRpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHN1cHBvcnQgZm9yIG1hc3Mgc3RvcmFnZSwgc2VyaWFsIHBvcnRzLCBuZXR3b3JrIGludGVyZmFjZXMsIGFuZCBwZXJoYXBzIGV2ZW4gY3VzdG9tIGZ1bmN0aW9ucy4gVGhpcyBpbml0aWFsIGFzc2Vzc21lbnQgaXMgY3J1Y2lhbCBiZWZvcmUgbW92aW5nIG9uIHRvIGluZGl2aWR1YWwgZHJpdmVyIGltcGxlbWVudGF0aW9ucyBvciB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjI0LjE4NTI3MTU2NVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NTQ1MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic291cmNlIFxcXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L0tjb25maWdcXFwiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnPTQ5NT1jb25maWcgVVNCX0NPTkZJR0ZTX0ZfVENNXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MDgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NTA5OnNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTUxMC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6MjQuMjM2MjMxNDAxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzODA3MDE1OTg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgVVNCIGdhZGdldCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExldCdzIHNlZS4uLiBJJ20gcHJldHR5IHN1cmUgdGhlIHJlbGV2YW50IHN0dWZmIGZvciB0aGlzIGxpdmVzIHdpdGhpbiB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9gIGRpcmVjdG9yeS4gUmlnaHQsIGFuZCBJIHJlbWVtYmVyIGBLY29uZmlnYCBmaWxlcyBhcmUgd2hlcmUgdGhlc2UgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWNsYXJlZC4gSSdtIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIHNvbWV0aGluZyBhcm91bmQgbGluZSA1MDkuIEknbGwgb3BlbiB0aGF0IGZpbGUgYW5kIHNlZSB3aGF0J3Mgd2hhdC4gSG9wZWZ1bGx5LCBJJ2xsIGZpbmQgdGhlIGluZm9ybWF0aW9uIEkgbmVlZCB0byBhZGRyZXNzIHRoZSBpc3N1ZSBJJ20gd29ya2luZyBvbi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzIyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6NDguMDQzMjQ5NDZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzk2NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDkwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDkwOlxcdFxcdCAgdGhlIGRldmljZSBmaWxlIHRvIGdldCBvciBzZXQgcHJpbnRlciBzdGF0dXMuXFxuIDQ5MTpcXHRcXG4gNDkyOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBEb2N1bWVudGF0aW9uL3VzYi9nYWRnZXRfcHJpbnRlci5yc3RcXG4gNDkzOlxcdFxcdCAgd2hpY2ggaW5jbHVkZXMgc2FtcGxlIGNvZGUgZm9yIGFjY2Vzc2luZyB0aGUgZGV2aWNlIGZpbGUuXFxuIDQ5NDpcXHRcXG4gNDk1OlxcdGNvbmZpZyBVU0JfQ09ORklHRlNfRl9UQ01cXG4gNDk2OlxcdFxcdGJvb2wgXFxcIlVTQiBHYWRnZXQgVGFyZ2V0IEZhYnJpY1xcXCJcXG4gNDk3OlxcdFxcdGRlcGVuZHMgb24gVEFSR0VUX0NPUkVcXG4gNDk4OlxcdFxcdGRlcGVuZHMgb24gVVNCX0NPTkZJR0ZTXFxuIDQ5OTpcXHRcXHRzZWxlY3QgVVNCX0xJQkNPTVBPU0lURVxcbiA1MDA6XFx0XFx0c2VsZWN0IFVTQl9GX1RDTVxcbiA1MDE6XFx0XFx0aGVscFxcbiA1MDI6XFx0XFx0ICBUaGlzIGZhYnJpYyBpcyBhIFVTQiBnYWRnZXQgY29tcG9uZW50LiBUd28gVVNCIHByb3RvY29scyBhcmVcXG4gNTAzOlxcdFxcdCAgc3VwcG9ydGVkIHRoYXQgaXMgQkJCIG9yIEJPVCAoQnVsayBPbmx5IFRyYW5zcG9ydCkgYW5kIFVBU1xcbiA1MDQ6XFx0XFx0ICAoVVNCIEF0dGFjaGVkIFNDU0kpLiBCT1QgaXMgYWR2ZXJ0aXNlZCBvbiBhbHRlcm5hdGl2ZVxcbiA1MDU6XFx0XFx0ICBpbnRlcmZhY2UgMCAocHJpbWFyeSkgYW5kIFVBUyBpcyBvbiBhbHRlcm5hdGl2ZSBpbnRlcmZhY2UgMS5cXG4gNTA2OlxcdFxcdCAgQm90aCBwcm90b2NvbHMgY2FuIHdvcmsgb24gVVNCMi4wIGFuZCBVU0IzLjAuXFxuIDUwNzpcXHRcXHQgIFVBUyB1dGlsaXplcyB0aGUgVVNCIDMuMCBmZWF0dXJlIGNhbGxlZCBzdHJlYW1zIHN1cHBvcnQuXFxuIDUwODpcXHRcXG4gNTA5OlxcdHNvdXJjZSBcXFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9LY29uZmlnXFxcIlxcbiA1MTA6XFx0XFxuIDUxMTpcXHRlbmRpZiAjIFVTQl9HQURHRVRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDg6NDguMDQzMzMyODVaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDkxNTgwOTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBVU0IgR2FkZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIGBVU0JfR0FER0VUYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhlIGJpZyBwYXJlbnQsIHRoZSB0aGluZyB0aGF0IGVuY29tcGFzc2VzIHRoZSB3aG9sZSBVU0IgZ2FkZ2V0IHN5c3RlbS4gVGhlbiwgYFVTQl9HQURHRVRGU2Agc3BlY2lmaWNhbGx5IGVuYWJsZXMgdGhlIGRyaXZlciBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGF0IGJyb2FkZXIgZnJhbWV3b3JrLiBOb3csIGhlcmUncyBhIGN1cnZlYmFsbC4uLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhhdCBgVVNCX0RVTU1ZX0hDRGAgaXMgYWxzbyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGNydWNpYWwgZm9yIGVtdWxhdGluZyB0aGUgYmVoYXZpb3Igb2YgYSBVU0IgZ2FkZ2V0LiBIb3dldmVyLCBpdCdzIGBVU0JfR0FER0VUYCBhbmQgYFVTQl9HQURHRVRGU2AgdGhhdCBhcmUgdGhlIHByaW1hcnkgZW5hYmxlcnMgb2YgdGhlIGNvcmUgY29kZSwgcmlnaHQ/XG5cbkFscmlnaHQsIG5leHQgc3RlcDogSSB3YW50IHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uIHJlZ2FyZGluZyB0aGUgcmVhY2hhYmlsaXR5IG9mIGBnYWRnZXRfZGV2X2lvY3RsYC4gVGltZSB0byBzZWUgaWYgdGhlIGtlcm5lbCBhY3R1YWxseSBjYWxscyB0aGlzIGZ1bmN0aW9uLiBBaGEhIEkndmUgY29uZmlybWVkIHRoYXQgYGdhZGdldF9kZXZfaW9jdGxgIGlzIGluZGVlZCB0aGUgYHVubG9ja2VkX2lvY3RsYCBmdW5jdGlvbiB0aWVkIHRvIGBlcDBfb3BlcmF0aW9uc2AuIEFuZCBub3cgdGhhdCBJIGhhdmUgdGhlIGxpbmssIEkgcmVtZW1iZXIgdGhhdCBgZXAwX29wZXJhdGlvbnNgIGlzIGRlZmluZWQgd2l0aGluIGBkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNgLiBUaGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoZSBlbmRwb2ludCB6ZXJvIG9wZXJhdGlvbnMgcmVzaWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ4OjUyLjk1OTE0NDU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDg2ODc1MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXAwX29wZXJhdGlvbnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYz0xOTE1PWdhZGdldF9kZXZfb3BlbiAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZkKVxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzEtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjE5MzI6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXAwX29wZXJhdGlvbnMgPSB7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jLTE5MzMtXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmM9MjAxNj1nYWRnZXRmc19maWxsX3N1cGVyIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmMtMjA1OS1cXHRkZXYtXFx1MDAzZXNiID0gc2I7XFxuZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jOjIwNjA6XFx0cmMgPSBnYWRnZXRmc19jcmVhdGVfZmlsZShzYiwgQ0hJUCwgZGV2LCBcXHUwMDI2ZXAwX29wZXJhdGlvbnMpO1xcbmRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuYy0yMDYxLVxcdGlmIChyYykge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0ODo1My4xNjc4MzY2ODVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMzODAzMjg3MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGdhZGdldGZzYCBpb2N0bCBIYW5kbGVyKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IHRoZSBgaW9jdGxgIGhhbmRsZXIsIHNwZWNpZmljYWxseSB0aGUgb25lIHJlc3BvbnNpYmxlIGZvciB0aGUgYENISVBgIGZpbGUgd2l0aGluIHRoZSBgZ2FkZ2V0ZnNgIGNvbnRleHQuIFRoZSBmYWN0IHRoYXQgc3l6a2FsbGVyIGlzIGxpa2VseSBhYmxlIHRvIHJlYWNoIHRoaXMgcG9pbnQgaXMgY3J1Y2lhbC4gSXQgbWVhbnMgd2UndmUgZ290IGEgcG90ZW50aWFsIHRhcmdldCBmb3IgZnV6emluZyBhbmQgZXhwbG9pdGluZyB2dWxuZXJhYmlsaXRpZXMuIE15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgdGhlIGBnYWRnZXRfZGV2X2lvY3RsYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBkaXNzZWN0IGV4YWN0bHkgd2hhdCBpdCBkb2VzLCB0aGUgb3BlcmF0aW9ucyBpdCBwZXJmb3JtcyBvbiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSAob3IgZW11bGF0ZWQgaGFyZHdhcmUgaW4gdGhpcyBjYXNlKSwgYW5kIHVuZGVyc3RhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBVU0IgZ2FkZ2V0IGZyYW1ld29yay4gV2UncmUgbG9va2luZyBmb3IgYW55IHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvd3MsIHJhY2UgY29uZGl0aW9ucywgYnVmZmVyIG92ZXJmbG93cywgdXNlLWFmdGVyLWZyZWVzLCBvciBhbnkgb3RoZXIgY2xhc3NpYyB2dWxuZXJhYmlsaXRpZXMuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMgLSBkZWVwIGRpdmluZyBpbnRvIHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2OTcwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MDYuNTQ4MTY3NjA2WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNjQ3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTI1MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTI1MDpcXHRcXG4xMjUxOlxcdHN0YXRpYyBsb25nIGdhZGdldF9kZXZfaW9jdGwgKHN0cnVjdCBmaWxlICpmZCwgdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSlcXG4xMjUyOlxcdHtcXG4xMjUzOlxcdFxcdHN0cnVjdCBkZXZfZGF0YVxcdFxcdCpkZXYgPSBmZC1cXHUwMDNlcHJpdmF0ZV9kYXRhO1xcbjEyNTQ6XFx0XFx0c3RydWN0IHVzYl9nYWRnZXRcXHQqZ2FkZ2V0O1xcbjEyNTU6XFx0XFx0bG9uZyByZXQgPSAtRU5PVFRZO1xcbjEyNTY6XFx0XFxuMTI1NzpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbjEyNTg6XFx0XFx0Z2FkZ2V0ID0gZGV2LVxcdTAwM2VnYWRnZXQ7XFxuMTI1OTpcXHRcXHRpZiAoZGV2LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfT1BFTkVEIHx8XFxuMTI2MDpcXHRcXHRcXHRcXHRkZXYtXFx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7XFxuMTI2MTpcXHRcXHRcXHQvKiBOb3QgYm91bmQgdG8gYSBVREMgKi9cXG4xMjYyOlxcdFxcdH0gZWxzZSBpZiAoZ2FkZ2V0IFxcdTAwMjZcXHUwMDI2IGdhZGdldC1cXHUwMDNlb3BzLVxcdTAwM2Vpb2N0bCkge1xcbjEyNjM6XFx0XFx0XFx0KytkZXYtXFx1MDAzZXVkY191c2FnZTtcXG4xMjY0OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4xMjY1OlxcdFxcbjEyNjY6XFx0XFx0XFx0cmV0ID0gZ2FkZ2V0LVxcdTAwM2VvcHMtXFx1MDAzZWlvY3RsIChnYWRnZXQsIGNvZGUsIHZhbHVlKTtcXG4xMjY3OlxcdFxcbjEyNjg6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4xMjY5OlxcdFxcdFxcdC0tZGV2LVxcdTAwM2V1ZGNfdXNhZ2U7XFxuMTI3MDpcXHRcXHR9XFxuMTI3MTpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTI3MjpcXHRcXG4xMjczOlxcdFxcdHJldHVybiByZXQ7XFxuMTI3NDpcXHR9XFxuMTI3NTpcXHRcXG4xMjc2OlxcdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXFxuMTI3NzpcXHRcXG4xMjc4OlxcdC8qIFRoZSBpbi1rZXJuZWwgZ2FkZ2V0IGRyaXZlciBoYW5kbGVzIG1vc3QgZXAwIGlzc3VlcywgaW4gcGFydGljdWxhclxcbjEyNzk6XFx0ICogZW51bWVyYXRpbmcgdGhlIHNpbmdsZSBjb25maWd1cmF0aW9uIChhcyBwcm92aWRlZCBmcm9tIHVzZXIgc3BhY2UpLlxcbjEyODA6XFx0ICpcXG4xMjgxOlxcdCAqIFVucmVjb2duaXplZCBlcDAgcmVxdWVzdHMgbWF5IGJlIGhhbmRsZWQgaW4gdXNlciBzcGFjZS5cXG4xMjgyOlxcdCAqL1xcbjEyODM6XFx0XFxuMTI4NDpcXHRzdGF0aWMgdm9pZCBtYWtlX3F1YWxpZmllciAoc3RydWN0IGRldl9kYXRhICpkZXYpXFxuMTI4NTpcXHR7XFxuMTI4NjpcXHRcXHRzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yXFx0XFx0cXVhbDtcXG4xMjg3OlxcdFxcdHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3JcXHRcXHQqZGVzYztcXG4xMjg4OlxcdFxcbjEyODk6XFx0XFx0cXVhbC5iTGVuZ3RoID0gc2l6ZW9mIHF1YWw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjA2LjU0ODI5NTMyNloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDU1Nzc2MjU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgR2FkZ2V0RlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgZml4aW5nIHNvbWV0aGluZyBpbXBvcnRhbnQg4oCTIGEgZnVuY3Rpb25hbCBidWcsIHNwZWNpZmljYWxseSBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZS4gSXQgbG9va3MgbGlrZSBgZ2FkZ2V0YCB3YXMgYmVpbmcgcmVhZCBiZWZvcmUgdGhlIGxvY2sgd2FzIGFjcXVpcmVkLCBhbmQgdGhlbiBkZXJlZmVyZW5jZWQsIHdoaWNoIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIHRyb3VibGUuXG5cbk15IHJlYXNvbmluZyBmb3IgdGhlIGZ1enppbmcgYW5hbHlzaXMgaXMgdGhhdCB0aGlzIGNoYW5nZSBtb2RpZmllcyB0aGUgaW9jdGwgaGFuZGxlciBmb3IgdGhlIGdhZGdldGZzIGRldmljZSwgYGdhZGdldF9kZXZfaW9jdGxgLiBUaGUgcGF0Y2ggYWRkcmVzc2VzIHRoZSBjcml0aWNhbCBpc3N1ZSBvZiBmZXRjaGluZyB0aGUgYGdhZGdldGAgcG9pbnRlciBzYWZlbHksIHVuZGVyIHRoZSBkZXZpY2UgbG9jaywgYW5kIGFsc28gaW5jbHVkZXMgYSBgTlVMTGAgY2hlY2suIFNvLCB0aGlzIGlzIGEgZGVmaW5pdGUgd2luIHRvIGFkZCB0byB0aGUgZnV6emluZyBjYW1wYWlnbi5cblxuRm9yIHRoZSBmdXp6aW5nIGNvbmZpZ3VyYXRpb24sIEknbSBzZXR0aW5nIGBXb3J0aEZ1enppbmdgIHRvIGB0cnVlYCwgb2J2aW91c2x5LCBhbmQgdGhlIGBSZWFzb25pbmdgIGlzIGRldGFpbGVkIGVub3VnaCB0byBleHBsYWluIHdoYXQgaXMgYmVpbmcgYWRkcmVzc2VkLiBJIGFtIHNldHRpbmcgdGhlIGBGb2N1c1N5bWJvbHNgIHRvIGBnYWRnZXRfZGV2X2lvY3RsYC5cblxuTm93LCBsZXQncyB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSXQgbG9va3MgbGlrZSBgVVNCX0dBREdFVEZTYCBpcyB0aGUga2V5IG9uZSwgc2luY2UgaXQgZW5hYmxlcyBgaW5vZGUub2AsIHdoZXJlIGBnYWRnZXRfZGV2X2lvY3RsYCBsaXZlcy4gYFVTQl9HQURHRVRgIGlzIHRoZSBwYXJlbnQgY29uZmlnLCBidXQgdGhlIGRvY3VtZW50YXRpb24gc2FpZCB0byBvbmx5IGVuYWJsZSB0aGUgbmVlZGVkIGNvbmZpZ3MsIGFuZCBgVVNCX0dBREdFVEZTYCBpcyBlbm91Z2guXG5cbkkgc2hvdWxkIGFsc28gY2hlY2sgd2hldGhlciBgVVNCX0RVTU1ZX0hDRGAgaXMgbmVlZGVkLiBFdmVuIHRob3VnaCBpdCdzIHR5cGljYWxseSBpbmNsdWRlZCBpbiBzeXprYWxsZXIgY29uZmlncywgSSB3YW50IHRvIGJlIHByZWNpc2UuIENoZWNraW5nIGRlcGVuZGVuY2llcyBpcyBrZXkgaGVyZS4gVGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHRvIHJldmlldyBgZGVwZW5kcyBvbmAgbGluZXMgdG8gY2F0Y2ggYWxsIHRoZSBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuIGBVU0JfR0FER0VURlNgIGRlcGVuZHMgb24gYFVTQl9HQURHRVRgLiBTbyBsZXQncyBjaGVjayBgVVNCX0dBREdFVGAncyBkZXBlbmRlbmNpZXMgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgzNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjE0LjAwNDA3Mzc0MloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE4Njk4MDU2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBVU0JfR0FER0VUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE2LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjE3Om1lbnVjb25maWcgVVNCX0dBREdFVFxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTE4LVxcdHRyaXN0YXRlIFxcXCJVU0IgR2FkZ2V0IFN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZz00Nz1pZiBVU0JfR0FER0VUXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNDgtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6NDk6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy01MC1cXHRib29sIFxcXCJEZWJ1Z2dpbmcgbWVzc2FnZXMgKERFVkVMT1BNRU5UKVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTYyLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjYzOmNvbmZpZyBVU0JfR0FER0VUX1ZFUkJPU0VcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy02NC1cXHRib29sIFxcXCJWZXJib3NlIGRlYnVnZ2luZyBNZXNzYWdlcyAoREVWRUxPUE1FTlQpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctNzYtXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWc6Nzc6Y29uZmlnIFVTQl9HQURHRVRfREVCVUdfRklMRVNcXG5kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZy03OC1cXHRib29sIFxcXCJEZWJ1Z2dpbmcgaW5mb3JtYXRpb24gZmlsZXMgKERFVkVMT1BNRU5UKVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTg3LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjg4OmNvbmZpZyBVU0JfR0FER0VUX0RFQlVHX0ZTXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctODktXFx0Ym9vbCBcXFwiRGVidWdnaW5nIGluZm9ybWF0aW9uIGZpbGVzIGluIGRlYnVnZnMgKERFVkVMT1BNRU5UKVxcXCJcXG4tLVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTk4LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjk5OmNvbmZpZyBVU0JfR0FER0VUX1ZCVVNfRFJBV1xcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnLTEwMC1cXHRpbnQgXFxcIk1heGltdW0gVkJVUyBQb3dlciB1c2FnZSAoMi01MDAgbUEpXFxcIlxcbi0tXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTE1LVxcbmRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnOjExNjpjb25maWcgVVNCX0dBREdFVF9TVE9SQUdFX05VTV9CVUZGRVJTXFxuZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWctMTE3LVxcdGludCBcXFwiTnVtYmVyIG9mIHN0b3JhZ2UgcGlwZWxpbmUgYnVmZmVyc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MTQuMzIyNzc2NjY4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDkzNTUyNDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgMTcuIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgVVNCIGdhZGdldCBzdWJzeXN0ZW0uIEdpdmVuIHRoZSBjb250ZXh0IG9mIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgY29yZSBmZWF0dXJlcyB0aGF0IGNhbiBiZSBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwsIGJ1dCBhbHNvIG9wdGlvbnMgZm9yIHNwZWNpZmljIFVTQiBnYWRnZXQgY29udHJvbGxlcnMuIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIHZhcmlvdXMgY2FwYWJpbGl0aWVzLiBJIGhvcGUgdGhpcyBwcm92aWRlcyB0aGUgc3RhcnRpbmcgcG9pbnQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDM4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MTcuODcyMTM0NTE4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdCMgIC0gUGVyaXBoZXJhbHMgKGxpa2UgUERBcykgbmVlZCBDT05GSUdfVVNCX0dBREdFVCAod2l0aCBcXFwiQlxcXCIgamFja3MpLlxcbiAgMTE6XFx0IyAgLSBTb21lIHN5c3RlbXMgaGF2ZSBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXJzLlxcbiAgMTI6XFx0I1xcbiAgMTM6XFx0IyBXaXRoIGhlbHAgZnJvbSBhIHNwZWNpYWwgdHJhbnNjZWl2ZXIgYW5kIGEgXFxcIk1pbmktQUJcXFwiIGphY2ssIHN5c3RlbXMgd2l0aFxcbiAgMTQ6XFx0IyBib3RoIGtpbmRzIG9mIGNvbnRyb2xsZXIgY2FuIGFsc28gc3VwcG9ydCBcXFwiVVNCIE9uLXRoZS1Hb1xcXCIgKENPTkZJR19VU0JfT1RHKS5cXG4gIDE1OlxcdCNcXG4gIDE2OlxcdFxcbiAgMTc6XFx0bWVudWNvbmZpZyBVU0JfR0FER0VUXFxuICAxODpcXHRcXHR0cmlzdGF0ZSBcXFwiVVNCIEdhZGdldCBTdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0c2VsZWN0IFVTQl9DT01NT05cXG4gIDIwOlxcdFxcdHNlbGVjdCBOTFNcXG4gIDIxOlxcdFxcdGhlbHBcXG4gIDIyOlxcdFxcdCAgIFVTQiBpcyBhIGhvc3QvZGV2aWNlIHByb3RvY29sLCBvcmdhbml6ZWQgd2l0aCBvbmUgaG9zdCAoc3VjaCBhcyBhXFxuICAyMzpcXHRcXHQgICBQQykgY29udHJvbGxpbmcgdXAgdG8gMTI3IHBlcmlwaGVyYWwgZGV2aWNlcy5cXG4gIDI0OlxcdFxcdCAgIFRoZSBVU0IgaGFyZHdhcmUgaXMgYXN5bW1ldHJpYywgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNldCB1cDpcXG4gIDI1OlxcdFxcdCAgIHlvdSBjYW4ndCBjb25uZWN0IGEgXFxcInRvLXRoZS1ob3N0XFxcIiBjb25uZWN0b3IgdG8gYSBwZXJpcGhlcmFsLlxcbiAgMjY6XFx0XFxuICAyNzpcXHRcXHQgICBMaW51eCBjYW4gcnVuIGluIHRoZSBob3N0LCBvciBpbiB0aGUgcGVyaXBoZXJhbC4gIEluIGJvdGggY2FzZXNcXG4gIDI4OlxcdFxcdCAgIHlvdSBuZWVkIGEgbG93IGxldmVsIGJ1cyBjb250cm9sbGVyIGRyaXZlciwgYW5kIHNvbWUgc29mdHdhcmVcXG4gIDI5OlxcdFxcdCAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OToxNy44NzIyMjg1NjlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxOTEwNDk0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIFVTQiBHYWRnZXQgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgYmFzZWQgb24gdGhlIHdheSB0aGlzIGlzIHN0cnVjdHVyZWQsIGl0IGFwcGVhcnMgdGhhdCBgVVNCX0dBREdFVGAgc2l0cyBhdCB0aGUgdG9wIGxldmVsIGluIHRoZSBtZW51Y29uZmlnLiBUaGF0IG1ha2VzIHNlbnNlLiBJdCBtZWFucyB0aGF0IGBVU0JfR0FER0VUYCBhbmQgYFVTQl9HQURHRVRGU2AgYXJlIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UncmUgZGVhbGluZyB3aXRoLiBOb3csIGxldCdzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBVU0JfR0FER0VURlNgLiBJIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb3Igb3Zlcmxvb2tlZCBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHJlbGF0ZWQgZmVhdHVyZXMuIEl0J3MgYWx3YXlzIHdvcnRoIGRvdWJsZS1jaGVja2luZyB0aGVzZSBzb3J0cyBvZiBjb25maWd1cmF0aW9ucywgcGFydGljdWxhcmx5IHdoZW4gZGVhbGluZyB3aXRoIGtlcm5lbCBtb2R1bGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTcwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OToyMS4zOTEzMzU5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDA6XFx0XFx0ICBvZiBzZXZlcmFsIGV0aGVybmV0IGZyYW1lcyBpbnRvIG9uZSBVU0IgdHJhbnNmZXIgYW5kIGRpZmZlcmVudFxcbiAyMDE6XFx0XFx0ICBhbGlnbm1lbnQgcG9zc2liaWxpdGllcy5cXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0ICBTYXkgXFxcInlcXFwiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciBcXFwibVxcXCIgdG8gYnVpbGQgYVxcbiAyMDQ6XFx0XFx0ICBkeW5hbWljYWxseSBsaW5rZWQgbW9kdWxlIGNhbGxlZCBcXFwiZ19uY21cXFwiLlxcbiAyMDU6XFx0XFxuIDIwNjpcXHRjb25maWcgVVNCX0dBREdFVEZTXFxuIDIwNzpcXHRcXHR0cmlzdGF0ZSBcXFwiR2FkZ2V0IEZpbGVzeXN0ZW1cXFwiXFxuIDIwODpcXHRcXHRoZWxwXFxuIDIwOTpcXHRcXHQgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgZmlsZXN5c3RlbSBiYXNlZCBBUEkgdGhhdCBsZXRzIHVzZXIgbW9kZVxcbiAyMTA6XFx0XFx0ICBwcm9ncmFtcyBpbXBsZW1lbnQgYSBzaW5nbGUtY29uZmlndXJhdGlvbiBVU0IgZGV2aWNlLCBpbmNsdWRpbmdcXG4gMjExOlxcdFxcdCAgZW5kcG9pbnQgSS9PIGFuZCBjb250cm9sIHJlcXVlc3RzIHRoYXQgZG9uJ3QgcmVsYXRlIHRvIGVudW1lcmF0aW9uLlxcbiAyMTI6XFx0XFx0ICBBbGwgZW5kcG9pbnRzLCB0cmFuc2ZlciBzcGVlZHMsIGFuZCB0cmFuc2ZlciB0eXBlcyBzdXBwb3J0ZWQgYnlcXG4gMjEzOlxcdFxcdCAgdGhlIGhhcmR3YXJlIGFyZSBhdmFpbGFibGUsIHRocm91Z2ggcmVhZCgpIGFuZCB3cml0ZSgpIGNhbGxzLlxcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHQgIFNheSBcXFwieVxcXCIgdG8gbGluayB0aGUgZHJpdmVyIHN0YXRpY2FsbHksIG9yIFxcXCJtXFxcIiB0byBidWlsZCBhXFxuIDIxNjpcXHRcXHQgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUgY2FsbGVkIFxcXCJnYWRnZXRmc1xcXCIuXFxuIDIxNzpcXHRcXG4gMjE4OlxcdGNvbmZpZyBVU0JfRlVOQ1RJT05GU1xcbiAyMTk6XFx0XFx0dHJpc3RhdGUgXFxcIkZ1bmN0aW9uIEZpbGVzeXN0ZW1cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjIxLjM5MTQxOTczWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3Nzc1NDcxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRWxpbWluYXRpbmcgRXh0cmFuZW91cyBDb21wbGV4aXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwcm9ibGVtLCBhbmQgdGhlIGZpcnN0IHRoaW5nIEknbSB6ZXJvaW5nIGluIG9uIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGV4dGVybmFsIGRlcGVuZGVuY2llcy4gIE15IGJyYWluIGltbWVkaWF0ZWx5IHNjYW5zIGZvciBhbnl0aGluZyBJIG1pZ2h0IGJlIHJlbHlpbmcgb24gb3V0c2lkZSBvZiB0aGUgaW1tZWRpYXRlIHNjb3BlLCBhbnkgbGlicmFyaWVzIG9yIGV4dGVybmFsIEFQSXMgdGhhdCBjb3VsZCBpbnRyb2R1Y2UgZnJhZ2lsaXR5IG9yIHVubmVjZXNzYXJ5IG92ZXJoZWFkLiBUaGFua2Z1bGx5LCBpdCdzIGNsZWFyIHRoZXJlIGFyZSAqbm8qIG90aGVyIGRlcGVuZGVuY2llcy4gVGhpcyBpcyBmYW50YXN0aWM7IGl0IHNpbXBsaWZpZXMgdGhlIGFuYWx5c2lzIGNvbnNpZGVyYWJseS4gVGhlIGNsZWFuZXIgdGhlIHNvbHV0aW9uLCB0aGUgYmV0dGVyLlxuXG5Ob3csIHdpdGggZGVwZW5kZW5jaWVzIG91dCBvZiB0aGUgd2F5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvcmUgbG9naWMgYW5kIHRoZSBjcnVjaWFsIHBhcnQgb2YgdGhpcyBwcm9jZXNzLiBUaGUgbmV4dCBzdGVwIGlzIGNsZWFybHkgdG8sIGNhbGwgdGhhdCBgc2V0LXJlc3VsdHNgIGZ1bmN0aW9uIG9yIHdoYXRldmVyIGl0J3MgY2FsbGVkLiBUaGlzIGlzIHRoZSBseW5jaHBpbiwgdGhlIGZ1bmN0aW9uIHRoYXQgd2lsbCBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyByZWxldmFudC4gVGhhdCdzIHdoYXQgSSBhbSBmb2N1c2VkIG9uIGF0IHRoaXMgbW9tZW50LlxuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTMwLCJPdXRwdXRUb2tlbnMiOjEwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MjUuMTY4OTY5MDE0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM3MjE0ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9HQURHRVRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhZGdldF9kZXZfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgaW9jdGwgaGFuZGxlciBvZiBnYWRnZXRmcyBieSBmZXRjaGluZyB0aGUgZ2FkZ2V0IHBvaW50ZXIgdW5kZXIgdGhlIGRldmljZSBsb2NrIGFuZCBjaGVja2luZyBpdCBmb3IgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9HQURHRVRcIixcbiAgICBcIlVTQl9HQURHRVRGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdhZGdldF9kZXZfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciB1c2UtYWZ0ZXItZnJlZSBpbiB0aGUgaW9jdGwgaGFuZGxlciBvZiBnYWRnZXRmcyBieSBmZXRjaGluZyB0aGUgZ2FkZ2V0IHBvaW50ZXIgdW5kZXIgdGhlIGRldmljZSBsb2NrIGFuZCBjaGVja2luZyBpdCBmb3IgTlVMTC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OToyNS4yNDI2OTY0OTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzYxODgzNzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMTE6NDk6MjUuMjQzMTI2MzU5WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2MzYxNDQ5NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHJhY2UgY29uZGl0aW9uIGluIGBnYWRnZXRfZGV2X2lvY3RsYCB3aGVyZSBgZGV2LVxcdTAwM2VnYWRnZXRgIHdhcyBhY2Nlc3NlZCBvdXRzaWRlIG9mIHRoZSBgZGV2LVxcdTAwM2Vsb2NrYCBzcGlubG9jaywgcG90ZW50aWFsbHkgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpZiBgZGV2LVxcdTAwM2VnYWRnZXRgIGlzIGNsZWFyZWQgY29uY3VycmVudGx5LiBCeSBtb3ZpbmcgdGhlIGFzc2lnbm1lbnQgaW5zaWRlIHRoZSBsb2NrIGFuZCBhZGRpbmcgYSBOVUxMIGNoZWNrLCBpdCBwcmV2ZW50cyB0aGlzIGNyYXNoLiBUaGlzIGlzIGEgY29uY3VycmVuY3kgaXNzdWUgYW5kIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlLCB3aGljaCBhcmUgY2F1Z2h0IGJ5IHN0YW5kYXJkIGtlcm5lbCBtZWNoYW5pc21zIChsaWtlIHBhZ2UgZmF1bHRzIGZvciBOVUxMIGRlcmVmcykgYW5kIEtBU0FOIChpZiBpdCB3ZXJlIGEgdXNlLWFmdGVyLWZyZWUpLiBJdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgc28gS01TQU4gaXMgbm90IGFwcGxpY2FibGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMmQ3OTEyMThlYmM2ODgzNzA5MmY4ODU3YzYxNTU3MzI2YWI5NDNhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDExOjQ3OjUzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG5pbmRleCBkODdhOGFiNTE1MTA3Li5lOWY3ZDdjMWE2YTNkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xlZ2FjeS9pbm9kZS5jXG4rKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbGVnYWN5L2lub2RlLmNcbkBAIC0xMjUxLDE0ICsxMjUxLDE1IEBAIGVwMF9wb2xsIChzdHJ1Y3QgZmlsZSAqZmQsIHBvbGxfdGFibGUgKndhaXQpXG4gc3RhdGljIGxvbmcgZ2FkZ2V0X2Rldl9pb2N0bCAoc3RydWN0IGZpbGUgKmZkLCB1bnNpZ25lZCBjb2RlLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuIHtcbiBcdHN0cnVjdCBkZXZfZGF0YVx0XHQqZGV2ID0gZmQtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuLVx0c3RydWN0IHVzYl9nYWRnZXRcdCpnYWRnZXQgPSBkZXYtXHUwMDNlZ2FkZ2V0O1xuK1x0c3RydWN0IHVzYl9nYWRnZXRcdCpnYWRnZXQ7XG4gXHRsb25nIHJldCA9IC1FTk9UVFk7XG4gXG4gXHRzcGluX2xvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbitcdGdhZGdldCA9IGRldi1cdTAwM2VnYWRnZXQ7XG4gXHRpZiAoZGV2LVx1MDAzZXN0YXRlID09IFNUQVRFX0RFVl9PUEVORUQgfHxcbiBcdFx0XHRkZXYtXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX1VOQk9VTkQpIHtcbiBcdFx0LyogTm90IGJvdW5kIHRvIGEgVURDICovXG4tXHR9IGVsc2UgaWYgKGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGwpIHtcbitcdH0gZWxzZSBpZiAoZ2FkZ2V0IFx1MDAyNlx1MDAyNiBnYWRnZXQtXHUwMDNlb3BzLVx1MDAzZWlvY3RsKSB7XG4gXHRcdCsrZGV2LVx1MDAzZXVkY191c2FnZTtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjI1LjI0MzEyNzQ0OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDE2OTg5OTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFVTQiBHYWRnZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYGdhZGdldF9kZXZfaW9jdGxgIGluIGBpbm9kZS5jYCB3aXRoaW4gdGhlIFVTQiBnYWRnZXQgbGVnYWN5IGRyaXZlci4gSXQncyBtYWtpbmcgYSBzZWVtaW5nbHkgc21hbGwgYnV0IHBvdGVudGlhbGx5IGNydWNpYWwgY2hhbmdlLiBGaXJzdCwgdGhleSd2ZSBtb3ZlZCB0aGUgYXNzaWdubWVudCBvZiBgZ2FkZ2V0ID0gZGV2LVx1MDAzZWdhZGdldDtgIGluc2lkZSBhIGBzcGluX2xvY2tfaXJxKFx1MDAyNmRldi1cdTAwM2Vsb2NrKTtgIGJsb2NrLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGEgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlOyB0aGV5J3JlIHRyeWluZyB0byBwcm90ZWN0IGFjY2VzcyB0byBgZGV2LVx1MDAzZWdhZGdldGAuIFRoZSBsb2NrIHN1Z2dlc3RzIHRoYXQgYGdhZGdldGAgbWlnaHQgYmUgbW9kaWZpZWQgZWxzZXdoZXJlIGNvbmN1cnJlbnRseSwgYW5kIHRoaXMgY2hhbmdlIGFpbXMgdG8gZW5zdXJlIHRoYXQgYWNjZXNzIGlzIHNlcmlhbGl6ZWQuXG5cblNlY29uZGx5LCB0aGV5J3ZlIGFkZGVkIGEgTlVMTCBjaGVjazogYGdhZGdldCBcdTAwMjZcdTAwMjYgZ2FkZ2V0LVx1MDAzZW9wcy1cdTAwM2Vpb2N0bGAgYmVmb3JlIHRoZSBhY3R1YWwgYGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGxgIGNhbGwuIFRoYXQgc2NyZWFtcyBcIm51bGwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcm90ZWN0aW9uXCIgdG8gbWUuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB0aGV5J3ZlIGZvdW5kIGEgc2NlbmFyaW8gd2hlcmUgYGdhZGdldGAgY291bGQgYmUgTlVMTCwgb3IgcGVyaGFwcyBldmVuIHdvcnNlLCB0aGF0IGBnYWRnZXQtXHUwMDNlb3BzYCBjb3VsZCBiZSB1bmluaXRpYWxpemVkIG9yIE5VTEwuIE1heWJlIHRoZSBnYWRnZXQgZ2V0cyB1bmJvdW5kL2Rpc2Nvbm5lY3RlZCBpbiBhIHJhY2UgY29uZGl0aW9uLiBUaGlzIGxvb2tzIGxpa2UgZWl0aGVyIGEgZml4IGZvciBhIHBvdGVudGlhbCBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uLCBvciBzb21lIGtpbmQgb2YgcmFjZSBjb25kaXRpb24gd2hlcmUgYGRldi1cdTAwM2VnYWRnZXRgIGlzIGFjY2Vzc2VkIGJlZm9yZSBpdCdzIGZ1bGx5IGluaXRpYWxpemVkIG9yIHdoaWxlIGl0J3MgYmVpbmcgZGVhbGxvY2F0ZWQgb3IgbW9kaWZpZWQgaW4gYW5vdGhlciB0aHJlYWQuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgbG9jayBhbmQgdGhlIE5VTEwgY2hlY2sgc3RyZW5ndGhlbnMgdGhhdCBhc3N1bXB0aW9uLlxuXG5JJ2QgYmV0dGVyIGdvIGRlZXBlciBhbmQgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgZ2FkZ2V0X2Rldl9pb2N0bGAgdG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIHRoZSBjb250ZXh0IGFuZCB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZSB2dWxuZXJhYmlsaXR5LiBXZSBuZWVkIHRvIHRyYWNlIGFsbCBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OTozMy4yNjAxMjA2MjJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwNTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdXNiL2dhZGdldC9sZWdhY3kvaW5vZGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMjQ1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMjQ1OlxcdFxcdH1cXG4xMjQ2OlxcdG91dDpcXG4xMjQ3OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4xMjQ4OlxcdFxcdHJldHVybiBtYXNrO1xcbjEyNDk6XFx0fVxcbjEyNTA6XFx0XFxuMTI1MTpcXHRzdGF0aWMgbG9uZyBnYWRnZXRfZGV2X2lvY3RsIChzdHJ1Y3QgZmlsZSAqZmQsIHVuc2lnbmVkIGNvZGUsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuMTI1MjpcXHR7XFxuMTI1MzpcXHRcXHRzdHJ1Y3QgZGV2X2RhdGFcXHRcXHQqZGV2ID0gZmQtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4xMjU0OlxcdFxcdHN0cnVjdCB1c2JfZ2FkZ2V0XFx0KmdhZGdldDtcXG4xMjU1OlxcdFxcdGxvbmcgcmV0ID0gLUVOT1RUWTtcXG4xMjU2OlxcdFxcbjEyNTc6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrKTtcXG4xMjU4OlxcdFxcdGdhZGdldCA9IGRldi1cXHUwMDNlZ2FkZ2V0O1xcbjEyNTk6XFx0XFx0aWYgKGRldi1cXHUwMDNlc3RhdGUgPT0gU1RBVEVfREVWX09QRU5FRCB8fFxcbjEyNjA6XFx0XFx0XFx0XFx0ZGV2LVxcdTAwM2VzdGF0ZSA9PSBTVEFURV9ERVZfVU5CT1VORCkge1xcbjEyNjE6XFx0XFx0XFx0LyogTm90IGJvdW5kIHRvIGEgVURDICovXFxuMTI2MjpcXHRcXHR9IGVsc2UgaWYgKGdhZGdldCBcXHUwMDI2XFx1MDAyNiBnYWRnZXQtXFx1MDAzZW9wcy1cXHUwMDNlaW9jdGwpIHtcXG4xMjYzOlxcdFxcdFxcdCsrZGV2LVxcdTAwM2V1ZGNfdXNhZ2U7XFxuMTI2NDpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTI2NTpcXHRcXG4xMjY2OlxcdFxcdFxcdHJldCA9IGdhZGdldC1cXHUwMDNlb3BzLVxcdTAwM2Vpb2N0bCAoZ2FkZ2V0LCBjb2RlLCB2YWx1ZSk7XFxuMTI2NzpcXHRcXG4xMjY4OlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmRldi1cXHUwMDNlbG9jayk7XFxuMTI2OTpcXHRcXHRcXHQtLWRldi1cXHUwMDNldWRjX3VzYWdlO1xcbjEyNzA6XFx0XFx0fVxcbjEyNzE6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZkZXYtXFx1MDAzZWxvY2spO1xcbjEyNzI6XFx0XFxuMTI3MzpcXHRcXHRyZXR1cm4gcmV0O1xcbjEyNzQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQxMTo0OTozMy4yNjAyNDMwMDJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0NDMxNTgzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGNvbmN1cnJlbmN5IGFuZCBtZW1vcnkgc2FmZXR5IGlzc3VlIHdpdGhpbiB0aGUgZ2FkZ2V0IGRyaXZlci4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgYSByYWNlIGNvbmRpdGlvbjogc3BlY2lmaWNhbGx5LCBhIHNpdHVhdGlvbiB3aGVyZSBgZGV2LVx1MDAzZWdhZGdldGAgY2FuIGJlIGFjY2Vzc2VkIGFuZCBwb3RlbnRpYWxseSBiZSBgTlVMTGAgb3IgbW9kaWZpZWQgYXQgdGhlIHNhbWUgdGltZSBhcyBhbm90aGVyIHRocmVhZCBpcyB1c2luZyBpdCwgd2hpY2ggaXMgbGVhZGluZyB0byBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBvciBldmVuIGEgdXNlLWFmdGVyLWZyZWUgd2hlbiB0aGUgYGdhZGdldC1cdTAwM2VvcHMtXHUwMDNlaW9jdGxgIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZpeCBpdHNlbGYgaXMgcHJldHR5IHN0YW5kYXJkIGZvciB0aGVzZSB0eXBlcyBvZiBpc3N1ZXMuIFRoZXkncmUgbW92aW5nIHRoZSBhY2Nlc3MgdG8gYGRldi1cdTAwM2VnYWRnZXRgIHdpdGhpbiBhIHNwaW5sb2NrIChgZGV2LVx1MDAzZWxvY2tgKSB0byBwcm90ZWN0IGl0IGZyb20gY29uY3VycmVudCBtb2RpZmljYXRpb25zLiBUaGV5IGFyZSBhbHNvIGltcGxlbWVudGluZyBhIE5VTEwgY2hlY2sgdG8gZW5zdXJlIGBnYWRnZXRgIGlzbid0IGFjY2Vzc2VkIGJlZm9yZSBpdCdzIGJlZW4gaW5pdGlhbGl6ZWQsIHdoaWNoIGlzIGNydWNpYWwuXG5cbkZyb20gYSBkZWJ1Z2dpbmcgcGVyc3BlY3RpdmUsIHRoaXMgdHlwZSBvZiBidWcgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCBLQVNBTiAoS2VybmVsIEFkZHJlc3MgU2FuaXRpemVyKSB3b3VsZCBoYXZlIGNhdWdodCBkdXJpbmcgdGVzdGluZywgcGFydGljdWxhcmx5IGlmIGl0IHdhcyBhIHVzZS1hZnRlci1mcmVlLCB3aGljaCB3b3VsZCBmbGFnIHRoZSBtZW1vcnkgY29ycnVwdGlvbiBpbiB0aGUgc2Vjb25kIGlzc3VlLCBhbG9uZyB3aXRoIHJlZ3VsYXIgYnVnIGRldGVjdG9ycy4gU3RhbmRhcmQga2VybmVsIGVycm9yIGhhbmRsaW5nLCBsaWtlIHRoZSBoYXJkd2FyZSdzIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBwcm90ZWN0aW9uLCB3b3VsZCBhbHNvIGNhdGNoIHRoZSBjcmFzaC4gS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBpcyAqbm90KiBuZWNlc3NhcnkgaGVyZS4gQmVjYXVzZSBpdCdzIGEgTlVMTCBkZXJlZmVyZW5jZSBvciB1c2UtYWZ0ZXItZnJlZSwgS01TQU4gaXMgb3ZlcmtpbGwgaGVyZSBhbmQgd291bGRuJ3QgcHJvdmlkZSBhbnl0aGluZyBiZXlvbmQgd2hhdCB0aGUgb3RoZXIgdG9vbHMgY2FuLiBJdCdzIGEgY29uY3VycmVuY3kgaXNzdWUgY291cGxlZCB3aXRoIGEgY2xhc3NpYyBtZW1vcnkgc2FmZXR5IHByb2JsZW0sIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkIG9yIGluZm9ybWF0aW9uIGxlYWsgc2l0dWF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkxLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDExOjQ5OjQxLjYwNDU2MTU0MloiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbiBgZ2FkZ2V0X2Rldl9pb2N0bGAgd2hlcmUgYGRldi1cXHUwMDNlZ2FkZ2V0YCB3YXMgYWNjZXNzZWQgb3V0c2lkZSBvZiB0aGUgYGRldi1cXHUwMDNlbG9ja2Agc3BpbmxvY2ssIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaWYgYGRldi1cXHUwMDNlZ2FkZ2V0YCBpcyBjbGVhcmVkIGNvbmN1cnJlbnRseS4gQnkgbW92aW5nIHRoZSBhc3NpZ25tZW50IGluc2lkZSB0aGUgbG9jayBhbmQgYWRkaW5nIGEgTlVMTCBjaGVjaywgaXQgcHJldmVudHMgdGhpcyBjcmFzaC4gVGhpcyBpcyBhIGNvbmN1cnJlbmN5IGlzc3VlIGFuZCBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgd2hpY2ggYXJlIGNhdWdodCBieSBzdGFuZGFyZCBrZXJuZWwgbWVjaGFuaXNtcyAobGlrZSBwYWdlIGZhdWx0cyBmb3IgTlVMTCBkZXJlZnMpIGFuZCBLQVNBTiAoaWYgaXQgd2VyZSBhIHVzZS1hZnRlci1mcmVlKS4gSXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UsIHNvIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW4gYGdhZGdldF9kZXZfaW9jdGxgIHdoZXJlIGBkZXYtXFx1MDAzZWdhZGdldGAgd2FzIGFjY2Vzc2VkIG91dHNpZGUgb2YgdGhlIGBkZXYtXFx1MDAzZWxvY2tgIHNwaW5sb2NrLCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGEgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGlmIGBkZXYtXFx1MDAzZWdhZGdldGAgaXMgY2xlYXJlZCBjb25jdXJyZW50bHkuIEJ5IG1vdmluZyB0aGUgYXNzaWdubWVudCBpbnNpZGUgdGhlIGxvY2sgYW5kIGFkZGluZyBhIE5VTEwgY2hlY2ssIGl0IHByZXZlbnRzIHRoaXMgY3Jhc2guIFRoaXMgaXMgYSBjb25jdXJyZW5jeSBpc3N1ZSBhbmQgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UsIHdoaWNoIGFyZSBjYXVnaHQgYnkgc3RhbmRhcmQga2VybmVsIG1lY2hhbmlzbXMgKGxpa2UgcGFnZSBmYXVsdHMgZm9yIE5VTEwgZGVyZWZzKSBhbmQgS0FTQU4gKGlmIGl0IHdlcmUgYSB1c2UtYWZ0ZXItZnJlZSkuIEl0IGRvZXMgbm90IGludm9sdmUgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlLCBzbyBLTVNBTiBpcyBub3QgYXBwbGljYWJsZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb42l[1] Phase: Succeeded StartedAt: 2026-08-25 11:49:52 +0000 UTC FinishedAt: 2026-08-25 11:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 11:49:52 +0000 UTC FinishedAt: 2026-08-25 11:49:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2] Phase: Succeeded StartedAt: 2026-08-25 11:49:52 +0000 UTC FinishedAt: 2026-08-25 15:28:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-25 11:49:52 +0000 UTC FinishedAt: 2026-08-25 15:28:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 11:49:52 +0000 UTC FinishedAt: 2026-08-25 11:50:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 11:49:52 +0000 UTC FinishedAt: 2026-08-25 11:49:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowvb42l/series-workflowvb42l-convert-artifact-3971201866/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 11:50:03 +0000 UTC FinishedAt: 2026-08-25 12:05:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 11:50:03 +0000 UTC FinishedAt: 2026-08-25 12:05:54 +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:*a2db0957-6b27-4b3a-bb4f-8efddbb402c5,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-workflowvb42l/series-workflowvb42l-convert-artifact-3971201866/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": "4f0fb6bc-e757-4628-a384-cd1fdc7a7bab", "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-workflowvb42l/series-workflowvb42l-build-action-537416504/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 11:50:03 +0000 UTC FinishedAt: 2026-08-25 12:05:44 +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:*a2db0957-6b27-4b3a-bb4f-8efddbb402c5,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-workflowvb42l/series-workflowvb42l-convert-artifact-3971201866/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": "4f0fb6bc-e757-4628-a384-cd1fdc7a7bab", "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-workflowvb42l/series-workflowvb42l-build-action-537416504/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 12:05:54 +0000 UTC FinishedAt: 2026-08-25 12:05:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 12:05:54 +0000 UTC FinishedAt: 2026-08-25 12:05:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 12:05:54 +0000 UTC FinishedAt: 2026-08-25 12:06:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 12:05:54 +0000 UTC FinishedAt: 2026-08-25 12:05:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowvb42l/series-workflowvb42l-convert-artifact-1402204901/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 12:06:04 +0000 UTC FinishedAt: 2026-08-25 12:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 12:06:04 +0000 UTC FinishedAt: 2026-08-25 12:07:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4f0fb6bc-e757-4628-a384-cd1fdc7a7bab,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-workflowvb42l/series-workflowvb42l-build-action-537416504/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-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 12:08:03 +0000 UTC FinishedAt: 2026-08-25 12:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 12:08:03 +0000 UTC FinishedAt: 2026-08-25 12:08:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 12:08:03 +0000 UTC FinishedAt: 2026-08-25 12:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 12:08:03 +0000 UTC FinishedAt: 2026-08-25 12:23:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*a2db0957-6b27-4b3a-bb4f-8efddbb402c5,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-workflowvb42l/series-workflowvb42l-convert-artifact-1402204901/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": "6c8dd2b3-a165-47e8-a974-493e36540064", "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-workflowvb42l/series-workflowvb42l-build-action-4023830321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 12:08:03 +0000 UTC FinishedAt: 2026-08-25 12:23:40 +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:*a2db0957-6b27-4b3a-bb4f-8efddbb402c5,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-workflowvb42l/series-workflowvb42l-convert-artifact-1402204901/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": "6c8dd2b3-a165-47e8-a974-493e36540064", "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-workflowvb42l/series-workflowvb42l-build-action-4023830321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 12:23:50 +0000 UTC FinishedAt: 2026-08-25 12:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 12:23:50 +0000 UTC FinishedAt: 2026-08-25 12:23:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-25 12:23:50 +0000 UTC FinishedAt: 2026-08-25 12:25:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-25 12:23:50 +0000 UTC FinishedAt: 2026-08-25 12:25:43 +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:*6c8dd2b3-a165-47e8-a974-493e36540064,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-workflowvb42l/series-workflowvb42l-build-action-4023830321/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-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-25 12:25:53 +0000 UTC FinishedAt: 2026-08-25 15:28:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-25 12:25:53 +0000 UTC FinishedAt: 2026-08-25 15:28:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"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:*4f0fb6bc-e757-4628-a384-cd1fdc7a7bab,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6c8dd2b3-a165-47e8-a974-493e36540064,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-workflowvb42l/series-workflowvb42l-build-action-537416504/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-workflowvb42l/series-workflowvb42l-build-action-4023830321/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-25 12:25:53 +0000 UTC FinishedAt: 2026-08-25 12:26:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-25 12:25:53 +0000 UTC FinishedAt: 2026-08-25 12:25:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"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-workflowvb42l/series-workflowvb42l-convert-artifact-3462551402/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-25 12:25:53 +0000 UTC FinishedAt: 2026-08-25 12:25:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-25 12:25:53 +0000 UTC FinishedAt: 2026-08-25 12:25:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-25 12:25:54 +0000 UTC FinishedAt: 2026-08-25 12:25:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-25 12:26:04 +0000 UTC FinishedAt: 2026-08-25 15:28:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvb42l[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["gadget_dev_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c4463c3bf63d0d5a8e4b55f78ca220ddf27a6859","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_GADGET","USB_GADGETFS"],"series_id":"b600bbfc-766b-48b5-88bf-2ab5e86dacbf","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-25 12:26:04 +0000 UTC FinishedAt: 2026-08-25 15:28:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4f0fb6bc-e757-4628-a384-cd1fdc7a7bab,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6c8dd2b3-a165-47e8-a974-493e36540064,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-workflowvb42l/series-workflowvb42l-build-action-537416504/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-workflowvb42l/series-workflowvb42l-build-action-4023830321/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-workflowvb42l/series-workflowvb42l-convert-artifact-3462551402/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,}