Name: series-workflowrs769 Phase: Succeeded StartedAt: 2026-09-13 13:19:13 +0000 UTC FinishedAt: 2026-09-13 17:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[0] Phase: Succeeded StartedAt: 2026-09-13 13:19:13 +0000 UTC FinishedAt: 2026-09-13 13:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 13:19:13 +0000 UTC FinishedAt: 2026-09-13 13:37:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "a7f0e97e-47cd-48bc-b9d2-9477bdf81e47" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "compute_gap", "tlb_get_least_loaded_slave", "bond_alb_xmit", "bond_tlb_xmit", "bond_xmit_alb_slave_get", "bond_xmit_tlb_slave_get" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbXB1dGVfZ2FwJiMzNDssCiAgICAmIzM0O3RsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgKHM2NCkgcHJpb3IgdG8gYml0LXNoaWZ0aW5nLCBwcmV2ZW50aW5nIDMyLWJpdCBhcml0aG1ldGljIG92ZXJmbG93IGZvciBoaWdoIGxpbmsgc3BlZWRzIChlLmcuLCBcdTAwM2U9IDRHYnBzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXHUwMDNlc3BlZWQgYW5kIGxvYWQgdG8gNjQtYml0IHNpZ25lZCBpbnRlZ2VycyBwcmlvciB0byB0aGUgYml0IHNoaWZ0IG9wZXJhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRjM2M5Y2I5YTRmZDkyMjQxMDg1NDU2OTZmYjg2MWY1NWVlNWZjYzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMzozNjowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDQzYWM4ZTI4ZTQxODIuLmI1MjAwNDAzMGE0YjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTE2MCw4ICYjNDM7MTYwLDggQEAgc3RhdGljIHZvaWQgdGxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcbiBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4ge1xuLVx0cmV0dXJuIChzNjQpIChzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbi1cdCAgICAgICAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXG4mIzQzO1x0cmV0dXJuICgoczY0KXNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xuJiM0MztcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29tcHV0ZV9nYXAmIzM0OywKICAgICYjMzQ7dGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3RsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCAzMi1iaXQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBhZGFwdGl2ZSBsb2FkIGJhbGFuY2luZyAoQUxCKSBhbmQgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgKFRMQikgbW9kZSBwYWNrZXQgdHJhbnNtaXQgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyAoc3VjaCBhcyB2ZXRoIG9yIGR1bW15IGRldmljZXMpIGJvbmRlZCBpbiBBTEIvVExCIG1vZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTM6MzY6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggNDNhYzhlMjhlNDE4Mi4uYjUyMDA0MDMwYTRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtMTYwLDggJiM0MzsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCiBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpCiB7Ci0JcmV0dXJuIChzNjQpIChzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KLQkgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiYjNDM7CXJldHVybiAoKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KJiM0MzsJICAgICAgICgoczY0KVNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUxCIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gTGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBkaWZmIHNob3dzIGEgbWlub3IgY2hhbmdlIGluIHRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGp1c3QgYWRkZWQgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBzZWNvbmQgdGVybSBpbiB0aGUgc3VidHJhY3Rpb246IGAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCAmbHQ7Jmx0OyAzKWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvZGUgcmVhZGFiaWxpdHkgaW1wcm92ZW1lbnQsIGVuc3VyaW5nIHRoZSBiaXQgc2hpZnQgaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY29udmVyc2lvbiB0byBhIHNpZ25lZCA2NC1iaXQgaW50ZWdlciwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgcHJlY2VkZW5jZSBpc3N1ZXMuIFRoaXMgY291bGQgYmUgYSBmaXggZm9yIHNvbWUgZWRnZSBjYXNlLCBvciBqdXN0IGEgZ2VuZXJhbCBjb2RlLXN0eWxlIGltcHJvdmVtZW50LgoKTm93LCBsZXQmIzM5O3MgZ2V0IHNvbWUgY29udGV4dCBhcm91bmQgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGBjb21wdXRlX2dhcGAgaW4gdGhhdCBmaWxlIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBkbywgYW5kIEkgd2lsbCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgdG8gY29uZmlybSB3aGV0aGVyIHRoZXJlIGhhdmUgYmVlbiBhbnkgcmVsZXZhbnQgY29uZmlnIGNoYW5nZXMuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgcHVycG9zZSBhbmQgaW1wYWN0IG9mIHRoaXMgc21hbGwgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHR7XG4gMTUxOlx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuIDE1MjpcdFxuIDE1MzpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbiAxNTQ6XHRcbiAxNTU6XHRcdGtmcmVlKGJvbmRfaW5mby1cdTAwM2V0eF9oYXNodGJsKTtcbiAxNTY6XHRcdGJvbmRfaW5mby1cdTAwM2V0eF9oYXNodGJsID0gTlVMTDtcbiAxNTc6XHRcbiAxNTg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbiAxNTk6XHR9XG4gMTYwOlx0XG4gMTYxOlx0c3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuIDE2MjpcdHtcbiAxNjM6XHRcdHJldHVybiAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbiAxNjQ6XHRcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gMTY4Olx0e1xuIDE2OTpcdFx0c3RydWN0IHNsYXZlICpzbGF2ZSwgKmxlYXN0X2xvYWRlZDtcbiAxNzA6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4gMTcxOlx0XHRsb25nIGxvbmcgbWF4X2dhcDtcbiAxNzI6XHRcbiAxNzM6XHRcdGxlYXN0X2xvYWRlZCA9IE5VTEw7XG4gMTc0Olx0XHRtYXhfZ2FwID0gTExPTkdfTUlOO1xuIDE3NTpcdFxuIDE3NjpcdFx0LyogRmluZCB0aGUgc2xhdmUgd2l0aCB0aGUgbGFyZ2VzdCBnYXAgKi9cbiAxNzc6XHRcdGJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7XG4gMTc4Olx0XHRcdGlmIChib25kX3NsYXZlX2Nhbl90eChzbGF2ZSkpIHtcbiAxNzk6XHRcdFx0XHRsb25nIGxvbmcgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xuIDE4MDpcdFxuIDE4MTpcdFx0XHRcdGlmIChtYXhfZ2FwIFx1MDAzYyBnYXApIHtcbiAxODI6XHRcdFx0XHRcdGxlYXN0X2xvYWRlZCA9IHNsYXZlO1xuIDE4MzpcdFx0XHRcdFx0bWF4X2dhcCA9IGdhcDtcbiAxODQ6XHRcdFx0XHR9XG4gMTg1Olx0XHRcdH1cbiAxODY6XHRcdH1cbiAxODc6XHRcbiAxODg6XHRcdHJldHVybiBsZWFzdF9sb2FkZWQ7XG4gMTg5Olx0fVxuIDE5MDpcdFxuIDE5MTpcdHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKl9fdGxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBib25kaW5nICpib25kLCB1MzIgaGFzaF9pbmRleCxcbiAxOTI6XHRcdFx0XHRcdFx0XHR1MzIgc2tiX2xlbilcbiAxOTM6XHR7XG4gMTk0Olx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuIDE5NTpcdFx0c3RydWN0IHRsYl9jbGllbnRfaW5mbyAqaGFzaF90YWJsZTtcbiAxOTY6XHRcdHN0cnVjdCBzbGF2ZSAqYXNzaWduZWRfc2xhdmU7XG4gMTk3Olx0XG4gMTk4Olx0XHRoYXNoX3RhYmxlID0gYm9uZF9pbmZvLVx1MDAzZXR4X2hhc2h0Ymw7XG4gMTk5Olx0XHRhc3NpZ25lZF9zbGF2ZSA9IGhhc2hfdGFibGVbaGFzaF9pbmRleF0udHhfc2xhdmU7XG4gMjAwOlx0XHRpZiAoIWFzc2lnbmVkX3NsYXZlKSB7XG4gMjAxOlx0XHRcdGFzc2lnbmVkX3NsYXZlID0gdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoYm9uZCk7XG4gMjAyOlx0XG4gMjAzOlx0XHRcdGlmIChhc3NpZ25lZF9zbGF2ZSkge1xuIDIwNDpcdFx0XHRcdHN0cnVjdCB0bGJfc2xhdmVfaW5mbyAqc2xhdmVfaW5mbyA9XG4gMjA1Olx0XHRcdFx0XHRcdTAwMjYoU0xBVkVfVExCX0lORk8oYXNzaWduZWRfc2xhdmUpKTtcbiAyMDY6XHRcdFx0XHR1MzIgbmV4dF9pbmRleCA9IHNsYXZlX2luZm8tXHUwMDNlaGVhZDtcbiAyMDc6XHRcbiAyMDg6XHRcdFx0XHRoYXNoX3RhYmxlW2hhc2hfaW5kZXhdLnR4X3NsYXZlID0gYXNzaWduZWRfc2xhdmU7XG4gMjA5Olx0XHRcdFx0aGFzaF90YWJsZVtoYXNoX2luZGV4XS5uZXh0ID0gbmV4dF9pbmRleDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBEYXRhIFR5cGVzIGFuZCBTdHJ1Y3R1cmUqKgoKSG1tLCBmaXJzdCB0aGluZ3MgZmlyc3Q6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBkYXRhIHR5cGVzIGhlcmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNsYXZlLSZndDtzcGVlZGAgYW5kIGBTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZGAuIFdoYXQgYXJlIHRoZWlyIHR5cGVzPyBBcmUgdGhleSBpbnRlZ2VycywgZmxvYXRzLCBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBUaGUgbmF0dXJlIG9mIHRob3NlIHR5cGVzIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGludGVycHJldCB0aGUgY29kZSBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGNhbGN1bGF0aW9uLCBvciBhIGJvb2xlYW4gdGVzdCwgZm9yIGluc3RhbmNlLiAKClRvIGNsYXJpZnksIEkgbmVlZCB0byBsb29rIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzbGF2ZWAsIHRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIHJlbGV2YW50IHR5cGUgaW5mb3JtYXRpb24gZm9yIHRoZXNlIG1lbWJlcnMuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBxdWljayBzZWFyY2ggeWllbGRzIHdoYXQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyIHNwZWVkOyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gVGhhdCBgc3RydWN0IHNsYXZlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGF0IGBzdHJ1Y3Qgc2xhdmVgIGRlZmluaXRpb24uIE5vdywgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBhbmQgdGhlIHNwZWNpZmljIHN1YnN5c3RlbSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCB0aGlzIGNvdWxkIGJlIGxvY2F0ZWQgaW4gYSBmZXcgZGlmZmVyZW50IHBsYWNlcy4gSW1tZWRpYXRlbHksIG15IG1pbmQgaXMgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgY2FuZGlkYXRlczogdGhlIGNvcmUgZHJpdmVyIG1vZGVsIGhlYWRlcnMgKGBpbmNsdWRlL2xpbnV4L2RldmljZS5oYCwgYGluY2x1ZGUvbGludXgvZHJpdmVyLmhgLCBldGMuKSwgcGVyaGFwcyBzb21lIHNwZWNpZmljIGJ1cyBvciBzdWJzeXN0ZW0gaGVhZGVycyAoZS5nLiwgSTJDLCBTUEksIFNDU0kpLCBvciBtYXliZSBldmVuIGEgY3VzdG9tIGhlYWRlciByZWxhdGVkIHRvIGEgcGFydGljdWxhciB2ZW5kb3ImIzM5O3MgZHJpdmVyIGlmIGl0JiMzOTtzIGEgbW9yZSBzcGVjaWFsaXplZCBwaWVjZSBvZiBoYXJkd2FyZS4gSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB0byBuYXJyb3cgZG93biB0aGUgc2VhcmNoLgoKRmlyc3Qgc3RlcCB3aWxsIGJlIHRvIHVzZSBgZ3JlcGAsIGFuZCBJJiMzOTtsbCBsaWtlbHkgc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaCBhY3Jvc3MgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBrZXJuZWwgc291cmNlIG9yIHJlbGV2YW50IG1vZHVsZSBzb3VyY2UuIElmIEkmIzM5O20gd29ya2luZyB3aXRoIGEgc3BlY2lmaWMgZHJpdmVyLCBJJiMzOTtsbCByZXN0cmljdCB0aGUgc2VhcmNoIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSAqbm90KiBnb2luZyB0byBiZSBhIHNpbXBsZSwgb2J2aW91cyBkZWZpbml0aW9uLCBidXQgbGlrZWx5IGxpbmtlZCB0byBzb21lIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbi4KClRoZW4sIG9uY2UgSSBsb2NhdGUgdGhlIGRlZmluaXRpb24sIEkmIzM5O2xsIHdhbnQgdG8gcXVpY2tseSBwYXJzZSBpdHMgY29udGVudHMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtYmVycywgd2hpY2ggZmllbGRzIGFyZSBjcml0aWNhbCBmb3IgbXkgY3VycmVudCB0YXNrLCBhbmQgaG93IHRoaXMgYHN0cnVjdCBzbGF2ZWAgcmVsYXRlcyB0byBvdGhlciBzdHJ1Y3R1cmVzIGFuZCBjb25jZXB0cyBpbiB0aGUgc3lzdGVtLiBUaGUgZ29hbCBpc24mIzM5O3QganVzdCB0byAqZmluZCogdGhlIGRlZmluaXRpb24gYnV0IHRvICp1bmRlcnN0YW5kKiBpdHMgcm9sZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGl0cyByZWxldmFuY2UgaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSW4gc2hvcnQsIGl0JiMzOTtzIGFib3V0IGNvbm5lY3RpbmcgdGhlIGRvdHMgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc2xhdmUgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYm9uZGluZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRpbmcuaD0xMTc9c3RydWN0IGJvbmRfcGFyYW1zIHtcbi0tXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTU2LVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjE1NzpzdHJ1Y3Qgc2xhdmUge1xuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE1OC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGJvbmRpbmcuaGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYm9uZGluZyBzZXR1cCBiZXR0ZXIsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9uZXQvYm9uZGluZy5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTU3LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCYjMzk7cyBvZnRlbiB3aGVyZSBzb21lIGNvcmUgc3RydWN0dXJlcyBvciBpbXBvcnRhbnQgZGVmaW5pdGlvbnMgYXJlIGxvY2F0ZWQsIHRoZSBncm91bmR3b3JrIGZvciB0aGUgbW9yZSBjb21wbGV4IGZ1bmN0aW9ucy4gSG9wZWZ1bGx5LCBsaW5lIDE1NyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBlbnRyeSBwb2ludCBpbnRvIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGNvZGUgYW5kIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYmVoYXZpb3IgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3RydWN0cyBkZWZpbmVkIGFyb3VuZCB0aGF0IGFyZWEsIHdoaWNoIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgYSBoaWdoLWxldmVsIHNlbnNlIG9mIGhvdyBib25kaW5nIGlzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRpbmcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU3Olx0c3RydWN0IHNsYXZlIHtcbiAxNTg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqL1xuIDE1OTpcdFx0c3RydWN0IGJvbmRpbmcgKmJvbmQ7IC8qIG91ciBtYXN0ZXIgKi9cbiAxNjA6XHRcdGludCAgICBkZWxheTtcbiAxNjE6XHRcdC8qIGFsbCA0IGluIGppZmZpZXMgKi9cbiAxNjI6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9saW5rX3VwO1xuIDE2MzpcdFx0dW5zaWduZWQgbG9uZyBsYXN0X3R4O1xuIDE2NDpcdFx0dW5zaWduZWQgbG9uZyBsYXN0X3J4O1xuIDE2NTpcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfbGFzdF9hcnBfcnhbQk9ORF9NQVhfQVJQX1RBUkdFVFNdO1xuIDE2NjpcdFx0czggICAgIGxpbms7XHRcdC8qIG9uZSBvZiBCT05EX0xJTktfWFhYWCAqL1xuIDE2NzpcdFx0czggICAgIGxpbmtfbmV3X3N0YXRlO1x0Lyogb25lIG9mIEJPTkRfTElOS19YWFhYICovXG4gMTY4Olx0XHR1OCAgICAgYmFja3VwOjEsICAgLyogaW5kaWNhdGVzIGJhY2t1cCBzbGF2ZS4gVmFsdWUgY29ycmVzcG9uZHMgd2l0aFxuIDE2OTpcdFx0XHRcdCAgICAgIEJPTkRfU1RBVEVfQUNUSVZFIGFuZCBCT05EX1NUQVRFX0JBQ0tVUCAqL1xuIDE3MDpcdFx0ICAgICAgIGluYWN0aXZlOjEsIC8qIGluZGljYXRlcyBpbmFjdGl2ZSBzbGF2ZSAqL1xuIDE3MTpcdFx0ICAgICAgIHJ4X2Rpc2FibGVkOjEsIC8qIGluZGljYXRlcyB3aGV0aGVyIHNsYXZlJiMzOTtzIFJ4IGlzIGRpc2FibGVkICovXG4gMTcyOlx0XHQgICAgICAgc2hvdWxkX25vdGlmeToxLCAvKiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RhdGUgY2hhbmdlZCAqL1xuIDE3MzpcdFx0ICAgICAgIHNob3VsZF9ub3RpZnlfbGluazoxOyAvKiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbGluayBjaGFuZ2VkICovXG4gMTc0Olx0XHR1OCAgICAgZHVwbGV4O1xuIDE3NTpcdFx0dTMyICAgIG9yaWdpbmFsX210dTtcbiAxNzY6XHRcdHUzMiAgICBsaW5rX2ZhaWx1cmVfY291bnQ7XG4gMTc3Olx0XHR1MzIgICAgc3BlZWQ7XG4gMTc4Olx0XHR1MTYgICAgcXVldWVfaWQ7XG4gMTc5Olx0XHR1OCAgICAgcGVybV9od2FkZHJbTUFYX0FERFJfTEVOXTtcbiAxODA6XHRcdGludCAgICBwcmlvO1xuIDE4MTpcdFx0c3RydWN0IGFkX3NsYXZlX2luZm8gKmFkX2luZm87XG4gMTgyOlx0XHRzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gdGxiX2luZm87XG4gMTgzOlx0I2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG4gMTg0Olx0XHRzdHJ1Y3QgbmV0cG9sbCAqbnA7XG4gMTg1Olx0I2VuZGlmXG4gMTg2Olx0XHRzdHJ1Y3QgZGVsYXllZF93b3JrIG5vdGlmeV93b3JrO1xuIDE4NzpcdFx0c3RydWN0IGtvYmplY3Qga29iajtcbiAxODg6XHRcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCBzbGF2ZV9zdGF0cztcbiAxODk6XHR9O1xuIDE5MDpcdFxuIDE5MTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYXZlICp0b19zbGF2ZShzdHJ1Y3Qga29iamVjdCAqa29iailcbiAxOTI6XHR7XG4gMTkzOlx0XHRyZXR1cm4gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBzbGF2ZSwga29iaik7XG4gMTk0Olx0fVxuIDE5NTpcdFxuIDE5NjpcdHN0cnVjdCBib25kX3VwX3NsYXZlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBZGRyZXNzaW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIFNwZWVkIENhbGN1bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzbGF2ZS0mZ3Q7c3BlZWRgIHZhcmlhYmxlLCB3aGljaCBpcyBkZWZpbmVkIGFzIGEgYHUzMmAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3cgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGxhcmdlIHNwZWVkcy4gU3BlY2lmaWNhbGx5LCB0aGUgbGluZSBgc2xhdmUtJmd0O3NwZWVkICZsdDsmbHQ7IDIwYCBoYXMgbWUgd29ycmllZC4gSWYgYHNsYXZlLSZndDtzcGVlZGAgaXMsIHNheSwgNDA5NiBvciBncmVhdGVyLCB0aGF0IGxlZnQtc2hpZnQgYnkgMjAgYml0cyBpcyBnb2luZyB0byBibG93IHJpZ2h0IHBhc3QgdGhlIDMyLWJpdCBsaW1pdC4gSSBtZWFuLCB0aGluayBhYm91dCBpdCDigJMgNDA5NiAmbHQ7Jmx0OyAyMCByZXN1bHRzIGluIDB4MTAwMDAwMDAwLCB3aGljaCBpcyBkZWZpbml0ZWx5IG91dHNpZGUgdGhlIGJvdW5kcyBvZiBhIDMyLWJpdCBpbnRlZ2VyLiBBIGRhdGEgcmF0ZSBvZiA0MCBHYnBzLCBvciBldmVuIDQgR2Jwcywgd291bGQgZWFzaWx5IG92ZXJmbG93IHRoaXMgc2hpZnQuCgpJbml0aWFsbHksIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2FzdCB0aGUgc2hpZnRlZCByZXN1bHQgdG8gYHM2NGAsIGxpa2UgdGhpczogYChzNjQpKHNsYXZlLSZndDtzcGVlZCAmbHQ7Jmx0OyAyMClgLiBUaGF0JiMzOTtzIG5vIGdvb2QsIGJlY2F1c2UgdGhlIHNoaWZ0IGhhcHBlbmVkICpiZWZvcmUqIHRoZSBjYXN0LiBTbyB0aGUgb3ZlcmZsb3cgaGFwcGVucywgYW5kIHRoZSByZXN1bHQgaXMgZ2FyYmFnZSwgYmVmb3JlIGl0JiMzOTtzIGNvbnZlcnRlZCB0byBhIGBzNjRgLgoKVGhlIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCwgSSBzZWUsIHRvIGAoczY0KXNsYXZlLSZndDtzcGVlZCAmbHQ7Jmx0OyAyMGAuIFRoaXMgaXMgZ29vZCwgdGhlIGNhc3QgaGFwcGVucyBmaXJzdC4gIE5vdyB0aGUgYHNsYXZlLSZndDtzcGVlZGAsIHdoaWNoIGlzIGEgYHUzMmAsIGlzIGNhc3QgdG8gYW4gYHM2NGAuIFNoaWZ0aW5nIGEgYHM2NGAgYnkgMjAgYml0cyBrZWVwcyB0aGUgaW50ZXJtZWRpYXRlIGNhbGN1bGF0aW9ucyB3ZWxsIGluc2lkZSB0aGUgcmVxdWlyZWQgcmFuZ2UuIEkgZmVlbCBtdWNoIGJldHRlciBhYm91dCB0aGlzIG5vdy4KCkFuZCB0aGVyZSYjMzk7cyB0aGlzIGBTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZGAgdmFyaWFibGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHRoZSBzaXplIGhlcmUsIHNvIGxldCBtZSBxdWlja2x5IGNyb3NzLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0IHRsYl9zbGF2ZV9pbmZvYCB0byBtYWtlIGNlcnRhaW4gd2hldGhlciBpdCYjMzk7cyBhIGBsb25nIGxvbmdgLCBhIGB1MzJgLCBvciBhIGBsb25nYC4gSSYjMzk7ZCBwcmVmZXIgYSBgbG9uZyBsb25nYCBmb3IgdGhlIHNhbWUgcmVhc29uIC0gYXZvaWQgYW4gb3ZlcmZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0bGJfc2xhdmVfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xOTE9c3RhdGljIHN0cnVjdCBzbGF2ZSAqX190bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMDMtXHRcdGlmIChhc3NpZ25lZF9zbGF2ZSkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIwNDpcdFx0XHRzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gKnNsYXZlX2luZm8gPVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIwNS1cdFx0XHRcdFx1MDAyNihTTEFWRV9UTEJfSU5GTyhhc3NpZ25lZF9zbGF2ZSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgYHN0cnVjdCB0bGJfc2xhdmVfaW5mb2AgaW4gbmV0L2JvbmRfYWxiLmgqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0bGJfc2xhdmVfaW5mb2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBhbmQgbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGluIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYC4gSSYjMzk7dmUgd29ya2VkIHdpdGggYm9uZGluZyBkcml2ZXJzIGJlZm9yZSwgYW5kIHRoZSBBY3RpdmUtQmFja3VwIChhbGIpIG1vZGUgZGVmaW5pdGVseSByZWxpZXMgb24gdHJhY2tpbmcgc2xhdmUgaW50ZXJmYWNlcyBhbmQgdGhlaXIgcHJvcGVydGllcy4gYHRsYl9zbGF2ZV9pbmZvYCBsaWtlbHkgaG9sZHMgdGhlIHJlbGV2YW50IHN0YXRlIGluZm9ybWF0aW9uIHNwZWNpZmljYWxseSBmb3IgVExCIChUcmFuc21pdCBMb2FkIEJhbGFuY2luZykgbW9kZSwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBJdCBtYWtlcyBzZW5zZSB0aGlzIHdvdWxkIGJlIHBsYWNlZCB3aXRoaW4gYm9uZGluZyBoZWFkZXIgZmlsZXMsIGdpdmVuIHRoZSBzcGVjaWZpYyBmZWF0dXJlc2V0IHByb3ZpZGVkLiBMZXQgbWUgcHVsbCBpdCB1cCBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhlcmUsIGFuZCBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgc3RydWN0IGludGVyYWN0cyB3aXRoIHRoZSBsYXJnZXIgYm9uZGluZyBkcml2ZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGxiX3NsYXZlX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ib25kX2FsYi5oPTk0PXN0cnVjdCBybGJfY2xpZW50X2luZm8ge1xuLS1cbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmgtMTE0LVxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxMTU6c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmgtMTE2LVx0dTMyIGhlYWQ7XHQvKiBJbmRleCB0byB0aGUgaGVhZCBvZiB0aGUgYmktZGlyZWN0aW9uYWwgY2xpZW50c1xuLS1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaD0xNTc9c3RydWN0IHNsYXZlIHtcbi0tXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTgxLVx0c3RydWN0IGFkX3NsYXZlX2luZm8gKmFkX2luZm87XG5pbmNsdWRlL25ldC9ib25kaW5nLmg6MTgyOlx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHRsYl9pbmZvO1xuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE4My0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYm9uZF9hbGIuaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBBY3RpdmUtQmFja3VwIChBTEIpIGJvbmRpbmcgZHJpdmVyJiMzOTtzIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgYGluY2x1ZGUvbmV0L2JvbmRfYWxiLmhgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBhcmVhIGJlY2F1c2UuLi4gd2VsbCwgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0JiMzOTtzIGEgbGlrZWx5IHNwb3QgZm9yIHRoZSBoZWFydCBvZiB0aGUgQUxCIGxvZ2ljLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGludGVyZmFjZSBzZWxlY3Rpb24gb3IgZmFpbG92ZXIuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGFjdGl2ZS1iYWNrdXAgc2VsZWN0aW9uIHByb2Nlc3MuIEhvcGVmdWxseSwgaXTigJlsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGhvdyB0aGUgYWN0aXZlIGludGVyZmFjZSBpcyBkZXRlcm1pbmVkIGFuZCBzd2l0Y2hlZC4gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYm9uZF9hbGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcbiAxMTY6XHRcdHUzMiBoZWFkO1x0LyogSW5kZXggdG8gdGhlIGhlYWQgb2YgdGhlIGJpLWRpcmVjdGlvbmFsIGNsaWVudHNcbiAxMTc6XHRcdFx0XHQgKiBoYXNoIHRhYmxlIGVudHJpZXMgbGlzdC4gVGhlIGVudHJpZXMgaW4gdGhlIGxpc3RcbiAxMTg6XHRcdFx0XHQgKiBhcmUgdGhlIGVudHJpZXMgdGhhdCB3ZXJlIGFzc2lnbmVkIHRvIHVzZSB0aGlzXG4gMTE5Olx0XHRcdFx0ICogc2xhdmUgZm9yIHRyYW5zbWl0LlxuIDEyMDpcdFx0XHRcdCAqL1xuIDEyMTpcdFx0dTMyIGxvYWQ7XHQvKiBFYWNoIHNsYXZlIHN1bXMgdGhlIGxvYWRIaXN0b3J5IG9mIGFsbCBjbGllbnRzXG4gMTIyOlx0XHRcdFx0ICogYXNzaWduZWQgdG8gaXRcbiAxMjM6XHRcdFx0XHQgKi9cbiAxMjQ6XHR9O1xuIDEyNTpcdFxuIDEyNjpcdHN0cnVjdCBhbGJfYm9uZF9pbmZvIHtcbiAxMjc6XHRcdHN0cnVjdCB0bGJfY2xpZW50X2luZm9cdCp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi9cbiAxMjg6XHRcdHUzMlx0XHRcdHVuYmFsYW5jZWRfbG9hZDtcbiAxMjk6XHRcdGF0b21pY190XHRcdHR4X3JlYmFsYW5jZV9jb3VudGVyO1xuIDEzMDpcdFx0aW50XHRcdFx0bHBfY291bnRlcjtcbiAxMzE6XHRcdC8qIC0tLS0tLS0tIHJsYiBwYXJhbWV0ZXJzIC0tLS0tLS0tICovXG4gMTMyOlx0XHRpbnQgcmxiX2VuYWJsZWQ7XG4gMTMzOlx0XHRzdHJ1Y3QgcmxiX2NsaWVudF9pbmZvXHQqcnhfaGFzaHRibDtcdC8qIFJlY2VpdmUgaGFzaCB0YWJsZSAqL1xuIDEzNDpcdFx0dTMyXHRcdFx0cnhfaGFzaHRibF91c2VkX2hlYWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIGEgbWlub3IgY29kZSBhZGp1c3RtZW50IHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYSBjaGFuZ2UgdG8gdGhlIHBhcmVudGhlc2VzIGFyb3VuZCB0aGUgYXJpdGhtZXRpYyBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIGBjb21wdXRlX2dhcGAgZnVuY3Rpb24uIEJvdGggYHNsYXZlLSZndDtzcGVlZGAgYW5kIGBsb2FkYCBhcmUgYHUzMmAsIGFuZCB0aGUgcGF0Y2ggZXNzZW50aWFsbHkgYWRqdXN0cyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBjb252ZXJ0aW5nIHRoZXNlIHZhbHVlcy4KClRoZSBrZXkgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgcmVhY2hhYmlsaXR5LiBDYW4gdGhpcyBjb2RlIGFjdHVhbGx5ICpleGVjdXRlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGlzIGNsZWFyOiByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUsIHdlIGRvbiYjMzk7dCBib3RoZXIgZnV6emluZywgcmVnYXJkbGVzcyBvZiBhc3NlcnRpb25zIG9yIGxvZ2ljLgoKR29vZCBuZXdzOiB0aGUgYm9uZGluZyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ib25kaW5nL2ApIGlzIGluZGVlZCByZWFjaGFibGUuIEl0JiMzOTtzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSBkcml2ZXIsIGFuZCB3ZSBjYW4gY29uZmlndXJlIGl0IHVzaW5nIGBydG5ldGxpbmtgIOKAkyB0aGF0IG1lYW5zIGBpcCBsaW5rIGFkZCAuLi4gdHlwZSBib25kIC4uLmAgYW5kIGFsbCB0aGF0LiBXZSBjYW4gYXR0YWNoIHNsYXZlcyAobGlrZSBgZHVtbXlgLCBgdmV0aGAsIG9yIGB0YXBgKSwgYW5kIHdlIGNhbiB0cmFuc21pdCBwYWNrZXRzLiBTeXprYWxsZXIgY2FuIGVhc2lseSBoYW5kbGUgdGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb24sIHdoaWNoIG1ha2VzIHRoaW5ncyBldmVuIGVhc2llci4gU28sIHJlYWNoYWJpbGl0eSBpcyBjb25maXJtZWQuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBldmFsdWF0aW9uIGNyaXRlcmlhLCBhbmQgc2VlIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZzoKCiogICAqKlJlYWNoYWJpbGl0eToqKiBXZSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgbW9kaWZpZWQgY29kZSAqaXMqIHJlYWNoYWJsZS4gVGhlIGJvbmRpbmcgZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNhdGlzZnlpbmcgdGhlIGZpcnN0IGNyaXRlcmlvbi4KKiAgICoqJiMzNDtObyBGdW5jdGlvbmFsIENoYW5nZSYjMzQ7IG9yIFJlZmFjdG9yaW5nIENsYWltczoqKiBXaGlsZSBpdCBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcsIGxldCYjMzk7cyBub3QgdHJ1c3QgdGhlICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMgYmxpbmRseS4gSXQmIzM5O3MgYSBjYWxjdWxhdGlvbiwgc28gaXQgY291bGQgYWZmZWN0IHBlcmZvcm1hbmNlIChhbHRob3VnaCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBtaW5vcikgb3IgcG90ZW50aWFsbHkgZXZlbiB0aGUgYmVoYXZpb3IgdW5kZXIgZXh0cmVtZSBjaXJjdW1zdGFuY2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGZ1enplZC4KKiAgICoqQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoqKiBXaGlsZSB0aGVyZSBhcmVuJiMzOTt0IGFueSAqbmV3KiBhc3NlcnRpb25zIGFkZGVkIHdpdGggdGhpcyBjaGFuZ2UsIHRoZSBleGlzdGluZyBjb2RlIGNvdWxkIGJlIHRlc3RlZCBpbiBhIGRpZmZlcmVudCB3YXkgZHVlIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSB2YWx1ZSB1c2VkIGZvciBsb2FkIGJhbGFuY2luZy4KKiAgICoqUmVhY2hhYmlsaXR5OioqIHRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBCb25kaW5nIGlzIGEgcmVhY2hhYmxlIGRyaXZlciBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIChydGxpbmspLgoqICAgYGNvbXB1dGVfZ2FwYCBpcyBjYWxsZWQgYnkgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gaW4gQUxCIC8gVExCIG1vZGUKCkdpdmVuIGFsbCB0aGlzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIGEgKipXb3J0aEZ1enppbmc9dHJ1ZSoqIGFzc2Vzc21lbnQuIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIOKAkyBhIGRyaXZlciBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayDigJMgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbiYjMzk7cyByZXN1bHQgaXMgdXNlZCBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJlaGF2aW9yIGNoYW5nZXMgZnJvbSB0aGUgcmUtYXJyYW5nZW1lbnQgb2YgdGhlIGFyaXRobWV0aWMsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBwcm9iYWJseSB3YW50IHRvIGxvb2sgYXQgYWxsIGNhbGxlcnMgb2YgYm90aCBgY29tcHV0ZV9nYXBgIGFuZCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBjb21wbGV0ZWx5LCBidXQgdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpbmRpY2F0ZXMgZnV6emluZyBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNjE9c3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjYtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY3OnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2OC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE5MT1zdGF0aWMgc3RydWN0IHNsYXZlICpfX3RsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIwMC1cdGlmICghYXNzaWduZWRfc2xhdmUpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMDE6XHRcdGFzc2lnbmVkX3NsYXZlID0gdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBgX190bGJfY2hvb3NlX2NoYW5uZWxgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gaXRzIGNhbGwgc2l0ZXMuIEtub3dpbmcgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgbG9naWMgZmxvdyBhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0JiMzOTtzIG9wZXJhdGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAgaXMgYmVpbmcgdXNlZC4gVGhpcyBjb3VsZCBiZSB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIHBvdGVudGlhbGx5IGluIGRldmljZSBkcml2ZXJzLCBvciBldmVuIGluIHVzZXItc3BhY2UgbGlicmFyaWVzIGlmIHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdGhhdCB3YXkuIEdyYWJiaW5nIHRoZSBjYWxsIGdyYXBoIHF1aWNrbHkgc2hvdWxkIHBhaW50IHRoZSBwaWN0dXJlLiBJIG5lZWQgdG8gc2VlIGhvdyBmcmVxdWVudGx5IGl04oCZcyBjYWxsZWQsIHdoYXQgZGF0YSBpcyBwYXNzZWQgdG8gaXQsIGFuZCwgaWRlYWxseSwgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBjb2RlIHBhdGhzIGF0IHRoZSBjYWxsIHNpdGUuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGRlcGVuZGVuY2llcywgb3IgYXJlYXMgdGhhdCBtaWdodCBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uIG9yLCBjb252ZXJzZWx5LCB0aGF0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgYSBzdWJ0bGUgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3RsYl9jaG9vc2VfY2hhbm5lbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNjc9c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5MC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxOTE6c3RhdGljIHN0cnVjdCBzbGF2ZSAqX190bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5Mi1cdFx0XHRcdFx0XHR1MzIgc2tiX2xlbilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MjI3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNi1cdHNwaW5fbG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjM3Olx0dHhfc2xhdmUgPSBfX3RsYl9jaG9vc2VfY2hhbm5lbChib25kLCBoYXNoX2luZGV4LCBza2JfbGVuKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzgtXHRzcGluX3VubG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEFMQiBUcmFuc21pdCBQYXRoKioKCkFscmlnaHQsIHNvIGB0bGJfY2hvb3NlX2NoYW5uZWxgIGlzIGJlaW5nIGludm9rZWQgd2l0aGluIGBib25kX2FsYl94bWl0YC4gVGhhdCYjMzk7cyBpbiB0aGUgYGJvbmRfYWxiLmNgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBhY3RpdmUtYmFja3VwIGxvYWQgYmFsYW5jaW5nIG1vZHVsZS4gVGltZSB0byBkaXZlIGludG8gYGJvbmRfYWxiX3htaXRgIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbm5lbCBzZWxlY3Rpb24gaXMgYmVpbmcgbWFkZSBkdXJpbmcgdHJhbnNtaXQsIHJpZ2h0PyBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBxdWVzdGlvbnMgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQgZGF0YSBpcyBhdmFpbGFibGUgdG8gYGJvbmRfYWxiX3htaXRgIHdoZW4gaXQgY2FsbHMgdGhlIHNlbGVjdGlvbiBmdW5jdGlvbj8gV2hhdCBjcml0ZXJpYSBpcyBgdGxiX2Nob29zZV9jaGFubmVsYCB1c2luZz8gSXMgaXQgbG9va2luZyBhdCBsaW5rIHN0YXRlLCBxdWV1ZSBsZW5ndGgsIG9yIHNvbWUgb3RoZXIgbWV0cmljPyBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIG9yIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBjaGFubmVsIHNlbGVjdGlvbiBwcm9jZXNzPyBUaW1lIHRvIHJldmlldyB0aGUgY29kZSBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RsYl9jaG9vc2VfY2hhbm5lbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNjc9c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5MC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxOTE6c3RhdGljIHN0cnVjdCBzbGF2ZSAqX190bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5Mi1cdFx0XHRcdFx0XHR1MzIgc2tiX2xlbilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjI2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIyNzpzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIyOC1cdFx0XHRcdFx0dTMyIHNrYl9sZW4pXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cdC8qIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlx0ICogdGxiX2Nob29zZV9jaGFubmVsKCkgaXMgb25seSBjYWxsZWQgYnkgYm9uZF9hbGJfeG1pdCgpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM2LVx0c3Bpbl9sb2NrKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMzc6XHR0eF9zbGF2ZSA9IF9fdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsIGhhc2hfaW5kZXgsIHNrYl9sZW4pO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzOC1cdHNwaW5fdW5sb2NrKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3OD1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzk2LVx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzOTc6XHRcdFx0XHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzOTgtXHRcdFx0XHRcdFx0XHQgICAgICBoYXNoX2luZGV4IFx1MDAyNiAweEZGLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDI1PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MDgtXHRcdFx0aGFzaF9pbmRleCA9IF9zaW1wbGVfaGFzaChoYXNoX3N0YXJ0LCBoYXNoX3NpemUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MDk6XHRcdFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCwgaGFzaF9pbmRleCwgc2tiLVx1MDAzZWxlbik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUxMC1cdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVhY2hpbmcgVmlydHVhbGl6ZWQgTmlydmFuYSoqCgpSaWdodCwgdGhpcyBsb29rcyBlbnRpcmVseSBhY2hpZXZhYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgbGFuZHNjYXBlLiBXZSBjYW4gYWJzb2x1dGVseSBjb25maWd1cmUgYm9uZGluZyBkZXZpY2VzIGFuZCByb3V0ZSBwYWNrZXRzIHRocm91Z2ggdGhlbS4gTm90aGluZyBncm91bmRicmVha2luZyBoZXJlLiBOb3csIHRoZSBrZXkgaXMgdG8gZW5zdXJlIHRoZSBib25kaW5nIGRyaXZlciBpcyBwcm9wZXJseSBjb21waWxlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIEtjb25maWcgYW5kIGNvbmZpcm0gaXQmIzM5O3MgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBiZSBjZXJ0YWluLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZhdWx0IG9wdGlvbnMsIGJ1dCBJIHRoaW5rIHRoYXQgaXMgdGhlIHJpZ2h0IGRpcmVjdGlvbi4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk9ORElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFyb3VuZCBsaW5lIDQwLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGluaXRpYWwgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBkcml2ZXJzIHdpbGwgbGlrZWx5IHJlc2lkZS4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgYW5kIHBlcmhhcHMgaWRlbnRpZnkgdGhlIHNwZWNpZmljIG9wdGlvbnMgdGhhdCBhcmUgaW5mbHVlbmNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG1vZHVsZXMgdGhhdCBJIGFtIGludGVyZXN0ZWQgaW4uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcbiAgNDE6XHRjb25maWcgQk9ORElOR1xuICA0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7Qm9uZGluZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQ0Olx0XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbiAgNDU6XHRcdGhlbHBcbiAgNDY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGlmIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gJiMzOTtib25kJiMzOTsgbXVsdGlwbGUgRXRoZXJuZXRcbiAgNDc6XHRcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICYjMzk7RXRoZXJjaGFubmVsJiMzOTsgYnkgQ2lzY28sXG4gIDQ4Olx0XHQgICYjMzk7VHJ1bmtpbmcmIzM5OyBieSBTdW4sIDgwMi4zYWQgYnkgdGhlIElFRUUsIGFuZCAmIzM5O0JvbmRpbmcmIzM5OyBpbiBMaW51eC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBib25kaW5nIG1vZGVzIHRvIGFsbG93IGZvciBib3RoIGhpZ2hcbiAgNTE6XHRcdCAgcGVyZm9ybWFuY2UgYW5kIGhpZ2ggYXZhaWxhYmlsaXR5IG9wZXJhdGlvbi5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgUmVmZXIgdG8gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy5yc3RcdTAwM2UgZm9yIG1vcmVcbiAgNTQ6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYm9uZGluZy5cbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgRFVNTVlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCb25kaW5nIE1vZHVsZSBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGJvbmRfYWxiLmNgIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIGJ1aWxkIGluc3RydWN0aW9ucywgYW5kIEkmIzM5O20gc3VyZSBpdCYjMzk7bGwgaG9sZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgZm9yIHRoaXMgc3BlY2lmaWMgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgaXQgZGVmaW5lcy4gVGhpcyBpcyB1c3VhbGx5IHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBjb25maXJtIGFzc3VtcHRpb25zIGFib3V0IHRoZSBidWlsZCBzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIHN0YW5kYXJkIG9iamVjdCBmaWxlIGdlbmVyYXRpb24sIGxpbmtpbmcsIGFuZCBwcm9iYWJseSBzb21lIGtlcm5lbCBtb2R1bGUgbWFnaWMuIExldCYjMzk7cyBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBFdGhlcm5ldCBCb25kaW5nIGRyaXZlclxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuICAgNzpcdFxuICAgODpcdGJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xuICAgOTpcdFxuICAxMDpcdHByb2MtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGJvbmRfcHJvY2ZzLm9cbiAgMTE6XHRib25kaW5nLW9ianMgJiM0Mzs9ICQocHJvYy15KVxuICAxMjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQm9uZGluZyBNb2R1bGUgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYm9uZGluZyBtb2R1bGUmIzM5O3MgYnVpbGQgcHJvY2Vzcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGJvbmRfYWxiLm9gIGlzIGFsd2F5cyBpbmNvcnBvcmF0ZWQgaW50byBgYm9uZGluZy5vYCB3aGVuIGBDT05GSUdfQk9ORElOR2AgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhhdCBgQ09ORklHX0JPTkRJTkdgIGl0c2VsZiBkZXBlbmRzIG9uIGBJTkVUYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTt2ZSBjb3ZlcmVkIGFsbCB0aGUgZGVwZW5kZW5jaWVzLCB0aG91Z2guIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgaW52b2x2ZWQ/IExldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayBgTkVUX0NPUkVgIOKAkyB0aGF0JiMzOTtzIGEgbWVudSBvciBib29sZWFuLCBJSVJDLgoKTm93LCBsZXQmIzM5O3MgdHVybiBteSBhdHRlbnRpb24gdG8gYGNvbXB1dGVfZ2FwYC4gSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKWAuIEJlY2F1c2UgaXQmIzM5O3Mgc3RhdGljIGFuZCAqbm90KiBleHBsaWNpdGx5IGlubGluZWQgKG9yIGF0IGxlYXN0LCBJIGRvbiYjMzk7dCBzZWUgdGhlIGlubGluZSBrZXl3b3JkKSB0aGF0IG1lYW5zIGl0ICpjb3VsZCogaGF2ZSBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIEkgc2hvdWxkIGJlIGluY2x1ZGluZyBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgX190bGJfY2hvb3NlX2NoYW5uZWxgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBvciBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgY29tcHV0ZV9nYXBgIGlzIHN0YXRpYyBhbmQgbm9uLWlubGluZTogWWVwLCB0aGUgZGVmaW5pdGlvbiBjb25maXJtcyB0aGF0OiBgc3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKWAuIEkgZG9uJiMzOTt0IHNlZSB0aGUgYGlubGluZWAga2V5d29yZC4gU2luY2UgaXQmIzM5O3MgYSBzbWFsbCBmdW5jdGlvbiBhbmQgaGFzIG9ubHkgYSBzaW5nbGUgY2FsbCBzaXRlLCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBoYXZlIGlubGluZWQgaXQgaW50byBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLgoKYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCBpcyBhbHNvIHN0YXRpYywgYW5kIGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYF9fdGxiX2Nob29zZV9jaGFubmVsYC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBzdGF0aWM6IGBzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClgLiBTbywgaXQmIzM5O3Mgc3RhdGljIHRvby4KCkFscmlnaHQsIHdoYXQgYWJvdXQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YD8gVGhvc2UgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBhcmUgY2FsbGVkIGZyb20gYGJvbmRfbWFpbi5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aW1lIHRvIHRyYWNrIGRvd24gdGhlIGNhbGwgc2l0ZXMgZm9yIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfeG1pdF8uKl9zbGF2ZV9nZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM0NT1zdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM3Ny1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzc4OnN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM3OS1cdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MTY9bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyMTpcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDIyLVx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyNTpzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjYtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTI5PW5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MzQ6XHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzNS1cdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDkzMz1zdGF0aWMgdTMyIGJvbmRfcnJfZ2VuX3NsYXZlX2lkKHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDk1Ny1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDk1ODpzdGF0aWMgc3RydWN0IHNsYXZlICpib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ5NTktXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00OTk2PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeGRwX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDEwLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDExOlx0LyogU2VlIGNvbW1lbnQgb24gSUdNUCBpbiBib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoKSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDEyLVx0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSkge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTAzNz1zdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF94bWl0X3JvdW5kcm9iaW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNDItXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNDM6XHRzbGF2ZSA9IGJvbmRfeG1pdF9yb3VuZHJvYmluX3NsYXZlX2dldChib25kLCBza2IpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDQ0LVx0aWYgKGxpa2VseShzbGF2ZSkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDQ5LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDUwOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDUxLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUwNTg9c3RhdGljIG5ldGRldl90eF90IGJvbmRfeG1pdF9hY3RpdmViYWNrdXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNjMtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNjQ6XHRzbGF2ZSA9IGJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KGJvbmQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDY1LVx0aWYgKHNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTE1OD1pbnQgYm9uZF91cGRhdGVfc2xhdmVfYXJyKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNraXBzbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUyMjctXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUyMjg6c3RhdGljIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0XzNhZF94b3Jfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjI5LVx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTI5Nj1zdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF8zYWRfeG9yX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUzMDMtXHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2V1c2FibGVfc2xhdmVzKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTMwNDpcdHNsYXZlID0gYm9uZF94bWl0XzNhZF94b3Jfc2xhdmVfZ2V0KGJvbmQsIHNrYiwgc2xhdmVzKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTMwNS1cdGlmIChsaWtlbHkoc2xhdmUpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQxMz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfeG1pdF9nZXRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlcl9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDIyLVx0Y2FzZSBCT05EX01PREVfUk9VTkRST0JJTjpcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQyMzpcdFx0c2xhdmUgPSBib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQyNC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjUtXHRjYXNlIEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVA6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0MjY6XHRcdHNsYXZlID0gYm9uZF94bWl0X2FjdGl2ZWJhY2t1cF9zbGF2ZV9nZXQoYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjctXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQzMy1cdFx0XHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2V1c2FibGVfc2xhdmVzKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQzNDpcdFx0c2xhdmUgPSBib25kX3htaXRfM2FkX3hvcl9zbGF2ZV9nZXQoYm9uZCwgc2tiLCBzbGF2ZXMpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDM1LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MzgtXHRjYXNlIEJPTkRfTU9ERV9BTEI6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0Mzk6XHRcdHNsYXZlID0gYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ0MC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NDEtXHRjYXNlIEJPTkRfTU9ERV9UTEI6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0NDI6XHRcdHNsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ0My1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NjEwPWJvbmRfeGRwX2dldF94bWl0X3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NjIyLVx0Y2FzZSBCT05EX01PREVfQUNUSVZFQkFDS1VQOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NjIzOlx0XHRzbGF2ZSA9IGJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KGJvbmQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NjI0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQm9uZGluZyBUcmFuc21pc3Npb24gTW9kZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZSBib25kaW5nIGRyaXZlciBoYW5kbGVzIHRyYW5zbWl0IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpbiBBTEIgYW5kIFRMQiBtb2Rlcy4gSXQgbG9va3MgbGlrZSBgYm9uZF9hbGJfeG1pdGAgYW5kIGBib25kX3RsYl94bWl0YCBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50cyDigJMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb25zIGZvciB0aGVzZSBtb2Rlcy4gIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dC4KCkxldCYjMzk7cyBzZWU6IGBjb21wdXRlX2dhcGAsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiBJIHRoaW5rIHdhcyBtb2RpZmllZCwgdGhlbiBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCB3aGljaCBkaXJlY3RseSBjYWxscyBpdC4gT2YgY291cnNlLCBgYm9uZF9hbGJfeG1pdGAgYW5kIGBib25kX3RsYl94bWl0YCBhcmUgdGhlcmUsIHRoZSBjb3JlIG9mIHRoZSB0cmFuc21pc3Npb24gbG9naWMgZm9yIGVhY2ggYm9uZGluZyBtb2RlLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzbGF2ZSBzZWxlY3Rpb24sIHNvIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYXJlIGltcG9ydGFudCB0byBub3RlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuICBgY29tcHV0ZV9nYXBgIOKAkyBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBzdGF0aWMuLi4geWVzLCBnb29kLiBUaGlzIG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgdXRpbGl0eSBmdW5jdGlvbi4gU2ltaWxhcmx5LCBJJiMzOTtsbCBjaGVjayBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIOKAkyBhbmQgeWVzLCB0aGF0JiMzOTtzIGFsc28gc3RhdGljLCBhcyBleHBlY3RlZCwgYXMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgcGFydCBvZiB0aGUgVExCIGxvZ2ljLgoKQnV0IGBib25kX2FsYl94bWl0YC4uLiBhaCwgdGhhdCYjMzk7cyAqbm90KiBzdGF0aWMuIFRoaXMgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIGV4dGVybmFsIGludGVyZmFjZS4gSXQmIzM5O3MgdXNlZCBzb21ld2hlcmUgaW4gYGJvbmRfbWFpbi5jYCDigJMgcHJvYmFibHkgdmlhIHRoZSBgbmV0ZGV2X29wc2Agc3RydWN0dXJlIG9yIHRoZSBib25kIG1vZGUgaGFuZGxlcnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVzZWQgYmVjYXVzZSB0aGF0JiMzOTtzIGtleS4gTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlaXIgZGVmaW5pdGlvbiBhbmQgdXNhZ2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MjI3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cdC8qIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlx0ICogdGxiX2Nob29zZV9jaGFubmVsKCkgaXMgb25seSBjYWxsZWQgYnkgYm9uZF9hbGJfeG1pdCgpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTQyNT1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTI4LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1Mjk6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzMC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUwPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3Ni1cdGNhc2UgQk9ORF9NT0RFX0FMQjpcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU3NzpcdFx0cmV0dXJuIGJvbmRfYWxiX3htaXQoc2tiLCBkZXYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc4LVx0Y2FzZSBCT05EX01PREVfVExCOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipNeSBEZWVwIERpdmUgaW50byBgYm9uZF90bGJfeG1pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgYm9uZF90bGJfeG1pdGAsIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGRpc3NlY3RpbmcgdGhlIGltcGxpY2F0aW9ucy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gcmVsYXRlZCB0byBib25kaW5nIGFuZCwgbW9zdCBsaWtlbHksIHRyYW5zbGF0aW9uIGxvb2thc2lkZSBidWZmZXJzLiBJbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgcGFja2V0cyBhY3Jvc3MgYm9uZGVkIG5ldHdvcmsgaW50ZXJmYWNlcywgZXNwZWNpYWxseSBpbiBzY2VuYXJpb3MgaW52b2x2aW5nIGxvYWQgYmFsYW5jaW5nIG9yIGZhaWxvdmVyLiBJJiMzOTttIHZpc3VhbGl6aW5nIHRoZSBuZXR3b3JrIHN0YWNrLCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyLWxldmVsIGRyaXZlcnMsIHRoZSBib25kaW5nIG1vZHVsZSBpdHNlbGYsIGFuZCB0aGUgb3ZlcmFsbCBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LgoKSSYjMzk7bSBzdGFydGluZyB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGlzc3VlczogY2FjaGUgY29oZXJlbmN5LCB0aGUgaW1wYWN0IG9mIGRpZmZlcmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGUgcG9zc2libGUgZWRnZSBjYXNlcyBhcmlzaW5nIGZyb20gYSB2YXJpZXR5IG9mIGJvbmRpbmcgbW9kZXMuIEkgd29uZGVyIGlmIGl0JiMzOTtzIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIGJlY2F1c2UgaWYgaXQmIzM5O3Mgbm90IGFuZCB3ZSBhcmUgdXNpbmcgaXQgb24gYSBzeXN0ZW0sIHNheSB3aXRoIGEgcGFydGljdWxhciBOSUMgY2hpcHNldCwgdGhlcmUgbWF5IGJlIHNvbWUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhlcmUuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIGl0IG1pZ2h0IGhhdmUuIERvZXMgaXQgZW1wbG95IHNwaW5sb2NrcywgbXV0ZXhlcywgb3Igc29tZSBtb3JlIHNvcGhpc3RpY2F0ZWQgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRyYW5zbWlzc2lvbj8gQSBxdWljayBnbGFuY2UgYXQgdGhlIGNvZGUgKEkmIzM5O2QgYmUgd2FudGluZyB0byBkbyB0aGF0IGFzIHNvb24gYXMgSSBjYW4sIG9mIGNvdXJzZSkgd291bGQgcXVpY2tseSB2ZXJpZnkgbXkgc3VzcGljaW9ucy4gCgpJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0OiBpcyB0aGlzIHBhcnQgb2YgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBvciBhIGxheWVyIG9uIHRvcD8gSG93IGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGFuZCBob3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIHZhcmlvdXMgbmV0d29yayBoZWFkZXJzLCBWTEFOIHRhZ3MsIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgdGhhdCBhcmUgcGFydCBvZiB0aGUgcHJvY2Vzcz8gQWxzbywgZXJyb3IgaGFuZGxpbmcgaXMgYW4gaW1wb3J0YW50IHRoaW5nIHRvIGxvb2sgYXQuIEFyZSB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tzIGFuZCBmYWxsYmFjayBtZWNoYW5pc21zIGluIHBsYWNlPyBGYWlsdXJlcyBoZXJlIGNhbiBoYXZlIHByZXR0eSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4gRmluYWxseSwgdGhlIG1vcmUgSSB0aGluayBhYm91dCB0aGlzLCB0aGUgbW9yZSBteSBpbnRlcmVzdCBpcyBwaXF1ZWQuIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoaXMgbGl0dGxlIGZ1bmN0aW9uIGhvbGRzIGEga2V5IHRvIHVuZGVyc3RhbmRpbmcgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIG5ldHdvcmsgYmVoYXZpb3IuIEkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIHJlYWQgdGhlIHNvdXJjZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzc4PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQxNjpuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDE3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTA9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc4LVx0Y2FzZSBCT05EX01PREVfVExCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc5Olx0XHRyZXR1cm4gYm9uZF90bGJfeG1pdChza2IsIGRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1ODAtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEzMgoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQm9uZGluZyBBTEIvVExCIFRyYW5zbWl0IE1vZGUgQ29kZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBzZXQgb2YgZnVuY3Rpb25zOiBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgYm9uZF9hbGJfeG1pdGAsIGBib25kX3RsYl94bWl0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAuIFRoZXNlIGFyZW4mIzM5O3QgZ2VuZXJpYywgdGhleSYjMzk7cmUgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYm9uZGluZyYjMzk7cyBBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZyAoQUxCKSBhbmQgVHJhbnNtaXQgTG9hZCBCYWxhbmNpbmcgKFRMQikgbW9kZXMuIEZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBlbmFibGUgdGhlbS4KCkNoZWNraW5nIGBFbmFibGVDb25maWdzYCwgSSBzZWUgdGhhdCBgQk9ORElOR2AgaXMgdGhlIGtleS4gQW5kLCBvZiBjb3Vyc2UsIHRoYXQgZGVwZW5kcyBvbiBgSU5FVGAuIFRoZW4sIGEgcXVpY2sgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlYCBjb25maXJtcyBgb2JqLSQoQ09ORklHX0JPTkRJTkcpICYjNDM7PSBib25kaW5nLm9gLCBhbmQgYENPTkZJR19CT05ESU5HYCAqZG9lcyogaW5kZWVkIGRlcGVuZCBvbiBgQ09ORklHX0lORVRgLiBTbywgYEJPTkRJTkdgIGFuZCBgSU5FVGAgYXJlIHRoZSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUuCgpOb3cgZm9yIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBBTEIgYW5kIFRMQiBtb2RlcyBpbiB0aGUgYm9uZGluZyBkcml2ZXIgYXJlIGVhc2lseSBjb25maWd1cmVkIGluIG1hbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBZb3UgY2FuIHJlYWRpbHkgc2V0IHRoZXNlIHVwIHVzaW5nIHZpcnR1YWwgbmV0ZGV2cyBsaWtlIHZldGggb3IgZHVtbXkgZGV2aWNlcywgYW5kIGNvbnRyb2wgdGhlbSB1c2luZyBydG5ldGxpbmsgb3Igc3lzZnMuIE1ha2VzIGZvciBzaW1wbGUgdGVzdGluZy4KCkRvZXMgdGhlIGNoYW5nZSBhY3R1YWxseSBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlPyBZZXMsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSAzMi1iaXQgc2hpZnQgb3ZlcmZsb3cgaW4gYGNvbXB1dGVfZ2FwKClgLiBTbyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AuIFl1cCwgYGNvbXB1dGVfZ2FwYCwgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAgYXJlIGFsbCBjb3JyZWN0IGFuZCByZWxldmFudC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuCgotICAgYFdvcnRoRnV6emluZ2A6IFRydWUKLSAgIGBSZWFzb25pbmdgOiBXZSYjMzk7dmUgZ290IGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGNvbXB1dGVfZ2FwKClgIHRoYXQmIzM5O3MgYmVlbiBmaXhlZC4gVGhlIGZpeCBpbnZvbHZlcyBjYXN0aW5nIHRvIGBzNjRgIGJlZm9yZSBzaGlmdGluZyBgc2xhdmUtJmd0O3NwZWVkYCBhbmQgYGxvYWRgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aCwgYW5kIHRlc3RhYmxlIHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBsaWtlIGR1bW15IG9yIHZldGggaW4gUUVNVS4gV2UmIzM5O2xsIGFsc28gYmUgc3VyZSB0byBsaXN0IHRoZSBuZWNlc3Nhcnkgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuCi0gICBgRm9jdXNTeW1ib2xzYDogSSYjMzk7bGwgaW5jbHVkZSBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgYm9uZF9hbGJfeG1pdGAsIGBib25kX3RsYl94bWl0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAuCi0gICBgRW5hYmxlQ29uZmlnc2A6IGBCT05ESU5HYCBhbmQgYElORVRgLgoKQWxyaWdodCwgZXZlcnl0aGluZyBpcyBzcXVhcmVkIGF3YXkuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb21wdXRlX2dhcCYjMzQ7LAogICAgJiMzNDt0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZSYjMzQ7LAogICAgJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X2FsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X3RsYl9zbGF2ZV9nZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXHUwMDNlc3BlZWQgYW5kIGxvYWQgdG8gNjQtYml0IHNpZ25lZCBpbnRlZ2VycyBwcmlvciB0byB0aGUgYml0IHNoaWZ0IG9wZXJhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29tcHV0ZV9nYXAmIzM0OywKICAgICYjMzQ7dGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3RsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCAzMi1iaXQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBhZGFwdGl2ZSBsb2FkIGJhbGFuY2luZyAoQUxCKSBhbmQgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgKFRMQikgbW9kZSBwYWNrZXQgdHJhbnNtaXQgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyAoc3VjaCBhcyB2ZXRoIG9yIGR1bW15IGRldmljZXMpIGJvbmRlZCBpbiBBTEIvVExCIG1vZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhbiBpbnRlZ2VyIHRydW5jYXRpb24vb3ZlcmZsb3cgYnVnIGluIGNvbXB1dGVfZ2FwKCkgYnkgY2FzdGluZyBzbGF2ZS1cdTAwM2VzcGVlZCBhbmQgbG9hZCB0byA2NC1iaXQgc2lnbmVkIGludGVnZXJzIChzNjQpIHByaW9yIHRvIGJpdC1zaGlmdGluZywgcHJldmVudGluZyAzMi1iaXQgYXJpdGhtZXRpYyBvdmVyZmxvdyBmb3IgaGlnaCBsaW5rIHNwZWVkcyAoZS5nLiwgXHUwMDNlPSA0R2JwcykuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTM6MzY6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggNDNhYzhlMjhlNDE4Mi4uYjUyMDA0MDMwYTRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtMTYwLDggJiM0MzsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCiBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpCiB7Ci0JcmV0dXJuIChzNjQpIChzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KLQkgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiYjNDM7CXJldHVybiAoKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KJiM0MzsJICAgICAgICgoczY0KVNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb21wdXRlX2dhcGAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQmIzM5O3MgYSBtaW5vciBjaGFuZ2U7IGVzc2VudGlhbGx5LCB0aGUgYWRkaXRpb24gb2YgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBzZWNvbmQgdGVybSBpbiB0aGUgcmV0dXJuIHN0YXRlbWVudDoKCmBgYGMKc3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQp7Ci0JcmV0dXJuIChzNjQpIChzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KLQkgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiYjNDM7CXJldHVybiAoKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KJiM0MzsJICAgICAgICgoczY0KVNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCn0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIG1hdHRlciBvZiBvcGVyYXRvciBwcmVjZWRlbmNlLCB3aGljaCwgaW4gYW5kIG9mIGl0c2VsZiwgaXMgcmFyZWx5IHdvcnRoIGEgcGF0Y2guIEFsdGhvdWdoLCB3aXRob3V0IGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCB3b3VsZCBiZSBnb29kIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU28sIEkgd2lsbCB1c2UgYSB0b29sIHN1Y2ggYXMgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgYGNvbXB1dGVfZ2FwYCBpcyB1c2VkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBqdXN0IGEgc3R5bGUgaXNzdWUsIG9yIGlmIHRoZXJlIGlzIGEgcmVhbCBidWcgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0e1xuIDE1MTpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbiAxNTI6XHRcbiAxNTM6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gMTU0Olx0XG4gMTU1Olx0XHRrZnJlZShib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCk7XG4gMTU2Olx0XHRib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCA9IE5VTEw7XG4gMTU3Olx0XG4gMTU4Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gMTU5Olx0fVxuIDE2MDpcdFxuIDE2MTpcdHN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbiAxNjI6XHR7XG4gMTYzOlx0XHRyZXR1cm4gKChzNjQpc2xhdmUtXHUwMDNlc3BlZWQgXHUwMDNjXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXG4gMTY0Olx0XHQgICAgICAgKChzNjQpU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXG4gMTY1Olx0fVxuIDE2NjpcdFxuIDE2NzpcdHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuIDE2ODpcdHtcbiAxNjk6XHRcdHN0cnVjdCBzbGF2ZSAqc2xhdmUsICpsZWFzdF9sb2FkZWQ7XG4gMTcwOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuIDE3MTpcdFx0bG9uZyBsb25nIG1heF9nYXA7XG4gMTcyOlx0XG4gMTczOlx0XHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xuIDE3NDpcdFx0bWF4X2dhcCA9IExMT05HX01JTjtcbiAxNzU6XHRcbiAxNzY6XHRcdC8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovXG4gMTc3Olx0XHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuIDE3ODpcdFx0XHRpZiAoYm9uZF9zbGF2ZV9jYW5fdHgoc2xhdmUpKSB7XG4gMTc5Olx0XHRcdFx0bG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcbiAxODA6XHRcbiAxODE6XHRcdFx0XHRpZiAobWF4X2dhcCBcdTAwM2MgZ2FwKSB7XG4gMTgyOlx0XHRcdFx0XHRsZWFzdF9sb2FkZWQgPSBzbGF2ZTtcbiAxODM6XHRcdFx0XHRcdG1heF9nYXAgPSBnYXA7XG4gMTg0Olx0XHRcdFx0fVxuIDE4NTpcdFx0XHR9XG4gMTg2Olx0XHR9XG4gMTg3Olx0XG4gMTg4Olx0XHRyZXR1cm4gbGVhc3RfbG9hZGVkO1xuIDE4OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgUG90ZW50aWFsIEFyaXRobWV0aWMgT3ZlcmZsb3cqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGU6IGByZXR1cm4gKHM2NCkgKHNsYXZlLSZndDtzcGVlZCAmbHQ7Jmx0OyAyMCkgLSAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgJmx0OyZsdDsgMyk7YCBhbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggdGhlIGJpdC1zaGlmdGluZy4gYHNsYXZlLSZndDtzcGVlZGAgaXMsIGFzIEkgc3VzcGVjdCwgbGlrZWx5IGEgMzItYml0IHVuc2lnbmVkIG9yIHNpZ25lZCBpbnRlZ2VyIHR5cGUsIGEgYHUzMmAgb3Igc2ltaWxhci4gSWYgaXQgcmVwcmVzZW50cyBzb21ldGhpbmcgbGlrZSBuZXR3b3JrIHNwZWVk4oCUc2F5LCA0MDAwMCBNYnBzIG9yIGV2ZW4gMTAwIEdicHPigJR0aGUgbGVmdC1zaGlmdCBieSAyMCBiaXRzIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gY2F1c2UgYW4gb3ZlcmZsb3cgaW4gYSAzMi1iaXQgaW50ZWdlci4gVGhlIHNhbWUgaXNzdWUgZXhpc3RzIGZvciBgbG9hZCAmbHQ7Jmx0OyAzYCBpZiB0aGUgbG9hZCBpcyBhIHNpZ25pZmljYW50IG51bWJlci4KClRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFRoZSBzaGlmdCBpcyBwZXJmb3JtZWQgKmJlZm9yZSogdGhlIGNhc3QgdG8gYHM2NGAuIFNvIHRoZSBiaXQgc2hpZnQgaXMgcGVyZm9ybWVkIG9uIHRoZSBuYXJyb3dlciAzMi1iaXQgaW50ZWdlci4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY2FzdGluZyB0byBgczY0YCAqYmVmb3JlKiB0aGUgc2hpZnQ6IGAoKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApYC4gVGhpcyBndWFyYW50ZWVzIGEgNjQtYml0IHNoaWZ0IG9wZXJhdGlvbiwgd2hpY2ggcHJldmVudHMgdGhlIG92ZXJmbG93IGFuZCB0cnVuY2F0aW9uLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIGZpeCBmb3IgdGhpcyBraW5kIG9mIGFyaXRobWV0aWMgYnVnLgoKTm93LCBteSBtb3JlIHNlY3VyaXR5LWNvbnNjaW91cyBzaWRlIGtpY2tzIGluLiBBbnkgY2hhbmdlLCBubyBtYXR0ZXIgaG93IHNtYWxsLCByZXF1aXJlcyBjYXJlZnVsIHNjcnV0aW55LiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzbGF2ZS0mZ3Q7c3BlZWRgIGFuZCBgU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWRgLiBXaGVyZSBhcmUgdGhlc2UgdmFsdWVzIGNvbWluZyBmcm9tPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQ/CgpGb3J0dW5hdGVseSwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIHRoYXQgbm8gbmV3IHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZC4gTm8gbWVtb3J5IGlzIGFsbG9jYXRlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHBvaW50ZXJzLCBidWZmZXIgbGVuZ3Rocywgb3IgYnVmZmVycyBpbnZvbHZlZC4gVGhpcyBpcyBwdXJlbHkgYW4gYXJpdGhtZXRpYyBmaXggZm9yIGEgY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0cmFuc21pc3Npb24gbG9hZCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gQUxCIG1vZGUuIFRoYXQmIzM5O3MgZ29vZCBuZXdzLCBzaWduaWZpY2FudGx5IHJlZHVjaW5nIG15IGNvbmNlcm5zLiBTdGlsbCwgSSBzaG91bGQgcmV2aWV3IHRoZSBgc3RydWN0IHNsYXZlYCBkZWZpbml0aW9uIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYnV0IGl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC11bmRlcnN0b29kIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNsYXZlIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRpbmcuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ib25kaW5nLmg9MTE3PXN0cnVjdCBib25kX3BhcmFtcyB7XG4tLVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE1Ni1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDoxNTc6c3RydWN0IHNsYXZlIHtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xNTgtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OyAvKiBmaXJzdCAtIHVzZWZ1bCBmb3IgcGFuaWMgZGVidWcgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBCb25kaW5nIFNwZWVkKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYm9uZGluZyBkcml2ZXIuIExldCBtZSBqdXN0IGRpdmUgc3RyYWlnaHQgaW50byB0aGUgY29kZS4gVGhlIHNwZWNpZmljIHBpZWNlIEkgbmVlZCBpcyBgc2xhdmUtJmd0O3NwZWVkYCwgd2hpY2ggSSBiZWxpZXZlIGlzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL25ldC9ib25kaW5nLmhgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc3BlZWQgaW5mb3JtYXRpb24gZm9yIGluZGl2aWR1YWwgc2xhdmVzIGluIGEgYm9uZCBpcyBzdG9yZWQsIGFuZCBJIG5lZWQgdG8gY29uZmlybSBpdHMgZGVmaW5pdGlvbiBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXIuIEnigJltIGJldHRpbmcgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIGFuc3dlciBJ4oCZbSBsb29raW5nIGZvciB3aXRob3V0IG11Y2ggZGlnZ2luZy4gVGltZSB0byB0YWtlIGEgbG9vayBhbmQgZ2V0IHRoaXMgcmVzb2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYm9uZGluZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTc6XHRzdHJ1Y3Qgc2xhdmUge1xuIDE1ODpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjsgLyogZmlyc3QgLSB1c2VmdWwgZm9yIHBhbmljIGRlYnVnICovXG4gMTU5Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZDsgLyogb3VyIG1hc3RlciAqL1xuIDE2MDpcdFx0aW50ICAgIGRlbGF5O1xuIDE2MTpcdFx0LyogYWxsIDQgaW4gamlmZmllcyAqL1xuIDE2MjpcdFx0dW5zaWduZWQgbG9uZyBsYXN0X2xpbmtfdXA7XG4gMTYzOlx0XHR1bnNpZ25lZCBsb25nIGxhc3RfdHg7XG4gMTY0Olx0XHR1bnNpZ25lZCBsb25nIGxhc3Rfcng7XG4gMTY1Olx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF9sYXN0X2FycF9yeFtCT05EX01BWF9BUlBfVEFSR0VUU107XG4gMTY2Olx0XHRzOCAgICAgbGluaztcdFx0Lyogb25lIG9mIEJPTkRfTElOS19YWFhYICovXG4gMTY3Olx0XHRzOCAgICAgbGlua19uZXdfc3RhdGU7XHQvKiBvbmUgb2YgQk9ORF9MSU5LX1hYWFggKi9cbiAxNjg6XHRcdHU4ICAgICBiYWNrdXA6MSwgICAvKiBpbmRpY2F0ZXMgYmFja3VwIHNsYXZlLiBWYWx1ZSBjb3JyZXNwb25kcyB3aXRoXG4gMTY5Olx0XHRcdFx0ICAgICAgQk9ORF9TVEFURV9BQ1RJVkUgYW5kIEJPTkRfU1RBVEVfQkFDS1VQICovXG4gMTcwOlx0XHQgICAgICAgaW5hY3RpdmU6MSwgLyogaW5kaWNhdGVzIGluYWN0aXZlIHNsYXZlICovXG4gMTcxOlx0XHQgICAgICAgcnhfZGlzYWJsZWQ6MSwgLyogaW5kaWNhdGVzIHdoZXRoZXIgc2xhdmUmIzM5O3MgUnggaXMgZGlzYWJsZWQgKi9cbiAxNzI6XHRcdCAgICAgICBzaG91bGRfbm90aWZ5OjEsIC8qIGluZGljYXRlcyB3aGV0aGVyIHRoZSBzdGF0ZSBjaGFuZ2VkICovXG4gMTczOlx0XHQgICAgICAgc2hvdWxkX25vdGlmeV9saW5rOjE7IC8qIGluZGljYXRlcyB3aGV0aGVyIHRoZSBsaW5rIGNoYW5nZWQgKi9cbiAxNzQ6XHRcdHU4ICAgICBkdXBsZXg7XG4gMTc1Olx0XHR1MzIgICAgb3JpZ2luYWxfbXR1O1xuIDE3NjpcdFx0dTMyICAgIGxpbmtfZmFpbHVyZV9jb3VudDtcbiAxNzc6XHRcdHUzMiAgICBzcGVlZDtcbiAxNzg6XHRcdHUxNiAgICBxdWV1ZV9pZDtcbiAxNzk6XHRcdHU4ICAgICBwZXJtX2h3YWRkcltNQVhfQUREUl9MRU5dO1xuIDE4MDpcdFx0aW50ICAgIHByaW87XG4gMTgxOlx0XHRzdHJ1Y3QgYWRfc2xhdmVfaW5mbyAqYWRfaW5mbztcbiAxODI6XHRcdHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB0bGJfaW5mbztcbiAxODM6XHQjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbiAxODQ6XHRcdHN0cnVjdCBuZXRwb2xsICpucDtcbiAxODU6XHQjZW5kaWZcbiAxODY6XHRcdHN0cnVjdCBkZWxheWVkX3dvcmsgbm90aWZ5X3dvcms7XG4gMTg3Olx0XHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuIDE4ODpcdFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHNsYXZlX3N0YXRzO1xuIDE4OTpcdH07XG4gMTkwOlx0XG4gMTkxOlx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhdmUgKnRvX3NsYXZlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxuIDE5MjpcdHtcbiAxOTM6XHRcdHJldHVybiBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHNsYXZlLCBrb2JqKTtcbiAxOTQ6XHR9XG4gMTk1Olx0XG4gMTk2Olx0c3RydWN0IGJvbmRfdXBfc2xhdmUge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTE2CgkJCQkJCQlvdXRwdXQ6IDEyNwoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyBhbiBhcml0aG1ldGljIGZpeC4gSXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBzb21ldGhpbmcuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNoaWZ0aW5nIGEgYHUzMmAgKHJlcHJlc2VudGluZyBhIHNwZWVkIHZhbHVlLCBsaWtlbHkgaW4gYSByYXRlIHBlciBzZWNvbmQgbGlrZSBHYnBzKSBieSAyMCBiaXRzIHVzaW5nIGAoczY0KShzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApYC4gVGhlIHByb2JsZW0gaXMgdGhhdCBpZiBgc2xhdmUtJmd0O3NwZWVkYCBpcyBhIHJlbGF0aXZlbHkgbGFyZ2UgbnVtYmVyLCBzYXkgNDA5NiBvciBncmVhdGVyLCB0aGUgbGVmdCBzaGlmdCBvcGVyYXRpb24gKmJlZm9yZSogdGhlIGNhc3QgdG8gYHM2NGAgd291bGQgY2F1c2UgdGhlIGB1MzJgIHRvIG92ZXJmbG93LiBGb3IgZXhhbXBsZSwgYSAxMCBHYnBzIHZhbHVlICgxMDAwMCkgc2hpZnRlZCBieSAyMCBiaXRzIHJlc3VsdHMgaW4gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBgdTMyYCB2YWx1ZSwgY2F1c2luZyBpdCB0byB3cmFwIGFyb3VuZCwgdHJ1bmNhdGluZyBkYXRhIGJlZm9yZSBpdCYjMzk7cyBjYXN0IHRvIGEgYHM2NGAuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgZWxlZ2FudDogaXQgY2FzdHMgdGhlIGBzbGF2ZS0mZ3Q7c3BlZWRgIHRvIGEgYHM2NGAgKmJlZm9yZSogdGhlIHNoaWZ0LCBzbyBgKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjBgIHBlcmZvcm1zIGEgNjQtYml0IHNoaWZ0LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCBjYW4gYWNjb21tb2RhdGUgdGhlIHNoaWZ0ZWQgdmFsdWUsIGF2b2lkaW5nIGFueSB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgY2hhbmdlIHdhcnJhbnQgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrPyBJIGRvbiYjMzk7dCB0aGluayBzby4gVGhpcyBpcyBhIHB1cmVseSBhcml0aG1ldGljIG9wZXJhdGlvbi4gSXQmIzM5O3Mgbm90IHRvdWNoaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgaW52b2x2aW5nIGtlcm5lbC10by11c2Vyc3BhY2UgbWVtb3J5IGNvcGllcy4gVGhlIHN0YW5kYXJkIHRlc3RpbmcgdG9vbHMsIGFsb25nIHdpdGggS0FTQU4vVUJTQU4gKGZvciBwb3RlbnRpYWwgdW5kZWZpbmVkIHNoaWZ0cyBvciBzaWduZWQgb3ZlcmZsb3dzKSwgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBzdWJ0bGUgaXNzdWVzLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQmIzM5O3Mgc2FmZSB0byBtYXJrIGBOZWVkc0tNU0FOYCBhcyBgZmFsc2VgIGhlcmUuIE15IHJlYXNvbmluZyBpcyBzb2xpZCwgYW5kIEkgY2FuIG5vdyBjb25maWRlbnRseSBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgKHM2NCkgcHJpb3IgdG8gYml0LXNoaWZ0aW5nLCBwcmV2ZW50aW5nIDMyLWJpdCBhcml0aG1ldGljIG92ZXJmbG93IGZvciBoaWdoIGxpbmsgc3BlZWRzIChlLmcuLCBcdTAwM2U9IDRHYnBzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgKHM2NCkgcHJpb3IgdG8gYml0LXNoaWZ0aW5nLCBwcmV2ZW50aW5nIDMyLWJpdCBhcml0aG1ldGljIG92ZXJmbG93IGZvciBoaWdoIGxpbmsgc3BlZWRzIChlLmcuLCBcdTAwM2U9IDRHYnBzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MDcuODM1MjA1NTYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTk5NjAyNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb21wdXRlX2dhcFwiLFxuICAgIFwidGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVcIixcbiAgICBcImJvbmRfYWxiX3htaXRcIixcbiAgICBcImJvbmRfdGxiX3htaXRcIixcbiAgICBcImJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0XCIsXG4gICAgXCJib25kX3htaXRfdGxiX3NsYXZlX2dldFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYW4gaW50ZWdlciB0cnVuY2F0aW9uL292ZXJmbG93IGJ1ZyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXFx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgKHM2NCkgcHJpb3IgdG8gYml0LXNoaWZ0aW5nLCBwcmV2ZW50aW5nIDMyLWJpdCBhcml0aG1ldGljIG92ZXJmbG93IGZvciBoaWdoIGxpbmsgc3BlZWRzIChlLmcuLCBcXHUwMDNlPSA0R2JwcykuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXFx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlcidzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MDcuODM1MjEyNDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY3NjA2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDEzOjM2OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbmluZGV4IDQzYWM4ZTI4ZTQxODIuLmI1MjAwNDAzMGE0YjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuQEAgLTE2MCw4ICsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXG4gc3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbiB7XFxuLVxcdHJldHVybiAoczY0KSAoc2xhdmUtXFx1MDAzZXNwZWVkIFxcdTAwM2NcXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXFxuLVxcdCAgICAgICAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXFx1MDAzY1xcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cXG4rXFx0cmV0dXJuICgoczY0KXNsYXZlLVxcdTAwM2VzcGVlZCBcXHUwMDNjXFx1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xcbitcXHQgICAgICAgKChzNjQpU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXFx1MDAzY1xcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjA4LjI1MjcyNTQzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzgwNjc1NDE0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbXB1dGVfZ2FwXCIsXG4gICAgXCJ0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZVwiLFxuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiLFxuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXFx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlcidzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTM6MzY6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDQzYWM4ZTI4ZTQxODIuLmI1MjAwNDAzMGE0YjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTE2MCw4ICsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuIFxuIHN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbiB7XG4tXHRyZXR1cm4gKHM2NCkgKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xuLVx0ICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbitcdHJldHVybiAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbitcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjowOC4yNTI3MjgyOTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NjkzMzgyMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQUxCIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBMZXQncyBkaXZlIGluLiBUaGUgZGlmZiBzaG93cyBhIG1pbm9yIGNoYW5nZSBpbiB0aGUgYGNvbXB1dGVfZ2FwYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGp1c3QgYWRkZWQgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBzZWNvbmQgdGVybSBpbiB0aGUgc3VidHJhY3Rpb246IGAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMylgLiBUaGF0J3MgYSBjbGFzc2ljIGNvZGUgcmVhZGFiaWxpdHkgaW1wcm92ZW1lbnQsIGVuc3VyaW5nIHRoZSBiaXQgc2hpZnQgaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY29udmVyc2lvbiB0byBhIHNpZ25lZCA2NC1iaXQgaW50ZWdlciwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgcHJlY2VkZW5jZSBpc3N1ZXMuIFRoaXMgY291bGQgYmUgYSBmaXggZm9yIHNvbWUgZWRnZSBjYXNlLCBvciBqdXN0IGEgZ2VuZXJhbCBjb2RlLXN0eWxlIGltcHJvdmVtZW50LlxuXG5Ob3csIGxldCdzIGdldCBzb21lIGNvbnRleHQgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGBjb21wdXRlX2dhcGAgaW4gdGhhdCBmaWxlIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQgYW5kIHdoYXQgaXQncyB0cnlpbmcgdG8gZG8sIGFuZCBJIHdpbGwgYWxzbyBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gd2hldGhlciB0aGVyZSBoYXZlIGJlZW4gYW55IHJlbGV2YW50IGNvbmZpZyBjaGFuZ2VzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIHB1cnBvc2UgYW5kIGltcGFjdCBvZiB0aGlzIHNtYWxsIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjE0Ljk0NjExMzQyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdHtcXG4gMTUxOlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdGtmcmVlKGJvbmRfaW5mby1cXHUwMDNldHhfaGFzaHRibCk7XFxuIDE1NjpcXHRcXHRib25kX2luZm8tXFx1MDAzZXR4X2hhc2h0YmwgPSBOVUxMO1xcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4gMTU5OlxcdH1cXG4gMTYwOlxcdFxcbiAxNjE6XFx0c3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbiAxNjI6XFx0e1xcbiAxNjM6XFx0XFx0cmV0dXJuICgoczY0KXNsYXZlLVxcdTAwM2VzcGVlZCBcXHUwMDNjXFx1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xcbiAxNjQ6XFx0XFx0ICAgICAgICgoczY0KVNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFxcdTAwM2NcXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXFxuIDE2NTpcXHR9XFxuIDE2NjpcXHRcXG4gMTY3OlxcdHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbiAxNjg6XFx0e1xcbiAxNjk6XFx0XFx0c3RydWN0IHNsYXZlICpzbGF2ZSwgKmxlYXN0X2xvYWRlZDtcXG4gMTcwOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuIDE3MTpcXHRcXHRsb25nIGxvbmcgbWF4X2dhcDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0bGVhc3RfbG9hZGVkID0gTlVMTDtcXG4gMTc0OlxcdFxcdG1heF9nYXAgPSBMTE9OR19NSU47XFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdC8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovXFxuIDE3NzpcXHRcXHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xcbiAxNzg6XFx0XFx0XFx0aWYgKGJvbmRfc2xhdmVfY2FuX3R4KHNsYXZlKSkge1xcbiAxNzk6XFx0XFx0XFx0XFx0bG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0XFx0XFx0aWYgKG1heF9nYXAgXFx1MDAzYyBnYXApIHtcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdGxlYXN0X2xvYWRlZCA9IHNsYXZlO1xcbiAxODM6XFx0XFx0XFx0XFx0XFx0bWF4X2dhcCA9IGdhcDtcXG4gMTg0OlxcdFxcdFxcdFxcdH1cXG4gMTg1OlxcdFxcdFxcdH1cXG4gMTg2OlxcdFxcdH1cXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0cmV0dXJuIGxlYXN0X2xvYWRlZDtcXG4gMTg5OlxcdH1cXG4gMTkwOlxcdFxcbiAxOTE6XFx0c3RhdGljIHN0cnVjdCBzbGF2ZSAqX190bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbiAxOTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dTMyIHNrYl9sZW4pXFxuIDE5MzpcXHR7XFxuIDE5NDpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4gMTk1OlxcdFxcdHN0cnVjdCB0bGJfY2xpZW50X2luZm8gKmhhc2hfdGFibGU7XFxuIDE5NjpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKmFzc2lnbmVkX3NsYXZlO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRoYXNoX3RhYmxlID0gYm9uZF9pbmZvLVxcdTAwM2V0eF9oYXNodGJsO1xcbiAxOTk6XFx0XFx0YXNzaWduZWRfc2xhdmUgPSBoYXNoX3RhYmxlW2hhc2hfaW5kZXhdLnR4X3NsYXZlO1xcbiAyMDA6XFx0XFx0aWYgKCFhc3NpZ25lZF9zbGF2ZSkge1xcbiAyMDE6XFx0XFx0XFx0YXNzaWduZWRfc2xhdmUgPSB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShib25kKTtcXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0XFx0aWYgKGFzc2lnbmVkX3NsYXZlKSB7XFxuIDIwNDpcXHRcXHRcXHRcXHRzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gKnNsYXZlX2luZm8gPVxcbiAyMDU6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNihTTEFWRV9UTEJfSU5GTyhhc3NpZ25lZF9zbGF2ZSkpO1xcbiAyMDY6XFx0XFx0XFx0XFx0dTMyIG5leHRfaW5kZXggPSBzbGF2ZV9pbmZvLVxcdTAwM2VoZWFkO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRcXHRcXHRoYXNoX3RhYmxlW2hhc2hfaW5kZXhdLnR4X3NsYXZlID0gYXNzaWduZWRfc2xhdmU7XFxuIDIwOTpcXHRcXHRcXHRcXHRoYXNoX3RhYmxlW2hhc2hfaW5kZXhdLm5leHQgPSBuZXh0X2luZGV4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjoxNC45NDYyNDEwODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ4MzA1MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIERhdGEgVHlwZXMgYW5kIFN0cnVjdHVyZSoqXG5cbkhtbSwgZmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGF0YSB0eXBlcyBoZXJlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNsYXZlLVx1MDAzZXNwZWVkYCBhbmQgYFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkYC4gV2hhdCBhcmUgdGhlaXIgdHlwZXM/IEFyZSB0aGV5IGludGVnZXJzLCBmbG9hdHMsIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IFRoZSBuYXR1cmUgb2YgdGhvc2UgdHlwZXMgd2lsbCBkZXRlcm1pbmUgaG93IEkgaW50ZXJwcmV0IHRoZSBjb2RlIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgY2FsY3VsYXRpb24sIG9yIGEgYm9vbGVhbiB0ZXN0LCBmb3IgaW5zdGFuY2UuIFxuXG5UbyBjbGFyaWZ5LCBJIG5lZWQgdG8gbG9vayB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgc2xhdmVgLCB0aGF0IHNob3VsZCBwcm92aWRlIHRoZSByZWxldmFudCB0eXBlIGluZm9ybWF0aW9uIGZvciB0aGVzZSBtZW1iZXJzLiBMZXQncyBzZWUgaWYgdGhhdCBxdWljayBzZWFyY2ggeWllbGRzIHdoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDgxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjoxNi44OTQ1NDgxMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3Mzc2OTM0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1MzIgc3BlZWQ7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjoxNy4xOTE5MzU2MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3OTgwODI1NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBUaGF0IGBzdHJ1Y3Qgc2xhdmVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoYXQgYHN0cnVjdCBzbGF2ZWAgZGVmaW5pdGlvbi4gTm93LCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCB0aGUgc3BlY2lmaWMgc3Vic3lzdGVtIHdlJ3JlIGRlYWxpbmcgd2l0aCwgdGhpcyBjb3VsZCBiZSBsb2NhdGVkIGluIGEgZmV3IGRpZmZlcmVudCBwbGFjZXMuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXM6IHRoZSBjb3JlIGRyaXZlciBtb2RlbCBoZWFkZXJzIChgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAsIGBpbmNsdWRlL2xpbnV4L2RyaXZlci5oYCwgZXRjLiksIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBidXMgb3Igc3Vic3lzdGVtIGhlYWRlcnMgKGUuZy4sIEkyQywgU1BJLCBTQ1NJKSwgb3IgbWF5YmUgZXZlbiBhIGN1c3RvbSBoZWFkZXIgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgdmVuZG9yJ3MgZHJpdmVyIGlmIGl0J3MgYSBtb3JlIHNwZWNpYWxpemVkIHBpZWNlIG9mIGhhcmR3YXJlLiBJ4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHRvIG5hcnJvdyBkb3duIHRoZSBzZWFyY2guXG5cbkZpcnN0IHN0ZXAgd2lsbCBiZSB0byB1c2UgYGdyZXBgLCBhbmQgSSdsbCBsaWtlbHkgc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaCBhY3Jvc3MgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBrZXJuZWwgc291cmNlIG9yIHJlbGV2YW50IG1vZHVsZSBzb3VyY2UuIElmIEknbSB3b3JraW5nIHdpdGggYSBzcGVjaWZpYyBkcml2ZXIsIEknbGwgcmVzdHJpY3QgdGhlIHNlYXJjaCB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCdzIHByb2JhYmx5ICpub3QqIGdvaW5nIHRvIGJlIGEgc2ltcGxlLCBvYnZpb3VzIGRlZmluaXRpb24sIGJ1dCBsaWtlbHkgbGlua2VkIHRvIHNvbWUgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLlxuXG5UaGVuLCBvbmNlIEkgbG9jYXRlIHRoZSBkZWZpbml0aW9uLCBJJ2xsIHdhbnQgdG8gcXVpY2tseSBwYXJzZSBpdHMgY29udGVudHMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1iZXJzLCB3aGljaCBmaWVsZHMgYXJlIGNyaXRpY2FsIGZvciBteSBjdXJyZW50IHRhc2ssIGFuZCBob3cgdGhpcyBgc3RydWN0IHNsYXZlYCByZWxhdGVzIHRvIG90aGVyIHN0cnVjdHVyZXMgYW5kIGNvbmNlcHRzIGluIHRoZSBzeXN0ZW0uIFRoZSBnb2FsIGlzbid0IGp1c3QgdG8gKmZpbmQqIHRoZSBkZWZpbml0aW9uIGJ1dCB0byAqdW5kZXJzdGFuZCogaXRzIHJvbGUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpdHMgcmVsZXZhbmNlIGluIHRoZSBjb250ZXh0IG9mIHdoYXRldmVyIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gSW4gc2hvcnQsIGl0J3MgYWJvdXQgY29ubmVjdGluZyB0aGUgZG90cyB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MjUuMTcyNzYzOTc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzI0MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzbGF2ZSBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9ib25kaW5nLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvYm9uZGluZy5oPTExNz1zdHJ1Y3QgYm9uZF9wYXJhbXMge1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE1Ni1cXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6MTU3OnN0cnVjdCBzbGF2ZSB7XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE1OC1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OyAvKiBmaXJzdCAtIHVzZWZ1bCBmb3IgcGFuaWMgZGVidWcgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MjUuMjMyMDk5NTYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg0ODc1NDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBib25kaW5nLmhgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYm9uZGluZyBzZXR1cCBiZXR0ZXIsIHNvIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBpbmNsdWRlL25ldC9ib25kaW5nLmhgLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDE1Ny4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdzIG9mdGVuIHdoZXJlIHNvbWUgY29yZSBzdHJ1Y3R1cmVzIG9yIGltcG9ydGFudCBkZWZpbml0aW9ucyBhcmUgbG9jYXRlZCwgdGhlIGdyb3VuZHdvcmsgZm9yIHRoZSBtb3JlIGNvbXBsZXggZnVuY3Rpb25zLiBIb3BlZnVsbHksIGxpbmUgMTU3IHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGVudHJ5IHBvaW50IGludG8gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29kZSBhbmQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBiZWhhdmlvciBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3RydWN0cyBkZWZpbmVkIGFyb3VuZCB0aGF0IGFyZWEsIHdoaWNoIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgYSBoaWdoLWxldmVsIHNlbnNlIG9mIGhvdyBib25kaW5nIGlzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjM0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MjcuMDgwODU4OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2JvbmRpbmcuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNTcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTc6XFx0c3RydWN0IHNsYXZlIHtcXG4gMTU4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqL1xcbiAxNTk6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQ7IC8qIG91ciBtYXN0ZXIgKi9cXG4gMTYwOlxcdFxcdGludCAgICBkZWxheTtcXG4gMTYxOlxcdFxcdC8qIGFsbCA0IGluIGppZmZpZXMgKi9cXG4gMTYyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9saW5rX3VwO1xcbiAxNjM6XFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X3R4O1xcbiAxNjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X3J4O1xcbiAxNjU6XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfbGFzdF9hcnBfcnhbQk9ORF9NQVhfQVJQX1RBUkdFVFNdO1xcbiAxNjY6XFx0XFx0czggICAgIGxpbms7XFx0XFx0Lyogb25lIG9mIEJPTkRfTElOS19YWFhYICovXFxuIDE2NzpcXHRcXHRzOCAgICAgbGlua19uZXdfc3RhdGU7XFx0Lyogb25lIG9mIEJPTkRfTElOS19YWFhYICovXFxuIDE2ODpcXHRcXHR1OCAgICAgYmFja3VwOjEsICAgLyogaW5kaWNhdGVzIGJhY2t1cCBzbGF2ZS4gVmFsdWUgY29ycmVzcG9uZHMgd2l0aFxcbiAxNjk6XFx0XFx0XFx0XFx0ICAgICAgQk9ORF9TVEFURV9BQ1RJVkUgYW5kIEJPTkRfU1RBVEVfQkFDS1VQICovXFxuIDE3MDpcXHRcXHQgICAgICAgaW5hY3RpdmU6MSwgLyogaW5kaWNhdGVzIGluYWN0aXZlIHNsYXZlICovXFxuIDE3MTpcXHRcXHQgICAgICAgcnhfZGlzYWJsZWQ6MSwgLyogaW5kaWNhdGVzIHdoZXRoZXIgc2xhdmUncyBSeCBpcyBkaXNhYmxlZCAqL1xcbiAxNzI6XFx0XFx0ICAgICAgIHNob3VsZF9ub3RpZnk6MSwgLyogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0YXRlIGNoYW5nZWQgKi9cXG4gMTczOlxcdFxcdCAgICAgICBzaG91bGRfbm90aWZ5X2xpbms6MTsgLyogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxpbmsgY2hhbmdlZCAqL1xcbiAxNzQ6XFx0XFx0dTggICAgIGR1cGxleDtcXG4gMTc1OlxcdFxcdHUzMiAgICBvcmlnaW5hbF9tdHU7XFxuIDE3NjpcXHRcXHR1MzIgICAgbGlua19mYWlsdXJlX2NvdW50O1xcbiAxNzc6XFx0XFx0dTMyICAgIHNwZWVkO1xcbiAxNzg6XFx0XFx0dTE2ICAgIHF1ZXVlX2lkO1xcbiAxNzk6XFx0XFx0dTggICAgIHBlcm1faHdhZGRyW01BWF9BRERSX0xFTl07XFxuIDE4MDpcXHRcXHRpbnQgICAgcHJpbztcXG4gMTgxOlxcdFxcdHN0cnVjdCBhZF9zbGF2ZV9pbmZvICphZF9pbmZvO1xcbiAxODI6XFx0XFx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHRsYl9pbmZvO1xcbiAxODM6XFx0I2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuIDE4NDpcXHRcXHRzdHJ1Y3QgbmV0cG9sbCAqbnA7XFxuIDE4NTpcXHQjZW5kaWZcXG4gMTg2OlxcdFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgbm90aWZ5X3dvcms7XFxuIDE4NzpcXHRcXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbiAxODg6XFx0XFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHNsYXZlX3N0YXRzO1xcbiAxODk6XFx0fTtcXG4gMTkwOlxcdFxcbiAxOTE6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhdmUgKnRvX3NsYXZlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbiAxOTI6XFx0e1xcbiAxOTM6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Qgc2xhdmUsIGtvYmopO1xcbiAxOTQ6XFx0fVxcbiAxOTU6XFx0XFxuIDE5NjpcXHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjI3LjA4MDk3NjAxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjIzMTg4OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFkZHJlc3NpbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gU3BlZWQgQ2FsY3VsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzbGF2ZS1cdTAwM2VzcGVlZGAgdmFyaWFibGUsIHdoaWNoIGlzIGRlZmluZWQgYXMgYSBgdTMyYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvdyB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBzcGVlZHMuIFNwZWNpZmljYWxseSwgdGhlIGxpbmUgYHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMGAgaGFzIG1lIHdvcnJpZWQuIElmIGBzbGF2ZS1cdTAwM2VzcGVlZGAgaXMsIHNheSwgNDA5NiBvciBncmVhdGVyLCB0aGF0IGxlZnQtc2hpZnQgYnkgMjAgYml0cyBpcyBnb2luZyB0byBibG93IHJpZ2h0IHBhc3QgdGhlIDMyLWJpdCBsaW1pdC4gSSBtZWFuLCB0aGluayBhYm91dCBpdCDigJMgNDA5NiBcdTAwM2NcdTAwM2MgMjAgcmVzdWx0cyBpbiAweDEwMDAwMDAwMCwgd2hpY2ggaXMgZGVmaW5pdGVseSBvdXRzaWRlIHRoZSBib3VuZHMgb2YgYSAzMi1iaXQgaW50ZWdlci4gQSBkYXRhIHJhdGUgb2YgNDAgR2Jwcywgb3IgZXZlbiA0IEdicHMsIHdvdWxkIGVhc2lseSBvdmVyZmxvdyB0aGlzIHNoaWZ0LlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2FzdCB0aGUgc2hpZnRlZCByZXN1bHQgdG8gYHM2NGAsIGxpa2UgdGhpczogYChzNjQpKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMClgLiBUaGF0J3Mgbm8gZ29vZCwgYmVjYXVzZSB0aGUgc2hpZnQgaGFwcGVuZWQgKmJlZm9yZSogdGhlIGNhc3QuIFNvIHRoZSBvdmVyZmxvdyBoYXBwZW5zLCBhbmQgdGhlIHJlc3VsdCBpcyBnYXJiYWdlLCBiZWZvcmUgaXQncyBjb252ZXJ0ZWQgdG8gYSBgczY0YC5cblxuVGhlIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCwgSSBzZWUsIHRvIGAoczY0KXNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMGAuIFRoaXMgaXMgZ29vZCwgdGhlIGNhc3QgaGFwcGVucyBmaXJzdC4gIE5vdyB0aGUgYHNsYXZlLVx1MDAzZXNwZWVkYCwgd2hpY2ggaXMgYSBgdTMyYCwgaXMgY2FzdCB0byBhbiBgczY0YC4gU2hpZnRpbmcgYSBgczY0YCBieSAyMCBiaXRzIGtlZXBzIHRoZSBpbnRlcm1lZGlhdGUgY2FsY3VsYXRpb25zIHdlbGwgaW5zaWRlIHRoZSByZXF1aXJlZCByYW5nZS4gSSBmZWVsIG11Y2ggYmV0dGVyIGFib3V0IHRoaXMgbm93LlxuXG5BbmQgdGhlcmUncyB0aGlzIGBTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZGAgdmFyaWFibGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHRoZSBzaXplIGhlcmUsIHNvIGxldCBtZSBxdWlja2x5IGNyb3NzLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0IHRsYl9zbGF2ZV9pbmZvYCB0byBtYWtlIGNlcnRhaW4gd2hldGhlciBpdCdzIGEgYGxvbmcgbG9uZ2AsIGEgYHUzMmAsIG9yIGEgYGxvbmdgLiBJJ2QgcHJlZmVyIGEgYGxvbmcgbG9uZ2AgZm9yIHRoZSBzYW1lIHJlYXNvbiAtIGF2b2lkIGFuIG92ZXJmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MzEuNzA0MTcwMzE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc3MDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGxiX3NsYXZlX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE5MT1zdGF0aWMgc3RydWN0IHNsYXZlICpfX3RsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjAzLVxcdFxcdGlmIChhc3NpZ25lZF9zbGF2ZSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMDQ6XFx0XFx0XFx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvICpzbGF2ZV9pbmZvID1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjA1LVxcdFxcdFxcdFxcdFxcdTAwMjYoU0xBVkVfVExCX0lORk8oYXNzaWduZWRfc2xhdmUpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MzEuNzY0OTQ4NzQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYwMjI1NTM2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBzdHJ1Y3QgdGxiX3NsYXZlX2luZm9gIGluIG5ldC9ib25kX2FsYi5oKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0bGJfc2xhdmVfaW5mb2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBhbmQgbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBJJ20gcHJldHR5IHN1cmUgaXQncyBnb2luZyB0byBiZSBpbiBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAuIEkndmUgd29ya2VkIHdpdGggYm9uZGluZyBkcml2ZXJzIGJlZm9yZSwgYW5kIHRoZSBBY3RpdmUtQmFja3VwIChhbGIpIG1vZGUgZGVmaW5pdGVseSByZWxpZXMgb24gdHJhY2tpbmcgc2xhdmUgaW50ZXJmYWNlcyBhbmQgdGhlaXIgcHJvcGVydGllcy4gYHRsYl9zbGF2ZV9pbmZvYCBsaWtlbHkgaG9sZHMgdGhlIHJlbGV2YW50IHN0YXRlIGluZm9ybWF0aW9uIHNwZWNpZmljYWxseSBmb3IgVExCIChUcmFuc21pdCBMb2FkIEJhbGFuY2luZykgbW9kZSwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBJdCBtYWtlcyBzZW5zZSB0aGlzIHdvdWxkIGJlIHBsYWNlZCB3aXRoaW4gYm9uZGluZyBoZWFkZXIgZmlsZXMsIGdpdmVuIHRoZSBzcGVjaWZpYyBmZWF0dXJlc2V0IHByb3ZpZGVkLiBMZXQgbWUgcHVsbCBpdCB1cCBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZSwgYW5kIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIHN0cnVjdCBpbnRlcmFjdHMgd2l0aCB0aGUgbGFyZ2VyIGJvbmRpbmcgZHJpdmVyIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjM3Ljc4NzUwNzQ1N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2OTM1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB0bGJfc2xhdmVfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ib25kX2FsYi5oPTk0PXN0cnVjdCBybGJfY2xpZW50X2luZm8ge1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaC0xMTQtXFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxMTU6c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcXG5pbmNsdWRlL25ldC9ib25kX2FsYi5oLTExNi1cXHR1MzIgaGVhZDtcXHQvKiBJbmRleCB0byB0aGUgaGVhZCBvZiB0aGUgYmktZGlyZWN0aW9uYWwgY2xpZW50c1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oPTE1Nz1zdHJ1Y3Qgc2xhdmUge1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE4MS1cXHRzdHJ1Y3QgYWRfc2xhdmVfaW5mbyAqYWRfaW5mbztcXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6MTgyOlxcdHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB0bGJfaW5mbztcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTgzLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjozNy45MjQ0NTAyMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgzMTMyNjg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBib25kX2FsYi5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQWN0aXZlLUJhY2t1cCAoQUxCKSBib25kaW5nIGRyaXZlcidzIGltcGxlbWVudGF0aW9uLiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNS4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgYXJlYSBiZWNhdXNlLi4uIHdlbGwsIGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCdzIGEgbGlrZWx5IHNwb3QgZm9yIHRoZSBoZWFydCBvZiB0aGUgQUxCIGxvZ2ljLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGludGVyZmFjZSBzZWxlY3Rpb24gb3IgZmFpbG92ZXIuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgYWN0aXZlLWJhY2t1cCBzZWxlY3Rpb24gcHJvY2Vzcy4gSG9wZWZ1bGx5LCBpdOKAmWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaG93IHRoZSBhY3RpdmUgaW50ZXJmYWNlIGlzIGRldGVybWluZWQgYW5kIHN3aXRjaGVkLiBUaW1lIHRvIGdldCB0byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjM5Ljc1NTc4MDIzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcXG4gMTE2OlxcdFxcdHUzMiBoZWFkO1xcdC8qIEluZGV4IHRvIHRoZSBoZWFkIG9mIHRoZSBiaS1kaXJlY3Rpb25hbCBjbGllbnRzXFxuIDExNzpcXHRcXHRcXHRcXHQgKiBoYXNoIHRhYmxlIGVudHJpZXMgbGlzdC4gVGhlIGVudHJpZXMgaW4gdGhlIGxpc3RcXG4gMTE4OlxcdFxcdFxcdFxcdCAqIGFyZSB0aGUgZW50cmllcyB0aGF0IHdlcmUgYXNzaWduZWQgdG8gdXNlIHRoaXNcXG4gMTE5OlxcdFxcdFxcdFxcdCAqIHNsYXZlIGZvciB0cmFuc21pdC5cXG4gMTIwOlxcdFxcdFxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0dTMyIGxvYWQ7XFx0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xcbiAxMjI6XFx0XFx0XFx0XFx0ICogYXNzaWduZWQgdG8gaXRcXG4gMTIzOlxcdFxcdFxcdFxcdCAqL1xcbiAxMjQ6XFx0fTtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0c3RydWN0IGFsYl9ib25kX2luZm8ge1xcbiAxMjc6XFx0XFx0c3RydWN0IHRsYl9jbGllbnRfaW5mb1xcdCp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi9cXG4gMTI4OlxcdFxcdHUzMlxcdFxcdFxcdHVuYmFsYW5jZWRfbG9hZDtcXG4gMTI5OlxcdFxcdGF0b21pY190XFx0XFx0dHhfcmViYWxhbmNlX2NvdW50ZXI7XFxuIDEzMDpcXHRcXHRpbnRcXHRcXHRcXHRscF9jb3VudGVyO1xcbiAxMzE6XFx0XFx0LyogLS0tLS0tLS0gcmxiIHBhcmFtZXRlcnMgLS0tLS0tLS0gKi9cXG4gMTMyOlxcdFxcdGludCBybGJfZW5hYmxlZDtcXG4gMTMzOlxcdFxcdHN0cnVjdCBybGJfY2xpZW50X2luZm9cXHQqcnhfaGFzaHRibDtcXHQvKiBSZWNlaXZlIGhhc2ggdGFibGUgKi9cXG4gMTM0OlxcdFxcdHUzMlxcdFxcdFxcdHJ4X2hhc2h0YmxfdXNlZF9oZWFkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjozOS43NTU4OTI0NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTgyNzA1OTA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFdvcnRoaW5lc3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgYSBtaW5vciBjb2RlIGFkanVzdG1lbnQgd2l0aGluIHRoZSBib25kaW5nIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCdzIGEgY2hhbmdlIHRvIHRoZSBwYXJlbnRoZXNlcyBhcm91bmQgdGhlIGFyaXRobWV0aWMgY2FsY3VsYXRpb24gd2l0aGluIHRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uLiBCb3RoIGBzbGF2ZS1cdTAwM2VzcGVlZGAgYW5kIGBsb2FkYCBhcmUgYHUzMmAsIGFuZCB0aGUgcGF0Y2ggZXNzZW50aWFsbHkgYWRqdXN0cyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBjb252ZXJ0aW5nIHRoZXNlIHZhbHVlcy5cblxuVGhlIGtleSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyByZWFjaGFiaWxpdHkuIENhbiB0aGlzIGNvZGUgYWN0dWFsbHkgKmV4ZWN1dGUqIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gVGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgaXMgY2xlYXI6IHJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLiBJZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSwgd2UgZG9uJ3QgYm90aGVyIGZ1enppbmcsIHJlZ2FyZGxlc3Mgb2YgYXNzZXJ0aW9ucyBvciBsb2dpYy5cblxuR29vZCBuZXdzOiB0aGUgYm9uZGluZyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ib25kaW5nL2ApIGlzIGluZGVlZCByZWFjaGFibGUuIEl0J3MgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciwgYW5kIHdlIGNhbiBjb25maWd1cmUgaXQgdXNpbmcgYHJ0bmV0bGlua2Ag4oCTIHRoYXQgbWVhbnMgYGlwIGxpbmsgYWRkIC4uLiB0eXBlIGJvbmQgLi4uYCBhbmQgYWxsIHRoYXQuIFdlIGNhbiBhdHRhY2ggc2xhdmVzIChsaWtlIGBkdW1teWAsIGB2ZXRoYCwgb3IgYHRhcGApLCBhbmQgd2UgY2FuIHRyYW5zbWl0IHBhY2tldHMuIFN5emthbGxlciBjYW4gZWFzaWx5IGhhbmRsZSB0aGlzIGtpbmQgb2YgY29uZmlndXJhdGlvbiwgd2hpY2ggbWFrZXMgdGhpbmdzIGV2ZW4gZWFzaWVyLiBTbywgcmVhY2hhYmlsaXR5IGlzIGNvbmZpcm1lZC5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHRoZSBldmFsdWF0aW9uIGNyaXRlcmlhLCBhbmQgc2VlIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZzpcblxuKiAgICoqUmVhY2hhYmlsaXR5OioqIFdlJ3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiByZWFjaGFibGUuIFRoZSBib25kaW5nIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rLCBzYXRpc2Z5aW5nIHRoZSBmaXJzdCBjcml0ZXJpb24uXG4qICAgKipcIk5vIEZ1bmN0aW9uYWwgQ2hhbmdlXCIgb3IgUmVmYWN0b3JpbmcgQ2xhaW1zOioqIFdoaWxlIGl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZywgbGV0J3Mgbm90IHRydXN0IHRoZSBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgY2xhaW1zIGJsaW5kbHkuIEl0J3MgYSBjYWxjdWxhdGlvbiwgc28gaXQgY291bGQgYWZmZWN0IHBlcmZvcm1hbmNlIChhbHRob3VnaCBJJ2QgZXhwZWN0IGl0IHRvIGJlIG1pbm9yKSBvciBwb3RlbnRpYWxseSBldmVuIHRoZSBiZWhhdmlvciB1bmRlciBleHRyZW1lIGNpcmN1bXN0YW5jZXMuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGZ1enplZC5cbiogICAqKkFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6KiogV2hpbGUgdGhlcmUgYXJlbid0IGFueSAqbmV3KiBhc3NlcnRpb25zIGFkZGVkIHdpdGggdGhpcyBjaGFuZ2UsIHRoZSBleGlzdGluZyBjb2RlIGNvdWxkIGJlIHRlc3RlZCBpbiBhIGRpZmZlcmVudCB3YXkgZHVlIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSB2YWx1ZSB1c2VkIGZvciBsb2FkIGJhbGFuY2luZy5cbiogICAqKlJlYWNoYWJpbGl0eToqKiB0aGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gQm9uZGluZyBpcyBhIHJlYWNoYWJsZSBkcml2ZXIgYWNjZXNzaWJsZSB2aWEgbmV0bGluayAocnRsaW5rKS5cbiogICBgY29tcHV0ZV9nYXBgIGlzIGNhbGxlZCBieSBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBBTEIgLyBUTEIgbW9kZVxuXG5HaXZlbiBhbGwgdGhpcywgSSdtIGxlYW5pbmcgdG93YXJkIGEgKipXb3J0aEZ1enppbmc9dHJ1ZSoqIGFzc2Vzc21lbnQuIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIOKAkyBhIGRyaXZlciBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayDigJMgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbidzIHJlc3VsdCBpcyB1c2VkIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYmVoYXZpb3IgY2hhbmdlcyBmcm9tIHRoZSByZS1hcnJhbmdlbWVudCBvZiB0aGUgYXJpdGhtZXRpYywgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcHJvYmFibHkgd2FudCB0byBsb29rIGF0IGFsbCBjYWxsZXJzIG9mIGJvdGggYGNvbXB1dGVfZ2FwYCBhbmQgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgY29tcGxldGVseSwgYnV0IHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaW5kaWNhdGVzIGZ1enppbmcgaXMgdGhlIHJpZ2h0IGNhbGwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjQ1LjU4Mjk1NDY4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMzgyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE2MT1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjc6c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTkxPXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKl9fdGxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBib25kaW5nICpib25kLCB1MzIgaGFzaF9pbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMDAtXFx0aWYgKCFhc3NpZ25lZF9zbGF2ZSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMDE6XFx0XFx0YXNzaWduZWRfc2xhdmUgPSB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShib25kKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjo0NS42MzIzMDIzMDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMxOTM1MTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gS25vd2luZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBjcml0aWNhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsb2dpYyBmbG93IGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQncyBvcGVyYXRpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAgaXMgYmVpbmcgdXNlZC4gVGhpcyBjb3VsZCBiZSB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIHBvdGVudGlhbGx5IGluIGRldmljZSBkcml2ZXJzLCBvciBldmVuIGluIHVzZXItc3BhY2UgbGlicmFyaWVzIGlmIHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdGhhdCB3YXkuIEdyYWJiaW5nIHRoZSBjYWxsIGdyYXBoIHF1aWNrbHkgc2hvdWxkIHBhaW50IHRoZSBwaWN0dXJlLiBJIG5lZWQgdG8gc2VlIGhvdyBmcmVxdWVudGx5IGl04oCZcyBjYWxsZWQsIHdoYXQgZGF0YSBpcyBwYXNzZWQgdG8gaXQsIGFuZCwgaWRlYWxseSwgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBjb2RlIHBhdGhzIGF0IHRoZSBjYWxsIHNpdGUuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGRlcGVuZGVuY2llcywgb3IgYXJlYXMgdGhhdCBtaWdodCBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uIG9yLCBjb252ZXJzZWx5LCB0aGF0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgYSBzdWJ0bGUgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NDcuOTUxNjU2MjQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk0NDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3RsYl9jaG9vc2VfY2hhbm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTY3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5MC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTkxOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKl9fdGxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBib25kaW5nICpib25kLCB1MzIgaGFzaF9pbmRleCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTkyLVxcdFxcdFxcdFxcdFxcdFxcdHUzMiBza2JfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNi1cXHRzcGluX2xvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzNzpcXHR0eF9zbGF2ZSA9IF9fdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsIGhhc2hfaW5kZXgsIHNrYl9sZW4pO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzgtXFx0c3Bpbl91bmxvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjQ4LjAwMjYwODY1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTcwMzE2Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBTEIgVHJhbnNtaXQgUGF0aCoqXG5cbkFscmlnaHQsIHNvIGB0bGJfY2hvb3NlX2NoYW5uZWxgIGlzIGJlaW5nIGludm9rZWQgd2l0aGluIGBib25kX2FsYl94bWl0YC4gVGhhdCdzIGluIHRoZSBgYm9uZF9hbGIuY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGFjdGl2ZS1iYWNrdXAgbG9hZCBiYWxhbmNpbmcgbW9kdWxlLiBUaW1lIHRvIGRpdmUgaW50byBgYm9uZF9hbGJfeG1pdGAgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5uZWwgc2VsZWN0aW9uIGlzIGJlaW5nIG1hZGUgZHVyaW5nIHRyYW5zbWl0LCByaWdodD8gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBxdWVzdGlvbnMgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQgZGF0YSBpcyBhdmFpbGFibGUgdG8gYGJvbmRfYWxiX3htaXRgIHdoZW4gaXQgY2FsbHMgdGhlIHNlbGVjdGlvbiBmdW5jdGlvbj8gV2hhdCBjcml0ZXJpYSBpcyBgdGxiX2Nob29zZV9jaGFubmVsYCB1c2luZz8gSXMgaXQgbG9va2luZyBhdCBsaW5rIHN0YXRlLCBxdWV1ZSBsZW5ndGgsIG9yIHNvbWUgb3RoZXIgbWV0cmljPyBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIG9yIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBjaGFubmVsIHNlbGVjdGlvbiBwcm9jZXNzPyBUaW1lIHRvIHJldmlldyB0aGUgY29kZSBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NTAuMTcyOTI4Njk0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk1Nzc1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bGJfY2hvb3NlX2NoYW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE2Nz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xOTAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE5MTpzdGF0aWMgc3RydWN0IHNsYXZlICpfX3RsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5Mi1cXHRcXHRcXHRcXHRcXHRcXHR1MzIgc2tiX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMjYtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIyNzpzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMjgtXFx0XFx0XFx0XFx0XFx0dTMyIHNrYl9sZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjMyLVxcdC8qIFdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBzb2Z0aXJxIGhlcmUsIGJlY2F1c2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlxcdCAqIHRsYl9jaG9vc2VfY2hhbm5lbCgpIGlzIG9ubHkgY2FsbGVkIGJ5IGJvbmRfYWxiX3htaXQoKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzQtXFx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzYtXFx0c3Bpbl9sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMzc6XFx0dHhfc2xhdmUgPSBfX3RsYl9jaG9vc2VfY2hhbm5lbChib25kLCBoYXNoX2luZGV4LCBza2JfbGVuKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM4LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzNzg9c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzk2LVxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTM5NzpcXHRcXHRcXHRcXHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzk4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MjU9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTA4LVxcdFxcdFxcdGhhc2hfaW5kZXggPSBfc2ltcGxlX2hhc2goaGFzaF9zdGFydCwgaGFzaF9zaXplKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUwOTpcXHRcXHRcXHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLCBoYXNoX2luZGV4LCBza2ItXFx1MDAzZWxlbik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MTAtXFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NTAuMjIyODk0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDM5MTcyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUmVhY2hpbmcgVmlydHVhbGl6ZWQgTmlydmFuYSoqXG5cblJpZ2h0LCB0aGlzIGxvb2tzIGVudGlyZWx5IGFjaGlldmFibGUgd2l0aGluIHRoZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBsYW5kc2NhcGUuIFdlIGNhbiBhYnNvbHV0ZWx5IGNvbmZpZ3VyZSBib25kaW5nIGRldmljZXMgYW5kIHJvdXRlIHBhY2tldHMgdGhyb3VnaCB0aGVtLiBOb3RoaW5nIGdyb3VuZGJyZWFraW5nIGhlcmUuIE5vdywgdGhlIGtleSBpcyB0byBlbnN1cmUgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIHByb3Blcmx5IGNvbXBpbGVkLiBMZXQncyBkaWcgaW50byBLY29uZmlnIGFuZCBjb25maXJtIGl0J3MgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGJlIGNlcnRhaW4uIEknbGwgYWxzbyB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmYXVsdCBvcHRpb25zLCBidXQgSSB0aGluayB0aGF0IGlzIHRoZSByaWdodCBkaXJlY3Rpb24uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjUyLjY2MjA2OTY3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MzgyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NTIuODAxNDYxOTMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NjUxNTYxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgYXJvdW5kIGxpbmUgNDAuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBkcml2ZXJzIHdpbGwgbGlrZWx5IHJlc2lkZS4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgYW5kIHBlcmhhcHMgaWRlbnRpZnkgdGhlIHNwZWNpZmljIG9wdGlvbnMgdGhhdCBhcmUgaW5mbHVlbmNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG1vZHVsZXMgdGhhdCBJIGFtIGludGVyZXN0ZWQgaW4uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NTYuMjY2NjIxMTA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQk9ORElOR1xcbiAgNDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICdib25kJyBtdWx0aXBsZSBFdGhlcm5ldFxcbiAgNDc6XFx0XFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJ0V0aGVyY2hhbm5lbCcgYnkgQ2lzY28sXFxuICA0ODpcXHRcXHQgICdUcnVua2luZycgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJ0JvbmRpbmcnIGluIExpbnV4LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXFxuICA1MTpcXHRcXHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgUmVmZXIgdG8gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiAgNTQ6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBEVU1NWVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjo1Ni4yNjY3MTIyNTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzgyMjg5ODI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQm9uZGluZyBNb2R1bGUgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGJvbmRfYWxiLmNgIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3IgYnVpbGQgaW5zdHJ1Y3Rpb25zLCBhbmQgSSdtIHN1cmUgaXQnbGwgaG9sZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgZm9yIHRoaXMgc3BlY2lmaWMgZmlsZS4gTGV0J3Mgc2VlIHdoYXQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBpdCBkZWZpbmVzLiBUaGlzIGlzIHVzdWFsbHkgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgYnVpbGQgc3lzdGVtLiBJJ20gZXhwZWN0aW5nIHN0YW5kYXJkIG9iamVjdCBmaWxlIGdlbmVyYXRpb24sIGxpbmtpbmcsIGFuZCBwcm9iYWJseSBzb21lIGtlcm5lbCBtb2R1bGUgbWFnaWMuIExldCdzIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzowMC4wODk2MTI4NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIEV0aGVybmV0IEJvbmRpbmcgZHJpdmVyXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19CT05ESU5HKSArPSBib25kaW5nLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0Ym9uZGluZy1vYmpzIDo9IGJvbmRfbWFpbi5vIGJvbmRfM2FkLm8gYm9uZF9hbGIubyBib25kX3N5c2ZzLm8gYm9uZF9zeXNmc19zbGF2ZS5vIGJvbmRfZGVidWdmcy5vIGJvbmRfbmV0bGluay5vIGJvbmRfb3B0aW9ucy5vXFxuICAgOTpcXHRcXG4gIDEwOlxcdHByb2MtJChDT05GSUdfUFJPQ19GUykgKz0gYm9uZF9wcm9jZnMub1xcbiAgMTE6XFx0Ym9uZGluZy1vYmpzICs9ICQocHJvYy15KVxcbiAgMTI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM3OjAwLjA4OTY4MTgzNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MDE3MzU3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCb25kaW5nIE1vZHVsZSBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYm9uZGluZyBtb2R1bGUncyBidWlsZCBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYm9uZF9hbGIub2AgaXMgYWx3YXlzIGluY29ycG9yYXRlZCBpbnRvIGBib25kaW5nLm9gIHdoZW4gYENPTkZJR19CT05ESU5HYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IGBDT05GSUdfQk9ORElOR2AgaXRzZWxmIGRlcGVuZHMgb24gYElORVRgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgY292ZXJlZCBhbGwgdGhlIGRlcGVuZGVuY2llcywgdGhvdWdoLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIGludm9sdmVkPyBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBgTkVUX0NPUkVgIOKAkyB0aGF0J3MgYSBtZW51IG9yIGJvb2xlYW4sIElJUkMuXG5cbk5vdywgbGV0J3MgdHVybiBteSBhdHRlbnRpb24gdG8gYGNvbXB1dGVfZ2FwYC4gSSBzZWUgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpYC4gQmVjYXVzZSBpdCdzIHN0YXRpYyBhbmQgKm5vdCogZXhwbGljaXRseSBpbmxpbmVkIChvciBhdCBsZWFzdCwgSSBkb24ndCBzZWUgdGhlIGlubGluZSBrZXl3b3JkKSB0aGF0IG1lYW5zIGl0ICpjb3VsZCogaGF2ZSBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIEkgc2hvdWxkIGJlIGluY2x1ZGluZyBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgX190bGJfY2hvb3NlX2NoYW5uZWxgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBvciBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYC4gTGV0J3MgY29uZmlybSB0aGF0IGBjb21wdXRlX2dhcGAgaXMgc3RhdGljIGFuZCBub24taW5saW5lOiBZZXAsIHRoZSBkZWZpbml0aW9uIGNvbmZpcm1zIHRoYXQ6IGBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpYC4gSSBkb24ndCBzZWUgdGhlIGBpbmxpbmVgIGtleXdvcmQuIFNpbmNlIGl0J3MgYSBzbWFsbCBmdW5jdGlvbiBhbmQgaGFzIG9ubHkgYSBzaW5nbGUgY2FsbCBzaXRlLCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBoYXZlIGlubGluZWQgaXQgaW50byBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLlxuXG5gdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIGlzIGFsc28gc3RhdGljLCBhbmQgaXQncyBjYWxsZWQgd2l0aGluIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAuIExldCdzIGRvdWJsZS1jaGVjayBpZiBpdCdzIGV4cG9ydGVkIG9yIHN0YXRpYzogYHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKWAuIFNvLCBpdCdzIHN0YXRpYyB0b28uXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YD8gVGhvc2UgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBhcmUgY2FsbGVkIGZyb20gYGJvbmRfbWFpbi5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIHRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbCBzaXRlcyBmb3IgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzowNy4xMDcwNDM2MjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzc4MTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kX3htaXRfLipfc2xhdmVfZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzQ1PXN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNzctXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzNzg6c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM3OS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MTY9bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQyMC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyMTpcXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjItXFx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQyNC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyNTpzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDI2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTUyOT1uZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMzLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTM0OlxcdHR4X3NsYXZlID0gYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzNS1cXHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDkzMz1zdGF0aWMgdTMyIGJvbmRfcnJfZ2VuX3NsYXZlX2lkKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00OTU3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDk1ODpzdGF0aWMgc3RydWN0IHNsYXZlICpib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00OTU5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00OTk2PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeGRwX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwMTAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDExOlxcdC8qIFNlZSBjb21tZW50IG9uIElHTVAgaW4gYm9uZF94bWl0X3JvdW5kcm9iaW5fc2xhdmVfZ2V0KCkgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwMTItXFx0aWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9JUCkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTAzNz1zdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF94bWl0X3JvdW5kcm9iaW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTA0Mi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNDM6XFx0c2xhdmUgPSBib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNDQtXFx0aWYgKGxpa2VseShzbGF2ZSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNDktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDUwOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTA1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUwNTg9c3RhdGljIG5ldGRldl90eF90IGJvbmRfeG1pdF9hY3RpdmViYWNrdXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTA2My1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNjQ6XFx0c2xhdmUgPSBib25kX3htaXRfYWN0aXZlYmFja3VwX3NsYXZlX2dldChib25kKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNjUtXFx0aWYgKHNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01MTU4PWludCBib25kX3VwZGF0ZV9zbGF2ZV9hcnIoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2tpcHNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjI3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTIyODpzdGF0aWMgc3RydWN0IHNsYXZlICpib25kX3htaXRfM2FkX3hvcl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjI5LVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01Mjk2PXN0YXRpYyBuZXRkZXZfdHhfdCBib25kXzNhZF94b3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MzAzLVxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUzMDQ6XFx0c2xhdmUgPSBib25kX3htaXRfM2FkX3hvcl9zbGF2ZV9nZXQoYm9uZCwgc2tiLCBzbGF2ZXMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTMwNS1cXHRpZiAobGlrZWx5KHNsYXZlKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQxMz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfeG1pdF9nZXRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlcl9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjItXFx0Y2FzZSBCT05EX01PREVfUk9VTkRST0JJTjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0MjM6XFx0XFx0c2xhdmUgPSBib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjQtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDI1LVxcdGNhc2UgQk9ORF9NT0RFX0FDVElWRUJBQ0tVUDpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0MjY6XFx0XFx0c2xhdmUgPSBib25kX3htaXRfYWN0aXZlYmFja3VwX3NsYXZlX2dldChib25kKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjctXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MzMtXFx0XFx0XFx0c2xhdmVzID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXFx1MDAzZXVzYWJsZV9zbGF2ZXMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQzNDpcXHRcXHRzbGF2ZSA9IGJvbmRfeG1pdF8zYWRfeG9yX3NsYXZlX2dldChib25kLCBza2IsIHNsYXZlcyk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDM1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDM4LVxcdGNhc2UgQk9ORF9NT0RFX0FMQjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0Mzk6XFx0XFx0c2xhdmUgPSBib25kX3htaXRfYWxiX3NsYXZlX2dldChib25kLCBza2IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ0MC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NDEtXFx0Y2FzZSBCT05EX01PREVfVExCOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ0MjpcXHRcXHRzbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDQzLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NjEwPWJvbmRfeGRwX2dldF94bWl0X3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU2MjItXFx0Y2FzZSBCT05EX01PREVfQUNUSVZFQkFDS1VQOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTYyMzpcXHRcXHRzbGF2ZSA9IGJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KGJvbmQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTYyNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6Mzc6MDcuMjc0ODMyOTY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc5MTQzODczNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgQm9uZGluZyBUcmFuc21pc3Npb24gTW9kZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgYm9uZGluZyBkcml2ZXIgaGFuZGxlcyB0cmFuc21pdCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gQUxCIGFuZCBUTEIgbW9kZXMuIEl0IGxvb2tzIGxpa2UgYGJvbmRfYWxiX3htaXRgIGFuZCBgYm9uZF90bGJfeG1pdGAgYXJlIHRoZSBzdGFydGluZyBwb2ludHMg4oCTIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9ucyBmb3IgdGhlc2UgbW9kZXMuICBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBGb2N1c1N5bWJvbHNgIHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQuXG5cbkxldCdzIHNlZTogYGNvbXB1dGVfZ2FwYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIEkgdGhpbmsgd2FzIG1vZGlmaWVkLCB0aGVuIGB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZWAsIHdoaWNoIGRpcmVjdGx5IGNhbGxzIGl0LiBPZiBjb3Vyc2UsIGBib25kX2FsYl94bWl0YCBhbmQgYGJvbmRfdGxiX3htaXRgIGFyZSB0aGVyZSwgdGhlIGNvcmUgb2YgdGhlIHRyYW5zbWlzc2lvbiBsb2dpYyBmb3IgZWFjaCBib25kaW5nIG1vZGUuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNsYXZlIHNlbGVjdGlvbiwgc28gYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhcmUgaW1wb3J0YW50IHRvIG5vdGUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiAgYGNvbXB1dGVfZ2FwYCDigJMgSSdsbCBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBpdCdzIHN0YXRpYy4uLiB5ZXMsIGdvb2QuIFRoaXMgbWFrZXMgc2Vuc2UuIEl0J3MgbGlrZWx5IGFuIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb24uIFNpbWlsYXJseSwgSSdsbCBjaGVjayBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIOKAkyBhbmQgeWVzLCB0aGF0J3MgYWxzbyBzdGF0aWMsIGFzIGV4cGVjdGVkLCBhcyBpdCdzIGFuIGludGVybmFsIHBhcnQgb2YgdGhlIFRMQiBsb2dpYy5cblxuQnV0IGBib25kX2FsYl94bWl0YC4uLiBhaCwgdGhhdCdzICpub3QqIHN0YXRpYy4gVGhpcyBtZWFucyBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuIEl0J3MgdXNlZCBzb21ld2hlcmUgaW4gYGJvbmRfbWFpbi5jYCDigJMgcHJvYmFibHkgdmlhIHRoZSBgbmV0ZGV2X29wc2Agc3RydWN0dXJlIG9yIHRoZSBib25kIG1vZGUgaGFuZGxlcnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVzZWQgYmVjYXVzZSB0aGF0J3Mga2V5LiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGVpciBkZWZpbml0aW9uIGFuZCB1c2FnZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6Mzc6MTUuMTg5MjIzMjMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg3NzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kX2FsYl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0yMjc9c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBib25kaW5nICpib25kLCB1MzIgaGFzaF9pbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzItXFx0LyogV2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHNvZnRpcnEgaGVyZSwgYmVjYXVzZVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMzM6XFx0ICogdGxiX2Nob29zZV9jaGFubmVsKCkgaXMgb25seSBjYWxsZWQgYnkgYm9uZF9hbGJfeG1pdCgpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNC1cXHQgKiB3aGljaCBhbHJlYWR5IGhhcyBzb2Z0aXJxIGRpc2FibGVkLlxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MjU9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTI4LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTI5Om5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTU1MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19ib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3Ni1cXHRjYXNlIEJPTkRfTU9ERV9BTEI6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc3OlxcdFxcdHJldHVybiBib25kX2FsYl94bWl0KHNrYiwgZGV2KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzgtXFx0Y2FzZSBCT05EX01PREVfVExCOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoxNS4yMzgxMDkzMTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE0NDg5MDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKk15IERlZXAgRGl2ZSBpbnRvIGBib25kX3RsYl94bWl0YCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgYm9uZF90bGJfeG1pdGAsIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGRpc3NlY3RpbmcgdGhlIGltcGxpY2F0aW9ucy4gSXQncyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIGJvbmRpbmcgYW5kLCBtb3N0IGxpa2VseSwgdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlcnMuIEluIG15IGV4cGVyaWVuY2UsIGl0J3MgYWxtb3N0IGNlcnRhaW5seSBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIHBhY2tldHMgYWNyb3NzIGJvbmRlZCBuZXR3b3JrIGludGVyZmFjZXMsIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIGludm9sdmluZyBsb2FkIGJhbGFuY2luZyBvciBmYWlsb3Zlci4gSSdtIHZpc3VhbGl6aW5nIHRoZSBuZXR3b3JrIHN0YWNrLCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyLWxldmVsIGRyaXZlcnMsIHRoZSBib25kaW5nIG1vZHVsZSBpdHNlbGYsIGFuZCB0aGUgb3ZlcmFsbCBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LlxuXG5JJ20gc3RhcnRpbmcgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpc3N1ZXM6IGNhY2hlIGNvaGVyZW5jeSwgdGhlIGltcGFjdCBvZiBkaWZmZXJlbnQgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhlIHBvc3NpYmxlIGVkZ2UgY2FzZXMgYXJpc2luZyBmcm9tIGEgdmFyaWV0eSBvZiBib25kaW5nIG1vZGVzLiBJIHdvbmRlciBpZiBpdCdzIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIGJlY2F1c2UgaWYgaXQncyBub3QgYW5kIHdlIGFyZSB1c2luZyBpdCBvbiBhIHN5c3RlbSwgc2F5IHdpdGggYSBwYXJ0aWN1bGFyIE5JQyBjaGlwc2V0LCB0aGVyZSBtYXkgYmUgc29tZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGVyZS4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyBpdCBtaWdodCBoYXZlLiBEb2VzIGl0IGVtcGxveSBzcGlubG9ja3MsIG11dGV4ZXMsIG9yIHNvbWUgbW9yZSBzb3BoaXN0aWNhdGVkIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0cmFuc21pc3Npb24/IEEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIChJJ2QgYmUgd2FudGluZyB0byBkbyB0aGF0IGFzIHNvb24gYXMgSSBjYW4sIG9mIGNvdXJzZSkgd291bGQgcXVpY2tseSB2ZXJpZnkgbXkgc3VzcGljaW9ucy4gXG5cbkknbSBjb25zaWRlcmluZyB0aGUgY29udGV4dDogaXMgdGhpcyBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgb3IgYSBsYXllciBvbiB0b3A/IEhvdyBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBhbmQgaG93IGRvZXMgaXQgZGVhbCB3aXRoIHRoZSB2YXJpb3VzIG5ldHdvcmsgaGVhZGVycywgVkxBTiB0YWdzLCBhbmQgY2hlY2tzdW0gY2FsY3VsYXRpb25zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHByb2Nlc3M/IEFsc28sIGVycm9yIGhhbmRsaW5nIGlzIGFuIGltcG9ydGFudCB0aGluZyB0byBsb29rIGF0LiBBcmUgdGhlcmUgcm9idXN0IGVycm9yIGNoZWNrcyBhbmQgZmFsbGJhY2sgbWVjaGFuaXNtcyBpbiBwbGFjZT8gRmFpbHVyZXMgaGVyZSBjYW4gaGF2ZSBwcmV0dHkgc2VyaW91cyBjb25zZXF1ZW5jZXMuIEZpbmFsbHksIHRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgdGhpcywgdGhlIG1vcmUgbXkgaW50ZXJlc3QgaXMgcGlxdWVkLiBJJ20gYmV0dGluZyB0aGF0IHRoaXMgbGl0dGxlIGZ1bmN0aW9uIGhvbGRzIGEga2V5IHRvIHVuZGVyc3RhbmRpbmcgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIG5ldHdvcmsgYmVoYXZpb3IuIEkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIHJlYWQgdGhlIHNvdXJjZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTYzOTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoxOS4zODMwMDIzNzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzU2NzcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kX3RsYl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzc4PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQxNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQxNjpuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTA9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzgtXFx0Y2FzZSBCT05EX01PREVfVExCOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU3OTpcXHRcXHRyZXR1cm4gYm9uZF90bGJfeG1pdChza2IsIGRldik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM3OjE5LjY0MDU4MDQ1MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTk1MDMwNDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJvbmRpbmcgQUxCL1RMQiBUcmFuc21pdCBNb2RlIENvZGUgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHNldCBvZiBmdW5jdGlvbnM6IGBjb21wdXRlX2dhcGAsIGB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZWAsIGBib25kX2FsYl94bWl0YCwgYGJvbmRfdGxiX3htaXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBhbmQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YC4gVGhlc2UgYXJlbid0IGdlbmVyaWMsIHRoZXkncmUgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYm9uZGluZydzIEFkYXB0aXZlIExvYWQgQmFsYW5jaW5nIChBTEIpIGFuZCBUcmFuc21pdCBMb2FkIEJhbGFuY2luZyAoVExCKSBtb2Rlcy4gRmlyc3QsIGxldCdzIHNlZSBpZiB3ZSBjYW4gZW5hYmxlIHRoZW0uXG5cbkNoZWNraW5nIGBFbmFibGVDb25maWdzYCwgSSBzZWUgdGhhdCBgQk9ORElOR2AgaXMgdGhlIGtleS4gQW5kLCBvZiBjb3Vyc2UsIHRoYXQgZGVwZW5kcyBvbiBgSU5FVGAuIFRoZW4sIGEgcXVpY2sgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlYCBjb25maXJtcyBgb2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub2AsIGFuZCBgQ09ORklHX0JPTkRJTkdgICpkb2VzKiBpbmRlZWQgZGVwZW5kIG9uIGBDT05GSUdfSU5FVGAuIFNvLCBgQk9ORElOR2AgYW5kIGBJTkVUYCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZS5cblxuTm93IGZvciB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgQUxCIGFuZCBUTEIgbW9kZXMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGFyZSBlYXNpbHkgY29uZmlndXJlZCBpbiBtYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gWW91IGNhbiByZWFkaWx5IHNldCB0aGVzZSB1cCB1c2luZyB2aXJ0dWFsIG5ldGRldnMgbGlrZSB2ZXRoIG9yIGR1bW15IGRldmljZXMsIGFuZCBjb250cm9sIHRoZW0gdXNpbmcgcnRuZXRsaW5rIG9yIHN5c2ZzLiBNYWtlcyBmb3Igc2ltcGxlIHRlc3RpbmcuXG5cbkRvZXMgdGhlIGNoYW5nZSBhY3R1YWxseSBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlPyBZZXMsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSAzMi1iaXQgc2hpZnQgb3ZlcmZsb3cgaW4gYGNvbXB1dGVfZ2FwKClgLiBTbyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBkb3VibGUgY2hlY2sgdGhlIGBGb2N1c1N5bWJvbHNgLiBZdXAsIGBjb21wdXRlX2dhcGAsIGB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZWAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGBib25kX2FsYl94bWl0YCwgYGJvbmRfdGxiX3htaXRgIGFyZSBhbGwgY29ycmVjdCBhbmQgcmVsZXZhbnQuXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuXG5cbi0gICBgV29ydGhGdXp6aW5nYDogVHJ1ZVxuLSAgIGBSZWFzb25pbmdgOiBXZSd2ZSBnb3QgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBgY29tcHV0ZV9nYXAoKWAgdGhhdCdzIGJlZW4gZml4ZWQuIFRoZSBmaXggaW52b2x2ZXMgY2FzdGluZyB0byBgczY0YCBiZWZvcmUgc2hpZnRpbmcgYHNsYXZlLVx1MDAzZXNwZWVkYCBhbmQgYGxvYWRgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGJvbmRpbmcgZHJpdmVyJ3MgQUxCL1RMQiB0cmFuc21pdCBwYXRoLCBhbmQgdGVzdGFibGUgdXNpbmcgdmlydHVhbCBkZXZpY2VzIGxpa2UgZHVtbXkgb3IgdmV0aCBpbiBRRU1VLiBXZSdsbCBhbHNvIGJlIHN1cmUgdG8gbGlzdCB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLlxuLSAgIGBGb2N1c1N5bWJvbHNgOiBJJ2xsIGluY2x1ZGUgYGNvbXB1dGVfZ2FwYCwgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCwgYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLlxuLSAgIGBFbmFibGVDb25maWdzYDogYEJPTkRJTkdgIGFuZCBgSU5FVGAuXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgaXMgc3F1YXJlZCBhd2F5LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTMyLCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoyNi4yMzU2MTQ1MTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDY0NzI4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbXB1dGVfZ2FwXCIsXG4gICAgXCJ0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZVwiLFxuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiLFxuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXFx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlcidzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29tcHV0ZV9nYXBcIixcbiAgICBcInRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlXCIsXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgMzItYml0IGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGluIGNvbXB1dGVfZ2FwKCkgYnkgY2FzdGluZyBzbGF2ZS1cXHUwMDNlc3BlZWQgYW5kIGxvYWQgdG8gNjQtYml0IHNpZ25lZCBpbnRlZ2VycyBwcmlvciB0byB0aGUgYml0IHNoaWZ0IG9wZXJhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJ3MgYWRhcHRpdmUgbG9hZCBiYWxhbmNpbmcgKEFMQikgYW5kIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nIChUTEIpIG1vZGUgcGFja2V0IHRyYW5zbWl0IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsIGludGVyZmFjZXMgKHN1Y2ggYXMgdmV0aCBvciBkdW1teSBkZXZpY2VzKSBib25kZWQgaW4gQUxCL1RMQiBtb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoyNi4zMjAyNzE5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MTQ1MDI4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoyNi4zMjA4NDYyM1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNTEzOTI0MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhbiBpbnRlZ2VyIHRydW5jYXRpb24vb3ZlcmZsb3cgYnVnIGluIGNvbXB1dGVfZ2FwKCkgYnkgY2FzdGluZyBzbGF2ZS1cXHUwMDNlc3BlZWQgYW5kIGxvYWQgdG8gNjQtYml0IHNpZ25lZCBpbnRlZ2VycyAoczY0KSBwcmlvciB0byBiaXQtc2hpZnRpbmcsIHByZXZlbnRpbmcgMzItYml0IGFyaXRobWV0aWMgb3ZlcmZsb3cgZm9yIGhpZ2ggbGluayBzcGVlZHMgKGUuZy4sIFxcdTAwM2U9IDRHYnBzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTM6MzY6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDQzYWM4ZTI4ZTQxODIuLmI1MjAwNDAzMGE0YjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTE2MCw4ICsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuIFxuIHN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbiB7XG4tXHRyZXR1cm4gKHM2NCkgKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xuLVx0ICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbitcdHJldHVybiAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbitcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoyNi4zMjA4NDczMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDIyNDk4MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb21wdXRlX2dhcGAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQncyBhIG1pbm9yIGNoYW5nZTsgZXNzZW50aWFsbHksIHRoZSBhZGRpdGlvbiBvZiBwYXJlbnRoZXNlcyBhcm91bmQgdGhlIHNlY29uZCB0ZXJtIGluIHRoZSByZXR1cm4gc3RhdGVtZW50OlxuXG5gYGBjXG5zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG57XG4tXHRyZXR1cm4gKHM2NCkgKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xuLVx0ICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbitcdHJldHVybiAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbitcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbn1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIG1hdHRlciBvZiBvcGVyYXRvciBwcmVjZWRlbmNlLCB3aGljaCwgaW4gYW5kIG9mIGl0c2VsZiwgaXMgcmFyZWx5IHdvcnRoIGEgcGF0Y2guIEFsdGhvdWdoLCB3aXRob3V0IGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IHdvdWxkIGJlIGdvb2QgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTbywgSSB3aWxsIHVzZSBhIHRvb2wgc3VjaCBhcyBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIGZpbGUgYW5kIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBgY29tcHV0ZV9nYXBgIGlzIHVzZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGlzIGp1c3QgYSBzdHlsZSBpc3N1ZSwgb3IgaWYgdGhlcmUgaXMgYSByZWFsIGJ1ZyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzozMC43NDMzNDk0NjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFxcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0a2ZyZWUoYm9uZF9pbmZvLVxcdTAwM2V0eF9oYXNodGJsKTtcXG4gMTU2OlxcdFxcdGJvbmRfaW5mby1cXHUwMDNldHhfaGFzaHRibCA9IE5VTEw7XFxuIDE1NzpcXHRcXG4gMTU4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbiAxNTk6XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHRzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuIDE2MjpcXHR7XFxuIDE2MzpcXHRcXHRyZXR1cm4gKChzNjQpc2xhdmUtXFx1MDAzZXNwZWVkIFxcdTAwM2NcXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXFxuIDE2NDpcXHRcXHQgICAgICAgKChzNjQpU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXFx1MDAzY1xcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cXG4gMTY1OlxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuIDE2ODpcXHR7XFxuIDE2OTpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqbGVhc3RfbG9hZGVkO1xcbiAxNzA6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4gMTcxOlxcdFxcdGxvbmcgbG9uZyBtYXhfZ2FwO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xcbiAxNzQ6XFx0XFx0bWF4X2dhcCA9IExMT05HX01JTjtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0LyogRmluZCB0aGUgc2xhdmUgd2l0aCB0aGUgbGFyZ2VzdCBnYXAgKi9cXG4gMTc3OlxcdFxcdGJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7XFxuIDE3ODpcXHRcXHRcXHRpZiAoYm9uZF9zbGF2ZV9jYW5fdHgoc2xhdmUpKSB7XFxuIDE3OTpcXHRcXHRcXHRcXHRsb25nIGxvbmcgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRcXHRcXHRpZiAobWF4X2dhcCBcXHUwMDNjIGdhcCkge1xcbiAxODI6XFx0XFx0XFx0XFx0XFx0bGVhc3RfbG9hZGVkID0gc2xhdmU7XFxuIDE4MzpcXHRcXHRcXHRcXHRcXHRtYXhfZ2FwID0gZ2FwO1xcbiAxODQ6XFx0XFx0XFx0XFx0fVxcbiAxODU6XFx0XFx0XFx0fVxcbiAxODY6XFx0XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRcXHRyZXR1cm4gbGVhc3RfbG9hZGVkO1xcbiAxODk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzozMC43NDM0Nzc4NzhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjIwNzg0NzM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgUG90ZW50aWFsIEFyaXRobWV0aWMgT3ZlcmZsb3cqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGU6IGByZXR1cm4gKHM2NCkgKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDMpO2AgYW5kIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIHRoZSBiaXQtc2hpZnRpbmcuIGBzbGF2ZS1cdTAwM2VzcGVlZGAgaXMsIGFzIEkgc3VzcGVjdCwgbGlrZWx5IGEgMzItYml0IHVuc2lnbmVkIG9yIHNpZ25lZCBpbnRlZ2VyIHR5cGUsIGEgYHUzMmAgb3Igc2ltaWxhci4gSWYgaXQgcmVwcmVzZW50cyBzb21ldGhpbmcgbGlrZSBuZXR3b3JrIHNwZWVk4oCUc2F5LCA0MDAwMCBNYnBzIG9yIGV2ZW4gMTAwIEdicHPigJR0aGUgbGVmdC1zaGlmdCBieSAyMCBiaXRzIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gY2F1c2UgYW4gb3ZlcmZsb3cgaW4gYSAzMi1iaXQgaW50ZWdlci4gVGhlIHNhbWUgaXNzdWUgZXhpc3RzIGZvciBgbG9hZCBcdTAwM2NcdTAwM2MgM2AgaWYgdGhlIGxvYWQgaXMgYSBzaWduaWZpY2FudCBudW1iZXIuXG5cblRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFRoZSBzaGlmdCBpcyBwZXJmb3JtZWQgKmJlZm9yZSogdGhlIGNhc3QgdG8gYHM2NGAuIFNvIHRoZSBiaXQgc2hpZnQgaXMgcGVyZm9ybWVkIG9uIHRoZSBuYXJyb3dlciAzMi1iaXQgaW50ZWdlci4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY2FzdGluZyB0byBgczY0YCAqYmVmb3JlKiB0aGUgc2hpZnQ6IGAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApYC4gVGhpcyBndWFyYW50ZWVzIGEgNjQtYml0IHNoaWZ0IG9wZXJhdGlvbiwgd2hpY2ggcHJldmVudHMgdGhlIG92ZXJmbG93IGFuZCB0cnVuY2F0aW9uLiBUaGF0J3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgZml4IGZvciB0aGlzIGtpbmQgb2YgYXJpdGhtZXRpYyBidWcuXG5cbk5vdywgbXkgbW9yZSBzZWN1cml0eS1jb25zY2lvdXMgc2lkZSBraWNrcyBpbi4gQW55IGNoYW5nZSwgbm8gbWF0dGVyIGhvdyBzbWFsbCwgcmVxdWlyZXMgY2FyZWZ1bCBzY3J1dGlueS4gTXkgbmV4dCBxdWVzdGlvbiBpczogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcywgcGFydGljdWxhcmx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc2xhdmUtXHUwMDNlc3BlZWRgIGFuZCBgU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWRgLiBXaGVyZSBhcmUgdGhlc2UgdmFsdWVzIGNvbWluZyBmcm9tPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQ/XG5cbkZvcnR1bmF0ZWx5LCBhZnRlciBhIHF1aWNrIHJldmlldywgSSBzZWUgdGhhdCBubyBuZXcgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gcG9pbnRlcnMsIGJ1ZmZlciBsZW5ndGhzLCBvciBidWZmZXJzIGludm9sdmVkLiBUaGlzIGlzIHB1cmVseSBhbiBhcml0aG1ldGljIGZpeCBmb3IgYSBjYWxjdWxhdGlvbiByZWxhdGVkIHRvIHRyYW5zbWlzc2lvbiBsb2FkIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBBTEIgbW9kZS4gVGhhdCdzIGdvb2QgbmV3cywgc2lnbmlmaWNhbnRseSByZWR1Y2luZyBteSBjb25jZXJucy4gU3RpbGwsIEkgc2hvdWxkIHJldmlldyB0aGUgYHN0cnVjdCBzbGF2ZWAgZGVmaW5pdGlvbiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYnV0IGl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC11bmRlcnN0b29kIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM3OjM2Ljk1MTMyODcwNloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5ODc0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNsYXZlIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L2JvbmRpbmcuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ib25kaW5nLmg9MTE3PXN0cnVjdCBib25kX3BhcmFtcyB7XFxuLS1cXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTU2LVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDoxNTc6c3RydWN0IHNsYXZlIHtcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTU4LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzozNy4wMTIzMjI4NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODQzODA2MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgQm9uZGluZyBTcGVlZCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYm9uZGluZyBkcml2ZXIuIExldCBtZSBqdXN0IGRpdmUgc3RyYWlnaHQgaW50byB0aGUgY29kZS4gVGhlIHNwZWNpZmljIHBpZWNlIEkgbmVlZCBpcyBgc2xhdmUtXHUwMDNlc3BlZWRgLCB3aGljaCBJIGJlbGlldmUgaXMgZGVmaW5lZCB3aXRoaW4gYGluY2x1ZGUvbmV0L2JvbmRpbmcuaGAuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBzcGVlZCBpbmZvcm1hdGlvbiBmb3IgaW5kaXZpZHVhbCBzbGF2ZXMgaW4gYSBib25kIGlzIHN0b3JlZCwgYW5kIEkgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZHJpdmVyLiBJ4oCZbSBiZXR0aW5nIHRoaXMgd2lsbCBnaXZlIG1lIHRoZSBhbnN3ZXIgSeKAmW0gbG9va2luZyBmb3Igd2l0aG91dCBtdWNoIGRpZ2dpbmcuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYW5kIGdldCB0aGlzIHJlc29sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6Mzc6MzguODU2MTMxODc1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9ib25kaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTU3OlxcdHN0cnVjdCBzbGF2ZSB7XFxuIDE1ODpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OyAvKiBmaXJzdCAtIHVzZWZ1bCBmb3IgcGFuaWMgZGVidWcgKi9cXG4gMTU5OlxcdFxcdHN0cnVjdCBib25kaW5nICpib25kOyAvKiBvdXIgbWFzdGVyICovXFxuIDE2MDpcXHRcXHRpbnQgICAgZGVsYXk7XFxuIDE2MTpcXHRcXHQvKiBhbGwgNCBpbiBqaWZmaWVzICovXFxuIDE2MjpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfbGlua191cDtcXG4gMTYzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF90eDtcXG4gMTY0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9yeDtcXG4gMTY1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2xhc3RfYXJwX3J4W0JPTkRfTUFYX0FSUF9UQVJHRVRTXTtcXG4gMTY2OlxcdFxcdHM4ICAgICBsaW5rO1xcdFxcdC8qIG9uZSBvZiBCT05EX0xJTktfWFhYWCAqL1xcbiAxNjc6XFx0XFx0czggICAgIGxpbmtfbmV3X3N0YXRlO1xcdC8qIG9uZSBvZiBCT05EX0xJTktfWFhYWCAqL1xcbiAxNjg6XFx0XFx0dTggICAgIGJhY2t1cDoxLCAgIC8qIGluZGljYXRlcyBiYWNrdXAgc2xhdmUuIFZhbHVlIGNvcnJlc3BvbmRzIHdpdGhcXG4gMTY5OlxcdFxcdFxcdFxcdCAgICAgIEJPTkRfU1RBVEVfQUNUSVZFIGFuZCBCT05EX1NUQVRFX0JBQ0tVUCAqL1xcbiAxNzA6XFx0XFx0ICAgICAgIGluYWN0aXZlOjEsIC8qIGluZGljYXRlcyBpbmFjdGl2ZSBzbGF2ZSAqL1xcbiAxNzE6XFx0XFx0ICAgICAgIHJ4X2Rpc2FibGVkOjEsIC8qIGluZGljYXRlcyB3aGV0aGVyIHNsYXZlJ3MgUnggaXMgZGlzYWJsZWQgKi9cXG4gMTcyOlxcdFxcdCAgICAgICBzaG91bGRfbm90aWZ5OjEsIC8qIGluZGljYXRlcyB3aGV0aGVyIHRoZSBzdGF0ZSBjaGFuZ2VkICovXFxuIDE3MzpcXHRcXHQgICAgICAgc2hvdWxkX25vdGlmeV9saW5rOjE7IC8qIGluZGljYXRlcyB3aGV0aGVyIHRoZSBsaW5rIGNoYW5nZWQgKi9cXG4gMTc0OlxcdFxcdHU4ICAgICBkdXBsZXg7XFxuIDE3NTpcXHRcXHR1MzIgICAgb3JpZ2luYWxfbXR1O1xcbiAxNzY6XFx0XFx0dTMyICAgIGxpbmtfZmFpbHVyZV9jb3VudDtcXG4gMTc3OlxcdFxcdHUzMiAgICBzcGVlZDtcXG4gMTc4OlxcdFxcdHUxNiAgICBxdWV1ZV9pZDtcXG4gMTc5OlxcdFxcdHU4ICAgICBwZXJtX2h3YWRkcltNQVhfQUREUl9MRU5dO1xcbiAxODA6XFx0XFx0aW50ICAgIHByaW87XFxuIDE4MTpcXHRcXHRzdHJ1Y3QgYWRfc2xhdmVfaW5mbyAqYWRfaW5mbztcXG4gMTgyOlxcdFxcdHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB0bGJfaW5mbztcXG4gMTgzOlxcdCNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbiAxODQ6XFx0XFx0c3RydWN0IG5ldHBvbGwgKm5wO1xcbiAxODU6XFx0I2VuZGlmXFxuIDE4NjpcXHRcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG5vdGlmeV93b3JrO1xcbiAxODc6XFx0XFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4gMTg4OlxcdFxcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCBzbGF2ZV9zdGF0cztcXG4gMTg5OlxcdH07XFxuIDE5MDpcXHRcXG4gMTkxOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYXZlICp0b19zbGF2ZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4gMTkyOlxcdHtcXG4gMTkzOlxcdFxcdHJldHVybiBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHNsYXZlLCBrb2JqKTtcXG4gMTk0OlxcdH1cXG4gMTk1OlxcdFxcbiAxOTY6XFx0c3RydWN0IGJvbmRfdXBfc2xhdmUge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzozOC44NTYyNTEwMzVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA5Nzg0ODk2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGl0J3MgYW4gYXJpdGhtZXRpYyBmaXguIEl0J3MgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBzb21ldGhpbmcuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNoaWZ0aW5nIGEgYHUzMmAgKHJlcHJlc2VudGluZyBhIHNwZWVkIHZhbHVlLCBsaWtlbHkgaW4gYSByYXRlIHBlciBzZWNvbmQgbGlrZSBHYnBzKSBieSAyMCBiaXRzIHVzaW5nIGAoczY0KShzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApYC4gVGhlIHByb2JsZW0gaXMgdGhhdCBpZiBgc2xhdmUtXHUwMDNlc3BlZWRgIGlzIGEgcmVsYXRpdmVseSBsYXJnZSBudW1iZXIsIHNheSA0MDk2IG9yIGdyZWF0ZXIsIHRoZSBsZWZ0IHNoaWZ0IG9wZXJhdGlvbiAqYmVmb3JlKiB0aGUgY2FzdCB0byBgczY0YCB3b3VsZCBjYXVzZSB0aGUgYHUzMmAgdG8gb3ZlcmZsb3cuIEZvciBleGFtcGxlLCBhIDEwIEdicHMgdmFsdWUgKDEwMDAwKSBzaGlmdGVkIGJ5IDIwIGJpdHMgcmVzdWx0cyBpbiBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIGB1MzJgIHZhbHVlLCBjYXVzaW5nIGl0IHRvIHdyYXAgYXJvdW5kLCB0cnVuY2F0aW5nIGRhdGEgYmVmb3JlIGl0J3MgY2FzdCB0byBhIGBzNjRgLlxuXG5UaGUgcGF0Y2gncyBzb2x1dGlvbiBpcyBlbGVnYW50OiBpdCBjYXN0cyB0aGUgYHNsYXZlLVx1MDAzZXNwZWVkYCB0byBhIGBzNjRgICpiZWZvcmUqIHRoZSBzaGlmdCwgc28gYChzNjQpc2xhdmUtXHUwMDNlc3BlZWQgXHUwMDNjXHUwMDNjIDIwYCBwZXJmb3JtcyBhIDY0LWJpdCBzaGlmdC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgY2FuIGFjY29tbW9kYXRlIHRoZSBzaGlmdGVkIHZhbHVlLCBhdm9pZGluZyBhbnkgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgY2hhbmdlIHdhcnJhbnQgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrPyBJIGRvbid0IHRoaW5rIHNvLiBUaGlzIGlzIGEgcHVyZWx5IGFyaXRobWV0aWMgb3BlcmF0aW9uLiBJdCdzIG5vdCB0b3VjaGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgYnl0ZXMsIG9yIGludm9sdmluZyBrZXJuZWwtdG8tdXNlcnNwYWNlIG1lbW9yeSBjb3BpZXMuIFRoZSBzdGFuZGFyZCB0ZXN0aW5nIHRvb2xzLCBhbG9uZyB3aXRoIEtBU0FOL1VCU0FOIChmb3IgcG90ZW50aWFsIHVuZGVmaW5lZCBzaGlmdHMgb3Igc2lnbmVkIG92ZXJmbG93cyksIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3VlcywgYW5kIEkgZG9uJ3Qgc2VlIGFueSByaXNrIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQncyBzYWZlIHRvIG1hcmsgYE5lZWRzS01TQU5gIGFzIGBmYWxzZWAgaGVyZS4gTXkgcmVhc29uaW5nIGlzIHNvbGlkLCBhbmQgSSBjYW4gbm93IGNvbmZpZGVudGx5IHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExNiwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzo0OS44MzQ3NDQxNTJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVxcdTAwM2VzcGVlZCBhbmQgbG9hZCB0byA2NC1iaXQgc2lnbmVkIGludGVnZXJzIChzNjQpIHByaW9yIHRvIGJpdC1zaGlmdGluZywgcHJldmVudGluZyAzMi1iaXQgYXJpdGhtZXRpYyBvdmVyZmxvdyBmb3IgaGlnaCBsaW5rIHNwZWVkcyAoZS5nLiwgXFx1MDAzZT0gNEdicHMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVxcdTAwM2VzcGVlZCBhbmQgbG9hZCB0byA2NC1iaXQgc2lnbmVkIGludGVnZXJzIChzNjQpIHByaW9yIHRvIGJpdC1zaGlmdGluZywgcHJldmVudGluZyAzMi1iaXQgYXJpdGhtZXRpYyBvdmVyZmxvdyBmb3IgaGlnaCBsaW5rIHNwZWVkcyAoZS5nLiwgXFx1MDAzZT0gNEdicHMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowrs769[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 13:19:13 +0000 UTC FinishedAt: 2026-09-13 13:37:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "78445023439506ebd83b86d40b1e428a3b309d4a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BONDING", "INET" ], "series_id": "a7f0e97e-47cd-48bc-b9d2-9477bdf81e47" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "compute_gap", "tlb_get_least_loaded_slave", "bond_alb_xmit", "bond_tlb_xmit", "bond_xmit_alb_slave_get", "bond_xmit_tlb_slave_get" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "78445023439506ebd83b86d40b1e428a3b309d4a", "base_tree": "net-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JPTkRJTkcmIzM0OywKICAgICYjMzQ7SU5FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbXB1dGVfZ2FwJiMzNDssCiAgICAmIzM0O3RsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlJiMzNDssCiAgICAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfYWxiX3NsYXZlX2dldCYjMzQ7LAogICAgJiMzNDtib25kX3htaXRfdGxiX3NsYXZlX2dldCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgKHM2NCkgcHJpb3IgdG8gYml0LXNoaWZ0aW5nLCBwcmV2ZW50aW5nIDMyLWJpdCBhcml0aG1ldGljIG92ZXJmbG93IGZvciBoaWdoIGxpbmsgc3BlZWRzIChlLmcuLCBcdTAwM2U9IDRHYnBzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXHUwMDNlc3BlZWQgYW5kIGxvYWQgdG8gNjQtYml0IHNpZ25lZCBpbnRlZ2VycyBwcmlvciB0byB0aGUgYml0IHNoaWZ0IG9wZXJhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRjM2M5Y2I5YTRmZDkyMjQxMDg1NDU2OTZmYjg2MWY1NWVlNWZjYzZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMzozNjowNyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDQzYWM4ZTI4ZTQxODIuLmI1MjAwNDAzMGE0YjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTE2MCw4ICYjNDM7MTYwLDggQEAgc3RhdGljIHZvaWQgdGxiX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcbiBcbiBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG4ge1xuLVx0cmV0dXJuIChzNjQpIChzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbi1cdCAgICAgICAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXG4mIzQzO1x0cmV0dXJuICgoczY0KXNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xuJiM0MztcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29tcHV0ZV9nYXAmIzM0OywKICAgICYjMzQ7dGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3RsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCAzMi1iaXQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBhZGFwdGl2ZSBsb2FkIGJhbGFuY2luZyAoQUxCKSBhbmQgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgKFRMQikgbW9kZSBwYWNrZXQgdHJhbnNtaXQgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyAoc3VjaCBhcyB2ZXRoIG9yIGR1bW15IGRldmljZXMpIGJvbmRlZCBpbiBBTEIvVExCIG1vZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTM6MzY6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggNDNhYzhlMjhlNDE4Mi4uYjUyMDA0MDMwYTRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtMTYwLDggJiM0MzsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCiBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpCiB7Ci0JcmV0dXJuIChzNjQpIChzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KLQkgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiYjNDM7CXJldHVybiAoKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KJiM0MzsJICAgICAgICgoczY0KVNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTM3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMzU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQUxCIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIHRoZSBwYXRjaCBpcyBpbiBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gTGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBkaWZmIHNob3dzIGEgbWlub3IgY2hhbmdlIGluIHRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIGp1c3QgYWRkZWQgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBzZWNvbmQgdGVybSBpbiB0aGUgc3VidHJhY3Rpb246IGAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCAmbHQ7Jmx0OyAzKWAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGNvZGUgcmVhZGFiaWxpdHkgaW1wcm92ZW1lbnQsIGVuc3VyaW5nIHRoZSBiaXQgc2hpZnQgaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY29udmVyc2lvbiB0byBhIHNpZ25lZCA2NC1iaXQgaW50ZWdlciwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgcHJlY2VkZW5jZSBpc3N1ZXMuIFRoaXMgY291bGQgYmUgYSBmaXggZm9yIHNvbWUgZWRnZSBjYXNlLCBvciBqdXN0IGEgZ2VuZXJhbCBjb2RlLXN0eWxlIGltcHJvdmVtZW50LgoKTm93LCBsZXQmIzM5O3MgZ2V0IHNvbWUgY29udGV4dCBhcm91bmQgdGhpcyBmdW5jdGlvbi4gSSYjMzk7bGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGBjb21wdXRlX2dhcGAgaW4gdGhhdCBmaWxlIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyB1c2VkIGFuZCB3aGF0IGl0JiMzOTtzIHRyeWluZyB0byBkbywgYW5kIEkgd2lsbCBhbHNvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGUgdG8gY29uZmlybSB3aGV0aGVyIHRoZXJlIGhhdmUgYmVlbiBhbnkgcmVsZXZhbnQgY29uZmlnIGNoYW5nZXMuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgcHVycG9zZSBhbmQgaW1wYWN0IG9mIHRoaXMgc21hbGwgY2hhbmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTA6XHR7XG4gMTUxOlx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuIDE1MjpcdFxuIDE1MzpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbiAxNTQ6XHRcbiAxNTU6XHRcdGtmcmVlKGJvbmRfaW5mby1cdTAwM2V0eF9oYXNodGJsKTtcbiAxNTY6XHRcdGJvbmRfaW5mby1cdTAwM2V0eF9oYXNodGJsID0gTlVMTDtcbiAxNTc6XHRcbiAxNTg6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbiAxNTk6XHR9XG4gMTYwOlx0XG4gMTYxOlx0c3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuIDE2MjpcdHtcbiAxNjM6XHRcdHJldHVybiAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbiAxNjQ6XHRcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4gMTY4Olx0e1xuIDE2OTpcdFx0c3RydWN0IHNsYXZlICpzbGF2ZSwgKmxlYXN0X2xvYWRlZDtcbiAxNzA6XHRcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XG4gMTcxOlx0XHRsb25nIGxvbmcgbWF4X2dhcDtcbiAxNzI6XHRcbiAxNzM6XHRcdGxlYXN0X2xvYWRlZCA9IE5VTEw7XG4gMTc0Olx0XHRtYXhfZ2FwID0gTExPTkdfTUlOO1xuIDE3NTpcdFxuIDE3NjpcdFx0LyogRmluZCB0aGUgc2xhdmUgd2l0aCB0aGUgbGFyZ2VzdCBnYXAgKi9cbiAxNzc6XHRcdGJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7XG4gMTc4Olx0XHRcdGlmIChib25kX3NsYXZlX2Nhbl90eChzbGF2ZSkpIHtcbiAxNzk6XHRcdFx0XHRsb25nIGxvbmcgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xuIDE4MDpcdFxuIDE4MTpcdFx0XHRcdGlmIChtYXhfZ2FwIFx1MDAzYyBnYXApIHtcbiAxODI6XHRcdFx0XHRcdGxlYXN0X2xvYWRlZCA9IHNsYXZlO1xuIDE4MzpcdFx0XHRcdFx0bWF4X2dhcCA9IGdhcDtcbiAxODQ6XHRcdFx0XHR9XG4gMTg1Olx0XHRcdH1cbiAxODY6XHRcdH1cbiAxODc6XHRcbiAxODg6XHRcdHJldHVybiBsZWFzdF9sb2FkZWQ7XG4gMTg5Olx0fVxuIDE5MDpcdFxuIDE5MTpcdHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKl9fdGxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBib25kaW5nICpib25kLCB1MzIgaGFzaF9pbmRleCxcbiAxOTI6XHRcdFx0XHRcdFx0XHR1MzIgc2tiX2xlbilcbiAxOTM6XHR7XG4gMTk0Olx0XHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xuIDE5NTpcdFx0c3RydWN0IHRsYl9jbGllbnRfaW5mbyAqaGFzaF90YWJsZTtcbiAxOTY6XHRcdHN0cnVjdCBzbGF2ZSAqYXNzaWduZWRfc2xhdmU7XG4gMTk3Olx0XG4gMTk4Olx0XHRoYXNoX3RhYmxlID0gYm9uZF9pbmZvLVx1MDAzZXR4X2hhc2h0Ymw7XG4gMTk5Olx0XHRhc3NpZ25lZF9zbGF2ZSA9IGhhc2hfdGFibGVbaGFzaF9pbmRleF0udHhfc2xhdmU7XG4gMjAwOlx0XHRpZiAoIWFzc2lnbmVkX3NsYXZlKSB7XG4gMjAxOlx0XHRcdGFzc2lnbmVkX3NsYXZlID0gdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoYm9uZCk7XG4gMjAyOlx0XG4gMjAzOlx0XHRcdGlmIChhc3NpZ25lZF9zbGF2ZSkge1xuIDIwNDpcdFx0XHRcdHN0cnVjdCB0bGJfc2xhdmVfaW5mbyAqc2xhdmVfaW5mbyA9XG4gMjA1Olx0XHRcdFx0XHRcdTAwMjYoU0xBVkVfVExCX0lORk8oYXNzaWduZWRfc2xhdmUpKTtcbiAyMDY6XHRcdFx0XHR1MzIgbmV4dF9pbmRleCA9IHNsYXZlX2luZm8tXHUwMDNlaGVhZDtcbiAyMDc6XHRcbiAyMDg6XHRcdFx0XHRoYXNoX3RhYmxlW2hhc2hfaW5kZXhdLnR4X3NsYXZlID0gYXNzaWduZWRfc2xhdmU7XG4gMjA5Olx0XHRcdFx0aGFzaF90YWJsZVtoYXNoX2luZGV4XS5uZXh0ID0gbmV4dF9pbmRleDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkFuYWx5emluZyBEYXRhIFR5cGVzIGFuZCBTdHJ1Y3R1cmUqKgoKSG1tLCBmaXJzdCB0aGluZ3MgZmlyc3Q6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBkYXRhIHR5cGVzIGhlcmUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNsYXZlLSZndDtzcGVlZGAgYW5kIGBTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZGAuIFdoYXQgYXJlIHRoZWlyIHR5cGVzPyBBcmUgdGhleSBpbnRlZ2VycywgZmxvYXRzLCBzb21ldGhpbmcgbW9yZSBjb21wbGV4PyBUaGUgbmF0dXJlIG9mIHRob3NlIHR5cGVzIHdpbGwgZGV0ZXJtaW5lIGhvdyBJIGludGVycHJldCB0aGUgY29kZSBhbmQgYW55IHBvdGVudGlhbCBpc3N1ZXMgSSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGNhbGN1bGF0aW9uLCBvciBhIGJvb2xlYW4gdGVzdCwgZm9yIGluc3RhbmNlLiAKClRvIGNsYXJpZnksIEkgbmVlZCB0byBsb29rIHVwIHRoZSBkZWZpbml0aW9uIG9mIGBzbGF2ZWAsIHRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIHJlbGV2YW50IHR5cGUgaW5mb3JtYXRpb24gZm9yIHRoZXNlIG1lbWJlcnMuIExldCYjMzk7cyBzZWUgaWYgdGhhdCBxdWljayBzZWFyY2ggeWllbGRzIHdoYXQgSSBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTMyIHNwZWVkOyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzMwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipIdW50aW5nIERvd24gVGhhdCBgc3RydWN0IHNsYXZlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gdHJhY2sgZG93biB0aGF0IGBzdHJ1Y3Qgc2xhdmVgIGRlZmluaXRpb24uIE5vdywgZGVwZW5kaW5nIG9uIHRoZSBrZXJuZWwgdmVyc2lvbiBhbmQgdGhlIHNwZWNpZmljIHN1YnN5c3RlbSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLCB0aGlzIGNvdWxkIGJlIGxvY2F0ZWQgaW4gYSBmZXcgZGlmZmVyZW50IHBsYWNlcy4gSW1tZWRpYXRlbHksIG15IG1pbmQgaXMgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgY2FuZGlkYXRlczogdGhlIGNvcmUgZHJpdmVyIG1vZGVsIGhlYWRlcnMgKGBpbmNsdWRlL2xpbnV4L2RldmljZS5oYCwgYGluY2x1ZGUvbGludXgvZHJpdmVyLmhgLCBldGMuKSwgcGVyaGFwcyBzb21lIHNwZWNpZmljIGJ1cyBvciBzdWJzeXN0ZW0gaGVhZGVycyAoZS5nLiwgSTJDLCBTUEksIFNDU0kpLCBvciBtYXliZSBldmVuIGEgY3VzdG9tIGhlYWRlciByZWxhdGVkIHRvIGEgcGFydGljdWxhciB2ZW5kb3ImIzM5O3MgZHJpdmVyIGlmIGl0JiMzOTtzIGEgbW9yZSBzcGVjaWFsaXplZCBwaWVjZSBvZiBoYXJkd2FyZS4gSeKAmWxsIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29udGV4dCB0byBuYXJyb3cgZG93biB0aGUgc2VhcmNoLgoKRmlyc3Qgc3RlcCB3aWxsIGJlIHRvIHVzZSBgZ3JlcGAsIGFuZCBJJiMzOTtsbCBsaWtlbHkgc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaCBhY3Jvc3MgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBrZXJuZWwgc291cmNlIG9yIHJlbGV2YW50IG1vZHVsZSBzb3VyY2UuIElmIEkmIzM5O20gd29ya2luZyB3aXRoIGEgc3BlY2lmaWMgZHJpdmVyLCBJJiMzOTtsbCByZXN0cmljdCB0aGUgc2VhcmNoIHdpdGhpbiB0aGF0IGRpcmVjdG9yeS4gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCBpdCYjMzk7cyBwcm9iYWJseSAqbm90KiBnb2luZyB0byBiZSBhIHNpbXBsZSwgb2J2aW91cyBkZWZpbml0aW9uLCBidXQgbGlrZWx5IGxpbmtlZCB0byBzb21lIGhpZ2hlci1sZXZlbCBhYnN0cmFjdGlvbi4KClRoZW4sIG9uY2UgSSBsb2NhdGUgdGhlIGRlZmluaXRpb24sIEkmIzM5O2xsIHdhbnQgdG8gcXVpY2tseSBwYXJzZSBpdHMgY29udGVudHMuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbWVtYmVycywgd2hpY2ggZmllbGRzIGFyZSBjcml0aWNhbCBmb3IgbXkgY3VycmVudCB0YXNrLCBhbmQgaG93IHRoaXMgYHN0cnVjdCBzbGF2ZWAgcmVsYXRlcyB0byBvdGhlciBzdHJ1Y3R1cmVzIGFuZCBjb25jZXB0cyBpbiB0aGUgc3lzdGVtLiBUaGUgZ29hbCBpc24mIzM5O3QganVzdCB0byAqZmluZCogdGhlIGRlZmluaXRpb24gYnV0IHRvICp1bmRlcnN0YW5kKiBpdHMgcm9sZSBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGl0cyByZWxldmFuY2UgaW4gdGhlIGNvbnRleHQgb2Ygd2hhdGV2ZXIgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSW4gc2hvcnQsIGl0JiMzOTtzIGFib3V0IGNvbm5lY3RpbmcgdGhlIGRvdHMgdG8gZ2V0IHRvIHRoZSByb290IG9mIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3Qgc2xhdmUgXFx7JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYm9uZGluZy5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRpbmcuaD0xMTc9c3RydWN0IGJvbmRfcGFyYW1zIHtcbi0tXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTU2LVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oOjE1NzpzdHJ1Y3Qgc2xhdmUge1xuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE1OC1cdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUyMzQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYGJvbmRpbmcuaGAqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYm9uZGluZyBzZXR1cCBiZXR0ZXIsIHNvIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgaW5jbHVkZS9uZXQvYm9uZGluZy5oYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHplcm9pbmcgaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgMTU3LiBUaGF0JiMzOTtzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCYjMzk7cyBvZnRlbiB3aGVyZSBzb21lIGNvcmUgc3RydWN0dXJlcyBvciBpbXBvcnRhbnQgZGVmaW5pdGlvbnMgYXJlIGxvY2F0ZWQsIHRoZSBncm91bmR3b3JrIGZvciB0aGUgbW9yZSBjb21wbGV4IGZ1bmN0aW9ucy4gSG9wZWZ1bGx5LCBsaW5lIDE1NyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBlbnRyeSBwb2ludCBpbnRvIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGNvZGUgYW5kIHNoZWQgc29tZSBsaWdodCBvbiB0aGUgYmVoYXZpb3IgSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3RydWN0cyBkZWZpbmVkIGFyb3VuZCB0aGF0IGFyZWEsIHdoaWNoIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgYSBoaWdoLWxldmVsIHNlbnNlIG9mIGhvdyBib25kaW5nIGlzIGltcGxlbWVudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRpbmcuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU3Olx0c3RydWN0IHNsYXZlIHtcbiAxNTg6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqL1xuIDE1OTpcdFx0c3RydWN0IGJvbmRpbmcgKmJvbmQ7IC8qIG91ciBtYXN0ZXIgKi9cbiAxNjA6XHRcdGludCAgICBkZWxheTtcbiAxNjE6XHRcdC8qIGFsbCA0IGluIGppZmZpZXMgKi9cbiAxNjI6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9saW5rX3VwO1xuIDE2MzpcdFx0dW5zaWduZWQgbG9uZyBsYXN0X3R4O1xuIDE2NDpcdFx0dW5zaWduZWQgbG9uZyBsYXN0X3J4O1xuIDE2NTpcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfbGFzdF9hcnBfcnhbQk9ORF9NQVhfQVJQX1RBUkdFVFNdO1xuIDE2NjpcdFx0czggICAgIGxpbms7XHRcdC8qIG9uZSBvZiBCT05EX0xJTktfWFhYWCAqL1xuIDE2NzpcdFx0czggICAgIGxpbmtfbmV3X3N0YXRlO1x0Lyogb25lIG9mIEJPTkRfTElOS19YWFhYICovXG4gMTY4Olx0XHR1OCAgICAgYmFja3VwOjEsICAgLyogaW5kaWNhdGVzIGJhY2t1cCBzbGF2ZS4gVmFsdWUgY29ycmVzcG9uZHMgd2l0aFxuIDE2OTpcdFx0XHRcdCAgICAgIEJPTkRfU1RBVEVfQUNUSVZFIGFuZCBCT05EX1NUQVRFX0JBQ0tVUCAqL1xuIDE3MDpcdFx0ICAgICAgIGluYWN0aXZlOjEsIC8qIGluZGljYXRlcyBpbmFjdGl2ZSBzbGF2ZSAqL1xuIDE3MTpcdFx0ICAgICAgIHJ4X2Rpc2FibGVkOjEsIC8qIGluZGljYXRlcyB3aGV0aGVyIHNsYXZlJiMzOTtzIFJ4IGlzIGRpc2FibGVkICovXG4gMTcyOlx0XHQgICAgICAgc2hvdWxkX25vdGlmeToxLCAvKiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgc3RhdGUgY2hhbmdlZCAqL1xuIDE3MzpcdFx0ICAgICAgIHNob3VsZF9ub3RpZnlfbGluazoxOyAvKiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgbGluayBjaGFuZ2VkICovXG4gMTc0Olx0XHR1OCAgICAgZHVwbGV4O1xuIDE3NTpcdFx0dTMyICAgIG9yaWdpbmFsX210dTtcbiAxNzY6XHRcdHUzMiAgICBsaW5rX2ZhaWx1cmVfY291bnQ7XG4gMTc3Olx0XHR1MzIgICAgc3BlZWQ7XG4gMTc4Olx0XHR1MTYgICAgcXVldWVfaWQ7XG4gMTc5Olx0XHR1OCAgICAgcGVybV9od2FkZHJbTUFYX0FERFJfTEVOXTtcbiAxODA6XHRcdGludCAgICBwcmlvO1xuIDE4MTpcdFx0c3RydWN0IGFkX3NsYXZlX2luZm8gKmFkX2luZm87XG4gMTgyOlx0XHRzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gdGxiX2luZm87XG4gMTgzOlx0I2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG4gMTg0Olx0XHRzdHJ1Y3QgbmV0cG9sbCAqbnA7XG4gMTg1Olx0I2VuZGlmXG4gMTg2Olx0XHRzdHJ1Y3QgZGVsYXllZF93b3JrIG5vdGlmeV93b3JrO1xuIDE4NzpcdFx0c3RydWN0IGtvYmplY3Qga29iajtcbiAxODg6XHRcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCBzbGF2ZV9zdGF0cztcbiAxODk6XHR9O1xuIDE5MDpcdFxuIDE5MTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYXZlICp0b19zbGF2ZShzdHJ1Y3Qga29iamVjdCAqa29iailcbiAxOTI6XHR7XG4gMTkzOlx0XHRyZXR1cm4gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBzbGF2ZSwga29iaik7XG4gMTk0Olx0fVxuIDE5NTpcdFxuIDE5NjpcdHN0cnVjdCBib25kX3VwX3NsYXZlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjEzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBZGRyZXNzaW5nIFBvdGVudGlhbCBJbnRlZ2VyIE92ZXJmbG93IGluIFNwZWVkIENhbGN1bGF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBzbGF2ZS0mZ3Q7c3BlZWRgIHZhcmlhYmxlLCB3aGljaCBpcyBkZWZpbmVkIGFzIGEgYHUzMmAuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBwb3RlbnRpYWwgZm9yIGludGVnZXIgb3ZlcmZsb3cgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHBvdGVudGlhbGx5IGxhcmdlIHNwZWVkcy4gU3BlY2lmaWNhbGx5LCB0aGUgbGluZSBgc2xhdmUtJmd0O3NwZWVkICZsdDsmbHQ7IDIwYCBoYXMgbWUgd29ycmllZC4gSWYgYHNsYXZlLSZndDtzcGVlZGAgaXMsIHNheSwgNDA5NiBvciBncmVhdGVyLCB0aGF0IGxlZnQtc2hpZnQgYnkgMjAgYml0cyBpcyBnb2luZyB0byBibG93IHJpZ2h0IHBhc3QgdGhlIDMyLWJpdCBsaW1pdC4gSSBtZWFuLCB0aGluayBhYm91dCBpdCDigJMgNDA5NiAmbHQ7Jmx0OyAyMCByZXN1bHRzIGluIDB4MTAwMDAwMDAwLCB3aGljaCBpcyBkZWZpbml0ZWx5IG91dHNpZGUgdGhlIGJvdW5kcyBvZiBhIDMyLWJpdCBpbnRlZ2VyLiBBIGRhdGEgcmF0ZSBvZiA0MCBHYnBzLCBvciBldmVuIDQgR2Jwcywgd291bGQgZWFzaWx5IG92ZXJmbG93IHRoaXMgc2hpZnQuCgpJbml0aWFsbHksIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2FzdCB0aGUgc2hpZnRlZCByZXN1bHQgdG8gYHM2NGAsIGxpa2UgdGhpczogYChzNjQpKHNsYXZlLSZndDtzcGVlZCAmbHQ7Jmx0OyAyMClgLiBUaGF0JiMzOTtzIG5vIGdvb2QsIGJlY2F1c2UgdGhlIHNoaWZ0IGhhcHBlbmVkICpiZWZvcmUqIHRoZSBjYXN0LiBTbyB0aGUgb3ZlcmZsb3cgaGFwcGVucywgYW5kIHRoZSByZXN1bHQgaXMgZ2FyYmFnZSwgYmVmb3JlIGl0JiMzOTtzIGNvbnZlcnRlZCB0byBhIGBzNjRgLgoKVGhlIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCwgSSBzZWUsIHRvIGAoczY0KXNsYXZlLSZndDtzcGVlZCAmbHQ7Jmx0OyAyMGAuIFRoaXMgaXMgZ29vZCwgdGhlIGNhc3QgaGFwcGVucyBmaXJzdC4gIE5vdyB0aGUgYHNsYXZlLSZndDtzcGVlZGAsIHdoaWNoIGlzIGEgYHUzMmAsIGlzIGNhc3QgdG8gYW4gYHM2NGAuIFNoaWZ0aW5nIGEgYHM2NGAgYnkgMjAgYml0cyBrZWVwcyB0aGUgaW50ZXJtZWRpYXRlIGNhbGN1bGF0aW9ucyB3ZWxsIGluc2lkZSB0aGUgcmVxdWlyZWQgcmFuZ2UuIEkgZmVlbCBtdWNoIGJldHRlciBhYm91dCB0aGlzIG5vdy4KCkFuZCB0aGVyZSYjMzk7cyB0aGlzIGBTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZGAgdmFyaWFibGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHRoZSBzaXplIGhlcmUsIHNvIGxldCBtZSBxdWlja2x5IGNyb3NzLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0IHRsYl9zbGF2ZV9pbmZvYCB0byBtYWtlIGNlcnRhaW4gd2hldGhlciBpdCYjMzk7cyBhIGBsb25nIGxvbmdgLCBhIGB1MzJgLCBvciBhIGBsb25nYC4gSSYjMzk7ZCBwcmVmZXIgYSBgbG9uZyBsb25nYCBmb3IgdGhlIHNhbWUgcmVhc29uIC0gYXZvaWQgYW4gb3ZlcmZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCB0bGJfc2xhdmVfaW5mbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xOTE9c3RhdGljIHN0cnVjdCBzbGF2ZSAqX190bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMDMtXHRcdGlmIChhc3NpZ25lZF9zbGF2ZSkge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIwNDpcdFx0XHRzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gKnNsYXZlX2luZm8gPVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIwNS1cdFx0XHRcdFx1MDAyNihTTEFWRV9UTEJfSU5GTyhhc3NpZ25lZF9zbGF2ZSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTUwCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKkludmVzdGlnYXRpbmcgYHN0cnVjdCB0bGJfc2xhdmVfaW5mb2AgaW4gbmV0L2JvbmRfYWxiLmgqKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0bGJfc2xhdmVfaW5mb2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBhbmQgbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBJJiMzOTttIHByZXR0eSBzdXJlIGl0JiMzOTtzIGdvaW5nIHRvIGJlIGluIGBpbmNsdWRlL25ldC9ib25kX2FsYi5oYC4gSSYjMzk7dmUgd29ya2VkIHdpdGggYm9uZGluZyBkcml2ZXJzIGJlZm9yZSwgYW5kIHRoZSBBY3RpdmUtQmFja3VwIChhbGIpIG1vZGUgZGVmaW5pdGVseSByZWxpZXMgb24gdHJhY2tpbmcgc2xhdmUgaW50ZXJmYWNlcyBhbmQgdGhlaXIgcHJvcGVydGllcy4gYHRsYl9zbGF2ZV9pbmZvYCBsaWtlbHkgaG9sZHMgdGhlIHJlbGV2YW50IHN0YXRlIGluZm9ybWF0aW9uIHNwZWNpZmljYWxseSBmb3IgVExCIChUcmFuc21pdCBMb2FkIEJhbGFuY2luZykgbW9kZSwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBJdCBtYWtlcyBzZW5zZSB0aGlzIHdvdWxkIGJlIHBsYWNlZCB3aXRoaW4gYm9uZGluZyBoZWFkZXIgZmlsZXMsIGdpdmVuIHRoZSBzcGVjaWZpYyBmZWF0dXJlc2V0IHByb3ZpZGVkLiBMZXQgbWUgcHVsbCBpdCB1cCBhbmQgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaW4gdGhlcmUsIGFuZCBjaGVjayBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBzdHJ1Y3R1cmVzIG9yIGZ1bmN0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IHRoaXMgc3RydWN0IGludGVyYWN0cyB3aXRoIHRoZSBsYXJnZXIgYm9uZGluZyBkcml2ZXIgZnJhbWV3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgdGxiX3NsYXZlX2luZm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ib25kX2FsYi5oPTk0PXN0cnVjdCBybGJfY2xpZW50X2luZm8ge1xuLS1cbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmgtMTE0LVxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxMTU6c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcbmluY2x1ZGUvbmV0L2JvbmRfYWxiLmgtMTE2LVx0dTMyIGhlYWQ7XHQvKiBJbmRleCB0byB0aGUgaGVhZCBvZiB0aGUgYmktZGlyZWN0aW9uYWwgY2xpZW50c1xuLS1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaD0xNTc9c3RydWN0IHNsYXZlIHtcbi0tXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTgxLVx0c3RydWN0IGFkX3NsYXZlX2luZm8gKmFkX2luZm87XG5pbmNsdWRlL25ldC9ib25kaW5nLmg6MTgyOlx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHRsYl9pbmZvO1xuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE4My0jaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQyMwoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byBgYm9uZF9hbGIuaGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBBY3RpdmUtQmFja3VwIChBTEIpIGJvbmRpbmcgZHJpdmVyJiMzOTtzIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3MgaGVhZCBzdHJhaWdodCB0byB0aGUgYGluY2x1ZGUvbmV0L2JvbmRfYWxiLmhgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMTUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhhdCBhcmVhIGJlY2F1c2UuLi4gd2VsbCwgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0JiMzOTtzIGEgbGlrZWx5IHNwb3QgZm9yIHRoZSBoZWFydCBvZiB0aGUgQUxCIGxvZ2ljLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGludGVyZmFjZSBzZWxlY3Rpb24gb3IgZmFpbG92ZXIuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBjcnVjaWFsIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGFjdGl2ZS1iYWNrdXAgc2VsZWN0aW9uIHByb2Nlc3MuIEhvcGVmdWxseSwgaXTigJlsbCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIGhvdyB0aGUgYWN0aXZlIGludGVyZmFjZSBpcyBkZXRlcm1pbmVkIGFuZCBzd2l0Y2hlZC4gVGltZSB0byBnZXQgdG8gdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYm9uZF9hbGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTE1Olx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcbiAxMTY6XHRcdHUzMiBoZWFkO1x0LyogSW5kZXggdG8gdGhlIGhlYWQgb2YgdGhlIGJpLWRpcmVjdGlvbmFsIGNsaWVudHNcbiAxMTc6XHRcdFx0XHQgKiBoYXNoIHRhYmxlIGVudHJpZXMgbGlzdC4gVGhlIGVudHJpZXMgaW4gdGhlIGxpc3RcbiAxMTg6XHRcdFx0XHQgKiBhcmUgdGhlIGVudHJpZXMgdGhhdCB3ZXJlIGFzc2lnbmVkIHRvIHVzZSB0aGlzXG4gMTE5Olx0XHRcdFx0ICogc2xhdmUgZm9yIHRyYW5zbWl0LlxuIDEyMDpcdFx0XHRcdCAqL1xuIDEyMTpcdFx0dTMyIGxvYWQ7XHQvKiBFYWNoIHNsYXZlIHN1bXMgdGhlIGxvYWRIaXN0b3J5IG9mIGFsbCBjbGllbnRzXG4gMTIyOlx0XHRcdFx0ICogYXNzaWduZWQgdG8gaXRcbiAxMjM6XHRcdFx0XHQgKi9cbiAxMjQ6XHR9O1xuIDEyNTpcdFxuIDEyNjpcdHN0cnVjdCBhbGJfYm9uZF9pbmZvIHtcbiAxMjc6XHRcdHN0cnVjdCB0bGJfY2xpZW50X2luZm9cdCp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi9cbiAxMjg6XHRcdHUzMlx0XHRcdHVuYmFsYW5jZWRfbG9hZDtcbiAxMjk6XHRcdGF0b21pY190XHRcdHR4X3JlYmFsYW5jZV9jb3VudGVyO1xuIDEzMDpcdFx0aW50XHRcdFx0bHBfY291bnRlcjtcbiAxMzE6XHRcdC8qIC0tLS0tLS0tIHJsYiBwYXJhbWV0ZXJzIC0tLS0tLS0tICovXG4gMTMyOlx0XHRpbnQgcmxiX2VuYWJsZWQ7XG4gMTMzOlx0XHRzdHJ1Y3QgcmxiX2NsaWVudF9pbmZvXHQqcnhfaGFzaHRibDtcdC8qIFJlY2VpdmUgaGFzaCB0YWJsZSAqL1xuIDEzNDpcdFx0dTMyXHRcdFx0cnhfaGFzaHRibF91c2VkX2hlYWQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc5ODUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3NjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHNlZW1zIHRvIGJlIGEgbWlub3IgY29kZSBhZGp1c3RtZW50IHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYSBjaGFuZ2UgdG8gdGhlIHBhcmVudGhlc2VzIGFyb3VuZCB0aGUgYXJpdGhtZXRpYyBjYWxjdWxhdGlvbiB3aXRoaW4gdGhlIGBjb21wdXRlX2dhcGAgZnVuY3Rpb24uIEJvdGggYHNsYXZlLSZndDtzcGVlZGAgYW5kIGBsb2FkYCBhcmUgYHUzMmAsIGFuZCB0aGUgcGF0Y2ggZXNzZW50aWFsbHkgYWRqdXN0cyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBjb252ZXJ0aW5nIHRoZXNlIHZhbHVlcy4KClRoZSBrZXkgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXMgcmVhY2hhYmlsaXR5LiBDYW4gdGhpcyBjb2RlIGFjdHVhbGx5ICpleGVjdXRlKiBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmU/IFRoZSBjb3JlIHRyaWFnZSBwaGlsb3NvcGh5IGlzIGNsZWFyOiByZWFjaGFiaWxpdHkgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gSWYgdGhlIGNvZGUgaXMgdW5yZWFjaGFibGUsIHdlIGRvbiYjMzk7dCBib3RoZXIgZnV6emluZywgcmVnYXJkbGVzcyBvZiBhc3NlcnRpb25zIG9yIGxvZ2ljLgoKR29vZCBuZXdzOiB0aGUgYm9uZGluZyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ib25kaW5nL2ApIGlzIGluZGVlZCByZWFjaGFibGUuIEl0JiMzOTtzIGEgdmlydHVhbCBuZXR3b3JrIGRldmljZSBkcml2ZXIsIGFuZCB3ZSBjYW4gY29uZmlndXJlIGl0IHVzaW5nIGBydG5ldGxpbmtgIOKAkyB0aGF0IG1lYW5zIGBpcCBsaW5rIGFkZCAuLi4gdHlwZSBib25kIC4uLmAgYW5kIGFsbCB0aGF0LiBXZSBjYW4gYXR0YWNoIHNsYXZlcyAobGlrZSBgZHVtbXlgLCBgdmV0aGAsIG9yIGB0YXBgKSwgYW5kIHdlIGNhbiB0cmFuc21pdCBwYWNrZXRzLiBTeXprYWxsZXIgY2FuIGVhc2lseSBoYW5kbGUgdGhpcyBraW5kIG9mIGNvbmZpZ3VyYXRpb24sIHdoaWNoIG1ha2VzIHRoaW5ncyBldmVuIGVhc2llci4gU28sIHJlYWNoYWJpbGl0eSBpcyBjb25maXJtZWQuCgpOb3csIGxldCYjMzk7cyBicmVhayBkb3duIHRoZSBldmFsdWF0aW9uIGNyaXRlcmlhLCBhbmQgc2VlIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZzoKCiogICAqKlJlYWNoYWJpbGl0eToqKiBXZSYjMzk7dmUgZXN0YWJsaXNoZWQgdGhhdCB0aGUgbW9kaWZpZWQgY29kZSAqaXMqIHJlYWNoYWJsZS4gVGhlIGJvbmRpbmcgZHJpdmVyIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmssIHNhdGlzZnlpbmcgdGhlIGZpcnN0IGNyaXRlcmlvbi4KKiAgICoqJiMzNDtObyBGdW5jdGlvbmFsIENoYW5nZSYjMzQ7IG9yIFJlZmFjdG9yaW5nIENsYWltczoqKiBXaGlsZSBpdCBsb29rcyBsaWtlIGEgcmVmYWN0b3JpbmcsIGxldCYjMzk7cyBub3QgdHJ1c3QgdGhlICYjMzQ7bm8gZnVuY3Rpb25hbCBjaGFuZ2UmIzM0OyBjbGFpbXMgYmxpbmRseS4gSXQmIzM5O3MgYSBjYWxjdWxhdGlvbiwgc28gaXQgY291bGQgYWZmZWN0IHBlcmZvcm1hbmNlIChhbHRob3VnaCBJJiMzOTtkIGV4cGVjdCBpdCB0byBiZSBtaW5vcikgb3IgcG90ZW50aWFsbHkgZXZlbiB0aGUgYmVoYXZpb3IgdW5kZXIgZXh0cmVtZSBjaXJjdW1zdGFuY2VzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIGZ1enplZC4KKiAgICoqQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoqKiBXaGlsZSB0aGVyZSBhcmVuJiMzOTt0IGFueSAqbmV3KiBhc3NlcnRpb25zIGFkZGVkIHdpdGggdGhpcyBjaGFuZ2UsIHRoZSBleGlzdGluZyBjb2RlIGNvdWxkIGJlIHRlc3RlZCBpbiBhIGRpZmZlcmVudCB3YXkgZHVlIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSB2YWx1ZSB1c2VkIGZvciBsb2FkIGJhbGFuY2luZy4KKiAgICoqUmVhY2hhYmlsaXR5OioqIHRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBCb25kaW5nIGlzIGEgcmVhY2hhYmxlIGRyaXZlciBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rIChydGxpbmspLgoqICAgYGNvbXB1dGVfZ2FwYCBpcyBjYWxsZWQgYnkgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIHBhY2tldCB0cmFuc21pc3Npb24gaW4gQUxCIC8gVExCIG1vZGUKCkdpdmVuIGFsbCB0aGlzLCBJJiMzOTttIGxlYW5pbmcgdG93YXJkIGEgKipXb3J0aEZ1enppbmc9dHJ1ZSoqIGFzc2Vzc21lbnQuIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIOKAkyBhIGRyaXZlciBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayDigJMgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbiYjMzk7cyByZXN1bHQgaXMgdXNlZCBmb3IgcGFja2V0IHRyYW5zbWlzc2lvbi4gR2l2ZW4gdGhlIHBvdGVudGlhbCBmb3Igc3VidGxlIGJlaGF2aW9yIGNoYW5nZXMgZnJvbSB0aGUgcmUtYXJyYW5nZW1lbnQgb2YgdGhlIGFyaXRobWV0aWMsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBwcm9iYWJseSB3YW50IHRvIGxvb2sgYXQgYWxsIGNhbGxlcnMgb2YgYm90aCBgY29tcHV0ZV9nYXBgIGFuZCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBjb21wbGV0ZWx5LCBidXQgdGhlIGluaXRpYWwgYXNzZXNzbWVudCBpbmRpY2F0ZXMgZnV6emluZyBpcyB0aGUgcmlnaHQgY2FsbCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNjE9c3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNjYtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTY3OnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2OC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE5MT1zdGF0aWMgc3RydWN0IHNsYXZlICpfX3RsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIwMC1cdGlmICghYXNzaWduZWRfc2xhdmUpIHtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMDE6XHRcdGFzc2lnbmVkX3NsYXZlID0gdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjAyLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5Njg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBgX190bGJfY2hvb3NlX2NoYW5uZWxgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gaXRzIGNhbGwgc2l0ZXMuIEtub3dpbmcgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgdW5kZXJzdGFuZGluZyBvZiB0aGUgbG9naWMgZmxvdyBhbmQgdGhlIGNvbnRleHRzIGluIHdoaWNoIGl0JiMzOTtzIG9wZXJhdGluZy4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAgaXMgYmVpbmcgdXNlZC4gVGhpcyBjb3VsZCBiZSB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIHBvdGVudGlhbGx5IGluIGRldmljZSBkcml2ZXJzLCBvciBldmVuIGluIHVzZXItc3BhY2UgbGlicmFyaWVzIGlmIHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdGhhdCB3YXkuIEdyYWJiaW5nIHRoZSBjYWxsIGdyYXBoIHF1aWNrbHkgc2hvdWxkIHBhaW50IHRoZSBwaWN0dXJlLiBJIG5lZWQgdG8gc2VlIGhvdyBmcmVxdWVudGx5IGl04oCZcyBjYWxsZWQsIHdoYXQgZGF0YSBpcyBwYXNzZWQgdG8gaXQsIGFuZCwgaWRlYWxseSwgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBjb2RlIHBhdGhzIGF0IHRoZSBjYWxsIHNpdGUuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGRlcGVuZGVuY2llcywgb3IgYXJlYXMgdGhhdCBtaWdodCBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uIG9yLCBjb252ZXJzZWx5LCB0aGF0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgYSBzdWJ0bGUgYnVnLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3RsYl9jaG9vc2VfY2hhbm5lbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNjc9c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5MC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxOTE6c3RhdGljIHN0cnVjdCBzbGF2ZSAqX190bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5Mi1cdFx0XHRcdFx0XHR1MzIgc2tiX2xlbilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MjI3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNi1cdHNwaW5fbG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjM3Olx0dHhfc2xhdmUgPSBfX3RsYl9jaG9vc2VfY2hhbm5lbChib25kLCBoYXNoX2luZGV4LCBza2JfbGVuKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzgtXHRzcGluX3VubG9jayhcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMjM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEFMQiBUcmFuc21pdCBQYXRoKioKCkFscmlnaHQsIHNvIGB0bGJfY2hvb3NlX2NoYW5uZWxgIGlzIGJlaW5nIGludm9rZWQgd2l0aGluIGBib25kX2FsYl94bWl0YC4gVGhhdCYjMzk7cyBpbiB0aGUgYGJvbmRfYWxiLmNgIGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBhY3RpdmUtYmFja3VwIGxvYWQgYmFsYW5jaW5nIG1vZHVsZS4gVGltZSB0byBkaXZlIGludG8gYGJvbmRfYWxiX3htaXRgIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hhbm5lbCBzZWxlY3Rpb24gaXMgYmVpbmcgbWFkZSBkdXJpbmcgdHJhbnNtaXQsIHJpZ2h0PyBJJiMzOTttIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBxdWVzdGlvbnMgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQgZGF0YSBpcyBhdmFpbGFibGUgdG8gYGJvbmRfYWxiX3htaXRgIHdoZW4gaXQgY2FsbHMgdGhlIHNlbGVjdGlvbiBmdW5jdGlvbj8gV2hhdCBjcml0ZXJpYSBpcyBgdGxiX2Nob29zZV9jaGFubmVsYCB1c2luZz8gSXMgaXQgbG9va2luZyBhdCBsaW5rIHN0YXRlLCBxdWV1ZSBsZW5ndGgsIG9yIHNvbWUgb3RoZXIgbWV0cmljPyBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIG9yIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBjaGFubmVsIHNlbGVjdGlvbiBwcm9jZXNzPyBUaW1lIHRvIHJldmlldyB0aGUgY29kZSBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RsYl9jaG9vc2VfY2hhbm5lbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNjc9c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5MC1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxOTE6c3RhdGljIHN0cnVjdCBzbGF2ZSAqX190bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5Mi1cdFx0XHRcdFx0XHR1MzIgc2tiX2xlbilcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjI2LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIyNzpzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIyOC1cdFx0XHRcdFx0dTMyIHNrYl9sZW4pXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cdC8qIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlx0ICogdGxiX2Nob29zZV9jaGFubmVsKCkgaXMgb25seSBjYWxsZWQgYnkgYm9uZF9hbGJfeG1pdCgpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM2LVx0c3Bpbl9sb2NrKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMzc6XHR0eF9zbGF2ZSA9IF9fdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsIGhhc2hfaW5kZXgsIHNrYl9sZW4pO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzOC1cdHNwaW5fdW5sb2NrKFx1MDAyNmJvbmQtXHUwMDNlbW9kZV9sb2NrKTtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM3OD1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzk2LVx0XHRcdGlmIChib25kLVx1MDAzZXBhcmFtcy50bGJfZHluYW1pY19sYikge1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzOTc6XHRcdFx0XHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzOTgtXHRcdFx0XHRcdFx0XHQgICAgICBoYXNoX2luZGV4IFx1MDAyNiAweEZGLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNDI1PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MDgtXHRcdFx0aGFzaF9pbmRleCA9IF9zaW1wbGVfaGFzaChoYXNoX3N0YXJ0LCBoYXNoX3NpemUpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MDk6XHRcdFx0dHhfc2xhdmUgPSB0bGJfY2hvb3NlX2NoYW5uZWwoYm9uZCwgaGFzaF9pbmRleCwgc2tiLVx1MDAzZWxlbik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUxMC1cdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVhY2hpbmcgVmlydHVhbGl6ZWQgTmlydmFuYSoqCgpSaWdodCwgdGhpcyBsb29rcyBlbnRpcmVseSBhY2hpZXZhYmxlIHdpdGhpbiB0aGUgc3RhbmRhcmQgdmlydHVhbGl6ZWQgbGFuZHNjYXBlLiBXZSBjYW4gYWJzb2x1dGVseSBjb25maWd1cmUgYm9uZGluZyBkZXZpY2VzIGFuZCByb3V0ZSBwYWNrZXRzIHRocm91Z2ggdGhlbS4gTm90aGluZyBncm91bmRicmVha2luZyBoZXJlLiBOb3csIHRoZSBrZXkgaXMgdG8gZW5zdXJlIHRoZSBib25kaW5nIGRyaXZlciBpcyBwcm9wZXJseSBjb21waWxlZC4gTGV0JiMzOTtzIGRpZyBpbnRvIEtjb25maWcgYW5kIGNvbmZpcm0gaXQmIzM5O3MgZW5hYmxlZC4gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBiZSBjZXJ0YWluLiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gZG91YmxlLWNoZWNrIHRoZSBkZWZhdWx0IG9wdGlvbnMsIGJ1dCBJIHRoaW5rIHRoYXQgaXMgdGhlIHJpZ2h0IGRpcmVjdGlvbi4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQk9ORElORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXG5kcml2ZXJzL25ldC9LY29uZmlnLTQwLVxuZHJpdmVycy9uZXQvS2NvbmZpZzo0MTpjb25maWcgQk9ORElOR1xuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cdHRyaXN0YXRlIFwmIzM0O0JvbmRpbmcgZHJpdmVyIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0NjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyB0aGUgTmV0d29yayBEcml2ZXIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSYjMzk7bSBsb29raW5nIGF0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgYGRyaXZlcnMvbmV0L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIHplcm8gaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zIGFyb3VuZCBsaW5lIDQwLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGluaXRpYWwgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBkcml2ZXJzIHdpbGwgbGlrZWx5IHJlc2lkZS4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgYW5kIHBlcmhhcHMgaWRlbnRpZnkgdGhlIHNwZWNpZmljIG9wdGlvbnMgdGhhdCBhcmUgaW5mbHVlbmNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG1vZHVsZXMgdGhhdCBJIGFtIGludGVyZXN0ZWQgaW4uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNDA6XHRcbiAgNDE6XHRjb25maWcgQk9ORElOR1xuICA0MjpcdFx0dHJpc3RhdGUgXCYjMzQ7Qm9uZGluZyBkcml2ZXIgc3VwcG9ydFwmIzM0O1xuICA0MzpcdFx0ZGVwZW5kcyBvbiBJTkVUXG4gIDQ0Olx0XHRkZXBlbmRzIG9uIFRMUyB8fCBUTFNfREVWSUNFPW5cbiAgNDU6XHRcdGhlbHBcbiAgNDY6XHRcdCAgU2F5ICYjMzk7WSYjMzk7IG9yICYjMzk7TSYjMzk7IGlmIHlvdSB3aXNoIHRvIGJlIGFibGUgdG8gJiMzOTtib25kJiMzOTsgbXVsdGlwbGUgRXRoZXJuZXRcbiAgNDc6XHRcdCAgQ2hhbm5lbHMgdG9nZXRoZXIuIFRoaXMgaXMgY2FsbGVkICYjMzk7RXRoZXJjaGFubmVsJiMzOTsgYnkgQ2lzY28sXG4gIDQ4Olx0XHQgICYjMzk7VHJ1bmtpbmcmIzM5OyBieSBTdW4sIDgwMi4zYWQgYnkgdGhlIElFRUUsIGFuZCAmIzM5O0JvbmRpbmcmIzM5OyBpbiBMaW51eC5cbiAgNDk6XHRcbiAgNTA6XHRcdCAgVGhlIGRyaXZlciBzdXBwb3J0cyBtdWx0aXBsZSBib25kaW5nIG1vZGVzIHRvIGFsbG93IGZvciBib3RoIGhpZ2hcbiAgNTE6XHRcdCAgcGVyZm9ybWFuY2UgYW5kIGhpZ2ggYXZhaWxhYmlsaXR5IG9wZXJhdGlvbi5cbiAgNTI6XHRcbiAgNTM6XHRcdCAgUmVmZXIgdG8gXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy5yc3RcdTAwM2UgZm9yIG1vcmVcbiAgNTQ6XHRcdCAgaW5mb3JtYXRpb24uXG4gIDU1Olx0XG4gIDU2Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGVcbiAgNTc6XHRcdCAgd2lsbCBiZSBjYWxsZWQgYm9uZGluZy5cbiAgNTg6XHRcbiAgNTk6XHRjb25maWcgRFVNTVlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5NTIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBCb25kaW5nIE1vZHVsZSBDb21waWxhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGJvbmRfYWxiLmNgIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIGJ1aWxkIGluc3RydWN0aW9ucywgYW5kIEkmIzM5O20gc3VyZSBpdCYjMzk7bGwgaG9sZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgZm9yIHRoaXMgc3BlY2lmaWMgZmlsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHJ1bGVzIGFuZCBkZXBlbmRlbmNpZXMgaXQgZGVmaW5lcy4gVGhpcyBpcyB1c3VhbGx5IHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBjb25maXJtIGFzc3VtcHRpb25zIGFib3V0IHRoZSBidWlsZCBzeXN0ZW0uIEkmIzM5O20gZXhwZWN0aW5nIHN0YW5kYXJkIG9iamVjdCBmaWxlIGdlbmVyYXRpb24sIGxpbmtpbmcsIGFuZCBwcm9iYWJseSBzb21lIGtlcm5lbCBtb2R1bGUgbWFnaWMuIExldCYjMzk7cyBkaXZlIGluIGFuZCBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBFdGhlcm5ldCBCb25kaW5nIGRyaXZlclxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRvYmotJChDT05GSUdfQk9ORElORykgJiM0Mzs9IGJvbmRpbmcub1xuICAgNzpcdFxuICAgODpcdGJvbmRpbmctb2JqcyA6PSBib25kX21haW4ubyBib25kXzNhZC5vIGJvbmRfYWxiLm8gYm9uZF9zeXNmcy5vIGJvbmRfc3lzZnNfc2xhdmUubyBib25kX2RlYnVnZnMubyBib25kX25ldGxpbmsubyBib25kX29wdGlvbnMub1xuICAgOTpcdFxuICAxMDpcdHByb2MtJChDT05GSUdfUFJPQ19GUykgJiM0Mzs9IGJvbmRfcHJvY2ZzLm9cbiAgMTE6XHRib25kaW5nLW9ianMgJiM0Mzs9ICQocHJvYy15KVxuICAxMjpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQm9uZGluZyBNb2R1bGUgU3ltYm9scyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYm9uZGluZyBtb2R1bGUmIzM5O3MgYnVpbGQgcHJvY2Vzcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYGJvbmRfYWxiLm9gIGlzIGFsd2F5cyBpbmNvcnBvcmF0ZWQgaW50byBgYm9uZGluZy5vYCB3aGVuIGBDT05GSUdfQk9ORElOR2AgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZSwgZ2l2ZW4gdGhhdCBgQ09ORklHX0JPTkRJTkdgIGl0c2VsZiBkZXBlbmRzIG9uIGBJTkVUYC4gSSBuZWVkIHRvIGVuc3VyZSBJJiMzOTt2ZSBjb3ZlcmVkIGFsbCB0aGUgZGVwZW5kZW5jaWVzLCB0aG91Z2guIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgaW52b2x2ZWQ/IExldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayBgTkVUX0NPUkVgIOKAkyB0aGF0JiMzOTtzIGEgbWVudSBvciBib29sZWFuLCBJSVJDLgoKTm93LCBsZXQmIzM5O3MgdHVybiBteSBhdHRlbnRpb24gdG8gYGNvbXB1dGVfZ2FwYC4gSSBzZWUgaXQmIzM5O3MgZGVmaW5lZCBhcyBgc3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKWAuIEJlY2F1c2UgaXQmIzM5O3Mgc3RhdGljIGFuZCAqbm90KiBleHBsaWNpdGx5IGlubGluZWQgKG9yIGF0IGxlYXN0LCBJIGRvbiYjMzk7dCBzZWUgdGhlIGlubGluZSBrZXl3b3JkKSB0aGF0IG1lYW5zIGl0ICpjb3VsZCogaGF2ZSBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIEkgc2hvdWxkIGJlIGluY2x1ZGluZyBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgX190bGJfY2hvb3NlX2NoYW5uZWxgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBvciBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgY29tcHV0ZV9nYXBgIGlzIHN0YXRpYyBhbmQgbm9uLWlubGluZTogWWVwLCB0aGUgZGVmaW5pdGlvbiBjb25maXJtcyB0aGF0OiBgc3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKWAuIEkgZG9uJiMzOTt0IHNlZSB0aGUgYGlubGluZWAga2V5d29yZC4gU2luY2UgaXQmIzM5O3MgYSBzbWFsbCBmdW5jdGlvbiBhbmQgaGFzIG9ubHkgYSBzaW5nbGUgY2FsbCBzaXRlLCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBoYXZlIGlubGluZWQgaXQgaW50byBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLgoKYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCBpcyBhbHNvIHN0YXRpYywgYW5kIGl0JiMzOTtzIGNhbGxlZCB3aXRoaW4gYF9fdGxiX2Nob29zZV9jaGFubmVsYC4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBpZiBpdCYjMzk7cyBleHBvcnRlZCBvciBzdGF0aWM6IGBzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClgLiBTbywgaXQmIzM5O3Mgc3RhdGljIHRvby4KCkFscmlnaHQsIHdoYXQgYWJvdXQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YD8gVGhvc2UgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBhcmUgY2FsbGVkIGZyb20gYGJvbmRfbWFpbi5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aW1lIHRvIHRyYWNrIGRvd24gdGhlIGNhbGwgc2l0ZXMgZm9yIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfeG1pdF8uKl9zbGF2ZV9nZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTM0NT1zdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF9kb19hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM3Ny1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxMzc4OnN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM3OS1cdFx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MTY9bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjAtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyMTpcdHR4X3NsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDIyLVx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjQtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyNTpzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjYtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xNTI5PW5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMzLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1MzQ6XHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzNS1cdHJldHVybiBib25kX2RvX2FsYl94bWl0KHNrYiwgYm9uZCwgdHhfc2xhdmUpO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDkzMz1zdGF0aWMgdTMyIGJvbmRfcnJfZ2VuX3NsYXZlX2lkKHN0cnVjdCBib25kaW5nICpib25kKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNDk1Ny1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDk1ODpzdGF0aWMgc3RydWN0IHNsYXZlICpib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTQ5NTktXHRcdFx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00OTk2PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeGRwX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDEwLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDExOlx0LyogU2VlIGNvbW1lbnQgb24gSUdNUCBpbiBib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoKSAqL1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDEyLVx0aWYgKGV0aC1cdTAwM2VoX3Byb3RvID09IGh0b25zKEVUSF9QX0lQKSkge1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTAzNz1zdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF94bWl0X3JvdW5kcm9iaW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNDItXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNDM6XHRzbGF2ZSA9IGJvbmRfeG1pdF9yb3VuZHJvYmluX3NsYXZlX2dldChib25kLCBza2IpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDQ0LVx0aWYgKGxpa2VseShzbGF2ZSkpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDQ5LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDUwOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kKVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDUxLXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUwNTg9c3RhdGljIG5ldGRldl90eF90IGJvbmRfeG1pdF9hY3RpdmViYWNrdXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNjMtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNjQ6XHRzbGF2ZSA9IGJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KGJvbmQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MDY1LVx0aWYgKHNsYXZlKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTE1OD1pbnQgYm9uZF91cGRhdGVfc2xhdmVfYXJyKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNraXBzbGF2ZSlcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUyMjctXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUyMjg6c3RhdGljIHN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0XzNhZF94b3Jfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjI5LVx0XHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTI5Nj1zdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF8zYWRfeG9yX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUzMDMtXHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2V1c2FibGVfc2xhdmVzKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTMwNDpcdHNsYXZlID0gYm9uZF94bWl0XzNhZF94b3Jfc2xhdmVfZ2V0KGJvbmQsIHNrYiwgc2xhdmVzKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTMwNS1cdGlmIChsaWtlbHkoc2xhdmUpKVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQxMz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfeG1pdF9nZXRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlcl9kZXYsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDIyLVx0Y2FzZSBCT05EX01PREVfUk9VTkRST0JJTjpcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQyMzpcdFx0c2xhdmUgPSBib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQyNC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjUtXHRjYXNlIEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVA6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0MjY6XHRcdHNsYXZlID0gYm9uZF94bWl0X2FjdGl2ZWJhY2t1cF9zbGF2ZV9nZXQoYm9uZCk7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjctXHRcdGJyZWFrO1xuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQzMy1cdFx0XHRzbGF2ZXMgPSByY3VfZGVyZWZlcmVuY2UoYm9uZC1cdTAwM2V1c2FibGVfc2xhdmVzKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQzNDpcdFx0c2xhdmUgPSBib25kX3htaXRfM2FkX3hvcl9zbGF2ZV9nZXQoYm9uZCwgc2tiLCBzbGF2ZXMpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDM1LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MzgtXHRjYXNlIEJPTkRfTU9ERV9BTEI6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0Mzk6XHRcdHNsYXZlID0gYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ0MC1cdFx0YnJlYWs7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NDEtXHRjYXNlIEJPTkRfTU9ERV9UTEI6XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0NDI6XHRcdHNsYXZlID0gYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ0My1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NjEwPWJvbmRfeGRwX2dldF94bWl0X3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IHhkcF9idWZmICp4ZHApXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NjIyLVx0Y2FzZSBCT05EX01PREVfQUNUSVZFQkFDS1VQOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NjIzOlx0XHRzbGF2ZSA9IGJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KGJvbmQpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NjI0LVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMjEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5ldHdvcmsgQm9uZGluZyBUcmFuc21pc3Npb24gTW9kZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGludG8gaG93IHRoZSBib25kaW5nIGRyaXZlciBoYW5kbGVzIHRyYW5zbWl0IG9wZXJhdGlvbnMsIHNwZWNpZmljYWxseSBpbiBBTEIgYW5kIFRMQiBtb2Rlcy4gSXQgbG9va3MgbGlrZSBgYm9uZF9hbGJfeG1pdGAgYW5kIGBib25kX3RsYl94bWl0YCBhcmUgdGhlIHN0YXJ0aW5nIHBvaW50cyDigJMgdGhlIGBuZG9fc3RhcnRfeG1pdGAgZnVuY3Rpb25zIGZvciB0aGVzZSBtb2Rlcy4gIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AgdG8gZ2V0IGEgbGF5IG9mIHRoZSBsYW5kLCBzcGVjaWZpY2FsbHkgbG9va2luZyBhdCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGluIHRoaXMgY29udGV4dC4KCkxldCYjMzk7cyBzZWU6IGBjb21wdXRlX2dhcGAsIHdoaWNoIGlzIHRoZSBmdW5jdGlvbiBJIHRoaW5rIHdhcyBtb2RpZmllZCwgdGhlbiBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCB3aGljaCBkaXJlY3RseSBjYWxscyBpdC4gT2YgY291cnNlLCBgYm9uZF9hbGJfeG1pdGAgYW5kIGBib25kX3RsYl94bWl0YCBhcmUgdGhlcmUsIHRoZSBjb3JlIG9mIHRoZSB0cmFuc21pc3Npb24gbG9naWMgZm9yIGVhY2ggYm9uZGluZyBtb2RlLiBJIGFsc28gbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzbGF2ZSBzZWxlY3Rpb24sIHNvIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAgYW5kIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAgYXJlIGltcG9ydGFudCB0byBub3RlLgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuICBgY29tcHV0ZV9nYXBgIOKAkyBJJiMzOTtsbCBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBpdCYjMzk7cyBzdGF0aWMuLi4geWVzLCBnb29kLiBUaGlzIG1ha2VzIHNlbnNlLiBJdCYjMzk7cyBsaWtlbHkgYW4gaW50ZXJuYWwgdXRpbGl0eSBmdW5jdGlvbi4gU2ltaWxhcmx5LCBJJiMzOTtsbCBjaGVjayBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIOKAkyBhbmQgeWVzLCB0aGF0JiMzOTtzIGFsc28gc3RhdGljLCBhcyBleHBlY3RlZCwgYXMgaXQmIzM5O3MgYW4gaW50ZXJuYWwgcGFydCBvZiB0aGUgVExCIGxvZ2ljLgoKQnV0IGBib25kX2FsYl94bWl0YC4uLiBhaCwgdGhhdCYjMzk7cyAqbm90KiBzdGF0aWMuIFRoaXMgbWVhbnMgaXQmIzM5O3MgbGlrZWx5IHBhcnQgb2YgdGhlIGV4dGVybmFsIGludGVyZmFjZS4gSXQmIzM5O3MgdXNlZCBzb21ld2hlcmUgaW4gYGJvbmRfbWFpbi5jYCDigJMgcHJvYmFibHkgdmlhIHRoZSBgbmV0ZGV2X29wc2Agc3RydWN0dXJlIG9yIHRoZSBib25kIG1vZGUgaGFuZGxlcnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVzZWQgYmVjYXVzZSB0aGF0JiMzOTtzIGtleS4gTm93LCBJIG5lZWQgdG8gZ2V0IGludG8gdGhlIGNvZGUgdG8gdHJhY2UgdGhlaXIgZGVmaW5pdGlvbiBhbmQgdXNhZ2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JvbmRfYWxiX3htaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MjI3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzMi1cdC8qIFdlIGRvbiYjMzk7dCBuZWVkIHRvIGRpc2FibGUgc29mdGlycSBoZXJlLCBiZWNhdXNlXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlx0ICogdGxiX2Nob29zZV9jaGFubmVsKCkgaXMgb25seSBjYWxsZWQgYnkgYm9uZF9hbGJfeG1pdCgpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM0LVx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTQyNT1zdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTI4LVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE1Mjk6bmV0ZGV2X3R4X3QgYm9uZF9hbGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzMC17XG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NTUwPXN0YXRpYyBuZXRkZXZfdHhfdCBfX2JvbmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3Ni1cdGNhc2UgQk9ORF9NT0RFX0FMQjpcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU3NzpcdFx0cmV0dXJuIGJvbmRfYWxiX3htaXQoc2tiLCBkZXYpO1xuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc4LVx0Y2FzZSBCT05EX01PREVfVExCOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOgoKKipNeSBEZWVwIERpdmUgaW50byBgYm9uZF90bGJfeG1pdGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgYm9uZF90bGJfeG1pdGAsIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGRpc3NlY3RpbmcgdGhlIGltcGxpY2F0aW9ucy4gSXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gcmVsYXRlZCB0byBib25kaW5nIGFuZCwgbW9zdCBsaWtlbHksIHRyYW5zbGF0aW9uIGxvb2thc2lkZSBidWZmZXJzLiBJbiBteSBleHBlcmllbmNlLCBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVkIGluIGhhbmRsaW5nIHRoZSB0cmFuc21pc3Npb24gb2YgcGFja2V0cyBhY3Jvc3MgYm9uZGVkIG5ldHdvcmsgaW50ZXJmYWNlcywgZXNwZWNpYWxseSBpbiBzY2VuYXJpb3MgaW52b2x2aW5nIGxvYWQgYmFsYW5jaW5nIG9yIGZhaWxvdmVyLiBJJiMzOTttIHZpc3VhbGl6aW5nIHRoZSBuZXR3b3JrIHN0YWNrLCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyLWxldmVsIGRyaXZlcnMsIHRoZSBib25kaW5nIG1vZHVsZSBpdHNlbGYsIGFuZCB0aGUgb3ZlcmFsbCBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LgoKSSYjMzk7bSBzdGFydGluZyB0byBjb25zaWRlciB0aGUgcG90ZW50aWFsIGlzc3VlczogY2FjaGUgY29oZXJlbmN5LCB0aGUgaW1wYWN0IG9mIGRpZmZlcmVudCBoYXJkd2FyZSBpbXBsZW1lbnRhdGlvbnMsIGFuZCB0aGUgcG9zc2libGUgZWRnZSBjYXNlcyBhcmlzaW5nIGZyb20gYSB2YXJpZXR5IG9mIGJvbmRpbmcgbW9kZXMuIEkgd29uZGVyIGlmIGl0JiMzOTtzIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIGJlY2F1c2UgaWYgaXQmIzM5O3Mgbm90IGFuZCB3ZSBhcmUgdXNpbmcgaXQgb24gYSBzeXN0ZW0sIHNheSB3aXRoIGEgcGFydGljdWxhciBOSUMgY2hpcHNldCwgdGhlcmUgbWF5IGJlIHNvbWUgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgdGhlcmUuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoZXJlIGFyZSBhbnkgcmFjZSBjb25kaXRpb25zIGl0IG1pZ2h0IGhhdmUuIERvZXMgaXQgZW1wbG95IHNwaW5sb2NrcywgbXV0ZXhlcywgb3Igc29tZSBtb3JlIHNvcGhpc3RpY2F0ZWQgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRyYW5zbWlzc2lvbj8gQSBxdWljayBnbGFuY2UgYXQgdGhlIGNvZGUgKEkmIzM5O2QgYmUgd2FudGluZyB0byBkbyB0aGF0IGFzIHNvb24gYXMgSSBjYW4sIG9mIGNvdXJzZSkgd291bGQgcXVpY2tseSB2ZXJpZnkgbXkgc3VzcGljaW9ucy4gCgpJJiMzOTttIGNvbnNpZGVyaW5nIHRoZSBjb250ZXh0OiBpcyB0aGlzIHBhcnQgb2YgdGhlIGNvcmUgbmV0d29ya2luZyBjb2RlLCBvciBhIGxheWVyIG9uIHRvcD8gSG93IGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGFuZCBob3cgZG9lcyBpdCBkZWFsIHdpdGggdGhlIHZhcmlvdXMgbmV0d29yayBoZWFkZXJzLCBWTEFOIHRhZ3MsIGFuZCBjaGVja3N1bSBjYWxjdWxhdGlvbnMgdGhhdCBhcmUgcGFydCBvZiB0aGUgcHJvY2Vzcz8gQWxzbywgZXJyb3IgaGFuZGxpbmcgaXMgYW4gaW1wb3J0YW50IHRoaW5nIHRvIGxvb2sgYXQuIEFyZSB0aGVyZSByb2J1c3QgZXJyb3IgY2hlY2tzIGFuZCBmYWxsYmFjayBtZWNoYW5pc21zIGluIHBsYWNlPyBGYWlsdXJlcyBoZXJlIGNhbiBoYXZlIHByZXR0eSBzZXJpb3VzIGNvbnNlcXVlbmNlcy4gRmluYWxseSwgdGhlIG1vcmUgSSB0aGluayBhYm91dCB0aGlzLCB0aGUgbW9yZSBteSBpbnRlcmVzdCBpcyBwaXF1ZWQuIEkmIzM5O20gYmV0dGluZyB0aGF0IHRoaXMgbGl0dGxlIGZ1bmN0aW9uIGhvbGRzIGEga2V5IHRvIHVuZGVyc3RhbmRpbmcgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIG5ldHdvcmsgYmVoYXZpb3IuIEkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIHJlYWQgdGhlIHNvdXJjZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Ym9uZF90bGJfeG1pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzc4PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MTUtXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQxNjpuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDE3LXtcbi0tXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTA9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTc4LVx0Y2FzZSBCT05EX01PREVfVExCOlxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc5Olx0XHRyZXR1cm4gYm9uZF90bGJfeG1pdChza2IsIGRldik7XG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1ODAtXHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzEzMgoJCQkJCQkJb3V0cHV0OiAyMDUKCQkJCQkJCXRob3VnaHRzOiA1ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgQm9uZGluZyBBTEIvVExCIFRyYW5zbWl0IE1vZGUgQ29kZSBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBzZXQgb2YgZnVuY3Rpb25zOiBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgYm9uZF9hbGJfeG1pdGAsIGBib25kX3RsYl94bWl0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAuIFRoZXNlIGFyZW4mIzM5O3QgZ2VuZXJpYywgdGhleSYjMzk7cmUgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYm9uZGluZyYjMzk7cyBBZGFwdGl2ZSBMb2FkIEJhbGFuY2luZyAoQUxCKSBhbmQgVHJhbnNtaXQgTG9hZCBCYWxhbmNpbmcgKFRMQikgbW9kZXMuIEZpcnN0LCBsZXQmIzM5O3Mgc2VlIGlmIHdlIGNhbiBlbmFibGUgdGhlbS4KCkNoZWNraW5nIGBFbmFibGVDb25maWdzYCwgSSBzZWUgdGhhdCBgQk9ORElOR2AgaXMgdGhlIGtleS4gQW5kLCBvZiBjb3Vyc2UsIHRoYXQgZGVwZW5kcyBvbiBgSU5FVGAuIFRoZW4sIGEgcXVpY2sgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlYCBjb25maXJtcyBgb2JqLSQoQ09ORklHX0JPTkRJTkcpICYjNDM7PSBib25kaW5nLm9gLCBhbmQgYENPTkZJR19CT05ESU5HYCAqZG9lcyogaW5kZWVkIGRlcGVuZCBvbiBgQ09ORklHX0lORVRgLiBTbywgYEJPTkRJTkdgIGFuZCBgSU5FVGAgYXJlIHRoZSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUuCgpOb3cgZm9yIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBpcyB0aGlzIGNvZGUgcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBBTEIgYW5kIFRMQiBtb2RlcyBpbiB0aGUgYm9uZGluZyBkcml2ZXIgYXJlIGVhc2lseSBjb25maWd1cmVkIGluIG1hbnkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBZb3UgY2FuIHJlYWRpbHkgc2V0IHRoZXNlIHVwIHVzaW5nIHZpcnR1YWwgbmV0ZGV2cyBsaWtlIHZldGggb3IgZHVtbXkgZGV2aWNlcywgYW5kIGNvbnRyb2wgdGhlbSB1c2luZyBydG5ldGxpbmsgb3Igc3lzZnMuIE1ha2VzIGZvciBzaW1wbGUgdGVzdGluZy4KCkRvZXMgdGhlIGNoYW5nZSBhY3R1YWxseSBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlPyBZZXMsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSAzMi1iaXQgc2hpZnQgb3ZlcmZsb3cgaW4gYGNvbXB1dGVfZ2FwKClgLiBTbyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0aGUgYEZvY3VzU3ltYm9sc2AuIFl1cCwgYGNvbXB1dGVfZ2FwYCwgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCwgYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAgYXJlIGFsbCBjb3JyZWN0IGFuZCByZWxldmFudC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuCgotICAgYFdvcnRoRnV6emluZ2A6IFRydWUKLSAgIGBSZWFzb25pbmdgOiBXZSYjMzk7dmUgZ290IGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGNvbXB1dGVfZ2FwKClgIHRoYXQmIzM5O3MgYmVlbiBmaXhlZC4gVGhlIGZpeCBpbnZvbHZlcyBjYXN0aW5nIHRvIGBzNjRgIGJlZm9yZSBzaGlmdGluZyBgc2xhdmUtJmd0O3NwZWVkYCBhbmQgYGxvYWRgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIEFMQi9UTEIgdHJhbnNtaXQgcGF0aCwgYW5kIHRlc3RhYmxlIHVzaW5nIHZpcnR1YWwgZGV2aWNlcyBsaWtlIGR1bW15IG9yIHZldGggaW4gUUVNVS4gV2UmIzM5O2xsIGFsc28gYmUgc3VyZSB0byBsaXN0IHRoZSBuZWNlc3Nhcnkgc3ltYm9scyBhbmQgY29uZmlndXJhdGlvbnMuCi0gICBgRm9jdXNTeW1ib2xzYDogSSYjMzk7bGwgaW5jbHVkZSBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgYm9uZF9hbGJfeG1pdGAsIGBib25kX3RsYl94bWl0YCwgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCwgYW5kIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAuCi0gICBgRW5hYmxlQ29uZmlnc2A6IGBCT05ESU5HYCBhbmQgYElORVRgLgoKQWxyaWdodCwgZXZlcnl0aGluZyBpcyBzcXVhcmVkIGF3YXkuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCT05ESU5HJiMzNDssCiAgICAmIzM0O0lORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb21wdXRlX2dhcCYjMzQ7LAogICAgJiMzNDt0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZSYjMzQ7LAogICAgJiMzNDtib25kX2FsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfdGxiX3htaXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X2FsYl9zbGF2ZV9nZXQmIzM0OywKICAgICYjMzQ7Ym9uZF94bWl0X3RsYl9zbGF2ZV9nZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXHUwMDNlc3BlZWQgYW5kIGxvYWQgdG8gNjQtYml0IHNpZ25lZCBpbnRlZ2VycyBwcmlvciB0byB0aGUgYml0IHNoaWZ0IG9wZXJhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJiMzOTtzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Qk9ORElORyYjMzQ7LAogICAgJiMzNDtJTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29tcHV0ZV9nYXAmIzM0OywKICAgICYjMzQ7dGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUmIzM0OywKICAgICYjMzQ7Ym9uZF9hbGJfeG1pdCYjMzQ7LAogICAgJiMzNDtib25kX3RsYl94bWl0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0JiMzNDssCiAgICAmIzM0O2JvbmRfeG1pdF90bGJfc2xhdmVfZ2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHBvdGVudGlhbCAzMi1iaXQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlciYjMzk7cyBhZGFwdGl2ZSBsb2FkIGJhbGFuY2luZyAoQUxCKSBhbmQgdHJhbnNtaXQgbG9hZCBiYWxhbmNpbmcgKFRMQikgbW9kZSBwYWNrZXQgdHJhbnNtaXQgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHVzaW5nIHZpcnR1YWwgaW50ZXJmYWNlcyAoc3VjaCBhcyB2ZXRoIG9yIGR1bW15IGRldmljZXMpIGJvbmRlZCBpbiBBTEIvVExCIG1vZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhbiBpbnRlZ2VyIHRydW5jYXRpb24vb3ZlcmZsb3cgYnVnIGluIGNvbXB1dGVfZ2FwKCkgYnkgY2FzdGluZyBzbGF2ZS1cdTAwM2VzcGVlZCBhbmQgbG9hZCB0byA2NC1iaXQgc2lnbmVkIGludGVnZXJzIChzNjQpIHByaW9yIHRvIGJpdC1zaGlmdGluZywgcHJldmVudGluZyAzMi1iaXQgYXJpdGhtZXRpYyBvdmVyZmxvdyBmb3IgaGlnaCBsaW5rIHNwZWVkcyAoZS5nLiwgXHUwMDNlPSA0R2JwcykuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTM6MzY6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKaW5kZXggNDNhYzhlMjhlNDE4Mi4uYjUyMDA0MDMwYTRiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwpAQCAtMTYwLDggJiM0MzsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKQogCiBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpCiB7Ci0JcmV0dXJuIChzNjQpIChzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KLQkgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiYjNDM7CXJldHVybiAoKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KJiM0MzsJICAgICAgICgoczY0KVNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0OQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJvbmRpbmcgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb21wdXRlX2dhcGAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQmIzM5O3MgYSBtaW5vciBjaGFuZ2U7IGVzc2VudGlhbGx5LCB0aGUgYWRkaXRpb24gb2YgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBzZWNvbmQgdGVybSBpbiB0aGUgcmV0dXJuIHN0YXRlbWVudDoKCmBgYGMKc3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQp7Ci0JcmV0dXJuIChzNjQpIChzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KLQkgICAgICAgKHM2NCkgKFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCiYjNDM7CXJldHVybiAoKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi8KJiM0MzsJICAgICAgICgoczY0KVNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkICZsdDsmbHQ7IDMpOyAvKiBCeXRlcyB0byBiaXRzICovCn0KYGBgCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIG1hdHRlciBvZiBvcGVyYXRvciBwcmVjZWRlbmNlLCB3aGljaCwgaW4gYW5kIG9mIGl0c2VsZiwgaXMgcmFyZWx5IHdvcnRoIGEgcGF0Y2guIEFsdGhvdWdoLCB3aXRob3V0IGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlLiBJdCB3b3VsZCBiZSBnb29kIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gU28sIEkgd2lsbCB1c2UgYSB0b29sIHN1Y2ggYXMgYGdyZXBwZXJgIG9yIGByZWFkLWZpbGVgIHRvIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYCBmaWxlIGFuZCB1bmRlcnN0YW5kIHdoZXJlIGFuZCBob3cgYGNvbXB1dGVfZ2FwYCBpcyB1c2VkLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgaWYgdGhpcyBpcyBqdXN0IGEgc3R5bGUgaXNzdWUsIG9yIGlmIHRoZXJlIGlzIGEgcmVhbCBidWcgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTUwOlx0e1xuIDE1MTpcdFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcbiAxNTI6XHRcbiAxNTM6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gMTU0Olx0XG4gMTU1Olx0XHRrZnJlZShib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCk7XG4gMTU2Olx0XHRib25kX2luZm8tXHUwMDNldHhfaGFzaHRibCA9IE5VTEw7XG4gMTU3Olx0XG4gMTU4Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZib25kLVx1MDAzZW1vZGVfbG9jayk7XG4gMTU5Olx0fVxuIDE2MDpcdFxuIDE2MTpcdHN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbiAxNjI6XHR7XG4gMTYzOlx0XHRyZXR1cm4gKChzNjQpc2xhdmUtXHUwMDNlc3BlZWQgXHUwMDNjXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXG4gMTY0Olx0XHQgICAgICAgKChzNjQpU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXG4gMTY1Olx0fVxuIDE2NjpcdFxuIDE2NzpcdHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxuIDE2ODpcdHtcbiAxNjk6XHRcdHN0cnVjdCBzbGF2ZSAqc2xhdmUsICpsZWFzdF9sb2FkZWQ7XG4gMTcwOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkICppdGVyO1xuIDE3MTpcdFx0bG9uZyBsb25nIG1heF9nYXA7XG4gMTcyOlx0XG4gMTczOlx0XHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xuIDE3NDpcdFx0bWF4X2dhcCA9IExMT05HX01JTjtcbiAxNzU6XHRcbiAxNzY6XHRcdC8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovXG4gMTc3Olx0XHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xuIDE3ODpcdFx0XHRpZiAoYm9uZF9zbGF2ZV9jYW5fdHgoc2xhdmUpKSB7XG4gMTc5Olx0XHRcdFx0bG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcbiAxODA6XHRcbiAxODE6XHRcdFx0XHRpZiAobWF4X2dhcCBcdTAwM2MgZ2FwKSB7XG4gMTgyOlx0XHRcdFx0XHRsZWFzdF9sb2FkZWQgPSBzbGF2ZTtcbiAxODM6XHRcdFx0XHRcdG1heF9nYXAgPSBnYXA7XG4gMTg0Olx0XHRcdFx0fVxuIDE4NTpcdFx0XHR9XG4gMTg2Olx0XHR9XG4gMTg3Olx0XG4gMTg4Olx0XHRyZXR1cm4gbGVhc3RfbG9hZGVkO1xuIDE4OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI5NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDM1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaCBmb3IgUG90ZW50aWFsIEFyaXRobWV0aWMgT3ZlcmZsb3cqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGU6IGByZXR1cm4gKHM2NCkgKHNsYXZlLSZndDtzcGVlZCAmbHQ7Jmx0OyAyMCkgLSAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgJmx0OyZsdDsgMyk7YCBhbmQgaW1tZWRpYXRlbHkgcmVjb2duaXplIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggdGhlIGJpdC1zaGlmdGluZy4gYHNsYXZlLSZndDtzcGVlZGAgaXMsIGFzIEkgc3VzcGVjdCwgbGlrZWx5IGEgMzItYml0IHVuc2lnbmVkIG9yIHNpZ25lZCBpbnRlZ2VyIHR5cGUsIGEgYHUzMmAgb3Igc2ltaWxhci4gSWYgaXQgcmVwcmVzZW50cyBzb21ldGhpbmcgbGlrZSBuZXR3b3JrIHNwZWVk4oCUc2F5LCA0MDAwMCBNYnBzIG9yIGV2ZW4gMTAwIEdicHPigJR0aGUgbGVmdC1zaGlmdCBieSAyMCBiaXRzIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gY2F1c2UgYW4gb3ZlcmZsb3cgaW4gYSAzMi1iaXQgaW50ZWdlci4gVGhlIHNhbWUgaXNzdWUgZXhpc3RzIGZvciBgbG9hZCAmbHQ7Jmx0OyAzYCBpZiB0aGUgbG9hZCBpcyBhIHNpZ25pZmljYW50IG51bWJlci4KClRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFRoZSBzaGlmdCBpcyBwZXJmb3JtZWQgKmJlZm9yZSogdGhlIGNhc3QgdG8gYHM2NGAuIFNvIHRoZSBiaXQgc2hpZnQgaXMgcGVyZm9ybWVkIG9uIHRoZSBuYXJyb3dlciAzMi1iaXQgaW50ZWdlci4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY2FzdGluZyB0byBgczY0YCAqYmVmb3JlKiB0aGUgc2hpZnQ6IGAoKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApYC4gVGhpcyBndWFyYW50ZWVzIGEgNjQtYml0IHNoaWZ0IG9wZXJhdGlvbiwgd2hpY2ggcHJldmVudHMgdGhlIG92ZXJmbG93IGFuZCB0cnVuY2F0aW9uLiBUaGF0JiMzOTtzIGEgdGV4dGJvb2sgZXhhbXBsZSBvZiBhIGZpeCBmb3IgdGhpcyBraW5kIG9mIGFyaXRobWV0aWMgYnVnLgoKTm93LCBteSBtb3JlIHNlY3VyaXR5LWNvbnNjaW91cyBzaWRlIGtpY2tzIGluLiBBbnkgY2hhbmdlLCBubyBtYXR0ZXIgaG93IHNtYWxsLCByZXF1aXJlcyBjYXJlZnVsIHNjcnV0aW55LiBNeSBuZXh0IHF1ZXN0aW9uIGlzOiBEb2VzIHRoaXMgaW50cm9kdWNlIGFueSBuZXcgaXNzdWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBJIG5lZWQgdG8gY2hlY2sgdGhlIGluaXRpYWxpemF0aW9uIG9mIGBzbGF2ZS0mZ3Q7c3BlZWRgIGFuZCBgU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWRgLiBXaGVyZSBhcmUgdGhlc2UgdmFsdWVzIGNvbWluZyBmcm9tPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQ/CgpGb3J0dW5hdGVseSwgYWZ0ZXIgYSBxdWljayByZXZpZXcsIEkgc2VlIHRoYXQgbm8gbmV3IHZhcmlhYmxlcyBhcmUgaW50cm9kdWNlZC4gTm8gbWVtb3J5IGlzIGFsbG9jYXRlZCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHBvaW50ZXJzLCBidWZmZXIgbGVuZ3Rocywgb3IgYnVmZmVycyBpbnZvbHZlZC4gVGhpcyBpcyBwdXJlbHkgYW4gYXJpdGhtZXRpYyBmaXggZm9yIGEgY2FsY3VsYXRpb24gcmVsYXRlZCB0byB0cmFuc21pc3Npb24gbG9hZCB3aXRoaW4gdGhlIGJvbmRpbmcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgaW4gQUxCIG1vZGUuIFRoYXQmIzM5O3MgZ29vZCBuZXdzLCBzaWduaWZpY2FudGx5IHJlZHVjaW5nIG15IGNvbmNlcm5zLiBTdGlsbCwgSSBzaG91bGQgcmV2aWV3IHRoZSBgc3RydWN0IHNsYXZlYCBkZWZpbml0aW9uIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZywgYnV0IGl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC11bmRlcnN0b29kIGZpeC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHNsYXZlIFxceyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L2JvbmRpbmcuaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9ib25kaW5nLmg9MTE3PXN0cnVjdCBib25kX3BhcmFtcyB7XG4tLVxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE1Ni1cbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDoxNTc6c3RydWN0IHNsYXZlIHtcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaC0xNTgtXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OyAvKiBmaXJzdCAtIHVzZWZ1bCBmb3IgcGFuaWMgZGVidWcgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTM6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI2NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNoZWNraW5nIHRoZSBCb25kaW5nIFNwZWVkKioKCk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYm9uZGluZyBkcml2ZXIuIExldCBtZSBqdXN0IGRpdmUgc3RyYWlnaHQgaW50byB0aGUgY29kZS4gVGhlIHNwZWNpZmljIHBpZWNlIEkgbmVlZCBpcyBgc2xhdmUtJmd0O3NwZWVkYCwgd2hpY2ggSSBiZWxpZXZlIGlzIGRlZmluZWQgd2l0aGluIGBpbmNsdWRlL25ldC9ib25kaW5nLmhgLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgc3BlZWQgaW5mb3JtYXRpb24gZm9yIGluZGl2aWR1YWwgc2xhdmVzIGluIGEgYm9uZCBpcyBzdG9yZWQsIGFuZCBJIG5lZWQgdG8gY29uZmlybSBpdHMgZGVmaW5pdGlvbiBhbmQgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBkcml2ZXIuIEnigJltIGJldHRpbmcgdGhpcyB3aWxsIGdpdmUgbWUgdGhlIGFuc3dlciBJ4oCZbSBsb29raW5nIGZvciB3aXRob3V0IG11Y2ggZGlnZ2luZy4gVGltZSB0byB0YWtlIGEgbG9vayBhbmQgZ2V0IHRoaXMgcmVzb2x2ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvYm9uZGluZy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTU3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNTc6XHRzdHJ1Y3Qgc2xhdmUge1xuIDE1ODpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjsgLyogZmlyc3QgLSB1c2VmdWwgZm9yIHBhbmljIGRlYnVnICovXG4gMTU5Olx0XHRzdHJ1Y3QgYm9uZGluZyAqYm9uZDsgLyogb3VyIG1hc3RlciAqL1xuIDE2MDpcdFx0aW50ICAgIGRlbGF5O1xuIDE2MTpcdFx0LyogYWxsIDQgaW4gamlmZmllcyAqL1xuIDE2MjpcdFx0dW5zaWduZWQgbG9uZyBsYXN0X2xpbmtfdXA7XG4gMTYzOlx0XHR1bnNpZ25lZCBsb25nIGxhc3RfdHg7XG4gMTY0Olx0XHR1bnNpZ25lZCBsb25nIGxhc3Rfcng7XG4gMTY1Olx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF9sYXN0X2FycF9yeFtCT05EX01BWF9BUlBfVEFSR0VUU107XG4gMTY2Olx0XHRzOCAgICAgbGluaztcdFx0Lyogb25lIG9mIEJPTkRfTElOS19YWFhYICovXG4gMTY3Olx0XHRzOCAgICAgbGlua19uZXdfc3RhdGU7XHQvKiBvbmUgb2YgQk9ORF9MSU5LX1hYWFggKi9cbiAxNjg6XHRcdHU4ICAgICBiYWNrdXA6MSwgICAvKiBpbmRpY2F0ZXMgYmFja3VwIHNsYXZlLiBWYWx1ZSBjb3JyZXNwb25kcyB3aXRoXG4gMTY5Olx0XHRcdFx0ICAgICAgQk9ORF9TVEFURV9BQ1RJVkUgYW5kIEJPTkRfU1RBVEVfQkFDS1VQICovXG4gMTcwOlx0XHQgICAgICAgaW5hY3RpdmU6MSwgLyogaW5kaWNhdGVzIGluYWN0aXZlIHNsYXZlICovXG4gMTcxOlx0XHQgICAgICAgcnhfZGlzYWJsZWQ6MSwgLyogaW5kaWNhdGVzIHdoZXRoZXIgc2xhdmUmIzM5O3MgUnggaXMgZGlzYWJsZWQgKi9cbiAxNzI6XHRcdCAgICAgICBzaG91bGRfbm90aWZ5OjEsIC8qIGluZGljYXRlcyB3aGV0aGVyIHRoZSBzdGF0ZSBjaGFuZ2VkICovXG4gMTczOlx0XHQgICAgICAgc2hvdWxkX25vdGlmeV9saW5rOjE7IC8qIGluZGljYXRlcyB3aGV0aGVyIHRoZSBsaW5rIGNoYW5nZWQgKi9cbiAxNzQ6XHRcdHU4ICAgICBkdXBsZXg7XG4gMTc1Olx0XHR1MzIgICAgb3JpZ2luYWxfbXR1O1xuIDE3NjpcdFx0dTMyICAgIGxpbmtfZmFpbHVyZV9jb3VudDtcbiAxNzc6XHRcdHUzMiAgICBzcGVlZDtcbiAxNzg6XHRcdHUxNiAgICBxdWV1ZV9pZDtcbiAxNzk6XHRcdHU4ICAgICBwZXJtX2h3YWRkcltNQVhfQUREUl9MRU5dO1xuIDE4MDpcdFx0aW50ICAgIHByaW87XG4gMTgxOlx0XHRzdHJ1Y3QgYWRfc2xhdmVfaW5mbyAqYWRfaW5mbztcbiAxODI6XHRcdHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB0bGJfaW5mbztcbiAxODM6XHQjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbiAxODQ6XHRcdHN0cnVjdCBuZXRwb2xsICpucDtcbiAxODU6XHQjZW5kaWZcbiAxODY6XHRcdHN0cnVjdCBkZWxheWVkX3dvcmsgbm90aWZ5X3dvcms7XG4gMTg3Olx0XHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xuIDE4ODpcdFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHNsYXZlX3N0YXRzO1xuIDE4OTpcdH07XG4gMTkwOlx0XG4gMTkxOlx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhdmUgKnRvX3NsYXZlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxuIDE5MjpcdHtcbiAxOTM6XHRcdHJldHVybiBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHNsYXZlLCBrb2JqKTtcbiAxOTQ6XHR9XG4gMTk1Olx0XG4gMTk2Olx0c3RydWN0IGJvbmRfdXBfc2xhdmUge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTE2CgkJCQkJCQlvdXRwdXQ6IDEyNwoJCQkJCQkJdGhvdWdodHM6IDM4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNlZSBpdCYjMzk7cyBhbiBhcml0aG1ldGljIGZpeC4gSXQmIzM5O3MgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBzb21ldGhpbmcuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNoaWZ0aW5nIGEgYHUzMmAgKHJlcHJlc2VudGluZyBhIHNwZWVkIHZhbHVlLCBsaWtlbHkgaW4gYSByYXRlIHBlciBzZWNvbmQgbGlrZSBHYnBzKSBieSAyMCBiaXRzIHVzaW5nIGAoczY0KShzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjApYC4gVGhlIHByb2JsZW0gaXMgdGhhdCBpZiBgc2xhdmUtJmd0O3NwZWVkYCBpcyBhIHJlbGF0aXZlbHkgbGFyZ2UgbnVtYmVyLCBzYXkgNDA5NiBvciBncmVhdGVyLCB0aGUgbGVmdCBzaGlmdCBvcGVyYXRpb24gKmJlZm9yZSogdGhlIGNhc3QgdG8gYHM2NGAgd291bGQgY2F1c2UgdGhlIGB1MzJgIHRvIG92ZXJmbG93LiBGb3IgZXhhbXBsZSwgYSAxMCBHYnBzIHZhbHVlICgxMDAwMCkgc2hpZnRlZCBieSAyMCBiaXRzIHJlc3VsdHMgaW4gYSB2YWx1ZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBgdTMyYCB2YWx1ZSwgY2F1c2luZyBpdCB0byB3cmFwIGFyb3VuZCwgdHJ1bmNhdGluZyBkYXRhIGJlZm9yZSBpdCYjMzk7cyBjYXN0IHRvIGEgYHM2NGAuCgpUaGUgcGF0Y2gmIzM5O3Mgc29sdXRpb24gaXMgZWxlZ2FudDogaXQgY2FzdHMgdGhlIGBzbGF2ZS0mZ3Q7c3BlZWRgIHRvIGEgYHM2NGAgKmJlZm9yZSogdGhlIHNoaWZ0LCBzbyBgKHM2NClzbGF2ZS0mZ3Q7c3BlZWQgJmx0OyZsdDsgMjBgIHBlcmZvcm1zIGEgNjQtYml0IHNoaWZ0LiBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgaW50ZXJtZWRpYXRlIHJlc3VsdCBjYW4gYWNjb21tb2RhdGUgdGhlIHNoaWZ0ZWQgdmFsdWUsIGF2b2lkaW5nIGFueSB0cnVuY2F0aW9uIG9yIG92ZXJmbG93LgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgY2hhbmdlIHdhcnJhbnQgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrPyBJIGRvbiYjMzk7dCB0aGluayBzby4gVGhpcyBpcyBhIHB1cmVseSBhcml0aG1ldGljIG9wZXJhdGlvbi4gSXQmIzM5O3Mgbm90IHRvdWNoaW5nIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgcGFkZGluZyBieXRlcywgb3IgaW52b2x2aW5nIGtlcm5lbC10by11c2Vyc3BhY2UgbWVtb3J5IGNvcGllcy4gVGhlIHN0YW5kYXJkIHRlc3RpbmcgdG9vbHMsIGFsb25nIHdpdGggS0FTQU4vVUJTQU4gKGZvciBwb3RlbnRpYWwgdW5kZWZpbmVkIHNoaWZ0cyBvciBzaWduZWQgb3ZlcmZsb3dzKSwgYXJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBzdWJ0bGUgaXNzdWVzLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSByaXNrIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQmIzM5O3Mgc2FmZSB0byBtYXJrIGBOZWVkc0tNU0FOYCBhcyBgZmFsc2VgIGhlcmUuIE15IHJlYXNvbmluZyBpcyBzb2xpZCwgYW5kIEkgY2FuIG5vdyBjb25maWRlbnRseSBwcmVwYXJlIHRoZSBjYWxsIHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEzOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgKHM2NCkgcHJpb3IgdG8gYml0LXNoaWZ0aW5nLCBwcmV2ZW50aW5nIDMyLWJpdCBhcml0aG1ldGljIG92ZXJmbG93IGZvciBoaWdoIGxpbmsgc3BlZWRzIChlLmcuLCBcdTAwM2U9IDRHYnBzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgKHM2NCkgcHJpb3IgdG8gYml0LXNoaWZ0aW5nLCBwcmV2ZW50aW5nIDMyLWJpdCBhcml0aG1ldGljIG92ZXJmbG93IGZvciBoaWdoIGxpbmsgc3BlZWRzIChlLmcuLCBcdTAwM2U9IDRHYnBzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MDcuODM1MjA1NTYzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxOTk5NjAyNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJPTkRJTkdcIixcbiAgICBcIklORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb21wdXRlX2dhcFwiLFxuICAgIFwidGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVcIixcbiAgICBcImJvbmRfYWxiX3htaXRcIixcbiAgICBcImJvbmRfdGxiX3htaXRcIixcbiAgICBcImJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0XCIsXG4gICAgXCJib25kX3htaXRfdGxiX3NsYXZlX2dldFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYW4gaW50ZWdlciB0cnVuY2F0aW9uL292ZXJmbG93IGJ1ZyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXFx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgKHM2NCkgcHJpb3IgdG8gYml0LXNoaWZ0aW5nLCBwcmV2ZW50aW5nIDMyLWJpdCBhcml0aG1ldGljIG92ZXJmbG93IGZvciBoaWdoIGxpbmsgc3BlZWRzIChlLmcuLCBcXHUwMDNlPSA0R2JwcykuIEl0IGRvZXMgbm90IGFsbG9jYXRlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGFsdGVyIGJ1ZmZlciBib3VuZGFyaWVzLCBvciBjb3B5IGRhdGEgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGFuZCBLTVNBTiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXFx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlcidzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MDcuODM1MjEyNDEzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTY3NjA2MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gU2VwIDEzIDEzOjM2OjA3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xcbmluZGV4IDQzYWM4ZTI4ZTQxODIuLmI1MjAwNDAzMGE0YjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jXFxuQEAgLTE2MCw4ICsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxcbiBcXG4gc3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbiB7XFxuLVxcdHJldHVybiAoczY0KSAoc2xhdmUtXFx1MDAzZXNwZWVkIFxcdTAwM2NcXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXFxuLVxcdCAgICAgICAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXFx1MDAzY1xcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cXG4rXFx0cmV0dXJuICgoczY0KXNsYXZlLVxcdTAwM2VzcGVlZCBcXHUwMDNjXFx1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xcbitcXHQgICAgICAgKChzNjQpU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXFx1MDAzY1xcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjA4LjI1MjcyNTQzN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NzgwNjc1NDE0NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbXB1dGVfZ2FwXCIsXG4gICAgXCJ0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZVwiLFxuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiLFxuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXFx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlcidzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTM6MzY6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDQzYWM4ZTI4ZTQxODIuLmI1MjAwNDAzMGE0YjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTE2MCw4ICsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuIFxuIHN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbiB7XG4tXHRyZXR1cm4gKHM2NCkgKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xuLVx0ICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbitcdHJldHVybiAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbitcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjowOC4yNTI3MjgyOTdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NjkzMzgyMjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQUxCIEJvbmRpbmcgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gdGhlIHBhdGNoIGlzIGluIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLiBMZXQncyBkaXZlIGluLiBUaGUgZGlmZiBzaG93cyBhIG1pbm9yIGNoYW5nZSBpbiB0aGUgYGNvbXB1dGVfZ2FwYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGV5J3ZlIGp1c3QgYWRkZWQgcGFyZW50aGVzZXMgYXJvdW5kIHRoZSBzZWNvbmQgdGVybSBpbiB0aGUgc3VidHJhY3Rpb246IGAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMylgLiBUaGF0J3MgYSBjbGFzc2ljIGNvZGUgcmVhZGFiaWxpdHkgaW1wcm92ZW1lbnQsIGVuc3VyaW5nIHRoZSBiaXQgc2hpZnQgaXMgcGVyZm9ybWVkIGJlZm9yZSB0aGUgY29udmVyc2lvbiB0byBhIHNpZ25lZCA2NC1iaXQgaW50ZWdlciwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIGFueSBwb3RlbnRpYWwgcHJlY2VkZW5jZSBpc3N1ZXMuIFRoaXMgY291bGQgYmUgYSBmaXggZm9yIHNvbWUgZWRnZSBjYXNlLCBvciBqdXN0IGEgZ2VuZXJhbCBjb2RlLXN0eWxlIGltcHJvdmVtZW50LlxuXG5Ob3csIGxldCdzIGdldCBzb21lIGNvbnRleHQgYXJvdW5kIHRoaXMgZnVuY3Rpb24uIEknbGwgdGFrZSBhIHF1aWNrIGxvb2sgYXJvdW5kIGBjb21wdXRlX2dhcGAgaW4gdGhhdCBmaWxlIHVzaW5nIGByZWFkLWZpbGVgIG9yIGBncmVwcGVyYCB0byB1bmRlcnN0YW5kIGhvdyBpdCdzIHVzZWQgYW5kIHdoYXQgaXQncyB0cnlpbmcgdG8gZG8sIGFuZCBJIHdpbGwgYWxzbyBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gd2hldGhlciB0aGVyZSBoYXZlIGJlZW4gYW55IHJlbGV2YW50IGNvbmZpZyBjaGFuZ2VzLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIHB1cnBvc2UgYW5kIGltcGFjdCBvZiB0aGlzIHNtYWxsIGNoYW5nZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzNywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjE0Ljk0NjExMzQyNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNTI3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTUwOlxcdHtcXG4gMTUxOlxcdFxcdHN0cnVjdCBhbGJfYm9uZF9pbmZvICpib25kX2luZm8gPSBcXHUwMDI2KEJPTkRfQUxCX0lORk8oYm9uZCkpO1xcbiAxNTI6XFx0XFxuIDE1MzpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuIDE1NDpcXHRcXG4gMTU1OlxcdFxcdGtmcmVlKGJvbmRfaW5mby1cXHUwMDNldHhfaGFzaHRibCk7XFxuIDE1NjpcXHRcXHRib25kX2luZm8tXFx1MDAzZXR4X2hhc2h0YmwgPSBOVUxMO1xcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4gMTU5OlxcdH1cXG4gMTYwOlxcdFxcbiAxNjE6XFx0c3RhdGljIGxvbmcgbG9uZyBjb21wdXRlX2dhcChzdHJ1Y3Qgc2xhdmUgKnNsYXZlKVxcbiAxNjI6XFx0e1xcbiAxNjM6XFx0XFx0cmV0dXJuICgoczY0KXNsYXZlLVxcdTAwM2VzcGVlZCBcXHUwMDNjXFx1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xcbiAxNjQ6XFx0XFx0ICAgICAgICgoczY0KVNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkIFxcdTAwM2NcXHUwMDNjIDMpOyAvKiBCeXRlcyB0byBiaXRzICovXFxuIDE2NTpcXHR9XFxuIDE2NjpcXHRcXG4gMTY3OlxcdHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbiAxNjg6XFx0e1xcbiAxNjk6XFx0XFx0c3RydWN0IHNsYXZlICpzbGF2ZSwgKmxlYXN0X2xvYWRlZDtcXG4gMTcwOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKml0ZXI7XFxuIDE3MTpcXHRcXHRsb25nIGxvbmcgbWF4X2dhcDtcXG4gMTcyOlxcdFxcbiAxNzM6XFx0XFx0bGVhc3RfbG9hZGVkID0gTlVMTDtcXG4gMTc0OlxcdFxcdG1heF9nYXAgPSBMTE9OR19NSU47XFxuIDE3NTpcXHRcXG4gMTc2OlxcdFxcdC8qIEZpbmQgdGhlIHNsYXZlIHdpdGggdGhlIGxhcmdlc3QgZ2FwICovXFxuIDE3NzpcXHRcXHRib25kX2Zvcl9lYWNoX3NsYXZlX3JjdShib25kLCBzbGF2ZSwgaXRlcikge1xcbiAxNzg6XFx0XFx0XFx0aWYgKGJvbmRfc2xhdmVfY2FuX3R4KHNsYXZlKSkge1xcbiAxNzk6XFx0XFx0XFx0XFx0bG9uZyBsb25nIGdhcCA9IGNvbXB1dGVfZ2FwKHNsYXZlKTtcXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0XFx0XFx0aWYgKG1heF9nYXAgXFx1MDAzYyBnYXApIHtcXG4gMTgyOlxcdFxcdFxcdFxcdFxcdGxlYXN0X2xvYWRlZCA9IHNsYXZlO1xcbiAxODM6XFx0XFx0XFx0XFx0XFx0bWF4X2dhcCA9IGdhcDtcXG4gMTg0OlxcdFxcdFxcdFxcdH1cXG4gMTg1OlxcdFxcdFxcdH1cXG4gMTg2OlxcdFxcdH1cXG4gMTg3OlxcdFxcbiAxODg6XFx0XFx0cmV0dXJuIGxlYXN0X2xvYWRlZDtcXG4gMTg5OlxcdH1cXG4gMTkwOlxcdFxcbiAxOTE6XFx0c3RhdGljIHN0cnVjdCBzbGF2ZSAqX190bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbiAxOTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0dTMyIHNrYl9sZW4pXFxuIDE5MzpcXHR7XFxuIDE5NDpcXHRcXHRzdHJ1Y3QgYWxiX2JvbmRfaW5mbyAqYm9uZF9pbmZvID0gXFx1MDAyNihCT05EX0FMQl9JTkZPKGJvbmQpKTtcXG4gMTk1OlxcdFxcdHN0cnVjdCB0bGJfY2xpZW50X2luZm8gKmhhc2hfdGFibGU7XFxuIDE5NjpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKmFzc2lnbmVkX3NsYXZlO1xcbiAxOTc6XFx0XFxuIDE5ODpcXHRcXHRoYXNoX3RhYmxlID0gYm9uZF9pbmZvLVxcdTAwM2V0eF9oYXNodGJsO1xcbiAxOTk6XFx0XFx0YXNzaWduZWRfc2xhdmUgPSBoYXNoX3RhYmxlW2hhc2hfaW5kZXhdLnR4X3NsYXZlO1xcbiAyMDA6XFx0XFx0aWYgKCFhc3NpZ25lZF9zbGF2ZSkge1xcbiAyMDE6XFx0XFx0XFx0YXNzaWduZWRfc2xhdmUgPSB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShib25kKTtcXG4gMjAyOlxcdFxcbiAyMDM6XFx0XFx0XFx0aWYgKGFzc2lnbmVkX3NsYXZlKSB7XFxuIDIwNDpcXHRcXHRcXHRcXHRzdHJ1Y3QgdGxiX3NsYXZlX2luZm8gKnNsYXZlX2luZm8gPVxcbiAyMDU6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNihTTEFWRV9UTEJfSU5GTyhhc3NpZ25lZF9zbGF2ZSkpO1xcbiAyMDY6XFx0XFx0XFx0XFx0dTMyIG5leHRfaW5kZXggPSBzbGF2ZV9pbmZvLVxcdTAwM2VoZWFkO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRcXHRcXHRoYXNoX3RhYmxlW2hhc2hfaW5kZXhdLnR4X3NsYXZlID0gYXNzaWduZWRfc2xhdmU7XFxuIDIwOTpcXHRcXHRcXHRcXHRoYXNoX3RhYmxlW2hhc2hfaW5kZXhdLm5leHQgPSBuZXh0X2luZGV4O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjoxNC45NDYyNDEwODVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTQ4MzA1MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQW5hbHl6aW5nIERhdGEgVHlwZXMgYW5kIFN0cnVjdHVyZSoqXG5cbkhtbSwgZmlyc3QgdGhpbmdzIGZpcnN0OiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgZGF0YSB0eXBlcyBoZXJlLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYHNsYXZlLVx1MDAzZXNwZWVkYCBhbmQgYFNMQVZFX1RMQl9JTkZPKHNsYXZlKS5sb2FkYC4gV2hhdCBhcmUgdGhlaXIgdHlwZXM/IEFyZSB0aGV5IGludGVnZXJzLCBmbG9hdHMsIHNvbWV0aGluZyBtb3JlIGNvbXBsZXg/IFRoZSBuYXR1cmUgb2YgdGhvc2UgdHlwZXMgd2lsbCBkZXRlcm1pbmUgaG93IEkgaW50ZXJwcmV0IHRoZSBjb2RlIGFuZCBhbnkgcG90ZW50aWFsIGlzc3VlcyBJIG5lZWQgdG8gYmUgY29uY2VybmVkIGFib3V0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIGEgY2FsY3VsYXRpb24sIG9yIGEgYm9vbGVhbiB0ZXN0LCBmb3IgaW5zdGFuY2UuIFxuXG5UbyBjbGFyaWZ5LCBJIG5lZWQgdG8gbG9vayB1cCB0aGUgZGVmaW5pdGlvbiBvZiBgc2xhdmVgLCB0aGF0IHNob3VsZCBwcm92aWRlIHRoZSByZWxldmFudCB0eXBlIGluZm9ybWF0aW9uIGZvciB0aGVzZSBtZW1iZXJzLiBMZXQncyBzZWUgaWYgdGhhdCBxdWljayBzZWFyY2ggeWllbGRzIHdoYXQgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDgxLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjoxNi44OTQ1NDgxMjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk3Mzc2OTM0LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1MzIgc3BlZWQ7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjoxNy4xOTE5MzU2MDhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3OTgwODI1NDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkh1bnRpbmcgRG93biBUaGF0IGBzdHJ1Y3Qgc2xhdmVgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byB0cmFjayBkb3duIHRoYXQgYHN0cnVjdCBzbGF2ZWAgZGVmaW5pdGlvbi4gTm93LCBkZXBlbmRpbmcgb24gdGhlIGtlcm5lbCB2ZXJzaW9uIGFuZCB0aGUgc3BlY2lmaWMgc3Vic3lzdGVtIHdlJ3JlIGRlYWxpbmcgd2l0aCwgdGhpcyBjb3VsZCBiZSBsb2NhdGVkIGluIGEgZmV3IGRpZmZlcmVudCBwbGFjZXMuIEltbWVkaWF0ZWx5LCBteSBtaW5kIGlzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgbGlrZWx5IGNhbmRpZGF0ZXM6IHRoZSBjb3JlIGRyaXZlciBtb2RlbCBoZWFkZXJzIChgaW5jbHVkZS9saW51eC9kZXZpY2UuaGAsIGBpbmNsdWRlL2xpbnV4L2RyaXZlci5oYCwgZXRjLiksIHBlcmhhcHMgc29tZSBzcGVjaWZpYyBidXMgb3Igc3Vic3lzdGVtIGhlYWRlcnMgKGUuZy4sIEkyQywgU1BJLCBTQ1NJKSwgb3IgbWF5YmUgZXZlbiBhIGN1c3RvbSBoZWFkZXIgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgdmVuZG9yJ3MgZHJpdmVyIGlmIGl0J3MgYSBtb3JlIHNwZWNpYWxpemVkIHBpZWNlIG9mIGhhcmR3YXJlLiBJ4oCZbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IHRvIG5hcnJvdyBkb3duIHRoZSBzZWFyY2guXG5cbkZpcnN0IHN0ZXAgd2lsbCBiZSB0byB1c2UgYGdyZXBgLCBhbmQgSSdsbCBsaWtlbHkgc3RhcnQgd2l0aCBhIGJyb2FkIHNlYXJjaCBhY3Jvc3MgdGhlIGluY2x1ZGUgZGlyZWN0b3JpZXMgZm9yIHRoZSBrZXJuZWwgc291cmNlIG9yIHJlbGV2YW50IG1vZHVsZSBzb3VyY2UuIElmIEknbSB3b3JraW5nIHdpdGggYSBzcGVjaWZpYyBkcml2ZXIsIEknbGwgcmVzdHJpY3QgdGhlIHNlYXJjaCB3aXRoaW4gdGhhdCBkaXJlY3RvcnkuIEknbSBhbnRpY2lwYXRpbmcgdGhhdCBpdCdzIHByb2JhYmx5ICpub3QqIGdvaW5nIHRvIGJlIGEgc2ltcGxlLCBvYnZpb3VzIGRlZmluaXRpb24sIGJ1dCBsaWtlbHkgbGlua2VkIHRvIHNvbWUgaGlnaGVyLWxldmVsIGFic3RyYWN0aW9uLlxuXG5UaGVuLCBvbmNlIEkgbG9jYXRlIHRoZSBkZWZpbml0aW9uLCBJJ2xsIHdhbnQgdG8gcXVpY2tseSBwYXJzZSBpdHMgY29udGVudHMuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBtZW1iZXJzLCB3aGljaCBmaWVsZHMgYXJlIGNyaXRpY2FsIGZvciBteSBjdXJyZW50IHRhc2ssIGFuZCBob3cgdGhpcyBgc3RydWN0IHNsYXZlYCByZWxhdGVzIHRvIG90aGVyIHN0cnVjdHVyZXMgYW5kIGNvbmNlcHRzIGluIHRoZSBzeXN0ZW0uIFRoZSBnb2FsIGlzbid0IGp1c3QgdG8gKmZpbmQqIHRoZSBkZWZpbml0aW9uIGJ1dCB0byAqdW5kZXJzdGFuZCogaXRzIHJvbGUgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBpdHMgcmVsZXZhbmNlIGluIHRoZSBjb250ZXh0IG9mIHdoYXRldmVyIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS4gSW4gc2hvcnQsIGl0J3MgYWJvdXQgY29ubmVjdGluZyB0aGUgZG90cyB0byBnZXQgdG8gdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzMwLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MjUuMTcyNzYzOTc5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5MzI0MzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBzbGF2ZSBcXFxce1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC9ib25kaW5nLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9uZXQvYm9uZGluZy5oPTExNz1zdHJ1Y3QgYm9uZF9wYXJhbXMge1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE1Ni1cXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6MTU3OnN0cnVjdCBzbGF2ZSB7XFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE1OC1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OyAvKiBmaXJzdCAtIHVzZWZ1bCBmb3IgcGFuaWMgZGVidWcgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MjUuMjMyMDk5NTYyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTg0ODc1NDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBib25kaW5nLmhgKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYm9uZGluZyBzZXR1cCBiZXR0ZXIsIHNvIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBpbmNsdWRlL25ldC9ib25kaW5nLmhgLiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDE1Ny4gVGhhdCdzIHVzdWFsbHkgYSBnb29kIHBsYWNlIHRvIHN0YXJ0IOKAkyBpdCdzIG9mdGVuIHdoZXJlIHNvbWUgY29yZSBzdHJ1Y3R1cmVzIG9yIGltcG9ydGFudCBkZWZpbml0aW9ucyBhcmUgbG9jYXRlZCwgdGhlIGdyb3VuZHdvcmsgZm9yIHRoZSBtb3JlIGNvbXBsZXggZnVuY3Rpb25zLiBIb3BlZnVsbHksIGxpbmUgMTU3IHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGVudHJ5IHBvaW50IGludG8gdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29kZSBhbmQgc2hlZCBzb21lIGxpZ2h0IG9uIHRoZSBiZWhhdmlvciBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgc3RydWN0cyBkZWZpbmVkIGFyb3VuZCB0aGF0IGFyZWEsIHdoaWNoIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgYSBoaWdoLWxldmVsIHNlbnNlIG9mIGhvdyBib25kaW5nIGlzIGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MjM0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MjcuMDgwODU4OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTExMDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbmV0L2JvbmRpbmcuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxNTcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTc6XFx0c3RydWN0IHNsYXZlIHtcXG4gMTU4OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqL1xcbiAxNTk6XFx0XFx0c3RydWN0IGJvbmRpbmcgKmJvbmQ7IC8qIG91ciBtYXN0ZXIgKi9cXG4gMTYwOlxcdFxcdGludCAgICBkZWxheTtcXG4gMTYxOlxcdFxcdC8qIGFsbCA0IGluIGppZmZpZXMgKi9cXG4gMTYyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9saW5rX3VwO1xcbiAxNjM6XFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X3R4O1xcbiAxNjQ6XFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X3J4O1xcbiAxNjU6XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRfbGFzdF9hcnBfcnhbQk9ORF9NQVhfQVJQX1RBUkdFVFNdO1xcbiAxNjY6XFx0XFx0czggICAgIGxpbms7XFx0XFx0Lyogb25lIG9mIEJPTkRfTElOS19YWFhYICovXFxuIDE2NzpcXHRcXHRzOCAgICAgbGlua19uZXdfc3RhdGU7XFx0Lyogb25lIG9mIEJPTkRfTElOS19YWFhYICovXFxuIDE2ODpcXHRcXHR1OCAgICAgYmFja3VwOjEsICAgLyogaW5kaWNhdGVzIGJhY2t1cCBzbGF2ZS4gVmFsdWUgY29ycmVzcG9uZHMgd2l0aFxcbiAxNjk6XFx0XFx0XFx0XFx0ICAgICAgQk9ORF9TVEFURV9BQ1RJVkUgYW5kIEJPTkRfU1RBVEVfQkFDS1VQICovXFxuIDE3MDpcXHRcXHQgICAgICAgaW5hY3RpdmU6MSwgLyogaW5kaWNhdGVzIGluYWN0aXZlIHNsYXZlICovXFxuIDE3MTpcXHRcXHQgICAgICAgcnhfZGlzYWJsZWQ6MSwgLyogaW5kaWNhdGVzIHdoZXRoZXIgc2xhdmUncyBSeCBpcyBkaXNhYmxlZCAqL1xcbiAxNzI6XFx0XFx0ICAgICAgIHNob3VsZF9ub3RpZnk6MSwgLyogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN0YXRlIGNoYW5nZWQgKi9cXG4gMTczOlxcdFxcdCAgICAgICBzaG91bGRfbm90aWZ5X2xpbms6MTsgLyogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGxpbmsgY2hhbmdlZCAqL1xcbiAxNzQ6XFx0XFx0dTggICAgIGR1cGxleDtcXG4gMTc1OlxcdFxcdHUzMiAgICBvcmlnaW5hbF9tdHU7XFxuIDE3NjpcXHRcXHR1MzIgICAgbGlua19mYWlsdXJlX2NvdW50O1xcbiAxNzc6XFx0XFx0dTMyICAgIHNwZWVkO1xcbiAxNzg6XFx0XFx0dTE2ICAgIHF1ZXVlX2lkO1xcbiAxNzk6XFx0XFx0dTggICAgIHBlcm1faHdhZGRyW01BWF9BRERSX0xFTl07XFxuIDE4MDpcXHRcXHRpbnQgICAgcHJpbztcXG4gMTgxOlxcdFxcdHN0cnVjdCBhZF9zbGF2ZV9pbmZvICphZF9pbmZvO1xcbiAxODI6XFx0XFx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHRsYl9pbmZvO1xcbiAxODM6XFx0I2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXFxuIDE4NDpcXHRcXHRzdHJ1Y3QgbmV0cG9sbCAqbnA7XFxuIDE4NTpcXHQjZW5kaWZcXG4gMTg2OlxcdFxcdHN0cnVjdCBkZWxheWVkX3dvcmsgbm90aWZ5X3dvcms7XFxuIDE4NzpcXHRcXHRzdHJ1Y3Qga29iamVjdCBrb2JqO1xcbiAxODg6XFx0XFx0c3RydWN0IHJ0bmxfbGlua19zdGF0czY0IHNsYXZlX3N0YXRzO1xcbiAxODk6XFx0fTtcXG4gMTkwOlxcdFxcbiAxOTE6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3Qgc2xhdmUgKnRvX3NsYXZlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxcbiAxOTI6XFx0e1xcbiAxOTM6XFx0XFx0cmV0dXJuIGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3Qgc2xhdmUsIGtvYmopO1xcbiAxOTQ6XFx0fVxcbiAxOTU6XFx0XFxuIDE5NjpcXHRzdHJ1Y3QgYm9uZF91cF9zbGF2ZSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjI3LjA4MDk3NjAxMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NjIzMTg4OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFkZHJlc3NpbmcgUG90ZW50aWFsIEludGVnZXIgT3ZlcmZsb3cgaW4gU3BlZWQgQ2FsY3VsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBzbGF2ZS1cdTAwM2VzcGVlZGAgdmFyaWFibGUsIHdoaWNoIGlzIGRlZmluZWQgYXMgYSBgdTMyYC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgdGhlIHBvdGVudGlhbCBmb3IgaW50ZWdlciBvdmVyZmxvdyB3aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWxseSBsYXJnZSBzcGVlZHMuIFNwZWNpZmljYWxseSwgdGhlIGxpbmUgYHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMGAgaGFzIG1lIHdvcnJpZWQuIElmIGBzbGF2ZS1cdTAwM2VzcGVlZGAgaXMsIHNheSwgNDA5NiBvciBncmVhdGVyLCB0aGF0IGxlZnQtc2hpZnQgYnkgMjAgYml0cyBpcyBnb2luZyB0byBibG93IHJpZ2h0IHBhc3QgdGhlIDMyLWJpdCBsaW1pdC4gSSBtZWFuLCB0aGluayBhYm91dCBpdCDigJMgNDA5NiBcdTAwM2NcdTAwM2MgMjAgcmVzdWx0cyBpbiAweDEwMDAwMDAwMCwgd2hpY2ggaXMgZGVmaW5pdGVseSBvdXRzaWRlIHRoZSBib3VuZHMgb2YgYSAzMi1iaXQgaW50ZWdlci4gQSBkYXRhIHJhdGUgb2YgNDAgR2Jwcywgb3IgZXZlbiA0IEdicHMsIHdvdWxkIGVhc2lseSBvdmVyZmxvdyB0aGlzIHNoaWZ0LlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2FzdCB0aGUgc2hpZnRlZCByZXN1bHQgdG8gYHM2NGAsIGxpa2UgdGhpczogYChzNjQpKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMClgLiBUaGF0J3Mgbm8gZ29vZCwgYmVjYXVzZSB0aGUgc2hpZnQgaGFwcGVuZWQgKmJlZm9yZSogdGhlIGNhc3QuIFNvIHRoZSBvdmVyZmxvdyBoYXBwZW5zLCBhbmQgdGhlIHJlc3VsdCBpcyBnYXJiYWdlLCBiZWZvcmUgaXQncyBjb252ZXJ0ZWQgdG8gYSBgczY0YC5cblxuVGhlIGNvZGUgaGFzIGJlZW4gdXBkYXRlZCwgSSBzZWUsIHRvIGAoczY0KXNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMGAuIFRoaXMgaXMgZ29vZCwgdGhlIGNhc3QgaGFwcGVucyBmaXJzdC4gIE5vdyB0aGUgYHNsYXZlLVx1MDAzZXNwZWVkYCwgd2hpY2ggaXMgYSBgdTMyYCwgaXMgY2FzdCB0byBhbiBgczY0YC4gU2hpZnRpbmcgYSBgczY0YCBieSAyMCBiaXRzIGtlZXBzIHRoZSBpbnRlcm1lZGlhdGUgY2FsY3VsYXRpb25zIHdlbGwgaW5zaWRlIHRoZSByZXF1aXJlZCByYW5nZS4gSSBmZWVsIG11Y2ggYmV0dGVyIGFib3V0IHRoaXMgbm93LlxuXG5BbmQgdGhlcmUncyB0aGlzIGBTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZGAgdmFyaWFibGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBrbm93IHRoZSBzaXplIGhlcmUsIHNvIGxldCBtZSBxdWlja2x5IGNyb3NzLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0IHRsYl9zbGF2ZV9pbmZvYCB0byBtYWtlIGNlcnRhaW4gd2hldGhlciBpdCdzIGEgYGxvbmcgbG9uZ2AsIGEgYHUzMmAsIG9yIGEgYGxvbmdgLiBJJ2QgcHJlZmVyIGEgYGxvbmcgbG9uZ2AgZm9yIHRoZSBzYW1lIHJlYXNvbiAtIGF2b2lkIGFuIG92ZXJmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTMxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MzEuNzA0MTcwMzE4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc3MDg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgdGxiX3NsYXZlX2luZm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE5MT1zdGF0aWMgc3RydWN0IHNsYXZlICpfX3RsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjAzLVxcdFxcdGlmIChhc3NpZ25lZF9zbGF2ZSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMDQ6XFx0XFx0XFx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvICpzbGF2ZV9pbmZvID1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjA1LVxcdFxcdFxcdFxcdFxcdTAwMjYoU0xBVkVfVExCX0lORk8oYXNzaWduZWRfc2xhdmUpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6MzEuNzY0OTQ4NzQxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYwMjI1NTM2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjpcblxuKipJbnZlc3RpZ2F0aW5nIGBzdHJ1Y3QgdGxiX3NsYXZlX2luZm9gIGluIG5ldC9ib25kX2FsYi5oKipcblxuT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYHN0cnVjdCB0bGJfc2xhdmVfaW5mb2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0LCBhbmQgbXkgZXhwZXJpZW5jZSB3aXRoIHRoZSBuZXR3b3JraW5nIHN0YWNrLCBJJ20gcHJldHR5IHN1cmUgaXQncyBnb2luZyB0byBiZSBpbiBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAuIEkndmUgd29ya2VkIHdpdGggYm9uZGluZyBkcml2ZXJzIGJlZm9yZSwgYW5kIHRoZSBBY3RpdmUtQmFja3VwIChhbGIpIG1vZGUgZGVmaW5pdGVseSByZWxpZXMgb24gdHJhY2tpbmcgc2xhdmUgaW50ZXJmYWNlcyBhbmQgdGhlaXIgcHJvcGVydGllcy4gYHRsYl9zbGF2ZV9pbmZvYCBsaWtlbHkgaG9sZHMgdGhlIHJlbGV2YW50IHN0YXRlIGluZm9ybWF0aW9uIHNwZWNpZmljYWxseSBmb3IgVExCIChUcmFuc21pdCBMb2FkIEJhbGFuY2luZykgbW9kZSwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBJdCBtYWtlcyBzZW5zZSB0aGlzIHdvdWxkIGJlIHBsYWNlZCB3aXRoaW4gYm9uZGluZyBoZWFkZXIgZmlsZXMsIGdpdmVuIHRoZSBzcGVjaWZpYyBmZWF0dXJlc2V0IHByb3ZpZGVkLiBMZXQgbWUgcHVsbCBpdCB1cCBhbmQgc2VlIHdoYXQncyBhY3R1YWxseSBpbiB0aGVyZSwgYW5kIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGlzIHN0cnVjdCBpbnRlcmFjdHMgd2l0aCB0aGUgbGFyZ2VyIGJvbmRpbmcgZHJpdmVyIGZyYW1ld29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk1MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjM3Ljc4NzUwNzQ1N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2OTM1MDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCB0bGJfc2xhdmVfaW5mb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ib25kX2FsYi5oPTk0PXN0cnVjdCBybGJfY2xpZW50X2luZm8ge1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaC0xMTQtXFxuaW5jbHVkZS9uZXQvYm9uZF9hbGIuaDoxMTU6c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcXG5pbmNsdWRlL25ldC9ib25kX2FsYi5oLTExNi1cXHR1MzIgaGVhZDtcXHQvKiBJbmRleCB0byB0aGUgaGVhZCBvZiB0aGUgYmktZGlyZWN0aW9uYWwgY2xpZW50c1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oPTE1Nz1zdHJ1Y3Qgc2xhdmUge1xcbi0tXFxuaW5jbHVkZS9uZXQvYm9uZGluZy5oLTE4MS1cXHRzdHJ1Y3QgYWRfc2xhdmVfaW5mbyAqYWRfaW5mbztcXG5pbmNsdWRlL25ldC9ib25kaW5nLmg6MTgyOlxcdHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB0bGJfaW5mbztcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTgzLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjozNy45MjQ0NTAyMjZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTgzMTMyNjg2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBpbnRvIGBib25kX2FsYi5oYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgQWN0aXZlLUJhY2t1cCAoQUxCKSBib25kaW5nIGRyaXZlcidzIGltcGxlbWVudGF0aW9uLiBMZXQncyBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgaW5jbHVkZS9uZXQvYm9uZF9hbGIuaGAgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDExNS4gSSdtIGZvY3VzaW5nIG9uIHRoYXQgYXJlYSBiZWNhdXNlLi4uIHdlbGwsIGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhhdCdzIGEgbGlrZWx5IHNwb3QgZm9yIHRoZSBoZWFydCBvZiB0aGUgQUxCIGxvZ2ljLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGludGVyZmFjZSBzZWxlY3Rpb24gb3IgZmFpbG92ZXIuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIGNydWNpYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgcmVsYXRlZCB0byB0aGUgYWN0aXZlLWJhY2t1cCBzZWxlY3Rpb24gcHJvY2Vzcy4gSG9wZWZ1bGx5LCBpdOKAmWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBxdWlja2x5IHVuZGVyc3RhbmQgaG93IHRoZSBhY3RpdmUgaW50ZXJmYWNlIGlzIGRldGVybWluZWQgYW5kIHN3aXRjaGVkLiBUaW1lIHRvIGdldCB0byB0aGUgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzQyMywiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjM5Ljc1NTc4MDIzMVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvYm9uZF9hbGIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAxMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMTU6XFx0c3RydWN0IHRsYl9zbGF2ZV9pbmZvIHtcXG4gMTE2OlxcdFxcdHUzMiBoZWFkO1xcdC8qIEluZGV4IHRvIHRoZSBoZWFkIG9mIHRoZSBiaS1kaXJlY3Rpb25hbCBjbGllbnRzXFxuIDExNzpcXHRcXHRcXHRcXHQgKiBoYXNoIHRhYmxlIGVudHJpZXMgbGlzdC4gVGhlIGVudHJpZXMgaW4gdGhlIGxpc3RcXG4gMTE4OlxcdFxcdFxcdFxcdCAqIGFyZSB0aGUgZW50cmllcyB0aGF0IHdlcmUgYXNzaWduZWQgdG8gdXNlIHRoaXNcXG4gMTE5OlxcdFxcdFxcdFxcdCAqIHNsYXZlIGZvciB0cmFuc21pdC5cXG4gMTIwOlxcdFxcdFxcdFxcdCAqL1xcbiAxMjE6XFx0XFx0dTMyIGxvYWQ7XFx0LyogRWFjaCBzbGF2ZSBzdW1zIHRoZSBsb2FkSGlzdG9yeSBvZiBhbGwgY2xpZW50c1xcbiAxMjI6XFx0XFx0XFx0XFx0ICogYXNzaWduZWQgdG8gaXRcXG4gMTIzOlxcdFxcdFxcdFxcdCAqL1xcbiAxMjQ6XFx0fTtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0c3RydWN0IGFsYl9ib25kX2luZm8ge1xcbiAxMjc6XFx0XFx0c3RydWN0IHRsYl9jbGllbnRfaW5mb1xcdCp0eF9oYXNodGJsOyAvKiBEeW5hbWljYWxseSBhbGxvY2F0ZWQgKi9cXG4gMTI4OlxcdFxcdHUzMlxcdFxcdFxcdHVuYmFsYW5jZWRfbG9hZDtcXG4gMTI5OlxcdFxcdGF0b21pY190XFx0XFx0dHhfcmViYWxhbmNlX2NvdW50ZXI7XFxuIDEzMDpcXHRcXHRpbnRcXHRcXHRcXHRscF9jb3VudGVyO1xcbiAxMzE6XFx0XFx0LyogLS0tLS0tLS0gcmxiIHBhcmFtZXRlcnMgLS0tLS0tLS0gKi9cXG4gMTMyOlxcdFxcdGludCBybGJfZW5hYmxlZDtcXG4gMTMzOlxcdFxcdHN0cnVjdCBybGJfY2xpZW50X2luZm9cXHQqcnhfaGFzaHRibDtcXHQvKiBSZWNlaXZlIGhhc2ggdGFibGUgKi9cXG4gMTM0OlxcdFxcdHUzMlxcdFxcdFxcdHJ4X2hhc2h0YmxfdXNlZF9oZWFkO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjozOS43NTU4OTI0NTFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTgyNzA1OTA2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFdvcnRoaW5lc3MgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgc2VlbXMgdG8gYmUgYSBtaW5vciBjb2RlIGFkanVzdG1lbnQgd2l0aGluIHRoZSBib25kaW5nIGRyaXZlci4gU3BlY2lmaWNhbGx5LCBpdCdzIGEgY2hhbmdlIHRvIHRoZSBwYXJlbnRoZXNlcyBhcm91bmQgdGhlIGFyaXRobWV0aWMgY2FsY3VsYXRpb24gd2l0aGluIHRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uLiBCb3RoIGBzbGF2ZS1cdTAwM2VzcGVlZGAgYW5kIGBsb2FkYCBhcmUgYHUzMmAsIGFuZCB0aGUgcGF0Y2ggZXNzZW50aWFsbHkgYWRqdXN0cyB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpbiBjb252ZXJ0aW5nIHRoZXNlIHZhbHVlcy5cblxuVGhlIGtleSBxdWVzdGlvbiwgYXMgYWx3YXlzLCBpcyByZWFjaGFiaWxpdHkuIENhbiB0aGlzIGNvZGUgYWN0dWFsbHkgKmV4ZWN1dGUqIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZT8gVGhlIGNvcmUgdHJpYWdlIHBoaWxvc29waHkgaXMgY2xlYXI6IHJlYWNoYWJpbGl0eSBpcyB0aGUgcHJpbWFyeSBnYXRlLiBJZiB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZSwgd2UgZG9uJ3QgYm90aGVyIGZ1enppbmcsIHJlZ2FyZGxlc3Mgb2YgYXNzZXJ0aW9ucyBvciBsb2dpYy5cblxuR29vZCBuZXdzOiB0aGUgYm9uZGluZyBkcml2ZXIgKGBkcml2ZXJzL25ldC9ib25kaW5nL2ApIGlzIGluZGVlZCByZWFjaGFibGUuIEl0J3MgYSB2aXJ0dWFsIG5ldHdvcmsgZGV2aWNlIGRyaXZlciwgYW5kIHdlIGNhbiBjb25maWd1cmUgaXQgdXNpbmcgYHJ0bmV0bGlua2Ag4oCTIHRoYXQgbWVhbnMgYGlwIGxpbmsgYWRkIC4uLiB0eXBlIGJvbmQgLi4uYCBhbmQgYWxsIHRoYXQuIFdlIGNhbiBhdHRhY2ggc2xhdmVzIChsaWtlIGBkdW1teWAsIGB2ZXRoYCwgb3IgYHRhcGApLCBhbmQgd2UgY2FuIHRyYW5zbWl0IHBhY2tldHMuIFN5emthbGxlciBjYW4gZWFzaWx5IGhhbmRsZSB0aGlzIGtpbmQgb2YgY29uZmlndXJhdGlvbiwgd2hpY2ggbWFrZXMgdGhpbmdzIGV2ZW4gZWFzaWVyLiBTbywgcmVhY2hhYmlsaXR5IGlzIGNvbmZpcm1lZC5cblxuTm93LCBsZXQncyBicmVhayBkb3duIHRoZSBldmFsdWF0aW9uIGNyaXRlcmlhLCBhbmQgc2VlIGlmIHRoaXMgcGF0Y2ggaXMgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZzpcblxuKiAgICoqUmVhY2hhYmlsaXR5OioqIFdlJ3ZlIGVzdGFibGlzaGVkIHRoYXQgdGhlIG1vZGlmaWVkIGNvZGUgKmlzKiByZWFjaGFibGUuIFRoZSBib25kaW5nIGRyaXZlciBpcyBhY2Nlc3NpYmxlIHZpYSBuZXRsaW5rLCBzYXRpc2Z5aW5nIHRoZSBmaXJzdCBjcml0ZXJpb24uXG4qICAgKipcIk5vIEZ1bmN0aW9uYWwgQ2hhbmdlXCIgb3IgUmVmYWN0b3JpbmcgQ2xhaW1zOioqIFdoaWxlIGl0IGxvb2tzIGxpa2UgYSByZWZhY3RvcmluZywgbGV0J3Mgbm90IHRydXN0IHRoZSBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgY2xhaW1zIGJsaW5kbHkuIEl0J3MgYSBjYWxjdWxhdGlvbiwgc28gaXQgY291bGQgYWZmZWN0IHBlcmZvcm1hbmNlIChhbHRob3VnaCBJJ2QgZXhwZWN0IGl0IHRvIGJlIG1pbm9yKSBvciBwb3RlbnRpYWxseSBldmVuIHRoZSBiZWhhdmlvciB1bmRlciBleHRyZW1lIGNpcmN1bXN0YW5jZXMuIExldCdzIG1ha2Ugc3VyZSBpdCdzIGZ1enplZC5cbiogICAqKkFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6KiogV2hpbGUgdGhlcmUgYXJlbid0IGFueSAqbmV3KiBhc3NlcnRpb25zIGFkZGVkIHdpdGggdGhpcyBjaGFuZ2UsIHRoZSBleGlzdGluZyBjb2RlIGNvdWxkIGJlIHRlc3RlZCBpbiBhIGRpZmZlcmVudCB3YXkgZHVlIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFRoZSBgY29tcHV0ZV9nYXBgIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSB2YWx1ZSB1c2VkIGZvciBsb2FkIGJhbGFuY2luZy5cbiogICAqKlJlYWNoYWJpbGl0eToqKiB0aGUgcGF0Y2ggdG91Y2hlcyBgZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jYC4gQm9uZGluZyBpcyBhIHJlYWNoYWJsZSBkcml2ZXIgYWNjZXNzaWJsZSB2aWEgbmV0bGluayAocnRsaW5rKS5cbiogICBgY29tcHV0ZV9nYXBgIGlzIGNhbGxlZCBieSBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgcGFja2V0IHRyYW5zbWlzc2lvbiBpbiBBTEIgLyBUTEIgbW9kZVxuXG5HaXZlbiBhbGwgdGhpcywgSSdtIGxlYW5pbmcgdG93YXJkIGEgKipXb3J0aEZ1enppbmc9dHJ1ZSoqIGFzc2Vzc21lbnQuIFRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBjb2RlIOKAkyBhIGRyaXZlciBhY2Nlc3NpYmxlIHRocm91Z2ggbmV0bGluayDigJMgYW5kIHRoZSBtb2RpZmllZCBmdW5jdGlvbidzIHJlc3VsdCBpcyB1c2VkIGZvciBwYWNrZXQgdHJhbnNtaXNzaW9uLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUgYmVoYXZpb3IgY2hhbmdlcyBmcm9tIHRoZSByZS1hcnJhbmdlbWVudCBvZiB0aGUgYXJpdGhtZXRpYywgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcHJvYmFibHkgd2FudCB0byBsb29rIGF0IGFsbCBjYWxsZXJzIG9mIGJvdGggYGNvbXB1dGVfZ2FwYCBhbmQgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgY29tcGxldGVseSwgYnV0IHRoZSBpbml0aWFsIGFzc2Vzc21lbnQgaW5kaWNhdGVzIGZ1enppbmcgaXMgdGhlIHJpZ2h0IGNhbGwgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6Nzk4NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjQ1LjU4Mjk1NDY4N1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzMzgyMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE2MT1zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTY2LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNjc6c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE2OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTkxPXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKl9fdGxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBib25kaW5nICpib25kLCB1MzIgaGFzaF9pbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMDAtXFx0aWYgKCFhc3NpZ25lZF9zbGF2ZSkge1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMDE6XFx0XFx0YXNzaWduZWRfc2xhdmUgPSB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShib25kKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjAyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjo0NS42MzIzMDIzMDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjMxOTM1MTE2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBDYWxsIFNpdGVzIG9mIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gdHJhY2sgZG93biBpdHMgY2FsbCBzaXRlcy4gS25vd2luZyAqd2hlcmUqIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aWxsIGdpdmUgbWUgYSBjcml0aWNhbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsb2dpYyBmbG93IGFuZCB0aGUgY29udGV4dHMgaW4gd2hpY2ggaXQncyBvcGVyYXRpbmcuIEknbSBnb2luZyB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHdoZXJlIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAgaXMgYmVpbmcgdXNlZC4gVGhpcyBjb3VsZCBiZSB3aXRoaW4gdGhlIGtlcm5lbCBpdHNlbGYsIHBvdGVudGlhbGx5IGluIGRldmljZSBkcml2ZXJzLCBvciBldmVuIGluIHVzZXItc3BhY2UgbGlicmFyaWVzIGlmIHRoZSBzeXN0ZW0gaXMgZGVzaWduZWQgdGhhdCB3YXkuIEdyYWJiaW5nIHRoZSBjYWxsIGdyYXBoIHF1aWNrbHkgc2hvdWxkIHBhaW50IHRoZSBwaWN0dXJlLiBJIG5lZWQgdG8gc2VlIGhvdyBmcmVxdWVudGx5IGl04oCZcyBjYWxsZWQsIHdoYXQgZGF0YSBpcyBwYXNzZWQgdG8gaXQsIGFuZCwgaWRlYWxseSwgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIGRpZmZlcmVudCBjb2RlIHBhdGhzIGF0IHRoZSBjYWxsIHNpdGUuIEZyb20gdGhlcmUsIEkgY2FuIGJlZ2luIHRvIHJlYXNvbiBhYm91dCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGRlcGVuZGVuY2llcywgb3IgYXJlYXMgdGhhdCBtaWdodCBiZW5lZml0IGZyb20gb3B0aW1pemF0aW9uIG9yLCBjb252ZXJzZWx5LCB0aGF0IGNvdWxkIGJlIHRoZSBzb3VyY2Ugb2YgYSBzdWJ0bGUgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5Njg1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NDcuOTUxNjU2MjQ5WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk0NDcxNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3RsYl9jaG9vc2VfY2hhbm5lbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTY3PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5MC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTkxOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKl9fdGxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBib25kaW5nICpib25kLCB1MzIgaGFzaF9pbmRleCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTkyLVxcdFxcdFxcdFxcdFxcdFxcdHUzMiBza2JfbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTIyNz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNi1cXHRzcGluX2xvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIzNzpcXHR0eF9zbGF2ZSA9IF9fdGxiX2Nob29zZV9jaGFubmVsKGJvbmQsIGhhc2hfaW5kZXgsIHNrYl9sZW4pO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzgtXFx0c3Bpbl91bmxvY2soXFx1MDAyNmJvbmQtXFx1MDAzZW1vZGVfbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjQ4LjAwMjYwODY1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTcwMzE2Nzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBTEIgVHJhbnNtaXQgUGF0aCoqXG5cbkFscmlnaHQsIHNvIGB0bGJfY2hvb3NlX2NoYW5uZWxgIGlzIGJlaW5nIGludm9rZWQgd2l0aGluIGBib25kX2FsYl94bWl0YC4gVGhhdCdzIGluIHRoZSBgYm9uZF9hbGIuY2AgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIGFjdGl2ZS1iYWNrdXAgbG9hZCBiYWxhbmNpbmcgbW9kdWxlLiBUaW1lIHRvIGRpdmUgaW50byBgYm9uZF9hbGJfeG1pdGAgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoYW5uZWwgc2VsZWN0aW9uIGlzIGJlaW5nIG1hZGUgZHVyaW5nIHRyYW5zbWl0LCByaWdodD8gSSdtIGFscmVhZHkgZm9ybXVsYXRpbmcgc29tZSBxdWVzdGlvbnMgYWJvdXQgdGhlIGNvbnRleHQuIFdoYXQgZGF0YSBpcyBhdmFpbGFibGUgdG8gYGJvbmRfYWxiX3htaXRgIHdoZW4gaXQgY2FsbHMgdGhlIHNlbGVjdGlvbiBmdW5jdGlvbj8gV2hhdCBjcml0ZXJpYSBpcyBgdGxiX2Nob29zZV9jaGFubmVsYCB1c2luZz8gSXMgaXQgbG9va2luZyBhdCBsaW5rIHN0YXRlLCBxdWV1ZSBsZW5ndGgsIG9yIHNvbWUgb3RoZXIgbWV0cmljPyBJcyB0aGVyZSBhbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uIG9yIHJhY2UgY29uZGl0aW9ucyB3aXRoIHRoZSBjaGFubmVsIHNlbGVjdGlvbiBwcm9jZXNzPyBUaW1lIHRvIHJldmlldyB0aGUgY29kZSBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMjM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NTAuMTcyOTI4Njk0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTk1Nzc1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0bGJfY2hvb3NlX2NoYW5uZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE2Nz1zdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZShzdHJ1Y3QgYm9uZGluZyAqYm9uZClcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xOTAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjE5MTpzdGF0aWMgc3RydWN0IHNsYXZlICpfX3RsYl9jaG9vc2VfY2hhbm5lbChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGhhc2hfaW5kZXgsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE5Mi1cXHRcXHRcXHRcXHRcXHRcXHR1MzIgc2tiX2xlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMjYtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjIyNzpzdGF0aWMgc3RydWN0IHNsYXZlICp0bGJfY2hvb3NlX2NoYW5uZWwoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHUzMiBoYXNoX2luZGV4LFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMjgtXFx0XFx0XFx0XFx0XFx0dTMyIHNrYl9sZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjMyLVxcdC8qIFdlIGRvbid0IG5lZWQgdG8gZGlzYWJsZSBzb2Z0aXJxIGhlcmUsIGJlY2F1c2VcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MjMzOlxcdCAqIHRsYl9jaG9vc2VfY2hhbm5lbCgpIGlzIG9ubHkgY2FsbGVkIGJ5IGJvbmRfYWxiX3htaXQoKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzQtXFx0ICogd2hpY2ggYWxyZWFkeSBoYXMgc29mdGlycSBkaXNhYmxlZC5cXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzYtXFx0c3Bpbl9sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMzc6XFx0dHhfc2xhdmUgPSBfX3RsYl9jaG9vc2VfY2hhbm5lbChib25kLCBoYXNoX2luZGV4LCBza2JfbGVuKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMjM4LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTEzNzg9c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzk2LVxcdFxcdFxcdGlmIChib25kLVxcdTAwM2VwYXJhbXMudGxiX2R5bmFtaWNfbGIpIHtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTM5NzpcXHRcXHRcXHRcXHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xMzk4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGhhc2hfaW5kZXggXFx1MDAyNiAweEZGLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MjU9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTA4LVxcdFxcdFxcdGhhc2hfaW5kZXggPSBfc2ltcGxlX2hhc2goaGFzaF9zdGFydCwgaGFzaF9zaXplKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTUwOTpcXHRcXHRcXHR0eF9zbGF2ZSA9IHRsYl9jaG9vc2VfY2hhbm5lbChib25kLCBoYXNoX2luZGV4LCBza2ItXFx1MDAzZWxlbik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE1MTAtXFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NTAuMjIyODk0MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNDM5MTcyODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqUmVhY2hpbmcgVmlydHVhbGl6ZWQgTmlydmFuYSoqXG5cblJpZ2h0LCB0aGlzIGxvb2tzIGVudGlyZWx5IGFjaGlldmFibGUgd2l0aGluIHRoZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBsYW5kc2NhcGUuIFdlIGNhbiBhYnNvbHV0ZWx5IGNvbmZpZ3VyZSBib25kaW5nIGRldmljZXMgYW5kIHJvdXRlIHBhY2tldHMgdGhyb3VnaCB0aGVtLiBOb3RoaW5nIGdyb3VuZGJyZWFraW5nIGhlcmUuIE5vdywgdGhlIGtleSBpcyB0byBlbnN1cmUgdGhlIGJvbmRpbmcgZHJpdmVyIGlzIHByb3Blcmx5IGNvbXBpbGVkLiBMZXQncyBkaWcgaW50byBLY29uZmlnIGFuZCBjb25maXJtIGl0J3MgZW5hYmxlZC4gSSdsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGJlIGNlcnRhaW4uIEknbGwgYWxzbyB3YW50IHRvIGRvdWJsZS1jaGVjayB0aGUgZGVmYXVsdCBvcHRpb25zLCBidXQgSSB0aGluayB0aGF0IGlzIHRoZSByaWdodCBkaXJlY3Rpb24uIExldCdzIHNlZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwNSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM2OjUyLjY2MjA2OTY3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5MzgyNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBCT05ESU5HXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9LY29uZmlnPTM5PWlmIE5FVF9DT1JFXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MC1cXG5kcml2ZXJzL25ldC9LY29uZmlnOjQxOmNvbmZpZyBCT05ESU5HXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiQm9uZGluZyBkcml2ZXIgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NTIuODAxNDYxOTMxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NjUxNTYxNjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhhbWluaW5nIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEJhc2VkIG9uIHdoYXQgSSdtIGxvb2tpbmcgYXQsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBgZHJpdmVycy9uZXQvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgc2VjdGlvbnMgYXJvdW5kIGxpbmUgNDAuIEknbSBhc3N1bWluZyB0aGF0J3Mgd2hlcmUgdGhlIGluaXRpYWwgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgbmV0d29yayBkcml2ZXJzIHdpbGwgbGlrZWx5IHJlc2lkZS4gRnJvbSB0aGVyZSwgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZ2VuZXJhbCBzdHJ1Y3R1cmUgYW5kIHBlcmhhcHMgaWRlbnRpZnkgdGhlIHNwZWNpZmljIG9wdGlvbnMgdGhhdCBhcmUgaW5mbHVlbmNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIG1vZHVsZXMgdGhhdCBJIGFtIGludGVyZXN0ZWQgaW4uIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBidWlsZCBwcm9jZXNzIGZvciB0aGlzIGFyZWEgb2YgdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDY4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6MzY6NTYuMjY2NjIxMTA5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg4NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNDA6XFx0XFxuICA0MTpcXHRjb25maWcgQk9ORElOR1xcbiAgNDI6XFx0XFx0dHJpc3RhdGUgXFxcIkJvbmRpbmcgZHJpdmVyIHN1cHBvcnRcXFwiXFxuICA0MzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gIDQ0OlxcdFxcdGRlcGVuZHMgb24gVExTIHx8IFRMU19ERVZJQ0U9blxcbiAgNDU6XFx0XFx0aGVscFxcbiAgNDY6XFx0XFx0ICBTYXkgJ1knIG9yICdNJyBpZiB5b3Ugd2lzaCB0byBiZSBhYmxlIHRvICdib25kJyBtdWx0aXBsZSBFdGhlcm5ldFxcbiAgNDc6XFx0XFx0ICBDaGFubmVscyB0b2dldGhlci4gVGhpcyBpcyBjYWxsZWQgJ0V0aGVyY2hhbm5lbCcgYnkgQ2lzY28sXFxuICA0ODpcXHRcXHQgICdUcnVua2luZycgYnkgU3VuLCA4MDIuM2FkIGJ5IHRoZSBJRUVFLCBhbmQgJ0JvbmRpbmcnIGluIExpbnV4LlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIFRoZSBkcml2ZXIgc3VwcG9ydHMgbXVsdGlwbGUgYm9uZGluZyBtb2RlcyB0byBhbGxvdyBmb3IgYm90aCBoaWdoXFxuICA1MTpcXHRcXHQgIHBlcmZvcm1hbmNlIGFuZCBoaWdoIGF2YWlsYWJpbGl0eSBvcGVyYXRpb24uXFxuICA1MjpcXHRcXG4gIDUzOlxcdFxcdCAgUmVmZXIgdG8gXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcucnN0XFx1MDAzZSBmb3IgbW9yZVxcbiAgNTQ6XFx0XFx0ICBpbmZvcm1hdGlvbi5cXG4gIDU1OlxcdFxcbiAgNTY6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuICA1NzpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGJvbmRpbmcuXFxuICA1ODpcXHRcXG4gIDU5OlxcdGNvbmZpZyBEVU1NWVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNjo1Ni4yNjY3MTIyNTlaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzgyMjg5ODI5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQm9uZGluZyBNb2R1bGUgQ29tcGlsYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgYGJvbmRfYWxiLmNgIGlzIGJlaW5nIGNvbXBpbGVkIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIuIE15IGluc3RpbmN0IGlzIHRvIGhlYWQgc3RyYWlnaHQgZm9yIHRoZSBgTWFrZWZpbGVgIGluIHRoZSBgZHJpdmVycy9uZXQvYm9uZGluZy9gIGRpcmVjdG9yeS4gVGhhdCdzIHRoZSBnby10byBwbGFjZSBmb3IgYnVpbGQgaW5zdHJ1Y3Rpb25zLCBhbmQgSSdtIHN1cmUgaXQnbGwgaG9sZCB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MgZm9yIHRoaXMgc3BlY2lmaWMgZmlsZS4gTGV0J3Mgc2VlIHdoYXQgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBpdCBkZWZpbmVzLiBUaGlzIGlzIHVzdWFsbHkgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gY29uZmlybSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgYnVpbGQgc3lzdGVtLiBJJ20gZXhwZWN0aW5nIHN0YW5kYXJkIG9iamVjdCBmaWxlIGdlbmVyYXRpb24sIGxpbmtpbmcsIGFuZCBwcm9iYWJseSBzb21lIGtlcm5lbCBtb2R1bGUgbWFnaWMuIExldCdzIGRpdmUgaW4gYW5kIHNlZSB3aGF0J3MgYWN0dWFsbHkgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExOTUyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzowMC4wODk2MTI4NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY4NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvYm9uZGluZy9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBNYWtlZmlsZSBmb3IgdGhlIEV0aGVybmV0IEJvbmRpbmcgZHJpdmVyXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdG9iai0kKENPTkZJR19CT05ESU5HKSArPSBib25kaW5nLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0Ym9uZGluZy1vYmpzIDo9IGJvbmRfbWFpbi5vIGJvbmRfM2FkLm8gYm9uZF9hbGIubyBib25kX3N5c2ZzLm8gYm9uZF9zeXNmc19zbGF2ZS5vIGJvbmRfZGVidWdmcy5vIGJvbmRfbmV0bGluay5vIGJvbmRfb3B0aW9ucy5vXFxuICAgOTpcXHRcXG4gIDEwOlxcdHByb2MtJChDT05GSUdfUFJPQ19GUykgKz0gYm9uZF9wcm9jZnMub1xcbiAgMTE6XFx0Ym9uZGluZy1vYmpzICs9ICQocHJvYy15KVxcbiAgMTI6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM3OjAwLjA4OTY4MTgzNloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo3MDE3MzU3NDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBCb25kaW5nIE1vZHVsZSBTeW1ib2xzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYm9uZGluZyBtb2R1bGUncyBidWlsZCBwcm9jZXNzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgYm9uZF9hbGIub2AgaXMgYWx3YXlzIGluY29ycG9yYXRlZCBpbnRvIGBib25kaW5nLm9gIHdoZW4gYENPTkZJR19CT05ESU5HYCBpcyBlbmFibGVkLiBUaGF0IG1ha2VzIHNlbnNlLCBnaXZlbiB0aGF0IGBDT05GSUdfQk9ORElOR2AgaXRzZWxmIGRlcGVuZHMgb24gYElORVRgLiBJIG5lZWQgdG8gZW5zdXJlIEkndmUgY292ZXJlZCBhbGwgdGhlIGRlcGVuZGVuY2llcywgdGhvdWdoLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIGludm9sdmVkPyBMZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayBgTkVUX0NPUkVgIOKAkyB0aGF0J3MgYSBtZW51IG9yIGJvb2xlYW4sIElJUkMuXG5cbk5vdywgbGV0J3MgdHVybiBteSBhdHRlbnRpb24gdG8gYGNvbXB1dGVfZ2FwYC4gSSBzZWUgaXQncyBkZWZpbmVkIGFzIGBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpYC4gQmVjYXVzZSBpdCdzIHN0YXRpYyBhbmQgKm5vdCogZXhwbGljaXRseSBpbmxpbmVkIChvciBhdCBsZWFzdCwgSSBkb24ndCBzZWUgdGhlIGlubGluZSBrZXl3b3JkKSB0aGF0IG1lYW5zIGl0ICpjb3VsZCogaGF2ZSBiZWVuIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGV0aGVyIEkgc2hvdWxkIGJlIGluY2x1ZGluZyBgY29tcHV0ZV9nYXBgLCBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLCBgX190bGJfY2hvb3NlX2NoYW5uZWxgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBvciBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgIGluIHRoZSBgRm9jdXNTeW1ib2xzYC4gTGV0J3MgY29uZmlybSB0aGF0IGBjb21wdXRlX2dhcGAgaXMgc3RhdGljIGFuZCBub24taW5saW5lOiBZZXAsIHRoZSBkZWZpbml0aW9uIGNvbmZpcm1zIHRoYXQ6IGBzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpYC4gSSBkb24ndCBzZWUgdGhlIGBpbmxpbmVgIGtleXdvcmQuIFNpbmNlIGl0J3MgYSBzbWFsbCBmdW5jdGlvbiBhbmQgaGFzIG9ubHkgYSBzaW5nbGUgY2FsbCBzaXRlLCB0aGUgY29tcGlsZXIgKm1pZ2h0KiBoYXZlIGlubGluZWQgaXQgaW50byBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgLlxuXG5gdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIGlzIGFsc28gc3RhdGljLCBhbmQgaXQncyBjYWxsZWQgd2l0aGluIGBfX3RsYl9jaG9vc2VfY2hhbm5lbGAuIExldCdzIGRvdWJsZS1jaGVjayBpZiBpdCdzIGV4cG9ydGVkIG9yIHN0YXRpYzogYHN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKnRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKWAuIFNvLCBpdCdzIHN0YXRpYyB0b28uXG5cbkFscmlnaHQsIHdoYXQgYWJvdXQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YD8gVGhvc2UgYXJlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFuZCBhcmUgY2FsbGVkIGZyb20gYGJvbmRfbWFpbi5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIHRpbWUgdG8gdHJhY2sgZG93biB0aGUgY2FsbCBzaXRlcyBmb3IgYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzowNy4xMDcwNDM2MjdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2Nzc4MTc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kX3htaXRfLipfc2xhdmVfZ2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzQ1PXN0YXRpYyBuZXRkZXZfdHhfdCBib25kX2RvX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBib25kaW5nICpib25kLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTEzNzctXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jOjEzNzg6c3RydWN0IHNsYXZlICpib25kX3htaXRfdGxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTM3OS1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MTY9bmV0ZGV2X3R4X3QgYm9uZF90bGJfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQyMC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyMTpcXHR0eF9zbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTE0MjItXFx0cmV0dXJuIGJvbmRfZG9fYWxiX3htaXQoc2tiLCBib25kLCB0eF9zbGF2ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQyNC1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQyNTpzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kLFxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNDI2LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM9MTUyOT1uZXRkZXZfdHhfdCBib25kX2FsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMzLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTM0OlxcdHR4X3NsYXZlID0gYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTUzNS1cXHRyZXR1cm4gYm9uZF9kb19hbGJfeG1pdChza2IsIGJvbmQsIHR4X3NsYXZlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NDkzMz1zdGF0aWMgdTMyIGJvbmRfcnJfZ2VuX3NsYXZlX2lkKHN0cnVjdCBib25kaW5nICpib25kKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00OTU3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NDk1ODpzdGF0aWMgc3RydWN0IHNsYXZlICpib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy00OTU5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz00OTk2PXN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeGRwX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwMTAtXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDExOlxcdC8qIFNlZSBjb21tZW50IG9uIElHTVAgaW4gYm9uZF94bWl0X3JvdW5kcm9iaW5fc2xhdmVfZ2V0KCkgKi9cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwMTItXFx0aWYgKGV0aC1cXHUwMDNlaF9wcm90byA9PSBodG9ucyhFVEhfUF9JUCkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTAzNz1zdGF0aWMgbmV0ZGV2X3R4X3QgYm9uZF94bWl0X3JvdW5kcm9iaW4oc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTA0Mi1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNDM6XFx0c2xhdmUgPSBib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNDQtXFx0aWYgKGxpa2VseShzbGF2ZSkpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNDktXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1MDUwOnN0YXRpYyBzdHJ1Y3Qgc2xhdmUgKmJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KHN0cnVjdCBib25kaW5nICpib25kKVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTA1MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTUwNTg9c3RhdGljIG5ldGRldl90eF90IGJvbmRfeG1pdF9hY3RpdmViYWNrdXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTA2My1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUwNjQ6XFx0c2xhdmUgPSBib25kX3htaXRfYWN0aXZlYmFja3VwX3NsYXZlX2dldChib25kKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTUwNjUtXFx0aWYgKHNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01MTU4PWludCBib25kX3VwZGF0ZV9zbGF2ZV9hcnIoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2tpcHNsYXZlKVxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjI3LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTIyODpzdGF0aWMgc3RydWN0IHNsYXZlICpib25kX3htaXRfM2FkX3hvcl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MjI5LVxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01Mjk2PXN0YXRpYyBuZXRkZXZfdHhfdCBib25kXzNhZF94b3JfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01MzAzLVxcdHNsYXZlcyA9IHJjdV9kZXJlZmVyZW5jZShib25kLVxcdTAwM2V1c2FibGVfc2xhdmVzKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjUzMDQ6XFx0c2xhdmUgPSBib25kX3htaXRfM2FkX3hvcl9zbGF2ZV9nZXQoYm9uZCwgc2tiLCBzbGF2ZXMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTMwNS1cXHRpZiAobGlrZWx5KHNsYXZlKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTQxMz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfeG1pdF9nZXRfc2xhdmUoc3RydWN0IG5ldF9kZXZpY2UgKm1hc3Rlcl9kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjItXFx0Y2FzZSBCT05EX01PREVfUk9VTkRST0JJTjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0MjM6XFx0XFx0c2xhdmUgPSBib25kX3htaXRfcm91bmRyb2Jpbl9zbGF2ZV9nZXQoYm9uZCwgc2tiKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjQtXFx0XFx0YnJlYWs7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDI1LVxcdGNhc2UgQk9ORF9NT0RFX0FDVElWRUJBQ0tVUDpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0MjY6XFx0XFx0c2xhdmUgPSBib25kX3htaXRfYWN0aXZlYmFja3VwX3NsYXZlX2dldChib25kKTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MjctXFx0XFx0YnJlYWs7XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0MzMtXFx0XFx0XFx0c2xhdmVzID0gcmN1X2RlcmVmZXJlbmNlKGJvbmQtXFx1MDAzZXVzYWJsZV9zbGF2ZXMpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQzNDpcXHRcXHRzbGF2ZSA9IGJvbmRfeG1pdF8zYWRfeG9yX3NsYXZlX2dldChib25kLCBza2IsIHNsYXZlcyk7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDM1LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDM4LVxcdGNhc2UgQk9ORF9NT0RFX0FMQjpcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jOjU0Mzk6XFx0XFx0c2xhdmUgPSBib25kX3htaXRfYWxiX3NsYXZlX2dldChib25kLCBza2IpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTQ0MC1cXHRcXHRicmVhaztcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU0NDEtXFx0Y2FzZSBCT05EX01PREVfVExCOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTQ0MjpcXHRcXHRzbGF2ZSA9IGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0KGJvbmQsIHNrYik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NDQzLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYz01NjEwPWJvbmRfeGRwX2dldF94bWl0X3NsYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2Rldiwgc3RydWN0IHhkcF9idWZmICp4ZHApXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU2MjItXFx0Y2FzZSBCT05EX01PREVfQUNUSVZFQkFDS1VQOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTYyMzpcXHRcXHRzbGF2ZSA9IGJvbmRfeG1pdF9hY3RpdmViYWNrdXBfc2xhdmVfZ2V0KGJvbmQpO1xcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTYyNC1cXHRcXHRicmVhaztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6Mzc6MDcuMjc0ODMyOTY3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc5MTQzODczNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE5ldHdvcmsgQm9uZGluZyBUcmFuc21pc3Npb24gTW9kZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBpbnRvIGhvdyB0aGUgYm9uZGluZyBkcml2ZXIgaGFuZGxlcyB0cmFuc21pdCBvcGVyYXRpb25zLCBzcGVjaWZpY2FsbHkgaW4gQUxCIGFuZCBUTEIgbW9kZXMuIEl0IGxvb2tzIGxpa2UgYGJvbmRfYWxiX3htaXRgIGFuZCBgYm9uZF90bGJfeG1pdGAgYXJlIHRoZSBzdGFydGluZyBwb2ludHMg4oCTIHRoZSBgbmRvX3N0YXJ0X3htaXRgIGZ1bmN0aW9ucyBmb3IgdGhlc2UgbW9kZXMuICBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBGb2N1c1N5bWJvbHNgIHRvIGdldCBhIGxheSBvZiB0aGUgbGFuZCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBpbiB0aGlzIGNvbnRleHQuXG5cbkxldCdzIHNlZTogYGNvbXB1dGVfZ2FwYCwgd2hpY2ggaXMgdGhlIGZ1bmN0aW9uIEkgdGhpbmsgd2FzIG1vZGlmaWVkLCB0aGVuIGB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZWAsIHdoaWNoIGRpcmVjdGx5IGNhbGxzIGl0LiBPZiBjb3Vyc2UsIGBib25kX2FsYl94bWl0YCBhbmQgYGJvbmRfdGxiX3htaXRgIGFyZSB0aGVyZSwgdGhlIGNvcmUgb2YgdGhlIHRyYW5zbWlzc2lvbiBsb2dpYyBmb3IgZWFjaCBib25kaW5nIG1vZGUuIEkgYWxzbyBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNsYXZlIHNlbGVjdGlvbiwgc28gYGJvbmRfeG1pdF9hbGJfc2xhdmVfZ2V0YCBhbmQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YCBhcmUgaW1wb3J0YW50IHRvIG5vdGUuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiAgYGNvbXB1dGVfZ2FwYCDigJMgSSdsbCBxdWlja2x5IGNvbmZpcm0gd2hldGhlciBpdCdzIHN0YXRpYy4uLiB5ZXMsIGdvb2QuIFRoaXMgbWFrZXMgc2Vuc2UuIEl0J3MgbGlrZWx5IGFuIGludGVybmFsIHV0aWxpdHkgZnVuY3Rpb24uIFNpbWlsYXJseSwgSSdsbCBjaGVjayBgdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmVgIOKAkyBhbmQgeWVzLCB0aGF0J3MgYWxzbyBzdGF0aWMsIGFzIGV4cGVjdGVkLCBhcyBpdCdzIGFuIGludGVybmFsIHBhcnQgb2YgdGhlIFRMQiBsb2dpYy5cblxuQnV0IGBib25kX2FsYl94bWl0YC4uLiBhaCwgdGhhdCdzICpub3QqIHN0YXRpYy4gVGhpcyBtZWFucyBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuIEl0J3MgdXNlZCBzb21ld2hlcmUgaW4gYGJvbmRfbWFpbi5jYCDigJMgcHJvYmFibHkgdmlhIHRoZSBgbmV0ZGV2X29wc2Agc3RydWN0dXJlIG9yIHRoZSBib25kIG1vZGUgaGFuZGxlcnMsIHdoaWNoIG1ha2VzIHNlbnNlLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlZmluZWQgYW5kIHVzZWQgYmVjYXVzZSB0aGF0J3Mga2V5LiBOb3csIEkgbmVlZCB0byBnZXQgaW50byB0aGUgY29kZSB0byB0cmFjZSB0aGVpciBkZWZpbml0aW9uIGFuZCB1c2FnZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6Mzc6MTUuMTg5MjIzMjMyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg3NzAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kX2FsYl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0yMjc9c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2Nob29zZV9jaGFubmVsKHN0cnVjdCBib25kaW5nICpib25kLCB1MzIgaGFzaF9pbmRleCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0yMzItXFx0LyogV2UgZG9uJ3QgbmVlZCB0byBkaXNhYmxlIHNvZnRpcnEgaGVyZSwgYmVjYXVzZVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoyMzM6XFx0ICogdGxiX2Nob29zZV9jaGFubmVsKCkgaXMgb25seSBjYWxsZWQgYnkgYm9uZF9hbGJfeG1pdCgpXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jLTIzNC1cXHQgKiB3aGljaCBhbHJlYWR5IGhhcyBzb2Z0aXJxIGRpc2FibGVkLlxcbi0tXFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jPTE0MjU9c3RydWN0IHNsYXZlICpib25kX3htaXRfYWxiX3NsYXZlX2dldChzdHJ1Y3QgYm9uZGluZyAqYm9uZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTI4LVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYzoxNTI5Om5ldGRldl90eF90IGJvbmRfYWxiX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2KVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYy0xNTMwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM9NTU1MD1zdGF0aWMgbmV0ZGV2X3R4X3QgX19ib25kX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMtNTU3Ni1cXHRjYXNlIEJPTkRfTU9ERV9BTEI6XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYzo1NTc3OlxcdFxcdHJldHVybiBib25kX2FsYl94bWl0KHNrYiwgZGV2KTtcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzgtXFx0Y2FzZSBCT05EX01PREVfVExCOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoxNS4yMzgxMDkzMTdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDE0NDg5MDU3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UgcmVxdWVzdGVkOlxuXG4qKk15IERlZXAgRGl2ZSBpbnRvIGBib25kX3RsYl94bWl0YCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gV2hlbiBJIHNlZSBgYm9uZF90bGJfeG1pdGAsIG15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGRpc3NlY3RpbmcgdGhlIGltcGxpY2F0aW9ucy4gSXQncyBhIGtleSBmdW5jdGlvbiByZWxhdGVkIHRvIGJvbmRpbmcgYW5kLCBtb3N0IGxpa2VseSwgdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlcnMuIEluIG15IGV4cGVyaWVuY2UsIGl0J3MgYWxtb3N0IGNlcnRhaW5seSBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIHBhY2tldHMgYWNyb3NzIGJvbmRlZCBuZXR3b3JrIGludGVyZmFjZXMsIGVzcGVjaWFsbHkgaW4gc2NlbmFyaW9zIGludm9sdmluZyBsb2FkIGJhbGFuY2luZyBvciBmYWlsb3Zlci4gSSdtIHZpc3VhbGl6aW5nIHRoZSBuZXR3b3JrIHN0YWNrLCB0aGlua2luZyBhYm91dCBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyLWxldmVsIGRyaXZlcnMsIHRoZSBib25kaW5nIG1vZHVsZSBpdHNlbGYsIGFuZCB0aGUgb3ZlcmFsbCBwYWNrZXQgcHJvY2Vzc2luZyBmbG93LlxuXG5JJ20gc3RhcnRpbmcgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpc3N1ZXM6IGNhY2hlIGNvaGVyZW5jeSwgdGhlIGltcGFjdCBvZiBkaWZmZXJlbnQgaGFyZHdhcmUgaW1wbGVtZW50YXRpb25zLCBhbmQgdGhlIHBvc3NpYmxlIGVkZ2UgY2FzZXMgYXJpc2luZyBmcm9tIGEgdmFyaWV0eSBvZiBib25kaW5nIG1vZGVzLiBJIHdvbmRlciBpZiBpdCdzIG9wdGltaXplZCBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBhcmNoaXRlY3R1cmUsIGJlY2F1c2UgaWYgaXQncyBub3QgYW5kIHdlIGFyZSB1c2luZyBpdCBvbiBhIHN5c3RlbSwgc2F5IHdpdGggYSBwYXJ0aWN1bGFyIE5JQyBjaGlwc2V0LCB0aGVyZSBtYXkgYmUgc29tZSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB0aGVyZS4gSSdtIHdvbmRlcmluZyBpZiB0aGVyZSBhcmUgYW55IHJhY2UgY29uZGl0aW9ucyBpdCBtaWdodCBoYXZlLiBEb2VzIGl0IGVtcGxveSBzcGlubG9ja3MsIG11dGV4ZXMsIG9yIHNvbWUgbW9yZSBzb3BoaXN0aWNhdGVkIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gdG8gZW5zdXJlIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0cmFuc21pc3Npb24/IEEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlIChJJ2QgYmUgd2FudGluZyB0byBkbyB0aGF0IGFzIHNvb24gYXMgSSBjYW4sIG9mIGNvdXJzZSkgd291bGQgcXVpY2tseSB2ZXJpZnkgbXkgc3VzcGljaW9ucy4gXG5cbkknbSBjb25zaWRlcmluZyB0aGUgY29udGV4dDogaXMgdGhpcyBwYXJ0IG9mIHRoZSBjb3JlIG5ldHdvcmtpbmcgY29kZSwgb3IgYSBsYXllciBvbiB0b3A/IEhvdyBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBhbmQgaG93IGRvZXMgaXQgZGVhbCB3aXRoIHRoZSB2YXJpb3VzIG5ldHdvcmsgaGVhZGVycywgVkxBTiB0YWdzLCBhbmQgY2hlY2tzdW0gY2FsY3VsYXRpb25zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHByb2Nlc3M/IEFsc28sIGVycm9yIGhhbmRsaW5nIGlzIGFuIGltcG9ydGFudCB0aGluZyB0byBsb29rIGF0LiBBcmUgdGhlcmUgcm9idXN0IGVycm9yIGNoZWNrcyBhbmQgZmFsbGJhY2sgbWVjaGFuaXNtcyBpbiBwbGFjZT8gRmFpbHVyZXMgaGVyZSBjYW4gaGF2ZSBwcmV0dHkgc2VyaW91cyBjb25zZXF1ZW5jZXMuIEZpbmFsbHksIHRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgdGhpcywgdGhlIG1vcmUgbXkgaW50ZXJlc3QgaXMgcGlxdWVkLiBJJ20gYmV0dGluZyB0aGF0IHRoaXMgbGl0dGxlIGZ1bmN0aW9uIGhvbGRzIGEga2V5IHRvIHVuZGVyc3RhbmRpbmcgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIG5ldHdvcmsgYmVoYXZpb3IuIEkgbmVlZCB0byBnZXQgaW4gdGhlcmUgYW5kIHJlYWQgdGhlIHNvdXJjZSFcblxuXG4iLCJJbnB1dFRva2VucyI6MTYzOTYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoxOS4zODMwMDIzNzdaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzU2NzcxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJib25kX3RsYl94bWl0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYz0xMzc4PXN0cnVjdCBzbGF2ZSAqYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXQoc3RydWN0IGJvbmRpbmcgKmJvbmQsXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQxNS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmM6MTQxNjpuZXRkZXZfdHhfdCBib25kX3RsYl94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpib25kX2RldilcXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMtMTQxNy17XFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jPTU1NTA9c3RhdGljIG5ldGRldl90eF90IF9fYm9uZF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jLTU1NzgtXFx0Y2FzZSBCT05EX01PREVfVExCOlxcbmRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmM6NTU3OTpcXHRcXHRyZXR1cm4gYm9uZF90bGJfeG1pdChza2IsIGRldik7XFxuZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYy01NTgwLVxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM3OjE5LjY0MDU4MDQ1MloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NTk1MDMwNDA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEJvbmRpbmcgQUxCL1RMQiBUcmFuc21pdCBNb2RlIENvZGUgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHNldCBvZiBmdW5jdGlvbnM6IGBjb21wdXRlX2dhcGAsIGB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZWAsIGBib25kX2FsYl94bWl0YCwgYGJvbmRfdGxiX3htaXRgLCBgYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRgLCBhbmQgYGJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0YC4gVGhlc2UgYXJlbid0IGdlbmVyaWMsIHRoZXkncmUgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYm9uZGluZydzIEFkYXB0aXZlIExvYWQgQmFsYW5jaW5nIChBTEIpIGFuZCBUcmFuc21pdCBMb2FkIEJhbGFuY2luZyAoVExCKSBtb2Rlcy4gRmlyc3QsIGxldCdzIHNlZSBpZiB3ZSBjYW4gZW5hYmxlIHRoZW0uXG5cbkNoZWNraW5nIGBFbmFibGVDb25maWdzYCwgSSBzZWUgdGhhdCBgQk9ORElOR2AgaXMgdGhlIGtleS4gQW5kLCBvZiBjb3Vyc2UsIHRoYXQgZGVwZW5kcyBvbiBgSU5FVGAuIFRoZW4sIGEgcXVpY2sgZGl2ZSBpbnRvIGBkcml2ZXJzL25ldC9ib25kaW5nL01ha2VmaWxlYCBjb25maXJtcyBgb2JqLSQoQ09ORklHX0JPTkRJTkcpICs9IGJvbmRpbmcub2AsIGFuZCBgQ09ORklHX0JPTkRJTkdgICpkb2VzKiBpbmRlZWQgZGVwZW5kIG9uIGBDT05GSUdfSU5FVGAuIFNvLCBgQk9ORElOR2AgYW5kIGBJTkVUYCBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZS5cblxuTm93IGZvciB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyBjb2RlIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgQUxCIGFuZCBUTEIgbW9kZXMgaW4gdGhlIGJvbmRpbmcgZHJpdmVyIGFyZSBlYXNpbHkgY29uZmlndXJlZCBpbiBtYW55IHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gWW91IGNhbiByZWFkaWx5IHNldCB0aGVzZSB1cCB1c2luZyB2aXJ0dWFsIG5ldGRldnMgbGlrZSB2ZXRoIG9yIGR1bW15IGRldmljZXMsIGFuZCBjb250cm9sIHRoZW0gdXNpbmcgcnRuZXRsaW5rIG9yIHN5c2ZzLiBNYWtlcyBmb3Igc2ltcGxlIHRlc3RpbmcuXG5cbkRvZXMgdGhlIGNoYW5nZSBhY3R1YWxseSBhZmZlY3QgZXhlY3V0YWJsZSBjb2RlPyBZZXMsIHRoZSBwYXRjaCBhZGRyZXNzZXMgYSAzMi1iaXQgc2hpZnQgb3ZlcmZsb3cgaW4gYGNvbXB1dGVfZ2FwKClgLiBTbyBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5MZXQncyBkb3VibGUgY2hlY2sgdGhlIGBGb2N1c1N5bWJvbHNgLiBZdXAsIGBjb21wdXRlX2dhcGAsIGB0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZWAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGBib25kX3htaXRfdGxiX3NsYXZlX2dldGAsIGBib25kX2FsYl94bWl0YCwgYGJvbmRfdGxiX3htaXRgIGFyZSBhbGwgY29ycmVjdCBhbmQgcmVsZXZhbnQuXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHBhcmFtZXRlcnMgZm9yIGBzZXQtcmVzdWx0c2AuXG5cbi0gICBgV29ydGhGdXp6aW5nYDogVHJ1ZVxuLSAgIGBSZWFzb25pbmdgOiBXZSd2ZSBnb3QgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBgY29tcHV0ZV9nYXAoKWAgdGhhdCdzIGJlZW4gZml4ZWQuIFRoZSBmaXggaW52b2x2ZXMgY2FzdGluZyB0byBgczY0YCBiZWZvcmUgc2hpZnRpbmcgYHNsYXZlLVx1MDAzZXNwZWVkYCBhbmQgYGxvYWRgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGJvbmRpbmcgZHJpdmVyJ3MgQUxCL1RMQiB0cmFuc21pdCBwYXRoLCBhbmQgdGVzdGFibGUgdXNpbmcgdmlydHVhbCBkZXZpY2VzIGxpa2UgZHVtbXkgb3IgdmV0aCBpbiBRRU1VLiBXZSdsbCBhbHNvIGJlIHN1cmUgdG8gbGlzdCB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMgYW5kIGNvbmZpZ3VyYXRpb25zLlxuLSAgIGBGb2N1c1N5bWJvbHNgOiBJJ2xsIGluY2x1ZGUgYGNvbXB1dGVfZ2FwYCwgYHRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlYCwgYGJvbmRfYWxiX3htaXRgLCBgYm9uZF90bGJfeG1pdGAsIGBib25kX3htaXRfYWxiX3NsYXZlX2dldGAsIGFuZCBgYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRgLlxuLSAgIGBFbmFibGVDb25maWdzYDogYEJPTkRJTkdgIGFuZCBgSU5FVGAuXG5cbkFscmlnaHQsIGV2ZXJ5dGhpbmcgaXMgc3F1YXJlZCBhd2F5LiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTMyLCJPdXRwdXRUb2tlbnMiOjIwNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoyNi4yMzU2MTQ1MTlaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDY0NzI4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQk9ORElOR1wiLFxuICAgIFwiSU5FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbXB1dGVfZ2FwXCIsXG4gICAgXCJ0bGJfZ2V0X2xlYXN0X2xvYWRlZF9zbGF2ZVwiLFxuICAgIFwiYm9uZF9hbGJfeG1pdFwiLFxuICAgIFwiYm9uZF90bGJfeG1pdFwiLFxuICAgIFwiYm9uZF94bWl0X2FsYl9zbGF2ZV9nZXRcIixcbiAgICBcImJvbmRfeG1pdF90bGJfc2xhdmVfZ2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcG90ZW50aWFsIDMyLWJpdCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlcyBpbiBjb21wdXRlX2dhcCgpIGJ5IGNhc3Rpbmcgc2xhdmUtXFx1MDAzZXNwZWVkIGFuZCBsb2FkIHRvIDY0LWJpdCBzaWduZWQgaW50ZWdlcnMgcHJpb3IgdG8gdGhlIGJpdCBzaGlmdCBvcGVyYXRpb25zLiBUaGlzIGNvZGUgcGF0aCBpcyBwYXJ0IG9mIHRoZSBib25kaW5nIGRyaXZlcidzIGFkYXB0aXZlIGxvYWQgYmFsYW5jaW5nIChBTEIpIGFuZCB0cmFuc21pdCBsb2FkIGJhbGFuY2luZyAoVExCKSBtb2RlIHBhY2tldCB0cmFuc21pdCBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdXNpbmcgdmlydHVhbCBpbnRlcmZhY2VzIChzdWNoIGFzIHZldGggb3IgZHVtbXkgZGV2aWNlcykgYm9uZGVkIGluIEFMQi9UTEIgbW9kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCT05ESU5HXCIsXG4gICAgXCJJTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29tcHV0ZV9nYXBcIixcbiAgICBcInRsYl9nZXRfbGVhc3RfbG9hZGVkX3NsYXZlXCIsXG4gICAgXCJib25kX2FsYl94bWl0XCIsXG4gICAgXCJib25kX3RsYl94bWl0XCIsXG4gICAgXCJib25kX3htaXRfYWxiX3NsYXZlX2dldFwiLFxuICAgIFwiYm9uZF94bWl0X3RsYl9zbGF2ZV9nZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBwb3RlbnRpYWwgMzItYml0IGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGluIGNvbXB1dGVfZ2FwKCkgYnkgY2FzdGluZyBzbGF2ZS1cXHUwMDNlc3BlZWQgYW5kIGxvYWQgdG8gNjQtYml0IHNpZ25lZCBpbnRlZ2VycyBwcmlvciB0byB0aGUgYml0IHNoaWZ0IG9wZXJhdGlvbnMuIFRoaXMgY29kZSBwYXRoIGlzIHBhcnQgb2YgdGhlIGJvbmRpbmcgZHJpdmVyJ3MgYWRhcHRpdmUgbG9hZCBiYWxhbmNpbmcgKEFMQikgYW5kIHRyYW5zbWl0IGxvYWQgYmFsYW5jaW5nIChUTEIpIG1vZGUgcGFja2V0IHRyYW5zbWl0IGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB1c2luZyB2aXJ0dWFsIGludGVyZmFjZXMgKHN1Y2ggYXMgdmV0aCBvciBkdW1teSBkZXZpY2VzKSBib25kZWQgaW4gQUxCL1RMQiBtb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoyNi4zMjAyNzE5MVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM1MTQ1MDI4OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoyNi4zMjA4NDYyM1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIzNTEzOTI0MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhbiBpbnRlZ2VyIHRydW5jYXRpb24vb3ZlcmZsb3cgYnVnIGluIGNvbXB1dGVfZ2FwKCkgYnkgY2FzdGluZyBzbGF2ZS1cXHUwMDNlc3BlZWQgYW5kIGxvYWQgdG8gNjQtYml0IHNpZ25lZCBpbnRlZ2VycyAoczY0KSBwcmlvciB0byBiaXQtc2hpZnRpbmcsIHByZXZlbnRpbmcgMzItYml0IGFyaXRobWV0aWMgb3ZlcmZsb3cgZm9yIGhpZ2ggbGluayBzcGVlZHMgKGUuZy4sIFxcdTAwM2U9IDRHYnBzKS4gSXQgZG9lcyBub3QgYWxsb2NhdGUgb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgYWx0ZXIgYnVmZmVyIGJvdW5kYXJpZXMsIG9yIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYW5kIEtNU0FOIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkYzNjOWNiOWE0ZmQ5MjI0MTA4NTQ1Njk2ZmI4NjFmNTVlZTVmY2M2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTM6MzY6MDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbmluZGV4IDQzYWM4ZTI4ZTQxODIuLmI1MjAwNDAzMGE0YjAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNcbisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1xuQEAgLTE2MCw4ICsxNjAsOCBAQCBzdGF0aWMgdm9pZCB0bGJfZGVpbml0aWFsaXplKHN0cnVjdCBib25kaW5nICpib25kKVxuIFxuIHN0YXRpYyBsb25nIGxvbmcgY29tcHV0ZV9nYXAoc3RydWN0IHNsYXZlICpzbGF2ZSlcbiB7XG4tXHRyZXR1cm4gKHM2NCkgKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xuLVx0ICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbitcdHJldHVybiAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbitcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzoyNi4zMjA4NDczMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0NDIyNDk4MTQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQm9uZGluZyBEcml2ZXIgUGF0Y2gqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBjb21wdXRlX2dhcGAgZnVuY3Rpb24uIExvb2tpbmcgYXQgdGhlIGNvZGUgc25pcHBldCwgaXQncyBhIG1pbm9yIGNoYW5nZTsgZXNzZW50aWFsbHksIHRoZSBhZGRpdGlvbiBvZiBwYXJlbnRoZXNlcyBhcm91bmQgdGhlIHNlY29uZCB0ZXJtIGluIHRoZSByZXR1cm4gc3RhdGVtZW50OlxuXG5gYGBjXG5zdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXG57XG4tXHRyZXR1cm4gKHM2NCkgKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAvKiBDb252ZXJ0IHRvIE1lZ2FiaXQgcGVyIHNlYyAqL1xuLVx0ICAgICAgIChzNjQpIChTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbitcdHJldHVybiAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApIC0gLyogQ29udmVydCB0byBNZWdhYml0IHBlciBzZWMgKi9cbitcdCAgICAgICAoKHM2NClTTEFWRV9UTEJfSU5GTyhzbGF2ZSkubG9hZCBcdTAwM2NcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cbn1cbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGlzIGlzIGxpa2VseSBhIG1hdHRlciBvZiBvcGVyYXRvciBwcmVjZWRlbmNlLCB3aGljaCwgaW4gYW5kIG9mIGl0c2VsZiwgaXMgcmFyZWx5IHdvcnRoIGEgcGF0Y2guIEFsdGhvdWdoLCB3aXRob3V0IGZ1bGx5IHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjb2RlYmFzZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjaGFuZ2UuIEl0IHdvdWxkIGJlIGdvb2QgdG8gc2VlIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBTbywgSSB3aWxsIHVzZSBhIHRvb2wgc3VjaCBhcyBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgdG8gY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmNgIGZpbGUgYW5kIHVuZGVyc3RhbmQgd2hlcmUgYW5kIGhvdyBgY29tcHV0ZV9nYXBgIGlzIHVzZWQuIFRoaXMgd2lsbCBoZWxwIGRldGVybWluZSBpZiB0aGlzIGlzIGp1c3QgYSBzdHlsZSBpc3N1ZSwgb3IgaWYgdGhlcmUgaXMgYSByZWFsIGJ1ZyBmaXguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzozMC43NDMzNDk0NjhaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTA6XFx0e1xcbiAxNTE6XFx0XFx0c3RydWN0IGFsYl9ib25kX2luZm8gKmJvbmRfaW5mbyA9IFxcdTAwMjYoQk9ORF9BTEJfSU5GTyhib25kKSk7XFxuIDE1MjpcXHRcXG4gMTUzOlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Ym9uZC1cXHUwMDNlbW9kZV9sb2NrKTtcXG4gMTU0OlxcdFxcbiAxNTU6XFx0XFx0a2ZyZWUoYm9uZF9pbmZvLVxcdTAwM2V0eF9oYXNodGJsKTtcXG4gMTU2OlxcdFxcdGJvbmRfaW5mby1cXHUwMDNldHhfaGFzaHRibCA9IE5VTEw7XFxuIDE1NzpcXHRcXG4gMTU4OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZib25kLVxcdTAwM2Vtb2RlX2xvY2spO1xcbiAxNTk6XFx0fVxcbiAxNjA6XFx0XFxuIDE2MTpcXHRzdGF0aWMgbG9uZyBsb25nIGNvbXB1dGVfZ2FwKHN0cnVjdCBzbGF2ZSAqc2xhdmUpXFxuIDE2MjpcXHR7XFxuIDE2MzpcXHRcXHRyZXR1cm4gKChzNjQpc2xhdmUtXFx1MDAzZXNwZWVkIFxcdTAwM2NcXHUwMDNjIDIwKSAtIC8qIENvbnZlcnQgdG8gTWVnYWJpdCBwZXIgc2VjICovXFxuIDE2NDpcXHRcXHQgICAgICAgKChzNjQpU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXFx1MDAzY1xcdTAwM2MgMyk7IC8qIEJ5dGVzIHRvIGJpdHMgKi9cXG4gMTY1OlxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0c3RhdGljIHN0cnVjdCBzbGF2ZSAqdGxiX2dldF9sZWFzdF9sb2FkZWRfc2xhdmUoc3RydWN0IGJvbmRpbmcgKmJvbmQpXFxuIDE2ODpcXHR7XFxuIDE2OTpcXHRcXHRzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCAqbGVhc3RfbG9hZGVkO1xcbiAxNzA6XFx0XFx0c3RydWN0IGxpc3RfaGVhZCAqaXRlcjtcXG4gMTcxOlxcdFxcdGxvbmcgbG9uZyBtYXhfZ2FwO1xcbiAxNzI6XFx0XFxuIDE3MzpcXHRcXHRsZWFzdF9sb2FkZWQgPSBOVUxMO1xcbiAxNzQ6XFx0XFx0bWF4X2dhcCA9IExMT05HX01JTjtcXG4gMTc1OlxcdFxcbiAxNzY6XFx0XFx0LyogRmluZCB0aGUgc2xhdmUgd2l0aCB0aGUgbGFyZ2VzdCBnYXAgKi9cXG4gMTc3OlxcdFxcdGJvbmRfZm9yX2VhY2hfc2xhdmVfcmN1KGJvbmQsIHNsYXZlLCBpdGVyKSB7XFxuIDE3ODpcXHRcXHRcXHRpZiAoYm9uZF9zbGF2ZV9jYW5fdHgoc2xhdmUpKSB7XFxuIDE3OTpcXHRcXHRcXHRcXHRsb25nIGxvbmcgZ2FwID0gY29tcHV0ZV9nYXAoc2xhdmUpO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHRcXHRcXHRpZiAobWF4X2dhcCBcXHUwMDNjIGdhcCkge1xcbiAxODI6XFx0XFx0XFx0XFx0XFx0bGVhc3RfbG9hZGVkID0gc2xhdmU7XFxuIDE4MzpcXHRcXHRcXHRcXHRcXHRtYXhfZ2FwID0gZ2FwO1xcbiAxODQ6XFx0XFx0XFx0XFx0fVxcbiAxODU6XFx0XFx0XFx0fVxcbiAxODY6XFx0XFx0fVxcbiAxODc6XFx0XFxuIDE4ODpcXHRcXHRyZXR1cm4gbGVhc3RfbG9hZGVkO1xcbiAxODk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzozMC43NDM0Nzc4NzhaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjIwNzg0NzM4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaCBmb3IgUG90ZW50aWFsIEFyaXRobWV0aWMgT3ZlcmZsb3cqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGNoYW5nZWQgYW5kIHdoeS4gSSBzZWUgdGhlIG9yaWdpbmFsIGNvZGU6IGByZXR1cm4gKHM2NCkgKHNsYXZlLVx1MDAzZXNwZWVkIFx1MDAzY1x1MDAzYyAyMCkgLSAoczY0KSAoU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWQgXHUwMDNjXHUwMDNjIDMpO2AgYW5kIGltbWVkaWF0ZWx5IHJlY29nbml6ZSBhIHBvdGVudGlhbCBpc3N1ZSB3aXRoIHRoZSBiaXQtc2hpZnRpbmcuIGBzbGF2ZS1cdTAwM2VzcGVlZGAgaXMsIGFzIEkgc3VzcGVjdCwgbGlrZWx5IGEgMzItYml0IHVuc2lnbmVkIG9yIHNpZ25lZCBpbnRlZ2VyIHR5cGUsIGEgYHUzMmAgb3Igc2ltaWxhci4gSWYgaXQgcmVwcmVzZW50cyBzb21ldGhpbmcgbGlrZSBuZXR3b3JrIHNwZWVk4oCUc2F5LCA0MDAwMCBNYnBzIG9yIGV2ZW4gMTAwIEdicHPigJR0aGUgbGVmdC1zaGlmdCBieSAyMCBiaXRzIGlzIGFsbW9zdCBjZXJ0YWlubHkgZ29pbmcgdG8gY2F1c2UgYW4gb3ZlcmZsb3cgaW4gYSAzMi1iaXQgaW50ZWdlci4gVGhlIHNhbWUgaXNzdWUgZXhpc3RzIGZvciBgbG9hZCBcdTAwM2NcdTAwM2MgM2AgaWYgdGhlIGxvYWQgaXMgYSBzaWduaWZpY2FudCBudW1iZXIuXG5cblRoZSBwcm9ibGVtIGxpZXMgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMuIFRoZSBzaGlmdCBpcyBwZXJmb3JtZWQgKmJlZm9yZSogdGhlIGNhc3QgdG8gYHM2NGAuIFNvIHRoZSBiaXQgc2hpZnQgaXMgcGVyZm9ybWVkIG9uIHRoZSBuYXJyb3dlciAzMi1iaXQgaW50ZWdlci4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgYnkgY2FzdGluZyB0byBgczY0YCAqYmVmb3JlKiB0aGUgc2hpZnQ6IGAoKHM2NClzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApYC4gVGhpcyBndWFyYW50ZWVzIGEgNjQtYml0IHNoaWZ0IG9wZXJhdGlvbiwgd2hpY2ggcHJldmVudHMgdGhlIG92ZXJmbG93IGFuZCB0cnVuY2F0aW9uLiBUaGF0J3MgYSB0ZXh0Ym9vayBleGFtcGxlIG9mIGEgZml4IGZvciB0aGlzIGtpbmQgb2YgYXJpdGhtZXRpYyBidWcuXG5cbk5vdywgbXkgbW9yZSBzZWN1cml0eS1jb25zY2lvdXMgc2lkZSBraWNrcyBpbi4gQW55IGNoYW5nZSwgbm8gbWF0dGVyIGhvdyBzbWFsbCwgcmVxdWlyZXMgY2FyZWZ1bCBzY3J1dGlueS4gTXkgbmV4dCBxdWVzdGlvbiBpczogRG9lcyB0aGlzIGludHJvZHVjZSBhbnkgbmV3IGlzc3VlcywgcGFydGljdWxhcmx5IGFyb3VuZCB1bmluaXRpYWxpemVkIG1lbW9yeT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBvZiBgc2xhdmUtXHUwMDNlc3BlZWRgIGFuZCBgU0xBVkVfVExCX0lORk8oc2xhdmUpLmxvYWRgLiBXaGVyZSBhcmUgdGhlc2UgdmFsdWVzIGNvbWluZyBmcm9tPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyBvciByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGludHJvZHVjZWQ/XG5cbkZvcnR1bmF0ZWx5LCBhZnRlciBhIHF1aWNrIHJldmlldywgSSBzZWUgdGhhdCBubyBuZXcgdmFyaWFibGVzIGFyZSBpbnRyb2R1Y2VkLiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gcG9pbnRlcnMsIGJ1ZmZlciBsZW5ndGhzLCBvciBidWZmZXJzIGludm9sdmVkLiBUaGlzIGlzIHB1cmVseSBhbiBhcml0aG1ldGljIGZpeCBmb3IgYSBjYWxjdWxhdGlvbiByZWxhdGVkIHRvIHRyYW5zbWlzc2lvbiBsb2FkIHdpdGhpbiB0aGUgYm9uZGluZyBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBBTEIgbW9kZS4gVGhhdCdzIGdvb2QgbmV3cywgc2lnbmlmaWNhbnRseSByZWR1Y2luZyBteSBjb25jZXJucy4gU3RpbGwsIEkgc2hvdWxkIHJldmlldyB0aGUgYHN0cnVjdCBzbGF2ZWAgZGVmaW5pdGlvbiB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYnV0IGl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC11bmRlcnN0b29kIGZpeC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI5NiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEzOjM3OjM2Ljk1MTMyODcwNloiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA5ODc0MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHNsYXZlIFxcXFx7XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L2JvbmRpbmcuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9ib25kaW5nLmg9MTE3PXN0cnVjdCBib25kX3BhcmFtcyB7XFxuLS1cXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTU2LVxcbmluY2x1ZGUvbmV0L2JvbmRpbmcuaDoxNTc6c3RydWN0IHNsYXZlIHtcXG5pbmNsdWRlL25ldC9ib25kaW5nLmgtMTU4LVxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzozNy4wMTIzMjI4NFoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODQzODA2MTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDaGVja2luZyB0aGUgQm9uZGluZyBTcGVlZCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYm9uZGluZyBkcml2ZXIuIExldCBtZSBqdXN0IGRpdmUgc3RyYWlnaHQgaW50byB0aGUgY29kZS4gVGhlIHNwZWNpZmljIHBpZWNlIEkgbmVlZCBpcyBgc2xhdmUtXHUwMDNlc3BlZWRgLCB3aGljaCBJIGJlbGlldmUgaXMgZGVmaW5lZCB3aXRoaW4gYGluY2x1ZGUvbmV0L2JvbmRpbmcuaGAuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBzcGVlZCBpbmZvcm1hdGlvbiBmb3IgaW5kaXZpZHVhbCBzbGF2ZXMgaW4gYSBib25kIGlzIHN0b3JlZCwgYW5kIEkgbmVlZCB0byBjb25maXJtIGl0cyBkZWZpbml0aW9uIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgZHJpdmVyLiBJ4oCZbSBiZXR0aW5nIHRoaXMgd2lsbCBnaXZlIG1lIHRoZSBhbnN3ZXIgSeKAmW0gbG9va2luZyBmb3Igd2l0aG91dCBtdWNoIGRpZ2dpbmcuIFRpbWUgdG8gdGFrZSBhIGxvb2sgYW5kIGdldCB0aGlzIHJlc29sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTM6Mzc6MzguODU2MTMxODc1WiIsIlNlcSI6NDQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC9ib25kaW5nLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTU3OlxcdHN0cnVjdCBzbGF2ZSB7XFxuIDE1ODpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OyAvKiBmaXJzdCAtIHVzZWZ1bCBmb3IgcGFuaWMgZGVidWcgKi9cXG4gMTU5OlxcdFxcdHN0cnVjdCBib25kaW5nICpib25kOyAvKiBvdXIgbWFzdGVyICovXFxuIDE2MDpcXHRcXHRpbnQgICAgZGVsYXk7XFxuIDE2MTpcXHRcXHQvKiBhbGwgNCBpbiBqaWZmaWVzICovXFxuIDE2MjpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfbGlua191cDtcXG4gMTYzOlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF90eDtcXG4gMTY0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF9yeDtcXG4gMTY1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdGFyZ2V0X2xhc3RfYXJwX3J4W0JPTkRfTUFYX0FSUF9UQVJHRVRTXTtcXG4gMTY2OlxcdFxcdHM4ICAgICBsaW5rO1xcdFxcdC8qIG9uZSBvZiBCT05EX0xJTktfWFhYWCAqL1xcbiAxNjc6XFx0XFx0czggICAgIGxpbmtfbmV3X3N0YXRlO1xcdC8qIG9uZSBvZiBCT05EX0xJTktfWFhYWCAqL1xcbiAxNjg6XFx0XFx0dTggICAgIGJhY2t1cDoxLCAgIC8qIGluZGljYXRlcyBiYWNrdXAgc2xhdmUuIFZhbHVlIGNvcnJlc3BvbmRzIHdpdGhcXG4gMTY5OlxcdFxcdFxcdFxcdCAgICAgIEJPTkRfU1RBVEVfQUNUSVZFIGFuZCBCT05EX1NUQVRFX0JBQ0tVUCAqL1xcbiAxNzA6XFx0XFx0ICAgICAgIGluYWN0aXZlOjEsIC8qIGluZGljYXRlcyBpbmFjdGl2ZSBzbGF2ZSAqL1xcbiAxNzE6XFx0XFx0ICAgICAgIHJ4X2Rpc2FibGVkOjEsIC8qIGluZGljYXRlcyB3aGV0aGVyIHNsYXZlJ3MgUnggaXMgZGlzYWJsZWQgKi9cXG4gMTcyOlxcdFxcdCAgICAgICBzaG91bGRfbm90aWZ5OjEsIC8qIGluZGljYXRlcyB3aGV0aGVyIHRoZSBzdGF0ZSBjaGFuZ2VkICovXFxuIDE3MzpcXHRcXHQgICAgICAgc2hvdWxkX25vdGlmeV9saW5rOjE7IC8qIGluZGljYXRlcyB3aGV0aGVyIHRoZSBsaW5rIGNoYW5nZWQgKi9cXG4gMTc0OlxcdFxcdHU4ICAgICBkdXBsZXg7XFxuIDE3NTpcXHRcXHR1MzIgICAgb3JpZ2luYWxfbXR1O1xcbiAxNzY6XFx0XFx0dTMyICAgIGxpbmtfZmFpbHVyZV9jb3VudDtcXG4gMTc3OlxcdFxcdHUzMiAgICBzcGVlZDtcXG4gMTc4OlxcdFxcdHUxNiAgICBxdWV1ZV9pZDtcXG4gMTc5OlxcdFxcdHU4ICAgICBwZXJtX2h3YWRkcltNQVhfQUREUl9MRU5dO1xcbiAxODA6XFx0XFx0aW50ICAgIHByaW87XFxuIDE4MTpcXHRcXHRzdHJ1Y3QgYWRfc2xhdmVfaW5mbyAqYWRfaW5mbztcXG4gMTgyOlxcdFxcdHN0cnVjdCB0bGJfc2xhdmVfaW5mbyB0bGJfaW5mbztcXG4gMTgzOlxcdCNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbiAxODQ6XFx0XFx0c3RydWN0IG5ldHBvbGwgKm5wO1xcbiAxODU6XFx0I2VuZGlmXFxuIDE4NjpcXHRcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIG5vdGlmeV93b3JrO1xcbiAxODc6XFx0XFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4gMTg4OlxcdFxcdHN0cnVjdCBydG5sX2xpbmtfc3RhdHM2NCBzbGF2ZV9zdGF0cztcXG4gMTg5OlxcdH07XFxuIDE5MDpcXHRcXG4gMTkxOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNsYXZlICp0b19zbGF2ZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4gMTkyOlxcdHtcXG4gMTkzOlxcdFxcdHJldHVybiBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IHNsYXZlLCBrb2JqKTtcXG4gMTk0OlxcdH1cXG4gMTk1OlxcdFxcbiAxOTY6XFx0c3RydWN0IGJvbmRfdXBfc2xhdmUge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzozOC44NTYyNTEwMzVaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTA5Nzg0ODk2MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHkgc2VlIGl0J3MgYW4gYXJpdGhtZXRpYyBmaXguIEl0J3MgZGVhbGluZyB3aXRoIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgd2hlbiBjYWxjdWxhdGluZyBzb21ldGhpbmcuIFNwZWNpZmljYWxseSwgdGhlIG9yaWdpbmFsIGNvZGUgd2FzIHNoaWZ0aW5nIGEgYHUzMmAgKHJlcHJlc2VudGluZyBhIHNwZWVkIHZhbHVlLCBsaWtlbHkgaW4gYSByYXRlIHBlciBzZWNvbmQgbGlrZSBHYnBzKSBieSAyMCBiaXRzIHVzaW5nIGAoczY0KShzbGF2ZS1cdTAwM2VzcGVlZCBcdTAwM2NcdTAwM2MgMjApYC4gVGhlIHByb2JsZW0gaXMgdGhhdCBpZiBgc2xhdmUtXHUwMDNlc3BlZWRgIGlzIGEgcmVsYXRpdmVseSBsYXJnZSBudW1iZXIsIHNheSA0MDk2IG9yIGdyZWF0ZXIsIHRoZSBsZWZ0IHNoaWZ0IG9wZXJhdGlvbiAqYmVmb3JlKiB0aGUgY2FzdCB0byBgczY0YCB3b3VsZCBjYXVzZSB0aGUgYHUzMmAgdG8gb3ZlcmZsb3cuIEZvciBleGFtcGxlLCBhIDEwIEdicHMgdmFsdWUgKDEwMDAwKSBzaGlmdGVkIGJ5IDIwIGJpdHMgcmVzdWx0cyBpbiBhIHZhbHVlIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIGB1MzJgIHZhbHVlLCBjYXVzaW5nIGl0IHRvIHdyYXAgYXJvdW5kLCB0cnVuY2F0aW5nIGRhdGEgYmVmb3JlIGl0J3MgY2FzdCB0byBhIGBzNjRgLlxuXG5UaGUgcGF0Y2gncyBzb2x1dGlvbiBpcyBlbGVnYW50OiBpdCBjYXN0cyB0aGUgYHNsYXZlLVx1MDAzZXNwZWVkYCB0byBhIGBzNjRgICpiZWZvcmUqIHRoZSBzaGlmdCwgc28gYChzNjQpc2xhdmUtXHUwMDNlc3BlZWQgXHUwMDNjXHUwMDNjIDIwYCBwZXJmb3JtcyBhIDY0LWJpdCBzaGlmdC4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGludGVybWVkaWF0ZSByZXN1bHQgY2FuIGFjY29tbW9kYXRlIHRoZSBzaGlmdGVkIHZhbHVlLCBhdm9pZGluZyBhbnkgdHJ1bmNhdGlvbiBvciBvdmVyZmxvdy5cblxuTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzOiBkb2VzIHRoaXMgY2hhbmdlIHdhcnJhbnQgYSBLTVNBTiAoS2VybmVsIE1lbW9yeSBTYW5pdGl6ZXIpIGNoZWNrPyBJIGRvbid0IHRoaW5rIHNvLiBUaGlzIGlzIGEgcHVyZWx5IGFyaXRobWV0aWMgb3BlcmF0aW9uLiBJdCdzIG5vdCB0b3VjaGluZyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIHBhZGRpbmcgYnl0ZXMsIG9yIGludm9sdmluZyBrZXJuZWwtdG8tdXNlcnNwYWNlIG1lbW9yeSBjb3BpZXMuIFRoZSBzdGFuZGFyZCB0ZXN0aW5nIHRvb2xzLCBhbG9uZyB3aXRoIEtBU0FOL1VCU0FOIChmb3IgcG90ZW50aWFsIHVuZGVmaW5lZCBzaGlmdHMgb3Igc2lnbmVkIG92ZXJmbG93cyksIGFyZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byBjYXRjaCBhbnkgc3VidGxlIGlzc3VlcywgYW5kIEkgZG9uJ3Qgc2VlIGFueSByaXNrIHJlbGF0ZWQgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZXJlZm9yZSwgaXQncyBzYWZlIHRvIG1hcmsgYE5lZWRzS01TQU5gIGFzIGBmYWxzZWAgaGVyZS4gTXkgcmVhc29uaW5nIGlzIHNvbGlkLCBhbmQgSSBjYW4gbm93IGNvbmZpZGVudGx5IHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExNiwiT3V0cHV0VG9rZW5zIjoxMjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMzozNzo0OS44MzQ3NDQxNTJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzIzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVxcdTAwM2VzcGVlZCBhbmQgbG9hZCB0byA2NC1iaXQgc2lnbmVkIGludGVnZXJzIChzNjQpIHByaW9yIHRvIGJpdC1zaGlmdGluZywgcHJldmVudGluZyAzMi1iaXQgYXJpdGhtZXRpYyBvdmVyZmxvdyBmb3IgaGlnaCBsaW5rIHNwZWVkcyAoZS5nLiwgXFx1MDAzZT0gNEdicHMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlc29sdmVzIGFuIGludGVnZXIgdHJ1bmNhdGlvbi9vdmVyZmxvdyBidWcgaW4gY29tcHV0ZV9nYXAoKSBieSBjYXN0aW5nIHNsYXZlLVxcdTAwM2VzcGVlZCBhbmQgbG9hZCB0byA2NC1iaXQgc2lnbmVkIGludGVnZXJzIChzNjQpIHByaW9yIHRvIGJpdC1zaGlmdGluZywgcHJldmVudGluZyAzMi1iaXQgYXJpdGhtZXRpYyBvdmVyZmxvdyBmb3IgaGlnaCBsaW5rIHNwZWVkcyAoZS5nLiwgXFx1MDAzZT0gNEdicHMpLiBJdCBkb2VzIG5vdCBhbGxvY2F0ZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbHRlciBidWZmZXIgYm91bmRhcmllcywgb3IgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhbmQgS01TQU4gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowrs769[1] Phase: Succeeded StartedAt: 2026-09-13 13:37:58 +0000 UTC FinishedAt: 2026-09-13 13:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 13:37:58 +0000 UTC FinishedAt: 2026-09-13 13:37:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2] Phase: Succeeded StartedAt: 2026-09-13 13:37:58 +0000 UTC FinishedAt: 2026-09-13 17:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 13:37:58 +0000 UTC FinishedAt: 2026-09-13 17:16:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 13:37:58 +0000 UTC FinishedAt: 2026-09-13 13:38:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 13:37:58 +0000 UTC FinishedAt: 2026-09-13 13:38:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowrs769/series-workflowrs769-convert-artifact-1296280270/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 13:38:08 +0000 UTC FinishedAt: 2026-09-13 13:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 13:38:08 +0000 UTC FinishedAt: 2026-09-13 13:54:15 +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:*c309fb34-a936-46ad-ab2a-bb6fd729f4ec,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-workflowrs769/series-workflowrs769-convert-artifact-1296280270/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": "f4f5c4c7-f084-4571-b479-6d932f6bf14c", "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-workflowrs769/series-workflowrs769-build-action-3058307892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 13:38:08 +0000 UTC FinishedAt: 2026-09-13 13:54:05 +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:*c309fb34-a936-46ad-ab2a-bb6fd729f4ec,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-workflowrs769/series-workflowrs769-convert-artifact-1296280270/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": "f4f5c4c7-f084-4571-b479-6d932f6bf14c", "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-workflowrs769/series-workflowrs769-build-action-3058307892/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 13:54:15 +0000 UTC FinishedAt: 2026-09-13 13:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 13:54:15 +0000 UTC FinishedAt: 2026-09-13 13:54:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 13:54:15 +0000 UTC FinishedAt: 2026-09-13 13:54:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 13:54:15 +0000 UTC FinishedAt: 2026-09-13 13:54:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflowrs769/series-workflowrs769-convert-artifact-2815583681/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 13:54:25 +0000 UTC FinishedAt: 2026-09-13 13:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 13:54:25 +0000 UTC FinishedAt: 2026-09-13 13:56:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f4f5c4c7-f084-4571-b479-6d932f6bf14c,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-workflowrs769/series-workflowrs769-build-action-3058307892/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-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 13:56:16 +0000 UTC FinishedAt: 2026-09-13 13:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 13:56:16 +0000 UTC FinishedAt: 2026-09-13 13:56:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 13:56:16 +0000 UTC FinishedAt: 2026-09-13 14:12:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 13:56:16 +0000 UTC FinishedAt: 2026-09-13 14:12:23 +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:*c309fb34-a936-46ad-ab2a-bb6fd729f4ec,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-workflowrs769/series-workflowrs769-convert-artifact-2815583681/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": "e09b6214-4287-435f-a116-9264d9c3fac6", "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-workflowrs769/series-workflowrs769-build-action-1303674701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 13:56:16 +0000 UTC FinishedAt: 2026-09-13 14:12:13 +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:*c309fb34-a936-46ad-ab2a-bb6fd729f4ec,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-workflowrs769/series-workflowrs769-convert-artifact-2815583681/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": "e09b6214-4287-435f-a116-9264d9c3fac6", "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-workflowrs769/series-workflowrs769-build-action-1303674701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 14:12:23 +0000 UTC FinishedAt: 2026-09-13 14:12:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 14:12:23 +0000 UTC FinishedAt: 2026-09-13 14:12:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 14:12:23 +0000 UTC FinishedAt: 2026-09-13 14:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 14:12:23 +0000 UTC FinishedAt: 2026-09-13 14:14:04 +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:*e09b6214-4287-435f-a116-9264d9c3fac6,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-workflowrs769/series-workflowrs769-build-action-1303674701/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-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 14:14:14 +0000 UTC FinishedAt: 2026-09-13 17:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 14:14:14 +0000 UTC FinishedAt: 2026-09-13 17:16:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"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:*f4f5c4c7-f084-4571-b479-6d932f6bf14c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e09b6214-4287-435f-a116-9264d9c3fac6,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-workflowrs769/series-workflowrs769-build-action-3058307892/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-workflowrs769/series-workflowrs769-build-action-1303674701/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 14:14:14 +0000 UTC FinishedAt: 2026-09-13 14:14:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 14:14:14 +0000 UTC FinishedAt: 2026-09-13 14:14:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"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-workflowrs769/series-workflowrs769-convert-artifact-4181458006/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 14:14:14 +0000 UTC FinishedAt: 2026-09-13 14:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 14:14:14 +0000 UTC FinishedAt: 2026-09-13 14:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 14:14:14 +0000 UTC FinishedAt: 2026-09-13 14:14:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 14:14:24 +0000 UTC FinishedAt: 2026-09-13 17:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs769[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"base_commit":"78445023439506ebd83b86d40b1e428a3b309d4a","base_tree":"net-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["compute_gap","tlb_get_least_loaded_slave","bond_alb_xmit","bond_tlb_xmit","bond_xmit_alb_slave_get","bond_xmit_tlb_slave_get"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"78445023439506ebd83b86d40b1e428a3b309d4a","config_name":"upstream-apparmor-kasan.config","enable_configs":["BONDING","INET"],"series_id":"a7f0e97e-47cd-48bc-b9d2-9477bdf81e47","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 14:14:24 +0000 UTC FinishedAt: 2026-09-13 17:16:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f4f5c4c7-f084-4571-b479-6d932f6bf14c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e09b6214-4287-435f-a116-9264d9c3fac6,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-workflowrs769/series-workflowrs769-build-action-3058307892/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-workflowrs769/series-workflowrs769-build-action-1303674701/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-workflowrs769/series-workflowrs769-convert-artifact-4181458006/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,}