Name: series-workflowqxrbt Phase: Succeeded StartedAt: 2026-06-25 06:25:25 +0000 UTC FinishedAt: 2026-06-25 08:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[0] Phase: Succeeded StartedAt: 2026-06-25 06:25:25 +0000 UTC FinishedAt: 2026-06-25 06:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 06:25:25 +0000 UTC FinishedAt: 2026-06-25 06:56:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d87363b0edfc7504ff2b144fe4cdd8154f90f42e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WWAN", "IOSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d87363b0edfc7504ff2b144fe4cdd8154f90f42e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WWAN", "IOSM" ], "series_id": "68ef2c66-5edd-497b-a838-87d77f3441d9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mux_dl_process_dg", "mux_dl_adb_decode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dXQU4mIzM0OywKICAgICYjMzQ7SU9TTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O211eF9kbF9wcm9jZXNzX2RnJiMzNDssCiAgICAmIzM0O211eF9kbF9hZGJfZGVjb2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBtdXhfZGxfcHJvY2Vzc19kZ2AgYW5kIGBtdXhfZGxfYWRiX2RlY29kZWAgaW4gdGhlIEludGVsIElPU00gV1dBTiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBpbmZpbml0ZSBsb29wcyB3aGVuIHByb2Nlc3NpbmcgZG93bmxpbmsgZGF0YWdyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVnIGZvdW5kIGJ5IHN5emthbGxlci4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgYm91bmRzIGNoZWNrcyBhcmUgY29ycmVjdCBhbmQgbm8gb3RoZXIgdnVsbmVyYWJpbGl0aWVzIGV4aXN0IGluIHRoaXMgcGFyc2luZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDllNzY5MTJjNGM2MmJiZmY5YzljZDI2NzRmMDMzNGYxODcwMmVlYWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjo1NDo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMgYi9kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmNcbmluZGV4IGJmZjQ2ZjdjYTU5ZjNmLi4wYmJkNDEyNjNjYzJmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jXG5AQCAtNTUzLDE5ICYjNDM7NTUzLDIxIEBAIHN0YXRpYyBpbnQgbXV4X2RsX3Byb2Nlc3NfZGcoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3QgbXV4X2FkYmggKmFkYmgsXG4gXHR1MzIgcGFja2V0X29mZnNldCwgaSwgcmMsIGRnX2xlbjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX29mX2RnOyBpJiM0MzsmIzQzOywgZGcmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChsZTMyX3RvX2NwdShkZy1cdTAwM2VkYXRhZ3JhbV9pbmRleClcbi1cdFx0XHRcdFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZGJoKSlcbiYjNDM7XHRcdHUzMiBkZ19pbmRleCA9IGxlMzJfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0XHRkZ19sZW4gPSBsZTE2X3RvX2NwdShkZy1cdTAwM2VkYXRhZ3JhbV9sZW5ndGgpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChkZ19pbmRleCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpXG4gXHRcdFx0Z290byBkZ19lcnJvcjtcbiBcbi1cdFx0LyogSXMgdGhlIHBhY2tldCBpbnNpZGUgb2YgdGhlIEFEQiAqL1xuLVx0XHRpZiAobGUzMl90b19jcHUoZGctXHUwMDNlZGF0YWdyYW1faW5kZXgpIFx1MDAzZT1cbi1cdFx0XHRcdFx0bGUzMl90b19jcHUoYWRiaC1cdTAwM2VibG9ja19sZW5ndGgpKSB7XG4mIzQzO1x0XHQvKiBJcyB0aGUgcGFja2V0IGluc2lkZSBvZiB0aGUgQURCIGFuZCB0aGUgcmVjZWl2ZWQgc2tiID8gKi9cbiYjNDM7XHRcdGlmIChkZ19pbmRleCBcdTAwM2U9IGxlMzJfdG9fY3B1KGFkYmgtXHUwMDNlYmxvY2tfbGVuZ3RoKSB8fFxuJiM0MztcdFx0ICAgIGRnX2luZGV4IFx1MDAzZT0gc2tiLVx1MDAzZWxlbiB8fFxuJiM0MztcdFx0ICAgIGRnX2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIGRnX2luZGV4IHx8XG4mIzQzO1x0XHQgICAgZGxfaGVhZF9wYWRfbGVuIFx1MDAzZT0gZGdfbGVuKSB7XG4gXHRcdFx0Z290byBkZ19lcnJvcjtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwYWNrZXRfb2Zmc2V0ID1cbi1cdFx0XHRcdGxlMzJfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2luZGV4KSAmIzQzO1xuLVx0XHRcdFx0ZGxfaGVhZF9wYWRfbGVuO1xuLVx0XHRcdGRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2xlbmd0aCk7XG4mIzQzO1x0XHRcdHBhY2tldF9vZmZzZXQgPSBkZ19pbmRleCAmIzQzOyBkbF9oZWFkX3BhZF9sZW47XG4gXHRcdFx0LyogUGFzcyB0aGUgcGFja2V0IHRvIHRoZSBuZXRpZiBsYXllci4gKi9cbiBcdFx0XHRyYyA9IGlwY19tdXhfbmV0X3JlY2VpdmUoaXBjX211eCwgaWZfaWQsIGlwY19tdXgtXHUwMDNld3dhbixcbiBcdFx0XHRcdFx0XHQgcGFja2V0X29mZnNldCxcbkBAIC01ODksMTIgJiM0Mzs1OTEsMTYgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxuIFx0c3RydWN0IG11eF9hZGJoICphZGJoO1xuIFx0c3RydWN0IG11eF9hZHRoICphZHRoO1xuIFx0aW50IG5yX29mX2RnLCBpZl9pZDtcbi1cdHUzMiBhZHRoX2luZGV4O1xuJiM0MztcdHUzMiBhZHRoX2luZGV4LCBwcmV2X2luZGV4ID0gMDtcbiBcdHU4ICpibG9jaztcbiBcbiBcdGJsb2NrID0gc2tiLVx1MDAzZWRhdGE7XG4gXHRhZGJoID0gKHN0cnVjdCBtdXhfYWRiaCAqKWJsb2NrO1xuIFxuJiM0MztcdC8qIFRoZSBibG9jayBoZWFkZXIgaXRzZWxmIG11c3QgZml0IGluIHRoZSByZWNlaXZlZCBza2IuICovXG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKVxuJiM0MztcdFx0Z290byBhZGJfZGVjb2RlX2VycjtcbiYjNDM7XG4gXHQvKiBQcm9jZXNzIHRoZSBhZ2dyZWdhdGVkIGRhdGFncmFtIHRhYmxlcy4gKi9cbiBcdGFkdGhfaW5kZXggPSBsZTMyX3RvX2NwdShhZGJoLVx1MDAzZWZpcnN0X3RhYmxlX2luZGV4KTtcbiBcbkBAIC02MDYsNiAmIzQzOzYxMiwxNiBAQCBzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG4gXG4gXHQvKiBMb29wIHRocm91Z2ggbWl4ZWQgc2Vzc2lvbiB0YWJsZXMuICovXG4gXHR3aGlsZSAoYWR0aF9pbmRleCkge1xuJiM0MztcdFx0LyogVGhlIHRhYmxlIGhlYWRlciBtdXN0IGxpZSB3aXRoaW4gdGhlIHJlY2VpdmVkIHNrYiwgYW5kIHRoZVxuJiM0MztcdFx0ICogY2hhaW4gbXVzdCBtb3ZlIGZvcndhcmQgc28gYSBtb2RlbSBjYW5ub3QgbWFrZSB0aGUgbG9vcFxuJiM0MztcdFx0ICogY3ljbGUgYmV0d2VlbiB0d28gdGFibGVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoYWR0aF9pbmRleCBcdTAwM2M9IHByZXZfaW5kZXggfHxcbiYjNDM7XHRcdCAgICBhZHRoX2luZGV4IFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZGJoKSB8fFxuJiM0MztcdFx0ICAgIGFkdGhfaW5kZXggXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG11eF9hZHRoKSlcbiYjNDM7XHRcdFx0Z290byBhZGJfZGVjb2RlX2VycjtcbiYjNDM7XHRcdHByZXZfaW5kZXggPSBhZHRoX2luZGV4O1xuJiM0MztcbiBcdFx0LyogR2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIGhlYWRlci4gKi9cbiBcdFx0YWR0aCA9IChzdHJ1Y3QgbXV4X2FkdGggKikoYmxvY2sgJiM0MzsgYWR0aF9pbmRleCk7XG4gXG5AQCAtNjI5LDYgJiM0Mzs2NDUsMTAgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxuIFx0XHRpZiAobGUxNl90b19jcHUoYWR0aC1cdTAwM2V0YWJsZV9sZW5ndGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZHRoKSlcbiBcdFx0XHRnb3RvIGFkYl9kZWNvZGVfZXJyO1xuIFxuJiM0MztcdFx0LyogVGhlIHdob2xlIGRhdGFncmFtIHRhYmxlIG11c3QgZml0IGluIHRoZSByZWNlaXZlZCBza2IuICovXG4mIzQzO1x0XHRpZiAobGUxNl90b19jcHUoYWR0aC1cdTAwM2V0YWJsZV9sZW5ndGgpIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gYWR0aF9pbmRleClcbiYjNDM7XHRcdFx0Z290byBhZGJfZGVjb2RlX2VycjtcbiYjNDM7XG4gXHRcdC8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGRhdGFncmFtcy4gKi9cbiBcdFx0bnJfb2ZfZGcgPSAobGUxNl90b19jcHUoYWR0aC1cdTAwM2V0YWJsZV9sZW5ndGgpIC1cbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBtdXhfYWR0aCkpIC9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXV0FOJiMzNDssCiAgICAmIzM0O0lPU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdXhfZGxfcHJvY2Vzc19kZyYjMzQ7LAogICAgJiMzNDttdXhfZGxfYWRiX2RlY29kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5maW5pdGUgbG9vcHMgd2hlbiBwcm9jZXNzaW5nIGRvd25saW5rIGRhdGFncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBmb3VuZCBieSBzeXprYWxsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIG5vIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBleGlzdCBpbiB0aGlzIHBhcnNpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDllNzY5MTJjNGM2MmJiZmY5YzljZDI2NzRmMDMzNGYxODcwMmVlYWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAwNjo1NDo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYyBiL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYwppbmRleCBiZmY0NmY3Y2E1OWYzZi4uMGJiZDQxMjYzY2MyZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMKQEAgLTU1MywxOSAmIzQzOzU1MywyMSBAQCBzdGF0aWMgaW50IG11eF9kbF9wcm9jZXNzX2RnKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IG11eF9hZGJoICphZGJoLAogCXUzMiBwYWNrZXRfb2Zmc2V0LCBpLCByYywgZGdfbGVuOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX29mX2RnOyBpJiM0MzsmIzQzOywgZGcmIzQzOyYjNDM7KSB7Ci0JCWlmIChsZTMyX3RvX2NwdShkZy0mZ3Q7ZGF0YWdyYW1faW5kZXgpCi0JCQkJJmx0OyBzaXplb2Yoc3RydWN0IG11eF9hZGJoKSkKJiM0MzsJCXUzMiBkZ19pbmRleCA9IGxlMzJfdG9fY3B1KGRnLSZndDtkYXRhZ3JhbV9pbmRleCk7CiYjNDM7CiYjNDM7CQlkZ19sZW4gPSBsZTE2X3RvX2NwdShkZy0mZ3Q7ZGF0YWdyYW1fbGVuZ3RoKTsKJiM0MzsKJiM0MzsJCWlmIChkZ19pbmRleCAmbHQ7IHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKQogCQkJZ290byBkZ19lcnJvcjsKIAotCQkvKiBJcyB0aGUgcGFja2V0IGluc2lkZSBvZiB0aGUgQURCICovCi0JCWlmIChsZTMyX3RvX2NwdShkZy0mZ3Q7ZGF0YWdyYW1faW5kZXgpICZndDs9Ci0JCQkJCWxlMzJfdG9fY3B1KGFkYmgtJmd0O2Jsb2NrX2xlbmd0aCkpIHsKJiM0MzsJCS8qIElzIHRoZSBwYWNrZXQgaW5zaWRlIG9mIHRoZSBBREIgYW5kIHRoZSByZWNlaXZlZCBza2IgPyAqLwomIzQzOwkJaWYgKGRnX2luZGV4ICZndDs9IGxlMzJfdG9fY3B1KGFkYmgtJmd0O2Jsb2NrX2xlbmd0aCkgfHwKJiM0MzsJCSAgICBkZ19pbmRleCAmZ3Q7PSBza2ItJmd0O2xlbiB8fAomIzQzOwkJICAgIGRnX2xlbiAmZ3Q7IHNrYi0mZ3Q7bGVuIC0gZGdfaW5kZXggfHwKJiM0MzsJCSAgICBkbF9oZWFkX3BhZF9sZW4gJmd0Oz0gZGdfbGVuKSB7CiAJCQlnb3RvIGRnX2Vycm9yOwogCQl9IGVsc2UgewotCQkJcGFja2V0X29mZnNldCA9Ci0JCQkJbGUzMl90b19jcHUoZGctJmd0O2RhdGFncmFtX2luZGV4KSAmIzQzOwotCQkJCWRsX2hlYWRfcGFkX2xlbjsKLQkJCWRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLSZndDtkYXRhZ3JhbV9sZW5ndGgpOwomIzQzOwkJCXBhY2tldF9vZmZzZXQgPSBkZ19pbmRleCAmIzQzOyBkbF9oZWFkX3BhZF9sZW47CiAJCQkvKiBQYXNzIHRoZSBwYWNrZXQgdG8gdGhlIG5ldGlmIGxheWVyLiAqLwogCQkJcmMgPSBpcGNfbXV4X25ldF9yZWNlaXZlKGlwY19tdXgsIGlmX2lkLCBpcGNfbXV4LSZndDt3d2FuLAogCQkJCQkJIHBhY2tldF9vZmZzZXQsCkBAIC01ODksMTIgJiM0Mzs1OTEsMTYgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LAogCXN0cnVjdCBtdXhfYWRiaCAqYWRiaDsKIAlzdHJ1Y3QgbXV4X2FkdGggKmFkdGg7CiAJaW50IG5yX29mX2RnLCBpZl9pZDsKLQl1MzIgYWR0aF9pbmRleDsKJiM0MzsJdTMyIGFkdGhfaW5kZXgsIHByZXZfaW5kZXggPSAwOwogCXU4ICpibG9jazsKIAogCWJsb2NrID0gc2tiLSZndDtkYXRhOwogCWFkYmggPSAoc3RydWN0IG11eF9hZGJoICopYmxvY2s7CiAKJiM0MzsJLyogVGhlIGJsb2NrIGhlYWRlciBpdHNlbGYgbXVzdCBmaXQgaW4gdGhlIHJlY2VpdmVkIHNrYi4gKi8KJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpCiYjNDM7CQlnb3RvIGFkYl9kZWNvZGVfZXJyOwomIzQzOwogCS8qIFByb2Nlc3MgdGhlIGFnZ3JlZ2F0ZWQgZGF0YWdyYW0gdGFibGVzLiAqLwogCWFkdGhfaW5kZXggPSBsZTMyX3RvX2NwdShhZGJoLSZndDtmaXJzdF90YWJsZV9pbmRleCk7CiAKQEAgLTYwNiw2ICYjNDM7NjEyLDE2IEBAIHN0YXRpYyB2b2lkIG11eF9kbF9hZGJfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwKIAogCS8qIExvb3AgdGhyb3VnaCBtaXhlZCBzZXNzaW9uIHRhYmxlcy4gKi8KIAl3aGlsZSAoYWR0aF9pbmRleCkgewomIzQzOwkJLyogVGhlIHRhYmxlIGhlYWRlciBtdXN0IGxpZSB3aXRoaW4gdGhlIHJlY2VpdmVkIHNrYiwgYW5kIHRoZQomIzQzOwkJICogY2hhaW4gbXVzdCBtb3ZlIGZvcndhcmQgc28gYSBtb2RlbSBjYW5ub3QgbWFrZSB0aGUgbG9vcAomIzQzOwkJICogY3ljbGUgYmV0d2VlbiB0d28gdGFibGVzLgomIzQzOwkJICovCiYjNDM7CQlpZiAoYWR0aF9pbmRleCAmbHQ7PSBwcmV2X2luZGV4IHx8CiYjNDM7CQkgICAgYWR0aF9pbmRleCAmbHQ7IHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpIHx8CiYjNDM7CQkgICAgYWR0aF9pbmRleCAmZ3Q7IHNrYi0mZ3Q7bGVuIC0gc2l6ZW9mKHN0cnVjdCBtdXhfYWR0aCkpCiYjNDM7CQkJZ290byBhZGJfZGVjb2RlX2VycjsKJiM0MzsJCXByZXZfaW5kZXggPSBhZHRoX2luZGV4OwomIzQzOwogCQkvKiBHZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgaGVhZGVyLiAqLwogCQlhZHRoID0gKHN0cnVjdCBtdXhfYWR0aCAqKShibG9jayAmIzQzOyBhZHRoX2luZGV4KTsKIApAQCAtNjI5LDYgJiM0Mzs2NDUsMTAgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LAogCQlpZiAobGUxNl90b19jcHUoYWR0aC0mZ3Q7dGFibGVfbGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3QgbXV4X2FkdGgpKQogCQkJZ290byBhZGJfZGVjb2RlX2VycjsKIAomIzQzOwkJLyogVGhlIHdob2xlIGRhdGFncmFtIHRhYmxlIG11c3QgZml0IGluIHRoZSByZWNlaXZlZCBza2IuICovCiYjNDM7CQlpZiAobGUxNl90b19jcHUoYWR0aC0mZ3Q7dGFibGVfbGVuZ3RoKSAmZ3Q7IHNrYi0mZ3Q7bGVuIC0gYWR0aF9pbmRleCkKJiM0MzsJCQlnb3RvIGFkYl9kZWNvZGVfZXJyOwomIzQzOwogCQkvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBkYXRhZ3JhbXMuICovCiAJCW5yX29mX2RnID0gKGxlMTZfdG9fY3B1KGFkdGgtJmd0O3RhYmxlX2xlbmd0aCkgLQogCQkJCQlzaXplb2Yoc3RydWN0IG11eF9hZHRoKSkgLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdXQU4gSU9TTSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQgdG8gYGRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY2AuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGl0IHNlZW1zIHRoZXkmIzM5O3ZlIGFkZGVkIHNvbWUgY3J1Y2lhbCBib3VuZHMgY2hlY2tpbmcgd2l0aGluIHRoZSBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSBub3cgdmFsaWRhdGluZyB0aGF0IGBkZ19pbmRleGAgYW5kIGBkZ19sZW5gLCBgYWR0aF9pbmRleGAsIGFuZCBgYWR0aC0mZ3Q7dGFibGVfbGVuZ3RoYCBhbGwgZmFsbCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGBza2ItJmd0O2xlbmAuIEV4Y2VsbGVudC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMsIG9yIGV2ZW4gdGhlIGRyZWFkZWQgaW5maW5pdGUgbG9vcCwgaW4gdGhpcyBwYXJ0IG9mIHRoZSBXV0FOIElPU00gZHJpdmVyLiBTZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpOb3csIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzOiAqY2FuIHRoaXMgY29kZSBldmVuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8qIFRoZSBJT1NNIGRyaXZlciwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIEludGVsIE0uMiBJT1NNIG1vZGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkgUENJZS1iYXNlZC4gSXMgdGhlcmUgc29tZSBtZWFucyB0byBlbXVsYXRlIHRoaXMsIHRvIGluamVjdCBwYWNrZXRzIGludG8gaXQgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZz8gSSYjMzk7ZCByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiB0ZXN0YWJsZSBvciByZW1vdGVseSB2dWxuZXJhYmxlLgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIGBkcml2ZXJzL25ldC93d2FuL2lvc20vS2NvbmZpZ2AsIGFuZCBhbHNvIHJlLWV4YW1pbmUgdGhlIGBpb3NtX2lwY19tdXhfY29kZWMuY2AgZmlsZSBpdHNlbGYuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIGlzIGVuYWJsZWQuIEhvcGVmdWxseSwgaXTigJlsbCBoaWdobGlnaHQgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIG1ha2UgaXQgYWNjZXNzaWJsZSBvciBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHdpdGhpbiBkaWZmZXJlbnQgZGVwbG95bWVudCBzY2VuYXJpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGF0dGFjayBzdXJmYWNlIGJlZm9yZSBJIGNhbiB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdXhfZGxfcHJvY2Vzc19kZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTUxOD1zdGF0aWMgdm9pZCBpcGNfbXV4X2RsX2FjYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy01NDctLyogcHJvY2VzcyBkYXRhZ3JhbSAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjU0ODpzdGF0aWMgaW50IG11eF9kbF9wcm9jZXNzX2RnKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IG11eF9hZGJoICphZGJoLFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTU0OS1cdFx0XHQgICAgIHN0cnVjdCBtdXhfYWR0aF9kZyAqZGcsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTU4Nj1zdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY3MC1cdFx0ZGcgPSBhZHRoLVx1MDAzZWRnO1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjY3MTpcdFx0aWYgKG11eF9kbF9wcm9jZXNzX2RnKGlwY19tdXgsIGFkYmgsIGRnLCBza2IsIGlmX2lkLFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY3Mi1cdFx0XHRcdCAgICAgIG5yX29mX2RnKSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBtdXhfZGxfYWRiX2RlY29kZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG11eF9kbF9hZGJfZGVjb2RlYC4gRmlyc3QsIG15IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGxvY2F0ZSBhbGwgaXRzIGNhbGwgc2l0ZXMuIFRoYXTigJlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBmdW5jdGlvbiwgd2hhdCBpbnB1dHMgaXQmIzM5O3MgbGlrZWx5IHJlY2VpdmluZywgYW5kIHdoYXQgaXQmIzM5O3MgYmVpbmcgdXNlZCBmb3Igd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgZm9yIHRoaXMg4oCTIGEgcm9idXN0IGNvZGUgc2VhcmNoLCBwcmVmZXJhYmx5IHdpdGggY3Jvc3MtcmVmZXJlbmNpbmcgY2FwYWJpbGl0aWVzIHRvIGp1bXAgZGlyZWN0bHkgdG8gdGhlIGNhbGwgc2l0ZXMuIEZyb20gdGhlcmUsIEkgY2FuIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBkYXRhIGlzIHByZXBhcmVkIGZvciB0aGUgZnVuY3Rpb24gYW5kIHdoYXQgdGhlIHJldHVybmVkIHZhbHVlIGlzIHN1YnNlcXVlbnRseSB1dGlsaXplZCBmb3IuIFRoYXQgY29udGV4dCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O211eF9kbF9hZGJfZGVjb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmM9NTQ4PXN0YXRpYyBpbnQgbXV4X2RsX3Byb2Nlc3NfZGcoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3QgbXV4X2FkYmggKmFkYmgsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTU4NS0vKiBEZWNvZGUgYW4gYWdncmVnYXRlZCBkYXRhIGJsb2NrLiAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjU4NjpzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNTg3LVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTY5Mj12b2lkIGlwY19tdXhfZGxfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNzAzLVx0Y2FzZSBJT1NNX0FHR1JfTVVYX1NJR19BREJIOlx0LyogQWdncmVnYXRlZCBEYXRhIEJsb2NrIEhlYWRlciAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjcwNDpcdFx0bXV4X2RsX2FkYl9kZWNvZGUoaXBjX211eCwgc2tiKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy03MDUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBgaXBjX211eF9kbF9kZWNvZGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBpcGNfbXV4X2RsX2RlY29kZWAgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgZXhlcmNpc2UsIGJ1dCBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcyBhcm91bmQgdGhhdCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gbG9jYXRlIGFsbCB0aGUgY2FsbCBzaXRlcy4gSXMgaXQgd2l0aGluIHRoZSBzYW1lIG1vZHVsZSwgb3Igc3ByZWFkIGFjcm9zcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbT8gRmluZGluZyBhbGwgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZTsgYW55IGFzc3VtcHRpb25zIEkgaGF2ZSBhYm91dCBpdHMgYmVoYXZpb3IgYXJlIG5vdyBzZWNvbmRhcnkgdG8gZmluZGluZyBpdHMgb3JpZ2luIHN0b3J5LCBob3cgaXQmIzM5O3MgYWN0aXZhdGVkLCBhbmQgdGhlIG90aGVyIGZ1bmN0aW9ucyBpdCByZWxpZXMgdXBvbi4gT25jZSBJIGtub3cgZXhhY3RseSB3aGVyZSB0aGUgY2FsbCBpcywgSSBjYW4gdGhlbiBkZXRlcm1pbmUgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQgaW4gYW5kIHdoYXQgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSB3aWxsIGJlLiBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGNfbXV4X2RsX2RlY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYz0yOTg9c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zMjQtXHRcdGlmIChwaXBlLVx1MDAzZWNoYW5uZWwtXHUwMDNlaWZfaWQgPT0gSVBDX01FTV9NVVhfSVBfQ0hfSUZfSUQpXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jOjMyNTpcdFx0XHRpcGNfbXV4X2RsX2RlY29kZShpcGNfaW1lbS1cdTAwM2VtdXgsIHNrYik7XG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTMyNi1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTU4Nj1zdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY4Ni0vKipcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo2ODc6ICogaXBjX211eF9kbF9kZWNvZGUgLSAgUm91dGUgdGhlIERMIHBhY2tldCB0aHJvdWdoIHRoZSBJUCBNVVggbGF5ZXJcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy02ODgtICogICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIEhlYWRlci5cbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNjkxLSAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjY5Mjp2b2lkIGlwY19tdXhfZGxfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy02OTMte1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuaD0yNTg9dW5pb24gbXV4X3R5cGVfaGVhZGVyIHtcbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmgtMjYyLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5oOjI2Mzp2b2lkIGlwY19tdXhfZGxfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmgtMjY0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgcXVlc3Rpb24gYWJvdXQgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYDoKCioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3NgKioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpczogd2hlcmUgZG9lcyB0aGlzIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgZnVuY3Rpb24gZ2V0IGNhbGxlZCBmcm9tPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUuICBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBncmFwaC4KCkltbWVkaWF0ZWx5LCBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHNldmVyYWwgYXBwcm9hY2hlcyB0byBkZXRlcm1pbmUgaXRzIGNhbGxpbmcgY29udGV4dC4gRGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYW5kIHRvb2xzIGF2YWlsYWJsZSwgSSYjMzk7ZCBwcm9iYWJseSBzdGFydCB3aXRoIGBncmVwYCBvciBhIHNpbWlsYXIgdGV4dCBzZWFyY2ggYWNyb3NzIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBiYXNlLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGFsbCBpbnN0YW5jZXMgd2hlcmUgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYCBpcyB1c2VkLCBpZGVhbGx5IGZpbHRlcmluZyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwgaXRzZWxmIG9yIHJlbGF0ZWQgZnVuY3Rpb24gcG9pbnRlcnMuCgpBbHRlcm5hdGl2ZWx5LCBpZiBJJiMzOTttIHdvcmtpbmcgd2l0aCBhIGRlYnVnZ2VyIG9yIGEgc3RhdGljIGFuYWx5c2lzIHRvb2wsIEkgY2FuIGVhc2lseSBkZXRlcm1pbmUgZnVuY3Rpb24gY2FsbCByZWxhdGlvbnNoaXBzLiBBIGRlYnVnZ2VyJiMzOTtzICYjMzQ7Y2FsbCBzdGFjayYjMzQ7IGZlYXR1cmUgd291bGQgcXVpY2tseSByZXZlYWwgdGhlIGNhbGxpbmcgZnVuY3Rpb24uICBTaW1pbGFybHksIGEgc3RhdGljIGFuYWx5emVyIHdvdWxkIG9mZmVyIGEgbW9yZSBzdHJ1Y3R1cmVkIHZpZXcgb2YgdGhlIGNhbGwgZ3JhcGgsIHNob3dpbmcgbm90IGp1c3QgdGhlIGltbWVkaWF0ZSBjYWxsZXIsIGJ1dCBwb3RlbnRpYWxseSB0aGUgZW50aXJlIGNoYWluLgoKSSBhbHNvIGhhdmUgdG8gcmVtZW1iZXIgdG8gY29uc2lkZXIgcG90ZW50aWFsIGluZGlyZWN0aW9ucy4gVGhlIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhIHRhYmxlIG9mIGZ1bmN0aW9uIHBvaW50ZXJzLCBzbyBJIHdpbGwgaGF2ZSB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIHRoZSBleHRyYSBsZXZlbCBvZiBpbmRpcmVjdGlvbi4KCktub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaXMgY3JpdGljYWwuIFRoYXQgZ2l2ZXMgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBXaGF0IGRhdGEgaXMgcGFzc2VkPyBXaGF0IGFyZSB0aGUgZXhwZWN0ZWQgaW5wdXRzIGFuZCBvdXRwdXRzPyBUaGlzIGNvbnRleHQgd2lsbCBoZWF2aWx5IGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYCBpcyBhY3R1YWxseSAqZG9pbmcqLiBBbmQsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBJIG1pZ2h0IGV2ZW4gbmVlZCB0byBjb25zaWRlciBpbnRlcnJ1cHQgaGFuZGxlcnMgb3Igb3RoZXIgYXN5bmNocm9ub3VzIGNvbnRleHRzLiAgSSB3aWxsIGhhdmUgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBwcm9ncmFtIGRvZXMgbm90IGFsbG93IGludGVycnVwdHMgdG8gcnVuIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGV4ZWN1dGVkLgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBwZXJmb3JtIGEgY2FsbCBncmFwaCB0cmF2ZXJzYWwsIGJlZ2lubmluZyB3aXRoIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgYW5kIHdvcmtpbmcgbXkgd2F5IHVwd2FyZHMgdG8gZGlzY292ZXIgaXRzIGltbWVkaWF0ZSBhbmQgaGlnaC1sZXZlbCBjYWxsZXJzLiAgVGhpcyBjYWxsIGdyYXBoIHdpbGwgcmV2ZWFsIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgb3IgY29udHJvbCBmbG93IG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwY19pbWVtX2RsX3NrYl9wcm9jZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI2Mj12b2lkIGlwY19pbWVtX2lwY19pbml0X2NoZWNrKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMjk3LS8qIEFuYWx5emUgdGhlIHBhY2tldCB0eXBlIGFuZCBkaXN0cmlidXRlIGl0LiAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzoyOTg6c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTI5OS1cdFx0XHRcdCAgICBzdHJ1Y3QgaXBjX3BpcGUgKnBpcGUsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYz0zMzQ9c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYwLVx0XHQvKiBBbmFseXplIHRoZSBwYWNrZXQgdHlwZSBhbmQgZGlzdHJpYnV0ZSBpdC4gKi9cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM6MzYxOlx0XHRpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhpcGNfaW1lbSwgcGlwZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjEwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBpcGNfaW1lbV9kbF9waXBlX3Byb2Nlc3NgKioKCk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlciBpczogd2hlcmUgKmV4YWN0bHkqIGlzIHRoaXMgYGlwY19pbWVtX2RsX3BpcGVfcHJvY2Vzc2AgZnVuY3Rpb24gYmVpbmcgaW52b2tlZCBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBzdGFjayB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gSXMgaXQgdHJpZ2dlcmVkIGZyb20gYSBoaWdoLWxldmVsIGRyaXZlciwgYSBsb3dlci1sZXZlbCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciwgb3Igc29tZXdoZXJlIGluIGJldHdlZW4/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgb3IgZXh0ZW5kaW5nIHRoaXMgcGFydCBvZiB0aGUgY29kZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gSXMgdGhlcmUgYSBjcm9zcy1yZWZlcmVuY2UgdG9vbCBJIGNhbiB1c2UgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8ga25vdyB0aGUgb3JpZ2luIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI5OD1zdGF0aWMgdm9pZCBpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhzdHJ1Y3QgaW9zbV9pbWVtICppcGNfaW1lbSxcbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTMzMy0vKiBQcm9jZXNzIHRoZSBkb3dubGluayBkYXRhIGFuZCBwYXNzIHRoZW0gdG8gdGhlIGNoYXIgb3IgbmV0IGxheWVyLiAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzozMzQ6c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zMzUtXHRcdFx0XHQgICAgIHN0cnVjdCBpcGNfcGlwZSAqcGlwZSlcbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTY0Mj1zdGF0aWMgdm9pZCBpcGNfaW1lbV9oYW5kbGVfaXJxKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLCBpbnQgaXJxKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtNzM1LVx0XHQgICAgKGlycSA9PSBJTUVNX0lSUV9ET05UX0NBUkUgfHwgaXJxID09IGRsX3BpcGUtXHUwMDNlaXJxKSkge1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzo3MzY6XHRcdFx0aXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKGlwY19pbWVtLCBkbF9waXBlKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtNzM3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBkYXRhIGNvbWluZyBkaXJlY3RseSBmcm9tIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBQQ0llIGludGVyZmFjZS4gR2l2ZW4gdGhhdCBzeXprYWxsZXIgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGEgd2F5IHRvIGVtdWxhdGUgdGhpcyBwYXJ0aWN1bGFyIFBDSWUgZGV2aWNlIOKAkyB0aGUgSW50ZWwgTS4yIElPU00gbW9kZW1zIOKAkyBJJiMzOTttIGhpZ2hseSBza2VwdGljYWwgdGhhdCB0aGlzIGNvZGUgd291bGQgYmUgYWNjZXNzaWJsZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLCB1bmxlc3MgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBvciwgaWRlYWxseSwgYW4gaW5qZWN0aW9uIHBvaW50IHNvbWV3aGVyZS4gVGhhdCYjMzk7cyB0aGUga2V5OiBpcyB0aGVyZSAqYW55KiB3YXkgdG8gZ2V0IHRoaXMgY29kZSB0byBleGVjdXRlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlPwoKVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gY2hlY2tpbmcgZm9yIGlzIGFuIGluamVjdGlvbiBwb2ludC4gSXMgdGhpcyBwcm9jZXNzIHB1cmVseSBoYXJkd2FyZS1kcml2ZW4sIG9yIGFyZSB0aGVyZSBzb2Z0d2FyZSBob29rcyB3ZSBjYW4gZXhwbG9pdD8gSSYjMzk7bSB1c2VkIHRvIHRvb2xzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2lGaSwgYnV0IGlzIHRoZXJlIGFuIGVxdWl2YWxlbnQgZm9yIHRoZSBXV0FOIHN1YnN5c3RlbT8gTm9wZSwgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBubyBnZW5lcmljIGVtdWxhdG9yIGZvciBXV0FOLiBPa2F5LCB0aGF0JiMzOTtzIGEgYnVtbWVyLgoKSG1tLCB3YWl0IGEgbWludXRlLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBgc3l6X3VzYl9jb25uZWN0YCBmdW5jdGlvbiBmb3IgVVNCIGRldmljZXMuIEJ1dCB0aGlzIGlzIGEgUENJZSBkZXZpY2UsIHNvIHRoYXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IHJlbGV2YW50LCBidXQgSSBzaG91bGQgbG9vayBhdCB0aGF0IHRvby4gTm93IEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgSSBjYW4gdXNlLiBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmNgIGZpbGUgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYz01MzU9c3RhdGljIGludCBwbV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpfdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmMtNTQ1LVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYzo1NDY6XHRcdFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpb3NtX2lwY19kcml2ZXIpO1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYy01NDctXHRcdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmM9NTYzPXN0YXRpYyBpbnQgX19pbml0IGlvc21faXBjX2RyaXZlcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYy01NjYtXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jOjU2NzpcdHJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2aW9zbV9pcGNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmMtNTY4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5emthbGxlciBCdWcgUmVwb3J0OiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHNlZW1zIGxpa2UgaXQgcmVsYXRlcyB0byBhIFBDSWUgZHJpdmVyLiBTeXprYWxsZXIsIGluIGdlbmVyYWwsIHN0cnVnZ2xlcyB3aXRoIGRpcmVjdCBmdXp6aW5nIG9mIFBDSWUgZGV2aWNlcyB3aXRob3V0IGEgc3BlY2lmaWMgZW11bGF0b3IgbGlrZSBgdmhjaWAgZm9yIFVTQiBvciBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaS4gSSBzZWVtIHRvIHJlY2FsbCB0aGVyZSYjMzk7cyBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgc3VwcG9ydCB3aXRoIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWAg4oCTIG5vLCB3YWl0LCB0aGF0IGlzbiYjMzk7dCBhIGdlbmVyaWMgd2F5IHRvIGluamVjdCBkYXRhIGludG8gRE1BIHJpbmdzLiBObywgd2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X2t2bV9zZXR1cF9jcHVgLCBidXQgbm90aGluZyBnZW5lcmljIGZvciBETUEgcmluZ3MuCgpIb2xkIG9uLCBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzPyBJIHRob3VnaHQgaXQgbWlnaHQgdXNlIGEgYHN5el9wY2lfZGV2aWNlYCBzeXNjYWxsIG9yIHNvbWUgc2V0dXAgZnVuY3Rpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYmFjayB1cC4gVGhlIHBhdGNoIGF1dGhvciBpcyBsaXN0ZWQgYXMgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBTeXprYWxsZXIgKmZvdW5kKiB0aGlzIGJ1ZyEgVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSWYgU3l6a2FsbGVyIGlkZW50aWZpZWQgdGhlIGJ1ZywgaXQgbWVhbnMgaXQgY2FuIHJlYWNoIHRoZSB2dWxuZXJhYmxlIGNvZGUuIEJ1dCBob3c/IElzIGl0IHRocm91Z2ggYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBvciBzb21lIHNwZWNpZmljIHNldHVwPwoKQ291bGQgdGhpcyBiZSBsaW5rZWQgdG8gYSBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5X2lkYCBjYWxsIG9yIGlzIGl0IHBlcmhhcHMgZnV6emluZyB2aWEgYSBuZXRsaW5rIHNvY2tldD8gTm8sIHRoaXMgaXMgZG93bmxpbmsgZGF0YSBwcm9jZXNzaW5nIGluIGBtdXhfZGxfcHJvY2Vzc19kZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBwYWNrZXRzIGFyZSBiZWluZyBpbmplY3RlZC4KClJpZ2h0LCB0aGUgcGF0Y2ggYXV0aG9yICppcyogYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLCBjb25maXJtaW5nIFN5emthbGxlciYjMzk7cyByb2xlLiBJIHNob3VsZCBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIGNsdWVzIG9yIHNlZSB3aGF0IFN5emthbGxlciBpcyBjYXBhYmxlIG9mLgoKV2FpdCwgbWF5YmUgdGhpcyBpc24mIzM5O3QgYSBQQ0llIGRldmljZSBhdCBhbGw/IExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuY2AuCgpPa2F5LCBubywgU3l6a2FsbGVyIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBhIGdlbmVyaWMgYHN5el9wY2lfZGV2aWNlYCBzeXNjYWxsLCBhbmQgaW5zdGVhZCBoYXMgYHN5el91c2JfY29ubmVjdGAgYW5kIGBzeXpfODAyMTFfaW5qZWN0YC4KCkkgbmVlZCB0byBnbyBiYWNrIG92ZXIgd2hhdCBJIGtub3csIGRvZXMgU3l6a2FsbGVyIHV0aWxpemUgYHZmaW9gIG9yIHNvbWV0aGluZyBzaW1pbGFyIGZvciBQQ0k/IE5vLiBJdCBoYXMgYSBgc3l6X3BjaV9kZXZpY2VgIHBzZXVkby1zeXNjYWxsPyBObywgaXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgLgoKQ291bGQgdGhpcyBiZSBhY2Nlc3NlZCB2aWEgYHR1bmAgb3IgYHRhcGA/IE5vLCB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBXV0FOIGRyaXZlci4KCldhaXQsIGNvdWxkIHRoaXMgYnVnIGhhdmUgYmVlbiBmb3VuZCBieSBhICpkaWZmZXJlbnQqIGZ1enplciwgYW5kIHRoZSBwYXRjaCB3YXMganVzdCBpbnRlZ3JhdGVkIGJ5IHN5ei1jbHVzdGVyPyBBaCEgSSBzZWUgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0OyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgaXNuJiMzOTt0IFN5emthbGxlciAqZmluZGluZyogdGhlIGJ1ZywgYnV0IHJhdGhlciBpdHMgaW5mcmFzdHJ1Y3R1cmUgdGVzdGluZyBhIHBhdGNoIHN1Ym1pdHRlZCBieSBhIHVzZXIuCgpZZXMsICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgaW5kaWNhdGVzIHRoYXQgc3l6Ym90IGNyZWF0ZWQgYSB0ZXN0aW5nIGJyYW5jaCB0byB2YWxpZGF0ZSBhIHVzZXItcHJvcG9zZWQgcGF0Y2ghIFRoaXMgY29uZmlybXMgdGhhdCBzeXpib3QgKmRpZCogZmluZCBhIGNyYXNoIGhlcmUuCgpOb3csIGxldCYjMzk7cyBzZWFyY2ggU3l6Ym90JiMzOTtzIGJ1ZyByZXBvcnRzIGZvciAmIzM0O2lvc20uJiMzNDsKCldhaXQgYSBtb21lbnQsIGNhbiBTeXpib3QgZnV6eiBQQ0kgZGV2aWNlcz8gSXQgdXNlcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCLiBJcyBJT1NNIGEgVVNCIGRldmljZT8gTm8sIGl0JiMzOTtzIFBDSWUuCgpNYXliZSB0aGlzIGlzIHJlYWNoZWQgdGhyb3VnaCBhIGNoYXJhY3RlciBkZXZpY2U/IExldCBtZSBjaGVjayBgaW9zbV9pcGNfaW1lbS5jYCDigJMgaXQgaGFzIGBpcGNfaW1lbV9kbF9waXBlX3Byb2Nlc3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIGNoYXJhY3RlciBkZXZpY2Ugb3IgbmV0bGluayBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5qZWN0aW5nIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVfb3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmM9MzU9aXBjX3RyYWNlX2NyZWF0ZV9idWZfZmlsZV9oYW5kbGVyKGNvbnN0IGNoYXIgKmZpbGVuYW1lLFxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jLTQyLVx0cmV0dXJuIGRlYnVnZnNfY3JlYXRlX2ZpbGUoZmlsZW5hbWUsIG1vZGUsIHBhcmVudCwgYnVmLFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmM6NDM6XHRcdFx0XHQgICBcdTAwMjZyZWxheV9maWxlX29wZXJhdGlvbnMpO1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmMtNDQtfVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jPTg3PXN0YXRpYyBzc2l6ZV90IGlwY190cmFjZV9jdHJsX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmMtMTIxLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmM6MTIyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwY190cmFjZV9mb3BzID0ge1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmMtMTIzLVx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXV0FOIERhdGEgRmxvdyBhbmQgU3l6a2FsbGVyIEZ1enppbmcg4oCTIEEgQnJpZWYgSW5xdWlyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaW9zbV9pcGNfdHJhY2UuY2AgZmlsZSBhbmQsIHJpZ2h0LCBpdCBoYXMgZGVidWdmcy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IG15IHJlYWwgY29uY2VybiByaWdodCBub3cgaXMgdGhlIFdXQU4gY29yZSBpdHNlbGYsIHNwZWNpZmljYWxseSBgd3dhbl9jb3JlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgV1dBTiBkcml2ZXIuIEkga25vdyBXV0FOIGV4cG9zZXMgYSBjaGFyYWN0ZXIgZGV2aWNlLCBgd3dhbl9wb3J0X29wc2AsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCBkYXRhIGRpcmVjdGlvbi4gSSBzZWUgYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgaW1tZWRpYXRlbHkgdGhpbmsgJiMzNDtkb3dubGluaywmIzM0OyBtZWFuaW5nIHRoZSBtb2RlbSBpcyAqc2VuZGluZyogZGF0YSB0byB0aGUgaG9zdC4gQnV0IGhvdyBkb2VzIHN5emthbGxlciBnZXQgKmRvd25saW5rKiBkYXRhIGludG8gdGhhdCBwaXBlbGluZT8gSG93IGRvZXMgaXQgKnRyaWdnZXIqIGRvd25saW5rIGRhdGE/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcywgY291bGQgdGhpcyBiZSBsb29wZWQgYmFjayBzb21laG93PyBEb2VzIHRoZSBkcml2ZXIgaGF2ZSBzb21lIGxvb3BiYWNrIG1lY2hhbmlzbT8gSWYgdGhlIGhvc3Qgc2VuZHMgZGF0YSwgYW4gJiMzNDt1cGxpbmsmIzM0OywgZG9lcyB0aGUgZHJpdmVyIHN1YnNlcXVlbnRseSBlY2hvIGl0LCBhbmQgbWF5YmUgdGhhdCB0cmlnZ2VycyBzb21lIHByb2Nlc3Npbmcgb24gdGhlICYjMzQ7ZG93bmxpbmsmIzM0OyBwYXRoPyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhpbmdzLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgYG11eF91bF9wcm9jZXNzX2RnYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gZGVhbGluZyB3aXRoIHVwbGluayBkYXRhIHRvIHNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBrZXkgbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wYmFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAyMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgRGF0YSBJbmplY3Rpb24gUG90ZW50aWFsIGluIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBwcm9iZSB0aGUgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBhc3Nlc3MgaWYgdGhlcmUmIzM5O3MgYSBwbGF1c2libGUgcGF0aHdheSBmb3IgZGF0YSBpbmplY3Rpb24gaGVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBpbiBhbnkgc2VjdXJpdHkgYW5hbHlzaXMsIGFzIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgaXMgcGFyYW1vdW50LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwYXJhbWV0ZXJzIGl0IHRha2VzLCB3aGF0IGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCBob3cgdGhhdCBkYXRhIGlzIHJlY2VpdmVkIGFuZCBoYW5kbGVkLiBJcyB0aGVyZSBhIGNvbnRyb2wgZmxvdyB0aGF0IHdlIGNhbiBpbmZsdWVuY2U/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgZnV6emluZyBvciBpbnB1dCB2YWxpZGF0aW9uIHdlYWtuZXNzZXMgdGhhdCBtaWdodCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBpbnRlZ2VyIG92ZXJmbG93cywgb3IgZXZlbiBtb3JlIHN1YnRsZSB2dWxuZXJhYmlsaXRpZXM/IFRoZSBnb2FsIGlzIHRvIHNlZSBpZiBhbnkgdW50cnVzdGVkIG9yIG1hbGZvcm1lZCBkYXRhIGNhbiBiZSBpbnRyb2R1Y2VkIHRvIGluZmx1ZW5jZSB0aGUgcHJvZ3JhbSYjMzk7cyBiZWhhdmlvci4gV2UgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2libGUgZGF0YSBzb3VyY2VzIHRvIHNlZSBpZiBvbmUgaGFzIHBvdGVudGlhbC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGJ1aWxkaW5nIHRoZSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0mIzM5O3MgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwY19pbWVtX2RsX3NrYl9wcm9jZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI2Mj12b2lkIGlwY19pbWVtX2lwY19pbml0X2NoZWNrKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMjk3LS8qIEFuYWx5emUgdGhlIHBhY2tldCB0eXBlIGFuZCBkaXN0cmlidXRlIGl0LiAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzoyOTg6c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTI5OS1cdFx0XHRcdCAgICBzdHJ1Y3QgaXBjX3BpcGUgKnBpcGUsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYz0zMzQ9c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYwLVx0XHQvKiBBbmFseXplIHRoZSBwYWNrZXQgdHlwZSBhbmQgZGlzdHJpYnV0ZSBpdC4gKi9cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM6MzYxOlx0XHRpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhpcGNfaW1lbSwgcGlwZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY3NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRnV6emluZyBpbiBTeXprYWxsZXI6IEEgUHJvbWlzaW5nIExlYWQqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIG5vdz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUuIEJpbmdvISBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3ZlIHJlY2VudGx5IGFkZGVkIFBDSSBmdXp6aW5nIHN1cHBvcnQhIEkmIzM5O20gY3VyaW91cyBob3cgdGhleSYjMzk7cmUgZG9pbmcgaXQuLi4gSSB3b25kZXIgaWYgaXQgbGV2ZXJhZ2VzIGBzeXpfcGNpX2RldmljZWAgb3IgYSBzaW1pbGFyIGFic3RyYWN0aW9uLCBvciBwZXJoYXBzIGl0IHVzZXMgYHZmaW9gIHRvIGVtdWxhdGUgZGV2aWNlcz8gSG1tLCB3YWl0LCBkaWQgdGhleSBhZGQgc29tZXRoaW5nIGxpa2UgYSBgdmhjaWAgZm9yIFBDST8gTm8sIEkgdGhpbmsgaXQmIzM5O3MgbW9yZSBsaWtlbHkgdGhhdCB0aGV5JiMzOTtyZSB1c2luZyBgS1ZNYCB0byBpbmplY3QgTU1JTywgUElPLCBvciBETUEgb3BlcmF0aW9ucy4gU28sIGl0IGFwcGVhcnMgc3l6a2FsbGVyIG9mZmVycyBhIG1ldGhvZCB0byBmdXp6IFBDSSBkZXZpY2VzIGJ5IG1hcHBpbmcgTU1JTyByZWdpb25zIGFuZCBnZW5lcmF0aW5nIGludGVycnVwdHMgb3IgaGFzIGEgdmlydHVhbCBQQ0kgZGV2aWNlIGZyYW1ld29yay4KCklmIHN5emthbGxlciBpcyBmaW5kaW5nIHRoZXNlIFBDSS1yZWxhdGVkIGlzc3VlcywgdGhlbiB0aGUgYXR0YWNrIHN1cmZhY2UgbXVzdCBiZSByZWFjaGFibGUuIEdvb2QhIEFuZCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYC4gRXhjZWxsZW50ISBUaGF0IG1lYW5zIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBleHBsb3JpbmcgZnVydGhlciB3aXRoIGZ1enppbmcuCgpMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC4gQmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCB0aGVzZSB3b3VsZCBiZToKKiAgIGBtdXhfZGxfcHJvY2Vzc19kZ2AKKiAgIGBtdXhfZGxfYWRiX2RlY29kZWAKKiAgIGBpcGNfbXV4X2RsX2RlY29kZWAKCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lPU00mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTc4PWNvbmZpZyBSUE1TR19XV0FOX0NUUkxcbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTUtXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTY6Y29uZmlnIElPU01cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo5NzpcdHRyaXN0YXRlIFwmIzM0O0lPU00gRHJpdmVyIGZvciBJbnRlbCBNLjIgV1dBTiBEZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cdGRlcGVuZHMgb24gUENJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHNvIGBDT05GSUdfSU9TTWAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIEdvb2QuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoYXQgc3BlY2lmaWMgc2V0dGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIExldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIG90aGVyIGF2YWlsYWJsZSBjb25maWd1cmF0aW9ucy4gR290dGEgcnVsZSBvdXQgYW55IHJlbGF0ZWQgb3Igb3ZlcmxhcHBpbmcgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEl0JiMzOTtzIGJlc3QgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIGZpcnN0IGJlZm9yZSBmb2N1c2luZyBvbiBhIHNpbmdsZSBwb2ludC4gR290dGEgZW5zdXJlIHRoZXJlIGlzbiYjMzk7dCBhbm90aGVyIGZsYWcgb3Igc2V0dXAgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGlzIHNldHRpbmcuIEFsd2F5cyB0aGUgYmVzdCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJT1NNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU5NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipEaWdnaW5nIGludG8gdGhlIFdXQU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgYSBgY29uZmlnIElPU01gIG9wdGlvbiBtZW50aW9uZWQgaW4gYGRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCYjMzk7cyBhYm91dCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIFdXQU4gZHJpdmVyLiBXaGVyZSYjMzk7cyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkcml2ZXI/IExldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYnVpbGQgcnVsZXMuIFRoYXQgdXN1YWxseSBsaXZlcyBpbiB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IHNhbWUgZGlyZWN0b3J5LiBUaW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIGhvdyBgSU9TTWAgaXMgYmVpbmcgaGFuZGxlZCB0aGVyZS4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGluY2x1c2lvbiBiYXNlZCBvbiB0aGUgYElPU01gIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9zbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfUlBNU0dfV1dBTl9DVFJMKSAmIzQzOz0gcnBtc2dfd3dhbl9jdHJsLm9cbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0lPU00pICYjNDM7PSBpb3NtL1xuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfTVRLX1Q3WFgpICYjNDM7PSB0N3h4L1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJ0aW5nIHdpdGggYElPU01gIGZvciB0aGUgY29uZmlndXJhdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjb25zaWRlciBpZiBgV1dBTmAgYWxzbyBuZWVkcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc2V0dXAuIEEgcXVpY2sgY2hlY2sgZm9yIHRoYXQgaXMgaW4gb3JkZXIuIEl0JiMzOTtzIGEga2V5IGVsZW1lbnQgb2YgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtXV0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz02PW1lbnUgXCYjMzQ7V2lyZWxlc3MgV0FOXCYjMzQ7XG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNy1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo4OmNvbmZpZyBXV0FOXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTpcdHRyaXN0YXRlIFwmIzM0O1dXQU4gRHJpdmVyIENvcmVcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMC1cdGRlcGVuZHMgb24gR05TUyB8fCBHTlNTID0gblxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExLVx0aGVscFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEyOlx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgV1dBTiBkcml2ZXIgY29yZS4gVGhpcyBkcml2ZXJcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMzpcdCAgcHJvdmlkZXMgYSBjb21tb24gZnJhbWV3b3JrIGZvciBXV0FOIGRyaXZlcnMuXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTQtXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTE3LVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjE4OmlmIFdXQU5cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xOS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoyMDpjb25maWcgV1dBTl9ERUJVR0ZTXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MjE6XHRib29sIFwmIzM0O1dXQU4gZGV2aWNlcyBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0OyBpZiBFWFBFUlRcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0yMi1cdGRlcGVuZHMgb24gREVCVUdfRlNcbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjQtXHRoZWxwXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MjU6XHQgIEVuYWJsZXMgZGVidWdmcyBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIFdXQU4gY29yZSBhbmQgZGV2aWNlIGRyaXZlcnMuXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjYtXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjctXHQgIElmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB0aGVuIHlvdSBjYW4gZmluZCB0aGUgZGVidWcgaW50ZXJmYWNlXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6Mjg6XHQgIGVsZW1lbnRzIGZvciBlYWNoIFdXQU4gZGV2aWNlIGluIGEgZGlyZWN0b3J5IHRoYXQgaXMgY29ycmVzcG9uZGluZyB0b1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTI5LVx0ICB0aGUgZGV2aWNlIG5hbWU6IGRlYnVnZnMvd3dhbi93d2FuWC5cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzozMTpjb25maWcgV1dBTl9IV1NJTVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjMyOlx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIFdXQU4gZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMzMtXHRoZWxwXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MzQ6XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3QgV1dBTlxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTM1LVx0ICBmcmFtZXdvcmsuXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTM5LVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQwOmNvbmZpZyBNSElfV1dBTl9DVFJMXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6NDE6XHR0cmlzdGF0ZSBcJiMzNDtNSEkgV1dBTiBjb250cm9sIGRyaXZlciBmb3IgUXVhbGNvbW0tYmFzZWQgUENJZSBtb2RlbXNcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy00Mi1cdGRlcGVuZHMgb24gTUhJX0JVU1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTQzLVx0aGVscFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQ0Olx0ICBNSEkgV1dBTiBDVFJMIGFsbG93cyBRQ09NLWJhc2VkIFBDSWUgbW9kZW1zIHRvIGV4cG9zZSBkaWZmZXJlbnQgbW9kZW1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy00NS1cdCAgY29udHJvbCBwcm90b2NvbHMvcG9ydHMgdG8gdXNlcnNwYWNlLCBpbmNsdWRpbmcgQVQsIE1CSU0sIFFNSSwgRElBR1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy01Mi1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo1Mzpjb25maWcgTUhJX1dXQU5fTUJJTVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjU0OiAgICAgICAgdHJpc3RhdGUgXCYjMzQ7TUhJIFdXQU4gTUJJTSBuZXR3b3JrIGRyaXZlciBmb3IgUXVhbGNvbW0tYmFzZWQgUENJZSBtb2RlbXNcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy01NS0gICAgICAgIGRlcGVuZHMgb24gTUhJX0JVU1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTU2LSAgICAgICAgaGVscFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjU3OiAgICAgICAgICBNSEkgV1dBTiBNQklNIGlzIGEgV1dBTiBuZXR3b3JrIGRyaXZlciBmb3IgUUNPTS1iYXNlZCBQQ0llIG1vZGVtcy5cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy01OC0gICAgICAgICAgSXQgaW1wbGVtZW50cyBNQklNIG92ZXIgTUhJLCBmb3IgSVAgZGF0YSBhZ2dyZWdhdGlvbiBhbmQgbXV4aW5nLlxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz02NT1jb25maWcgUUNPTV9CQU1fRE1VWFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjY2Olx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gQkFNLURNVVggV1dBTiBuZXR3b3JrIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTY3LVx0ZGVwZW5kcyBvbiAoRE1BX0VOR0lORSBcdTAwMjZcdTAwMjYgUE0gXHUwMDI2XHUwMDI2IFFDT01fU01FTV9TVEFURSkgfHwgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTcxLVx0ICBNU004OTE2IG9yIE1TTTg5NzQuIFRoZSBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCB2aWEgUU1JL0FUIGZyb21cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo3MjpcdCAgdXNlcnNwYWNlIHdpdGggY29udHJvbCBwb3J0cyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgV1dBTiBzdWJzeXN0ZW1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo3MzpcdCAgKENPTkZJR19SUE1TR19XV0FOX0NUUkwpIG9yIFFSVFIgbmV0d29yayBzb2NrZXRzIChDT05GSUdfUVJUUikuXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzQtXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTc3LVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjc4OmNvbmZpZyBSUE1TR19XV0FOX0NUUkxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo3OTpcdHRyaXN0YXRlIFwmIzM0O1JQTVNHIFdXQU4gY29udHJvbCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy04MC1cdGRlcGVuZHMgb24gUlBNU0dcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy04MS1cdGhlbHBcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo4MjpcdCAgUlBNU0cgV1dBTiBDVFJMIGFsbG93cyBtb2RlbXMgYXZhaWxhYmxlIHZpYSBSUE1TRyBjaGFubmVscyB0byBleHBvc2VcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy04My1cdCAgZGlmZmVyZW50IG1vZGVtIHByb3RvY29scy9wb3J0cyB0byB1c2Vyc3BhY2UsIGluY2x1ZGluZyBBVCBhbmQgUU1JLlxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz05Nj1jb25maWcgSU9TTVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk3Olx0dHJpc3RhdGUgXCYjMzQ7SU9TTSBEcml2ZXIgZm9yIEludGVsIE0uMiBXV0FOIERldmljZVwmIzM0O1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTk4LVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OS1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEwMDpcdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMDEtXHRoZWxwXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTAyOlx0ICBUaGlzIGRyaXZlciBlbmFibGVzIEludGVsIE0uMiBXV0FOIERldmljZSBjb21tdW5pY2F0aW9uLlxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwMy1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMDQ6XHQgIElmIHlvdSBoYXZlIG9uZSBvZiB0aG9zZSBJbnRlbCBNLjIgV1dBTiBNb2R1bGVzIGFuZCB3aXNoIHRvIHVzZSBpdCBpblxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwNS1cdCAgTGludXggc2F5IFkvTSBoZXJlLlxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz0xMDk9Y29uZmlnIE1US19UN1hYXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTEwOlx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTExLVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMTI6XHRzZWxlY3QgUkVMQVkgaWYgV1dBTl9ERUJVR0ZTXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTEzLVx0aGVscFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjExNDpcdCAgRW5hYmxlcyBNZWRpYVRlayBQQ0llIGJhc2VkIDVHIFdXQU4gbW9kZW0gKFQ3eHggc2VyaWVzKSBkZXZpY2UuXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTE1Olx0ICBBZGFwdHMgV1dBTiBmcmFtZXdvcmsgYW5kIHByb3ZpZGVzIG5ldHdvcmsgaW50ZXJmYWNlIGxpa2Ugd3dhbjBcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMTYtXHQgIGFuZCB0dHkgaW50ZXJmYWNlcyBsaWtlIHd3YW4wYXQwIChBVCBwcm90b2NvbCksIHd3YW4wbWJpbTBcbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTIzLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEyNDplbmRpZiAjIFdXQU5cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODc5CgkJCQkJCQlvdXRwdXQ6IDE1MQoJCQkJCQkJdGhvdWdodHM6IDQ4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSU9TTSBXV0FOIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBgZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGluIGBtdXhfZGxfcHJvY2Vzc19kZ2AgYW5kIGBtdXhfZGxfYWRiX2RlY29kZWAg4oCTIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wcyBkdXJpbmcgZG93bmxpbmsgZGF0YWdyYW0gcHJvY2Vzc2luZy4gR29vZCBjYXRjaCBieSBzeXpib3QhIFRoYXQgdGVsbHMgdXMgdGhlIGNvZGUgcGF0aCAqaXMqIHJlYWNoYWJsZSwgYW5kIHRoYXQmIzM5O3MgY3JpdGljYWwuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB3ZSBuZWVkIHRvIGZvY3VzIG9uIGFueSBvdGhlciBmdW5jdGlvbnMuIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIEkgc2VlIHRoYXQgYGlwY19tdXhfZGxfZGVjb2RlYCBjYWxscyBgbXV4X2RsX2FkYl9kZWNvZGVgLCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYCBpbiB0dXJuIGNhbGxzIGBtdXhfZGxfcHJvY2Vzc19kZ2AuICBTbywgZm9jdXNpbmcgb24gYG11eF9kbF9hZGJfZGVjb2RlYCBhbmQgYG11eF9kbF9wcm9jZXNzX2RnYCBjb3ZlcnMgdGhlIHJlbGV2YW50IGNhbGwgcGF0aC4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGljaCBjb25maWdzIHdlIG5lZWQgdG8gZW5hYmxlLiBJdCYjMzk7cyBgV1dBTmAgYW5kIGBJT1NNYC4gSSBicmllZmx5IGxvb2tlZCBhdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maXJtZWQgdGhhdCBgUENJYCBpcyBhIGRlcGVuZGVuY3kgZm9yIGBJT1NNYCwgYnV0IHRoYXQmIzM5O3MgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBnZW5lcmljIGNvbmZpZ3MuIEFsc28sIGBORVRfREVWTElOS2AgaXMgc2VsZWN0ZWQgYnkgYElPU01gLiBTbywgYFdXQU5gIGFuZCBgSU9TTWAgYXJlIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3l6Ym90LXJlcG9ydGVkIGJ1ZyB3aGVyZSBib3VuZHMgY2hlY2tzIHdlcmUgbWlzc2luZyBpbiB0aGUgSW50ZWwgSU9TTSBXV0FOIGRyaXZlciwgbGVhZGluZyB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBpbmZpbml0ZSBsb29wcyB3aGVuIGhhbmRsaW5nIGRvd25saW5rIGRhdGEuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBmaXgsIGFuZCBzaW5jZSB0aGUgY29kZSBpcyByZWFjaGFibGUsIGl0IGRlZmluaXRlbHkgbmVlZHMgZnV6emluZyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhcmUgY29ycmVjdCBhbmQgdG8gZW5zdXJlIG5vIG90aGVyIHBhcnNpbmcgdnVsbmVyYWJpbGl0aWVzIHJlbWFpbi4KClNvLCBsZXQgbWUgc3VtbWFyaXplIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sOgoKKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgbXV4X2RsX3Byb2Nlc3NfZGdgLCBgbXV4X2RsX2FkYl9kZWNvZGVgCiogICAqKkVuYWJsZSBDb25maWdzOioqIGBXV0FOYCwgYElPU01gCgpIYW5nIG9uLCBsZXQgbWUgY2hlY2sgaWYgdGhvc2UgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4gQWgsIG5laXRoZXIgYFdXQU5gIG5vciBgSU9TTWAgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhleSYjMzk7cmUgYm90aCB0cmlzdGF0ZSBvcHRpb25zLiBUaGF0IG1lYW5zIHdlIGhhdmUgdG8gZXhwbGljaXRseSBlbmFibGUgYm90aC4gTm93LCBJJiMzOTttIHJlYWR5IHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V1dBTiYjMzQ7LAogICAgJiMzNDtJT1NNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXV4X2RsX3Byb2Nlc3NfZGcmIzM0OywKICAgICYjMzQ7bXV4X2RsX2FkYl9kZWNvZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYCBpbiB0aGUgSW50ZWwgSU9TTSBXV0FOIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIGluZmluaXRlIGxvb3BzIHdoZW4gcHJvY2Vzc2luZyBkb3dubGluayBkYXRhZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tzIGFyZSBjb3JyZWN0IGFuZCBubyBvdGhlciB2dWxuZXJhYmlsaXRpZXMgZXhpc3QgaW4gdGhpcyBwYXJzaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXV0FOJiMzNDssCiAgICAmIzM0O0lPU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdXhfZGxfcHJvY2Vzc19kZyYjMzQ7LAogICAgJiMzNDttdXhfZGxfYWRiX2RlY29kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5maW5pdGUgbG9vcHMgd2hlbiBwcm9jZXNzaW5nIGRvd25saW5rIGRhdGFncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBmb3VuZCBieSBzeXprYWxsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIG5vIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBleGlzdCBpbiB0aGlzIHBhcnNpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NDo1NC4zNzEyMTIwMzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQyNTAzMDQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXV0FOXCIsXG4gICAgXCJJT1NNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXV4X2RsX3Byb2Nlc3NfZGdcIixcbiAgICBcIm11eF9kbF9hZGJfZGVjb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYCBpbiB0aGUgSW50ZWwgSU9TTSBXV0FOIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIGluZmluaXRlIGxvb3BzIHdoZW4gcHJvY2Vzc2luZyBkb3dubGluayBkYXRhZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tzIGFyZSBjb3JyZWN0IGFuZCBubyBvdGhlciB2dWxuZXJhYmlsaXRpZXMgZXhpc3QgaW4gdGhpcyBwYXJzaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NDo1NC4zNzEyMjgxOTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDE4NTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDllNzY5MTJjNGM2MmJiZmY5YzljZDI2NzRmMDMzNGYxODcwMmVlYWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMDY6NTQ6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jIGIvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jXFxuaW5kZXggYmZmNDZmN2NhNTlmM2YuLjBiYmQ0MTI2M2NjMmZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY1xcbkBAIC01NTMsMTkgKzU1MywyMSBAQCBzdGF0aWMgaW50IG11eF9kbF9wcm9jZXNzX2RnKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IG11eF9hZGJoICphZGJoLFxcbiBcXHR1MzIgcGFja2V0X29mZnNldCwgaSwgcmMsIGRnX2xlbjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9vZl9kZzsgaSsrLCBkZysrKSB7XFxuLVxcdFxcdGlmIChsZTMyX3RvX2NwdShkZy1cXHUwMDNlZGF0YWdyYW1faW5kZXgpXFxuLVxcdFxcdFxcdFxcdFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpXFxuK1xcdFxcdHUzMiBkZ19pbmRleCA9IGxlMzJfdG9fY3B1KGRnLVxcdTAwM2VkYXRhZ3JhbV9pbmRleCk7XFxuK1xcbitcXHRcXHRkZ19sZW4gPSBsZTE2X3RvX2NwdShkZy1cXHUwMDNlZGF0YWdyYW1fbGVuZ3RoKTtcXG4rXFxuK1xcdFxcdGlmIChkZ19pbmRleCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKVxcbiBcXHRcXHRcXHRnb3RvIGRnX2Vycm9yO1xcbiBcXG4tXFx0XFx0LyogSXMgdGhlIHBhY2tldCBpbnNpZGUgb2YgdGhlIEFEQiAqL1xcbi1cXHRcXHRpZiAobGUzMl90b19jcHUoZGctXFx1MDAzZWRhdGFncmFtX2luZGV4KSBcXHUwMDNlPVxcbi1cXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShhZGJoLVxcdTAwM2VibG9ja19sZW5ndGgpKSB7XFxuK1xcdFxcdC8qIElzIHRoZSBwYWNrZXQgaW5zaWRlIG9mIHRoZSBBREIgYW5kIHRoZSByZWNlaXZlZCBza2IgPyAqL1xcbitcXHRcXHRpZiAoZGdfaW5kZXggXFx1MDAzZT0gbGUzMl90b19jcHUoYWRiaC1cXHUwMDNlYmxvY2tfbGVuZ3RoKSB8fFxcbitcXHRcXHQgICAgZGdfaW5kZXggXFx1MDAzZT0gc2tiLVxcdTAwM2VsZW4gfHxcXG4rXFx0XFx0ICAgIGRnX2xlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuIC0gZGdfaW5kZXggfHxcXG4rXFx0XFx0ICAgIGRsX2hlYWRfcGFkX2xlbiBcXHUwMDNlPSBkZ19sZW4pIHtcXG4gXFx0XFx0XFx0Z290byBkZ19lcnJvcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cGFja2V0X29mZnNldCA9XFxuLVxcdFxcdFxcdFxcdGxlMzJfdG9fY3B1KGRnLVxcdTAwM2VkYXRhZ3JhbV9pbmRleCkgK1xcbi1cXHRcXHRcXHRcXHRkbF9oZWFkX3BhZF9sZW47XFxuLVxcdFxcdFxcdGRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLVxcdTAwM2VkYXRhZ3JhbV9sZW5ndGgpO1xcbitcXHRcXHRcXHRwYWNrZXRfb2Zmc2V0ID0gZGdfaW5kZXggKyBkbF9oZWFkX3BhZF9sZW47XFxuIFxcdFxcdFxcdC8qIFBhc3MgdGhlIHBhY2tldCB0byB0aGUgbmV0aWYgbGF5ZXIuICovXFxuIFxcdFxcdFxcdHJjID0gaXBjX211eF9uZXRfcmVjZWl2ZShpcGNfbXV4LCBpZl9pZCwgaXBjX211eC1cXHUwMDNld3dhbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHBhY2tldF9vZmZzZXQsXFxuQEAgLTU4OSwxMiArNTkxLDE2IEBAIHN0YXRpYyB2b2lkIG11eF9kbF9hZGJfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCxcXG4gXFx0c3RydWN0IG11eF9hZGJoICphZGJoO1xcbiBcXHRzdHJ1Y3QgbXV4X2FkdGggKmFkdGg7XFxuIFxcdGludCBucl9vZl9kZywgaWZfaWQ7XFxuLVxcdHUzMiBhZHRoX2luZGV4O1xcbitcXHR1MzIgYWR0aF9pbmRleCwgcHJldl9pbmRleCA9IDA7XFxuIFxcdHU4ICpibG9jaztcXG4gXFxuIFxcdGJsb2NrID0gc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHRhZGJoID0gKHN0cnVjdCBtdXhfYWRiaCAqKWJsb2NrO1xcbiBcXG4rXFx0LyogVGhlIGJsb2NrIGhlYWRlciBpdHNlbGYgbXVzdCBmaXQgaW4gdGhlIHJlY2VpdmVkIHNrYi4gKi9cXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpXFxuK1xcdFxcdGdvdG8gYWRiX2RlY29kZV9lcnI7XFxuK1xcbiBcXHQvKiBQcm9jZXNzIHRoZSBhZ2dyZWdhdGVkIGRhdGFncmFtIHRhYmxlcy4gKi9cXG4gXFx0YWR0aF9pbmRleCA9IGxlMzJfdG9fY3B1KGFkYmgtXFx1MDAzZWZpcnN0X3RhYmxlX2luZGV4KTtcXG4gXFxuQEAgLTYwNiw2ICs2MTIsMTYgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxcbiBcXG4gXFx0LyogTG9vcCB0aHJvdWdoIG1peGVkIHNlc3Npb24gdGFibGVzLiAqL1xcbiBcXHR3aGlsZSAoYWR0aF9pbmRleCkge1xcbitcXHRcXHQvKiBUaGUgdGFibGUgaGVhZGVyIG11c3QgbGllIHdpdGhpbiB0aGUgcmVjZWl2ZWQgc2tiLCBhbmQgdGhlXFxuK1xcdFxcdCAqIGNoYWluIG11c3QgbW92ZSBmb3J3YXJkIHNvIGEgbW9kZW0gY2Fubm90IG1ha2UgdGhlIGxvb3BcXG4rXFx0XFx0ICogY3ljbGUgYmV0d2VlbiB0d28gdGFibGVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGFkdGhfaW5kZXggXFx1MDAzYz0gcHJldl9pbmRleCB8fFxcbitcXHRcXHQgICAgYWR0aF9pbmRleCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpIHx8XFxuK1xcdFxcdCAgICBhZHRoX2luZGV4IFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG11eF9hZHRoKSlcXG4rXFx0XFx0XFx0Z290byBhZGJfZGVjb2RlX2VycjtcXG4rXFx0XFx0cHJldl9pbmRleCA9IGFkdGhfaW5kZXg7XFxuK1xcbiBcXHRcXHQvKiBHZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgaGVhZGVyLiAqL1xcbiBcXHRcXHRhZHRoID0gKHN0cnVjdCBtdXhfYWR0aCAqKShibG9jayArIGFkdGhfaW5kZXgpO1xcbiBcXG5AQCAtNjI5LDYgKzY0NSwxMCBAQCBzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXFxuIFxcdFxcdGlmIChsZTE2X3RvX2NwdShhZHRoLVxcdTAwM2V0YWJsZV9sZW5ndGgpIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWR0aCkpXFxuIFxcdFxcdFxcdGdvdG8gYWRiX2RlY29kZV9lcnI7XFxuIFxcbitcXHRcXHQvKiBUaGUgd2hvbGUgZGF0YWdyYW0gdGFibGUgbXVzdCBmaXQgaW4gdGhlIHJlY2VpdmVkIHNrYi4gKi9cXG4rXFx0XFx0aWYgKGxlMTZfdG9fY3B1KGFkdGgtXFx1MDAzZXRhYmxlX2xlbmd0aCkgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIGFkdGhfaW5kZXgpXFxuK1xcdFxcdFxcdGdvdG8gYWRiX2RlY29kZV9lcnI7XFxuK1xcbiBcXHRcXHQvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBkYXRhZ3JhbXMuICovXFxuIFxcdFxcdG5yX29mX2RnID0gKGxlMTZfdG9fY3B1KGFkdGgtXFx1MDAzZXRhYmxlX2xlbmd0aCkgLVxcbiBcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IG11eF9hZHRoKSkgL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NDo1NS4wMTIzNDU3NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNzgzODgyMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldXQU5cIixcbiAgICBcIklPU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdXhfZGxfcHJvY2Vzc19kZ1wiLFxuICAgIFwibXV4X2RsX2FkYl9kZWNvZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5maW5pdGUgbG9vcHMgd2hlbiBwcm9jZXNzaW5nIGRvd25saW5rIGRhdGFncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBmb3VuZCBieSBzeXprYWxsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIG5vIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBleGlzdCBpbiB0aGlzIHBhcnNpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWU3NjkxMmM0YzYyYmJmZjljOWNkMjY3NGYwMzM0ZjE4NzAyZWVhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA2OjU0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jIGIvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jXG5pbmRleCBiZmY0NmY3Y2E1OWYzZi4uMGJiZDQxMjYzY2MyZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY1xuQEAgLTU1MywxOSArNTUzLDIxIEBAIHN0YXRpYyBpbnQgbXV4X2RsX3Byb2Nlc3NfZGcoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3QgbXV4X2FkYmggKmFkYmgsXG4gXHR1MzIgcGFja2V0X29mZnNldCwgaSwgcmMsIGRnX2xlbjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX29mX2RnOyBpKyssIGRnKyspIHtcbi1cdFx0aWYgKGxlMzJfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2luZGV4KVxuLVx0XHRcdFx0XHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKVxuK1x0XHR1MzIgZGdfaW5kZXggPSBsZTMyX3RvX2NwdShkZy1cdTAwM2VkYXRhZ3JhbV9pbmRleCk7XG4rXG4rXHRcdGRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2xlbmd0aCk7XG4rXG4rXHRcdGlmIChkZ19pbmRleCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpXG4gXHRcdFx0Z290byBkZ19lcnJvcjtcbiBcbi1cdFx0LyogSXMgdGhlIHBhY2tldCBpbnNpZGUgb2YgdGhlIEFEQiAqL1xuLVx0XHRpZiAobGUzMl90b19jcHUoZGctXHUwMDNlZGF0YWdyYW1faW5kZXgpIFx1MDAzZT1cbi1cdFx0XHRcdFx0bGUzMl90b19jcHUoYWRiaC1cdTAwM2VibG9ja19sZW5ndGgpKSB7XG4rXHRcdC8qIElzIHRoZSBwYWNrZXQgaW5zaWRlIG9mIHRoZSBBREIgYW5kIHRoZSByZWNlaXZlZCBza2IgPyAqL1xuK1x0XHRpZiAoZGdfaW5kZXggXHUwMDNlPSBsZTMyX3RvX2NwdShhZGJoLVx1MDAzZWJsb2NrX2xlbmd0aCkgfHxcbitcdFx0ICAgIGRnX2luZGV4IFx1MDAzZT0gc2tiLVx1MDAzZWxlbiB8fFxuK1x0XHQgICAgZGdfbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gZGdfaW5kZXggfHxcbitcdFx0ICAgIGRsX2hlYWRfcGFkX2xlbiBcdTAwM2U9IGRnX2xlbikge1xuIFx0XHRcdGdvdG8gZGdfZXJyb3I7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGFja2V0X29mZnNldCA9XG4tXHRcdFx0XHRsZTMyX3RvX2NwdShkZy1cdTAwM2VkYXRhZ3JhbV9pbmRleCkgK1xuLVx0XHRcdFx0ZGxfaGVhZF9wYWRfbGVuO1xuLVx0XHRcdGRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2xlbmd0aCk7XG4rXHRcdFx0cGFja2V0X29mZnNldCA9IGRnX2luZGV4ICsgZGxfaGVhZF9wYWRfbGVuO1xuIFx0XHRcdC8qIFBhc3MgdGhlIHBhY2tldCB0byB0aGUgbmV0aWYgbGF5ZXIuICovXG4gXHRcdFx0cmMgPSBpcGNfbXV4X25ldF9yZWNlaXZlKGlwY19tdXgsIGlmX2lkLCBpcGNfbXV4LVx1MDAzZXd3YW4sXG4gXHRcdFx0XHRcdFx0IHBhY2tldF9vZmZzZXQsXG5AQCAtNTg5LDEyICs1OTEsMTYgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxuIFx0c3RydWN0IG11eF9hZGJoICphZGJoO1xuIFx0c3RydWN0IG11eF9hZHRoICphZHRoO1xuIFx0aW50IG5yX29mX2RnLCBpZl9pZDtcbi1cdHUzMiBhZHRoX2luZGV4O1xuK1x0dTMyIGFkdGhfaW5kZXgsIHByZXZfaW5kZXggPSAwO1xuIFx0dTggKmJsb2NrO1xuIFxuIFx0YmxvY2sgPSBza2ItXHUwMDNlZGF0YTtcbiBcdGFkYmggPSAoc3RydWN0IG11eF9hZGJoICopYmxvY2s7XG4gXG4rXHQvKiBUaGUgYmxvY2sgaGVhZGVyIGl0c2VsZiBtdXN0IGZpdCBpbiB0aGUgcmVjZWl2ZWQgc2tiLiAqL1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKVxuK1x0XHRnb3RvIGFkYl9kZWNvZGVfZXJyO1xuK1xuIFx0LyogUHJvY2VzcyB0aGUgYWdncmVnYXRlZCBkYXRhZ3JhbSB0YWJsZXMuICovXG4gXHRhZHRoX2luZGV4ID0gbGUzMl90b19jcHUoYWRiaC1cdTAwM2VmaXJzdF90YWJsZV9pbmRleCk7XG4gXG5AQCAtNjA2LDYgKzYxMiwxNiBAQCBzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG4gXG4gXHQvKiBMb29wIHRocm91Z2ggbWl4ZWQgc2Vzc2lvbiB0YWJsZXMuICovXG4gXHR3aGlsZSAoYWR0aF9pbmRleCkge1xuK1x0XHQvKiBUaGUgdGFibGUgaGVhZGVyIG11c3QgbGllIHdpdGhpbiB0aGUgcmVjZWl2ZWQgc2tiLCBhbmQgdGhlXG4rXHRcdCAqIGNoYWluIG11c3QgbW92ZSBmb3J3YXJkIHNvIGEgbW9kZW0gY2Fubm90IG1ha2UgdGhlIGxvb3BcbitcdFx0ICogY3ljbGUgYmV0d2VlbiB0d28gdGFibGVzLlxuK1x0XHQgKi9cbitcdFx0aWYgKGFkdGhfaW5kZXggXHUwMDNjPSBwcmV2X2luZGV4IHx8XG4rXHRcdCAgICBhZHRoX2luZGV4IFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZGJoKSB8fFxuK1x0XHQgICAgYWR0aF9pbmRleCBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgbXV4X2FkdGgpKVxuK1x0XHRcdGdvdG8gYWRiX2RlY29kZV9lcnI7XG4rXHRcdHByZXZfaW5kZXggPSBhZHRoX2luZGV4O1xuK1xuIFx0XHQvKiBHZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgaGVhZGVyLiAqL1xuIFx0XHRhZHRoID0gKHN0cnVjdCBtdXhfYWR0aCAqKShibG9jayArIGFkdGhfaW5kZXgpO1xuIFxuQEAgLTYyOSw2ICs2NDUsMTAgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxuIFx0XHRpZiAobGUxNl90b19jcHUoYWR0aC1cdTAwM2V0YWJsZV9sZW5ndGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZHRoKSlcbiBcdFx0XHRnb3RvIGFkYl9kZWNvZGVfZXJyO1xuIFxuK1x0XHQvKiBUaGUgd2hvbGUgZGF0YWdyYW0gdGFibGUgbXVzdCBmaXQgaW4gdGhlIHJlY2VpdmVkIHNrYi4gKi9cbitcdFx0aWYgKGxlMTZfdG9fY3B1KGFkdGgtXHUwMDNldGFibGVfbGVuZ3RoKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIGFkdGhfaW5kZXgpXG4rXHRcdFx0Z290byBhZGJfZGVjb2RlX2VycjtcbitcbiBcdFx0LyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZGF0YWdyYW1zLiAqL1xuIFx0XHRucl9vZl9kZyA9IChsZTE2X3RvX2NwdShhZHRoLVx1MDAzZXRhYmxlX2xlbmd0aCkgLVxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IG11eF9hZHRoKSkgL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTQ6NTUuMDEyMzQ4MDY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMDI5MzI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBXV0FOIElPU00gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmNgLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCBzZWVtcyB0aGV5J3ZlIGFkZGVkIHNvbWUgY3J1Y2lhbCBib3VuZHMgY2hlY2tpbmcgd2l0aGluIHRoZSBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIG5vdyB2YWxpZGF0aW5nIHRoYXQgYGRnX2luZGV4YCBhbmQgYGRnX2xlbmAsIGBhZHRoX2luZGV4YCwgYW5kIGBhZHRoLVx1MDAzZXRhYmxlX2xlbmd0aGAgYWxsIGZhbGwgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBgc2tiLVx1MDAzZWxlbmAuIEV4Y2VsbGVudC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgb3IgZXZlbiB0aGUgZHJlYWRlZCBpbmZpbml0ZSBsb29wLCBpbiB0aGlzIHBhcnQgb2YgdGhlIFdXQU4gSU9TTSBkcml2ZXIuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpczogKmNhbiB0aGlzIGNvZGUgZXZlbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/KiBUaGUgSU9TTSBkcml2ZXIsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBJbnRlbCBNLjIgSU9TTSBtb2RlbXMgdGhhdCBhcmUgdHlwaWNhbGx5IFBDSWUtYmFzZWQuIElzIHRoZXJlIHNvbWUgbWVhbnMgdG8gZW11bGF0ZSB0aGlzLCB0byBpbmplY3QgcGFja2V0cyBpbnRvIGl0IHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IEknZCByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiB0ZXN0YWJsZSBvciByZW1vdGVseSB2dWxuZXJhYmxlLlxuXG5MZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSwgYGRyaXZlcnMvbmV0L3d3YW4vaW9zbS9LY29uZmlnYCwgYW5kIGFsc28gcmUtZXhhbWluZSB0aGUgYGlvc21faXBjX211eF9jb2RlYy5jYCBmaWxlIGl0c2VsZi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgaXMgZW5hYmxlZC4gSG9wZWZ1bGx5LCBpdOKAmWxsIGhpZ2hsaWdodCBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgbWFrZSBpdCBhY2Nlc3NpYmxlIG9yIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgd2l0aGluIGRpZmZlcmVudCBkZXBsb3ltZW50IHNjZW5hcmlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgYXR0YWNrIHN1cmZhY2UgYmVmb3JlIEkgY2FuIHRydWx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MDEuMDMyNjQzNzI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDY3NDEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdXhfZGxfcHJvY2Vzc19kZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYz01MTg9c3RhdGljIHZvaWQgaXBjX211eF9kbF9hY2JfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy01NDctLyogcHJvY2VzcyBkYXRhZ3JhbSAqL1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo1NDg6c3RhdGljIGludCBtdXhfZGxfcHJvY2Vzc19kZyhzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsIHN0cnVjdCBtdXhfYWRiaCAqYWRiaCxcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNTQ5LVxcdFxcdFxcdCAgICAgc3RydWN0IG11eF9hZHRoX2RnICpkZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYz01ODY9c3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY3MC1cXHRcXHRkZyA9IGFkdGgtXFx1MDAzZWRnO1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo2NzE6XFx0XFx0aWYgKG11eF9kbF9wcm9jZXNzX2RnKGlwY19tdXgsIGFkYmgsIGRnLCBza2IsIGlmX2lkLFxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy02NzItXFx0XFx0XFx0XFx0ICAgICAgbnJfb2ZfZGcpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MDEuMTUzMzIzMjIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5MzYxMTYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBtdXhfZGxfYWRiX2RlY29kZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbXV4X2RsX2FkYl9kZWNvZGVgLiBGaXJzdCwgbXkgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgbG9jYXRlIGFsbCBpdHMgY2FsbCBzaXRlcy4gVGhhdOKAmXMgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGZ1bmN0aW9uLCB3aGF0IGlucHV0cyBpdCdzIGxpa2VseSByZWNlaXZpbmcsIGFuZCB3aGF0IGl0J3MgYmVpbmcgdXNlZCBmb3Igd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyBmb3IgdGhpcyDigJMgYSByb2J1c3QgY29kZSBzZWFyY2gsIHByZWZlcmFibHkgd2l0aCBjcm9zcy1yZWZlcmVuY2luZyBjYXBhYmlsaXRpZXMgdG8ganVtcCBkaXJlY3RseSB0byB0aGUgY2FsbCBzaXRlcy4gRnJvbSB0aGVyZSwgSSBjYW4gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGRhdGEgaXMgcHJlcGFyZWQgZm9yIHRoZSBmdW5jdGlvbiBhbmQgd2hhdCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgc3Vic2VxdWVudGx5IHV0aWxpemVkIGZvci4gVGhhdCBjb250ZXh0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjAzLjg0NjkzNzk2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ5NDMwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXV4X2RsX2FkYl9kZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmM9NTQ4PXN0YXRpYyBpbnQgbXV4X2RsX3Byb2Nlc3NfZGcoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3QgbXV4X2FkYmggKmFkYmgsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNTg1LS8qIERlY29kZSBhbiBhZ2dyZWdhdGVkIGRhdGEgYmxvY2suICovXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjU4NjpzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTU4Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTY5Mj12b2lkIGlwY19tdXhfZGxfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy03MDMtXFx0Y2FzZSBJT1NNX0FHR1JfTVVYX1NJR19BREJIOlxcdC8qIEFnZ3JlZ2F0ZWQgRGF0YSBCbG9jayBIZWFkZXIgKi9cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmM6NzA0OlxcdFxcdG11eF9kbF9hZGJfZGVjb2RlKGlwY19tdXgsIHNrYik7XFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTcwNS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MDMuOTcxODg3NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU4NjY5NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBgaXBjX211eF9kbF9kZWNvZGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGlwY19tdXhfZGxfZGVjb2RlYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBleGVyY2lzZSwgYnV0IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzIGFyb3VuZCB0aGF0IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIGxvY2F0ZSBhbGwgdGhlIGNhbGwgc2l0ZXMuIElzIGl0IHdpdGhpbiB0aGUgc2FtZSBtb2R1bGUsIG9yIHNwcmVhZCBhY3Jvc3MgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEZpbmRpbmcgYWxsIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmU7IGFueSBhc3N1bXB0aW9ucyBJIGhhdmUgYWJvdXQgaXRzIGJlaGF2aW9yIGFyZSBub3cgc2Vjb25kYXJ5IHRvIGZpbmRpbmcgaXRzIG9yaWdpbiBzdG9yeSwgaG93IGl0J3MgYWN0aXZhdGVkLCBhbmQgdGhlIG90aGVyIGZ1bmN0aW9ucyBpdCByZWxpZXMgdXBvbi4gT25jZSBJIGtub3cgZXhhY3RseSB3aGVyZSB0aGUgY2FsbCBpcywgSSBjYW4gdGhlbiBkZXRlcm1pbmUgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQgaW4gYW5kIHdoYXQgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSB3aWxsIGJlLiBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjA3LjIzMDU1OTc5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYxODIwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBjX211eF9kbF9kZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI5OD1zdGF0aWMgdm9pZCBpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhzdHJ1Y3QgaW9zbV9pbWVtICppcGNfaW1lbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzI0LVxcdFxcdGlmIChwaXBlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2VpZl9pZCA9PSBJUENfTUVNX01VWF9JUF9DSF9JRl9JRClcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jOjMyNTpcXHRcXHRcXHRpcGNfbXV4X2RsX2RlY29kZShpcGNfaW1lbS1cXHUwMDNlbXV4LCBza2IpO1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzI2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTU4Nj1zdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNjg2LS8qKlxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo2ODc6ICogaXBjX211eF9kbF9kZWNvZGUgLSAgUm91dGUgdGhlIERMIHBhY2tldCB0aHJvdWdoIHRoZSBJUCBNVVggbGF5ZXJcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNjg4LSAqICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiBIZWFkZXIuXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNjkxLSAqL1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo2OTI6dm9pZCBpcGNfbXV4X2RsX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY5My17XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmg9MjU4PXVuaW9uIG11eF90eXBlX2hlYWRlciB7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmgtMjYyLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuaDoyNjM6dm9pZCBpcGNfbXV4X2RsX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuaC0yNjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjA3LjM2Njc3NzU1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODUyNjE0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgcXVlc3Rpb24gYWJvdXQgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYDpcblxuKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AqKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXM6IHdoZXJlIGRvZXMgdGhpcyBgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3NgIGZ1bmN0aW9uIGdldCBjYWxsZWQgZnJvbT8gVGhhdCdzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUuICBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBncmFwaC5cblxuSW1tZWRpYXRlbHksIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgc2V2ZXJhbCBhcHByb2FjaGVzIHRvIGRldGVybWluZSBpdHMgY2FsbGluZyBjb250ZXh0LiBEZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBhbmQgdG9vbHMgYXZhaWxhYmxlLCBJJ2QgcHJvYmFibHkgc3RhcnQgd2l0aCBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRleHQgc2VhcmNoIGFjcm9zcyB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgYmFzZS4gSSdkIGJlIGxvb2tpbmcgZm9yIGFsbCBpbnN0YW5jZXMgd2hlcmUgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYCBpcyB1c2VkLCBpZGVhbGx5IGZpbHRlcmluZyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwgaXRzZWxmIG9yIHJlbGF0ZWQgZnVuY3Rpb24gcG9pbnRlcnMuXG5cbkFsdGVybmF0aXZlbHksIGlmIEknbSB3b3JraW5nIHdpdGggYSBkZWJ1Z2dlciBvciBhIHN0YXRpYyBhbmFseXNpcyB0b29sLCBJIGNhbiBlYXNpbHkgZGV0ZXJtaW5lIGZ1bmN0aW9uIGNhbGwgcmVsYXRpb25zaGlwcy4gQSBkZWJ1Z2dlcidzIFwiY2FsbCBzdGFja1wiIGZlYXR1cmUgd291bGQgcXVpY2tseSByZXZlYWwgdGhlIGNhbGxpbmcgZnVuY3Rpb24uICBTaW1pbGFybHksIGEgc3RhdGljIGFuYWx5emVyIHdvdWxkIG9mZmVyIGEgbW9yZSBzdHJ1Y3R1cmVkIHZpZXcgb2YgdGhlIGNhbGwgZ3JhcGgsIHNob3dpbmcgbm90IGp1c3QgdGhlIGltbWVkaWF0ZSBjYWxsZXIsIGJ1dCBwb3RlbnRpYWxseSB0aGUgZW50aXJlIGNoYWluLlxuXG5JIGFsc28gaGF2ZSB0byByZW1lbWJlciB0byBjb25zaWRlciBwb3RlbnRpYWwgaW5kaXJlY3Rpb25zLiBUaGUgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIG9yIGEgdGFibGUgb2YgZnVuY3Rpb24gcG9pbnRlcnMsIHNvIEkgd2lsbCBoYXZlIHRvIGNvbnNpZGVyIGhvdyB0byBoYW5kbGUgdGhlIGV4dHJhIGxldmVsIG9mIGluZGlyZWN0aW9uLlxuXG5Lbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBUaGF0IGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gV2hhdCBkYXRhIGlzIHBhc3NlZD8gV2hhdCBhcmUgdGhlIGV4cGVjdGVkIGlucHV0cyBhbmQgb3V0cHV0cz8gVGhpcyBjb250ZXh0IHdpbGwgaGVhdmlseSBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgaXMgYWN0dWFsbHkgKmRvaW5nKi4gQW5kLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgSSBtaWdodCBldmVuIG5lZWQgdG8gY29uc2lkZXIgaW50ZXJydXB0IGhhbmRsZXJzIG9yIG90aGVyIGFzeW5jaHJvbm91cyBjb250ZXh0cy4gIEkgd2lsbCBoYXZlIHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcHJvZ3JhbSBkb2VzIG5vdCBhbGxvdyBpbnRlcnJ1cHRzIHRvIHJ1biB3aGVuIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBleGVjdXRlZC5cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byBwZXJmb3JtIGEgY2FsbCBncmFwaCB0cmF2ZXJzYWwsIGJlZ2lubmluZyB3aXRoIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgYW5kIHdvcmtpbmcgbXkgd2F5IHVwd2FyZHMgdG8gZGlzY292ZXIgaXRzIGltbWVkaWF0ZSBhbmQgaGlnaC1sZXZlbCBjYWxsZXJzLiAgVGhpcyBjYWxsIGdyYXBoIHdpbGwgcmV2ZWFsIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgb3IgY29udHJvbCBmbG93IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NToxMS45NTIwNDE0OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzg2OTIwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM9MjYyPXZvaWQgaXBjX2ltZW1faXBjX2luaXRfY2hlY2soc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0pXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTI5Ny0vKiBBbmFseXplIHRoZSBwYWNrZXQgdHlwZSBhbmQgZGlzdHJpYnV0ZSBpdC4gKi9cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jOjI5ODpzdGF0aWMgdm9pZCBpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhzdHJ1Y3QgaW9zbV9pbWVtICppcGNfaW1lbSxcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTI5OS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwY19waXBlICpwaXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYz0zMzQ9c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zNjAtXFx0XFx0LyogQW5hbHl6ZSB0aGUgcGFja2V0IHR5cGUgYW5kIGRpc3RyaWJ1dGUgaXQuICovXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzozNjE6XFx0XFx0aXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3MoaXBjX2ltZW0sIHBpcGUsIHNrYik7XFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zNjItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NToxMi4wNzk5MTg0NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3NTYyMDg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBpcGNfaW1lbV9kbF9waXBlX3Byb2Nlc3NgKipcblxuT2theSwgc28gdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzOiB3aGVyZSAqZXhhY3RseSogaXMgdGhpcyBgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzYCBmdW5jdGlvbiBiZWluZyBpbnZva2VkIGZyb20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBJcyBpdCB0cmlnZ2VyZWQgZnJvbSBhIGhpZ2gtbGV2ZWwgZHJpdmVyLCBhIGxvd2VyLWxldmVsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLCBvciBzb21ld2hlcmUgaW4gYmV0d2Vlbj8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBleHRlbmRpbmcgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBJcyB0aGVyZSBhIGNyb3NzLXJlZmVyZW5jZSB0b29sIEkgY2FuIHVzZSB0byBzZWUgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIGtub3cgdGhlIG9yaWdpbiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuIFJpZ2h0LCB0aGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIxMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjE0Ljc1NTU0MjM3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzU0OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwY19pbWVtX2RsX3BpcGVfcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM9Mjk4PXN0YXRpYyB2b2lkIGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zMzMtLyogUHJvY2VzcyB0aGUgZG93bmxpbmsgZGF0YSBhbmQgcGFzcyB0aGVtIHRvIHRoZSBjaGFyIG9yIG5ldCBsYXllci4gKi9cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jOjMzNDpzdGF0aWMgdm9pZCBpcGNfaW1lbV9kbF9waXBlX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zMzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaXBjX3BpcGUgKnBpcGUpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTY0Mj1zdGF0aWMgdm9pZCBpcGNfaW1lbV9oYW5kbGVfaXJxKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLCBpbnQgaXJxKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy03MzUtXFx0XFx0ICAgIChpcnEgPT0gSU1FTV9JUlFfRE9OVF9DQVJFIHx8IGlycSA9PSBkbF9waXBlLVxcdTAwM2VpcnEpKSB7XFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzo3MzY6XFx0XFx0XFx0aXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKGlwY19pbWVtLCBkbF9waXBlKTtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTczNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MTQuODk5MzMxNzk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODQ0NTQ4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEYXRhIEZsb3cgYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBkYXRhIGNvbWluZyBkaXJlY3RseSBmcm9tIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBQQ0llIGludGVyZmFjZS4gR2l2ZW4gdGhhdCBzeXprYWxsZXIgZG9lc24ndCBzZWVtIHRvIGhhdmUgYSB3YXkgdG8gZW11bGF0ZSB0aGlzIHBhcnRpY3VsYXIgUENJZSBkZXZpY2Ug4oCTIHRoZSBJbnRlbCBNLjIgSU9TTSBtb2RlbXMg4oCTIEknbSBoaWdobHkgc2tlcHRpY2FsIHRoYXQgdGhpcyBjb2RlIHdvdWxkIGJlIGFjY2Vzc2libGUgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVSwgdW5sZXNzIHRoZXJlJ3Mgc29tZSBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBvciwgaWRlYWxseSwgYW4gaW5qZWN0aW9uIHBvaW50IHNvbWV3aGVyZS4gVGhhdCdzIHRoZSBrZXk6IGlzIHRoZXJlICphbnkqIHdheSB0byBnZXQgdGhpcyBjb2RlIHRvIGV4ZWN1dGUgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmU/XG5cblRoZSBmaXJzdCB0aGluZyBJJ20gY2hlY2tpbmcgZm9yIGlzIGFuIGluamVjdGlvbiBwb2ludC4gSXMgdGhpcyBwcm9jZXNzIHB1cmVseSBoYXJkd2FyZS1kcml2ZW4sIG9yIGFyZSB0aGVyZSBzb2Z0d2FyZSBob29rcyB3ZSBjYW4gZXhwbG9pdD8gSSdtIHVzZWQgdG8gdG9vbHMgbGlrZSBgbWFjODAyMTFfaHdzaW1gIGZvciBXaUZpLCBidXQgaXMgdGhlcmUgYW4gZXF1aXZhbGVudCBmb3IgdGhlIFdXQU4gc3Vic3lzdGVtPyBOb3BlLCBsb29rcyBsaWtlIHRoZXJlJ3Mgbm8gZ2VuZXJpYyBlbXVsYXRvciBmb3IgV1dBTi4gT2theSwgdGhhdCdzIGEgYnVtbWVyLlxuXG5IbW0sIHdhaXQgYSBtaW51dGUsIHN5emthbGxlciAqZG9lcyogaGF2ZSBhIGBzeXpfdXNiX2Nvbm5lY3RgIGZ1bmN0aW9uIGZvciBVU0IgZGV2aWNlcy4gQnV0IHRoaXMgaXMgYSBQQ0llIGRldmljZSwgc28gdGhhdCBtaWdodCBub3QgYmUgZGlyZWN0bHkgcmVsZXZhbnQsIGJ1dCBJIHNob3VsZCBsb29rIGF0IHRoYXQgdG9vLiBOb3cgSSdtIGdvaW5nIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIEkgY2FuIHVzZS4gSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jYCBmaWxlIGFuZCBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NToyMC4wODM3OTA1MTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTA5MTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYz01MzU9c3RhdGljIGludCBwbV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpfdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYy01NDUtXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYzo1NDY6XFx0XFx0XFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aW9zbV9pcGNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jLTU0Ny1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jPTU2Mz1zdGF0aWMgaW50IF9faW5pdCBpb3NtX2lwY19kcml2ZXJfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYy01NjYtXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYzo1Njc6XFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aW9zbV9pcGNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jLTU2OC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NToyMC4zMDI4ODg5NjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MTIzNTA1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgQnVnIFJlcG9ydDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgbGlrZSBpdCByZWxhdGVzIHRvIGEgUENJZSBkcml2ZXIuIFN5emthbGxlciwgaW4gZ2VuZXJhbCwgc3RydWdnbGVzIHdpdGggZGlyZWN0IGZ1enppbmcgb2YgUENJZSBkZXZpY2VzIHdpdGhvdXQgYSBzcGVjaWZpYyBlbXVsYXRvciBsaWtlIGB2aGNpYCBmb3IgVVNCIG9yIGBtYWM4MDIxMV9od3NpbWAgZm9yIFdpLUZpLiBJIHNlZW0gdG8gcmVjYWxsIHRoZXJlJ3Mgc29tZSBsaW1pdGVkIFBDSSBmdXp6aW5nIHN1cHBvcnQgd2l0aCBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VgIOKAkyBubywgd2FpdCwgdGhhdCBpc24ndCBhIGdlbmVyaWMgd2F5IHRvIGluamVjdCBkYXRhIGludG8gRE1BIHJpbmdzLiBObywgd2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X2t2bV9zZXR1cF9jcHVgLCBidXQgbm90aGluZyBnZW5lcmljIGZvciBETUEgcmluZ3MuXG5cbkhvbGQgb24sIGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogaGF2ZSBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXM/IEkgdGhvdWdodCBpdCBtaWdodCB1c2UgYSBgc3l6X3BjaV9kZXZpY2VgIHN5c2NhbGwgb3Igc29tZSBzZXR1cCBmdW5jdGlvbi5cblxuQWxyaWdodCwgbGV0J3MgYmFjayB1cC4gVGhlIHBhdGNoIGF1dGhvciBpcyBsaXN0ZWQgYXMgYHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlYCwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgU3l6a2FsbGVyICpmb3VuZCogdGhpcyBidWchIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSWYgU3l6a2FsbGVyIGlkZW50aWZpZWQgdGhlIGJ1ZywgaXQgbWVhbnMgaXQgY2FuIHJlYWNoIHRoZSB2dWxuZXJhYmxlIGNvZGUuIEJ1dCBob3c/IElzIGl0IHRocm91Z2ggYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBvciBzb21lIHNwZWNpZmljIHNldHVwP1xuXG5Db3VsZCB0aGlzIGJlIGxpbmtlZCB0byBhIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlfaWRgIGNhbGwgb3IgaXMgaXQgcGVyaGFwcyBmdXp6aW5nIHZpYSBhIG5ldGxpbmsgc29ja2V0PyBObywgdGhpcyBpcyBkb3dubGluayBkYXRhIHByb2Nlc3NpbmcgaW4gYG11eF9kbF9wcm9jZXNzX2RnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHBhY2tldHMgYXJlIGJlaW5nIGluamVjdGVkLlxuXG5SaWdodCwgdGhlIHBhdGNoIGF1dGhvciAqaXMqIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAsIGNvbmZpcm1pbmcgU3l6a2FsbGVyJ3Mgcm9sZS4gSSBzaG91bGQgY2hlY2sgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciBjbHVlcyBvciBzZWUgd2hhdCBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZi5cblxuV2FpdCwgbWF5YmUgdGhpcyBpc24ndCBhIFBDSWUgZGV2aWNlIGF0IGFsbD8gTGV0J3MgY2hlY2sgYGRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmNgLlxuXG5Pa2F5LCBubywgU3l6a2FsbGVyIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBhIGdlbmVyaWMgYHN5el9wY2lfZGV2aWNlYCBzeXNjYWxsLCBhbmQgaW5zdGVhZCBoYXMgYHN5el91c2JfY29ubmVjdGAgYW5kIGBzeXpfODAyMTFfaW5qZWN0YC5cblxuSSBuZWVkIHRvIGdvIGJhY2sgb3ZlciB3aGF0IEkga25vdywgZG9lcyBTeXprYWxsZXIgdXRpbGl6ZSBgdmZpb2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgZm9yIFBDST8gTm8uIEl0IGhhcyBhIGBzeXpfcGNpX2RldmljZWAgcHNldWRvLXN5c2NhbGw/IE5vLCBpdCBoYXMgYHN5el91c2JfY29ubmVjdGAuXG5cbkNvdWxkIHRoaXMgYmUgYWNjZXNzZWQgdmlhIGB0dW5gIG9yIGB0YXBgPyBObywgdGhpcyBpcyByZWxhdGVkIHRvIGEgV1dBTiBkcml2ZXIuXG5cbldhaXQsIGNvdWxkIHRoaXMgYnVnIGhhdmUgYmVlbiBmb3VuZCBieSBhICpkaWZmZXJlbnQqIGZ1enplciwgYW5kIHRoZSBwYXRjaCB3YXMganVzdCBpbnRlZ3JhdGVkIGJ5IHN5ei1jbHVzdGVyPyBBaCEgSSBzZWUgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIiBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgaXNuJ3QgU3l6a2FsbGVyICpmaW5kaW5nKiB0aGUgYnVnLCBidXQgcmF0aGVyIGl0cyBpbmZyYXN0cnVjdHVyZSB0ZXN0aW5nIGEgcGF0Y2ggc3VibWl0dGVkIGJ5IGEgdXNlci5cblxuWWVzLCBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiIGluZGljYXRlcyB0aGF0IHN5emJvdCBjcmVhdGVkIGEgdGVzdGluZyBicmFuY2ggdG8gdmFsaWRhdGUgYSB1c2VyLXByb3Bvc2VkIHBhdGNoISBUaGlzIGNvbmZpcm1zIHRoYXQgc3l6Ym90ICpkaWQqIGZpbmQgYSBjcmFzaCBoZXJlLlxuXG5Ob3csIGxldCdzIHNlYXJjaCBTeXpib3QncyBidWcgcmVwb3J0cyBmb3IgXCJpb3NtLlwiXG5cbldhaXQgYSBtb21lbnQsIGNhbiBTeXpib3QgZnV6eiBQQ0kgZGV2aWNlcz8gSXQgdXNlcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCLiBJcyBJT1NNIGEgVVNCIGRldmljZT8gTm8sIGl0J3MgUENJZS5cblxuTWF5YmUgdGhpcyBpcyByZWFjaGVkIHRocm91Z2ggYSBjaGFyYWN0ZXIgZGV2aWNlPyBMZXQgbWUgY2hlY2sgYGlvc21faXBjX2ltZW0uY2Ag4oCTIGl0IGhhcyBgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIGNoYXJhY3RlciBkZXZpY2Ugb3IgbmV0bGluayBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5qZWN0aW5nIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MzMuODE1MjQyNDIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3MjY5MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jPTM1PWlwY190cmFjZV9jcmVhdGVfYnVmX2ZpbGVfaGFuZGxlcihjb25zdCBjaGFyICpmaWxlbmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jLTQyLVxcdHJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZpbGVuYW1lLCBtb2RlLCBwYXJlbnQsIGJ1ZixcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfdHJhY2UuYzo0MzpcXHRcXHRcXHRcXHQgICBcXHUwMDI2cmVsYXlfZmlsZV9vcGVyYXRpb25zKTtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfdHJhY2UuYy00NC19XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfdHJhY2UuYz04Nz1zdGF0aWMgc3NpemVfdCBpcGNfdHJhY2VfY3RybF9maWxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmMtMTIxLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jOjEyMjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcGNfdHJhY2VfZm9wcyA9IHtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfdHJhY2UuYy0xMjMtXFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MzUuODEyNTE4MjY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzE0ODkzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV1dBTiBEYXRhIEZsb3cgYW5kIFN5emthbGxlciBGdXp6aW5nIOKAkyBBIEJyaWVmIElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpb3NtX2lwY190cmFjZS5jYCBmaWxlIGFuZCwgcmlnaHQsIGl0IGhhcyBkZWJ1Z2ZzLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBteSByZWFsIGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBXV0FOIGNvcmUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYHd3YW5fY29yZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIFdXQU4gZHJpdmVyLiBJIGtub3cgV1dBTiBleHBvc2VzIGEgY2hhcmFjdGVyIGRldmljZSwgYHd3YW5fcG9ydF9vcHNgLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IGRhdGEgZGlyZWN0aW9uLiBJIHNlZSBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBpbW1lZGlhdGVseSB0aGluayBcImRvd25saW5rLFwiIG1lYW5pbmcgdGhlIG1vZGVtIGlzICpzZW5kaW5nKiBkYXRhIHRvIHRoZSBob3N0LiBCdXQgaG93IGRvZXMgc3l6a2FsbGVyIGdldCAqZG93bmxpbmsqIGRhdGEgaW50byB0aGF0IHBpcGVsaW5lPyBIb3cgZG9lcyBpdCAqdHJpZ2dlciogZG93bmxpbmsgZGF0YT9cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMsIGNvdWxkIHRoaXMgYmUgbG9vcGVkIGJhY2sgc29tZWhvdz8gRG9lcyB0aGUgZHJpdmVyIGhhdmUgc29tZSBsb29wYmFjayBtZWNoYW5pc20/IElmIHRoZSBob3N0IHNlbmRzIGRhdGEsIGFuIFwidXBsaW5rXCIsIGRvZXMgdGhlIGRyaXZlciBzdWJzZXF1ZW50bHkgZWNobyBpdCwgYW5kIG1heWJlIHRoYXQgdHJpZ2dlcnMgc29tZSBwcm9jZXNzaW5nIG9uIHRoZSBcImRvd25saW5rXCIgcGF0aD8gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoaW5ncywgc3BlY2lmaWNhbGx5IHNvbWV0aGluZyBsaWtlIGBtdXhfdWxfcHJvY2Vzc19kZ2Agb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCB1cGxpbmsgZGF0YSB0byBzZWUgaWYgdGhhdCdzIHdoZXJlIHRoZSBrZXkgbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NTo0MC45NDQwMTA2NDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjE1OTg4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6NDEuNjI2MTgyMjE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzA1NTEwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgRGF0YSBJbmplY3Rpb24gUG90ZW50aWFsIGluIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcHJvYmUgdGhlIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYXNzZXNzIGlmIHRoZXJlJ3MgYSBwbGF1c2libGUgcGF0aHdheSBmb3IgZGF0YSBpbmplY3Rpb24gaGVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBpbiBhbnkgc2VjdXJpdHkgYW5hbHlzaXMsIGFzIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgaXMgcGFyYW1vdW50LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBhcmFtZXRlcnMgaXQgdGFrZXMsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIGhvdyB0aGF0IGRhdGEgaXMgcmVjZWl2ZWQgYW5kIGhhbmRsZWQuIElzIHRoZXJlIGEgY29udHJvbCBmbG93IHRoYXQgd2UgY2FuIGluZmx1ZW5jZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBmdXp6aW5nIG9yIGlucHV0IHZhbGlkYXRpb24gd2Vha25lc3NlcyB0aGF0IG1pZ2h0IGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIGludGVnZXIgb3ZlcmZsb3dzLCBvciBldmVuIG1vcmUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcz8gVGhlIGdvYWwgaXMgdG8gc2VlIGlmIGFueSB1bnRydXN0ZWQgb3IgbWFsZm9ybWVkIGRhdGEgY2FuIGJlIGludHJvZHVjZWQgdG8gaW5mbHVlbmNlIHRoZSBwcm9ncmFtJ3MgYmVoYXZpb3IuIFdlIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmxlIGRhdGEgc291cmNlcyB0byBzZWUgaWYgb25lIGhhcyBwb3RlbnRpYWwuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBidWlsZGluZyB0aGUgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtJ3MgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDIxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6NDUuOTk2NzM1NjkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEwODE1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI2Mj12b2lkIGlwY19pbWVtX2lwY19pbml0X2NoZWNrKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0yOTctLyogQW5hbHl6ZSB0aGUgcGFja2V0IHR5cGUgYW5kIGRpc3RyaWJ1dGUgaXQuICovXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzoyOTg6c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0yOTktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcGNfcGlwZSAqcGlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM9MzM0PXN0YXRpYyB2b2lkIGlwY19pbWVtX2RsX3BpcGVfcHJvY2VzcyhzdHJ1Y3QgaW9zbV9pbWVtICppcGNfaW1lbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYwLVxcdFxcdC8qIEFuYWx5emUgdGhlIHBhY2tldCB0eXBlIGFuZCBkaXN0cmlidXRlIGl0LiAqL1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM6MzYxOlxcdFxcdGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzKGlwY19pbWVtLCBwaXBlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6NDYuMTQ3ODI2Nzc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODYwMjY4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENJIEZ1enppbmcgaW4gU3l6a2FsbGVyOiBBIFByb21pc2luZyBMZWFkKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIG5vdz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUuIEJpbmdvISBJdCBzZWVtcyBsaWtlIHRoZXkndmUgcmVjZW50bHkgYWRkZWQgUENJIGZ1enppbmcgc3VwcG9ydCEgSSdtIGN1cmlvdXMgaG93IHRoZXkncmUgZG9pbmcgaXQuLi4gSSB3b25kZXIgaWYgaXQgbGV2ZXJhZ2VzIGBzeXpfcGNpX2RldmljZWAgb3IgYSBzaW1pbGFyIGFic3RyYWN0aW9uLCBvciBwZXJoYXBzIGl0IHVzZXMgYHZmaW9gIHRvIGVtdWxhdGUgZGV2aWNlcz8gSG1tLCB3YWl0LCBkaWQgdGhleSBhZGQgc29tZXRoaW5nIGxpa2UgYSBgdmhjaWAgZm9yIFBDST8gTm8sIEkgdGhpbmsgaXQncyBtb3JlIGxpa2VseSB0aGF0IHRoZXkncmUgdXNpbmcgYEtWTWAgdG8gaW5qZWN0IE1NSU8sIFBJTywgb3IgRE1BIG9wZXJhdGlvbnMuIFNvLCBpdCBhcHBlYXJzIHN5emthbGxlciBvZmZlcnMgYSBtZXRob2QgdG8gZnV6eiBQQ0kgZGV2aWNlcyBieSBtYXBwaW5nIE1NSU8gcmVnaW9ucyBhbmQgZ2VuZXJhdGluZyBpbnRlcnJ1cHRzIG9yIGhhcyBhIHZpcnR1YWwgUENJIGRldmljZSBmcmFtZXdvcmsuXG5cbklmIHN5emthbGxlciBpcyBmaW5kaW5nIHRoZXNlIFBDSS1yZWxhdGVkIGlzc3VlcywgdGhlbiB0aGUgYXR0YWNrIHN1cmZhY2UgbXVzdCBiZSByZWFjaGFibGUuIEdvb2QhIEFuZCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYC4gRXhjZWxsZW50ISBUaGF0IG1lYW5zIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBleHBsb3JpbmcgZnVydGhlciB3aXRoIGZ1enppbmcuXG5cbkxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyB0byB0YXJnZXQuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgdGhlc2Ugd291bGQgYmU6XG4qICAgYG11eF9kbF9wcm9jZXNzX2RnYFxuKiAgIGBtdXhfZGxfYWRiX2RlY29kZWBcbiogICBgaXBjX211eF9kbF9kZWNvZGVgXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjc3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjUyLjAzMzg1NjI2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3MzYyNDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz03OD1jb25maWcgUlBNU0dfV1dBTl9DVFJMXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTUtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk2OmNvbmZpZyBJT1NNXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk3OlxcdHRyaXN0YXRlIFxcXCJJT1NNIERyaXZlciBmb3IgSW50ZWwgTS4yIFdXQU4gRGV2aWNlXFxcIlxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cXHRkZXBlbmRzIG9uIFBDSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NTo1Mi42ODEyMjQ5ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyMDU1MTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgc28gYENPTkZJR19JT1NNYCBpcyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBHb29kLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGF0IHNwZWNpZmljIHNldHRpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIExldCdzIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgb3RoZXIgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb25zLiBHb3R0YSBydWxlIG91dCBhbnkgcmVsYXRlZCBvciBvdmVybGFwcGluZyBvcHRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gSXQncyBiZXN0IHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBmaXJzdCBiZWZvcmUgZm9jdXNpbmcgb24gYSBzaW5nbGUgcG9pbnQuIEdvdHRhIGVuc3VyZSB0aGVyZSBpc24ndCBhbm90aGVyIGZsYWcgb3Igc2V0dXAgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGlzIHNldHRpbmcuIEFsd2F5cyB0aGUgYmVzdCBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NTo1NS41MDE3ODA1MTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTAzODc1NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9TTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6NTUuNjY2ODM1NTg4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTc4NzY2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIFdXQU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGBjb25maWcgSU9TTWAgb3B0aW9uIG1lbnRpb25lZCBpbiBgZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnYC4gVGhhdCdzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQncyBhYm91dCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIFdXQU4gZHJpdmVyLiBXaGVyZSdzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciB0aGlzIGRyaXZlcj8gTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGJ1aWxkIHJ1bGVzLiBUaGF0IHVzdWFsbHkgbGl2ZXMgaW4gdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBzYW1lIGRpcmVjdG9yeS4gVGltZSB0byBjcmFjayBvcGVuIGBkcml2ZXJzL25ldC93d2FuL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgaG93IGBJT1NNYCBpcyBiZWluZyBoYW5kbGVkIHRoZXJlLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgaW5jbHVzaW9uIGJhc2VkIG9uIHRoZSBgSU9TTWAgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU2OjAzLjM2NDcxNDgwOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5OTQxNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvc21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19SUE1TR19XV0FOX0NUUkwpICs9IHJwbXNnX3d3YW5fY3RybC5vXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfSU9TTSkgKz0gaW9zbS9cXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19NVEtfVDdYWCkgKz0gdDd4eC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTY6MDMuNTU0NjYzMDU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODMxNzg2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzdGFydGluZyB3aXRoIGBJT1NNYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjb25zaWRlciBpZiBgV1dBTmAgYWxzbyBuZWVkcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc2V0dXAuIEEgcXVpY2sgY2hlY2sgZm9yIHRoYXQgaXMgaW4gb3JkZXIuIEl0J3MgYSBrZXkgZWxlbWVudCBvZiB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTY6MDYuMTM3ODY2NzM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc3NzA5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV1dBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTY9bWVudSBcXFwiV2lyZWxlc3MgV0FOXFxcIlxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy03LVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo4OmNvbmZpZyBXV0FOXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk6XFx0dHJpc3RhdGUgXFxcIldXQU4gRHJpdmVyIENvcmVcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwLVxcdGRlcGVuZHMgb24gR05TUyB8fCBHTlNTID0gblxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMS1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEyOlxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFdXQU4gZHJpdmVyIGNvcmUuIFRoaXMgZHJpdmVyXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEzOlxcdCAgcHJvdmlkZXMgYSBjb21tb24gZnJhbWV3b3JrIGZvciBXV0FOIGRyaXZlcnMuXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTE0LVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxODppZiBXV0FOXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTE5LVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoyMDpjb25maWcgV1dBTl9ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjIxOlxcdGJvb2wgXFxcIldXQU4gZGV2aWNlcyBkZWJ1Z2ZzIGludGVyZmFjZVxcXCIgaWYgRVhQRVJUXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTIyLVxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0yNC1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjI1OlxcdCAgRW5hYmxlcyBkZWJ1Z2ZzIGluZnJhc3RydWN0dXJlIGZvciB0aGUgV1dBTiBjb3JlIGFuZCBkZXZpY2UgZHJpdmVycy5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjYtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTI3LVxcdCAgSWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZW4geW91IGNhbiBmaW5kIHRoZSBkZWJ1ZyBpbnRlcmZhY2VcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6Mjg6XFx0ICBlbGVtZW50cyBmb3IgZWFjaCBXV0FOIGRldmljZSBpbiBhIGRpcmVjdG9yeSB0aGF0IGlzIGNvcnJlc3BvbmRpbmcgdG9cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjktXFx0ICB0aGUgZGV2aWNlIG5hbWU6IGRlYnVnZnMvd3dhbi93d2FuWC5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjMxOmNvbmZpZyBXV0FOX0hXU0lNXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjMyOlxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgV1dBTiBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTMzLVxcdGhlbHBcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MzQ6XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IFdXQU5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMzUtXFx0ICBmcmFtZXdvcmsuXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMzktXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQwOmNvbmZpZyBNSElfV1dBTl9DVFJMXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQxOlxcdHRyaXN0YXRlIFxcXCJNSEkgV1dBTiBjb250cm9sIGRyaXZlciBmb3IgUXVhbGNvbW0tYmFzZWQgUENJZSBtb2RlbXNcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTQyLVxcdGRlcGVuZHMgb24gTUhJX0JVU1xcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy00My1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQ0OlxcdCAgTUhJIFdXQU4gQ1RSTCBhbGxvd3MgUUNPTS1iYXNlZCBQQ0llIG1vZGVtcyB0byBleHBvc2UgZGlmZmVyZW50IG1vZGVtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTQ1LVxcdCAgY29udHJvbCBwcm90b2NvbHMvcG9ydHMgdG8gdXNlcnNwYWNlLCBpbmNsdWRpbmcgQVQsIE1CSU0sIFFNSSwgRElBR1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTUyLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo1Mzpjb25maWcgTUhJX1dXQU5fTUJJTVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo1NDogICAgICAgIHRyaXN0YXRlIFxcXCJNSEkgV1dBTiBNQklNIG5ldHdvcmsgZHJpdmVyIGZvciBRdWFsY29tbS1iYXNlZCBQQ0llIG1vZGVtc1xcXCJcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNTUtICAgICAgICBkZXBlbmRzIG9uIE1ISV9CVVNcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNTYtICAgICAgICBoZWxwXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjU3OiAgICAgICAgICBNSEkgV1dBTiBNQklNIGlzIGEgV1dBTiBuZXR3b3JrIGRyaXZlciBmb3IgUUNPTS1iYXNlZCBQQ0llIG1vZGVtcy5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNTgtICAgICAgICAgIEl0IGltcGxlbWVudHMgTUJJTSBvdmVyIE1ISSwgZm9yIElQIGRhdGEgYWdncmVnYXRpb24gYW5kIG11eGluZy5cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz02NT1jb25maWcgUUNPTV9CQU1fRE1VWFxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo2NjpcXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gQkFNLURNVVggV1dBTiBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNjctXFx0ZGVwZW5kcyBvbiAoRE1BX0VOR0lORSBcXHUwMDI2XFx1MDAyNiBQTSBcXHUwMDI2XFx1MDAyNiBRQ09NX1NNRU1fU1RBVEUpIHx8IENPTVBJTEVfVEVTVFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTcxLVxcdCAgTVNNODkxNiBvciBNU004OTc0LiBUaGUgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFFNSS9BVCBmcm9tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjcyOlxcdCAgdXNlcnNwYWNlIHdpdGggY29udHJvbCBwb3J0cyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgV1dBTiBzdWJzeXN0ZW1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6NzM6XFx0ICAoQ09ORklHX1JQTVNHX1dXQU5fQ1RSTCkgb3IgUVJUUiBuZXR3b3JrIHNvY2tldHMgKENPTkZJR19RUlRSKS5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzQtXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzctXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjc4OmNvbmZpZyBSUE1TR19XV0FOX0NUUkxcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6Nzk6XFx0dHJpc3RhdGUgXFxcIlJQTVNHIFdXQU4gY29udHJvbCBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTgwLVxcdGRlcGVuZHMgb24gUlBNU0dcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctODEtXFx0aGVscFxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo4MjpcXHQgIFJQTVNHIFdXQU4gQ1RSTCBhbGxvd3MgbW9kZW1zIGF2YWlsYWJsZSB2aWEgUlBNU0cgY2hhbm5lbHMgdG8gZXhwb3NlXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTgzLVxcdCAgZGlmZmVyZW50IG1vZGVtIHByb3RvY29scy9wb3J0cyB0byB1c2Vyc3BhY2UsIGluY2x1ZGluZyBBVCBhbmQgUU1JLlxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk3OlxcdHRyaXN0YXRlIFxcXCJJT1NNIERyaXZlciBmb3IgSW50ZWwgTS4yIFdXQU4gRGV2aWNlXFxcIlxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OS1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTAwOlxcdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTAxLVxcdGhlbHBcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTAyOlxcdCAgVGhpcyBkcml2ZXIgZW5hYmxlcyBJbnRlbCBNLjIgV1dBTiBEZXZpY2UgY29tbXVuaWNhdGlvbi5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTAzLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMDQ6XFx0ICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UgSW50ZWwgTS4yIFdXQU4gTW9kdWxlcyBhbmQgd2lzaCB0byB1c2UgaXQgaW5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTA1LVxcdCAgTGludXggc2F5IFkvTSBoZXJlLlxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTEwOT1jb25maWcgTVRLX1Q3WFhcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTEwOlxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gVDd4eCBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExMS1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMTI6XFx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMTMtXFx0aGVscFxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMTQ6XFx0ICBFbmFibGVzIE1lZGlhVGVrIFBDSWUgYmFzZWQgNUcgV1dBTiBtb2RlbSAoVDd4eCBzZXJpZXMpIGRldmljZS5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTE1OlxcdCAgQWRhcHRzIFdXQU4gZnJhbWV3b3JrIGFuZCBwcm92aWRlcyBuZXR3b3JrIGludGVyZmFjZSBsaWtlIHd3YW4wXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExNi1cXHQgIGFuZCB0dHkgaW50ZXJmYWNlcyBsaWtlIHd3YW4wYXQwIChBVCBwcm90b2NvbCksIHd3YW4wbWJpbTBcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEyNDplbmRpZiAjIFdXQU5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NjowNi43NzU2NDMzMDJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgzMTU0ODgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSU9TTSBXV0FOIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBgZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGluIGBtdXhfZGxfcHJvY2Vzc19kZ2AgYW5kIGBtdXhfZGxfYWRiX2RlY29kZWAg4oCTIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wcyBkdXJpbmcgZG93bmxpbmsgZGF0YWdyYW0gcHJvY2Vzc2luZy4gR29vZCBjYXRjaCBieSBzeXpib3QhIFRoYXQgdGVsbHMgdXMgdGhlIGNvZGUgcGF0aCAqaXMqIHJlYWNoYWJsZSwgYW5kIHRoYXQncyBjcml0aWNhbC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgd2UgbmVlZCB0byBmb2N1cyBvbiBhbnkgb3RoZXIgZnVuY3Rpb25zLiBMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBJIHNlZSB0aGF0IGBpcGNfbXV4X2RsX2RlY29kZWAgY2FsbHMgYG11eF9kbF9hZGJfZGVjb2RlYCwgYW5kIGBtdXhfZGxfYWRiX2RlY29kZWAgaW4gdHVybiBjYWxscyBgbXV4X2RsX3Byb2Nlc3NfZGdgLiAgU28sIGZvY3VzaW5nIG9uIGBtdXhfZGxfYWRiX2RlY29kZWAgYW5kIGBtdXhfZGxfcHJvY2Vzc19kZ2AgY292ZXJzIHRoZSByZWxldmFudCBjYWxsIHBhdGguXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGNvbmZpZ3Mgd2UgbmVlZCB0byBlbmFibGUuIEl0J3MgYFdXQU5gIGFuZCBgSU9TTWAuIEkgYnJpZWZseSBsb29rZWQgYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlybWVkIHRoYXQgYFBDSWAgaXMgYSBkZXBlbmRlbmN5IGZvciBgSU9TTWAsIGJ1dCB0aGF0J3MgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBnZW5lcmljIGNvbmZpZ3MuIEFsc28sIGBORVRfREVWTElOS2AgaXMgc2VsZWN0ZWQgYnkgYElPU01gLiBTbywgYFdXQU5gIGFuZCBgSU9TTWAgYXJlIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeXpib3QtcmVwb3J0ZWQgYnVnIHdoZXJlIGJvdW5kcyBjaGVja3Mgd2VyZSBtaXNzaW5nIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGluZmluaXRlIGxvb3BzIHdoZW4gaGFuZGxpbmcgZG93bmxpbmsgZGF0YS4gSXQncyBhIGZ1bmN0aW9uYWwgZml4LCBhbmQgc2luY2UgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLCBpdCBkZWZpbml0ZWx5IG5lZWRzIGZ1enppbmcgdG8gdmFsaWRhdGUgdGhhdCB0aGUgbmV3IGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIHRvIGVuc3VyZSBubyBvdGhlciBwYXJzaW5nIHZ1bG5lcmFiaWxpdGllcyByZW1haW4uXG5cblNvLCBsZXQgbWUgc3VtbWFyaXplIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sOlxuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIGBtdXhfZGxfcHJvY2Vzc19kZ2AsIGBtdXhfZGxfYWRiX2RlY29kZWBcbiogICAqKkVuYWJsZSBDb25maWdzOioqIGBXV0FOYCwgYElPU01gXG5cbkhhbmcgb24sIGxldCBtZSBjaGVjayBpZiB0aG9zZSBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LiBBaCwgbmVpdGhlciBgV1dBTmAgbm9yIGBJT1NNYCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LCB0aGV5J3JlIGJvdGggdHJpc3RhdGUgb3B0aW9ucy4gVGhhdCBtZWFucyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGJvdGguIE5vdywgSSdtIHJlYWR5IHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg3OSwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTY6MTYuNjA3MTk0OTQ1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MDIzODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXV0FOXCIsXG4gICAgXCJJT1NNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXV4X2RsX3Byb2Nlc3NfZGdcIixcbiAgICBcIm11eF9kbF9hZGJfZGVjb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYCBpbiB0aGUgSW50ZWwgSU9TTSBXV0FOIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIGluZmluaXRlIGxvb3BzIHdoZW4gcHJvY2Vzc2luZyBkb3dubGluayBkYXRhZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tzIGFyZSBjb3JyZWN0IGFuZCBubyBvdGhlciB2dWxuZXJhYmlsaXRpZXMgZXhpc3QgaW4gdGhpcyBwYXJzaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldXQU5cIixcbiAgICBcIklPU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdXhfZGxfcHJvY2Vzc19kZ1wiLFxuICAgIFwibXV4X2RsX2FkYl9kZWNvZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5maW5pdGUgbG9vcHMgd2hlbiBwcm9jZXNzaW5nIGRvd25saW5rIGRhdGFncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBmb3VuZCBieSBzeXprYWxsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIG5vIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBleGlzdCBpbiB0aGlzIHBhcnNpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxrbt[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 06:25:25 +0000 UTC FinishedAt: 2026-06-25 06:56:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d87363b0edfc7504ff2b144fe4cdd8154f90f42e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WWAN", "IOSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d87363b0edfc7504ff2b144fe4cdd8154f90f42e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "WWAN", "IOSM" ], "series_id": "68ef2c66-5edd-497b-a838-87d77f3441d9" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mux_dl_process_dg", "mux_dl_adb_decode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1dXQU4mIzM0OywKICAgICYjMzQ7SU9TTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O211eF9kbF9wcm9jZXNzX2RnJiMzNDssCiAgICAmIzM0O211eF9kbF9hZGJfZGVjb2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYm91bmRzIGNoZWNraW5nIHRvIGBtdXhfZGxfcHJvY2Vzc19kZ2AgYW5kIGBtdXhfZGxfYWRiX2RlY29kZWAgaW4gdGhlIEludGVsIElPU00gV1dBTiBkcml2ZXIgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIHJlYWRzIGFuZCBpbmZpbml0ZSBsb29wcyB3aGVuIHByb2Nlc3NpbmcgZG93bmxpbmsgZGF0YWdyYW1zLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgZml4aW5nIGEgYnVnIGZvdW5kIGJ5IHN5emthbGxlci4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgYm91bmRzIGNoZWNrcyBhcmUgY29ycmVjdCBhbmQgbm8gb3RoZXIgdnVsbmVyYWJpbGl0aWVzIGV4aXN0IGluIHRoaXMgcGFyc2luZyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDllNzY5MTJjNGM2MmJiZmY5YzljZDI2NzRmMDMzNGYxODcwMmVlYWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAwNjo1NDo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMgYi9kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmNcbmluZGV4IGJmZjQ2ZjdjYTU5ZjNmLi4wYmJkNDEyNjNjYzJmYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jXG5AQCAtNTUzLDE5ICYjNDM7NTUzLDIxIEBAIHN0YXRpYyBpbnQgbXV4X2RsX3Byb2Nlc3NfZGcoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3QgbXV4X2FkYmggKmFkYmgsXG4gXHR1MzIgcGFja2V0X29mZnNldCwgaSwgcmMsIGRnX2xlbjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX29mX2RnOyBpJiM0MzsmIzQzOywgZGcmIzQzOyYjNDM7KSB7XG4tXHRcdGlmIChsZTMyX3RvX2NwdShkZy1cdTAwM2VkYXRhZ3JhbV9pbmRleClcbi1cdFx0XHRcdFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZGJoKSlcbiYjNDM7XHRcdHUzMiBkZ19pbmRleCA9IGxlMzJfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2luZGV4KTtcbiYjNDM7XG4mIzQzO1x0XHRkZ19sZW4gPSBsZTE2X3RvX2NwdShkZy1cdTAwM2VkYXRhZ3JhbV9sZW5ndGgpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChkZ19pbmRleCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpXG4gXHRcdFx0Z290byBkZ19lcnJvcjtcbiBcbi1cdFx0LyogSXMgdGhlIHBhY2tldCBpbnNpZGUgb2YgdGhlIEFEQiAqL1xuLVx0XHRpZiAobGUzMl90b19jcHUoZGctXHUwMDNlZGF0YWdyYW1faW5kZXgpIFx1MDAzZT1cbi1cdFx0XHRcdFx0bGUzMl90b19jcHUoYWRiaC1cdTAwM2VibG9ja19sZW5ndGgpKSB7XG4mIzQzO1x0XHQvKiBJcyB0aGUgcGFja2V0IGluc2lkZSBvZiB0aGUgQURCIGFuZCB0aGUgcmVjZWl2ZWQgc2tiID8gKi9cbiYjNDM7XHRcdGlmIChkZ19pbmRleCBcdTAwM2U9IGxlMzJfdG9fY3B1KGFkYmgtXHUwMDNlYmxvY2tfbGVuZ3RoKSB8fFxuJiM0MztcdFx0ICAgIGRnX2luZGV4IFx1MDAzZT0gc2tiLVx1MDAzZWxlbiB8fFxuJiM0MztcdFx0ICAgIGRnX2xlbiBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIGRnX2luZGV4IHx8XG4mIzQzO1x0XHQgICAgZGxfaGVhZF9wYWRfbGVuIFx1MDAzZT0gZGdfbGVuKSB7XG4gXHRcdFx0Z290byBkZ19lcnJvcjtcbiBcdFx0fSBlbHNlIHtcbi1cdFx0XHRwYWNrZXRfb2Zmc2V0ID1cbi1cdFx0XHRcdGxlMzJfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2luZGV4KSAmIzQzO1xuLVx0XHRcdFx0ZGxfaGVhZF9wYWRfbGVuO1xuLVx0XHRcdGRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2xlbmd0aCk7XG4mIzQzO1x0XHRcdHBhY2tldF9vZmZzZXQgPSBkZ19pbmRleCAmIzQzOyBkbF9oZWFkX3BhZF9sZW47XG4gXHRcdFx0LyogUGFzcyB0aGUgcGFja2V0IHRvIHRoZSBuZXRpZiBsYXllci4gKi9cbiBcdFx0XHRyYyA9IGlwY19tdXhfbmV0X3JlY2VpdmUoaXBjX211eCwgaWZfaWQsIGlwY19tdXgtXHUwMDNld3dhbixcbiBcdFx0XHRcdFx0XHQgcGFja2V0X29mZnNldCxcbkBAIC01ODksMTIgJiM0Mzs1OTEsMTYgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxuIFx0c3RydWN0IG11eF9hZGJoICphZGJoO1xuIFx0c3RydWN0IG11eF9hZHRoICphZHRoO1xuIFx0aW50IG5yX29mX2RnLCBpZl9pZDtcbi1cdHUzMiBhZHRoX2luZGV4O1xuJiM0MztcdHUzMiBhZHRoX2luZGV4LCBwcmV2X2luZGV4ID0gMDtcbiBcdHU4ICpibG9jaztcbiBcbiBcdGJsb2NrID0gc2tiLVx1MDAzZWRhdGE7XG4gXHRhZGJoID0gKHN0cnVjdCBtdXhfYWRiaCAqKWJsb2NrO1xuIFxuJiM0MztcdC8qIFRoZSBibG9jayBoZWFkZXIgaXRzZWxmIG11c3QgZml0IGluIHRoZSByZWNlaXZlZCBza2IuICovXG4mIzQzO1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKVxuJiM0MztcdFx0Z290byBhZGJfZGVjb2RlX2VycjtcbiYjNDM7XG4gXHQvKiBQcm9jZXNzIHRoZSBhZ2dyZWdhdGVkIGRhdGFncmFtIHRhYmxlcy4gKi9cbiBcdGFkdGhfaW5kZXggPSBsZTMyX3RvX2NwdShhZGJoLVx1MDAzZWZpcnN0X3RhYmxlX2luZGV4KTtcbiBcbkBAIC02MDYsNiAmIzQzOzYxMiwxNiBAQCBzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG4gXG4gXHQvKiBMb29wIHRocm91Z2ggbWl4ZWQgc2Vzc2lvbiB0YWJsZXMuICovXG4gXHR3aGlsZSAoYWR0aF9pbmRleCkge1xuJiM0MztcdFx0LyogVGhlIHRhYmxlIGhlYWRlciBtdXN0IGxpZSB3aXRoaW4gdGhlIHJlY2VpdmVkIHNrYiwgYW5kIHRoZVxuJiM0MztcdFx0ICogY2hhaW4gbXVzdCBtb3ZlIGZvcndhcmQgc28gYSBtb2RlbSBjYW5ub3QgbWFrZSB0aGUgbG9vcFxuJiM0MztcdFx0ICogY3ljbGUgYmV0d2VlbiB0d28gdGFibGVzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoYWR0aF9pbmRleCBcdTAwM2M9IHByZXZfaW5kZXggfHxcbiYjNDM7XHRcdCAgICBhZHRoX2luZGV4IFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZGJoKSB8fFxuJiM0MztcdFx0ICAgIGFkdGhfaW5kZXggXHUwMDNlIHNrYi1cdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG11eF9hZHRoKSlcbiYjNDM7XHRcdFx0Z290byBhZGJfZGVjb2RlX2VycjtcbiYjNDM7XHRcdHByZXZfaW5kZXggPSBhZHRoX2luZGV4O1xuJiM0MztcbiBcdFx0LyogR2V0IHRoZSByZWZlcmVuY2UgdG8gdGhlIHRhYmxlIGhlYWRlci4gKi9cbiBcdFx0YWR0aCA9IChzdHJ1Y3QgbXV4X2FkdGggKikoYmxvY2sgJiM0MzsgYWR0aF9pbmRleCk7XG4gXG5AQCAtNjI5LDYgJiM0Mzs2NDUsMTAgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxuIFx0XHRpZiAobGUxNl90b19jcHUoYWR0aC1cdTAwM2V0YWJsZV9sZW5ndGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZHRoKSlcbiBcdFx0XHRnb3RvIGFkYl9kZWNvZGVfZXJyO1xuIFxuJiM0MztcdFx0LyogVGhlIHdob2xlIGRhdGFncmFtIHRhYmxlIG11c3QgZml0IGluIHRoZSByZWNlaXZlZCBza2IuICovXG4mIzQzO1x0XHRpZiAobGUxNl90b19jcHUoYWR0aC1cdTAwM2V0YWJsZV9sZW5ndGgpIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gYWR0aF9pbmRleClcbiYjNDM7XHRcdFx0Z290byBhZGJfZGVjb2RlX2VycjtcbiYjNDM7XG4gXHRcdC8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGRhdGFncmFtcy4gKi9cbiBcdFx0bnJfb2ZfZGcgPSAobGUxNl90b19jcHUoYWR0aC1cdTAwM2V0YWJsZV9sZW5ndGgpIC1cbiBcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBtdXhfYWR0aCkpIC9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXV0FOJiMzNDssCiAgICAmIzM0O0lPU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdXhfZGxfcHJvY2Vzc19kZyYjMzQ7LAogICAgJiMzNDttdXhfZGxfYWRiX2RlY29kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5maW5pdGUgbG9vcHMgd2hlbiBwcm9jZXNzaW5nIGRvd25saW5rIGRhdGFncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBmb3VuZCBieSBzeXprYWxsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIG5vIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBleGlzdCBpbiB0aGlzIHBhcnNpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDllNzY5MTJjNGM2MmJiZmY5YzljZDI2NzRmMDMzNGYxODcwMmVlYWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1biAyNSAwNjo1NDo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYyBiL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYwppbmRleCBiZmY0NmY3Y2E1OWYzZi4uMGJiZDQxMjYzY2MyZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMKQEAgLTU1MywxOSAmIzQzOzU1MywyMSBAQCBzdGF0aWMgaW50IG11eF9kbF9wcm9jZXNzX2RnKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IG11eF9hZGJoICphZGJoLAogCXUzMiBwYWNrZXRfb2Zmc2V0LCBpLCByYywgZGdfbGVuOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IG5yX29mX2RnOyBpJiM0MzsmIzQzOywgZGcmIzQzOyYjNDM7KSB7Ci0JCWlmIChsZTMyX3RvX2NwdShkZy0mZ3Q7ZGF0YWdyYW1faW5kZXgpCi0JCQkJJmx0OyBzaXplb2Yoc3RydWN0IG11eF9hZGJoKSkKJiM0MzsJCXUzMiBkZ19pbmRleCA9IGxlMzJfdG9fY3B1KGRnLSZndDtkYXRhZ3JhbV9pbmRleCk7CiYjNDM7CiYjNDM7CQlkZ19sZW4gPSBsZTE2X3RvX2NwdShkZy0mZ3Q7ZGF0YWdyYW1fbGVuZ3RoKTsKJiM0MzsKJiM0MzsJCWlmIChkZ19pbmRleCAmbHQ7IHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKQogCQkJZ290byBkZ19lcnJvcjsKIAotCQkvKiBJcyB0aGUgcGFja2V0IGluc2lkZSBvZiB0aGUgQURCICovCi0JCWlmIChsZTMyX3RvX2NwdShkZy0mZ3Q7ZGF0YWdyYW1faW5kZXgpICZndDs9Ci0JCQkJCWxlMzJfdG9fY3B1KGFkYmgtJmd0O2Jsb2NrX2xlbmd0aCkpIHsKJiM0MzsJCS8qIElzIHRoZSBwYWNrZXQgaW5zaWRlIG9mIHRoZSBBREIgYW5kIHRoZSByZWNlaXZlZCBza2IgPyAqLwomIzQzOwkJaWYgKGRnX2luZGV4ICZndDs9IGxlMzJfdG9fY3B1KGFkYmgtJmd0O2Jsb2NrX2xlbmd0aCkgfHwKJiM0MzsJCSAgICBkZ19pbmRleCAmZ3Q7PSBza2ItJmd0O2xlbiB8fAomIzQzOwkJICAgIGRnX2xlbiAmZ3Q7IHNrYi0mZ3Q7bGVuIC0gZGdfaW5kZXggfHwKJiM0MzsJCSAgICBkbF9oZWFkX3BhZF9sZW4gJmd0Oz0gZGdfbGVuKSB7CiAJCQlnb3RvIGRnX2Vycm9yOwogCQl9IGVsc2UgewotCQkJcGFja2V0X29mZnNldCA9Ci0JCQkJbGUzMl90b19jcHUoZGctJmd0O2RhdGFncmFtX2luZGV4KSAmIzQzOwotCQkJCWRsX2hlYWRfcGFkX2xlbjsKLQkJCWRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLSZndDtkYXRhZ3JhbV9sZW5ndGgpOwomIzQzOwkJCXBhY2tldF9vZmZzZXQgPSBkZ19pbmRleCAmIzQzOyBkbF9oZWFkX3BhZF9sZW47CiAJCQkvKiBQYXNzIHRoZSBwYWNrZXQgdG8gdGhlIG5ldGlmIGxheWVyLiAqLwogCQkJcmMgPSBpcGNfbXV4X25ldF9yZWNlaXZlKGlwY19tdXgsIGlmX2lkLCBpcGNfbXV4LSZndDt3d2FuLAogCQkJCQkJIHBhY2tldF9vZmZzZXQsCkBAIC01ODksMTIgJiM0Mzs1OTEsMTYgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LAogCXN0cnVjdCBtdXhfYWRiaCAqYWRiaDsKIAlzdHJ1Y3QgbXV4X2FkdGggKmFkdGg7CiAJaW50IG5yX29mX2RnLCBpZl9pZDsKLQl1MzIgYWR0aF9pbmRleDsKJiM0MzsJdTMyIGFkdGhfaW5kZXgsIHByZXZfaW5kZXggPSAwOwogCXU4ICpibG9jazsKIAogCWJsb2NrID0gc2tiLSZndDtkYXRhOwogCWFkYmggPSAoc3RydWN0IG11eF9hZGJoICopYmxvY2s7CiAKJiM0MzsJLyogVGhlIGJsb2NrIGhlYWRlciBpdHNlbGYgbXVzdCBmaXQgaW4gdGhlIHJlY2VpdmVkIHNrYi4gKi8KJiM0MzsJaWYgKHNrYi0mZ3Q7bGVuICZsdDsgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpCiYjNDM7CQlnb3RvIGFkYl9kZWNvZGVfZXJyOwomIzQzOwogCS8qIFByb2Nlc3MgdGhlIGFnZ3JlZ2F0ZWQgZGF0YWdyYW0gdGFibGVzLiAqLwogCWFkdGhfaW5kZXggPSBsZTMyX3RvX2NwdShhZGJoLSZndDtmaXJzdF90YWJsZV9pbmRleCk7CiAKQEAgLTYwNiw2ICYjNDM7NjEyLDE2IEBAIHN0YXRpYyB2b2lkIG11eF9kbF9hZGJfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwKIAogCS8qIExvb3AgdGhyb3VnaCBtaXhlZCBzZXNzaW9uIHRhYmxlcy4gKi8KIAl3aGlsZSAoYWR0aF9pbmRleCkgewomIzQzOwkJLyogVGhlIHRhYmxlIGhlYWRlciBtdXN0IGxpZSB3aXRoaW4gdGhlIHJlY2VpdmVkIHNrYiwgYW5kIHRoZQomIzQzOwkJICogY2hhaW4gbXVzdCBtb3ZlIGZvcndhcmQgc28gYSBtb2RlbSBjYW5ub3QgbWFrZSB0aGUgbG9vcAomIzQzOwkJICogY3ljbGUgYmV0d2VlbiB0d28gdGFibGVzLgomIzQzOwkJICovCiYjNDM7CQlpZiAoYWR0aF9pbmRleCAmbHQ7PSBwcmV2X2luZGV4IHx8CiYjNDM7CQkgICAgYWR0aF9pbmRleCAmbHQ7IHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpIHx8CiYjNDM7CQkgICAgYWR0aF9pbmRleCAmZ3Q7IHNrYi0mZ3Q7bGVuIC0gc2l6ZW9mKHN0cnVjdCBtdXhfYWR0aCkpCiYjNDM7CQkJZ290byBhZGJfZGVjb2RlX2VycjsKJiM0MzsJCXByZXZfaW5kZXggPSBhZHRoX2luZGV4OwomIzQzOwogCQkvKiBHZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgaGVhZGVyLiAqLwogCQlhZHRoID0gKHN0cnVjdCBtdXhfYWR0aCAqKShibG9jayAmIzQzOyBhZHRoX2luZGV4KTsKIApAQCAtNjI5LDYgJiM0Mzs2NDUsMTAgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LAogCQlpZiAobGUxNl90b19jcHUoYWR0aC0mZ3Q7dGFibGVfbGVuZ3RoKSAmbHQ7IHNpemVvZihzdHJ1Y3QgbXV4X2FkdGgpKQogCQkJZ290byBhZGJfZGVjb2RlX2VycjsKIAomIzQzOwkJLyogVGhlIHdob2xlIGRhdGFncmFtIHRhYmxlIG11c3QgZml0IGluIHRoZSByZWNlaXZlZCBza2IuICovCiYjNDM7CQlpZiAobGUxNl90b19jcHUoYWR0aC0mZ3Q7dGFibGVfbGVuZ3RoKSAmZ3Q7IHNrYi0mZ3Q7bGVuIC0gYWR0aF9pbmRleCkKJiM0MzsJCQlnb3RvIGFkYl9kZWNvZGVfZXJyOwomIzQzOwogCQkvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBkYXRhZ3JhbXMuICovCiAJCW5yX29mX2RnID0gKGxlMTZfdG9fY3B1KGFkdGgtJmd0O3RhYmxlX2xlbmd0aCkgLQogCQkJCQlzaXplb2Yoc3RydWN0IG11eF9hZHRoKSkgLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODcyCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdXQU4gSU9TTSBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyBiZWVuIGFwcGxpZWQgdG8gYGRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY2AuIEZyb20gd2hhdCBJIGNhbiBzZWUsIGl0IHNlZW1zIHRoZXkmIzM5O3ZlIGFkZGVkIHNvbWUgY3J1Y2lhbCBib3VuZHMgY2hlY2tpbmcgd2l0aGluIHRoZSBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSBub3cgdmFsaWRhdGluZyB0aGF0IGBkZ19pbmRleGAgYW5kIGBkZ19sZW5gLCBgYWR0aF9pbmRleGAsIGFuZCBgYWR0aC0mZ3Q7dGFibGVfbGVuZ3RoYCBhbGwgZmFsbCB3aXRoaW4gdGhlIGJvdW5kYXJpZXMgb2YgdGhlIGBza2ItJmd0O2xlbmAuIEV4Y2VsbGVudC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRyZXNzaW5nIGEgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHksIHByZXZlbnRpbmcgb3V0LW9mLWJvdW5kcyByZWFkcyBvciB3cml0ZXMsIG9yIGV2ZW4gdGhlIGRyZWFkZWQgaW5maW5pdGUgbG9vcCwgaW4gdGhpcyBwYXJ0IG9mIHRoZSBXV0FOIElPU00gZHJpdmVyLiBTZWVtcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuCgpOb3csIG15IGltbWVkaWF0ZSBjb25jZXJuIGlzOiAqY2FuIHRoaXMgY29kZSBldmVuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8qIFRoZSBJT1NNIGRyaXZlciwgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBpcyBzcGVjaWZpY2FsbHkgZm9yIHRob3NlIEludGVsIE0uMiBJT1NNIG1vZGVtcyB0aGF0IGFyZSB0eXBpY2FsbHkgUENJZS1iYXNlZC4gSXMgdGhlcmUgc29tZSBtZWFucyB0byBlbXVsYXRlIHRoaXMsIHRvIGluamVjdCBwYWNrZXRzIGludG8gaXQgd2l0aGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZz8gSSYjMzk7ZCByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiB0ZXN0YWJsZSBvciByZW1vdGVseSB2dWxuZXJhYmxlLgoKTGV0IG1lIHRha2UgYSBsb29rIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnksIGBkcml2ZXJzL25ldC93d2FuL2lvc20vS2NvbmZpZ2AsIGFuZCBhbHNvIHJlLWV4YW1pbmUgdGhlIGBpb3NtX2lwY19tdXhfY29kZWMuY2AgZmlsZSBpdHNlbGYuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhpcyBjb2RlIGlzIGVuYWJsZWQuIEhvcGVmdWxseSwgaXTigJlsbCBoaWdobGlnaHQgYW55IHNwZWNpZmljIGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIG1ha2UgaXQgYWNjZXNzaWJsZSBvciBwb3RlbnRpYWxseSB2dWxuZXJhYmxlIHdpdGhpbiBkaWZmZXJlbnQgZGVwbG95bWVudCBzY2VuYXJpb3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGF0dGFjayBzdXJmYWNlIGJlZm9yZSBJIGNhbiB0cnVseSBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttdXhfZGxfcHJvY2Vzc19kZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTUxOD1zdGF0aWMgdm9pZCBpcGNfbXV4X2RsX2FjYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy01NDctLyogcHJvY2VzcyBkYXRhZ3JhbSAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjU0ODpzdGF0aWMgaW50IG11eF9kbF9wcm9jZXNzX2RnKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IG11eF9hZGJoICphZGJoLFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTU0OS1cdFx0XHQgICAgIHN0cnVjdCBtdXhfYWR0aF9kZyAqZGcsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTU4Nj1zdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY3MC1cdFx0ZGcgPSBhZHRoLVx1MDAzZWRnO1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjY3MTpcdFx0aWYgKG11eF9kbF9wcm9jZXNzX2RnKGlwY19tdXgsIGFkYmgsIGRnLCBza2IsIGlmX2lkLFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY3Mi1cdFx0XHRcdCAgICAgIG5yX29mX2RnKSBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzOTE4CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBtdXhfZGxfYWRiX2RlY29kZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYG11eF9kbF9hZGJfZGVjb2RlYC4gRmlyc3QsIG15IGluc3RpbmN0IGlzIHRvIGltbWVkaWF0ZWx5IGxvY2F0ZSBhbGwgaXRzIGNhbGwgc2l0ZXMuIFRoYXTigJlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gdW5kZXJzdGFuZCB3aGF0IHRyaWdnZXJzIHRoZSBmdW5jdGlvbiwgd2hhdCBpbnB1dHMgaXQmIzM5O3MgbGlrZWx5IHJlY2VpdmluZywgYW5kIHdoYXQgaXQmIzM5O3MgYmVpbmcgdXNlZCBmb3Igd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdXN1YWwgdG9vbHMgZm9yIHRoaXMg4oCTIGEgcm9idXN0IGNvZGUgc2VhcmNoLCBwcmVmZXJhYmx5IHdpdGggY3Jvc3MtcmVmZXJlbmNpbmcgY2FwYWJpbGl0aWVzIHRvIGp1bXAgZGlyZWN0bHkgdG8gdGhlIGNhbGwgc2l0ZXMuIEZyb20gdGhlcmUsIEkgY2FuIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGhvdyBkYXRhIGlzIHByZXBhcmVkIGZvciB0aGUgZnVuY3Rpb24gYW5kIHdoYXQgdGhlIHJldHVybmVkIHZhbHVlIGlzIHN1YnNlcXVlbnRseSB1dGlsaXplZCBmb3IuIFRoYXQgY29udGV4dCBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBmdW5jdGlvbiYjMzk7cyBwdXJwb3NlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O211eF9kbF9hZGJfZGVjb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmM9NTQ4PXN0YXRpYyBpbnQgbXV4X2RsX3Byb2Nlc3NfZGcoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3QgbXV4X2FkYmggKmFkYmgsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTU4NS0vKiBEZWNvZGUgYW4gYWdncmVnYXRlZCBkYXRhIGJsb2NrLiAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjU4NjpzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNTg3LVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTY5Mj12b2lkIGlwY19tdXhfZGxfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNzAzLVx0Y2FzZSBJT1NNX0FHR1JfTVVYX1NJR19BREJIOlx0LyogQWdncmVnYXRlZCBEYXRhIEJsb2NrIEhlYWRlciAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjcwNDpcdFx0bXV4X2RsX2FkYl9kZWNvZGUoaXBjX211eCwgc2tiKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy03MDUtXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1MDkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBgaXBjX211eF9kbF9kZWNvZGVgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBpcGNfbXV4X2RsX2RlY29kZWAgaXMgYWN0dWFsbHkgYmVpbmcgdXNlZC4gVGhpcyBpcyBhIHByZXR0eSBzdGFuZGFyZCBkZWJ1Z2dpbmcgZXhlcmNpc2UsIGJ1dCBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkYXRhIGZsb3cgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcyBhcm91bmQgdGhhdCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1c2UgbXkgdG9vbHMgdG8gbG9jYXRlIGFsbCB0aGUgY2FsbCBzaXRlcy4gSXMgaXQgd2l0aGluIHRoZSBzYW1lIG1vZHVsZSwgb3Igc3ByZWFkIGFjcm9zcyBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHN5c3RlbT8gRmluZGluZyBhbGwgdGhlIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZTsgYW55IGFzc3VtcHRpb25zIEkgaGF2ZSBhYm91dCBpdHMgYmVoYXZpb3IgYXJlIG5vdyBzZWNvbmRhcnkgdG8gZmluZGluZyBpdHMgb3JpZ2luIHN0b3J5LCBob3cgaXQmIzM5O3MgYWN0aXZhdGVkLCBhbmQgdGhlIG90aGVyIGZ1bmN0aW9ucyBpdCByZWxpZXMgdXBvbi4gT25jZSBJIGtub3cgZXhhY3RseSB3aGVyZSB0aGUgY2FsbCBpcywgSSBjYW4gdGhlbiBkZXRlcm1pbmUgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQgaW4gYW5kIHdoYXQgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSB3aWxsIGJlLiBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGNfbXV4X2RsX2RlY29kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYz0yOTg9c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zMjQtXHRcdGlmIChwaXBlLVx1MDAzZWNoYW5uZWwtXHUwMDNlaWZfaWQgPT0gSVBDX01FTV9NVVhfSVBfQ0hfSUZfSUQpXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jOjMyNTpcdFx0XHRpcGNfbXV4X2RsX2RlY29kZShpcGNfaW1lbS1cdTAwM2VtdXgsIHNrYik7XG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTMyNi1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTU4Nj1zdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY4Ni0vKipcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo2ODc6ICogaXBjX211eF9kbF9kZWNvZGUgLSAgUm91dGUgdGhlIERMIHBhY2tldCB0aHJvdWdoIHRoZSBJUCBNVVggbGF5ZXJcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy02ODgtICogICAgICAgICAgICAgICAgICAgICAgZGVwZW5kaW5nIG9uIEhlYWRlci5cbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNjkxLSAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjY5Mjp2b2lkIGlwY19tdXhfZGxfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy02OTMte1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuaD0yNTg9dW5pb24gbXV4X3R5cGVfaGVhZGVyIHtcbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmgtMjYyLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5oOjI2Mzp2b2lkIGlwY19tdXhfZGxfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmgtMjY0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzUKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgcXVlc3Rpb24gYWJvdXQgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYDoKCioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3NgKioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpczogd2hlcmUgZG9lcyB0aGlzIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgZnVuY3Rpb24gZ2V0IGNhbGxlZCBmcm9tPyBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUuICBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBncmFwaC4KCkltbWVkaWF0ZWx5LCBJIHN0YXJ0IHRoaW5raW5nIGFib3V0IHNldmVyYWwgYXBwcm9hY2hlcyB0byBkZXRlcm1pbmUgaXRzIGNhbGxpbmcgY29udGV4dC4gRGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gYW5kIHRvb2xzIGF2YWlsYWJsZSwgSSYjMzk7ZCBwcm9iYWJseSBzdGFydCB3aXRoIGBncmVwYCBvciBhIHNpbWlsYXIgdGV4dCBzZWFyY2ggYWNyb3NzIHRoZSByZWxldmFudCBzb3VyY2UgY29kZSBiYXNlLiBJJiMzOTtkIGJlIGxvb2tpbmcgZm9yIGFsbCBpbnN0YW5jZXMgd2hlcmUgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYCBpcyB1c2VkLCBpZGVhbGx5IGZpbHRlcmluZyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwgaXRzZWxmIG9yIHJlbGF0ZWQgZnVuY3Rpb24gcG9pbnRlcnMuCgpBbHRlcm5hdGl2ZWx5LCBpZiBJJiMzOTttIHdvcmtpbmcgd2l0aCBhIGRlYnVnZ2VyIG9yIGEgc3RhdGljIGFuYWx5c2lzIHRvb2wsIEkgY2FuIGVhc2lseSBkZXRlcm1pbmUgZnVuY3Rpb24gY2FsbCByZWxhdGlvbnNoaXBzLiBBIGRlYnVnZ2VyJiMzOTtzICYjMzQ7Y2FsbCBzdGFjayYjMzQ7IGZlYXR1cmUgd291bGQgcXVpY2tseSByZXZlYWwgdGhlIGNhbGxpbmcgZnVuY3Rpb24uICBTaW1pbGFybHksIGEgc3RhdGljIGFuYWx5emVyIHdvdWxkIG9mZmVyIGEgbW9yZSBzdHJ1Y3R1cmVkIHZpZXcgb2YgdGhlIGNhbGwgZ3JhcGgsIHNob3dpbmcgbm90IGp1c3QgdGhlIGltbWVkaWF0ZSBjYWxsZXIsIGJ1dCBwb3RlbnRpYWxseSB0aGUgZW50aXJlIGNoYWluLgoKSSBhbHNvIGhhdmUgdG8gcmVtZW1iZXIgdG8gY29uc2lkZXIgcG90ZW50aWFsIGluZGlyZWN0aW9ucy4gVGhlIGZ1bmN0aW9uIG1pZ2h0IGJlIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlciBvciBhIHRhYmxlIG9mIGZ1bmN0aW9uIHBvaW50ZXJzLCBzbyBJIHdpbGwgaGF2ZSB0byBjb25zaWRlciBob3cgdG8gaGFuZGxlIHRoZSBleHRyYSBsZXZlbCBvZiBpbmRpcmVjdGlvbi4KCktub3dpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaXMgY3JpdGljYWwuIFRoYXQgZ2l2ZXMgbWUgdGhlIGltbWVkaWF0ZSBjb250ZXh0LiBXaGF0IGRhdGEgaXMgcGFzc2VkPyBXaGF0IGFyZSB0aGUgZXhwZWN0ZWQgaW5wdXRzIGFuZCBvdXRwdXRzPyBUaGlzIGNvbnRleHQgd2lsbCBoZWF2aWx5IGluZm9ybSBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYCBpcyBhY3R1YWxseSAqZG9pbmcqLiBBbmQsIGRlcGVuZGluZyBvbiB0aGUgYXJjaGl0ZWN0dXJlLCBJIG1pZ2h0IGV2ZW4gbmVlZCB0byBjb25zaWRlciBpbnRlcnJ1cHQgaGFuZGxlcnMgb3Igb3RoZXIgYXN5bmNocm9ub3VzIGNvbnRleHRzLiAgSSB3aWxsIGhhdmUgdG8gY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBwcm9ncmFtIGRvZXMgbm90IGFsbG93IGludGVycnVwdHMgdG8gcnVuIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIGV4ZWN1dGVkLgoKRXNzZW50aWFsbHksIEkgbmVlZCB0byBwZXJmb3JtIGEgY2FsbCBncmFwaCB0cmF2ZXJzYWwsIGJlZ2lubmluZyB3aXRoIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgYW5kIHdvcmtpbmcgbXkgd2F5IHVwd2FyZHMgdG8gZGlzY292ZXIgaXRzIGltbWVkaWF0ZSBhbmQgaGlnaC1sZXZlbCBjYWxsZXJzLiAgVGhpcyBjYWxsIGdyYXBoIHdpbGwgcmV2ZWFsIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgb3IgY29udHJvbCBmbG93IG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwY19pbWVtX2RsX3NrYl9wcm9jZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI2Mj12b2lkIGlwY19pbWVtX2lwY19pbml0X2NoZWNrKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMjk3LS8qIEFuYWx5emUgdGhlIHBhY2tldCB0eXBlIGFuZCBkaXN0cmlidXRlIGl0LiAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzoyOTg6c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTI5OS1cdFx0XHRcdCAgICBzdHJ1Y3QgaXBjX3BpcGUgKnBpcGUsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYz0zMzQ9c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYwLVx0XHQvKiBBbmFseXplIHRoZSBwYWNrZXQgdHlwZSBhbmQgZGlzdHJpYnV0ZSBpdC4gKi9cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM6MzYxOlx0XHRpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhpcGNfaW1lbSwgcGlwZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MjEwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIGBpcGNfaW1lbV9kbF9waXBlX3Byb2Nlc3NgKioKCk9rYXksIHNvIHRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gSSBuZWVkIHRvIGFuc3dlciBpczogd2hlcmUgKmV4YWN0bHkqIGlzIHRoaXMgYGlwY19pbWVtX2RsX3BpcGVfcHJvY2Vzc2AgZnVuY3Rpb24gYmVpbmcgaW52b2tlZCBmcm9tPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY2FsbCBzdGFjayB0byBmdWxseSBncmFzcCBpdHMgcm9sZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gSXMgaXQgdHJpZ2dlcmVkIGZyb20gYSBoaWdoLWxldmVsIGRyaXZlciwgYSBsb3dlci1sZXZlbCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciwgb3Igc29tZXdoZXJlIGluIGJldHdlZW4/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgY29udGV4dCBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcgb3IgZXh0ZW5kaW5nIHRoaXMgcGFydCBvZiB0aGUgY29kZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gSXMgdGhlcmUgYSBjcm9zcy1yZWZlcmVuY2UgdG9vbCBJIGNhbiB1c2UgdG8gc2VlIHdoZXJlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8ga25vdyB0aGUgb3JpZ2luIG9mIHRoaXMgZnVuY3Rpb24gY2FsbC4gUmlnaHQsIHRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI5OD1zdGF0aWMgdm9pZCBpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhzdHJ1Y3QgaW9zbV9pbWVtICppcGNfaW1lbSxcbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTMzMy0vKiBQcm9jZXNzIHRoZSBkb3dubGluayBkYXRhIGFuZCBwYXNzIHRoZW0gdG8gdGhlIGNoYXIgb3IgbmV0IGxheWVyLiAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzozMzQ6c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zMzUtXHRcdFx0XHQgICAgIHN0cnVjdCBpcGNfcGlwZSAqcGlwZSlcbi0tXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTY0Mj1zdGF0aWMgdm9pZCBpcGNfaW1lbV9oYW5kbGVfaXJxKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLCBpbnQgaXJxKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtNzM1LVx0XHQgICAgKGlycSA9PSBJTUVNX0lSUV9ET05UX0NBUkUgfHwgaXJxID09IGRsX3BpcGUtXHUwMDNlaXJxKSkge1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzo3MzY6XHRcdFx0aXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKGlwY19pbWVtLCBkbF9waXBlKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtNzM3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODA1CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGF0YSBGbG93IGFuZCBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBkYXRhIGNvbWluZyBkaXJlY3RseSBmcm9tIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBQQ0llIGludGVyZmFjZS4gR2l2ZW4gdGhhdCBzeXprYWxsZXIgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGEgd2F5IHRvIGVtdWxhdGUgdGhpcyBwYXJ0aWN1bGFyIFBDSWUgZGV2aWNlIOKAkyB0aGUgSW50ZWwgTS4yIElPU00gbW9kZW1zIOKAkyBJJiMzOTttIGhpZ2hseSBza2VwdGljYWwgdGhhdCB0aGlzIGNvZGUgd291bGQgYmUgYWNjZXNzaWJsZSB3aXRoaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIEdvb2dsZSBDb21wdXRlIEVuZ2luZSBvciBRRU1VLCB1bmxlc3MgdGhlcmUmIzM5O3Mgc29tZSBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBvciwgaWRlYWxseSwgYW4gaW5qZWN0aW9uIHBvaW50IHNvbWV3aGVyZS4gVGhhdCYjMzk7cyB0aGUga2V5OiBpcyB0aGVyZSAqYW55KiB3YXkgdG8gZ2V0IHRoaXMgY29kZSB0byBleGVjdXRlIHdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlPwoKVGhlIGZpcnN0IHRoaW5nIEkmIzM5O20gY2hlY2tpbmcgZm9yIGlzIGFuIGluamVjdGlvbiBwb2ludC4gSXMgdGhpcyBwcm9jZXNzIHB1cmVseSBoYXJkd2FyZS1kcml2ZW4sIG9yIGFyZSB0aGVyZSBzb2Z0d2FyZSBob29rcyB3ZSBjYW4gZXhwbG9pdD8gSSYjMzk7bSB1c2VkIHRvIHRvb2xzIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2lGaSwgYnV0IGlzIHRoZXJlIGFuIGVxdWl2YWxlbnQgZm9yIHRoZSBXV0FOIHN1YnN5c3RlbT8gTm9wZSwgbG9va3MgbGlrZSB0aGVyZSYjMzk7cyBubyBnZW5lcmljIGVtdWxhdG9yIGZvciBXV0FOLiBPa2F5LCB0aGF0JiMzOTtzIGEgYnVtbWVyLgoKSG1tLCB3YWl0IGEgbWludXRlLCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgYSBgc3l6X3VzYl9jb25uZWN0YCBmdW5jdGlvbiBmb3IgVVNCIGRldmljZXMuIEJ1dCB0aGlzIGlzIGEgUENJZSBkZXZpY2UsIHNvIHRoYXQgbWlnaHQgbm90IGJlIGRpcmVjdGx5IHJlbGV2YW50LCBidXQgSSBzaG91bGQgbG9vayBhdCB0aGF0IHRvby4gTm93IEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgSSBjYW4gdXNlLiBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmNgIGZpbGUgYW5kIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGNpX3JlZ2lzdGVyX2RyaXZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYz01MzU9c3RhdGljIGludCBwbV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpfdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmMtNTQ1LVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYzo1NDY6XHRcdFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZpb3NtX2lwY19kcml2ZXIpO1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYy01NDctXHRcdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmM9NTYzPXN0YXRpYyBpbnQgX19pbml0IGlvc21faXBjX2RyaXZlcl9pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYy01NjYtXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jOjU2NzpcdHJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2aW9zbV9pcGNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmMtNTY4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYzOQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDc3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5emthbGxlciBCdWcgUmVwb3J0OiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB0aGlzIHNlZW1zIGxpa2UgaXQgcmVsYXRlcyB0byBhIFBDSWUgZHJpdmVyLiBTeXprYWxsZXIsIGluIGdlbmVyYWwsIHN0cnVnZ2xlcyB3aXRoIGRpcmVjdCBmdXp6aW5nIG9mIFBDSWUgZGV2aWNlcyB3aXRob3V0IGEgc3BlY2lmaWMgZW11bGF0b3IgbGlrZSBgdmhjaWAgZm9yIFVTQiBvciBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaS4gSSBzZWVtIHRvIHJlY2FsbCB0aGVyZSYjMzk7cyBzb21lIGxpbWl0ZWQgUENJIGZ1enppbmcgc3VwcG9ydCB3aXRoIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWAg4oCTIG5vLCB3YWl0LCB0aGF0IGlzbiYjMzk7dCBhIGdlbmVyaWMgd2F5IHRvIGluamVjdCBkYXRhIGludG8gRE1BIHJpbmdzLiBObywgd2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X2t2bV9zZXR1cF9jcHVgLCBidXQgbm90aGluZyBnZW5lcmljIGZvciBETUEgcmluZ3MuCgpIb2xkIG9uLCBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzPyBJIHRob3VnaHQgaXQgbWlnaHQgdXNlIGEgYHN5el9wY2lfZGV2aWNlYCBzeXNjYWxsIG9yIHNvbWUgc2V0dXAgZnVuY3Rpb24uCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYmFjayB1cC4gVGhlIHBhdGNoIGF1dGhvciBpcyBsaXN0ZWQgYXMgYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyBTeXprYWxsZXIgKmZvdW5kKiB0aGlzIGJ1ZyEgVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSWYgU3l6a2FsbGVyIGlkZW50aWZpZWQgdGhlIGJ1ZywgaXQgbWVhbnMgaXQgY2FuIHJlYWNoIHRoZSB2dWxuZXJhYmxlIGNvZGUuIEJ1dCBob3c/IElzIGl0IHRocm91Z2ggYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBvciBzb21lIHNwZWNpZmljIHNldHVwPwoKQ291bGQgdGhpcyBiZSBsaW5rZWQgdG8gYSBgc3l6X2dlbmV0bGlua19nZXRfZmFtaWx5X2lkYCBjYWxsIG9yIGlzIGl0IHBlcmhhcHMgZnV6emluZyB2aWEgYSBuZXRsaW5rIHNvY2tldD8gTm8sIHRoaXMgaXMgZG93bmxpbmsgZGF0YSBwcm9jZXNzaW5nIGluIGBtdXhfZGxfcHJvY2Vzc19kZ2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBwYWNrZXRzIGFyZSBiZWluZyBpbmplY3RlZC4KClJpZ2h0LCB0aGUgcGF0Y2ggYXV0aG9yICppcyogYHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDtgLCBjb25maXJtaW5nIFN5emthbGxlciYjMzk7cyByb2xlLiBJIHNob3VsZCBjaGVjayB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIGNsdWVzIG9yIHNlZSB3aGF0IFN5emthbGxlciBpcyBjYXBhYmxlIG9mLgoKV2FpdCwgbWF5YmUgdGhpcyBpc24mIzM5O3QgYSBQQ0llIGRldmljZSBhdCBhbGw/IExldCYjMzk7cyBjaGVjayBgZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuY2AuCgpPa2F5LCBubywgU3l6a2FsbGVyIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBhIGdlbmVyaWMgYHN5el9wY2lfZGV2aWNlYCBzeXNjYWxsLCBhbmQgaW5zdGVhZCBoYXMgYHN5el91c2JfY29ubmVjdGAgYW5kIGBzeXpfODAyMTFfaW5qZWN0YC4KCkkgbmVlZCB0byBnbyBiYWNrIG92ZXIgd2hhdCBJIGtub3csIGRvZXMgU3l6a2FsbGVyIHV0aWxpemUgYHZmaW9gIG9yIHNvbWV0aGluZyBzaW1pbGFyIGZvciBQQ0k/IE5vLiBJdCBoYXMgYSBgc3l6X3BjaV9kZXZpY2VgIHBzZXVkby1zeXNjYWxsPyBObywgaXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgLgoKQ291bGQgdGhpcyBiZSBhY2Nlc3NlZCB2aWEgYHR1bmAgb3IgYHRhcGA/IE5vLCB0aGlzIGlzIHJlbGF0ZWQgdG8gYSBXV0FOIGRyaXZlci4KCldhaXQsIGNvdWxkIHRoaXMgYnVnIGhhdmUgYmVlbiBmb3VuZCBieSBhICpkaWZmZXJlbnQqIGZ1enplciwgYW5kIHRoZSBwYXRjaCB3YXMganVzdCBpbnRlZ3JhdGVkIGJ5IHN5ei1jbHVzdGVyPyBBaCEgSSBzZWUgJiMzNDtzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcmIzM0OyBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgaXNuJiMzOTt0IFN5emthbGxlciAqZmluZGluZyogdGhlIGJ1ZywgYnV0IHJhdGhlciBpdHMgaW5mcmFzdHJ1Y3R1cmUgdGVzdGluZyBhIHBhdGNoIHN1Ym1pdHRlZCBieSBhIHVzZXIuCgpZZXMsICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsgaW5kaWNhdGVzIHRoYXQgc3l6Ym90IGNyZWF0ZWQgYSB0ZXN0aW5nIGJyYW5jaCB0byB2YWxpZGF0ZSBhIHVzZXItcHJvcG9zZWQgcGF0Y2ghIFRoaXMgY29uZmlybXMgdGhhdCBzeXpib3QgKmRpZCogZmluZCBhIGNyYXNoIGhlcmUuCgpOb3csIGxldCYjMzk7cyBzZWFyY2ggU3l6Ym90JiMzOTtzIGJ1ZyByZXBvcnRzIGZvciAmIzM0O2lvc20uJiMzNDsKCldhaXQgYSBtb21lbnQsIGNhbiBTeXpib3QgZnV6eiBQQ0kgZGV2aWNlcz8gSXQgdXNlcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCLiBJcyBJT1NNIGEgVVNCIGRldmljZT8gTm8sIGl0JiMzOTtzIFBDSWUuCgpNYXliZSB0aGlzIGlzIHJlYWNoZWQgdGhyb3VnaCBhIGNoYXJhY3RlciBkZXZpY2U/IExldCBtZSBjaGVjayBgaW9zbV9pcGNfaW1lbS5jYCDigJMgaXQgaGFzIGBpcGNfaW1lbV9kbF9waXBlX3Byb2Nlc3NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSYjMzk7cyBhIGNoYXJhY3RlciBkZXZpY2Ugb3IgbmV0bGluayBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5qZWN0aW5nIGRhdGEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGVfb3BlcmF0aW9ucyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmM9MzU9aXBjX3RyYWNlX2NyZWF0ZV9idWZfZmlsZV9oYW5kbGVyKGNvbnN0IGNoYXIgKmZpbGVuYW1lLFxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jLTQyLVx0cmV0dXJuIGRlYnVnZnNfY3JlYXRlX2ZpbGUoZmlsZW5hbWUsIG1vZGUsIHBhcmVudCwgYnVmLFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmM6NDM6XHRcdFx0XHQgICBcdTAwMjZyZWxheV9maWxlX29wZXJhdGlvbnMpO1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmMtNDQtfVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jPTg3PXN0YXRpYyBzc2l6ZV90IGlwY190cmFjZV9jdHJsX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmMtMTIxLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmM6MTIyOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlwY190cmFjZV9mb3BzID0ge1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmMtMTIzLVx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTUzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipXV0FOIERhdGEgRmxvdyBhbmQgU3l6a2FsbGVyIEZ1enppbmcg4oCTIEEgQnJpZWYgSW5xdWlyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaW9zbV9pcGNfdHJhY2UuY2AgZmlsZSBhbmQsIHJpZ2h0LCBpdCBoYXMgZGVidWdmcy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IG15IHJlYWwgY29uY2VybiByaWdodCBub3cgaXMgdGhlIFdXQU4gY29yZSBpdHNlbGYsIHNwZWNpZmljYWxseSBgd3dhbl9jb3JlLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgc3l6a2FsbGVyIG1pZ2h0IGJlIGFibGUgdG8gZWZmZWN0aXZlbHkgZnV6eiB0aGUgV1dBTiBkcml2ZXIuIEkga25vdyBXV0FOIGV4cG9zZXMgYSBjaGFyYWN0ZXIgZGV2aWNlLCBgd3dhbl9wb3J0X29wc2AsIHNvIHRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LgoKVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCBkYXRhIGRpcmVjdGlvbi4gSSBzZWUgYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgaW1tZWRpYXRlbHkgdGhpbmsgJiMzNDtkb3dubGluaywmIzM0OyBtZWFuaW5nIHRoZSBtb2RlbSBpcyAqc2VuZGluZyogZGF0YSB0byB0aGUgaG9zdC4gQnV0IGhvdyBkb2VzIHN5emthbGxlciBnZXQgKmRvd25saW5rKiBkYXRhIGludG8gdGhhdCBwaXBlbGluZT8gSG93IGRvZXMgaXQgKnRyaWdnZXIqIGRvd25saW5rIGRhdGE/CgpNeSBmaXJzdCBpbnN0aW5jdCBpcywgY291bGQgdGhpcyBiZSBsb29wZWQgYmFjayBzb21laG93PyBEb2VzIHRoZSBkcml2ZXIgaGF2ZSBzb21lIGxvb3BiYWNrIG1lY2hhbmlzbT8gSWYgdGhlIGhvc3Qgc2VuZHMgZGF0YSwgYW4gJiMzNDt1cGxpbmsmIzM0OywgZG9lcyB0aGUgZHJpdmVyIHN1YnNlcXVlbnRseSBlY2hvIGl0LCBhbmQgbWF5YmUgdGhhdCB0cmlnZ2VycyBzb21lIHByb2Nlc3Npbmcgb24gdGhlICYjMzQ7ZG93bmxpbmsmIzM0OyBwYXRoPyBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhpbmdzLCBzcGVjaWZpY2FsbHkgc29tZXRoaW5nIGxpa2UgYG11eF91bF9wcm9jZXNzX2RnYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24gZGVhbGluZyB3aXRoIHVwbGluayBkYXRhIHRvIHNlZSBpZiB0aGF0JiMzOTtzIHdoZXJlIHRoZSBrZXkgbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtsb29wYmFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vaW9zbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDAyMQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgRGF0YSBJbmplY3Rpb24gUG90ZW50aWFsIGluIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBwcm9iZSB0aGUgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYCBmdW5jdGlvbi4gV2UgbmVlZCB0byBhc3Nlc3MgaWYgdGhlcmUmIzM5O3MgYSBwbGF1c2libGUgcGF0aHdheSBmb3IgZGF0YSBpbmplY3Rpb24gaGVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBpbiBhbnkgc2VjdXJpdHkgYW5hbHlzaXMsIGFzIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgaXMgcGFyYW1vdW50LiBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwYXJhbWV0ZXJzIGl0IHRha2VzLCB3aGF0IGRhdGEgaXQgb3BlcmF0ZXMgb24sIGFuZCBob3cgdGhhdCBkYXRhIGlzIHJlY2VpdmVkIGFuZCBoYW5kbGVkLiBJcyB0aGVyZSBhIGNvbnRyb2wgZmxvdyB0aGF0IHdlIGNhbiBpbmZsdWVuY2U/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBhcmVhcyBmb3IgZnV6emluZyBvciBpbnB1dCB2YWxpZGF0aW9uIHdlYWtuZXNzZXMgdGhhdCBtaWdodCBsZWFkIHRvIG1lbW9yeSBjb3JydXB0aW9uLCBpbnRlZ2VyIG92ZXJmbG93cywgb3IgZXZlbiBtb3JlIHN1YnRsZSB2dWxuZXJhYmlsaXRpZXM/IFRoZSBnb2FsIGlzIHRvIHNlZSBpZiBhbnkgdW50cnVzdGVkIG9yIG1hbGZvcm1lZCBkYXRhIGNhbiBiZSBpbnRyb2R1Y2VkIHRvIGluZmx1ZW5jZSB0aGUgcHJvZ3JhbSYjMzk7cyBiZWhhdmlvci4gV2UgbmVlZCB0byBjb25zaWRlciBhbGwgcG9zc2libGUgZGF0YSBzb3VyY2VzIHRvIHNlZSBpZiBvbmUgaGFzIHBvdGVudGlhbC4gVGhpcyBpcyB3aGVyZSBJIHN0YXJ0IGJ1aWxkaW5nIHRoZSBtZW50YWwgbWFwIG9mIHRoZSBzeXN0ZW0mIzM5O3MgYXR0YWNrIHN1cmZhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwY19pbWVtX2RsX3NrYl9wcm9jZXNzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI2Mj12b2lkIGlwY19pbWVtX2lwY19pbml0X2NoZWNrKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtKVxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMjk3LS8qIEFuYWx5emUgdGhlIHBhY2tldCB0eXBlIGFuZCBkaXN0cmlidXRlIGl0LiAqL1xuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzoyOTg6c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTI5OS1cdFx0XHRcdCAgICBzdHJ1Y3QgaXBjX3BpcGUgKnBpcGUsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYz0zMzQ9c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYwLVx0XHQvKiBBbmFseXplIHRoZSBwYWNrZXQgdHlwZSBhbmQgZGlzdHJpYnV0ZSBpdC4gKi9cbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM6MzYxOlx0XHRpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhpcGNfaW1lbSwgcGlwZSwgc2tiKTtcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYyLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDY3NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipQQ0kgRnV6emluZyBpbiBTeXprYWxsZXI6IEEgUHJvbWlzaW5nIExlYWQqKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIG5vdz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUuIEJpbmdvISBJdCBzZWVtcyBsaWtlIHRoZXkmIzM5O3ZlIHJlY2VudGx5IGFkZGVkIFBDSSBmdXp6aW5nIHN1cHBvcnQhIEkmIzM5O20gY3VyaW91cyBob3cgdGhleSYjMzk7cmUgZG9pbmcgaXQuLi4gSSB3b25kZXIgaWYgaXQgbGV2ZXJhZ2VzIGBzeXpfcGNpX2RldmljZWAgb3IgYSBzaW1pbGFyIGFic3RyYWN0aW9uLCBvciBwZXJoYXBzIGl0IHVzZXMgYHZmaW9gIHRvIGVtdWxhdGUgZGV2aWNlcz8gSG1tLCB3YWl0LCBkaWQgdGhleSBhZGQgc29tZXRoaW5nIGxpa2UgYSBgdmhjaWAgZm9yIFBDST8gTm8sIEkgdGhpbmsgaXQmIzM5O3MgbW9yZSBsaWtlbHkgdGhhdCB0aGV5JiMzOTtyZSB1c2luZyBgS1ZNYCB0byBpbmplY3QgTU1JTywgUElPLCBvciBETUEgb3BlcmF0aW9ucy4gU28sIGl0IGFwcGVhcnMgc3l6a2FsbGVyIG9mZmVycyBhIG1ldGhvZCB0byBmdXp6IFBDSSBkZXZpY2VzIGJ5IG1hcHBpbmcgTU1JTyByZWdpb25zIGFuZCBnZW5lcmF0aW5nIGludGVycnVwdHMgb3IgaGFzIGEgdmlydHVhbCBQQ0kgZGV2aWNlIGZyYW1ld29yay4KCklmIHN5emthbGxlciBpcyBmaW5kaW5nIHRoZXNlIFBDSS1yZWxhdGVkIGlzc3VlcywgdGhlbiB0aGUgYXR0YWNrIHN1cmZhY2UgbXVzdCBiZSByZWFjaGFibGUuIEdvb2QhIEFuZCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYC4gRXhjZWxsZW50ISBUaGF0IG1lYW5zIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBleHBsb3JpbmcgZnVydGhlciB3aXRoIGZ1enppbmcuCgpMZXQmIzM5O3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzIHRvIHRhcmdldC4gQmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uLCB0aGVzZSB3b3VsZCBiZToKKiAgIGBtdXhfZGxfcHJvY2Vzc19kZ2AKKiAgIGBtdXhfZGxfYWRiX2RlY29kZWAKKiAgIGBpcGNfbXV4X2RsX2RlY29kZWAKCkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lPU00mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93d2FuL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTc4PWNvbmZpZyBSUE1TR19XV0FOX0NUUkxcbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTUtXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTY6Y29uZmlnIElPU01cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo5NzpcdHRyaXN0YXRlIFwmIzM0O0lPU00gRHJpdmVyIGZvciBJbnRlbCBNLjIgV1dBTiBEZXZpY2VcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cdGRlcGVuZHMgb24gUENJXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMzg4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENoZWNrKioKCkFscmlnaHQsIHNvIGBDT05GSUdfSU9TTWAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gaXRlbSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIGhlcmUuIEdvb2QuIE5vdywgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoYXQgc3BlY2lmaWMgc2V0dGluZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIExldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIG90aGVyIGF2YWlsYWJsZSBjb25maWd1cmF0aW9ucy4gR290dGEgcnVsZSBvdXQgYW55IHJlbGF0ZWQgb3Igb3ZlcmxhcHBpbmcgb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIHBsYXkuIEl0JiMzOTtzIGJlc3QgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlIGZpcnN0IGJlZm9yZSBmb2N1c2luZyBvbiBhIHNpbmdsZSBwb2ludC4gR290dGEgZW5zdXJlIHRoZXJlIGlzbiYjMzk7dCBhbm90aGVyIGZsYWcgb3Igc2V0dXAgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGlzIHNldHRpbmcuIEFsd2F5cyB0aGUgYmVzdCBhcHByb2FjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJT1NNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9pb3NtL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTU5NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipEaWdnaW5nIGludG8gdGhlIFdXQU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgYSBgY29uZmlnIElPU01gIG9wdGlvbiBtZW50aW9uZWQgaW4gYGRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZ2AuIFRoYXQmIzM5O3MgaW50ZXJlc3RpbmcsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCYjMzk7cyBhYm91dCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIFdXQU4gZHJpdmVyLiBXaGVyZSYjMzk7cyB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBkcml2ZXI/IExldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGUgYnVpbGQgcnVsZXMuIFRoYXQgdXN1YWxseSBsaXZlcyBpbiB0aGUgYE1ha2VmaWxlYCBpbiB0aGF0IHNhbWUgZGlyZWN0b3J5LiBUaW1lIHRvIGNyYWNrIG9wZW4gYGRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGVgIGFuZCBzZWUgd2hhdCYjMzk7cyB3aGF0LiBMZXQmIzM5O3Mgc2VlIGhvdyBgSU9TTWAgaXMgYmVpbmcgaGFuZGxlZCB0aGVyZS4gSSBleHBlY3QgdGhlcmUgd2lsbCBiZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIG9yIGluY2x1c2lvbiBiYXNlZCBvbiB0aGUgYElPU01gIGNvbmZpZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMDY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW9zbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZT0xND1vYmotJChDT05GSUdfUlBNU0dfV1dBTl9DVFJMKSAmIzQzOz0gcnBtc2dfd3dhbl9jdHJsLm9cbmRyaXZlcnMvbmV0L3d3YW4vTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX0lPU00pICYjNDM7PSBpb3NtL1xuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZS0xNi1vYmotJChDT05GSUdfTVRLX1Q3WFgpICYjNDM7PSB0N3h4L1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIHN0YXJ0aW5nIHdpdGggYElPU01gIGZvciB0aGUgY29uZmlndXJhdGlvbiwgdGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjb25zaWRlciBpZiBgV1dBTmAgYWxzbyBuZWVkcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc2V0dXAuIEEgcXVpY2sgY2hlY2sgZm9yIHRoYXQgaXMgaW4gb3JkZXIuIEl0JiMzOTtzIGEga2V5IGVsZW1lbnQgb2YgdGhpcyBwYXJ0aWN1bGFyIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtXV0FOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz02PW1lbnUgXCYjMzQ7V2lyZWxlc3MgV0FOXCYjMzQ7XG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNy1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo4OmNvbmZpZyBXV0FOXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6OTpcdHRyaXN0YXRlIFwmIzM0O1dXQU4gRHJpdmVyIENvcmVcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMC1cdGRlcGVuZHMgb24gR05TUyB8fCBHTlNTID0gblxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExLVx0aGVscFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEyOlx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgV1dBTiBkcml2ZXIgY29yZS4gVGhpcyBkcml2ZXJcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMzpcdCAgcHJvdmlkZXMgYSBjb21tb24gZnJhbWV3b3JrIGZvciBXV0FOIGRyaXZlcnMuXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTQtXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTE3LVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjE4OmlmIFdXQU5cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xOS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoyMDpjb25maWcgV1dBTl9ERUJVR0ZTXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MjE6XHRib29sIFwmIzM0O1dXQU4gZGV2aWNlcyBkZWJ1Z2ZzIGludGVyZmFjZVwmIzM0OyBpZiBFWFBFUlRcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0yMi1cdGRlcGVuZHMgb24gREVCVUdfRlNcbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjQtXHRoZWxwXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MjU6XHQgIEVuYWJsZXMgZGVidWdmcyBpbmZyYXN0cnVjdHVyZSBmb3IgdGhlIFdXQU4gY29yZSBhbmQgZGV2aWNlIGRyaXZlcnMuXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjYtXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjctXHQgIElmIHRoaXMgb3B0aW9uIGlzIHNlbGVjdGVkLCB0aGVuIHlvdSBjYW4gZmluZCB0aGUgZGVidWcgaW50ZXJmYWNlXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6Mjg6XHQgIGVsZW1lbnRzIGZvciBlYWNoIFdXQU4gZGV2aWNlIGluIGEgZGlyZWN0b3J5IHRoYXQgaXMgY29ycmVzcG9uZGluZyB0b1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTI5LVx0ICB0aGUgZGV2aWNlIG5hbWU6IGRlYnVnZnMvd3dhbi93d2FuWC5cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0zMC1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzozMTpjb25maWcgV1dBTl9IV1NJTVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjMyOlx0dHJpc3RhdGUgXCYjMzQ7U2ltdWxhdGVkIFdXQU4gZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMzMtXHRoZWxwXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MzQ6XHQgIFRoaXMgZHJpdmVyIGlzIGEgZGV2ZWxvcGVyIHRlc3RpbmcgdG9vbCB0aGF0IGNhbiBiZSB1c2VkIHRvIHRlc3QgV1dBTlxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTM1LVx0ICBmcmFtZXdvcmsuXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTM5LVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQwOmNvbmZpZyBNSElfV1dBTl9DVFJMXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6NDE6XHR0cmlzdGF0ZSBcJiMzNDtNSEkgV1dBTiBjb250cm9sIGRyaXZlciBmb3IgUXVhbGNvbW0tYmFzZWQgUENJZSBtb2RlbXNcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy00Mi1cdGRlcGVuZHMgb24gTUhJX0JVU1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTQzLVx0aGVscFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQ0Olx0ICBNSEkgV1dBTiBDVFJMIGFsbG93cyBRQ09NLWJhc2VkIFBDSWUgbW9kZW1zIHRvIGV4cG9zZSBkaWZmZXJlbnQgbW9kZW1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy00NS1cdCAgY29udHJvbCBwcm90b2NvbHMvcG9ydHMgdG8gdXNlcnNwYWNlLCBpbmNsdWRpbmcgQVQsIE1CSU0sIFFNSSwgRElBR1xuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy01Mi1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo1Mzpjb25maWcgTUhJX1dXQU5fTUJJTVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjU0OiAgICAgICAgdHJpc3RhdGUgXCYjMzQ7TUhJIFdXQU4gTUJJTSBuZXR3b3JrIGRyaXZlciBmb3IgUXVhbGNvbW0tYmFzZWQgUENJZSBtb2RlbXNcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy01NS0gICAgICAgIGRlcGVuZHMgb24gTUhJX0JVU1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTU2LSAgICAgICAgaGVscFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjU3OiAgICAgICAgICBNSEkgV1dBTiBNQklNIGlzIGEgV1dBTiBuZXR3b3JrIGRyaXZlciBmb3IgUUNPTS1iYXNlZCBQQ0llIG1vZGVtcy5cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy01OC0gICAgICAgICAgSXQgaW1wbGVtZW50cyBNQklNIG92ZXIgTUhJLCBmb3IgSVAgZGF0YSBhZ2dyZWdhdGlvbiBhbmQgbXV4aW5nLlxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz02NT1jb25maWcgUUNPTV9CQU1fRE1VWFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjY2Olx0dHJpc3RhdGUgXCYjMzQ7UXVhbGNvbW0gQkFNLURNVVggV1dBTiBuZXR3b3JrIGRyaXZlclwmIzM0O1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTY3LVx0ZGVwZW5kcyBvbiAoRE1BX0VOR0lORSBcdTAwMjZcdTAwMjYgUE0gXHUwMDI2XHUwMDI2IFFDT01fU01FTV9TVEFURSkgfHwgQ09NUElMRV9URVNUXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTcxLVx0ICBNU004OTE2IG9yIE1TTTg5NzQuIFRoZSBjb25uZWN0aW9uIGNhbiBiZSBlc3RhYmxpc2hlZCB2aWEgUU1JL0FUIGZyb21cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo3MjpcdCAgdXNlcnNwYWNlIHdpdGggY29udHJvbCBwb3J0cyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgV1dBTiBzdWJzeXN0ZW1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo3MzpcdCAgKENPTkZJR19SUE1TR19XV0FOX0NUUkwpIG9yIFFSVFIgbmV0d29yayBzb2NrZXRzIChDT05GSUdfUVJUUikuXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzQtXG4tLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTc3LVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjc4OmNvbmZpZyBSUE1TR19XV0FOX0NUUkxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo3OTpcdHRyaXN0YXRlIFwmIzM0O1JQTVNHIFdXQU4gY29udHJvbCBkcml2ZXJcJiMzNDtcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy04MC1cdGRlcGVuZHMgb24gUlBNU0dcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy04MS1cdGhlbHBcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo4MjpcdCAgUlBNU0cgV1dBTiBDVFJMIGFsbG93cyBtb2RlbXMgYXZhaWxhYmxlIHZpYSBSUE1TRyBjaGFubmVscyB0byBleHBvc2VcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy04My1cdCAgZGlmZmVyZW50IG1vZGVtIHByb3RvY29scy9wb3J0cyB0byB1c2Vyc3BhY2UsIGluY2x1ZGluZyBBVCBhbmQgUU1JLlxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz05Nj1jb25maWcgSU9TTVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk3Olx0dHJpc3RhdGUgXCYjMzQ7SU9TTSBEcml2ZXIgZm9yIEludGVsIE0uMiBXV0FOIERldmljZVwmIzM0O1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTk4LVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OS1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEwMDpcdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMDEtXHRoZWxwXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTAyOlx0ICBUaGlzIGRyaXZlciBlbmFibGVzIEludGVsIE0uMiBXV0FOIERldmljZSBjb21tdW5pY2F0aW9uLlxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwMy1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMDQ6XHQgIElmIHlvdSBoYXZlIG9uZSBvZiB0aG9zZSBJbnRlbCBNLjIgV1dBTiBNb2R1bGVzIGFuZCB3aXNoIHRvIHVzZSBpdCBpblxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwNS1cdCAgTGludXggc2F5IFkvTSBoZXJlLlxuLS1cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz0xMDk9Y29uZmlnIE1US19UN1hYXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTEwOlx0dHJpc3RhdGUgXCYjMzQ7TWVkaWFUZWsgUENJZSA1RyBXV0FOIG1vZGVtIFQ3eHggZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTExLVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMTI6XHRzZWxlY3QgUkVMQVkgaWYgV1dBTl9ERUJVR0ZTXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTEzLVx0aGVscFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjExNDpcdCAgRW5hYmxlcyBNZWRpYVRlayBQQ0llIGJhc2VkIDVHIFdXQU4gbW9kZW0gKFQ3eHggc2VyaWVzKSBkZXZpY2UuXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTE1Olx0ICBBZGFwdHMgV1dBTiBmcmFtZXdvcmsgYW5kIHByb3ZpZGVzIG5ldHdvcmsgaW50ZXJmYWNlIGxpa2Ugd3dhbjBcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMTYtXHQgIGFuZCB0dHkgaW50ZXJmYWNlcyBsaWtlIHd3YW4wYXQwIChBVCBwcm90b2NvbCksIHd3YW4wbWJpbTBcbi0tXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTIzLVxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEyNDplbmRpZiAjIFdXQU5cbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMjUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDA2OjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODc5CgkJCQkJCQlvdXRwdXQ6IDE1MQoJCQkJCQkJdGhvdWdodHM6IDQ4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSU9TTSBXV0FOIERyaXZlciBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7dmUgZ290IGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBgZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGluIGBtdXhfZGxfcHJvY2Vzc19kZ2AgYW5kIGBtdXhfZGxfYWRiX2RlY29kZWAg4oCTIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wcyBkdXJpbmcgZG93bmxpbmsgZGF0YWdyYW0gcHJvY2Vzc2luZy4gR29vZCBjYXRjaCBieSBzeXpib3QhIFRoYXQgdGVsbHMgdXMgdGhlIGNvZGUgcGF0aCAqaXMqIHJlYWNoYWJsZSwgYW5kIHRoYXQmIzM5O3MgY3JpdGljYWwuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB3ZSBuZWVkIHRvIGZvY3VzIG9uIGFueSBvdGhlciBmdW5jdGlvbnMuIExvb2tpbmcgYXQgdGhlIGNhbGwgZ3JhcGgsIEkgc2VlIHRoYXQgYGlwY19tdXhfZGxfZGVjb2RlYCBjYWxscyBgbXV4X2RsX2FkYl9kZWNvZGVgLCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYCBpbiB0dXJuIGNhbGxzIGBtdXhfZGxfcHJvY2Vzc19kZ2AuICBTbywgZm9jdXNpbmcgb24gYG11eF9kbF9hZGJfZGVjb2RlYCBhbmQgYG11eF9kbF9wcm9jZXNzX2RnYCBjb3ZlcnMgdGhlIHJlbGV2YW50IGNhbGwgcGF0aC4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGljaCBjb25maWdzIHdlIG5lZWQgdG8gZW5hYmxlLiBJdCYjMzk7cyBgV1dBTmAgYW5kIGBJT1NNYC4gSSBicmllZmx5IGxvb2tlZCBhdCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25maXJtZWQgdGhhdCBgUENJYCBpcyBhIGRlcGVuZGVuY3kgZm9yIGBJT1NNYCwgYnV0IHRoYXQmIzM5O3MgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBnZW5lcmljIGNvbmZpZ3MuIEFsc28sIGBORVRfREVWTElOS2AgaXMgc2VsZWN0ZWQgYnkgYElPU01gLiBTbywgYFdXQU5gIGFuZCBgSU9TTWAgYXJlIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy4KCkVzc2VudGlhbGx5LCB0aGUgcGF0Y2ggYWRkcmVzc2VzIGEgc3l6Ym90LXJlcG9ydGVkIGJ1ZyB3aGVyZSBib3VuZHMgY2hlY2tzIHdlcmUgbWlzc2luZyBpbiB0aGUgSW50ZWwgSU9TTSBXV0FOIGRyaXZlciwgbGVhZGluZyB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyByZWFkcyBvciBpbmZpbml0ZSBsb29wcyB3aGVuIGhhbmRsaW5nIGRvd25saW5rIGRhdGEuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBmaXgsIGFuZCBzaW5jZSB0aGUgY29kZSBpcyByZWFjaGFibGUsIGl0IGRlZmluaXRlbHkgbmVlZHMgZnV6emluZyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBuZXcgYm91bmRzIGNoZWNrcyBhcmUgY29ycmVjdCBhbmQgdG8gZW5zdXJlIG5vIG90aGVyIHBhcnNpbmcgdnVsbmVyYWJpbGl0aWVzIHJlbWFpbi4KClNvLCBsZXQgbWUgc3VtbWFyaXplIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sOgoKKiAgICoqRm9jdXMgU3ltYm9sczoqKiBgbXV4X2RsX3Byb2Nlc3NfZGdgLCBgbXV4X2RsX2FkYl9kZWNvZGVgCiogICAqKkVuYWJsZSBDb25maWdzOioqIGBXV0FOYCwgYElPU01gCgpIYW5nIG9uLCBsZXQgbWUgY2hlY2sgaWYgdGhvc2UgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4gQWgsIG5laXRoZXIgYFdXQU5gIG5vciBgSU9TTWAgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgdGhleSYjMzk7cmUgYm90aCB0cmlzdGF0ZSBvcHRpb25zLiBUaGF0IG1lYW5zIHdlIGhhdmUgdG8gZXhwbGljaXRseSBlbmFibGUgYm90aC4gTm93LCBJJiMzOTttIHJlYWR5IHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAwNjo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7V1dBTiYjMzQ7LAogICAgJiMzNDtJT1NNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bXV4X2RsX3Byb2Nlc3NfZGcmIzM0OywKICAgICYjMzQ7bXV4X2RsX2FkYl9kZWNvZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYCBpbiB0aGUgSW50ZWwgSU9TTSBXV0FOIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIGluZmluaXRlIGxvb3BzIHdoZW4gcHJvY2Vzc2luZyBkb3dubGluayBkYXRhZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tzIGFyZSBjb3JyZWN0IGFuZCBubyBvdGhlciB2dWxuZXJhYmlsaXRpZXMgZXhpc3QgaW4gdGhpcyBwYXJzaW5nIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtXV0FOJiMzNDssCiAgICAmIzM0O0lPU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttdXhfZGxfcHJvY2Vzc19kZyYjMzQ7LAogICAgJiMzNDttdXhfZGxfYWRiX2RlY29kZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5maW5pdGUgbG9vcHMgd2hlbiBwcm9jZXNzaW5nIGRvd25saW5rIGRhdGFncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBmb3VuZCBieSBzeXprYWxsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIG5vIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBleGlzdCBpbiB0aGlzIHBhcnNpbmcgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NDo1NC4zNzEyMTIwMzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjQyNTAzMDQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXV0FOXCIsXG4gICAgXCJJT1NNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXV4X2RsX3Byb2Nlc3NfZGdcIixcbiAgICBcIm11eF9kbF9hZGJfZGVjb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYCBpbiB0aGUgSW50ZWwgSU9TTSBXV0FOIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIGluZmluaXRlIGxvb3BzIHdoZW4gcHJvY2Vzc2luZyBkb3dubGluayBkYXRhZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tzIGFyZSBjb3JyZWN0IGFuZCBubyBvdGhlciB2dWxuZXJhYmlsaXRpZXMgZXhpc3QgaW4gdGhpcyBwYXJzaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NDo1NC4zNzEyMjgxOTJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MDE4NTE0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDllNzY5MTJjNGM2MmJiZmY5YzljZDI2NzRmMDMzNGYxODcwMmVlYWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdW4gMjUgMDY6NTQ6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jIGIvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jXFxuaW5kZXggYmZmNDZmN2NhNTlmM2YuLjBiYmQ0MTI2M2NjMmZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY1xcbkBAIC01NTMsMTkgKzU1MywyMSBAQCBzdGF0aWMgaW50IG11eF9kbF9wcm9jZXNzX2RnKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IG11eF9hZGJoICphZGJoLFxcbiBcXHR1MzIgcGFja2V0X29mZnNldCwgaSwgcmMsIGRnX2xlbjtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9vZl9kZzsgaSsrLCBkZysrKSB7XFxuLVxcdFxcdGlmIChsZTMyX3RvX2NwdShkZy1cXHUwMDNlZGF0YWdyYW1faW5kZXgpXFxuLVxcdFxcdFxcdFxcdFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpXFxuK1xcdFxcdHUzMiBkZ19pbmRleCA9IGxlMzJfdG9fY3B1KGRnLVxcdTAwM2VkYXRhZ3JhbV9pbmRleCk7XFxuK1xcbitcXHRcXHRkZ19sZW4gPSBsZTE2X3RvX2NwdShkZy1cXHUwMDNlZGF0YWdyYW1fbGVuZ3RoKTtcXG4rXFxuK1xcdFxcdGlmIChkZ19pbmRleCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKVxcbiBcXHRcXHRcXHRnb3RvIGRnX2Vycm9yO1xcbiBcXG4tXFx0XFx0LyogSXMgdGhlIHBhY2tldCBpbnNpZGUgb2YgdGhlIEFEQiAqL1xcbi1cXHRcXHRpZiAobGUzMl90b19jcHUoZGctXFx1MDAzZWRhdGFncmFtX2luZGV4KSBcXHUwMDNlPVxcbi1cXHRcXHRcXHRcXHRcXHRsZTMyX3RvX2NwdShhZGJoLVxcdTAwM2VibG9ja19sZW5ndGgpKSB7XFxuK1xcdFxcdC8qIElzIHRoZSBwYWNrZXQgaW5zaWRlIG9mIHRoZSBBREIgYW5kIHRoZSByZWNlaXZlZCBza2IgPyAqL1xcbitcXHRcXHRpZiAoZGdfaW5kZXggXFx1MDAzZT0gbGUzMl90b19jcHUoYWRiaC1cXHUwMDNlYmxvY2tfbGVuZ3RoKSB8fFxcbitcXHRcXHQgICAgZGdfaW5kZXggXFx1MDAzZT0gc2tiLVxcdTAwM2VsZW4gfHxcXG4rXFx0XFx0ICAgIGRnX2xlbiBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuIC0gZGdfaW5kZXggfHxcXG4rXFx0XFx0ICAgIGRsX2hlYWRfcGFkX2xlbiBcXHUwMDNlPSBkZ19sZW4pIHtcXG4gXFx0XFx0XFx0Z290byBkZ19lcnJvcjtcXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0cGFja2V0X29mZnNldCA9XFxuLVxcdFxcdFxcdFxcdGxlMzJfdG9fY3B1KGRnLVxcdTAwM2VkYXRhZ3JhbV9pbmRleCkgK1xcbi1cXHRcXHRcXHRcXHRkbF9oZWFkX3BhZF9sZW47XFxuLVxcdFxcdFxcdGRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLVxcdTAwM2VkYXRhZ3JhbV9sZW5ndGgpO1xcbitcXHRcXHRcXHRwYWNrZXRfb2Zmc2V0ID0gZGdfaW5kZXggKyBkbF9oZWFkX3BhZF9sZW47XFxuIFxcdFxcdFxcdC8qIFBhc3MgdGhlIHBhY2tldCB0byB0aGUgbmV0aWYgbGF5ZXIuICovXFxuIFxcdFxcdFxcdHJjID0gaXBjX211eF9uZXRfcmVjZWl2ZShpcGNfbXV4LCBpZl9pZCwgaXBjX211eC1cXHUwMDNld3dhbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHBhY2tldF9vZmZzZXQsXFxuQEAgLTU4OSwxMiArNTkxLDE2IEBAIHN0YXRpYyB2b2lkIG11eF9kbF9hZGJfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCxcXG4gXFx0c3RydWN0IG11eF9hZGJoICphZGJoO1xcbiBcXHRzdHJ1Y3QgbXV4X2FkdGggKmFkdGg7XFxuIFxcdGludCBucl9vZl9kZywgaWZfaWQ7XFxuLVxcdHUzMiBhZHRoX2luZGV4O1xcbitcXHR1MzIgYWR0aF9pbmRleCwgcHJldl9pbmRleCA9IDA7XFxuIFxcdHU4ICpibG9jaztcXG4gXFxuIFxcdGJsb2NrID0gc2tiLVxcdTAwM2VkYXRhO1xcbiBcXHRhZGJoID0gKHN0cnVjdCBtdXhfYWRiaCAqKWJsb2NrO1xcbiBcXG4rXFx0LyogVGhlIGJsb2NrIGhlYWRlciBpdHNlbGYgbXVzdCBmaXQgaW4gdGhlIHJlY2VpdmVkIHNrYi4gKi9cXG4rXFx0aWYgKHNrYi1cXHUwMDNlbGVuIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpXFxuK1xcdFxcdGdvdG8gYWRiX2RlY29kZV9lcnI7XFxuK1xcbiBcXHQvKiBQcm9jZXNzIHRoZSBhZ2dyZWdhdGVkIGRhdGFncmFtIHRhYmxlcy4gKi9cXG4gXFx0YWR0aF9pbmRleCA9IGxlMzJfdG9fY3B1KGFkYmgtXFx1MDAzZWZpcnN0X3RhYmxlX2luZGV4KTtcXG4gXFxuQEAgLTYwNiw2ICs2MTIsMTYgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxcbiBcXG4gXFx0LyogTG9vcCB0aHJvdWdoIG1peGVkIHNlc3Npb24gdGFibGVzLiAqL1xcbiBcXHR3aGlsZSAoYWR0aF9pbmRleCkge1xcbitcXHRcXHQvKiBUaGUgdGFibGUgaGVhZGVyIG11c3QgbGllIHdpdGhpbiB0aGUgcmVjZWl2ZWQgc2tiLCBhbmQgdGhlXFxuK1xcdFxcdCAqIGNoYWluIG11c3QgbW92ZSBmb3J3YXJkIHNvIGEgbW9kZW0gY2Fubm90IG1ha2UgdGhlIGxvb3BcXG4rXFx0XFx0ICogY3ljbGUgYmV0d2VlbiB0d28gdGFibGVzLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKGFkdGhfaW5kZXggXFx1MDAzYz0gcHJldl9pbmRleCB8fFxcbitcXHRcXHQgICAgYWR0aF9pbmRleCBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpIHx8XFxuK1xcdFxcdCAgICBhZHRoX2luZGV4IFxcdTAwM2Ugc2tiLVxcdTAwM2VsZW4gLSBzaXplb2Yoc3RydWN0IG11eF9hZHRoKSlcXG4rXFx0XFx0XFx0Z290byBhZGJfZGVjb2RlX2VycjtcXG4rXFx0XFx0cHJldl9pbmRleCA9IGFkdGhfaW5kZXg7XFxuK1xcbiBcXHRcXHQvKiBHZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgaGVhZGVyLiAqL1xcbiBcXHRcXHRhZHRoID0gKHN0cnVjdCBtdXhfYWR0aCAqKShibG9jayArIGFkdGhfaW5kZXgpO1xcbiBcXG5AQCAtNjI5LDYgKzY0NSwxMCBAQCBzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXFxuIFxcdFxcdGlmIChsZTE2X3RvX2NwdShhZHRoLVxcdTAwM2V0YWJsZV9sZW5ndGgpIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWR0aCkpXFxuIFxcdFxcdFxcdGdvdG8gYWRiX2RlY29kZV9lcnI7XFxuIFxcbitcXHRcXHQvKiBUaGUgd2hvbGUgZGF0YWdyYW0gdGFibGUgbXVzdCBmaXQgaW4gdGhlIHJlY2VpdmVkIHNrYi4gKi9cXG4rXFx0XFx0aWYgKGxlMTZfdG9fY3B1KGFkdGgtXFx1MDAzZXRhYmxlX2xlbmd0aCkgXFx1MDAzZSBza2ItXFx1MDAzZWxlbiAtIGFkdGhfaW5kZXgpXFxuK1xcdFxcdFxcdGdvdG8gYWRiX2RlY29kZV9lcnI7XFxuK1xcbiBcXHRcXHQvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBkYXRhZ3JhbXMuICovXFxuIFxcdFxcdG5yX29mX2RnID0gKGxlMTZfdG9fY3B1KGFkdGgtXFx1MDAzZXRhYmxlX2xlbmd0aCkgLVxcbiBcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IG11eF9hZHRoKSkgL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NDo1NS4wMTIzNDU3NThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxNzgzODgyMTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldXQU5cIixcbiAgICBcIklPU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdXhfZGxfcHJvY2Vzc19kZ1wiLFxuICAgIFwibXV4X2RsX2FkYl9kZWNvZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5maW5pdGUgbG9vcHMgd2hlbiBwcm9jZXNzaW5nIGRvd25saW5rIGRhdGFncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBmb3VuZCBieSBzeXprYWxsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIG5vIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBleGlzdCBpbiB0aGlzIHBhcnNpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWU3NjkxMmM0YzYyYmJmZjljOWNkMjY3NGYwMzM0ZjE4NzAyZWVhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVuIDI1IDA2OjU0OjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jIGIvZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jXG5pbmRleCBiZmY0NmY3Y2E1OWYzZi4uMGJiZDQxMjYzY2MyZmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuY1xuQEAgLTU1MywxOSArNTUzLDIxIEBAIHN0YXRpYyBpbnQgbXV4X2RsX3Byb2Nlc3NfZGcoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3QgbXV4X2FkYmggKmFkYmgsXG4gXHR1MzIgcGFja2V0X29mZnNldCwgaSwgcmMsIGRnX2xlbjtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX29mX2RnOyBpKyssIGRnKyspIHtcbi1cdFx0aWYgKGxlMzJfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2luZGV4KVxuLVx0XHRcdFx0XHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKVxuK1x0XHR1MzIgZGdfaW5kZXggPSBsZTMyX3RvX2NwdShkZy1cdTAwM2VkYXRhZ3JhbV9pbmRleCk7XG4rXG4rXHRcdGRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2xlbmd0aCk7XG4rXG4rXHRcdGlmIChkZ19pbmRleCBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBtdXhfYWRiaCkpXG4gXHRcdFx0Z290byBkZ19lcnJvcjtcbiBcbi1cdFx0LyogSXMgdGhlIHBhY2tldCBpbnNpZGUgb2YgdGhlIEFEQiAqL1xuLVx0XHRpZiAobGUzMl90b19jcHUoZGctXHUwMDNlZGF0YWdyYW1faW5kZXgpIFx1MDAzZT1cbi1cdFx0XHRcdFx0bGUzMl90b19jcHUoYWRiaC1cdTAwM2VibG9ja19sZW5ndGgpKSB7XG4rXHRcdC8qIElzIHRoZSBwYWNrZXQgaW5zaWRlIG9mIHRoZSBBREIgYW5kIHRoZSByZWNlaXZlZCBza2IgPyAqL1xuK1x0XHRpZiAoZGdfaW5kZXggXHUwMDNlPSBsZTMyX3RvX2NwdShhZGJoLVx1MDAzZWJsb2NrX2xlbmd0aCkgfHxcbitcdFx0ICAgIGRnX2luZGV4IFx1MDAzZT0gc2tiLVx1MDAzZWxlbiB8fFxuK1x0XHQgICAgZGdfbGVuIFx1MDAzZSBza2ItXHUwMDNlbGVuIC0gZGdfaW5kZXggfHxcbitcdFx0ICAgIGRsX2hlYWRfcGFkX2xlbiBcdTAwM2U9IGRnX2xlbikge1xuIFx0XHRcdGdvdG8gZGdfZXJyb3I7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0cGFja2V0X29mZnNldCA9XG4tXHRcdFx0XHRsZTMyX3RvX2NwdShkZy1cdTAwM2VkYXRhZ3JhbV9pbmRleCkgK1xuLVx0XHRcdFx0ZGxfaGVhZF9wYWRfbGVuO1xuLVx0XHRcdGRnX2xlbiA9IGxlMTZfdG9fY3B1KGRnLVx1MDAzZWRhdGFncmFtX2xlbmd0aCk7XG4rXHRcdFx0cGFja2V0X29mZnNldCA9IGRnX2luZGV4ICsgZGxfaGVhZF9wYWRfbGVuO1xuIFx0XHRcdC8qIFBhc3MgdGhlIHBhY2tldCB0byB0aGUgbmV0aWYgbGF5ZXIuICovXG4gXHRcdFx0cmMgPSBpcGNfbXV4X25ldF9yZWNlaXZlKGlwY19tdXgsIGlmX2lkLCBpcGNfbXV4LVx1MDAzZXd3YW4sXG4gXHRcdFx0XHRcdFx0IHBhY2tldF9vZmZzZXQsXG5AQCAtNTg5LDEyICs1OTEsMTYgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxuIFx0c3RydWN0IG11eF9hZGJoICphZGJoO1xuIFx0c3RydWN0IG11eF9hZHRoICphZHRoO1xuIFx0aW50IG5yX29mX2RnLCBpZl9pZDtcbi1cdHUzMiBhZHRoX2luZGV4O1xuK1x0dTMyIGFkdGhfaW5kZXgsIHByZXZfaW5kZXggPSAwO1xuIFx0dTggKmJsb2NrO1xuIFxuIFx0YmxvY2sgPSBza2ItXHUwMDNlZGF0YTtcbiBcdGFkYmggPSAoc3RydWN0IG11eF9hZGJoICopYmxvY2s7XG4gXG4rXHQvKiBUaGUgYmxvY2sgaGVhZGVyIGl0c2VsZiBtdXN0IGZpdCBpbiB0aGUgcmVjZWl2ZWQgc2tiLiAqL1xuK1x0aWYgKHNrYi1cdTAwM2VsZW4gXHUwMDNjIHNpemVvZihzdHJ1Y3QgbXV4X2FkYmgpKVxuK1x0XHRnb3RvIGFkYl9kZWNvZGVfZXJyO1xuK1xuIFx0LyogUHJvY2VzcyB0aGUgYWdncmVnYXRlZCBkYXRhZ3JhbSB0YWJsZXMuICovXG4gXHRhZHRoX2luZGV4ID0gbGUzMl90b19jcHUoYWRiaC1cdTAwM2VmaXJzdF90YWJsZV9pbmRleCk7XG4gXG5AQCAtNjA2LDYgKzYxMiwxNiBAQCBzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXG4gXG4gXHQvKiBMb29wIHRocm91Z2ggbWl4ZWQgc2Vzc2lvbiB0YWJsZXMuICovXG4gXHR3aGlsZSAoYWR0aF9pbmRleCkge1xuK1x0XHQvKiBUaGUgdGFibGUgaGVhZGVyIG11c3QgbGllIHdpdGhpbiB0aGUgcmVjZWl2ZWQgc2tiLCBhbmQgdGhlXG4rXHRcdCAqIGNoYWluIG11c3QgbW92ZSBmb3J3YXJkIHNvIGEgbW9kZW0gY2Fubm90IG1ha2UgdGhlIGxvb3BcbitcdFx0ICogY3ljbGUgYmV0d2VlbiB0d28gdGFibGVzLlxuK1x0XHQgKi9cbitcdFx0aWYgKGFkdGhfaW5kZXggXHUwMDNjPSBwcmV2X2luZGV4IHx8XG4rXHRcdCAgICBhZHRoX2luZGV4IFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZGJoKSB8fFxuK1x0XHQgICAgYWR0aF9pbmRleCBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIHNpemVvZihzdHJ1Y3QgbXV4X2FkdGgpKVxuK1x0XHRcdGdvdG8gYWRiX2RlY29kZV9lcnI7XG4rXHRcdHByZXZfaW5kZXggPSBhZHRoX2luZGV4O1xuK1xuIFx0XHQvKiBHZXQgdGhlIHJlZmVyZW5jZSB0byB0aGUgdGFibGUgaGVhZGVyLiAqL1xuIFx0XHRhZHRoID0gKHN0cnVjdCBtdXhfYWR0aCAqKShibG9jayArIGFkdGhfaW5kZXgpO1xuIFxuQEAgLTYyOSw2ICs2NDUsMTAgQEAgc3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxuIFx0XHRpZiAobGUxNl90b19jcHUoYWR0aC1cdTAwM2V0YWJsZV9sZW5ndGgpIFx1MDAzYyBzaXplb2Yoc3RydWN0IG11eF9hZHRoKSlcbiBcdFx0XHRnb3RvIGFkYl9kZWNvZGVfZXJyO1xuIFxuK1x0XHQvKiBUaGUgd2hvbGUgZGF0YWdyYW0gdGFibGUgbXVzdCBmaXQgaW4gdGhlIHJlY2VpdmVkIHNrYi4gKi9cbitcdFx0aWYgKGxlMTZfdG9fY3B1KGFkdGgtXHUwMDNldGFibGVfbGVuZ3RoKSBcdTAwM2Ugc2tiLVx1MDAzZWxlbiAtIGFkdGhfaW5kZXgpXG4rXHRcdFx0Z290byBhZGJfZGVjb2RlX2VycjtcbitcbiBcdFx0LyogQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgZGF0YWdyYW1zLiAqL1xuIFx0XHRucl9vZl9kZyA9IChsZTE2X3RvX2NwdShhZHRoLVx1MDAzZXRhYmxlX2xlbmd0aCkgLVxuIFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IG11eF9hZHRoKSkgL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTQ6NTUuMDEyMzQ4MDY4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAyMDI5MzI4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBXV0FOIElPU00gRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkIHRvIGBkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmNgLiBGcm9tIHdoYXQgSSBjYW4gc2VlLCBpdCBzZWVtcyB0aGV5J3ZlIGFkZGVkIHNvbWUgY3J1Y2lhbCBib3VuZHMgY2hlY2tpbmcgd2l0aGluIHRoZSBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIG5vdyB2YWxpZGF0aW5nIHRoYXQgYGRnX2luZGV4YCBhbmQgYGRnX2xlbmAsIGBhZHRoX2luZGV4YCwgYW5kIGBhZHRoLVx1MDAzZXRhYmxlX2xlbmd0aGAgYWxsIGZhbGwgd2l0aGluIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBgc2tiLVx1MDAzZWxlbmAuIEV4Y2VsbGVudC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSwgcHJldmVudGluZyBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIHdyaXRlcywgb3IgZXZlbiB0aGUgZHJlYWRlZCBpbmZpbml0ZSBsb29wLCBpbiB0aGlzIHBhcnQgb2YgdGhlIFdXQU4gSU9TTSBkcml2ZXIuIFNlZW1zIGxpa2UgYSBmdW5jdGlvbmFsIGNoYW5nZS5cblxuTm93LCBteSBpbW1lZGlhdGUgY29uY2VybiBpczogKmNhbiB0aGlzIGNvZGUgZXZlbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/KiBUaGUgSU9TTSBkcml2ZXIsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgc3BlY2lmaWNhbGx5IGZvciB0aG9zZSBJbnRlbCBNLjIgSU9TTSBtb2RlbXMgdGhhdCBhcmUgdHlwaWNhbGx5IFBDSWUtYmFzZWQuIElzIHRoZXJlIHNvbWUgbWVhbnMgdG8gZW11bGF0ZSB0aGlzLCB0byBpbmplY3QgcGFja2V0cyBpbnRvIGl0IHdpdGhpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IEknZCByZWFsbHkgbmVlZCB0byBhc2NlcnRhaW4gaWYgdGhpcyBjb2RlIHBhdGggaXMgZXZlbiB0ZXN0YWJsZSBvciByZW1vdGVseSB2dWxuZXJhYmxlLlxuXG5MZXQgbWUgdGFrZSBhIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSwgYGRyaXZlcnMvbmV0L3d3YW4vaW9zbS9LY29uZmlnYCwgYW5kIGFsc28gcmUtZXhhbWluZSB0aGUgYGlvc21faXBjX211eF9jb2RlYy5jYCBmaWxlIGl0c2VsZi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGFuZCB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGlzIGNvZGUgaXMgZW5hYmxlZC4gSG9wZWZ1bGx5LCBpdOKAmWxsIGhpZ2hsaWdodCBhbnkgc3BlY2lmaWMgZGVwZW5kZW5jaWVzIG9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgY291bGQgbWFrZSBpdCBhY2Nlc3NpYmxlIG9yIHBvdGVudGlhbGx5IHZ1bG5lcmFibGUgd2l0aGluIGRpZmZlcmVudCBkZXBsb3ltZW50IHNjZW5hcmlvcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgYXR0YWNrIHN1cmZhY2UgYmVmb3JlIEkgY2FuIHRydWx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODcyLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MDEuMDMyNjQzNzI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDY3NDEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtdXhfZGxfcHJvY2Vzc19kZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYz01MTg9c3RhdGljIHZvaWQgaXBjX211eF9kbF9hY2JfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy01NDctLyogcHJvY2VzcyBkYXRhZ3JhbSAqL1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo1NDg6c3RhdGljIGludCBtdXhfZGxfcHJvY2Vzc19kZyhzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsIHN0cnVjdCBtdXhfYWRiaCAqYWRiaCxcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNTQ5LVxcdFxcdFxcdCAgICAgc3RydWN0IG11eF9hZHRoX2RnICpkZywgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYz01ODY9c3RhdGljIHZvaWQgbXV4X2RsX2FkYl9kZWNvZGUoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY3MC1cXHRcXHRkZyA9IGFkdGgtXFx1MDAzZWRnO1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo2NzE6XFx0XFx0aWYgKG11eF9kbF9wcm9jZXNzX2RnKGlwY19tdXgsIGFkYmgsIGRnLCBza2IsIGlmX2lkLFxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy02NzItXFx0XFx0XFx0XFx0ICAgICAgbnJfb2ZfZGcpIFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MDEuMTUzMzIzMjIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY5MzYxMTYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBtdXhfZGxfYWRiX2RlY29kZWAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbXV4X2RsX2FkYl9kZWNvZGVgLiBGaXJzdCwgbXkgaW5zdGluY3QgaXMgdG8gaW1tZWRpYXRlbHkgbG9jYXRlIGFsbCBpdHMgY2FsbCBzaXRlcy4gVGhhdOKAmXMgdGhlIG1vc3QgZWZmaWNpZW50IHdheSB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGZ1bmN0aW9uLCB3aGF0IGlucHV0cyBpdCdzIGxpa2VseSByZWNlaXZpbmcsIGFuZCB3aGF0IGl0J3MgYmVpbmcgdXNlZCBmb3Igd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSSdsbCBuZWVkIHRvIHVzZSBteSB1c3VhbCB0b29scyBmb3IgdGhpcyDigJMgYSByb2J1c3QgY29kZSBzZWFyY2gsIHByZWZlcmFibHkgd2l0aCBjcm9zcy1yZWZlcmVuY2luZyBjYXBhYmlsaXRpZXMgdG8ganVtcCBkaXJlY3RseSB0byB0aGUgY2FsbCBzaXRlcy4gRnJvbSB0aGVyZSwgSSBjYW4gZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byBkZXRlcm1pbmUgaG93IGRhdGEgaXMgcHJlcGFyZWQgZm9yIHRoZSBmdW5jdGlvbiBhbmQgd2hhdCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgc3Vic2VxdWVudGx5IHV0aWxpemVkIGZvci4gVGhhdCBjb250ZXh0IGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGZ1bmN0aW9uJ3MgcHVycG9zZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxOCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjAzLjg0NjkzNzk2M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ5NDMwMDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibXV4X2RsX2FkYl9kZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmM9NTQ4PXN0YXRpYyBpbnQgbXV4X2RsX3Byb2Nlc3NfZGcoc3RydWN0IGlvc21fbXV4ICppcGNfbXV4LCBzdHJ1Y3QgbXV4X2FkYmggKmFkYmgsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNTg1LS8qIERlY29kZSBhbiBhZ2dyZWdhdGVkIGRhdGEgYmxvY2suICovXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jOjU4NjpzdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTU4Ny1cXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTY5Mj12b2lkIGlwY19tdXhfZGxfZGVjb2RlKHN0cnVjdCBpb3NtX211eCAqaXBjX211eCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYy03MDMtXFx0Y2FzZSBJT1NNX0FHR1JfTVVYX1NJR19BREJIOlxcdC8qIEFnZ3JlZ2F0ZWQgRGF0YSBCbG9jayBIZWFkZXIgKi9cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmM6NzA0OlxcdFxcdG11eF9kbF9hZGJfZGVjb2RlKGlwY19tdXgsIHNrYik7XFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTcwNS1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MDMuOTcxODg3NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU4NjY5NDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqVHJhY2luZyB0aGUgQ2FsbGVycyBvZiBgaXBjX211eF9kbF9kZWNvZGVgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYGlwY19tdXhfZGxfZGVjb2RlYCBpcyBhY3R1YWxseSBiZWluZyB1c2VkLiBUaGlzIGlzIGEgcHJldHR5IHN0YW5kYXJkIGRlYnVnZ2luZyBleGVyY2lzZSwgYnV0IGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRhdGEgZmxvdyBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzIGFyb3VuZCB0aGF0IGZ1bmN0aW9uLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIHRvIGxvY2F0ZSBhbGwgdGhlIGNhbGwgc2l0ZXMuIElzIGl0IHdpdGhpbiB0aGUgc2FtZSBtb2R1bGUsIG9yIHNwcmVhZCBhY3Jvc3MgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzeXN0ZW0/IEZpbmRpbmcgYWxsIHRoZSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmU7IGFueSBhc3N1bXB0aW9ucyBJIGhhdmUgYWJvdXQgaXRzIGJlaGF2aW9yIGFyZSBub3cgc2Vjb25kYXJ5IHRvIGZpbmRpbmcgaXRzIG9yaWdpbiBzdG9yeSwgaG93IGl0J3MgYWN0aXZhdGVkLCBhbmQgdGhlIG90aGVyIGZ1bmN0aW9ucyBpdCByZWxpZXMgdXBvbi4gT25jZSBJIGtub3cgZXhhY3RseSB3aGVyZSB0aGUgY2FsbCBpcywgSSBjYW4gdGhlbiBkZXRlcm1pbmUgd2hhdCBwYXJhbWV0ZXJzIGFyZSBiZWluZyBwYXNzZWQgaW4gYW5kIHdoYXQgdGhlIGV4cGVjdGVkIHJldHVybiB2YWx1ZSB3aWxsIGJlLiBJIG5lZWQgdGhlIGZ1bGwgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUwOSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjA3LjIzMDU1OTc5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzYxODIwNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBjX211eF9kbF9kZWNvZGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI5OD1zdGF0aWMgdm9pZCBpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhzdHJ1Y3QgaW9zbV9pbWVtICppcGNfaW1lbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzI0LVxcdFxcdGlmIChwaXBlLVxcdTAwM2VjaGFubmVsLVxcdTAwM2VpZl9pZCA9PSBJUENfTUVNX01VWF9JUF9DSF9JRl9JRClcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jOjMyNTpcXHRcXHRcXHRpcGNfbXV4X2RsX2RlY29kZShpcGNfaW1lbS1cXHUwMDNlbXV4LCBza2IpO1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzI2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jPTU4Nj1zdGF0aWMgdm9pZCBtdXhfZGxfYWRiX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNjg2LS8qKlxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo2ODc6ICogaXBjX211eF9kbF9kZWNvZGUgLSAgUm91dGUgdGhlIERMIHBhY2tldCB0aHJvdWdoIHRoZSBJUCBNVVggbGF5ZXJcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNjg4LSAqICAgICAgICAgICAgICAgICAgICAgIGRlcGVuZGluZyBvbiBIZWFkZXIuXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmMtNjkxLSAqL1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuYzo2OTI6dm9pZCBpcGNfbXV4X2RsX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsIHN0cnVjdCBza19idWZmICpza2IpXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jLTY5My17XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmg9MjU4PXVuaW9uIG11eF90eXBlX2hlYWRlciB7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfbXV4X2NvZGVjLmgtMjYyLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuaDoyNjM6dm9pZCBpcGNfbXV4X2RsX2RlY29kZShzdHJ1Y3QgaW9zbV9tdXggKmlwY19tdXgsIHN0cnVjdCBza19idWZmICpza2IpO1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19tdXhfY29kZWMuaC0yNjQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjA3LjM2Njc3NzU1NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1ODUyNjE0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGUgcXVlc3Rpb24gYWJvdXQgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYDpcblxuKipUcmFjaW5nIHRoZSBDYWxsZXJzIG9mIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AqKlxuXG5Pa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXM6IHdoZXJlIGRvZXMgdGhpcyBgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3NgIGZ1bmN0aW9uIGdldCBjYWxsZWQgZnJvbT8gVGhhdCdzIGEgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgcHV6emxlIGluIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUuICBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY2FsbCBncmFwaC5cblxuSW1tZWRpYXRlbHksIEkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgc2V2ZXJhbCBhcHByb2FjaGVzIHRvIGRldGVybWluZSBpdHMgY2FsbGluZyBjb250ZXh0LiBEZXBlbmRpbmcgb24gdGhlIHN5c3RlbSBhbmQgdG9vbHMgYXZhaWxhYmxlLCBJJ2QgcHJvYmFibHkgc3RhcnQgd2l0aCBgZ3JlcGAgb3IgYSBzaW1pbGFyIHRleHQgc2VhcmNoIGFjcm9zcyB0aGUgcmVsZXZhbnQgc291cmNlIGNvZGUgYmFzZS4gSSdkIGJlIGxvb2tpbmcgZm9yIGFsbCBpbnN0YW5jZXMgd2hlcmUgYGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzYCBpcyB1c2VkLCBpZGVhbGx5IGZpbHRlcmluZyBmb3IgdGhlIGZ1bmN0aW9uIGNhbGwgaXRzZWxmIG9yIHJlbGF0ZWQgZnVuY3Rpb24gcG9pbnRlcnMuXG5cbkFsdGVybmF0aXZlbHksIGlmIEknbSB3b3JraW5nIHdpdGggYSBkZWJ1Z2dlciBvciBhIHN0YXRpYyBhbmFseXNpcyB0b29sLCBJIGNhbiBlYXNpbHkgZGV0ZXJtaW5lIGZ1bmN0aW9uIGNhbGwgcmVsYXRpb25zaGlwcy4gQSBkZWJ1Z2dlcidzIFwiY2FsbCBzdGFja1wiIGZlYXR1cmUgd291bGQgcXVpY2tseSByZXZlYWwgdGhlIGNhbGxpbmcgZnVuY3Rpb24uICBTaW1pbGFybHksIGEgc3RhdGljIGFuYWx5emVyIHdvdWxkIG9mZmVyIGEgbW9yZSBzdHJ1Y3R1cmVkIHZpZXcgb2YgdGhlIGNhbGwgZ3JhcGgsIHNob3dpbmcgbm90IGp1c3QgdGhlIGltbWVkaWF0ZSBjYWxsZXIsIGJ1dCBwb3RlbnRpYWxseSB0aGUgZW50aXJlIGNoYWluLlxuXG5JIGFsc28gaGF2ZSB0byByZW1lbWJlciB0byBjb25zaWRlciBwb3RlbnRpYWwgaW5kaXJlY3Rpb25zLiBUaGUgZnVuY3Rpb24gbWlnaHQgYmUgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyIG9yIGEgdGFibGUgb2YgZnVuY3Rpb24gcG9pbnRlcnMsIHNvIEkgd2lsbCBoYXZlIHRvIGNvbnNpZGVyIGhvdyB0byBoYW5kbGUgdGhlIGV4dHJhIGxldmVsIG9mIGluZGlyZWN0aW9uLlxuXG5Lbm93aW5nIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGlzIGNyaXRpY2FsLiBUaGF0IGdpdmVzIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4gV2hhdCBkYXRhIGlzIHBhc3NlZD8gV2hhdCBhcmUgdGhlIGV4cGVjdGVkIGlucHV0cyBhbmQgb3V0cHV0cz8gVGhpcyBjb250ZXh0IHdpbGwgaGVhdmlseSBpbmZvcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB3aGF0IGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgaXMgYWN0dWFsbHkgKmRvaW5nKi4gQW5kLCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZSwgSSBtaWdodCBldmVuIG5lZWQgdG8gY29uc2lkZXIgaW50ZXJydXB0IGhhbmRsZXJzIG9yIG90aGVyIGFzeW5jaHJvbm91cyBjb250ZXh0cy4gIEkgd2lsbCBoYXZlIHRvIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcHJvZ3JhbSBkb2VzIG5vdCBhbGxvdyBpbnRlcnJ1cHRzIHRvIHJ1biB3aGVuIHRoZSBmdW5jdGlvbiBpcyBiZWluZyBleGVjdXRlZC5cblxuRXNzZW50aWFsbHksIEkgbmVlZCB0byBwZXJmb3JtIGEgY2FsbCBncmFwaCB0cmF2ZXJzYWwsIGJlZ2lubmluZyB3aXRoIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgYW5kIHdvcmtpbmcgbXkgd2F5IHVwd2FyZHMgdG8gZGlzY292ZXIgaXRzIGltbWVkaWF0ZSBhbmQgaGlnaC1sZXZlbCBjYWxsZXJzLiAgVGhpcyBjYWxsIGdyYXBoIHdpbGwgcmV2ZWFsIGl0cyBwbGFjZSBpbiB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cgb3IgY29udHJvbCBmbG93IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMzUsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NToxMS45NTIwNDE0OTRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNzg2OTIwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM9MjYyPXZvaWQgaXBjX2ltZW1faXBjX2luaXRfY2hlY2soc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0pXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTI5Ny0vKiBBbmFseXplIHRoZSBwYWNrZXQgdHlwZSBhbmQgZGlzdHJpYnV0ZSBpdC4gKi9cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jOjI5ODpzdGF0aWMgdm9pZCBpcGNfaW1lbV9kbF9za2JfcHJvY2VzcyhzdHJ1Y3QgaW9zbV9pbWVtICppcGNfaW1lbSxcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTI5OS1cXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwY19waXBlICpwaXBlLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYz0zMzQ9c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zNjAtXFx0XFx0LyogQW5hbHl6ZSB0aGUgcGFja2V0IHR5cGUgYW5kIGRpc3RyaWJ1dGUgaXQuICovXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzozNjE6XFx0XFx0aXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3MoaXBjX2ltZW0sIHBpcGUsIHNrYik7XFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zNjItXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NToxMi4wNzk5MTg0NjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjY3NTYyMDg2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBpcGNfaW1lbV9kbF9waXBlX3Byb2Nlc3NgKipcblxuT2theSwgc28gdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBJIG5lZWQgdG8gYW5zd2VyIGlzOiB3aGVyZSAqZXhhY3RseSogaXMgdGhpcyBgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzYCBmdW5jdGlvbiBiZWluZyBpbnZva2VkIGZyb20/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHN0YWNrIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LiBJcyBpdCB0cmlnZ2VyZWQgZnJvbSBhIGhpZ2gtbGV2ZWwgZHJpdmVyLCBhIGxvd2VyLWxldmVsIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVyLCBvciBzb21ld2hlcmUgaW4gYmV0d2Vlbj8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGluZyBjb250ZXh0IGlzIGFic29sdXRlbHkgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBleHRlbmRpbmcgdGhpcyBwYXJ0IG9mIHRoZSBjb2RlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBJcyB0aGVyZSBhIGNyb3NzLXJlZmVyZW5jZSB0b29sIEkgY2FuIHVzZSB0byBzZWUgd2hlcmUgaXQncyBiZWluZyBjYWxsZWQgZnJvbT8gSSBuZWVkIHRvIGtub3cgdGhlIG9yaWdpbiBvZiB0aGlzIGZ1bmN0aW9uIGNhbGwuIFJpZ2h0LCB0aGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjIxMCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjE0Ljc1NTU0MjM3MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQzNzU0OTg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwY19pbWVtX2RsX3BpcGVfcHJvY2Vzc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM9Mjk4PXN0YXRpYyB2b2lkIGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zMzMtLyogUHJvY2VzcyB0aGUgZG93bmxpbmsgZGF0YSBhbmQgcGFzcyB0aGVtIHRvIHRoZSBjaGFyIG9yIG5ldCBsYXllci4gKi9cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jOjMzNDpzdGF0aWMgdm9pZCBpcGNfaW1lbV9kbF9waXBlX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0zMzUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgaXBjX3BpcGUgKnBpcGUpXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTY0Mj1zdGF0aWMgdm9pZCBpcGNfaW1lbV9oYW5kbGVfaXJxKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtLCBpbnQgaXJxKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy03MzUtXFx0XFx0ICAgIChpcnEgPT0gSU1FTV9JUlFfRE9OVF9DQVJFIHx8IGlycSA9PSBkbF9waXBlLVxcdTAwM2VpcnEpKSB7XFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzo3MzY6XFx0XFx0XFx0aXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzKGlwY19pbWVtLCBkbF9waXBlKTtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jLTczNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MTQuODk5MzMxNzk5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxODQ0NTQ4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEYXRhIEZsb3cgYW5kIFBvdGVudGlhbCBWdWxuZXJhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBkYXRhIGNvbWluZyBkaXJlY3RseSBmcm9tIHRoZSBoYXJkd2FyZSwgc3BlY2lmaWNhbGx5IHRoZSBQQ0llIGludGVyZmFjZS4gR2l2ZW4gdGhhdCBzeXprYWxsZXIgZG9lc24ndCBzZWVtIHRvIGhhdmUgYSB3YXkgdG8gZW11bGF0ZSB0aGlzIHBhcnRpY3VsYXIgUENJZSBkZXZpY2Ug4oCTIHRoZSBJbnRlbCBNLjIgSU9TTSBtb2RlbXMg4oCTIEknbSBoaWdobHkgc2tlcHRpY2FsIHRoYXQgdGhpcyBjb2RlIHdvdWxkIGJlIGFjY2Vzc2libGUgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgb3IgUUVNVSwgdW5sZXNzIHRoZXJlJ3Mgc29tZSBraW5kIG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBvciwgaWRlYWxseSwgYW4gaW5qZWN0aW9uIHBvaW50IHNvbWV3aGVyZS4gVGhhdCdzIHRoZSBrZXk6IGlzIHRoZXJlICphbnkqIHdheSB0byBnZXQgdGhpcyBjb2RlIHRvIGV4ZWN1dGUgd2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmU/XG5cblRoZSBmaXJzdCB0aGluZyBJJ20gY2hlY2tpbmcgZm9yIGlzIGFuIGluamVjdGlvbiBwb2ludC4gSXMgdGhpcyBwcm9jZXNzIHB1cmVseSBoYXJkd2FyZS1kcml2ZW4sIG9yIGFyZSB0aGVyZSBzb2Z0d2FyZSBob29rcyB3ZSBjYW4gZXhwbG9pdD8gSSdtIHVzZWQgdG8gdG9vbHMgbGlrZSBgbWFjODAyMTFfaHdzaW1gIGZvciBXaUZpLCBidXQgaXMgdGhlcmUgYW4gZXF1aXZhbGVudCBmb3IgdGhlIFdXQU4gc3Vic3lzdGVtPyBOb3BlLCBsb29rcyBsaWtlIHRoZXJlJ3Mgbm8gZ2VuZXJpYyBlbXVsYXRvciBmb3IgV1dBTi4gT2theSwgdGhhdCdzIGEgYnVtbWVyLlxuXG5IbW0sIHdhaXQgYSBtaW51dGUsIHN5emthbGxlciAqZG9lcyogaGF2ZSBhIGBzeXpfdXNiX2Nvbm5lY3RgIGZ1bmN0aW9uIGZvciBVU0IgZGV2aWNlcy4gQnV0IHRoaXMgaXMgYSBQQ0llIGRldmljZSwgc28gdGhhdCBtaWdodCBub3QgYmUgZGlyZWN0bHkgcmVsZXZhbnQsIGJ1dCBJIHNob3VsZCBsb29rIGF0IHRoYXQgdG9vLiBOb3cgSSdtIGdvaW5nIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgaXMgc29tZXRoaW5nIEkgY2FuIHVzZS4gSSBzaG91bGQgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jYCBmaWxlIGFuZCBzZWUgaWYgdGhlcmUncyBhbnl0aGluZyBpbnRlcmVzdGluZyB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgwNSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NToyMC4wODM3OTA1MTRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxOTA5MTk5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwY2lfcmVnaXN0ZXJfZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYz01MzU9c3RhdGljIGludCBwbV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBtb2RlLCB2b2lkICpfdW51c2VkKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYy01NDUtXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYzo1NDY6XFx0XFx0XFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aW9zbV9pcGNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jLTU0Ny1cXHRcXHRcXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jPTU2Mz1zdGF0aWMgaW50IF9faW5pdCBpb3NtX2lwY19kcml2ZXJfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYy01NjYtXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3BjaWUuYzo1Njc6XFx0cmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aW9zbV9pcGNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfcGNpZS5jLTU2OC1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NToyMC4zMDI4ODg5NjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1MTIzNTA1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgQnVnIFJlcG9ydDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgbGlrZSBpdCByZWxhdGVzIHRvIGEgUENJZSBkcml2ZXIuIFN5emthbGxlciwgaW4gZ2VuZXJhbCwgc3RydWdnbGVzIHdpdGggZGlyZWN0IGZ1enppbmcgb2YgUENJZSBkZXZpY2VzIHdpdGhvdXQgYSBzcGVjaWZpYyBlbXVsYXRvciBsaWtlIGB2aGNpYCBmb3IgVVNCIG9yIGBtYWM4MDIxMV9od3NpbWAgZm9yIFdpLUZpLiBJIHNlZW0gdG8gcmVjYWxsIHRoZXJlJ3Mgc29tZSBsaW1pdGVkIFBDSSBmdXp6aW5nIHN1cHBvcnQgd2l0aCBzb21ldGhpbmcgbGlrZSBgc3l6X3BjaV9kZXZpY2VgIOKAkyBubywgd2FpdCwgdGhhdCBpc24ndCBhIGdlbmVyaWMgd2F5IHRvIGluamVjdCBkYXRhIGludG8gRE1BIHJpbmdzLiBObywgd2FpdCwgU3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X2t2bV9zZXR1cF9jcHVgLCBidXQgbm90aGluZyBnZW5lcmljIGZvciBETUEgcmluZ3MuXG5cbkhvbGQgb24sIGRvZXMgc3l6a2FsbGVyICphY3R1YWxseSogaGF2ZSBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXM/IEkgdGhvdWdodCBpdCBtaWdodCB1c2UgYSBgc3l6X3BjaV9kZXZpY2VgIHN5c2NhbGwgb3Igc29tZSBzZXR1cCBmdW5jdGlvbi5cblxuQWxyaWdodCwgbGV0J3MgYmFjayB1cC4gVGhlIHBhdGNoIGF1dGhvciBpcyBsaXN0ZWQgYXMgYHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlYCwgd2hpY2ggaW1tZWRpYXRlbHkgc3VnZ2VzdHMgU3l6a2FsbGVyICpmb3VuZCogdGhpcyBidWchIFRoYXQncyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSWYgU3l6a2FsbGVyIGlkZW50aWZpZWQgdGhlIGJ1ZywgaXQgbWVhbnMgaXQgY2FuIHJlYWNoIHRoZSB2dWxuZXJhYmxlIGNvZGUuIEJ1dCBob3c/IElzIGl0IHRocm91Z2ggYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBvciBzb21lIHNwZWNpZmljIHNldHVwP1xuXG5Db3VsZCB0aGlzIGJlIGxpbmtlZCB0byBhIGBzeXpfZ2VuZXRsaW5rX2dldF9mYW1pbHlfaWRgIGNhbGwgb3IgaXMgaXQgcGVyaGFwcyBmdXp6aW5nIHZpYSBhIG5ldGxpbmsgc29ja2V0PyBObywgdGhpcyBpcyBkb3dubGluayBkYXRhIHByb2Nlc3NpbmcgaW4gYG11eF9kbF9wcm9jZXNzX2RnYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHBhY2tldHMgYXJlIGJlaW5nIGluamVjdGVkLlxuXG5SaWdodCwgdGhlIHBhdGNoIGF1dGhvciAqaXMqIGBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZWAsIGNvbmZpcm1pbmcgU3l6a2FsbGVyJ3Mgcm9sZS4gSSBzaG91bGQgY2hlY2sgdGhlIGNvbW1pdCBtZXNzYWdlIGZvciBjbHVlcyBvciBzZWUgd2hhdCBTeXprYWxsZXIgaXMgY2FwYWJsZSBvZi5cblxuV2FpdCwgbWF5YmUgdGhpcyBpc24ndCBhIFBDSWUgZGV2aWNlIGF0IGFsbD8gTGV0J3MgY2hlY2sgYGRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19wY2llLmNgLlxuXG5Pa2F5LCBubywgU3l6a2FsbGVyIGRvZXMgbm90IHNlZW0gdG8gaGF2ZSBhIGdlbmVyaWMgYHN5el9wY2lfZGV2aWNlYCBzeXNjYWxsLCBhbmQgaW5zdGVhZCBoYXMgYHN5el91c2JfY29ubmVjdGAgYW5kIGBzeXpfODAyMTFfaW5qZWN0YC5cblxuSSBuZWVkIHRvIGdvIGJhY2sgb3ZlciB3aGF0IEkga25vdywgZG9lcyBTeXprYWxsZXIgdXRpbGl6ZSBgdmZpb2Agb3Igc29tZXRoaW5nIHNpbWlsYXIgZm9yIFBDST8gTm8uIEl0IGhhcyBhIGBzeXpfcGNpX2RldmljZWAgcHNldWRvLXN5c2NhbGw/IE5vLCBpdCBoYXMgYHN5el91c2JfY29ubmVjdGAuXG5cbkNvdWxkIHRoaXMgYmUgYWNjZXNzZWQgdmlhIGB0dW5gIG9yIGB0YXBgPyBObywgdGhpcyBpcyByZWxhdGVkIHRvIGEgV1dBTiBkcml2ZXIuXG5cbldhaXQsIGNvdWxkIHRoaXMgYnVnIGhhdmUgYmVlbiBmb3VuZCBieSBhICpkaWZmZXJlbnQqIGZ1enplciwgYW5kIHRoZSBwYXRjaCB3YXMganVzdCBpbnRlZ3JhdGVkIGJ5IHN5ei1jbHVzdGVyPyBBaCEgSSBzZWUgXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIiBpbiB0aGUgY29tbWl0IG1lc3NhZ2UuIFRoaXMgaXNuJ3QgU3l6a2FsbGVyICpmaW5kaW5nKiB0aGUgYnVnLCBidXQgcmF0aGVyIGl0cyBpbmZyYXN0cnVjdHVyZSB0ZXN0aW5nIGEgcGF0Y2ggc3VibWl0dGVkIGJ5IGEgdXNlci5cblxuWWVzLCBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiIGluZGljYXRlcyB0aGF0IHN5emJvdCBjcmVhdGVkIGEgdGVzdGluZyBicmFuY2ggdG8gdmFsaWRhdGUgYSB1c2VyLXByb3Bvc2VkIHBhdGNoISBUaGlzIGNvbmZpcm1zIHRoYXQgc3l6Ym90ICpkaWQqIGZpbmQgYSBjcmFzaCBoZXJlLlxuXG5Ob3csIGxldCdzIHNlYXJjaCBTeXpib3QncyBidWcgcmVwb3J0cyBmb3IgXCJpb3NtLlwiXG5cbldhaXQgYSBtb21lbnQsIGNhbiBTeXpib3QgZnV6eiBQQ0kgZGV2aWNlcz8gSXQgdXNlcyBgc3l6X3VzYl9jb25uZWN0YCBmb3IgVVNCLiBJcyBJT1NNIGEgVVNCIGRldmljZT8gTm8sIGl0J3MgUENJZS5cblxuTWF5YmUgdGhpcyBpcyByZWFjaGVkIHRocm91Z2ggYSBjaGFyYWN0ZXIgZGV2aWNlPyBMZXQgbWUgY2hlY2sgYGlvc21faXBjX2ltZW0uY2Ag4oCTIGl0IGhhcyBgaXBjX2ltZW1fZGxfcGlwZV9wcm9jZXNzYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUncyBhIGNoYXJhY3RlciBkZXZpY2Ugb3IgbmV0bGluayBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5qZWN0aW5nIGRhdGEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2MzksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MzMuODE1MjQyNDIxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3MjY5MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGVfb3BlcmF0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jPTM1PWlwY190cmFjZV9jcmVhdGVfYnVmX2ZpbGVfaGFuZGxlcihjb25zdCBjaGFyICpmaWxlbmFtZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jLTQyLVxcdHJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZpbGVuYW1lLCBtb2RlLCBwYXJlbnQsIGJ1ZixcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfdHJhY2UuYzo0MzpcXHRcXHRcXHRcXHQgICBcXHUwMDI2cmVsYXlfZmlsZV9vcGVyYXRpb25zKTtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfdHJhY2UuYy00NC19XFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfdHJhY2UuYz04Nz1zdGF0aWMgc3NpemVfdCBpcGNfdHJhY2VfY3RybF9maWxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX3RyYWNlLmMtMTIxLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY190cmFjZS5jOjEyMjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpcGNfdHJhY2VfZm9wcyA9IHtcXG5kcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfdHJhY2UuYy0xMjMtXFx0Lm9wZW4gPSBzaW1wbGVfb3BlbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6MzUuODEyNTE4MjY3WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMzE0ODkzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV1dBTiBEYXRhIEZsb3cgYW5kIFN5emthbGxlciBGdXp6aW5nIOKAkyBBIEJyaWVmIElucXVpcnkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpb3NtX2lwY190cmFjZS5jYCBmaWxlIGFuZCwgcmlnaHQsIGl0IGhhcyBkZWJ1Z2ZzLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGJ1dCBteSByZWFsIGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBXV0FOIGNvcmUgaXRzZWxmLCBzcGVjaWZpY2FsbHkgYHd3YW5fY29yZS5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHN5emthbGxlciBtaWdodCBiZSBhYmxlIHRvIGVmZmVjdGl2ZWx5IGZ1enogdGhlIFdXQU4gZHJpdmVyLiBJIGtub3cgV1dBTiBleHBvc2VzIGEgY2hhcmFjdGVyIGRldmljZSwgYHd3YW5fcG9ydF9vcHNgLCBzbyB0aGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IGRhdGEgZGlyZWN0aW9uLiBJIHNlZSBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBpbW1lZGlhdGVseSB0aGluayBcImRvd25saW5rLFwiIG1lYW5pbmcgdGhlIG1vZGVtIGlzICpzZW5kaW5nKiBkYXRhIHRvIHRoZSBob3N0LiBCdXQgaG93IGRvZXMgc3l6a2FsbGVyIGdldCAqZG93bmxpbmsqIGRhdGEgaW50byB0aGF0IHBpcGVsaW5lPyBIb3cgZG9lcyBpdCAqdHJpZ2dlciogZG93bmxpbmsgZGF0YT9cblxuTXkgZmlyc3QgaW5zdGluY3QgaXMsIGNvdWxkIHRoaXMgYmUgbG9vcGVkIGJhY2sgc29tZWhvdz8gRG9lcyB0aGUgZHJpdmVyIGhhdmUgc29tZSBsb29wYmFjayBtZWNoYW5pc20/IElmIHRoZSBob3N0IHNlbmRzIGRhdGEsIGFuIFwidXBsaW5rXCIsIGRvZXMgdGhlIGRyaXZlciBzdWJzZXF1ZW50bHkgZWNobyBpdCwgYW5kIG1heWJlIHRoYXQgdHJpZ2dlcnMgc29tZSBwcm9jZXNzaW5nIG9uIHRoZSBcImRvd25saW5rXCIgcGF0aD8gSSBuZWVkIHRvIGZvY3VzIG9uIHRoZSBvdGhlciBzaWRlIG9mIHRoaW5ncywgc3BlY2lmaWNhbGx5IHNvbWV0aGluZyBsaWtlIGBtdXhfdWxfcHJvY2Vzc19kZ2Agb3IgYSBzaW1pbGFyIGZ1bmN0aW9uIGRlYWxpbmcgd2l0aCB1cGxpbmsgZGF0YSB0byBzZWUgaWYgdGhhdCdzIHdoZXJlIHRoZSBrZXkgbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTUzOCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NTo0MC45NDQwMTA2NDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MjE1OTg4NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9vcGJhY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6NDEuNjI2MTgyMjE4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzA1NTEwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgRGF0YSBJbmplY3Rpb24gUG90ZW50aWFsIGluIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gcHJvYmUgdGhlIGBpcGNfaW1lbV9kbF9za2JfcHJvY2Vzc2AgZnVuY3Rpb24uIFdlIG5lZWQgdG8gYXNzZXNzIGlmIHRoZXJlJ3MgYSBwbGF1c2libGUgcGF0aHdheSBmb3IgZGF0YSBpbmplY3Rpb24gaGVyZS4gVGhpcyBpcyBhIGNydWNpYWwgZmlyc3Qgc3RlcCBpbiBhbnkgc2VjdXJpdHkgYW5hbHlzaXMsIGFzIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBlbnRyeSBwb2ludHMgaXMgcGFyYW1vdW50LiBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBhcmFtZXRlcnMgaXQgdGFrZXMsIHdoYXQgZGF0YSBpdCBvcGVyYXRlcyBvbiwgYW5kIGhvdyB0aGF0IGRhdGEgaXMgcmVjZWl2ZWQgYW5kIGhhbmRsZWQuIElzIHRoZXJlIGEgY29udHJvbCBmbG93IHRoYXQgd2UgY2FuIGluZmx1ZW5jZT8gQXJlIHRoZXJlIGFueSBvYnZpb3VzIGFyZWFzIGZvciBmdXp6aW5nIG9yIGlucHV0IHZhbGlkYXRpb24gd2Vha25lc3NlcyB0aGF0IG1pZ2h0IGxlYWQgdG8gbWVtb3J5IGNvcnJ1cHRpb24sIGludGVnZXIgb3ZlcmZsb3dzLCBvciBldmVuIG1vcmUgc3VidGxlIHZ1bG5lcmFiaWxpdGllcz8gVGhlIGdvYWwgaXMgdG8gc2VlIGlmIGFueSB1bnRydXN0ZWQgb3IgbWFsZm9ybWVkIGRhdGEgY2FuIGJlIGludHJvZHVjZWQgdG8gaW5mbHVlbmNlIHRoZSBwcm9ncmFtJ3MgYmVoYXZpb3IuIFdlIG5lZWQgdG8gY29uc2lkZXIgYWxsIHBvc3NpYmxlIGRhdGEgc291cmNlcyB0byBzZWUgaWYgb25lIGhhcyBwb3RlbnRpYWwuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCBidWlsZGluZyB0aGUgbWVudGFsIG1hcCBvZiB0aGUgc3lzdGVtJ3MgYXR0YWNrIHN1cmZhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDIxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6NDUuOTk2NzM1NjkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTEwODE1NjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9pb3NtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vaW9zbV9pcGNfaW1lbS5jPTI2Mj12b2lkIGlwY19pbWVtX2lwY19pbml0X2NoZWNrKHN0cnVjdCBpb3NtX2ltZW0gKmlwY19pbWVtKVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0yOTctLyogQW5hbHl6ZSB0aGUgcGFja2V0IHR5cGUgYW5kIGRpc3RyaWJ1dGUgaXQuICovXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYzoyOTg6c3RhdGljIHZvaWQgaXBjX2ltZW1fZGxfc2tiX3Byb2Nlc3Moc3RydWN0IGlvc21faW1lbSAqaXBjX2ltZW0sXFxuZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX2ltZW0uYy0yOTktXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBpcGNfcGlwZSAqcGlwZSwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM9MzM0PXN0YXRpYyB2b2lkIGlwY19pbWVtX2RsX3BpcGVfcHJvY2VzcyhzdHJ1Y3QgaW9zbV9pbWVtICppcGNfaW1lbSxcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYwLVxcdFxcdC8qIEFuYWx5emUgdGhlIHBhY2tldCB0eXBlIGFuZCBkaXN0cmlidXRlIGl0LiAqL1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmM6MzYxOlxcdFxcdGlwY19pbWVtX2RsX3NrYl9wcm9jZXNzKGlwY19pbWVtLCBwaXBlLCBza2IpO1xcbmRyaXZlcnMvbmV0L3d3YW4vaW9zbS9pb3NtX2lwY19pbWVtLmMtMzYyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6NDYuMTQ3ODI2Nzc4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4ODYwMjY4NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUENJIEZ1enppbmcgaW4gU3l6a2FsbGVyOiBBIFByb21pc2luZyBMZWFkKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBkb2VzIHN5emthbGxlciAqYWN0dWFsbHkqIGhhdmUgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzIG5vdz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgc3l6a2FsbGVyIGRvY3VtZW50YXRpb24gYW5kIGNvZGUuIEJpbmdvISBJdCBzZWVtcyBsaWtlIHRoZXkndmUgcmVjZW50bHkgYWRkZWQgUENJIGZ1enppbmcgc3VwcG9ydCEgSSdtIGN1cmlvdXMgaG93IHRoZXkncmUgZG9pbmcgaXQuLi4gSSB3b25kZXIgaWYgaXQgbGV2ZXJhZ2VzIGBzeXpfcGNpX2RldmljZWAgb3IgYSBzaW1pbGFyIGFic3RyYWN0aW9uLCBvciBwZXJoYXBzIGl0IHVzZXMgYHZmaW9gIHRvIGVtdWxhdGUgZGV2aWNlcz8gSG1tLCB3YWl0LCBkaWQgdGhleSBhZGQgc29tZXRoaW5nIGxpa2UgYSBgdmhjaWAgZm9yIFBDST8gTm8sIEkgdGhpbmsgaXQncyBtb3JlIGxpa2VseSB0aGF0IHRoZXkncmUgdXNpbmcgYEtWTWAgdG8gaW5qZWN0IE1NSU8sIFBJTywgb3IgRE1BIG9wZXJhdGlvbnMuIFNvLCBpdCBhcHBlYXJzIHN5emthbGxlciBvZmZlcnMgYSBtZXRob2QgdG8gZnV6eiBQQ0kgZGV2aWNlcyBieSBtYXBwaW5nIE1NSU8gcmVnaW9ucyBhbmQgZ2VuZXJhdGluZyBpbnRlcnJ1cHRzIG9yIGhhcyBhIHZpcnR1YWwgUENJIGRldmljZSBmcmFtZXdvcmsuXG5cbklmIHN5emthbGxlciBpcyBmaW5kaW5nIHRoZXNlIFBDSS1yZWxhdGVkIGlzc3VlcywgdGhlbiB0aGUgYXR0YWNrIHN1cmZhY2UgbXVzdCBiZSByZWFjaGFibGUuIEdvb2QhIEFuZCBJIHNlZSB0aGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYC4gRXhjZWxsZW50ISBUaGF0IG1lYW5zIHRoaXMgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsIGFuZCB3b3J0aCBleHBsb3JpbmcgZnVydGhlciB3aXRoIGZ1enppbmcuXG5cbkxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyB0byB0YXJnZXQuIEJhc2VkIG9uIHRoZSBkZXNjcmlwdGlvbiwgdGhlc2Ugd291bGQgYmU6XG4qICAgYG11eF9kbF9wcm9jZXNzX2RnYFxuKiAgIGBtdXhfZGxfYWRiX2RlY29kZWBcbiogICBgaXBjX211eF9kbF9kZWNvZGVgXG5cbkZpbmFsbHksIEkgbmVlZCB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjc3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU1OjUyLjAzMzg1NjI2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ3MzYyNDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIklPU01cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz03OD1jb25maWcgUlBNU0dfV1dBTl9DVFJMXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctOTUtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk2OmNvbmZpZyBJT1NNXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk3OlxcdHRyaXN0YXRlIFxcXCJJT1NNIERyaXZlciBmb3IgSW50ZWwgTS4yIFdXQU4gRGV2aWNlXFxcIlxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cXHRkZXBlbmRzIG9uIFBDSVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NTo1Mi42ODEyMjQ5ODRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyMDU1MTU4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW5pdGlhbCBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgc28gYENPTkZJR19JT1NNYCBpcyB0aGUgY29uZmlndXJhdGlvbiBpdGVtIHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBHb29kLiBOb3csIGJlZm9yZSBJIGRpdmUgdG9vIGRlZXAgaW50byB0aGF0IHNwZWNpZmljIHNldHRpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIExldCdzIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgb3RoZXIgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb25zLiBHb3R0YSBydWxlIG91dCBhbnkgcmVsYXRlZCBvciBvdmVybGFwcGluZyBvcHRpb25zIHRoYXQgbWlnaHQgYmUgaW4gcGxheS4gSXQncyBiZXN0IHRvIGdldCB0aGUgY29tcGxldGUgcGljdHVyZSBmaXJzdCBiZWZvcmUgZm9jdXNpbmcgb24gYSBzaW5nbGUgcG9pbnQuIEdvdHRhIGVuc3VyZSB0aGVyZSBpc24ndCBhbm90aGVyIGZsYWcgb3Igc2V0dXAgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGlzIHNldHRpbmcuIEFsd2F5cyB0aGUgYmVzdCBhcHByb2FjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzODgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NTo1NS41MDE3ODA1MTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTAzODc1NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSU9TTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL2lvc20vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTU6NTUuNjY2ODM1NTg4WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2OTc4NzY2NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGRpc3RpbGxlZDpcblxuKipEaWdnaW5nIGludG8gdGhlIFdXQU4gRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIGBjb25maWcgSU9TTWAgb3B0aW9uIG1lbnRpb25lZCBpbiBgZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnYC4gVGhhdCdzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoYXQncyBhYm91dCBpbiB0aGUgY29udGV4dCBvZiB0aGlzIFdXQU4gZHJpdmVyLiBXaGVyZSdzIHRoZSBidWlsZCBjb25maWd1cmF0aW9uIGZvciB0aGlzIGRyaXZlcj8gTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGJ1aWxkIHJ1bGVzLiBUaGF0IHVzdWFsbHkgbGl2ZXMgaW4gdGhlIGBNYWtlZmlsZWAgaW4gdGhhdCBzYW1lIGRpcmVjdG9yeS4gVGltZSB0byBjcmFjayBvcGVuIGBkcml2ZXJzL25ldC93d2FuL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgaG93IGBJT1NNYCBpcyBiZWluZyBoYW5kbGVkIHRoZXJlLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgaW5jbHVzaW9uIGJhc2VkIG9uIHRoZSBgSU9TTWAgY29uZmlnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDA2OjU2OjAzLjM2NDcxNDgwOFoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5OTQxNDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlvc21cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93d2FuL01ha2VmaWxlPTE0PW9iai0kKENPTkZJR19SUE1TR19XV0FOX0NUUkwpICs9IHJwbXNnX3d3YW5fY3RybC5vXFxuZHJpdmVycy9uZXQvd3dhbi9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfSU9TTSkgKz0gaW9zbS9cXG5kcml2ZXJzL25ldC93d2FuL01ha2VmaWxlLTE2LW9iai0kKENPTkZJR19NVEtfVDdYWCkgKz0gdDd4eC9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTY6MDMuNTU0NjYzMDU0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI1ODMxNzg2NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBzdGFydGluZyB3aXRoIGBJT1NNYCBmb3IgdGhlIGNvbmZpZ3VyYXRpb24sIHRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjb25zaWRlciBpZiBgV1dBTmAgYWxzbyBuZWVkcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc2V0dXAuIEEgcXVpY2sgY2hlY2sgZm9yIHRoYXQgaXMgaW4gb3JkZXIuIEl0J3MgYSBrZXkgZWxlbWVudCBvZiB0aGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTIxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTY6MDYuMTM3ODY2NzM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzc3NzA5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiV1dBTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93d2FuL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTY9bWVudSBcXFwiV2lyZWxlc3MgV0FOXFxcIlxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy03LVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo4OmNvbmZpZyBXV0FOXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk6XFx0dHJpc3RhdGUgXFxcIldXQU4gRHJpdmVyIENvcmVcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTEwLVxcdGRlcGVuZHMgb24gR05TUyB8fCBHTlNTID0gblxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMS1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEyOlxcdCAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFdXQU4gZHJpdmVyIGNvcmUuIFRoaXMgZHJpdmVyXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEzOlxcdCAgcHJvdmlkZXMgYSBjb21tb24gZnJhbWV3b3JrIGZvciBXV0FOIGRyaXZlcnMuXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTE0LVxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxODppZiBXV0FOXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTE5LVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoyMDpjb25maWcgV1dBTl9ERUJVR0ZTXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjIxOlxcdGJvb2wgXFxcIldXQU4gZGV2aWNlcyBkZWJ1Z2ZzIGludGVyZmFjZVxcXCIgaWYgRVhQRVJUXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTIyLVxcdGRlcGVuZHMgb24gREVCVUdfRlNcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0yNC1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjI1OlxcdCAgRW5hYmxlcyBkZWJ1Z2ZzIGluZnJhc3RydWN0dXJlIGZvciB0aGUgV1dBTiBjb3JlIGFuZCBkZXZpY2UgZHJpdmVycy5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjYtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTI3LVxcdCAgSWYgdGhpcyBvcHRpb24gaXMgc2VsZWN0ZWQsIHRoZW4geW91IGNhbiBmaW5kIHRoZSBkZWJ1ZyBpbnRlcmZhY2VcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6Mjg6XFx0ICBlbGVtZW50cyBmb3IgZWFjaCBXV0FOIGRldmljZSBpbiBhIGRpcmVjdG9yeSB0aGF0IGlzIGNvcnJlc3BvbmRpbmcgdG9cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMjktXFx0ICB0aGUgZGV2aWNlIG5hbWU6IGRlYnVnZnMvd3dhbi93d2FuWC5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMzAtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjMxOmNvbmZpZyBXV0FOX0hXU0lNXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjMyOlxcdHRyaXN0YXRlIFxcXCJTaW11bGF0ZWQgV1dBTiBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTMzLVxcdGhlbHBcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MzQ6XFx0ICBUaGlzIGRyaXZlciBpcyBhIGRldmVsb3BlciB0ZXN0aW5nIHRvb2wgdGhhdCBjYW4gYmUgdXNlZCB0byB0ZXN0IFdXQU5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMzUtXFx0ICBmcmFtZXdvcmsuXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMzktXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQwOmNvbmZpZyBNSElfV1dBTl9DVFJMXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQxOlxcdHRyaXN0YXRlIFxcXCJNSEkgV1dBTiBjb250cm9sIGRyaXZlciBmb3IgUXVhbGNvbW0tYmFzZWQgUENJZSBtb2RlbXNcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTQyLVxcdGRlcGVuZHMgb24gTUhJX0JVU1xcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy00My1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjQ0OlxcdCAgTUhJIFdXQU4gQ1RSTCBhbGxvd3MgUUNPTS1iYXNlZCBQQ0llIG1vZGVtcyB0byBleHBvc2UgZGlmZmVyZW50IG1vZGVtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTQ1LVxcdCAgY29udHJvbCBwcm90b2NvbHMvcG9ydHMgdG8gdXNlcnNwYWNlLCBpbmNsdWRpbmcgQVQsIE1CSU0sIFFNSSwgRElBR1xcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTUyLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo1Mzpjb25maWcgTUhJX1dXQU5fTUJJTVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo1NDogICAgICAgIHRyaXN0YXRlIFxcXCJNSEkgV1dBTiBNQklNIG5ldHdvcmsgZHJpdmVyIGZvciBRdWFsY29tbS1iYXNlZCBQQ0llIG1vZGVtc1xcXCJcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNTUtICAgICAgICBkZXBlbmRzIG9uIE1ISV9CVVNcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNTYtICAgICAgICBoZWxwXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjU3OiAgICAgICAgICBNSEkgV1dBTiBNQklNIGlzIGEgV1dBTiBuZXR3b3JrIGRyaXZlciBmb3IgUUNPTS1iYXNlZCBQQ0llIG1vZGVtcy5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNTgtICAgICAgICAgIEl0IGltcGxlbWVudHMgTUJJTSBvdmVyIE1ISSwgZm9yIElQIGRhdGEgYWdncmVnYXRpb24gYW5kIG11eGluZy5cXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZz02NT1jb25maWcgUUNPTV9CQU1fRE1VWFxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo2NjpcXHR0cmlzdGF0ZSBcXFwiUXVhbGNvbW0gQkFNLURNVVggV1dBTiBuZXR3b3JrIGRyaXZlclxcXCJcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNjctXFx0ZGVwZW5kcyBvbiAoRE1BX0VOR0lORSBcXHUwMDI2XFx1MDAyNiBQTSBcXHUwMDI2XFx1MDAyNiBRQ09NX1NNRU1fU1RBVEUpIHx8IENPTVBJTEVfVEVTVFxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTcxLVxcdCAgTVNNODkxNiBvciBNU004OTc0LiBUaGUgY29ubmVjdGlvbiBjYW4gYmUgZXN0YWJsaXNoZWQgdmlhIFFNSS9BVCBmcm9tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjcyOlxcdCAgdXNlcnNwYWNlIHdpdGggY29udHJvbCBwb3J0cyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgV1dBTiBzdWJzeXN0ZW1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6NzM6XFx0ICAoQ09ORklHX1JQTVNHX1dXQU5fQ1RSTCkgb3IgUVJUUiBuZXR3b3JrIHNvY2tldHMgKENPTkZJR19RUlRSKS5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzQtXFxuLS1cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctNzctXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjc4OmNvbmZpZyBSUE1TR19XV0FOX0NUUkxcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6Nzk6XFx0dHJpc3RhdGUgXFxcIlJQTVNHIFdXQU4gY29udHJvbCBkcml2ZXJcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTgwLVxcdGRlcGVuZHMgb24gUlBNU0dcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctODEtXFx0aGVscFxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzo4MjpcXHQgIFJQTVNHIFdXQU4gQ1RSTCBhbGxvd3MgbW9kZW1zIGF2YWlsYWJsZSB2aWEgUlBNU0cgY2hhbm5lbHMgdG8gZXhwb3NlXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTgzLVxcdCAgZGlmZmVyZW50IG1vZGVtIHByb3RvY29scy9wb3J0cyB0byB1c2Vyc3BhY2UsIGluY2x1ZGluZyBBVCBhbmQgUU1JLlxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTk2PWNvbmZpZyBJT1NNXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjk3OlxcdHRyaXN0YXRlIFxcXCJJT1NNIERyaXZlciBmb3IgSW50ZWwgTS4yIFdXQU4gRGV2aWNlXFxcIlxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy05OS1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTAwOlxcdHNlbGVjdCBSRUxBWSBpZiBXV0FOX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTAxLVxcdGhlbHBcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTAyOlxcdCAgVGhpcyBkcml2ZXIgZW5hYmxlcyBJbnRlbCBNLjIgV1dBTiBEZXZpY2UgY29tbXVuaWNhdGlvbi5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTAzLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMDQ6XFx0ICBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhvc2UgSW50ZWwgTS4yIFdXQU4gTW9kdWxlcyBhbmQgd2lzaCB0byB1c2UgaXQgaW5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTA1LVxcdCAgTGludXggc2F5IFkvTSBoZXJlLlxcbi0tXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnPTEwOT1jb25maWcgTVRLX1Q3WFhcXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTEwOlxcdHRyaXN0YXRlIFxcXCJNZWRpYVRlayBQQ0llIDVHIFdXQU4gbW9kZW0gVDd4eCBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExMS1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMTI6XFx0c2VsZWN0IFJFTEFZIGlmIFdXQU5fREVCVUdGU1xcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMTMtXFx0aGVscFxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZzoxMTQ6XFx0ICBFbmFibGVzIE1lZGlhVGVrIFBDSWUgYmFzZWQgNUcgV1dBTiBtb2RlbSAoVDd4eCBzZXJpZXMpIGRldmljZS5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWc6MTE1OlxcdCAgQWRhcHRzIFdXQU4gZnJhbWV3b3JrIGFuZCBwcm92aWRlcyBuZXR3b3JrIGludGVyZmFjZSBsaWtlIHd3YW4wXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnLTExNi1cXHQgIGFuZCB0dHkgaW50ZXJmYWNlcyBsaWtlIHd3YW4wYXQwIChBVCBwcm90b2NvbCksIHd3YW4wbWJpbTBcXG4tLVxcbmRyaXZlcnMvbmV0L3d3YW4vS2NvbmZpZy0xMjMtXFxuZHJpdmVycy9uZXQvd3dhbi9LY29uZmlnOjEyNDplbmRpZiAjIFdXQU5cXG5kcml2ZXJzL25ldC93d2FuL0tjb25maWctMTI1LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQwNjo1NjowNi43NzU2NDMzMDJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgzMTU0ODgzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgSU9TTSBXV0FOIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2UndmUgZ290IGEgcGF0Y2ggdGFyZ2V0aW5nIHRoZSBgZHJpdmVycy9uZXQvd3dhbi9pb3NtL2lvc21faXBjX211eF9jb2RlYy5jYCBmaWxlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGluIGBtdXhfZGxfcHJvY2Vzc19kZ2AgYW5kIGBtdXhfZGxfYWRiX2RlY29kZWAg4oCTIHRob3NlIGFyZSBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbnMgdG8gZm9jdXMgb24uIFRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZywgd2hpY2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBkZXNpZ25lZCB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIHBvdGVudGlhbCBpbmZpbml0ZSBsb29wcyBkdXJpbmcgZG93bmxpbmsgZGF0YWdyYW0gcHJvY2Vzc2luZy4gR29vZCBjYXRjaCBieSBzeXpib3QhIFRoYXQgdGVsbHMgdXMgdGhlIGNvZGUgcGF0aCAqaXMqIHJlYWNoYWJsZSwgYW5kIHRoYXQncyBjcml0aWNhbC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgd2UgbmVlZCB0byBmb2N1cyBvbiBhbnkgb3RoZXIgZnVuY3Rpb25zLiBMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBJIHNlZSB0aGF0IGBpcGNfbXV4X2RsX2RlY29kZWAgY2FsbHMgYG11eF9kbF9hZGJfZGVjb2RlYCwgYW5kIGBtdXhfZGxfYWRiX2RlY29kZWAgaW4gdHVybiBjYWxscyBgbXV4X2RsX3Byb2Nlc3NfZGdgLiAgU28sIGZvY3VzaW5nIG9uIGBtdXhfZGxfYWRiX2RlY29kZWAgYW5kIGBtdXhfZGxfcHJvY2Vzc19kZ2AgY292ZXJzIHRoZSByZWxldmFudCBjYWxsIHBhdGguXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGNvbmZpZ3Mgd2UgbmVlZCB0byBlbmFibGUuIEl0J3MgYFdXQU5gIGFuZCBgSU9TTWAuIEkgYnJpZWZseSBsb29rZWQgYXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29uZmlybWVkIHRoYXQgYFBDSWAgaXMgYSBkZXBlbmRlbmN5IGZvciBgSU9TTWAsIGJ1dCB0aGF0J3MgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBnZW5lcmljIGNvbmZpZ3MuIEFsc28sIGBORVRfREVWTElOS2AgaXMgc2VsZWN0ZWQgYnkgYElPU01gLiBTbywgYFdXQU5gIGFuZCBgSU9TTWAgYXJlIHN1ZmZpY2llbnQgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocy5cblxuRXNzZW50aWFsbHksIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSBzeXpib3QtcmVwb3J0ZWQgYnVnIHdoZXJlIGJvdW5kcyBjaGVja3Mgd2VyZSBtaXNzaW5nIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyLCBsZWFkaW5nIHRvIHBvdGVudGlhbCBvdXQtb2YtYm91bmRzIHJlYWRzIG9yIGluZmluaXRlIGxvb3BzIHdoZW4gaGFuZGxpbmcgZG93bmxpbmsgZGF0YS4gSXQncyBhIGZ1bmN0aW9uYWwgZml4LCBhbmQgc2luY2UgdGhlIGNvZGUgaXMgcmVhY2hhYmxlLCBpdCBkZWZpbml0ZWx5IG5lZWRzIGZ1enppbmcgdG8gdmFsaWRhdGUgdGhhdCB0aGUgbmV3IGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIHRvIGVuc3VyZSBubyBvdGhlciBwYXJzaW5nIHZ1bG5lcmFiaWxpdGllcyByZW1haW4uXG5cblNvLCBsZXQgbWUgc3VtbWFyaXplIGZvciB0aGUgYHNldC1yZXN1bHRzYCB0b29sOlxuXG4qICAgKipGb2N1cyBTeW1ib2xzOioqIGBtdXhfZGxfcHJvY2Vzc19kZ2AsIGBtdXhfZGxfYWRiX2RlY29kZWBcbiogICAqKkVuYWJsZSBDb25maWdzOioqIGBXV0FOYCwgYElPU01gXG5cbkhhbmcgb24sIGxldCBtZSBjaGVjayBpZiB0aG9zZSBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LiBBaCwgbmVpdGhlciBgV1dBTmAgbm9yIGBJT1NNYCBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LCB0aGV5J3JlIGJvdGggdHJpc3RhdGUgb3B0aW9ucy4gVGhhdCBtZWFucyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGJvdGguIE5vdywgSSdtIHJlYWR5IHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg3OSwiT3V0cHV0VG9rZW5zIjoxNTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMDY6NTY6MTYuNjA3MTk0OTQ1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MDIzODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJXV0FOXCIsXG4gICAgXCJJT1NNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibXV4X2RsX3Byb2Nlc3NfZGdcIixcbiAgICBcIm11eF9kbF9hZGJfZGVjb2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBib3VuZHMgY2hlY2tpbmcgdG8gYG11eF9kbF9wcm9jZXNzX2RnYCBhbmQgYG11eF9kbF9hZGJfZGVjb2RlYCBpbiB0aGUgSW50ZWwgSU9TTSBXV0FOIGRyaXZlciB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgcmVhZHMgYW5kIGluZmluaXRlIGxvb3BzIHdoZW4gcHJvY2Vzc2luZyBkb3dubGluayBkYXRhZ3JhbXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmaXhpbmcgYSBidWcgZm91bmQgYnkgc3l6a2FsbGVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBib3VuZHMgY2hlY2tzIGFyZSBjb3JyZWN0IGFuZCBubyBvdGhlciB2dWxuZXJhYmlsaXRpZXMgZXhpc3QgaW4gdGhpcyBwYXJzaW5nIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIldXQU5cIixcbiAgICBcIklPU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtdXhfZGxfcHJvY2Vzc19kZ1wiLFxuICAgIFwibXV4X2RsX2FkYl9kZWNvZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGJvdW5kcyBjaGVja2luZyB0byBgbXV4X2RsX3Byb2Nlc3NfZGdgIGFuZCBgbXV4X2RsX2FkYl9kZWNvZGVgIGluIHRoZSBJbnRlbCBJT1NNIFdXQU4gZHJpdmVyIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyByZWFkcyBhbmQgaW5maW5pdGUgbG9vcHMgd2hlbiBwcm9jZXNzaW5nIGRvd25saW5rIGRhdGFncmFtcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGZpeGluZyBhIGJ1ZyBmb3VuZCBieSBzeXprYWxsZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIGJvdW5kcyBjaGVja3MgYXJlIGNvcnJlY3QgYW5kIG5vIG90aGVyIHZ1bG5lcmFiaWxpdGllcyBleGlzdCBpbiB0aGlzIHBhcnNpbmcgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxrbt[1] Phase: Succeeded StartedAt: 2026-06-25 06:56:28 +0000 UTC FinishedAt: 2026-06-25 06:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 06:56:28 +0000 UTC FinishedAt: 2026-06-25 06:56:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2] Phase: Succeeded StartedAt: 2026-06-25 06:56:28 +0000 UTC FinishedAt: 2026-06-25 08:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-25 06:56:28 +0000 UTC FinishedAt: 2026-06-25 08:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-25 06:56:28 +0000 UTC FinishedAt: 2026-06-25 06:56:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-25 06:56:28 +0000 UTC FinishedAt: 2026-06-25 06:56:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqxrbt/series-workflowqxrbt-convert-artifact-2066960635/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-25 06:56:39 +0000 UTC FinishedAt: 2026-06-25 07:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-25 06:56:39 +0000 UTC FinishedAt: 2026-06-25 07:32:45 +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:*03f51a92-cc8d-408e-9342-6015d74c2381,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-workflowqxrbt/series-workflowqxrbt-convert-artifact-2066960635/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": "97013660-4199-42d4-ab45-df55a4183852", "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-workflowqxrbt/series-workflowqxrbt-build-action-2402680889/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-25 06:56:39 +0000 UTC FinishedAt: 2026-06-25 07:31:39 +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:*03f51a92-cc8d-408e-9342-6015d74c2381,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-workflowqxrbt/series-workflowqxrbt-convert-artifact-2066960635/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": "97013660-4199-42d4-ab45-df55a4183852", "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-workflowqxrbt/series-workflowqxrbt-build-action-2402680889/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-25 07:32:45 +0000 UTC FinishedAt: 2026-06-25 07:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-25 07:32:45 +0000 UTC FinishedAt: 2026-06-25 07:32:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-25 07:32:45 +0000 UTC FinishedAt: 2026-06-25 07:33:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-25 07:32:45 +0000 UTC FinishedAt: 2026-06-25 07:33:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowqxrbt/series-workflowqxrbt-convert-artifact-88661330/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-25 07:33:19 +0000 UTC FinishedAt: 2026-06-25 07:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-25 07:33:19 +0000 UTC FinishedAt: 2026-06-25 07:35:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*97013660-4199-42d4-ab45-df55a4183852,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-workflowqxrbt/series-workflowqxrbt-build-action-2402680889/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-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-25 07:35:15 +0000 UTC FinishedAt: 2026-06-25 07:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-25 07:35:15 +0000 UTC FinishedAt: 2026-06-25 07:35:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-25 07:35:15 +0000 UTC FinishedAt: 2026-06-25 07:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-25 07:35:15 +0000 UTC FinishedAt: 2026-06-25 07:57:52 +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:*03f51a92-cc8d-408e-9342-6015d74c2381,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-workflowqxrbt/series-workflowqxrbt-convert-artifact-88661330/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": "48518d67-0b25-4b3d-a391-0533f313b1af", "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-workflowqxrbt/series-workflowqxrbt-build-action-1235704806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-25 07:35:15 +0000 UTC FinishedAt: 2026-06-25 07:57:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*03f51a92-cc8d-408e-9342-6015d74c2381,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-workflowqxrbt/series-workflowqxrbt-convert-artifact-88661330/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": "48518d67-0b25-4b3d-a391-0533f313b1af", "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-workflowqxrbt/series-workflowqxrbt-build-action-1235704806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-25 07:57:52 +0000 UTC FinishedAt: 2026-06-25 07:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-25 07:57:52 +0000 UTC FinishedAt: 2026-06-25 07:57:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-25 07:57:52 +0000 UTC FinishedAt: 2026-06-25 07:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-25 07:57:52 +0000 UTC FinishedAt: 2026-06-25 07:59:45 +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:*48518d67-0b25-4b3d-a391-0533f313b1af,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-workflowqxrbt/series-workflowqxrbt-build-action-1235704806/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-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-25 07:59:50 +0000 UTC FinishedAt: 2026-06-25 08:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-25 07:59:50 +0000 UTC FinishedAt: 2026-06-25 08:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"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:*97013660-4199-42d4-ab45-df55a4183852,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*48518d67-0b25-4b3d-a391-0533f313b1af,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-workflowqxrbt/series-workflowqxrbt-build-action-2402680889/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-workflowqxrbt/series-workflowqxrbt-build-action-1235704806/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-25 07:59:50 +0000 UTC FinishedAt: 2026-06-25 08:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-25 07:59:50 +0000 UTC FinishedAt: 2026-06-25 07:59:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"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-workflowqxrbt/series-workflowqxrbt-convert-artifact-3184167335/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-25 07:59:50 +0000 UTC FinishedAt: 2026-06-25 07:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-25 07:59:50 +0000 UTC FinishedAt: 2026-06-25 07:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-25 07:59:50 +0000 UTC FinishedAt: 2026-06-25 07:59:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-25 08:00:07 +0000 UTC FinishedAt: 2026-06-25 08:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowqxrbt[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mux_dl_process_dg","mux_dl_adb_decode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d87363b0edfc7504ff2b144fe4cdd8154f90f42e","config_name":"upstream-apparmor-kasan.config","enable_configs":["WWAN","IOSM"],"series_id":"68ef2c66-5edd-497b-a838-87d77f3441d9","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-25 08:00:07 +0000 UTC FinishedAt: 2026-06-25 08:47:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*97013660-4199-42d4-ab45-df55a4183852,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*48518d67-0b25-4b3d-a391-0533f313b1af,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-workflowqxrbt/series-workflowqxrbt-build-action-2402680889/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-workflowqxrbt/series-workflowqxrbt-build-action-1235704806/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-workflowqxrbt/series-workflowqxrbt-convert-artifact-3184167335/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,}