Name: series-workflowft8zx Phase: Succeeded StartedAt: 2026-08-11 13:49:25 +0000 UTC FinishedAt: 2026-08-11 17:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[0] Phase: Succeeded StartedAt: 2026-08-11 13:49:25 +0000 UTC FinishedAt: 2026-08-11 13:53:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 13:49:25 +0000 UTC FinishedAt: 2026-08-11 13:53:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "HIBERNATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "HIBERNATION" ], "series_id": "6da09a54-d4ea-4d61-8720-b0ef0185bb71" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_cache_alloc_folio", "swap_alloc_hibernation_slot", "swap_free_hibernation_slot", "folio_put_swap", "swap_put_entries_direct", "swap_cache_del_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7SElCRVJOQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtmb2xpb19wdXRfc3dhcCYjMzQ7LAogICAgJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgc2xvdCBtYW5hZ2VtZW50IHRvIGV4cGxpY2l0bHkgdHJhY2sgaGliZXJuYXRpb24gc2xvdHMgdXNpbmcgYSBuZXcgZmxhZyAoU1dQX1RCX0hJQikgYW5kIHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgc3dhcCBzdGF0ZSB0cmFja2luZyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGFyaXNpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU4ZGE4NjcwZTg5NTQxYjYzZTRiZTQ4NGU1YTQyMTMzNTI3Mzc5OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMzo1MDozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IGI3NmViM2Q4NzZmZDcuLjYzNDFmMWJmZmZhMjMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTE4MSw5ICYjNDM7MTgxLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBhIHN3YXBwZWQtb3V0IHNsb3QgbWF5IGJlIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7XHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbiYjNDM7XHQgKiBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuJiM0MztcdGlmIChzaGFkb3dwKVxuIFx0XHQqc2hhZG93cCA9IHN3cF90Yl90b19zaGFkb3cob2xkX3RiKTtcbiBcdGlmIChtZW1jZ19pZClcbiBcdFx0Km1lbWNnX2lkID0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZik7XG5AQCAtMTk2LDcgJiM0MzsyMDEsNyBAQCBzdGF0aWMgaW50IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdGNpX2VuZCA9IGNpX29mZiAmIzQzOyBucjtcbiBcdGRvIHtcbiBcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpIHx8XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fFxuIFx0XHRcdCAgICAgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIHx8XG4gXHRcdFx0ICAgICBpc196ZXJvICE9IF9fc3dhcF90YWJsZV90ZXN0X3plcm8oY2ksIGNpX29mZikgfHxcbiBcdFx0XHQgICAgIChtZW1jZ19pZCBcdTAwMjZcdTAwMjYgKm1lbWNnX2lkICE9IF9fc3dhcF9jZ3JvdXBfZ2V0KGNpLCBjaV9vZmYpKSkpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oXG5pbmRleCBlNjYxM2U2MmY4ZDBmLi5iOTE2YTY0OTM1MjFhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF90YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3RhYmxlLmhcbkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gICogUEZOOiAgICAgIHxTV0FQX0NPVU5UfFp8LS0tLS0tIFBGTiAtLS0tLS0tfDEwfCAtIENhY2hlZCBzbG90XG4gICogUG9pbnRlcjogIHwtLS0tLS0tLS0tLSBQb2ludGVyIC0tLS0tLS0tLS18MTAwfCAtIChVbnVzZWQpXG4gICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90XG4mIzQzOyAqIEhpYmVybjogICB8ICAgIDAgICAgIHwtLS0tLS0tIDEgLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgJiM0Mzs1NSwxMCBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gICogICBhbGlnbmVkIHBvaW50ZXJzLlxuICAqXG4gICogLSBCYWQ6IFN3YXAgc2xvdCBpcyByZXNlcnZlZCwgcHJvdGVjdHMgc3dhcCBoZWFkZXIgb3IgaG9sZXMgb24gc3dhcCBkZXZpY2VzLlxuJiM0MzsgKlxuJiM0MzsgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kXG4mIzQzOyAqICAgbXVzdCBuZXZlciBlbnRlciB0aGUgc3dhcCBjYWNoZS4gVGhlIGNvdW50IGZpZWxkIGlzIGtlcHQgMCBzbyBpdCBuZXZlclxuJiM0MzsgKiAgIHJlYWRzIGFzIGEgc2xvdCBpbiB1c2UuXG4gICovXG4gXG4gLyogTlVMTCBFbnRyeSwgYWxsIDAgKi9cbkBAIC04MSw2ICYjNDM7ODYsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gLyogQmFkIHNsb3Q6IGVuZHMgd2l0aCAwYjEwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXG4gI2RlZmluZSBTV1BfVEJfQkFEXHRcdCgofjBVTCkgXHUwMDNjXHUwMDNjIDMpXG4gXG4mIzQzOy8qIEhpYmVybmF0aW9uIHNsb3Q6IGVuZHMgd2l0aCAwYjEwMDAwLCBubyBjb3VudCwgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cbiYjNDM7I2RlZmluZSBTV1BfVEJfSElCXHRcdCgoKH4wVUwpIFx1MDAzY1x1MDAzYyA0KSBcdTAwMjYgflNXUF9UQl9DT1VOVF9NQVNLKVxuJiM0MztcbiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqL1xuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFx0U1dQX1RCX0ZMQUdTX0JJVFNcbiBcbkBAIC0xNjYsNiAmIzQzOzE3NCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2JhZCh1bnNpZ25lZCBsb25nIHN3cF90YilcbiBcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpXG4ge1xuIFx0cmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC05MjgsNyAmIzQzOzkyOCw3IEBAIHN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogdXBvbiBmb2xpbyB1bm1hcC5cbiBcdCAqXG4gXHQgKiBFbHNlLCBpdCYjMzk7cyBhIGV4Y2x1c2l2ZSBvcmRlciAwIGFsbG9jYXRpb24gZm9yIGhpYmVybmF0aW9uLlxuLVx0ICogVGhlIHNsb3Qgc3RhcnRzIHdpdGggY291bnQgPT0gMSBhbmQgbmV2ZXIgaW5jcmVhc2VzLlxuJiM0MztcdCAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KGZvbGlvKSkge1xuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbkBAIC05NDAsOCAmIzQzOzk0MCw4IEBAIHN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvcmRlciA9IDA7XG4gXHRcdG5yX3BhZ2VzID0gMTtcbiBcdFx0c3dhcF9jbHVzdGVyX2Fzc2VydF9lbXB0eShjaSwgY2lfb2ZmLCAxLCBmYWxzZSk7XG4tXHRcdC8qIEZha2Ugc2hhZG93IHBsYWNlaG9sZGVyIHdpdGggbm8gZmxhZywgaGliZXJuYXRpb24gZG9lcyBub3QgdXNlIHRoZSB6ZXJvbWFwICovXG4tXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgX19zd3BfdGJfbWtfY291bnQoc2hhZG93X3RvX3N3cF90YihOVUxMLCAwKSwgMSkpO1xuJiM0MztcdFx0LyogRXhjbHVzaXZlbHkgb3duZWQgYnkgaGliZXJuYXRpb24sIG11c3QgbmV2ZXIgZW50ZXIgdGhlIHN3YXAgY2FjaGUgKi9cbiYjNDM7XHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbkBAIC0xOTI5LDkgJiM0MzsxOTI5LDExIEBAIHZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdFx0LypcbiBcdFx0ICogRnJlZWluZyBpcyBkb25lIGFmdGVyIHJlbGVhc2Ugb2YgdGhlIGxhc3Qgc3dhcCBjb3VudFxuLVx0XHQgKiByZWYsIG9yIGFmdGVyIHN3YXAgY2FjaGUgaXMgZHJvcHBlZFxuJiM0MztcdFx0ICogcmVmLCBvciBhZnRlciBzd2FwIGNhY2hlIGlzIGRyb3BwZWQuIEEgaGliZXJuYXRpb24gc2xvdFxuJiM0MztcdFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXG4gXHRcdCAqL1xuLVx0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpO1xuJiM0MztcdFx0Vk1fV0FSTl9PTighc3dwX3RiX2lzX2hpYmVybmF0aW9uKG9sZF90YikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIFx1MDAzZSAxKSk7XG4gXG4gXHRcdC8qIFJlc2V0dGluZyB0aGUgc2xvdCB0byBOVUxMIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgZmxhZ3MuICovXG4gXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgbnVsbF90b19zd3BfdGIoKSk7XG5AQCAtMjIwMSwxMiAmIzQzOzIyMDMsOCBAQCB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG4tXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xuIFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi1cbi1cdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXG4tXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7SElCRVJOQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtmb2xpb19wdXRfc3dhcCYjMzQ7LAogICAgJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBsb2dpYyB0byBpbnRyb2R1Y2UgYSBuZXcgaGliZXJuYXRpb24gc2xvdCBzdGF0ZSAoU1dQX1RCX0hJQikgYW5kIHByZXZlbnRzIGhpYmVybmF0aW9uIHNsb3RzIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gSXQgYWxzbyBjaGFuZ2VzIGhvdyBoaWJlcm5hdGlvbiBzbG90cyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZCwgYnlwYXNzaW5nIHRoZSBub3JtYWwgc3dhcCBjYWNoZSByZWZlcmVuY2UgY291bnRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwL2hpYmVybmF0aW9uIGxvZ2ljLCByZWFjaGFibGUgdmlhIHN3YXAgb3BlcmF0aW9ucyBhbmQgaGliZXJuYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOGRhODY3MGU4OTU0MWI2M2U0YmU0ODRlNWE0MjEzMzUyNzM3OTk3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTM6NTA6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggYjc2ZWIzZDg3NmZkNy4uNjM0MWYxYmZmZmEyMyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMTgxLDkgJiM0MzsxODEsMTQgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJb2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTsKIAlpZiAoc3dwX3RiX2lzX2ZvbGlvKG9sZF90YikpCiAJCXJldHVybiAtRUVYSVNUOwotCWlmICghX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpCiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuCiYjNDM7CSAqIENsdXN0ZXIgcmVhZGFoZWFkIHdhbGtzIHJhdyBvZmZzZXQgcmFuZ2VzLCBzbyBpdCBjYW4gbGFuZCBvbgomIzQzOwkgKiBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoc2hhZG93cCAmYW1wOyZhbXA7IHN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSkKJiM0MzsJaWYgKHNoYWRvd3ApCiAJCSpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpOwogCWlmIChtZW1jZ19pZCkKIAkJKm1lbWNnX2lkID0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZik7CkBAIC0xOTYsNyAmIzQzOzIwMSw3IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCWNpX2VuZCA9IGNpX29mZiAmIzQzOyBucjsKIAlkbyB7CiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7Ci0JCWlmICh1bmxpa2VseShzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fAomIzQzOwkJaWYgKHVubGlrZWx5KCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwKIAkJCSAgICAgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIHx8CiAJCQkgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fAogCQkJICAgICAobWVtY2dfaWQgJmFtcDsmYW1wOyAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSkKZGlmZiAtLWdpdCBhL21tL3N3YXBfdGFibGUuaCBiL21tL3N3YXBfdGFibGUuaAppbmRleCBlNjYxM2U2MmY4ZDBmLi5iOTE2YTY0OTM1MjFhIDEwMDY0NAotLS0gYS9tbS9zd2FwX3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF90YWJsZS5oCkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7CiAgKiBQRk46ICAgICAgfFNXQVBfQ09VTlR8WnwtLS0tLS0gUEZOIC0tLS0tLS18MTB8IC0gQ2FjaGVkIHNsb3QKICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKQogICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90CiYjNDM7ICogSGliZXJuOiAgIHwgICAgMCAgICAgfC0tLS0tLS0gMSAtLS0tLS0tfDEwMDAwfCAtIEhpYmVybmF0aW9uIHNsb3QKICAqCiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsCiAgKiBhbmQgdG9nZXRoZXIgdGhleSBmb3JtIHRoZSBgU1dQX1RCX0ZMQUdTX0JJVFNgIHdpZGUgZmxhZ3MgZmllbGQuCkBAIC01NCw2ICYjNDM7NTUsMTAgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUgewogICogICBhbGlnbmVkIHBvaW50ZXJzLgogICoKICAqIC0gQmFkOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQsIHByb3RlY3RzIHN3YXAgaGVhZGVyIG9yIGhvbGVzIG9uIHN3YXAgZGV2aWNlcy4KJiM0MzsgKgomIzQzOyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmQKJiM0MzsgKiAgIG11c3QgbmV2ZXIgZW50ZXIgdGhlIHN3YXAgY2FjaGUuIFRoZSBjb3VudCBmaWVsZCBpcyBrZXB0IDAgc28gaXQgbmV2ZXIKJiM0MzsgKiAgIHJlYWRzIGFzIGEgc2xvdCBpbiB1c2UuCiAgKi8KIAogLyogTlVMTCBFbnRyeSwgYWxsIDAgKi8KQEAgLTgxLDYgJiM0Mzs4Niw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHsKIC8qIEJhZCBzbG90OiBlbmRzIHdpdGggMGIxMDAwIGFuZCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqLwogI2RlZmluZSBTV1BfVEJfQkFECQkoKH4wVUwpICZsdDsmbHQ7IDMpCiAKJiM0MzsvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCwgbm8gY291bnQsIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovCiYjNDM7I2RlZmluZSBTV1BfVEJfSElCCQkoKCh+MFVMKSAmbHQ7Jmx0OyA0KSAmYW1wOyB+U1dQX1RCX0NPVU5UX01BU0spCiYjNDM7CiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqLwogI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUCVNXUF9UQl9GTEFHU19CSVRTCiAKQEAgLTE2Niw2ICYjNDM7MTc0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKQogCXJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpCiB7CiAJcmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHwKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGRlYTJkM2IzNmUwNmYuLjRmYmExNzcwY2U2MTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtOTI4LDcgJiM0Mzs5MjgsNyBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkgKiB1cG9uIGZvbGlvIHVubWFwLgogCSAqCiAJICogRWxzZSwgaXQmIzM5O3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi4KLQkgKiBUaGUgc2xvdCBzdGFydHMgd2l0aCBjb3VudCA9PSAxIGFuZCBuZXZlciBpbmNyZWFzZXMuCiYjNDM7CSAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LgogCSAqLwogCWlmIChsaWtlbHkoZm9saW8pKSB7CiAJCW9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwpAQCAtOTQwLDggJiM0Mzs5NDAsOCBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJb3JkZXIgPSAwOwogCQlucl9wYWdlcyA9IDE7CiAJCXN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX29mZiwgMSwgZmFsc2UpOwotCQkvKiBGYWtlIHNoYWRvdyBwbGFjZWhvbGRlciB3aXRoIG5vIGZsYWcsIGhpYmVybmF0aW9uIGRvZXMgbm90IHVzZSB0aGUgemVyb21hcCAqLwotCQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIF9fc3dwX3RiX21rX2NvdW50KHNoYWRvd190b19zd3BfdGIoTlVMTCwgMCksIDEpKTsKJiM0MzsJCS8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovCiYjNDM7CQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIFNXUF9UQl9ISUIpOwogCX0gZWxzZSB7CiAJCS8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi8KIAkJV0FSTl9PTl9PTkNFKDEpOwpAQCAtMTkyOSw5ICYjNDM7MTkyOSwxMSBAQCB2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiAJCS8qCiAJCSAqIEZyZWVpbmcgaXMgZG9uZSBhZnRlciByZWxlYXNlIG9mIHRoZSBsYXN0IHN3YXAgY291bnQKLQkJICogcmVmLCBvciBhZnRlciBzd2FwIGNhY2hlIGlzIGRyb3BwZWQKJiM0MzsJCSAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3QKJiM0MzsJCSAqIGhhcyBubyBjb3VudCBhbmQgaXMgZnJlZWQgZGlyZWN0bHkgYnkgaXRzIG93bmVyLgogCQkgKi8KLQkJVk1fV0FSTl9PTighc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpICZndDsgMSk7CiYjNDM7CQlWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgJmd0OyAxKSk7CiAKIAkJLyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi8KIAkJX19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTsKQEAgLTIyMDEsMTIgJiM0MzsyMjAzLDggQEAgdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSkKIAlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTsKLQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpOwogCV9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwotCi0JLyogSW4gdGhlb3J5IHJlYWRhaGVhZCBtaWdodCBhZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYnkgYWNjaWRlbnQgKi8KLQlfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpOwogfQogCiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEhpYmVybmF0aW9uIFN3YXAgU2xvdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBfdGFibGUuaGAsIGFuZCBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBmbGFnIOKAkyB0aGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBhcmVhcy4gVGhpcyBtZWFucyBpdCBoYXMgYSBoaWdoIHBvdGVudGlhbCBmb3IgaW1wYWN0aW5nIGNyaXRpY2FsIGtlcm5lbCBiZWhhdmlvci4KCkl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhbGwgYWJvdXQgaG93IGhpYmVybmF0aW9uIHN3YXAgc2xvdHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBzd2FwIGNhY2hlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSBmb3IgdGhlc2Ugc2xvdHMuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AsIGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCwgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AsIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgaXMgYmVpbmcgdHdlYWtlZCB0byBwcmV2ZW50IGhpYmVybmF0aW9uIHNsb3RzIChzaGFkb3cgc2xvdHMpIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgaW4gdGhlIGZpcnN0IHBsYWNlLCBlbnN1cmluZyBvbmx5IGFjdHVhbGx5IHN3YXBwZWQtb3V0IHNsb3RzIGdldCBhZGRlZC4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIHNldHRpbmcgYW5kIGNsZWFyaW5nIG9mIHRoaXMgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSBhbmQgZnJlZWluZyBoaWJlcm5hdGlvbiBzbG90cy4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBmdXp6aW5nPyBTd2FwIGFuZCBoaWJlcm5hdGlvbiBhcmUgYm90aCBwb3RlbnRpYWxseSByZWFjaGFibGUuIEhhbmcgb24uLi4gaGliZXJuYXRpb24gbWlnaHQgYmUgcHJvYmxlbWF0aWMgZGVwZW5kaW5nIG9uIHRoZSBRRU1VIHNldHVwLCBidXQgc3dhcCBpcyBkZWZpbml0ZWx5IHRoZXJlLiBNb3JlIGltcG9ydGFudGx5LCBpdCBsb29rcyBsaWtlIGNoYW5nZXMgdG8gYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGFmZmVjdCBub3JtYWwgc3dhcCByZWFkYWhlYWQgb3BlcmF0aW9ucywgZXZlbiBpbiB0aGUgY2FzZSBvZiBoaWJlcm5hdGlvbi4gJiMzNDtDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb24gc2xvdHMgdGhhdCBhcmUgZnJlZSwgYmFkLCBvciBvd25lZCBieSBoaWJlcm5hdGlvbi4mIzM0OyBTbywgZXZlbiB3aXRob3V0IGhpYmVybmF0aW9uIHN1cHBvcnQsIG5vcm1hbCBzd2FwIHJlYWRhaGVhZCBpcyBkZWZpbml0ZWx5IGFmZmVjdGVkLCB3aGljaCBpcyBncmVhdC4KClNvIG5vdywgbGV0JiMzOTtzIGZpbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uLiBJJiMzOTt2ZSBnb3QgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgaW4gYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLiBJdCBpcyBzdGF0aWMsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gSSYjMzk7bGwgZG8gYSBxdWljayBncmVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hZGRfY2hlY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTEzNT12b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTE0Ni0vKipcbm1tL3N3YXBfc3RhdGUuYzoxNDc6ICogX19zd2FwX2NhY2hlX2FkZF9jaGVjayAtIENoZWNrIGlmIGEgcmFuZ2UgaXMgc3VpdGFibGUgZm9yIGFkZGluZyBhIGZvbGlvLlxubW0vc3dhcF9zdGF0ZS5jLTE0OC0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTE2MS0gKi9cbm1tL3N3YXBfc3RhdGUuYzoxNjI6c3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwX3N0YXRlLmMtMTYzLVx0XHRcdFx0ICBzd3BfZW50cnlfdCB0YXJnX2VudHJ5LFxuLS1cbm1tL3N3YXBfc3RhdGUuYz00MTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQzMS1cdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0MzI6XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgTlVMTCwgTlVMTCk7XG5tbS9zd2FwX3N0YXRlLmMtNDMzLVx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQ1NC1cdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0NTU6XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgXHUwMDI2c2hhZG93LCBcdTAwMjZtZW1jZ19pZCk7XG5tbS9zd2FwX3N0YXRlLmMtNDU2LVx0aWYgKHVubGlrZWx5KGVycikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTkzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgcmVmbGVjdGluZyBteSBleHBlcnQgdW5kZXJzdGFuZGluZzoKCioqU3dhcCBDYWNoZSBBbGxvY2F0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NgIGlzIGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLiBUaGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIHBvdGVudGlhbGx5IGNyaXRpY2FsLCBpbnRlcm5hbCBvcGVyYXRpb24gd2l0aGluIHRoZSBzd2FwIGNhY2hpbmcgbWVjaGFuaXNtLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXM6IHdoYXQgYXJlIHRoZSAqZW50cnkgcG9pbnRzKiBmb3IgYF9fc3dhcF9jYWNoZV9hbGxvY2A/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGlzIHBhcmFtb3VudCB0byBncmFzcGluZyB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHN3YXAgY2FjaGUgbWFuYWdlbWVudC4gS25vd2luZyB0aGUgY29udGV4dHMgd2hlcmUgbWVtb3J5IGlzIGJlaW5nIHN3YXBwZWQsIGFkZGVkLCBvciByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGlzIGNlbnRyYWwgdG8gYW55IGRlZXAgZGl2ZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYF9fc3dhcF9jYWNoZV9hbGxvY2AgdG8gdW5kZXJzdGFuZCB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIHRyaWdnZXJpbmcgdGhlc2UgYWxsb2NhdGlvbiBldmVudHMuIEkgbmVlZCB0byBrbm93IHRoZSBvcmlnaW4gb2YgdGhhdCBzd2FwIGNhY2hlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9MzY3PXZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNDEzLSAqL1xubW0vc3dhcF9zdGF0ZS5jOjQxNDpzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXBfc3RhdGUuYy00MTUtXHRcdFx0XHRcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NTE5PXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUzNC1cdGRvIHtcbm1tL3N3YXBfc3RhdGUuYzo1MzU6XHRcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcbm1tL3N3YXBfc3RhdGUuYy01MzYtXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaWdnaW5nIGludG8gdGhlIFN3YXAgQ2FjaGUgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgZGVmaW5pdGVseSBjYWxsaW5nIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBUaGF0IG11Y2ggaXMgY2xlYXIgZnJvbSB0aGUgY29kZS4gQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgKndoYXQqIGlzIGNhbGxpbmcgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggaW4gcmV2ZXJzZSBoZXJlLiBJJiMzOTttIGFmdGVyIHRoZSBpbml0aWF0aW5nIGZ1bmN0aW9uIG9yIGZ1bmN0aW9ucywgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIGZvbGlvIGFsbG9jYXRpb24gZm9yIHN3YXAgY2FjaGUgZW50cmllcyBpcyBiZWluZyAqcmVxdWVzdGVkKi4gS25vd2luZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGdpdmUgbWUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uLCBhbmQgd2hlcmUgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIG9yIGJvdHRsZW5lY2tzIG1pZ2h0IGxpZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGRpcmVjdCB1c2VyIHBhZ2UgZmF1bHRzLCBpcyBpdCBwYXJ0IG9mIGEgYmFja2dyb3VuZCBzd2FwLWluIHByb2Nlc3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzdGFydCB0cmFjaW5nIHRob3NlIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTMxND12b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vc3dhcC5oOjMxNTpzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbm1tL3N3YXAuaC0zMTYtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDE0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MDItLyoqXG5tbS9zd2FwX3N0YXRlLmM6NTAzOiAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTUwNC0gKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MTgtICovXG5tbS9zd2FwX3N0YXRlLmM6NTE5OnN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG5tbS9zd2FwX3N0YXRlLmMtNTIwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTY0Nz1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY1Ni1cdFx0XHRyZXR1cm4gZm9saW87XG5tbS9zd2FwX3N0YXRlLmM6NjU3Olx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xubW0vc3dhcF9zdGF0ZS5jLTY1OC1cdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuLS1cbm1tL3N3YXBfc3RhdGUuYz02ODg9c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNjk3LVx0XHRcdHJldHVybiBmb2xpbztcbm1tL3N3YXBfc3RhdGUuYzo2OTg6XHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy02OTktXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE4MzA9dm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTE4NzItICogICAgIC4uLlx0XHRcdFx0c3dhcG9mZiYjNDM7c3dhcG9uXG5tbS9zd2FwZmlsZS5jOjE4NzM6ICogICAgIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oKVxubW0vc3dhcGZpbGUuYy0xODc0LSAqICAgICAgIC8vIGNoZWNrIHN3YXBfbWFwXG4tLVxubW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwMDMtXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xubW0venN3YXAuYzoxMDA0Olx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG5tbS96c3dhcC5jLTEwMDUtXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY5NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIFN3YXAgQ2FjaGUgQWxsb2NhdGlvbiBhbmQgSGliZXJuYXRpb24qKgoKT2theSwgc28gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHdpZGVyIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIHBvdGVudGlhbCBzY29wZSBhbmQgZXh0ZXJuYWwgdXNlLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgdHJhY2luZyBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cy4gVGhlbiB0aGUgb2J2aW91cyBxdWVzdGlvbiBwb3BzIGludG8gbXkgaGVhZCwgd2hhdCBhYm91dCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgPyBJcyBpdCBzdGF0aWMsIGFuZCBpZiBub3QsIGRvZXMgaXRzIG5vbi1zdGF0aWMgc3RhdHVzIGNyZWF0ZSBhbnkgc2ltaWxhciBwb2ludHMgZm9yIGNvbnNpZGVyYXRpb24/IEkgbmVlZCB0byBhbmFseXplIGhvdyBib3RoIGZ1bmN0aW9ucywgYW5kIHRoZWlyIHJlc3BlY3RpdmUgdmlzaWJpbGl0eSwgYXJlIGRlc2lnbmVkIGFuZCBzdHJ1Y3R1cmVkIHJlbGF0aXZlIHRvIGVhY2ggb3RoZXIuIEkgd29uZGVyIGFib3V0IHRoZSBtb3RpdmF0aW9ucyBiZWhpbmQgdGhlc2UgZGVzaWduIGRlY2lzaW9ucywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBvdGhlciBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXJjaGl0ZWN0dXJlPyBJIG5lZWQgdG8gbG9vayBpbnRvIHRoaXMgbW9yZSBkZWVwbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTQwOD1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpO1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NDA5OnZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtNDEwLVxuLS1cbmtlcm5lbC9wb3dlci9zd2FwLmM9MTY5PXNlY3Rvcl90IGFsbG9jX3N3YXBkZXZfYmxvY2soaW50IHN3YXApXG4tLVxua2VybmVsL3Bvd2VyL3N3YXAuYy0xNzktXHRcdGlmIChzd3N1c3BfZXh0ZW50c19pbnNlcnQob2Zmc2V0KSlcbmtlcm5lbC9wb3dlci9zd2FwLmM6MTgwOlx0XHRcdHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeShzd2FwLCBvZmZzZXQpKTtcbmtlcm5lbC9wb3dlci9zd2FwLmMtMTgxLVx0XHRlbHNlXG4tLVxua2VybmVsL3Bvd2VyL3N3YXAuYz0xODc9dm9pZCBmcmVlX2FsbF9zd2FwX3BhZ2VzKGludCBzd2FwKVxuLS1cbmtlcm5lbC9wb3dlci9zd2FwLmMtMjAyLVx0XHRmb3IgKG9mZnNldCA9IGV4dC1cdTAwM2VzdGFydDsgb2Zmc2V0IFx1MDAzYz0gZXh0LVx1MDAzZWVuZDsgb2Zmc2V0JiM0MzsmIzQzOylcbmtlcm5lbC9wb3dlci9zd2FwLmM6MjAzOlx0XHRcdHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeShzd2FwLCBvZmZzZXQpKTtcbmtlcm5lbC9wb3dlci9zd2FwLmMtMjA0LVxuLS1cbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yMTkzLS8qKlxubW0vc3dhcGZpbGUuYzoyMTk0OiAqIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KCkgLSBGcmVlIGEgc3dhcCBzbG90IGFsbG9jYXRlZCBmb3IgaGliZXJuYXRpb24uXG5tbS9zd2FwZmlsZS5jLTIxOTUtICogQGVudHJ5OiBzd2FwIGVudHJ5IHRvIGZyZWUuXG4tLVxubW0vc3dhcGZpbGUuYy0yMTk4LSAqL1xubW0vc3dhcGZpbGUuYzoyMTk5OnZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXG5tbS9zd2FwZmlsZS5jLTIyMDAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzcwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIaWJlcm5hdGlvbiBhbmQgU3dhcCBDYWNoZSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIHBhdGNoIGltcGFjdHMgdGhlIGtlcm5lbCYjMzk7cyBzd2FwIGFuZCBoaWJlcm5hdGlvbiBtZWNoYW5pc21zLiBJdCBsb29rcyBsaWtlIGBrZXJuZWwvcG93ZXIvc3dhcC5jYCBpcyB0aGUgY29yZSBvZiBoaWJlcm5hdGlvbiBmdW5jdGlvbmFsaXR5LCB1c2luZyBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YC4gSGliZXJuYXRpb24sIG9mIGNvdXJzZSwgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19ISUJFUk5BVElPTmAuIEkga25vdyBTeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgdGVzdGluZyB0aGlzIHRocm91Z2ggdGhpbmdzIGxpa2UgYC9kZXYvc25hcHNob3RgLCB3aGljaCBpcyBwcm9taXNpbmcuCgpIb3dldmVyLCB0aGUgaW1wbGljYXRpb25zIGdvIGJleW9uZCBqdXN0IGhpYmVybmF0aW9uLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIG9uIHRoZSBzdGFuZGFyZCBzd2FwIG9wZXJhdGlvbnMgYXMgd2VsbC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBpcyBiZWluZyBtb2RpZmllZC4gVGhlIGNydXggb2YgdGhlIGNoYW5nZSBsaWVzIGluIGhvdyBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgaGFuZGxlcyBoaWJlcm5hdGlvbiBzbG90cywgYW5kIGhvdyBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2Agbm93IGluY29ycG9yYXRlcyBhIGNoZWNrIHVzaW5nIGAhc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpYC4KCkkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4gQmVmb3JlLCBpdCB3YXMgY2hlY2tpbmcgaWYgdGhlIGBvbGRfdGJgIHdhcyBhIGZvbGlvIG9yIGhhZCBhIGNvdW50LiBBZnRlcndhcmQsIGl0IGluY2x1ZGVzIHRoaXMgbmV3IGNvbmRpdGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBsb2dpYyBub3cgY2hlY2tzIGlmIHRoZSBzd2FwIHRhYmxlIGVudHJ5IGlzICpub3QqIGEgc2hhZG93IGVudHJ5LCBvciBkb2VzICpub3QqIGhhdmUgYSBjb3VudCwgcmV0dXJuaW5nIGAtRU5PRU5UYC4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhpcyBpcyBiZWNhdXNlIGNsdXN0ZXIgcmVhZGFoZWFkIG1pZ2h0IGhpdCBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLgoKU28gdGhlIG1haW4gZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAsIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YC4gQWx0aG91Z2ggYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAgaXNuJiMzOTt0IGRpcmVjdGx5IG1vZGlmaWVkLCBpdCYjMzk7cyBvYnZpb3VzbHkgcmVsYXRlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBjb250ZXh0LCBpbiBgbW0vc3dhcGZpbGUuY2AuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHN3YXAgY2FjaGluZyBhbmQgaGliZXJuYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmg9NDA1PWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwNy0vKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NDA4OnN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00MDktdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XG4tLVxua2VybmVsL3Bvd2VyL3N3YXAuYz0xNjk9c2VjdG9yX3QgYWxsb2Nfc3dhcGRldl9ibG9jayhpbnQgc3dhcClcbi0tXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE3Ni1cdCAqL1xua2VybmVsL3Bvd2VyL3N3YXAuYzoxNzc6XHRvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChzd2FwKSk7XG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE3OC1cdGlmIChvZmZzZXQpIHtcbi0tXG5tbS9zd2FwZmlsZS5jPTIxMjQ9dm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjE0OS0vKipcbm1tL3N3YXBmaWxlLmM6MjE1MDogKiBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoKSAtIEFsbG9jYXRlIGEgc3dhcCBzbG90IGZvciBoaWJlcm5hdGlvbi5cbm1tL3N3YXBmaWxlLmMtMjE1MS0gKiBAdHlwZTogc3dhcCBkZXZpY2UgdHlwZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLlxuLS1cbm1tL3N3YXBmaWxlLmMtMjE1OC0gKi9cbm1tL3N3YXBmaWxlLmM6MjE1OTpzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXG5tbS9zd2FwZmlsZS5jLTIxNjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzIxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqVHJhY2luZyBIaWJlcm5hdGlvbiBSZWFjaGFiaWxpdHkqKgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgdGhlIGBrZXJuZWwvcG93ZXIvc3dhcC5jYCBmaWxlIGlzIGFjdHVhbGx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIHRvdWNoZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgaW52ZXN0aWdhdGluZyB0aGUgcG93ZXIgbWFuYWdlbWVudCBhc3BlY3RzIG9mIHRoZSBrZXJuZWwuIFNpbmNlIHN3YXAgaXMgb2Z0ZW4gaW52b2x2ZWQgd2l0aCBoaWJlcm5hdGlvbiwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIGhpYmVybmF0aW9uLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIGBDT05GSUdfSElCRVJOQVRJT05gIGFuZCBgQ09ORklHX1NXQVBgIGFyZSBlbmFibGVkLCBhcyB0aGF0IHdpbGwgYmUgdGhlIGRldGVybWluaW5nIGZhY3RvcnMgb2YgdGhlIGluY2x1c2lvbiBvZiBgc3dhcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhJQkVSTkFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9LY29uZmlnPTM1PWNvbmZpZyBISUJFUk5BVEVfQ0FMTEJBQ0tTXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMzctXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozODpjb25maWcgSElCRVJOQVRJT05cbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtIaWJlcm5hdGlvbiAoYWthICYjMzk7c3VzcGVuZCB0byBkaXNrJiMzOTspXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctODMtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzo4NDpjb25maWcgSElCRVJOQVRJT05fU05BUFNIT1RfREVWXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIHNuYXBzaG90IGRldmljZVwmIzM0O1xuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnPTk2PWNob2ljZVxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjEwMTpjb25maWcgSElCRVJOQVRJT05fQ09NUF9MWk9cbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMTA0LVxua2VybmVsL3Bvd2VyL0tjb25maWc6MTA1OmNvbmZpZyBISUJFUk5BVElPTl9DT01QX0xaNFxua2VybmVsL3Bvd2VyL0tjb25maWctMTA2LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0xMDk9ZW5kY2hvaWNlXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTAtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMTE6Y29uZmlnIEhJQkVSTkFUSU9OX0RFRl9DT01QXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTItXHRzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzNwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBqdXN0IHRoZSBiZWdpbm5pbmcgb2YgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbjoKCioqQ2hlY2tpbmcgYENPTkZJR19TV0FQYCoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIHZlcmlmeWluZyB0aGUgc3RhdHVzIG9mIGBDT05GSUdfU1dBUGAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2V0dGluZywgYW5kIEkgbmVlZCB0byBrbm93IGlmIHN3YXAgc3BhY2UgaXMgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBUaGlzIHRlbGxzIG1lIGEgbG90IGFib3V0IGhvdyB0aGUgc3lzdGVtIGlzIGludGVuZGVkIHRvIGhhbmRsZSBtZW1vcnkgcHJlc3N1cmUuIElmIGl0JiMzOTtzIGRpc2FibGVkLCB0aGUgZGVzaWduIGFuZCBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGUgc3lzdGVtIHdpbGwgYmVoYXZlIGR1cmluZyBtZW1vcnkgc3RyZXNzIHdpbGwgYmUgcmFkaWNhbGx5IGRpZmZlcmVudC4gS25vd2luZyB0aGlzIGJhc2VsaW5lIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGFsbCBzdWJzZXF1ZW50IGZpbmRpbmdzIGFuZCBvYnNlcnZhdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgc3dhcCBpcyBhY3RpdmUgb3Igbm90LiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9taXBzL0tjb25maWc9MTI2Mz1jb25maWcgTUlQU19TUFJBTVxuLS1cbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXG5hcmNoL21pcHMvS2NvbmZpZzoxMjY2OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY3LVx0Ym9vbFxuLS1cbmFyY2gvc2gvS2NvbmZpZz0xMjY9Y29uZmlnIElPX1RSQVBQRURcbi0tXG5hcmNoL3NoL0tjb25maWctMTI4LVxuYXJjaC9zaC9LY29uZmlnOjEyOTpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9zaC9LY29uZmlnLTEzMC1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3dhcCBhbmQgSGliZXJuYXRpb24gQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBgU1dBUGAgYW5kIGBISUJFUk5BVElPTmAgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlLCBzdGFydGluZyB3aXRoOiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAsIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YC4gVGhlc2UgYXJlIGxpa2VseSBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBwb2ludHMgb2YgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHN3YXAgYW5kIGhpYmVybmF0aW9uIHN1YnN5c3RlbXMuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBmdW5jdGlvbnMgaGVyZS4gSSBzZWUgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCBidXQgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGl0IC0gdW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiBmcm9tIGFuIGV4dGVybmFsIHBlcnNwZWN0aXZlIGlzIHZpdGFsIGhlcmUgZm9yIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9ODg0PXN0YXRpYyBib29sIGNsdXN0ZXJfc2Nhbl9yYW5nZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy05MTAtXG5tbS9zd2FwZmlsZS5jOjkxMTpzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtOTEyLVx0XHRcdFx0XHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwZmlsZS5jPTk2ND1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTk5NC1cdFx0fVxubW0vc3dhcGZpbGUuYzo5OTU6XHRcdGlmICghX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzaSwgY2ksIGZvbGlvLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSKSlcbm1tL3N3YXBmaWxlLmMtOTk2LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE1MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXJgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXJgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4gVGhpcyBpcyBzaWduaWZpY2FudDsgaXQgbWVhbnMgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24gaXMgbGltaXRlZCwgYW5kIGl0JiMzOTtzIG5vdCB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCByZXN0cmljdGlvbiBpbW1lZGlhdGVseSByYWlzZXMgdGhlIHF1ZXN0aW9uOiAqd2hhdCogaXMgY2FsbGluZyB0aGlzIHRoaW5nPyBXaGVyZSBpcyBpdCBiZWluZyB1c2VkPyBTaW5jZSBJIGNhbiYjMzk7dCBjYWxsIGl0IGRpcmVjdGx5IGZyb20gYW55d2hlcmUsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZSBhcmUgbWFraW5nIHVzZSBvZiB0aGlzIHJlc291cmNlIGFsbG9jYXRpb24gZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHN3YXAgbWFuYWdlbWVudCBzeXN0ZW0uIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9OTExPXN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtOTYzLS8qIFRyeSB1c2UgYSBuZXcgY2x1c3RlciBmb3IgY3VycmVudCBDUFUgYW5kIGFsbG9jYXRlIGZyb20gaXQuICovXG5tbS9zd2FwZmlsZS5jOjk2NDpzdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtOTY1LVx0XHRcdFx0XHQgICAgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwZmlsZS5jPTEwMTU9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fbGlzdChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xMDI4LVx0XHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xubW0vc3dhcGZpbGUuYzoxMDI5Olx0XHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XG5tbS9zd2FwZmlsZS5jLTEwMzAtXHRcdGlmIChmb3VuZClcbi0tXG5tbS9zd2FwZmlsZS5jPTEwOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTExMjMtXHRcdFx0XHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xubW0vc3dhcGZpbGUuYzoxMTI0Olx0XHRcdGZvdW5kID0gYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBmb2xpbywgb2Zmc2V0KTtcbm1tL3N3YXBmaWxlLmMtMTEyNS1cdFx0fSBlbHNlIHtcbi0tXG5tbS9zd2FwZmlsZS5jPTEzNjc9c3RhdGljIGJvb2wgc3dhcF9hbGxvY19mYXN0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0xMzg2LVx0XHRcdG9mZnNldCA9IGNsdXN0ZXJfb2Zmc2V0KHNpLCBjaSk7XG5tbS9zd2FwZmlsZS5jOjEzODc6XHRcdGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XG5tbS9zd2FwZmlsZS5jLTEzODgtXHR9IGVsc2Uge1xuLS1cbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yMTc4LVx0XHRpZiAoY2x1c3Rlcl9pc191c2FibGUoY2ksIDApKVxubW0vc3dhcGZpbGUuYzoyMTc5Olx0XHRcdG9mZnNldCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgTlVMTCwgcGNwX29mZnNldCk7XG5tbS9zd2FwZmlsZS5jLTIxODAtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFN3YXAgQWxsb2NhdGlvbiBQYXRocyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtZW50YWwgbWFwIG9mIHN3YXAgYWxsb2NhdGlvbiBpcyB0cmlnZ2VyZWQuIEkgc2VlIHRoYXQgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAsIGEgY3JpdGljYWwgZnVuY3Rpb24gZHVyaW5nIHN5c3RlbSBoaWJlcm5hdGlvbiwgaXMgYSBkaXJlY3QgY2FsbGVyIG9mIGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAuIFRoaXMgbWFrZXMgc2Vuc2UsIGFzIGEgaGliZXJuYXRpb24gc3dhcCBhbGxvY2F0aW9uIG5lZWRzIHRvIGJlIGV4dHJlbWVseSByZWxpYWJsZSBhbmQgbGlrZWx5IHBlcmZvcm1zIGEgZnVsbCBzY2FuIHRvIGZpbmQgdGhlIGJlc3QgcG9zc2libGUgY2x1c3Rlci4gRnVydGhlciwgYHN3YXBfYWxsb2NfZmFzdGAgYWxzbyB1c2VzIGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAuIFRoaXMgaW1wbGllcyBhIG1vcmUgcGVyZm9ybWFuY2Utb3JpZW50ZWQgYWxsb2NhdGlvbiBwYXRoIGFsc28gc29tZXRpbWVzIHJldmVydHMgdG8gYSB0aG9yb3VnaCBzZWFyY2gsIHBlcmhhcHMgd2hlbiBoZXVyaXN0aWNzIGZhaWwsIG9yIHdoZW4gb3RoZXIgY29uZGl0aW9ucyBhcmVuJiMzOTt0IG1ldC4KCk5vdywgbXkgY3VyaW9zaXR5IGlzIHBpcXVlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBzd2FwX2FsbG9jX2Zhc3RgIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3dhcCBhbGxvY2F0aW9uIHN1YnN5c3RlbS4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgcG9pbnRzIHRvIGBzd2FwX2FsbG9jX2Zhc3RgPyBJZGVudGlmeWluZyB0aGVzZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB3aGVuIHRoZSBmYXN0IHBhdGggaXMgdHJpZ2dlcmVkIGFuZCB3aGF0IHNjZW5hcmlvcyByZXF1aXJlIGEgbW9yZSByb2J1c3QsIGFsYmVpdCBzbG93ZXIsIHNjYW4gdXNpbmcgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiB3aWxsIGlsbHVtaW5hdGUgaG93IHRoaXMgZW50aXJlIGFsbG9jYXRpb24gc3lzdGVtIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9hbGxvY19mYXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MTM0Nz1zdGF0aWMgYm9vbCBnZXRfc3dhcF9kZXZpY2VfaW5mbyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4tLVxubW0vc3dhcGZpbGUuYy0xMzY2LSAqL1xubW0vc3dhcGZpbGUuYzoxMzY3OnN0YXRpYyBib29sIHN3YXBfYWxsb2NfZmFzdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vc3dhcGZpbGUuYy0xMzY4LXtcbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NjctXHRsb2NhbF9sb2NrKFx1MDAyNnBlcmNwdV9zd2FwX2NsdXN0ZXIubG9jayk7XG5tbS9zd2FwZmlsZS5jOjE3Njg6XHRpZiAoIXN3YXBfYWxsb2NfZmFzdChmb2xpbykpXG5tbS9zd2FwZmlsZS5jLTE3NjktXHRcdHN3YXBfYWxsb2Nfc2xvdyhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQ0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdDoKCioqRm9jdXNpbmcgb24gU3dhcCBBbGxvY2F0aW9uKioKCkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHN3YXAgYWxsb2NhdGlvbi4gSSBzZWUgdGhhdCBgZm9saW9fYWxsb2Nfc3dhcGAgZGlyZWN0bHkgY2FsbHMgYHN3YXBfYWxsb2NfZmFzdGAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLiBJdCBtZWFucyB0aGF0IGBmb2xpb19hbGxvY19zd2FwYCBpcyB0aGUgaGlnaC1sZXZlbCBlbnRyeSBwb2ludCB3aGVyZSB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBkZWNpZGVkLiBJdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gQnkgdW5kZXJzdGFuZGluZyBob3cgYGZvbGlvX2FsbG9jX3N3YXBgIHdvcmtzIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIGBzd2FwX2FsbG9jX2Zhc3RgLCBJJiMzOTtsbCBwcm9iYWJseSBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJJiMzOTttIGN1cmlvdXMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBpbmZvcm1hdGlvbiB0aGUgZnVuY3Rpb24gaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MjQ4PXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbm1tL3N3YXAuaC0yNTAtLyogRm9yIGludGVybmFsIHVzZSAqL1xubW0vc3dhcC5oOjI1MTpleHRlcm4gdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcC5oLTI1Mi1cdFx0XHRcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MjYyPXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMjk3LVx0aWYgKCFmb2xpb19zd2FwcGVkKSB7XG5tbS9zd2FwX3N0YXRlLmM6Mjk4Olx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9zdGFydCwgbnJfcGFnZXMpO1xubW0vc3dhcF9zdGF0ZS5jLTI5OS1cdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwMi1cdFx0XHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcbm1tL3N3YXBfc3RhdGUuYzozMDM6XHRcdFx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xubW0vc3dhcF9zdGF0ZS5jLTMwNC1cdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MjItXHRcdGlmIChjaV9iYXRjaCAhPSAtMSkge1xubW0vc3dhcGZpbGUuYzoxNjIzOlx0XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XG5tbS9zd2FwZmlsZS5jLTE2MjQtXHRcdFx0Y2lfYmF0Y2ggPSAtMTtcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MjgtXHRpZiAoY2lfYmF0Y2ggIT0gLTEpXG5tbS9zd2FwZmlsZS5jOjE2Mjk6XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XG5tbS9zd2FwZmlsZS5jLTE2MzAtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE4ODQ9c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwZmlsZS5jLTE5MTQtICovXG5tbS9zd2FwZmlsZS5jOjE5MTU6dm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0xOTE2LVx0XHRcdFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcGZpbGUuYz0yMTk5PXZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0yMjA1LVx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTtcbm1tL3N3YXBmaWxlLmM6MjIwNjpcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpO1xubW0vc3dhcGZpbGUuYy0yMjA3LVx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBTd2FwIENsdXN0ZXIgRnJlZSBFbnRyaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IG1lbnRhbCBtYXAgb2YgdGhlIHN3YXAgc3lzdGVtIGlzIGJlaW5nIHBva2VkIGhlcmUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXM6IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAsIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLiBUaGF0IG1ha2VzIGludHVpdGl2ZSBzZW5zZTsgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBmcmVlaW5nIHVwIHNwYWNlIGluIHRoZSBzd2FwIGNhY2hlLCBhbmQgdGhlc2UgYXJlIGFsbCByZWxhdGVkIGFjdGl2aXRpZXMgLSBlaXRoZXIgcmVtb3ZpbmcgZW50cmllcyBkaXJlY3RseSwgcHV0dGluZyBuZXcgb25lcywgb3IgZnJlZWluZyB0aGUgc2xvdCBkdXJpbmcgaGliZXJuYXRpb24uCgpCdXQgbm93IG15IGF0dGVudGlvbiBpcyBjYXVnaHQgYnkgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdoaWxlIEkga25vdyAqd2hhdCogYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgKmRvZXMqLCB1bmRlcnN0YW5kaW5nIHdoZXJlIGFuZCB3aHkgd2UgKnB1dCogZW50cmllcyBpbnRvIHRoZXNlIGNsdXN0ZXJzIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgc3dhcCBvcGVyYXRpb25zLCBwYXJ0aWN1bGFybHkgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyYCB0byBpdHMgY2FsbGVycy4gS25vd2luZyB0aGF0IGNvbnRleHQgZ2l2ZXMgbWUgYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2h5IGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGlzIGNhbGxlZC4gSXQmIzM5O2xsIGdpdmUgbWUgY2x1ZXMgdG8gd2hlcmUgdGhlIHJlYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgZXhpc3QuIElzIHRoaXMgb3BlcmF0aW9uIGJlaW5nIHRyaWdnZXJlZCB0b28gb2Z0ZW4/IERvZXMgdGhlIGNhbGxlciBjb250cmlidXRlIHRvIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zPyBLbm93aW5nIHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB3aWxsIHByb3ZpZGUgdGhlIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfcHV0X2VudHJpZXNfY2x1c3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE1Mzc9c3RhdGljIHZvaWQgX19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNTc1LS8qKlxubW0vc3dhcGZpbGUuYzoxNTc2OiAqIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlciAtIERlY3JlYXNlIHRoZSBzd2FwIGNvdW50IG9mIHNsb3RzIHdpdGhpbiBvbmUgY2x1c3RlclxubW0vc3dhcGZpbGUuYy0xNTc3LSAqIEBzaTogVGhlIHN3YXAgZGV2aWNlLlxuLS1cbm1tL3N3YXBmaWxlLmMtMTU4Ny0gKi9cbm1tL3N3YXBmaWxlLmM6MTU4ODpzdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0xNTg5LVx0XHRcdFx0ICAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yLFxuLS1cbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTg0My1cbm1tL3N3YXBmaWxlLmM6MTg0NDpcdHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzaSwgc3dwX29mZnNldChlbnRyeSksIG5yX3BhZ2VzLCBmYWxzZSk7XG5tbS9zd2FwZmlsZS5jLTE4NDUtfVxuLS1cbm1tL3N3YXBmaWxlLmM9MjEyND12b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG4tLVxubW0vc3dhcGZpbGUuYy0yMTQwLVx0XHRjbHVzdGVyX2VuZCA9IG1pbihyb3VuZF91cChvZmZzZXQgJiM0MzsgMSwgU1dBUEZJTEVfQ0xVU1RFUiksIGVuZF9vZmZzZXQpO1xubW0vc3dhcGZpbGUuYzoyMTQxOlx0XHRzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc2ksIG9mZnNldCwgY2x1c3Rlcl9lbmQgLSBvZmZzZXQsIHRydWUpO1xubW0vc3dhcGZpbGUuYy0yMTQyLVx0XHRvZmZzZXQgPSBjbHVzdGVyX2VuZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIHRoZSBTd2FwIEVudHJ5IEZ1bmN0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBzd2FwIGVudHJ5IGJ1c2luZXNzLiBJdCBsb29rcyBsaWtlIGBmb2xpb19wdXRfc3dhcGAgYW5kIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCBzaW5jZSB0aGV5IGJvdGggY2FsbCBgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBjbGVhciBpbmRpY2F0b3IgdGhhdCBgZm9saW9fcHV0X3N3YXBgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3MgdGhlIGhpZ2hlc3QtbGV2ZWwgZW50cnkgcG9pbnQsIHNvIHVuZGVyc3RhbmRpbmcgKml0KiB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIHByb2Nlc3MuCgpCdXQsIEkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZXJlIGFyZSBzb21lIGtleSB0aGluZ3MgaGFwcGVuaW5nIGluICp0aGF0KiBmdW5jdGlvbiB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBqdXN0IGZyb20gbG9va2luZyBhdCBgZm9saW9fcHV0X3N3YXBgLiBHb3R0YSBiZSB0aG9yb3VnaC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM9OTI9dm9pZCBnbWFwX2hlbHBlcl96YXBfb25lX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxuLS1cbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYy0xMTItXHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM6MTEzOlx0XHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzbCwgMSk7XG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTE0LVx0XHRwdGVfY2xlYXIobW0sIHZtYWRkciwgcHRlcCk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9Mzk4PWludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzk5OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00MDAtXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDQyPXN0YXRpYyBpbmxpbmUgaW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDQ2LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDQ3OnN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnQsIGludCBucilcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ0OC17XG4tLVxubW0vbWFkdmlzZS5jPTY1Mz1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21hZHZpc2UuYy02OTYtXHRcdFx0XHRucl9zd2FwIC09IG5yO1xubW0vbWFkdmlzZS5jOjY5NzpcdFx0XHRcdHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KGVudHJ5LCBucik7XG5tbS9tYWR2aXNlLmMtNjk4LVx0XHRcdFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yKTtcbi0tXG5tbS9tZW1vcnkuYz0xODY2PXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODk5LVx0XHRyc3NbTU1fU1dBUEVOVFNdIC09IG5yO1xubW0vbWVtb3J5LmM6MTkwMDpcdFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QoZW50cnksIG5yKTtcbm1tL21lbW9yeS5jLTE5MDEtXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbi0tXG5tbS9zaG1lbS5jPTk3NT1zdGF0aWMgbG9uZyBzaG1lbV9mcmVlX3N3YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vc2htZW0uYy05OTUtXHRpZiAobnJfcGFnZXMpXG5tbS9zaG1lbS5jOjk5NjpcdFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QocmFkaXhfdG9fc3dwX2VudHJ5KHJhZHN3YXApLCBucl9wYWdlcyk7XG5tbS9zaG1lbS5jLTk5Ny1cbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE4MDAtICogTk9URTogVGhlIGNhbGxlciBhbHNvIGhhcyB0byBlbnN1cmUgdGhlcmUgaXMgbm8gcmFjZWQgY2FsbCB0b1xubW0vc3dhcGZpbGUuYzoxODAxOiAqIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0IG9uIGl0cyBzd2FwIGVudHJ5IGJlZm9yZSB0aGlzIGhlbHBlciByZXR1cm5zLCBvclxubW0vc3dhcGZpbGUuYy0xODAyLSAqIHRoZSBzd2FwIGNvdW50IG1heSB1bmRlcmZsb3cuXG4tLVxubW0vc3dhcGZpbGUuYz0xOTk4PWludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMjAyNS0gKiBvbmx5IGJlIGRvbmUgYnkgZm9saW9fZHVwX3N3YXAsIHdoaWNoIGFsc28gbG9ja3MgdGhlIGZvbGlvLiBCdXQgYSBjb25jdXJyZW50XG5tbS9zd2FwZmlsZS5jOjIwMjY6ICogZGVjcmVhc2Ugb2Ygc3dhcCBjb3VudCBpcyBwb3NzaWJsZSB0aHJvdWdoIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0LCBzbyB0aGlzXG5tbS9zd2FwZmlsZS5jLTIwMjctICogbWF5IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlLlxuLS1cbm1tL3N3YXBmaWxlLmM9MjA5OT1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjExMS0vKipcbm1tL3N3YXBmaWxlLmM6MjExMjogKiBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCgpIC0gUmVsZWFzZSByZWZlcmVuY2Ugb24gcmFuZ2Ugb2Ygc3dhcCBlbnRyaWVzIGFuZFxubW0vc3dhcGZpbGUuYy0yMTEzLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNsYWltIHRoZWlyIGNhY2hlIGlmIG5vIG1vcmUgcmVmZXJlbmNlcyByZW1haW4uXG4tLVxubW0vc3dhcGZpbGUuYy0yMTIzLSAqL1xubW0vc3dhcGZpbGUuYzoyMTI0OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcbm1tL3N3YXBmaWxlLmMtMjEyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTgwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkZvY3VzaW5nIG9uIFN3YXAgRW50cnkgTWFuYWdlbWVudCoqCgpSaWdodCwgc28gYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBwb3BzIHVwIGluIGEgZmV3IGtleSBwbGFjZXM6IGB6YXBfbm9ucHJlc2VudF9wdGVzYCwgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBhbmQgYHNobWVtX2ZyZWVfc3dhcGAuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgZnVuZGFtZW50YWwgdG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBzd2FwIGVudHJpZXMuIFNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGNvbmNlbnRyYXRlIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGRpcmVjdCByZWxlYXNlIG9mIHRob3NlIGVudHJpZXMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgKnB1dHRpbmcqIHRob3NlIGVudHJpZXMuCgpHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayBpdCYjMzk7cyB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCB0byBzZWUgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgd2UgYXJlIGdvaW5nIHRvIHBlcmZvcm0gYXQgdGhhdCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9MjUyPXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0yNjEtXG5tbS9zd2FwX3N0YXRlLmM6MjYyOnN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXBfc3RhdGUuYy0yNjMtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz0zMjE9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMyNS1cbm1tL3N3YXBfc3RhdGUuYzozMjY6XHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG5tbS9zd2FwX3N0YXRlLmMtMzI3LVx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDE0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy00NjktXHRcdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0NzA6XHRcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbm1tL3N3YXBfc3RhdGUuYy00NzEtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNpLVx1MDAzZWxvY2spO1xuLS1cbm1tL3N3YXBfc3RhdGUuYy00ODAtXHRcdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0ODE6XHRcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbm1tL3N3YXBfc3RhdGUuYy00ODItXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNpLVx1MDAzZWxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI5MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTd2FwIENhY2hlIERlbGV0aW9uKioKClJpZ2h0LCBzbyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgYSBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBpdHMgcHVycG9zZT8gR2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIGludm9sdmVkIGluIGRlbGV0aW5nIGVudHJpZXMgZnJvbSB0aGUgc3dhcCBjYWNoZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcGFnZS1vdXQgb3BlcmF0aW9ucy4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzICppbml0aWF0aW5nKiB0aGlzIGRlbGV0aW9uPyBUaGUgY29kZSBzdHJ1Y3R1cmUgc2F5cyB0aGF0IGl0IGNhbGxzIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBpbnRlcm5hbCBvcGVyYXRpb24gd2l0aGluIHRoZSBzd2FwIGNhY2hlIG1hbmFnZW1lbnQuCgpUaGUgbW9yZSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBpczogKndobyogb3IgKndoYXQqIGlzIGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gPyBJcyBpdCB0aGUgcGFnZSByZWNsYWltIG1lY2hhbmlzbT8gSXMgaXQgYSBiYWNrZ3JvdW5kIHByb2Nlc3M/IElzIGl0IHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBtZW1vcnkgbWFuYWdlbWVudD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIHdpbGwgcmV2ZWFsIHRoZSB0cmlnZ2VyIGZvciB0aGVzZSBkZWxldGlvbnMsIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gSXQmIzM5O3MgdGhlIGVzc2VudGlhbCBuZXh0IHN0ZXAgaW4gdHJhY2luZyB0aGUgY2FsbCBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMC1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjItXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuLS1cbm1tL3N3YXAuaD00NTE9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcC5oLTQ1NC1cbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NTYtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI2Mj1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwOC0vKipcbm1tL3N3YXBfc3RhdGUuYzozMDk6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMxMC0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjAtICovXG5tbS9zd2FwX3N0YXRlLmM6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcF9zdGF0ZS5jLTMyMi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzM0LSAqXG5tbS9zd2FwX3N0YXRlLmM6MzM1OiAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTM0MT12b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTM0Ni1cdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5tbS9zd2FwX3N0YXRlLmM6MzQ3Olx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTtcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MTgtXHRcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxubW0vc3dhcGZpbGUuYzoxNjE5Olx0XHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXG5tbS9zd2FwZmlsZS5jLTE2MjAtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTY4Mj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzM4LVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG5tbS92bXNjYW4uYzo3Mzk6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xubW0vdm1zY2FuLmMtNzQwLVx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgYW5kIEhpYmVybmF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIGRpcmVjdGx5IGNhbGxlZCBieSBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AuIEkgc2hvdWxkIGFsc28gZXhhbWluZSBgX19zd2FwX3RhYmxlX2dldGAgYW5kIGBfX3N3YXBfdGFibGVfc2V0YCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMuCgpGcm9tIHRoZSBwYXRjaCwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBUaGlzIHBvaW50cyBtZSB0b3dhcmRzIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4gVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHNlZW0gdG8gYmU6CgoqICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gCiogICBgZm9saW9fYWxsb2Nfc3dhcGAKKiAgIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAKKiAgIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AKKiAgIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAKKiAgIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgCgpXYWl0IGEgbWludXRlLCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhcmUgc3BlY2lmaWNhbGx5IGxpbmtlZCB0byBoaWJlcm5hdGlvbiEgVGhhdCB0cmlnZ2VycyBhIG1lbnRhbCBub3RlOiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaHVuY2ggaXMgY29uZmlybWVkOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYFNXUF9UQl9ISUJgIGFuZCBtb2RpZmllcyBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBpbXBseWluZyB0aGF0IGBDT05GSUdfSElCRVJOQVRJT05gIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFNpbmNlIHRoaXMgaXMgYWxsIHN3YXAtcmVsYXRlZCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBgQ09ORklHX1NXQVBgIGlzIGFsc28gYSBkZXBlbmRlbmN5LiBMZXQgbWUgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuCgpPa2F5LCBjaGVja2luZyBgbW0vS2NvbmZpZ2AgZm9yIGBTV0FQYCBjb25maXJtcyBgQ09ORklHX1NXQVBgIGFzIHRoZSBuYW1lLiBTaW1pbGFybHksIGNoZWNraW5nIGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AgZm9yIGBISUJFUk5BVElPTmAgY29uZmlybXMgdGhhdCBgQ09ORklHX0hJQkVSTkFUSU9OYCBpcyB0aGUgY29ycmVjdCBuYW1lLiBUaGF0IGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5IHRyZWU6IEJvdGggU1dBUCBhbmQgSElCRVJOQVRJT04gYXJlIHJlcXVpcmVkIGZvciB0aGlzIHBhdGNoLgoKSSYjMzk7bGwgcmV2aWV3IHRoZSBjb2RlIGNoYW5nZXMgaW4gYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgIGFuZCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYC4gSW4gYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCBJIHNlZSBhIHNwZWNpYWwgY2FzZTogd2hlbiBgZm9saW9gIGlzIE5VTEwsIGFuIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIHNwZWNpZmljYWxseSBmb3IgaGliZXJuYXRpb24uIFRoaXMgYWxzbyBjb25maXJtcyBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhcyBhIGNydWNpYWwgZnVuY3Rpb24gdGhhdCBuZWVkcyBhIGNsb3NlciBsb29rLgoKVGhlbiwgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgaGFuZGxlcyB0aGUgYFNXUF9UQl9ISUJgIGZsYWcsIHdoaWNoIGlzIHVzZWQgZm9yIGhpYmVybmF0aW9uLgoKRmluYWxseSwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBpcyBhbHNvIGltcG9ydGFudCwgYXMgaXQgaGFuZGxlcyB0aGUgZnJlZWluZyBvZiBoaWJlcm5hdGlvbiBzbG90cy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiBhIHZhbGlkYXRpb24gY2hlY2sgYW5kIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3Mgbm90IGJlaW5nIG1pcy11c2VkLiBJdCYjMzk7cyBjYWxsZWQgYnkgYF9fc3dhcF9jYWNoZV9hbGxvY2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSYjMzk7bGwgYWxzbyBhZGQgYF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvYCB0byB0aGUgZm9jdXMgbGlzdCBhcyBpdCBjYWxscyBgX19zd2FwX2NhY2hlX2FsbG9jYC4KClRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmU6CgoqICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIChhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY2AgYW5kIGBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpb2ApCiogICBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgCiogICBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM5MjU9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMjgtXHRcdFx0aWYgKGNpKSB7XG5tbS9odWdlX21lbW9yeS5jOjQwMjk6XHRcdFx0XHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgZm9saW8sIG5ld19mb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTQwMzAtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vbWlncmF0ZS5jLTY1Ni1cdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG5tbS9taWdyYXRlLmM6NjU3Olx0XHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgZm9saW8sIG5ld2ZvbGlvKTtcbm1tL21pZ3JhdGUuYy02NTgtXHRlbHNlXG4tLVxubW0vc2htZW0uYz0yMDg5PXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcbi0tXG5tbS9zaG1lbS5jLTIxMjYtXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2tfaXJxKG9sZCk7XG5tbS9zaG1lbS5jOjIxMjc6XHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgb2xkLCBuZXcpO1xubW0vc2htZW0uYy0yMTI4LVx0bWVtX2Nncm91cF9yZXBsYWNlX2ZvbGlvKG9sZCwgbmV3KTtcbi0tXG5tbS9zd2FwLmg9MzIxPXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMi1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7XG5tbS9zd2FwLmg6MzIzOnZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjQtXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xuLS1cbm1tL3N3YXAuaD00NTU9c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwLmgtNDU5LVxubW0vc3dhcC5oOjQ2MDpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NjEtXHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzQxPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzUzLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjM1NDogKiBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyAtIFJlcGxhY2UgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy0zNTUtICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzY2LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjM2Nzp2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwX3N0YXRlLmMtMzY4LVx0XHRcdFx0c3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM0OQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgU3dhcCBhbmQgSGliZXJuYXRpb24gQVBJIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIHN3YXAgYW5kIGhpYmVybmF0aW9uIEFQSXMuIEl0IGxvb2tzIGxpa2UgYF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvYCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgLCBgX19mb2xpb19taWdyYXRlX21hcHBpbmdgLCBhbmQgYHNobWVtX3JlcGxhY2VfZm9saW9gLiBUaG9zZSBhcmUgYWxsIGludGVyZXN0aW5nIGNvbnRleHRzLgoKTGV0IG1lIGp1c3Qgc3VtbWFyaXplIHRoZSBjdXJyZW50IGZvY3VzOgoqICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gCiogICBgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW9gCiogICBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YAoqICAgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YAoKSG1tLCBhcmUgd2UgbWlzc2luZyBhbnl0aGluZz8gTGV0JiMzOTtzIHNlZS4uLiBBaCwgd2hhdCBhYm91dCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYD8gVGhhdCYjMzk7cyBjYWxsZWQgYnkgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyYC4gQW5kIGBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXJgIGlzIHRoZW4gY2FsbGVkIGJ5IGBmb2xpb19wdXRfc3dhcGAgYW5kIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAuIFRoYXQgbWFrZXMgYGZvbGlvX3B1dF9zd2FwYCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCB3b3J0aCBjb25zaWRlcmluZy4gQW5kIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBjYWxsZWQgYnkgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fcmVtb3ZlX21hcHBpbmdgLCBzbyBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVmaW5lIHRoaXMgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLiBNeSB1cGRhdGVkIGZvY3VzIHN5bWJvbHMgYXJlOgoKKiAgIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYAoqICAgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAKKiAgIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAKKiAgIGBmb2xpb19wdXRfc3dhcGAKKiAgIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAKKiAgIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AKClRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc2V0IG9mIGVudHJ5IHBvaW50cyB0aGF0IGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZC4KCkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgbmFtZXMuIFllcywgYEhJQkVSTkFUSU9OYCBhbmQgYFNXQVBgLCBzbyBpdCBsb29rcyBjb3JyZWN0IHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlnIG5hbWUuIE5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayBpZiB0aGUgYFNXQVBgIGNvbmZpZyBkZXBlbmRzIG9uIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL21pcHMvS2NvbmZpZz0xMjYzPWNvbmZpZyBNSVBTX1NQUkFNXG4tLVxuYXJjaC9taXBzL0tjb25maWctMTI2NS1cbmFyY2gvbWlwcy9LY29uZmlnOjEyNjY6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXHRib29sXG4tLVxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxuLS1cbmFyY2gvc2gvS2NvbmZpZy0xMjgtXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL3NoL0tjb25maWctMTMwLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBTV0FQIERlcGVuZGVuY2llcyBpbiBtbS9LY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgU1dBUGAgZmVhdHVyZSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB3aGVyZSBJIGFsd2F5cyBzdGFydCB3aGVuIGRlYWxpbmcgd2l0aCBLY29uZmlnLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYFNXQVBgIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCwgb3IgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBgU1dBUGAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3dhcCBhbmQgSGliZXJuYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBzd2FwIGZ1bmN0aW9uYWxpdHkgaXMgc2V0IHVwIGluIHRoaXMgc3lzdGVtLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgU1dBUGAgaGluZ2VzIG9uIGEgZmV3IGtleSBwcmVyZXF1aXNpdGVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGRlcGVuZCBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIGBNTVVgIChNZW1vcnkgTWFuYWdlbWVudCBVbml0KSBhbmQgYEJMT0NLYCBmZWF0dXJlcywgYnV0IGNydWNpYWxseSwgaXQgKm11c3Qgbm90KiBpbmNsdWRlIGBBUkNIX05PX1NXQVBgLiBgQkxPQ0tgIGlzIHByZXR0eSBtdWNoIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiwgc28gdGhhdCYjMzk7cyBwcm9iYWJseSBub3Qgd2hlcmUgYW55IGlzc3VlIGxpZXMuIEp1c3QgdG8gYmUgc3VyZSBvZiB0aGUgd2hvbGUgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBISUJFUk5BVElPTmAgbm93LCBhbmQgSSYjMzk7bGwgZmluZCB0aGF0IGluIGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgcmVxdWlyZW1lbnRzIGZvciBoaWJlcm5hdGlvbiBpbnRlcmFjdCB3aXRoIHRoZXNlIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJIHRoaW5rIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUsIHNvIGxldCYjMzk7cyBjb250aW51ZSB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzg6XHRjb25maWcgSElCRVJOQVRJT05cbiAgMzk6XHRcdGJvb2wgXCYjMzQ7SGliZXJuYXRpb24gKGFrYSAmIzM5O3N1c3BlbmQgdG8gZGlzayYjMzk7KVwmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBTV0FQIFx1MDAyNlx1MDAyNiBBUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFXG4gIDQxOlx0XHRzZWxlY3QgSElCRVJOQVRFX0NBTExCQUNLU1xuICA0MjpcdFx0c2VsZWN0IENSQzMyXG4gIDQzOlx0XHRzZWxlY3QgQ1JZUFRPXG4gIDQ0Olx0XHRzZWxlY3QgQ1JZUFRPX0xaT1xuICA0NTpcdFx0c2VsZWN0IENSWVBUT19MWjRcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgRW5hYmxlIHRoZSBzdXNwZW5kIHRvIGRpc2sgKFNURCkgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgdXN1YWxseVxuICA0ODpcdFx0ICBjYWxsZWQgXCYjMzQ7aGliZXJuYXRpb25cJiMzNDsgaW4gdXNlciBpbnRlcmZhY2VzLiAgU1REIGNoZWNrcG9pbnRzIHRoZVxuICA0OTpcdFx0ICBzeXN0ZW0gYW5kIHBvd2VycyBpdCBvZmY7IGFuZCByZXN0b3JlcyB0aGF0IGNoZWNrcG9pbnQgb24gcmVib290LlxuICA1MDpcdFxuICA1MTpcdFx0ICBZb3UgY2FuIHN1c3BlbmQgeW91ciBtYWNoaW5lIHdpdGggJiMzOTtlY2hvIGRpc2sgXHUwMDNlIC9zeXMvcG93ZXIvc3RhdGUmIzM5O1xuICA1MjpcdFx0ICBhZnRlciBwbGFjaW5nIHJlc3VtZT0vZGV2L3N3YXBwYXJ0aXRpb24gb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmVcbiAgNTM6XHRcdCAgaW4geW91ciBib290bG9hZGVyJiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgNTQ6XHRcbiAgNTU6XHRcdCAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGFkZGl0aW9uYWwgdXNlcmxhbmQgdG9vbHMgYXZhaWxhYmxlXG4gIDU2Olx0XHQgIGZyb20gXHUwMDNjaHR0cDovL3N1c3BlbmQuc2YubmV0XHUwMDNlLlxuICA1NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzMgoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA2MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSGliZXJuYXRpb24gTG9naWMgYW5kIFN3YXAgQ2FjaGUgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYXMgZXhwZWN0ZWQsIGhpYmVybmF0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgY29udGluZ2VudCBvbiBib3RoIGBTV0FQYCBhbmQgYEhJQkVSTkFUSU9OYCBiZWluZyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIHBhdGNoLgoKSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gaG93IGl0IGhhbmRsZXMgZXhpc3Rpbmcgc3dhcCB0YWJsZSBlbnRyaWVzLiBUaGUgY3JpdGljYWwgcGFydCBpcyBjaGVja2luZyBmb3Igc2hhZG93IGVudHJpZXMgbm93IChgIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKWApLCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGZvciBoaWJlcm5hdGlvbi4gVGhlIGFpbSBpcyB0byBwcmV2ZW50IGhpYmVybmF0aW9uIHNsb3RzIGZyb20gbWlzdGFrZW5seSBnZXR0aW5nIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgZm9yIHRoZSBoaWJlcm5hdGlvbiBzbG90IChgU1dQX1RCX0hJQmApLiBJdCBhbHNvIG1vZGlmaWVzIGhvdyBoaWJlcm5hdGlvbiBzbG90cyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYGZvbGlvX3B1dF9zd2FwYCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cy4KCkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gRm9ydHVuYXRlbHksIGFmdGVyIGEgcXVpY2sgY2hlY2ssIGl0JiMzOTtzIGNsZWFyIHRoYXQgYGZvbGlvX3B1dF9zd2FwYCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgYXJlIGFsbCBub24tc3RhdGljLCBpbmRpY2F0aW5nIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGF0aW9uIHVuaXRzLiBUaGlzIGlzIGFzIEkgZXhwZWN0LiBUaGUgY2hhbmdlIGxvb2tzIHNvbGlkIGFuZCB3aWxsIHdvcmsgYXMgaW50ZW5kZWQgd2l0aCBzd2FwIG9wZXJhdGlvbnMgYW5kIGhpYmVybmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtISUJFUk5BVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O2ZvbGlvX3B1dF9zd2FwJiMzNDssCiAgICAmIzM0O3N3YXBfcHV0X2VudHJpZXNfZGlyZWN0JiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtISUJFUk5BVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O2ZvbGlvX3B1dF9zd2FwJiMzNDssCiAgICAmIzM0O3N3YXBfcHV0X2VudHJpZXNfZGlyZWN0JiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzd2FwIHNsb3QgbWFuYWdlbWVudCB0byBleHBsaWNpdGx5IHRyYWNrIGhpYmVybmF0aW9uIHNsb3RzIHVzaW5nIGEgbmV3IGZsYWcgKFNXUF9UQl9ISUIpIGFuZCBwcmV2ZW50cyB0aGVtIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIHN3YXAgc3RhdGUgdHJhY2tpbmcgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBhcmlzaW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOGRhODY3MGU4OTU0MWI2M2U0YmU0ODRlNWE0MjEzMzUyNzM3OTk3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTM6NTA6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggYjc2ZWIzZDg3NmZkNy4uNjM0MWYxYmZmZmEyMyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMTgxLDkgJiM0MzsxODEsMTQgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJb2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTsKIAlpZiAoc3dwX3RiX2lzX2ZvbGlvKG9sZF90YikpCiAJCXJldHVybiAtRUVYSVNUOwotCWlmICghX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpCiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuCiYjNDM7CSAqIENsdXN0ZXIgcmVhZGFoZWFkIHdhbGtzIHJhdyBvZmZzZXQgcmFuZ2VzLCBzbyBpdCBjYW4gbGFuZCBvbgomIzQzOwkgKiBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoc2hhZG93cCAmYW1wOyZhbXA7IHN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSkKJiM0MzsJaWYgKHNoYWRvd3ApCiAJCSpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpOwogCWlmIChtZW1jZ19pZCkKIAkJKm1lbWNnX2lkID0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZik7CkBAIC0xOTYsNyAmIzQzOzIwMSw3IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCWNpX2VuZCA9IGNpX29mZiAmIzQzOyBucjsKIAlkbyB7CiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7Ci0JCWlmICh1bmxpa2VseShzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fAomIzQzOwkJaWYgKHVubGlrZWx5KCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwKIAkJCSAgICAgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIHx8CiAJCQkgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fAogCQkJICAgICAobWVtY2dfaWQgJmFtcDsmYW1wOyAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSkKZGlmZiAtLWdpdCBhL21tL3N3YXBfdGFibGUuaCBiL21tL3N3YXBfdGFibGUuaAppbmRleCBlNjYxM2U2MmY4ZDBmLi5iOTE2YTY0OTM1MjFhIDEwMDY0NAotLS0gYS9tbS9zd2FwX3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF90YWJsZS5oCkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7CiAgKiBQRk46ICAgICAgfFNXQVBfQ09VTlR8WnwtLS0tLS0gUEZOIC0tLS0tLS18MTB8IC0gQ2FjaGVkIHNsb3QKICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKQogICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90CiYjNDM7ICogSGliZXJuOiAgIHwgICAgMCAgICAgfC0tLS0tLS0gMSAtLS0tLS0tfDEwMDAwfCAtIEhpYmVybmF0aW9uIHNsb3QKICAqCiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsCiAgKiBhbmQgdG9nZXRoZXIgdGhleSBmb3JtIHRoZSBgU1dQX1RCX0ZMQUdTX0JJVFNgIHdpZGUgZmxhZ3MgZmllbGQuCkBAIC01NCw2ICYjNDM7NTUsMTAgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUgewogICogICBhbGlnbmVkIHBvaW50ZXJzLgogICoKICAqIC0gQmFkOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQsIHByb3RlY3RzIHN3YXAgaGVhZGVyIG9yIGhvbGVzIG9uIHN3YXAgZGV2aWNlcy4KJiM0MzsgKgomIzQzOyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmQKJiM0MzsgKiAgIG11c3QgbmV2ZXIgZW50ZXIgdGhlIHN3YXAgY2FjaGUuIFRoZSBjb3VudCBmaWVsZCBpcyBrZXB0IDAgc28gaXQgbmV2ZXIKJiM0MzsgKiAgIHJlYWRzIGFzIGEgc2xvdCBpbiB1c2UuCiAgKi8KIAogLyogTlVMTCBFbnRyeSwgYWxsIDAgKi8KQEAgLTgxLDYgJiM0Mzs4Niw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHsKIC8qIEJhZCBzbG90OiBlbmRzIHdpdGggMGIxMDAwIGFuZCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqLwogI2RlZmluZSBTV1BfVEJfQkFECQkoKH4wVUwpICZsdDsmbHQ7IDMpCiAKJiM0MzsvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCwgbm8gY291bnQsIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovCiYjNDM7I2RlZmluZSBTV1BfVEJfSElCCQkoKCh+MFVMKSAmbHQ7Jmx0OyA0KSAmYW1wOyB+U1dQX1RCX0NPVU5UX01BU0spCiYjNDM7CiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqLwogI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUCVNXUF9UQl9GTEFHU19CSVRTCiAKQEAgLTE2Niw2ICYjNDM7MTc0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKQogCXJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpCiB7CiAJcmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHwKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGRlYTJkM2IzNmUwNmYuLjRmYmExNzcwY2U2MTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtOTI4LDcgJiM0Mzs5MjgsNyBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkgKiB1cG9uIGZvbGlvIHVubWFwLgogCSAqCiAJICogRWxzZSwgaXQmIzM5O3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi4KLQkgKiBUaGUgc2xvdCBzdGFydHMgd2l0aCBjb3VudCA9PSAxIGFuZCBuZXZlciBpbmNyZWFzZXMuCiYjNDM7CSAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LgogCSAqLwogCWlmIChsaWtlbHkoZm9saW8pKSB7CiAJCW9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwpAQCAtOTQwLDggJiM0Mzs5NDAsOCBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJb3JkZXIgPSAwOwogCQlucl9wYWdlcyA9IDE7CiAJCXN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX29mZiwgMSwgZmFsc2UpOwotCQkvKiBGYWtlIHNoYWRvdyBwbGFjZWhvbGRlciB3aXRoIG5vIGZsYWcsIGhpYmVybmF0aW9uIGRvZXMgbm90IHVzZSB0aGUgemVyb21hcCAqLwotCQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIF9fc3dwX3RiX21rX2NvdW50KHNoYWRvd190b19zd3BfdGIoTlVMTCwgMCksIDEpKTsKJiM0MzsJCS8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovCiYjNDM7CQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIFNXUF9UQl9ISUIpOwogCX0gZWxzZSB7CiAJCS8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi8KIAkJV0FSTl9PTl9PTkNFKDEpOwpAQCAtMTkyOSw5ICYjNDM7MTkyOSwxMSBAQCB2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiAJCS8qCiAJCSAqIEZyZWVpbmcgaXMgZG9uZSBhZnRlciByZWxlYXNlIG9mIHRoZSBsYXN0IHN3YXAgY291bnQKLQkJICogcmVmLCBvciBhZnRlciBzd2FwIGNhY2hlIGlzIGRyb3BwZWQKJiM0MzsJCSAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3QKJiM0MzsJCSAqIGhhcyBubyBjb3VudCBhbmQgaXMgZnJlZWQgZGlyZWN0bHkgYnkgaXRzIG93bmVyLgogCQkgKi8KLQkJVk1fV0FSTl9PTighc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpICZndDsgMSk7CiYjNDM7CQlWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgJmd0OyAxKSk7CiAKIAkJLyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi8KIAkJX19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTsKQEAgLTIyMDEsMTIgJiM0MzsyMjAzLDggQEAgdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSkKIAlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTsKLQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpOwogCV9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwotCi0JLyogSW4gdGhlb3J5IHJlYWRhaGVhZCBtaWdodCBhZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYnkgYWNjaWRlbnQgKi8KLQlfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpOwogfQogCiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODg0CgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhpYmVybmF0aW9uIFN3YXAgU2xvdCBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBzd2FwIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBfdGFibGUuaGAsIGFuZCBgbW0vc3dhcGZpbGUuY2AuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIG1lbW9yeSBzYWZldHksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoYXQgZmlyc3QuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgU1dQX1RCX0hJQmAsIGEgbmV3IHN3YXAgdGFibGUgZW50cnkgdHlwZSBleHBsaWNpdGx5IGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIGNvbmNlcHR1YWxseSwgc2VncmVnYXRpbmcgdGhlc2Ugc2xvdHMgZnJvbSB0aGUgcmVndWxhciBzd2FwIGVudHJpZXMuCgpNeSBtYWluIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2VzIHRvIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCwgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCwgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGV4cGxpY2l0bHkgcHJldmVudGluZyBoaWJlcm5hdGlvbiBzbG90cyBmcm9tIGV2ZXIgaGl0dGluZyB0aGUgc3dhcCBjYWNoZS4gIEV4Y2VsbGVudCwgYmVjYXVzZSB0aGV5IGRvbiYjMzk7dCBoYXZlIGEgY291bnQgYW5kIHNob3VsZCBub3QgYmUgdHJlYXRlZCB0aGUgc2FtZSB3YXkuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBsaWtlbHkgYWxsb3dpbmcgaGliZXJuYXRpb24gc2xvdHMgdG8gYmUgYWNjaWRlbnRhbGx5IGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZSwgd2hpY2ggd291bGQgY2F1c2Ugc2V2ZXJlIGlzc3VlcyBsYXRlciwgcHJvYmFibHkgdXNlLWFmdGVyLWZyZWUsIG9yIGNvcnJ1cHRlZCBwYWdlIHN0YXRlLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN3YXAgY2FjaGUgb3BlcmF0ZXMgYW5kIHdoYXQgaGliZXJuYXRpb24gaXMgdHJ5aW5nIHRvIGRvLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgKm5vdCogaW50cm9kdWNpbmcgYW55IG5ldyBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3RzIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoaXMgaXMgcHVyZWx5IGFib3V0IGZpeGluZyBhIHNwZWNpZmljIHN3YXAgY2FjaGUgcmVhZGFoZWFkIGJ1ZyBhbmQgc2VncmVnYXRpbmcgaGliZXJuYXRpb24gc2xvdHMgY29ycmVjdGx5LgoKU2luY2UgdGhpcyBwYXRjaCBpcyBhYm91dCBmaXhpbmcgYSBzd2FwIGNhY2hlIGJ1ZyBhbmQgbm90IGEgbmV3IG1lbW9yeSBhbGxvY2F0aW9uLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBsaWtlIEtBU0FOLCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC1zY29wZWQgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzd2FwIHNsb3QgbWFuYWdlbWVudCB0byBleHBsaWNpdGx5IHRyYWNrIGhpYmVybmF0aW9uIHNsb3RzIHVzaW5nIGEgbmV3IGZsYWcgKFNXUF9UQl9ISUIpIGFuZCBwcmV2ZW50cyB0aGVtIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIHN3YXAgc3RhdGUgdHJhY2tpbmcgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBhcmlzaW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBzbG90IG1hbmFnZW1lbnQgdG8gZXhwbGljaXRseSB0cmFjayBoaWJlcm5hdGlvbiBzbG90cyB1c2luZyBhIG5ldyBmbGFnIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGFjY2lkZW50YWxseSBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZSBkdXJpbmcgY2x1c3RlciByZWFkYWhlYWQuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBzd2FwIHN0YXRlIHRyYWNraW5nIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgYXJpc2luZyBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTA6MzUuNzk5MjQ2MTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMDIzMzEyODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIkhJQkVSTkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwiZm9saW9fcHV0X3N3YXBcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBzbG90IG1hbmFnZW1lbnQgdG8gZXhwbGljaXRseSB0cmFjayBoaWJlcm5hdGlvbiBzbG90cyB1c2luZyBhIG5ldyBmbGFnIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGFjY2lkZW50YWxseSBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZSBkdXJpbmcgY2x1c3RlciByZWFkYWhlYWQuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBzd2FwIHN0YXRlIHRyYWNraW5nIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgYXJpc2luZyBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBsb2dpYyB0byBpbnRyb2R1Y2UgYSBuZXcgaGliZXJuYXRpb24gc2xvdCBzdGF0ZSAoU1dQX1RCX0hJQikgYW5kIHByZXZlbnRzIGhpYmVybmF0aW9uIHNsb3RzIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gSXQgYWxzbyBjaGFuZ2VzIGhvdyBoaWJlcm5hdGlvbiBzbG90cyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZCwgYnlwYXNzaW5nIHRoZSBub3JtYWwgc3dhcCBjYWNoZSByZWZlcmVuY2UgY291bnRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwL2hpYmVybmF0aW9uIGxvZ2ljLCByZWFjaGFibGUgdmlhIHN3YXAgb3BlcmF0aW9ucyBhbmQgaGliZXJuYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUwOjM1Ljc5OTI1Mjg3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MTQzODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZThkYTg2NzBlODk1NDFiNjNlNGJlNDg0ZTVhNDIxMzM1MjczNzk5N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMzo1MDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li42MzQxZjFiZmZmYTIzIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0xODEsOSArMTgxLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbiBcXHRpZiAoc3dwX3RiX2lzX2ZvbGlvKG9sZF90YikpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbi1cXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxcbitcXHQvKlxcbitcXHQgKiBPbmx5IGEgc3dhcHBlZC1vdXQgc2xvdCBtYXkgYmUgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlLlxcbitcXHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cXG4rXFx0ICogc2xvdHMgdGhhdCBhcmUgZnJlZSwgYmFkLCBvciBvd25lZCBieSBoaWJlcm5hdGlvbi5cXG4rXFx0ICovXFxuK1xcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLVxcdGlmIChzaGFkb3dwIFxcdTAwMjZcXHUwMDI2IHN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSlcXG4rXFx0aWYgKHNoYWRvd3ApXFxuIFxcdFxcdCpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpO1xcbiBcXHRpZiAobWVtY2dfaWQpXFxuIFxcdFxcdCptZW1jZ19pZCA9IF9fc3dhcF9jZ3JvdXBfZ2V0KGNpLCBjaV9vZmYpO1xcbkBAIC0xOTYsNyArMjAxLDcgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdGNpX2VuZCA9IGNpX29mZiArIG5yO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XFxuLVxcdFxcdGlmICh1bmxpa2VseShzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fFxcbitcXHRcXHRpZiAodW5saWtlbHkoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fFxcbiBcXHRcXHRcXHQgICAgICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSB8fFxcbiBcXHRcXHRcXHQgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fFxcbiBcXHRcXHRcXHQgICAgIChtZW1jZ19pZCBcXHUwMDI2XFx1MDAyNiAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSlcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oXFxuaW5kZXggZTY2MTNlNjJmOGQwZi4uYjkxNmE2NDkzNTIxYSAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcXG4rKysgYi9tbS9zd2FwX3RhYmxlLmhcXG5AQCAtMzAsNiArMzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XFxuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxcbiAgKiBQb2ludGVyOiAgfC0tLS0tLS0tLS0tIFBvaW50ZXIgLS0tLS0tLS0tLXwxMDB8IC0gKFVudXNlZClcXG4gICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90XFxuKyAqIEhpYmVybjogICB8ICAgIDAgICAgIHwtLS0tLS0tIDEgLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XFxuICAqXFxuICAqIENPVU5UIGlzIGBTV1BfVEJfQ09VTlRfQklUU2AgbG9uZywgWiBpcyB0aGUgYFNXUF9UQl9aRVJPX0ZMQUdgIGJpdCxcXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxcbkBAIC01NCw2ICs1NSwxMCBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XFxuICAqICAgYWxpZ25lZCBwb2ludGVycy5cXG4gICpcXG4gICogLSBCYWQ6IFN3YXAgc2xvdCBpcyByZXNlcnZlZCwgcHJvdGVjdHMgc3dhcCBoZWFkZXIgb3IgaG9sZXMgb24gc3dhcCBkZXZpY2VzLlxcbisgKlxcbisgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kXFxuKyAqICAgbXVzdCBuZXZlciBlbnRlciB0aGUgc3dhcCBjYWNoZS4gVGhlIGNvdW50IGZpZWxkIGlzIGtlcHQgMCBzbyBpdCBuZXZlclxcbisgKiAgIHJlYWRzIGFzIGEgc2xvdCBpbiB1c2UuXFxuICAqL1xcbiBcXG4gLyogTlVMTCBFbnRyeSwgYWxsIDAgKi9cXG5AQCAtODEsNiArODYsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XFxuIC8qIEJhZCBzbG90OiBlbmRzIHdpdGggMGIxMDAwIGFuZCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqL1xcbiAjZGVmaW5lIFNXUF9UQl9CQURcXHRcXHQoKH4wVUwpIFxcdTAwM2NcXHUwMDNjIDMpXFxuIFxcbisvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCwgbm8gY291bnQsIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXFxuKyNkZWZpbmUgU1dQX1RCX0hJQlxcdFxcdCgoKH4wVUwpIFxcdTAwM2NcXHUwMDNjIDQpIFxcdTAwMjYgflNXUF9UQl9DT1VOVF9NQVNLKVxcbitcXG4gLyogTWFjcm8gZm9yIHNoYWRvdyBvZmZzZXQgY2FsY3VsYXRpb24gKi9cXG4gI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUXFx0U1dQX1RCX0ZMQUdTX0JJVFNcXG4gXFxuQEAgLTE2Niw2ICsxNzQsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19iYWQodW5zaWduZWQgbG9uZyBzd3BfdGIpXFxuIFxcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19oaWJlcm5hdGlvbih1bnNpZ25lZCBsb25nIHN3cF90YilcXG4re1xcbitcXHRyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfY291bnRhYmxlKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxcbiB7XFxuIFxcdHJldHVybiAoc3dwX3RiX2lzX3NoYWRvdyhzd3BfdGIpIHx8IHN3cF90Yl9pc19mb2xpbyhzd3BfdGIpIHx8XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC05MjgsNyArOTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdCAqIHVwb24gZm9saW8gdW5tYXAuXFxuIFxcdCAqXFxuIFxcdCAqIEVsc2UsIGl0J3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi5cXG4tXFx0ICogVGhlIHNsb3Qgc3RhcnRzIHdpdGggY291bnQgPT0gMSBhbmQgbmV2ZXIgaW5jcmVhc2VzLlxcbitcXHQgKiBUaGUgc2xvdCBjYXJyaWVzIG5vIHN3YXAgY291bnQgYW5kIGlzIGZyZWVkIGJ5IG9mZnNldC5cXG4gXFx0ICovXFxuIFxcdGlmIChsaWtlbHkoZm9saW8pKSB7XFxuIFxcdFxcdG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbkBAIC05NDAsOCArOTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdFxcdG9yZGVyID0gMDtcXG4gXFx0XFx0bnJfcGFnZXMgPSAxO1xcbiBcXHRcXHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcXG4tXFx0XFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cXG4tXFx0XFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XFxuK1xcdFxcdC8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovXFxuK1xcdFxcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbkBAIC0xOTI5LDkgKzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XFxuLVxcdFxcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXFxuK1xcdFxcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3RcXG4rXFx0XFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXFx1MDAzZSAxKTtcXG4rXFx0XFx0Vk1fV0FSTl9PTighc3dwX3RiX2lzX2hpYmVybmF0aW9uKG9sZF90YikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXFx1MDAzZSAxKSk7XFxuIFxcbiBcXHRcXHQvKiBSZXNldHRpbmcgdGhlIHNsb3QgdG8gTlVMTCBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGZsYWdzLiAqL1xcbiBcXHRcXHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xcbkBAIC0yMjAxLDEyICsyMjAzLDggQEAgdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSlcXG4gXFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XFxuLVxcdF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUik7XFxuIFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tXFxuLVxcdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXFxuLVxcdF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzaSwgb2Zmc2V0LCBUVFJTX0FOWVdBWSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19maW5kX2hpYmVybmF0aW9uX3N3YXBfdHlwZShkZXZfdCBkZXZpY2UsIHNlY3Rvcl90IG9mZnNldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTA6MzYuMjU2MDk2NjEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM5NzczOTAxNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIkhJQkVSTkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwiZm9saW9fcHV0X3N3YXBcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZThkYTg2NzBlODk1NDFiNjNlNGJlNDg0ZTVhNDIxMzM1MjczNzk5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDEzOjUwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li42MzQxZjFiZmZmYTIzIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xODEsOSArMTgxLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuK1x0LypcbitcdCAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuXG4rXHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbitcdCAqIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXG4rXHQgKi9cbitcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuK1x0aWYgKHNoYWRvd3ApXG4gXHRcdCpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpO1xuIFx0aWYgKG1lbWNnX2lkKVxuIFx0XHQqbWVtY2dfaWQgPSBfX3N3YXBfY2dyb3VwX2dldChjaSwgY2lfb2ZmKTtcbkBAIC0xOTYsNyArMjAxLDcgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRjaV9lbmQgPSBjaV9vZmYgKyBucjtcbiBcdGRvIHtcbiBcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpIHx8XG4rXHRcdGlmICh1bmxpa2VseSghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8XG4gXHRcdFx0ICAgICAhX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgfHxcbiBcdFx0XHQgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fFxuIFx0XHRcdCAgICAgKG1lbWNnX2lkIFx1MDAyNlx1MDAyNiAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSlcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3RhYmxlLmggYi9tbS9zd2FwX3RhYmxlLmhcbmluZGV4IGU2NjEzZTYyZjhkMGYuLmI5MTZhNjQ5MzUyMWEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcbisrKyBiL21tL3N3YXBfdGFibGUuaFxuQEAgLTMwLDYgKzMwLDcgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxuICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKVxuICAqIEJhZDogICAgICB8LS0tLS0tLS0tLS0tLSAxIC0tLS0tLS0tLS0tLS18MTAwMHwgLSBCYWQgc2xvdFxuKyAqIEhpYmVybjogICB8ICAgIDAgICAgIHwtLS0tLS0tIDEgLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgKzU1LDEwIEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcbiAgKiAgIGFsaWduZWQgcG9pbnRlcnMuXG4gICpcbiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuXG4rICpcbisgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kXG4rICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLiBUaGUgY291bnQgZmllbGQgaXMga2VwdCAwIHNvIGl0IG5ldmVyXG4rICogICByZWFkcyBhcyBhIHNsb3QgaW4gdXNlLlxuICAqL1xuIFxuIC8qIE5VTEwgRW50cnksIGFsbCAwICovXG5AQCAtODEsNiArODYsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gLyogQmFkIHNsb3Q6IGVuZHMgd2l0aCAwYjEwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXG4gI2RlZmluZSBTV1BfVEJfQkFEXHRcdCgofjBVTCkgXHUwMDNjXHUwMDNjIDMpXG4gXG4rLyogSGliZXJuYXRpb24gc2xvdDogZW5kcyB3aXRoIDBiMTAwMDAsIG5vIGNvdW50LCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqL1xuKyNkZWZpbmUgU1dQX1RCX0hJQlx0XHQoKCh+MFVMKSBcdTAwM2NcdTAwM2MgNCkgXHUwMDI2IH5TV1BfVEJfQ09VTlRfTUFTSylcbitcbiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqL1xuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFx0U1dQX1RCX0ZMQUdTX0JJVFNcbiBcbkBAIC0xNjYsNiArMTc0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuIFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfQkFEO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2hpYmVybmF0aW9uKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuK3tcbitcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0hJQjtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpXG4ge1xuIFx0cmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC05MjgsNyArOTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxuIFx0ICpcbiBcdCAqIEVsc2UsIGl0J3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi5cbi1cdCAqIFRoZSBzbG90IHN0YXJ0cyB3aXRoIGNvdW50ID09IDEgYW5kIG5ldmVyIGluY3JlYXNlcy5cbitcdCAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KGZvbGlvKSkge1xuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbkBAIC05NDAsOCArOTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdG9yZGVyID0gMDtcbiBcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcbi1cdFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cbi1cdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XG4rXHRcdC8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovXG4rXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbkBAIC0xOTI5LDkgKzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuIFx0XHQvKlxuIFx0XHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XG4tXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXG4rXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3RcbitcdFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXG4gXHRcdCAqL1xuLVx0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpO1xuK1x0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCBfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSBcdTAwM2UgMSkpO1xuIFxuIFx0XHQvKiBSZXNldHRpbmcgdGhlIHNsb3QgdG8gTlVMTCBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGZsYWdzLiAqL1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xuQEAgLTIyMDEsMTIgKzIyMDMsOCBAQCB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG4tXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xuIFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi1cbi1cdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXG4tXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MDozNi4yNTYwOTgwNTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDQwNjkxNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBIaWJlcm5hdGlvbiBTd2FwIFNsb3QgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGluIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcF90YWJsZS5oYCwgYW5kIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IGZsYWcg4oCTIHRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIGFyZWFzLiBUaGlzIG1lYW5zIGl0IGhhcyBhIGhpZ2ggcG90ZW50aWFsIGZvciBpbXBhY3RpbmcgY3JpdGljYWwga2VybmVsIGJlaGF2aW9yLlxuXG5JdCBzZWVtcyB0aGUgcGF0Y2ggaXMgYWxsIGFib3V0IGhvdyBoaWJlcm5hdGlvbiBzd2FwIHNsb3RzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgc3dhcCBjYWNoZS4gU3BlY2lmaWNhbGx5LCBpdCdzIGludHJvZHVjaW5nIGEgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSBmb3IgdGhlc2Ugc2xvdHMuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AsIGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCwgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AsIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgaXMgYmVpbmcgdHdlYWtlZCB0byBwcmV2ZW50IGhpYmVybmF0aW9uIHNsb3RzIChzaGFkb3cgc2xvdHMpIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgaW4gdGhlIGZpcnN0IHBsYWNlLCBlbnN1cmluZyBvbmx5IGFjdHVhbGx5IHN3YXBwZWQtb3V0IHNsb3RzIGdldCBhZGRlZC4gSXQncyBoYW5kbGluZyB0aGUgc2V0dGluZyBhbmQgY2xlYXJpbmcgb2YgdGhpcyBuZXcgYFNXUF9UQl9ISUJgIHN0YXRlIGFuZCBmcmVlaW5nIGhpYmVybmF0aW9uIHNsb3RzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgZnV6emluZz8gU3dhcCBhbmQgaGliZXJuYXRpb24gYXJlIGJvdGggcG90ZW50aWFsbHkgcmVhY2hhYmxlLiBIYW5nIG9uLi4uIGhpYmVybmF0aW9uIG1pZ2h0IGJlIHByb2JsZW1hdGljIGRlcGVuZGluZyBvbiB0aGUgUUVNVSBzZXR1cCwgYnV0IHN3YXAgaXMgZGVmaW5pdGVseSB0aGVyZS4gTW9yZSBpbXBvcnRhbnRseSwgaXQgbG9va3MgbGlrZSBjaGFuZ2VzIHRvIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCBhZmZlY3Qgbm9ybWFsIHN3YXAgcmVhZGFoZWFkIG9wZXJhdGlvbnMsIGV2ZW4gaW4gdGhlIGNhc2Ugb2YgaGliZXJuYXRpb24uIFwiQ2x1c3RlciByZWFkYWhlYWQgd2Fsa3MgcmF3IG9mZnNldCByYW5nZXMsIHNvIGl0IGNhbiBsYW5kIG9uIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXCIgU28sIGV2ZW4gd2l0aG91dCBoaWJlcm5hdGlvbiBzdXBwb3J0LCBub3JtYWwgc3dhcCByZWFkYWhlYWQgaXMgZGVmaW5pdGVseSBhZmZlY3RlZCwgd2hpY2ggaXMgZ3JlYXQuXG5cblNvIG5vdywgbGV0J3MgZmluZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24uIEkndmUgZ290IHRvIGZvY3VzIG9uIHRoZSBjaGFuZ2VzIGluIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gSXQgaXMgc3RhdGljLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbGVycyBvZiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIEknbGwgZG8gYSBxdWljayBncmVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODg3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTA6NDQuNjk2ODA5MTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjQ3MzI2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NhY2hlX2FkZF9jaGVja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwX3N0YXRlLmM9MTM1PXZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0xNDYtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjE0NzogKiBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrIC0gQ2hlY2sgaWYgYSByYW5nZSBpcyBzdWl0YWJsZSBmb3IgYWRkaW5nIGEgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTE0OC0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMTYxLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzoxNjI6c3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcF9zdGF0ZS5jLTE2My1cXHRcXHRcXHRcXHQgIHN3cF9lbnRyeV90IHRhcmdfZW50cnksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDE0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQzMS1cXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG5tbS9zd2FwX3N0YXRlLmM6NDMyOlxcdGVyciA9IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soY2ksIHRhcmdfZW50cnksIG5yX3BhZ2VzLCBOVUxMLCBOVUxMKTtcXG5tbS9zd2FwX3N0YXRlLmMtNDMzLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNDU0LVxcdHNwaW5fbG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcbm1tL3N3YXBfc3RhdGUuYzo0NTU6XFx0ZXJyID0gX19zd2FwX2NhY2hlX2FkZF9jaGVjayhjaSwgdGFyZ19lbnRyeSwgbnJfcGFnZXMsIFxcdTAwMjZzaGFkb3csIFxcdTAwMjZtZW1jZ19pZCk7XFxubW0vc3dhcF9zdGF0ZS5jLTQ1Ni1cXHRpZiAodW5saWtlbHkoZXJyKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MDo0Ni44MjE1NzQ4NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY1ODcwNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgcmVmbGVjdGluZyBteSBleHBlcnQgdW5kZXJzdGFuZGluZzpcblxuKipTd2FwIENhY2hlIEFsbG9jYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgX19zd2FwX2NhY2hlX2FsbG9jYCBpcyBjYWxsaW5nIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIHBvdGVudGlhbGx5IGNyaXRpY2FsLCBpbnRlcm5hbCBvcGVyYXRpb24gd2l0aGluIHRoZSBzd2FwIGNhY2hpbmcgbWVjaGFuaXNtLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXM6IHdoYXQgYXJlIHRoZSAqZW50cnkgcG9pbnRzKiBmb3IgYF9fc3dhcF9jYWNoZV9hbGxvY2A/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGlzIHBhcmFtb3VudCB0byBncmFzcGluZyB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHN3YXAgY2FjaGUgbWFuYWdlbWVudC4gS25vd2luZyB0aGUgY29udGV4dHMgd2hlcmUgbWVtb3J5IGlzIGJlaW5nIHN3YXBwZWQsIGFkZGVkLCBvciByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGlzIGNlbnRyYWwgdG8gYW55IGRlZXAgZGl2ZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgX19zd2FwX2NhY2hlX2FsbG9jYCB0byB1bmRlcnN0YW5kIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgdHJpZ2dlcmluZyB0aGVzZSBhbGxvY2F0aW9uIGV2ZW50cy4gSSBuZWVkIHRvIGtub3cgdGhlIG9yaWdpbiBvZiB0aGF0IHN3YXAgY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MDo0OS45ODc0NDgxNTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MjM5NTI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2FjaGVfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTM2Nz12b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNDEzLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzo0MTQ6c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcF9zdGF0ZS5jLTQxNS1cXHRcXHRcXHRcXHRcXHRzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NTE5PXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTM0LVxcdGRvIHtcXG5tbS9zd2FwX3N0YXRlLmM6NTM1OlxcdFxcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcXG5tbS9zd2FwX3N0YXRlLmMtNTM2LVxcdFxcdFxcdFxcdFxcdCB2bWYsIG1wb2wsIGlseCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUwOjUxLjg3OTg0OTc4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDUzMjE2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaWdnaW5nIGludG8gdGhlIFN3YXAgQ2FjaGUgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpcyBkZWZpbml0ZWx5IGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9hbGxvY2AuIFRoYXQgbXVjaCBpcyBjbGVhciBmcm9tIHRoZSBjb2RlLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIGl0LCAqd2hhdCogaXMgY2FsbGluZyBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBpbiByZXZlcnNlIGhlcmUuIEknbSBhZnRlciB0aGUgaW5pdGlhdGluZyBmdW5jdGlvbiBvciBmdW5jdGlvbnMsIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBmb2xpbyBhbGxvY2F0aW9uIGZvciBzd2FwIGNhY2hlIGVudHJpZXMgaXMgYmVpbmcgKnJlcXVlc3RlZCouIEtub3dpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgY29udGV4dCBvZiB0aGUgYWxsb2NhdGlvbiwgYW5kIHdoZXJlIHBvdGVudGlhbCBpbmVmZmljaWVuY2llcyBvciBib3R0bGVuZWNrcyBtaWdodCBsaWUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIElzIGl0IHRyaWdnZXJlZCBieSBkaXJlY3QgdXNlciBwYWdlIGZhdWx0cywgaXMgaXQgcGFydCBvZiBhIGJhY2tncm91bmQgc3dhcC1pbiBwcm9jZXNzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgdHJhY2luZyB0aG9zZSBmdW5jdGlvbiBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY3MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUwOjU1LjAyNTE3MzQ0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY3MTE5MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxND12b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL3N3YXAuaDozMTU6c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vc3dhcC5oLTMxNi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz00MTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTAyLS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo1MDM6ICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTUwNC0gKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTUxOC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NTE5OnN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTUyMC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz02NDc9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTY1Ni1cXHRcXHRcXHRyZXR1cm4gZm9saW87XFxubW0vc3dhcF9zdGF0ZS5jOjY1NzpcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy02NTgtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9Njg4PXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjk3LVxcdFxcdFxcdHJldHVybiBmb2xpbztcXG5tbS9zd2FwX3N0YXRlLmM6Njk4OlxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG5tbS9zd2FwX3N0YXRlLmMtNjk5LVxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xODMwPXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE4NzItICogICAgIC4uLlxcdFxcdFxcdFxcdHN3YXBvZmYrc3dhcG9uXFxubW0vc3dhcGZpbGUuYzoxODczOiAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcXG5tbS9zd2FwZmlsZS5jLTE4NzQtICogICAgICAgLy8gY2hlY2sgc3dhcF9tYXBcXG4tLVxcbm1tL3pzd2FwLmM9OTg3PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwMDMtXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG5tbS96c3dhcC5jOjEwMDQ6XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxubW0venN3YXAuYy0xMDA1LVxcdFxcdFxcdFxcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTA6NTYuNjkyMzAyMTA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0ODg3ODc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29uc2lkZXJpbmcgU3dhcCBDYWNoZSBBbGxvY2F0aW9uIGFuZCBIaWJlcm5hdGlvbioqXG5cbk9rYXksIHNvIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpc24ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHdpZGVyIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIHBvdGVudGlhbCBzY29wZSBhbmQgZXh0ZXJuYWwgdXNlLCBJJ20gYWxyZWFkeSBtZW50YWxseSB0cmFjaW5nIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb21wb25lbnRzLiBUaGVuIHRoZSBvYnZpb3VzIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkLCB3aGF0IGFib3V0IGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGA/IElzIGl0IHN0YXRpYywgYW5kIGlmIG5vdCwgZG9lcyBpdHMgbm9uLXN0YXRpYyBzdGF0dXMgY3JlYXRlIGFueSBzaW1pbGFyIHBvaW50cyBmb3IgY29uc2lkZXJhdGlvbj8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGJvdGggZnVuY3Rpb25zLCBhbmQgdGhlaXIgcmVzcGVjdGl2ZSB2aXNpYmlsaXR5LCBhcmUgZGVzaWduZWQgYW5kIHN0cnVjdHVyZWQgcmVsYXRpdmUgdG8gZWFjaCBvdGhlci4gSSB3b25kZXIgYWJvdXQgdGhlIG1vdGl2YXRpb25zIGJlaGluZCB0aGVzZSBkZXNpZ24gZGVjaXNpb25zLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIG90aGVyIHN1YnN5c3RlbXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmNoaXRlY3R1cmU/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlIGRlZXBseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUwOjU5Ljk0MTE4NzI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MjMyNzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaD00MDg9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0MDk6dm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDEwLVxcbi0tXFxua2VybmVsL3Bvd2VyL3N3YXAuYz0xNjk9c2VjdG9yX3QgYWxsb2Nfc3dhcGRldl9ibG9jayhpbnQgc3dhcClcXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmMtMTc5LVxcdFxcdGlmIChzd3N1c3BfZXh0ZW50c19pbnNlcnQob2Zmc2V0KSlcXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjE4MDpcXHRcXHRcXHRzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnkoc3dhcCwgb2Zmc2V0KSk7XFxua2VybmVsL3Bvd2VyL3N3YXAuYy0xODEtXFx0XFx0ZWxzZVxcbi0tXFxua2VybmVsL3Bvd2VyL3N3YXAuYz0xODc9dm9pZCBmcmVlX2FsbF9zd2FwX3BhZ2VzKGludCBzd2FwKVxcbi0tXFxua2VybmVsL3Bvd2VyL3N3YXAuYy0yMDItXFx0XFx0Zm9yIChvZmZzZXQgPSBleHQtXFx1MDAzZXN0YXJ0OyBvZmZzZXQgXFx1MDAzYz0gZXh0LVxcdTAwM2VlbmQ7IG9mZnNldCsrKVxcbmtlcm5lbC9wb3dlci9zd2FwLmM6MjAzOlxcdFxcdFxcdHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeShzd2FwLCBvZmZzZXQpKTtcXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTIwNC1cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxOTMtLyoqXFxubW0vc3dhcGZpbGUuYzoyMTk0OiAqIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KCkgLSBGcmVlIGEgc3dhcCBzbG90IGFsbG9jYXRlZCBmb3IgaGliZXJuYXRpb24uXFxubW0vc3dhcGZpbGUuYy0yMTk1LSAqIEBlbnRyeTogc3dhcCBlbnRyeSB0byBmcmVlLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTk4LSAqL1xcbm1tL3N3YXBmaWxlLmM6MjE5OTp2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxcbm1tL3N3YXBmaWxlLmMtMjIwMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjAxLjQ5MzUyNDc5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTkwOTM5MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIaWJlcm5hdGlvbiBhbmQgU3dhcCBDYWNoZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSBrZXJuZWwncyBzd2FwIGFuZCBoaWJlcm5hdGlvbiBtZWNoYW5pc21zLiBJdCBsb29rcyBsaWtlIGBrZXJuZWwvcG93ZXIvc3dhcC5jYCBpcyB0aGUgY29yZSBvZiBoaWJlcm5hdGlvbiBmdW5jdGlvbmFsaXR5LCB1c2luZyBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YC4gSGliZXJuYXRpb24sIG9mIGNvdXJzZSwgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19ISUJFUk5BVElPTmAuIEkga25vdyBTeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgdGVzdGluZyB0aGlzIHRocm91Z2ggdGhpbmdzIGxpa2UgYC9kZXYvc25hcHNob3RgLCB3aGljaCBpcyBwcm9taXNpbmcuXG5cbkhvd2V2ZXIsIHRoZSBpbXBsaWNhdGlvbnMgZ28gYmV5b25kIGp1c3QgaGliZXJuYXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggb24gdGhlIHN0YW5kYXJkIHN3YXAgb3BlcmF0aW9ucyBhcyB3ZWxsLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgY3J1eCBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCBoYW5kbGVzIGhpYmVybmF0aW9uIHNsb3RzLCBhbmQgaG93IGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCBub3cgaW5jb3Jwb3JhdGVzIGEgY2hlY2sgdXNpbmcgYCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YilgLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGUgcGF0Y2guIEJlZm9yZSwgaXQgd2FzIGNoZWNraW5nIGlmIHRoZSBgb2xkX3RiYCB3YXMgYSBmb2xpbyBvciBoYWQgYSBjb3VudC4gQWZ0ZXJ3YXJkLCBpdCBpbmNsdWRlcyB0aGlzIG5ldyBjb25kaXRpb24uIFRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbG9naWMgbm93IGNoZWNrcyBpZiB0aGUgc3dhcCB0YWJsZSBlbnRyeSBpcyAqbm90KiBhIHNoYWRvdyBlbnRyeSwgb3IgZG9lcyAqbm90KiBoYXZlIGEgY291bnQsIHJldHVybmluZyBgLUVOT0VOVGAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIHRoaXMgaXMgYmVjYXVzZSBjbHVzdGVyIHJlYWRhaGVhZCBtaWdodCBoaXQgc2xvdHMgdGhhdCBhcmUgZnJlZSwgYmFkLCBvciBvd25lZCBieSBoaWJlcm5hdGlvbi5cblxuU28gdGhlIG1haW4gZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAsIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YC4gQWx0aG91Z2ggYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQsIGl0J3Mgb2J2aW91c2x5IHJlbGF0ZWQsIHNvIEkgbmVlZCB0byBjaGVjayBpdHMgY29udGV4dCwgaW4gYG1tL3N3YXBmaWxlLmNgLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBzd2FwIGNhY2hpbmcgYW5kIGhpYmVybmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MTowOS40ODQ0NjYxMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ1Njg1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oPTQwNT1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwNy0vKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQwODpzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwOS12b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmM9MTY5PXNlY3Rvcl90IGFsbG9jX3N3YXBkZXZfYmxvY2soaW50IHN3YXApXFxuLS1cXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE3Ni1cXHQgKi9cXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjE3NzpcXHRvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChzd2FwKSk7XFxua2VybmVsL3Bvd2VyL3N3YXAuYy0xNzgtXFx0aWYgKG9mZnNldCkge1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTI0PXZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjE0OS0vKipcXG5tbS9zd2FwZmlsZS5jOjIxNTA6ICogc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KCkgLSBBbGxvY2F0ZSBhIHN3YXAgc2xvdCBmb3IgaGliZXJuYXRpb24uXFxubW0vc3dhcGZpbGUuYy0yMTUxLSAqIEB0eXBlOiBzd2FwIGRldmljZSB0eXBlIGluZGV4IHRvIGFsbG9jYXRlIGZyb20uXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxNTgtICovXFxubW0vc3dhcGZpbGUuYzoyMTU5OnN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSlcXG5tbS9zd2FwZmlsZS5jLTIxNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MToxMS4xMzkwMzkzMTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjE2NzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqVHJhY2luZyBIaWJlcm5hdGlvbiBSZWFjaGFiaWxpdHkqKlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCB0aGUgYGtlcm5lbC9wb3dlci9zd2FwLmNgIGZpbGUgaXMgYWN0dWFsbHkgc29tZXRoaW5nIHRoYXQncyB0b3VjaGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFRoaXMgc3VnZ2VzdHMgd2UgYXJlIGludmVzdGlnYXRpbmcgdGhlIHBvd2VyIG1hbmFnZW1lbnQgYXNwZWN0cyBvZiB0aGUga2VybmVsLiBTaW5jZSBzd2FwIGlzIG9mdGVuIGludm9sdmVkIHdpdGggaGliZXJuYXRpb24sIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIGhpYmVybmF0aW9uLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIGBDT05GSUdfSElCRVJOQVRJT05gIGFuZCBgQ09ORklHX1NXQVBgIGFyZSBlbmFibGVkLCBhcyB0aGF0IHdpbGwgYmUgdGhlIGRldGVybWluaW5nIGZhY3RvcnMgb2YgdGhlIGluY2x1c2lvbiBvZiBgc3dhcC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjE0LjkwMTIwODQ0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDgyNDI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSElCRVJOQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL0tjb25maWc9MzU9Y29uZmlnIEhJQkVSTkFURV9DQUxMQkFDS1NcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTM3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OmNvbmZpZyBISUJFUk5BVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkhpYmVybmF0aW9uIChha2EgJ3N1c3BlbmQgdG8gZGlzaycpXFxcIlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctODMtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6ODQ6Y29uZmlnIEhJQkVSTkFUSU9OX1NOQVBTSE9UX0RFVlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTg1LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBzbmFwc2hvdCBkZXZpY2VcXFwiXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz05Nj1jaG9pY2VcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMC1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMDE6Y29uZmlnIEhJQkVSTkFUSU9OX0NPTVBfTFpPXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTAyLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwNC1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMDU6Y29uZmlnIEhJQkVSTkFUSU9OX0NPTVBfTFo0XFxua2VybmVsL3Bvd2VyL0tjb25maWctMTA2LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnPTEwOT1lbmRjaG9pY2VcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTAtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6MTExOmNvbmZpZyBISUJFUk5BVElPTl9ERUZfQ09NUFxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTExMi1cXHRzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTE6MTYuNDM2MDM4NTQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODUxMDY1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBqdXN0IHRoZSBiZWdpbm5pbmcgb2YgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbjpcblxuKipDaGVja2luZyBgQ09ORklHX1NXQVBgKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyB2ZXJpZnlpbmcgdGhlIHN0YXR1cyBvZiBgQ09ORklHX1NXQVBgLiBJdCdzIGEgZnVuZGFtZW50YWwgc2V0dGluZywgYW5kIEkgbmVlZCB0byBrbm93IGlmIHN3YXAgc3BhY2UgaXMgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBUaGlzIHRlbGxzIG1lIGEgbG90IGFib3V0IGhvdyB0aGUgc3lzdGVtIGlzIGludGVuZGVkIHRvIGhhbmRsZSBtZW1vcnkgcHJlc3N1cmUuIElmIGl0J3MgZGlzYWJsZWQsIHRoZSBkZXNpZ24gYW5kIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZSBzeXN0ZW0gd2lsbCBiZWhhdmUgZHVyaW5nIG1lbW9yeSBzdHJlc3Mgd2lsbCBiZSByYWRpY2FsbHkgZGlmZmVyZW50LiBLbm93aW5nIHRoaXMgYmFzZWxpbmUgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgYWxsIHN1YnNlcXVlbnQgZmluZGluZ3MgYW5kIG9ic2VydmF0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBzd2FwIGlzIGFjdGl2ZSBvciBub3QuIFRoaXMgaXMgYSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjM3LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTE6MjAuMzIxMTQ4MjcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyODMwODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXFxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEyOC1cXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MToyMi4wMTM5ODUyODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MzI4MTM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgSGliZXJuYXRpb24gQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYFNXQVBgIGFuZCBgSElCRVJOQVRJT05gIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSwgc3RhcnRpbmcgd2l0aDogYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBhbmQgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAuIFRoZXNlIGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnRzIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZSBzd2FwIGFuZCBoaWJlcm5hdGlvbiBzdWJzeXN0ZW1zLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBmdW5jdGlvbnMgaGVyZS4gSSBzZWUgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCBidXQgaXQncyBzdGF0aWMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgaXQgLSB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIGZyb20gYW4gZXh0ZXJuYWwgcGVyc3BlY3RpdmUgaXMgdml0YWwgaGVyZSBmb3IgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MToyNS40ODcyNjg5ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTU5MDgyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTg4ND1zdGF0aWMgYm9vbCBjbHVzdGVyX3NjYW5fcmFuZ2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy05MTAtXFxubW0vc3dhcGZpbGUuYzo5MTE6c3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy05MTItXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTk2ND1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtOTk0LVxcdFxcdH1cXG5tbS9zd2FwZmlsZS5jOjk5NTpcXHRcXHRpZiAoIV9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc2ksIGNpLCBmb2xpbywgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUikpXFxubW0vc3dhcGZpbGUuYy05OTYtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjI3LjE0MzE4Mzc3OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU4ODg5MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IGl0IG1lYW5zIHRoZSBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGxpbWl0ZWQsIGFuZCBpdCdzIG5vdCB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCByZXN0cmljdGlvbiBpbW1lZGlhdGVseSByYWlzZXMgdGhlIHF1ZXN0aW9uOiAqd2hhdCogaXMgY2FsbGluZyB0aGlzIHRoaW5nPyBXaGVyZSBpcyBpdCBiZWluZyB1c2VkPyBTaW5jZSBJIGNhbid0IGNhbGwgaXQgZGlyZWN0bHkgZnJvbSBhbnl3aGVyZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgbW9kdWxlIGFyZSBtYWtpbmcgdXNlIG9mIHRoaXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBsYXJnZXIgc3dhcCBtYW5hZ2VtZW50IHN5c3RlbS4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjMwLjIwMjA3NTEzOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjM2MTg4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zd2FwX3NjYW5fY2x1c3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTkxMT1zdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtOTYzLS8qIFRyeSB1c2UgYSBuZXcgY2x1c3RlciBmb3IgY3VycmVudCBDUFUgYW5kIGFsbG9jYXRlIGZyb20gaXQuICovXFxubW0vc3dhcGZpbGUuYzo5NjQ6c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy05NjUtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwMTU9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fbGlzdChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEwMjgtXFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcXG5tbS9zd2FwZmlsZS5jOjEwMjk6XFx0XFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIGZvbGlvLCBvZmZzZXQpO1xcbm1tL3N3YXBmaWxlLmMtMTAzMC1cXHRcXHRpZiAoZm91bmQpXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTEyMy1cXHRcXHRcXHRcXHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xcbm1tL3N3YXBmaWxlLmM6MTEyNDpcXHRcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XFxubW0vc3dhcGZpbGUuYy0xMTI1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEzNjc9c3RhdGljIGJvb2wgc3dhcF9hbGxvY19mYXN0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEzODYtXFx0XFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcXG5tbS9zd2FwZmlsZS5jOjEzODc6XFx0XFx0YWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBmb2xpbywgb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jLTEzODgtXFx0fSBlbHNlIHtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxNzgtXFx0XFx0aWYgKGNsdXN0ZXJfaXNfdXNhYmxlKGNpLCAwKSlcXG5tbS9zd2FwZmlsZS5jOjIxNzk6XFx0XFx0XFx0b2Zmc2V0ID0gYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBOVUxMLCBwY3Bfb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jLTIxODAtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MTozMS43OTQ0NDQyNTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMzU0MTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBTd2FwIEFsbG9jYXRpb24gUGF0aHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1lbnRhbCBtYXAgb2Ygc3dhcCBhbGxvY2F0aW9uIGlzIHRyaWdnZXJlZC4gSSBzZWUgdGhhdCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYSBjcml0aWNhbCBmdW5jdGlvbiBkdXJpbmcgc3lzdGVtIGhpYmVybmF0aW9uLCBpcyBhIGRpcmVjdCBjYWxsZXIgb2YgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYC4gVGhpcyBtYWtlcyBzZW5zZSwgYXMgYSBoaWJlcm5hdGlvbiBzd2FwIGFsbG9jYXRpb24gbmVlZHMgdG8gYmUgZXh0cmVtZWx5IHJlbGlhYmxlIGFuZCBsaWtlbHkgcGVyZm9ybXMgYSBmdWxsIHNjYW4gdG8gZmluZCB0aGUgYmVzdCBwb3NzaWJsZSBjbHVzdGVyLiBGdXJ0aGVyLCBgc3dhcF9hbGxvY19mYXN0YCBhbHNvIHVzZXMgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYC4gVGhpcyBpbXBsaWVzIGEgbW9yZSBwZXJmb3JtYW5jZS1vcmllbnRlZCBhbGxvY2F0aW9uIHBhdGggYWxzbyBzb21ldGltZXMgcmV2ZXJ0cyB0byBhIHRob3JvdWdoIHNlYXJjaCwgcGVyaGFwcyB3aGVuIGhldXJpc3RpY3MgZmFpbCwgb3Igd2hlbiBvdGhlciBjb25kaXRpb25zIGFyZW4ndCBtZXQuXG5cbk5vdywgbXkgY3VyaW9zaXR5IGlzIHBpcXVlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBzd2FwX2FsbG9jX2Zhc3RgIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3dhcCBhbGxvY2F0aW9uIHN1YnN5c3RlbS4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgcG9pbnRzIHRvIGBzd2FwX2FsbG9jX2Zhc3RgPyBJZGVudGlmeWluZyB0aGVzZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB3aGVuIHRoZSBmYXN0IHBhdGggaXMgdHJpZ2dlcmVkIGFuZCB3aGF0IHNjZW5hcmlvcyByZXF1aXJlIGEgbW9yZSByb2J1c3QsIGFsYmVpdCBzbG93ZXIsIHNjYW4gdXNpbmcgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiB3aWxsIGlsbHVtaW5hdGUgaG93IHRoaXMgZW50aXJlIGFsbG9jYXRpb24gc3lzdGVtIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MTozNS40MDc5ODgwMTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mjc2MTk4MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9hbGxvY19mYXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTM0Nz1zdGF0aWMgYm9vbCBnZXRfc3dhcF9kZXZpY2VfaW5mbyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEzNjYtICovXFxubW0vc3dhcGZpbGUuYzoxMzY3OnN0YXRpYyBib29sIHN3YXBfYWxsb2NfZmFzdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBmaWxlLmMtMTM2OC17XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTc2Ny1cXHRsb2NhbF9sb2NrKFxcdTAwMjZwZXJjcHVfc3dhcF9jbHVzdGVyLmxvY2spO1xcbm1tL3N3YXBmaWxlLmM6MTc2ODpcXHRpZiAoIXN3YXBfYWxsb2NfZmFzdChmb2xpbykpXFxubW0vc3dhcGZpbGUuYy0xNzY5LVxcdFxcdHN3YXBfYWxsb2Nfc2xvdyhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjM3LjMzNTYxMzQ4OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU2NjI4ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQ6XG5cbioqRm9jdXNpbmcgb24gU3dhcCBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgc3dhcCBhbGxvY2F0aW9uLiBJIHNlZSB0aGF0IGBmb2xpb19hbGxvY19zd2FwYCBkaXJlY3RseSBjYWxscyBgc3dhcF9hbGxvY19mYXN0YC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci4gSXQgbWVhbnMgdGhhdCBgZm9saW9fYWxsb2Nfc3dhcGAgaXMgdGhlIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQgd2hlcmUgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgZGVjaWRlZC4gSXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gQnkgdW5kZXJzdGFuZGluZyBob3cgYGZvbGlvX2FsbG9jX3N3YXBgIHdvcmtzIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIGBzd2FwX2FsbG9jX2Zhc3RgLCBJJ2xsIHByb2JhYmx5IGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJJ20gY3VyaW91cyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGZvbGlvIHN3YXAgYWxsb2NhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgaW5mb3JtYXRpb24gdGhlIGZ1bmN0aW9uIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjQxLjA5MjI0NTU4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwODU4MjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTI0OD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tLVxcbm1tL3N3YXAuaC0yNTAtLyogRm9yIGludGVybmFsIHVzZSAqL1xcbm1tL3N3YXAuaDoyNTE6ZXh0ZXJuIHZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG5tbS9zd2FwLmgtMjUyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjYyPXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0yOTctXFx0aWYgKCFmb2xpb19zd2FwcGVkKSB7XFxubW0vc3dhcF9zdGF0ZS5jOjI5ODpcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9zdGFydCwgbnJfcGFnZXMpO1xcbm1tL3N3YXBfc3RhdGUuYy0yOTktXFx0fSBlbHNlIGlmIChuZWVkX2ZyZWUpIHtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDItXFx0XFx0XFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXFxubW0vc3dhcF9zdGF0ZS5jOjMwMzpcXHRcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xcbm1tL3N3YXBfc3RhdGUuYy0zMDQtXFx0XFx0fSB3aGlsZSAoKytjaV9vZmYgXFx1MDAzYyBjaV9lbmQpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MjItXFx0XFx0aWYgKGNpX2JhdGNoICE9IC0xKSB7XFxubW0vc3dhcGZpbGUuYzoxNjIzOlxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XFxubW0vc3dhcGZpbGUuYy0xNjI0LVxcdFxcdFxcdGNpX2JhdGNoID0gLTE7XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MjgtXFx0aWYgKGNpX2JhdGNoICE9IC0xKVxcbm1tL3N3YXBmaWxlLmM6MTYyOTpcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9iYXRjaCwgY2lfb2ZmIC0gY2lfYmF0Y2gpO1xcbm1tL3N3YXBmaWxlLmMtMTYzMC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTg4ND1zdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xOTE0LSAqL1xcbm1tL3N3YXBmaWxlLmM6MTkxNTp2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy0xOTE2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTk5PXZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIyMDUtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jOjIyMDY6XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XFxubW0vc3dhcGZpbGUuYy0yMjA3LVxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MTo0Mi44MDA4NDMzMzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0NDc0MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBTd2FwIENsdXN0ZXIgRnJlZSBFbnRyaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtZW50YWwgbWFwIG9mIHRoZSBzd2FwIHN5c3RlbSBpcyBiZWluZyBwb2tlZCBoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGEgZmV3IHBsYWNlczogYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyYCwgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAuIFRoYXQgbWFrZXMgaW50dWl0aXZlIHNlbnNlOyB3ZSdyZSBkZWFsaW5nIHdpdGggZnJlZWluZyB1cCBzcGFjZSBpbiB0aGUgc3dhcCBjYWNoZSwgYW5kIHRoZXNlIGFyZSBhbGwgcmVsYXRlZCBhY3Rpdml0aWVzIC0gZWl0aGVyIHJlbW92aW5nIGVudHJpZXMgZGlyZWN0bHksIHB1dHRpbmcgbmV3IG9uZXMsIG9yIGZyZWVpbmcgdGhlIHNsb3QgZHVyaW5nIGhpYmVybmF0aW9uLlxuXG5CdXQgbm93IG15IGF0dGVudGlvbiBpcyBjYXVnaHQgYnkgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4gV2hpbGUgSSBrbm93ICp3aGF0KiBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCAqZG9lcyosIHVuZGVyc3RhbmRpbmcgd2hlcmUgYW5kIHdoeSB3ZSAqcHV0KiBlbnRyaWVzIGludG8gdGhlc2UgY2x1c3RlcnMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyBzd2FwIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSBpbiBoaWdoLWxvYWQgc2NlbmFyaW9zLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXJgIHRvIGl0cyBjYWxsZXJzLiBLbm93aW5nIHRoYXQgY29udGV4dCBnaXZlcyBtZSBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB3aHkgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgaXMgY2FsbGVkLiBJdCdsbCBnaXZlIG1lIGNsdWVzIHRvIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGV4aXN0LiBJcyB0aGlzIG9wZXJhdGlvbiBiZWluZyB0cmlnZ2VyZWQgdG9vIG9mdGVuPyBEb2VzIHRoZSBjYWxsZXIgY29udHJpYnV0ZSB0byB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucz8gS25vd2luZyB0aGUgY2FsbGluZyBoaWVyYXJjaHkgd2lsbCBwcm92aWRlIHRoZSBhbnN3ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ1OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjUwLjk0NTU4ODUxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTg5MzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xNTM3PXN0YXRpYyB2b2lkIF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNTc1LS8qKlxcbm1tL3N3YXBmaWxlLmM6MTU3NjogKiBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIgLSBEZWNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBzbG90cyB3aXRoaW4gb25lIGNsdXN0ZXJcXG5tbS9zd2FwZmlsZS5jLTE1NzctICogQHNpOiBUaGUgc3dhcCBkZXZpY2UuXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE1ODctICovXFxubW0vc3dhcGZpbGUuYzoxNTg4OnN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy0xNTg5LVxcdFxcdFxcdFxcdCAgICAgcGdvZmZfdCBvZmZzZXQsIGludCBucixcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODQzLVxcbm1tL3N3YXBmaWxlLmM6MTg0NDpcXHRzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc2ksIHN3cF9vZmZzZXQoZW50cnkpLCBucl9wYWdlcywgZmFsc2UpO1xcbm1tL3N3YXBmaWxlLmMtMTg0NS19XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTIxMjQ9dm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTQwLVxcdFxcdGNsdXN0ZXJfZW5kID0gbWluKHJvdW5kX3VwKG9mZnNldCArIDEsIFNXQVBGSUxFX0NMVVNURVIpLCBlbmRfb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jOjIxNDE6XFx0XFx0c3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHNpLCBvZmZzZXQsIGNsdXN0ZXJfZW5kIC0gb2Zmc2V0LCB0cnVlKTtcXG5tbS9zd2FwZmlsZS5jLTIxNDItXFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9lbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjUyLjYzMTQ5OTg3NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE0NzMyMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBTd2FwIEVudHJ5IEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgc3dhcCBlbnRyeSBidXNpbmVzcy4gSXQgbG9va3MgbGlrZSBgZm9saW9fcHV0X3N3YXBgIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgc2luY2UgdGhleSBib3RoIGNhbGwgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAuIFRoYXQncyBhIHByZXR0eSBjbGVhciBpbmRpY2F0b3IgdGhhdCBgZm9saW9fcHV0X3N3YXBgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgaW52ZXN0aWdhdGlvbi4gSXQncyB0aGUgaGlnaGVzdC1sZXZlbCBlbnRyeSBwb2ludCwgc28gdW5kZXJzdGFuZGluZyAqaXQqIHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIG92ZXJhbGwgcHJvY2Vzcy5cblxuQnV0LCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLiBJdCdzIHBvc3NpYmxlIHRoZXJlIGFyZSBzb21lIGtleSB0aGluZ3MgaGFwcGVuaW5nIGluICp0aGF0KiBmdW5jdGlvbiB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzIGp1c3QgZnJvbSBsb29raW5nIGF0IGBmb2xpb19wdXRfc3dhcGAuIEdvdHRhIGJlIHRob3JvdWdoLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI1NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjU2LjA0NjIzNTQzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTM1ODMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM9OTI9dm9pZCBnbWFwX2hlbHBlcl96YXBfb25lX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxcbi0tXFxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTExMi1cXHRcXHRkZWNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpO1xcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYzoxMTM6XFx0XFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc2wsIDEpO1xcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYy0xMTQtXFx0XFx0cHRlX2NsZWFyKG1tLCB2bWFkZHIsIHB0ZXApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9Mzk4PWludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjM5OTp2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwMC1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTQ0Mj1zdGF0aWMgaW5saW5lIGludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDQ2LVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ0NzpzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50LCBpbnQgbnIpXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDQ4LXtcXG4tLVxcbm1tL21hZHZpc2UuYz02NTM9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21hZHZpc2UuYy02OTYtXFx0XFx0XFx0XFx0bnJfc3dhcCAtPSBucjtcXG5tbS9tYWR2aXNlLmM6Njk3OlxcdFxcdFxcdFxcdHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KGVudHJ5LCBucik7XFxubW0vbWFkdmlzZS5jLTY5OC1cXHRcXHRcXHRcXHRjbGVhcl9ub25wcmVzZW50X3B0ZXMobW0sIGFkZHIsIHB0ZSwgbnIpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTg2Nj1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODk5LVxcdFxcdHJzc1tNTV9TV0FQRU5UU10gLT0gbnI7XFxubW0vbWVtb3J5LmM6MTkwMDpcXHRcXHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpO1xcbm1tL21lbW9yeS5jLTE5MDEtXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxuLS1cXG5tbS9zaG1lbS5jPTk3NT1zdGF0aWMgbG9uZyBzaG1lbV9mcmVlX3N3YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9zaG1lbS5jLTk5NS1cXHRpZiAobnJfcGFnZXMpXFxubW0vc2htZW0uYzo5OTY6XFx0XFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QocmFkaXhfdG9fc3dwX2VudHJ5KHJhZHN3YXApLCBucl9wYWdlcyk7XFxubW0vc2htZW0uYy05OTctXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTgwMC0gKiBOT1RFOiBUaGUgY2FsbGVyIGFsc28gaGFzIHRvIGVuc3VyZSB0aGVyZSBpcyBubyByYWNlZCBjYWxsIHRvXFxubW0vc3dhcGZpbGUuYzoxODAxOiAqIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0IG9uIGl0cyBzd2FwIGVudHJ5IGJlZm9yZSB0aGlzIGhlbHBlciByZXR1cm5zLCBvclxcbm1tL3N3YXBmaWxlLmMtMTgwMi0gKiB0aGUgc3dhcCBjb3VudCBtYXkgdW5kZXJmbG93Llxcbi0tXFxubW0vc3dhcGZpbGUuYz0xOTk4PWludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMDI1LSAqIG9ubHkgYmUgZG9uZSBieSBmb2xpb19kdXBfc3dhcCwgd2hpY2ggYWxzbyBsb2NrcyB0aGUgZm9saW8uIEJ1dCBhIGNvbmN1cnJlbnRcXG5tbS9zd2FwZmlsZS5jOjIwMjY6ICogZGVjcmVhc2Ugb2Ygc3dhcCBjb3VudCBpcyBwb3NzaWJsZSB0aHJvdWdoIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0LCBzbyB0aGlzXFxubW0vc3dhcGZpbGUuYy0yMDI3LSAqIG1heSByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjA5OT1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTExLS8qKlxcbm1tL3N3YXBmaWxlLmM6MjExMjogKiBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCgpIC0gUmVsZWFzZSByZWZlcmVuY2Ugb24gcmFuZ2Ugb2Ygc3dhcCBlbnRyaWVzIGFuZFxcbm1tL3N3YXBmaWxlLmMtMjExMy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjbGFpbSB0aGVpciBjYWNoZSBpZiBubyBtb3JlIHJlZmVyZW5jZXMgcmVtYWluLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTIzLSAqL1xcbm1tL3N3YXBmaWxlLmM6MjEyNDp2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXFxubW0vc3dhcGZpbGUuYy0yMTI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTE6NTcuNTk1NTk4Mjg5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTUyMDY2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGb2N1c2luZyBvbiBTd2FwIEVudHJ5IE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgc28gYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBwb3BzIHVwIGluIGEgZmV3IGtleSBwbGFjZXM6IGB6YXBfbm9ucHJlc2VudF9wdGVzYCwgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBhbmQgYHNobWVtX2ZyZWVfc3dhcGAuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgZnVuZGFtZW50YWwgdG8gaG93IHdlJ3JlIGhhbmRsaW5nIHN3YXAgZW50cmllcy4gU2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gY29uY2VudHJhdGUgbXkgYXR0ZW50aW9uLiBJdCdzIGhhbmRsaW5nIHRoZSBkaXJlY3QgcmVsZWFzZSBvZiB0aG9zZSBlbnRyaWVzLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBhY3R1YWxseSAqcHV0dGluZyogdGhvc2UgZW50cmllcy5cblxuR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQncyB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCB0byBzZWUgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgd2UgYXJlIGdvaW5nIHRvIHBlcmZvcm0gYXQgdGhhdCBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjowMS4yOTA4MDc5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNDY3Mjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz0yNTI9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMjYxLVxcbm1tL3N3YXBfc3RhdGUuYzoyNjI6c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXBfc3RhdGUuYy0yNjMtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zMjE9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzI1LVxcbm1tL3N3YXBfc3RhdGUuYzozMjY6XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbm1tL3N3YXBfc3RhdGUuYy0zMjctXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz00MTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNDY5LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcbm1tL3N3YXBfc3RhdGUuYzo0NzA6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbm1tL3N3YXBfc3RhdGUuYy00NzEtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00ODAtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxubW0vc3dhcF9zdGF0ZS5jOjQ4MTpcXHRcXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XFxubW0vc3dhcF9zdGF0ZS5jLTQ4Mi1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjowMi45OTU0ODU1MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTMyMDAwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU3dhcCBDYWNoZSBEZWxldGlvbioqXG5cblJpZ2h0LCBzbyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgYSBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIGl0cyBwdXJwb3NlPyBHaXZlbiB0aGUgbmFtZSwgaXQncyBpbnZvbHZlZCBpbiBkZWxldGluZyBlbnRyaWVzIGZyb20gdGhlIHN3YXAgY2FjaGUsIGxpa2VseSByZWxhdGVkIHRvIHBhZ2Utb3V0IG9wZXJhdGlvbnMuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCdzICppbml0aWF0aW5nKiB0aGlzIGRlbGV0aW9uPyBUaGUgY29kZSBzdHJ1Y3R1cmUgc2F5cyB0aGF0IGl0IGNhbGxzIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBpbnRlcm5hbCBvcGVyYXRpb24gd2l0aGluIHRoZSBzd2FwIGNhY2hlIG1hbmFnZW1lbnQuXG5cblRoZSBtb3JlIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IGlzOiAqd2hvKiBvciAqd2hhdCogaXMgY2FsbGluZyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2A/IElzIGl0IHRoZSBwYWdlIHJlY2xhaW0gbWVjaGFuaXNtPyBJcyBpdCBhIGJhY2tncm91bmQgcHJvY2Vzcz8gSXMgaXQgcmVsYXRlZCB0byB1c2VyLXNwYWNlIG1lbW9yeSBtYW5hZ2VtZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgd2lsbCByZXZlYWwgdGhlIHRyaWdnZXIgZm9yIHRoZXNlIGRlbGV0aW9ucywgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdCdzIHRoZSBlc3NlbnRpYWwgbmV4dCBzdGVwIGluIHRyYWNpbmcgdGhlIGNhbGwgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjkxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6MDYuNTI3NDg4MjE1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5NTkzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcXG4tLVxcbm1tL3N3YXAuaD00NTE9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmgtNDU0LVxcbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtNDU2LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjYyPXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDgtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMwOTogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTMxMC0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMyMC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXBfc3RhdGUuYy0zMjItXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzM0LSAqXFxubW0vc3dhcF9zdGF0ZS5jOjMzNTogKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zNDE9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0Ni1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDc6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTtcXG5tbS9zd2FwX3N0YXRlLmMtMzQ4LVxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MTgtXFx0XFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXFxubW0vc3dhcGZpbGUuYzoxNjE5OlxcdFxcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cXG5tbS9zd2FwZmlsZS5jLTE2MjAtXFx0XFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYz02ODI9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtNzM4LVxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG5tbS92bXNjYW4uYzo3Mzk6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XFxubW0vdm1zY2FuLmMtNzQwLVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6MDguMDU3MDg3NzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMTM4NTg2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTd2FwIGFuZCBIaWJlcm5hdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiwgYXMgaXQncyBkaXJlY3RseSBjYWxsZWQgYnkgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fcmVtb3ZlX21hcHBpbmdgLiBJIHNob3VsZCBhbHNvIGV4YW1pbmUgYF9fc3dhcF90YWJsZV9nZXRgIGFuZCBgX19zd2FwX3RhYmxlX3NldGAgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5Gcm9tIHRoZSBwYXRjaCwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBUaGlzIHBvaW50cyBtZSB0b3dhcmRzIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4gVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHNlZW0gdG8gYmU6XG5cbiogICBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2BcbiogICBgZm9saW9fYWxsb2Nfc3dhcGBcbiogICBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgXG4qICAgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYFxuKiAgIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGBcbiogICBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YFxuXG5XYWl0IGEgbWludXRlLCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhcmUgc3BlY2lmaWNhbGx5IGxpbmtlZCB0byBoaWJlcm5hdGlvbiEgVGhhdCB0cmlnZ2VycyBhIG1lbnRhbCBub3RlOiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaHVuY2ggaXMgY29uZmlybWVkOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYFNXUF9UQl9ISUJgIGFuZCBtb2RpZmllcyBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBpbXBseWluZyB0aGF0IGBDT05GSUdfSElCRVJOQVRJT05gIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFNpbmNlIHRoaXMgaXMgYWxsIHN3YXAtcmVsYXRlZCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfU1dBUGAgaXMgYWxzbyBhIGRlcGVuZGVuY3kuIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy5cblxuT2theSwgY2hlY2tpbmcgYG1tL0tjb25maWdgIGZvciBgU1dBUGAgY29uZmlybXMgYENPTkZJR19TV0FQYCBhcyB0aGUgbmFtZS4gU2ltaWxhcmx5LCBjaGVja2luZyBga2VybmVsL3Bvd2VyL0tjb25maWdgIGZvciBgSElCRVJOQVRJT05gIGNvbmZpcm1zIHRoYXQgYENPTkZJR19ISUJFUk5BVElPTmAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gVGhhdCBjb25maXJtcyB0aGUgZGVwZW5kZW5jeSB0cmVlOiBCb3RoIFNXQVAgYW5kIEhJQkVSTkFUSU9OIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaC5cblxuSSdsbCByZXZpZXcgdGhlIGNvZGUgY2hhbmdlcyBpbiBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJbiBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AsIEkgc2VlIGEgc3BlY2lhbCBjYXNlOiB3aGVuIGBmb2xpb2AgaXMgTlVMTCwgYW4gYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgc3BlY2lmaWNhbGx5IGZvciBoaWJlcm5hdGlvbi4gVGhpcyBhbHNvIGNvbmZpcm1zIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgIGFzIGEgY3J1Y2lhbCBmdW5jdGlvbiB0aGF0IG5lZWRzIGEgY2xvc2VyIGxvb2suXG5cblRoZW4sIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGhhbmRsZXMgdGhlIGBTV1BfVEJfSElCYCBmbGFnLCB3aGljaCBpcyB1c2VkIGZvciBoaWJlcm5hdGlvbi5cblxuRmluYWxseSwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBpcyBhbHNvIGltcG9ydGFudCwgYXMgaXQgaGFuZGxlcyB0aGUgZnJlZWluZyBvZiBoaWJlcm5hdGlvbiBzbG90cy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucyB3aXRoIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGEgdmFsaWRhdGlvbiBjaGVjayBhbmQgSSBuZWVkIHRvIGVuc3VyZSBpdCdzIG5vdCBiZWluZyBtaXMtdXNlZC4gSXQncyBjYWxsZWQgYnkgYF9fc3dhcF9jYWNoZV9hbGxvY2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSdsbCBhbHNvIGFkZCBgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW9gIHRvIHRoZSBmb2N1cyBsaXN0IGFzIGl0IGNhbGxzIGBfX3N3YXBfY2FjaGVfYWxsb2NgLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOlxuXG4qICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIChhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY2AgYW5kIGBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpb2ApXG4qICAgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YFxuKiAgIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mzk2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjoyNS4xNzA5NDg1MDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzE1ODgwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwMjgtXFx0XFx0XFx0aWYgKGNpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0MDI5OlxcdFxcdFxcdFxcdF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKGNpLCBmb2xpbywgbmV3X2ZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTQwMzAtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNjU2LVxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXFxubW0vbWlncmF0ZS5jOjY1NzpcXHRcXHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgZm9saW8sIG5ld2ZvbGlvKTtcXG5tbS9taWdyYXRlLmMtNjU4LVxcdGVsc2VcXG4tLVxcbm1tL3NobWVtLmM9MjA4OT1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zaG1lbS5jLTIxMjYtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrX2lycShvbGQpO1xcbm1tL3NobWVtLmM6MjEyNzpcXHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgb2xkLCBuZXcpO1xcbm1tL3NobWVtLmMtMjEyOC1cXHRtZW1fY2dyb3VwX3JlcGxhY2VfZm9saW8ob2xkLCBuZXcpO1xcbi0tXFxubW0vc3dhcC5oPTMyMT12b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcXG5tbS9zd2FwLmg6MzIzOnZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzI0LVxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XFxuLS1cXG5tbS9zd2FwLmg9NDU1PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwLmgtNDU5LVxcbm1tL3N3YXAuaDo0NjA6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTQ2MS1cXHRcXHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzQxPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zNTMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjM1NDogKiBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyAtIFJlcGxhY2UgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtMzU1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzY2LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozNjc6dm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXBfc3RhdGUuYy0zNjgtXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjoyNy4wMDI1NTE2NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTI0NDI1Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBTd2FwIGFuZCBIaWJlcm5hdGlvbiBBUEkgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZXNlIHN3YXAgYW5kIGhpYmVybmF0aW9uIEFQSXMuIEl0IGxvb2tzIGxpa2UgYF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvYCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgaXQncyBjYWxsZWQgYnkgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIGBfX2ZvbGlvX21pZ3JhdGVfbWFwcGluZ2AsIGFuZCBgc2htZW1fcmVwbGFjZV9mb2xpb2AuIFRob3NlIGFyZSBhbGwgaW50ZXJlc3RpbmcgY29udGV4dHMuXG5cbkxldCBtZSBqdXN0IHN1bW1hcml6ZSB0aGUgY3VycmVudCBmb2N1czpcbiogICBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2BcbiogICBgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW9gXG4qICAgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGBcbiogICBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgXG5cbkhtbSwgYXJlIHdlIG1pc3NpbmcgYW55dGhpbmc/IExldCdzIHNlZS4uLiBBaCwgd2hhdCBhYm91dCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYD8gVGhhdCdzIGNhbGxlZCBieSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXJgLiBBbmQgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAgaXMgdGhlbiBjYWxsZWQgYnkgYGZvbGlvX3B1dF9zd2FwYCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YC4gVGhhdCBtYWtlcyBgZm9saW9fcHV0X3N3YXBgIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIHdvcnRoIGNvbnNpZGVyaW5nLiBBbmQgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGNhbGxlZCBieSBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AsIHNvIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgZGVmaW5pdGVseSByZWxldmFudC5cblxuQWxyaWdodCwgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLiBNeSB1cGRhdGVkIGZvY3VzIHN5bWJvbHMgYXJlOlxuXG4qICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gXG4qICAgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGBcbiogICBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgXG4qICAgYGZvbGlvX3B1dF9zd2FwYFxuKiAgIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGBcbiogICBgc3dhcF9jYWNoZV9kZWxfZm9saW9gXG5cblRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc2V0IG9mIGVudHJ5IHBvaW50cyB0aGF0IGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZC5cblxuRmluYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbmZpZyBuYW1lcy4gWWVzLCBgSElCRVJOQVRJT05gIGFuZCBgU1dBUGAsIHNvIGl0IGxvb2tzIGNvcnJlY3QgdGhhdCB3ZSBoYXZlIHRoZSByaWdodCBjb25maWcgbmFtZS4gTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgaWYgdGhlIGBTV0FQYCBjb25maWcgZGVwZW5kcyBvbiBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNDksIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6MzUuOTI2OTgwNjg2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTcyOTcwMzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXFxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEyOC1cXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjozNy44OTk5NTg1MThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NzcyNTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgU1dBUCBEZXBlbmRlbmNpZXMgaW4gbW0vS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgU1dBUGAgZmVhdHVyZSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB3aGVyZSBJIGFsd2F5cyBzdGFydCB3aGVuIGRlYWxpbmcgd2l0aCBLY29uZmlnLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBgU1dBUGAgdG8gZXZlbiBiZSBjb25zaWRlcmVkLCBvciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBTV0FQYCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo0MS4yNDc2ODcxODlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo0MS4yNDc4MzI4MTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MDkxMDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgSGliZXJuYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgc3dhcCBmdW5jdGlvbmFsaXR5IGlzIHNldCB1cCBpbiB0aGlzIHN5c3RlbS4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYFNXQVBgIGhpbmdlcyBvbiBhIGZldyBrZXkgcHJlcmVxdWlzaXRlcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBkZXBlbmQgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBgTU1VYCAoTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCkgYW5kIGBCTE9DS2AgZmVhdHVyZXMsIGJ1dCBjcnVjaWFsbHksIGl0ICptdXN0IG5vdCogaW5jbHVkZSBgQVJDSF9OT19TV0FQYC4gYEJMT0NLYCBpcyBwcmV0dHkgbXVjaCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIHNvIHRoYXQncyBwcm9iYWJseSBub3Qgd2hlcmUgYW55IGlzc3VlIGxpZXMuIEp1c3QgdG8gYmUgc3VyZSBvZiB0aGUgd2hvbGUgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBISUJFUk5BVElPTmAgbm93LCBhbmQgSSdsbCBmaW5kIHRoYXQgaW4gYGtlcm5lbC9wb3dlci9LY29uZmlnYC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIHJlcXVpcmVtZW50cyBmb3IgaGliZXJuYXRpb24gaW50ZXJhY3Qgd2l0aCB0aGVzZSBvdGhlciBjb25maWd1cmF0aW9ucy4gSSB0aGluayBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUsIHNvIGxldCdzIGNvbnRpbnVlIHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk2NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6NDYuMTI4NzQ1Nzk1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdGNvbmZpZyBISUJFUk5BVElPTlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiSGliZXJuYXRpb24gKGFrYSAnc3VzcGVuZCB0byBkaXNrJylcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIFNXQVAgXFx1MDAyNlxcdTAwMjYgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRVxcbiAgNDE6XFx0XFx0c2VsZWN0IEhJQkVSTkFURV9DQUxMQkFDS1NcXG4gIDQyOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgNDM6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgNDQ6XFx0XFx0c2VsZWN0IENSWVBUT19MWk9cXG4gIDQ1OlxcdFxcdHNlbGVjdCBDUllQVE9fTFo0XFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIEVuYWJsZSB0aGUgc3VzcGVuZCB0byBkaXNrIChTVEQpIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHVzdWFsbHlcXG4gIDQ4OlxcdFxcdCAgY2FsbGVkIFxcXCJoaWJlcm5hdGlvblxcXCIgaW4gdXNlciBpbnRlcmZhY2VzLiAgU1REIGNoZWNrcG9pbnRzIHRoZVxcbiAgNDk6XFx0XFx0ICBzeXN0ZW0gYW5kIHBvd2VycyBpdCBvZmY7IGFuZCByZXN0b3JlcyB0aGF0IGNoZWNrcG9pbnQgb24gcmVib290LlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFlvdSBjYW4gc3VzcGVuZCB5b3VyIG1hY2hpbmUgd2l0aCAnZWNobyBkaXNrIFxcdTAwM2UgL3N5cy9wb3dlci9zdGF0ZSdcXG4gIDUyOlxcdFxcdCAgYWZ0ZXIgcGxhY2luZyByZXN1bWU9L2Rldi9zd2FwcGFydGl0aW9uIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lXFxuICA1MzpcXHRcXHQgIGluIHlvdXIgYm9vdGxvYWRlcidzIGNvbmZpZ3VyYXRpb24gZmlsZS5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0ICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgYWRkaXRpb25hbCB1c2VybGFuZCB0b29scyBhdmFpbGFibGVcXG4gIDU2OlxcdFxcdCAgZnJvbSBcXHUwMDNjaHR0cDovL3N1c3BlbmQuc2YubmV0XFx1MDAzZS5cXG4gIDU3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo0Ni4xMjg4MjkwNjVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgyNzkxNjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipIaWJlcm5hdGlvbiBMb2dpYyBhbmQgU3dhcCBDYWNoZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYXMgZXhwZWN0ZWQsIGhpYmVybmF0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgY29udGluZ2VudCBvbiBib3RoIGBTV0FQYCBhbmQgYEhJQkVSTkFUSU9OYCBiZWluZyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXRjaC5cblxuSSdtIHNlZWluZyBjaGFuZ2VzIGluIHRoZSBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBob3cgaXQgaGFuZGxlcyBleGlzdGluZyBzd2FwIHRhYmxlIGVudHJpZXMuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIGNoZWNraW5nIGZvciBzaGFkb3cgZW50cmllcyBub3cgKGAhc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpYCksIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhpYmVybmF0aW9uLiBUaGUgYWltIGlzIHRvIHByZXZlbnQgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBtaXN0YWtlbmx5IGdldHRpbmcgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBmb3IgdGhlIGhpYmVybmF0aW9uIHNsb3QgKGBTV1BfVEJfSElCYCkuIEl0IGFsc28gbW9kaWZpZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLlxuXG5JJ3ZlIGlkZW50aWZpZWQga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYGZvbGlvX3B1dF9zd2FwYCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBGb3J0dW5hdGVseSwgYWZ0ZXIgYSBxdWljayBjaGVjaywgaXQncyBjbGVhciB0aGF0IGBmb2xpb19wdXRfc3dhcGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAsIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGFyZSBhbGwgbm9uLXN0YXRpYywgaW5kaWNhdGluZyB0aGV5J3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGF0aW9uIHVuaXRzLiBUaGlzIGlzIGFzIEkgZXhwZWN0LiBUaGUgY2hhbmdlIGxvb2tzIHNvbGlkIGFuZCB3aWxsIHdvcmsgYXMgaW50ZW5kZWQgd2l0aCBzd2FwIG9wZXJhdGlvbnMgYW5kIGhpYmVybmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUzMiwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo1NS45NTY3NDgwNTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI0NzY2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiSElCRVJOQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RcIixcbiAgICBcInN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJmb2xpb19wdXRfc3dhcFwiLFxuICAgIFwic3dhcF9wdXRfZW50cmllc19kaXJlY3RcIixcbiAgICBcInN3YXBfY2FjaGVfZGVsX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgY2FjaGUgbG9naWMgdG8gaW50cm9kdWNlIGEgbmV3IGhpYmVybmF0aW9uIHNsb3Qgc3RhdGUgKFNXUF9UQl9ISUIpIGFuZCBwcmV2ZW50cyBoaWJlcm5hdGlvbiBzbG90cyBmcm9tIGJlaW5nIGFjY2lkZW50YWxseSBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZSBkdXJpbmcgY2x1c3RlciByZWFkYWhlYWQuIEl0IGFsc28gY2hhbmdlcyBob3cgaGliZXJuYXRpb24gc2xvdHMgYXJlIGFsbG9jYXRlZCBhbmQgZnJlZWQsIGJ5cGFzc2luZyB0aGUgbm9ybWFsIHN3YXAgY2FjaGUgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcC9oaWJlcm5hdGlvbiBsb2dpYywgcmVhY2hhYmxlIHZpYSBzd2FwIG9wZXJhdGlvbnMgYW5kIGhpYmVybmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIkhJQkVSTkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwiZm9saW9fcHV0X3N3YXBcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6NTYuMDMwMDAxNjEyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzkyNTQ1NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6NTYuMDMwNDYzMjQyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk3OTIwNzg1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgc2xvdCBtYW5hZ2VtZW50IHRvIGV4cGxpY2l0bHkgdHJhY2sgaGliZXJuYXRpb24gc2xvdHMgdXNpbmcgYSBuZXcgZmxhZyAoU1dQX1RCX0hJQikgYW5kIHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgc3dhcCBzdGF0ZSB0cmFja2luZyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGFyaXNpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZThkYTg2NzBlODk1NDFiNjNlNGJlNDg0ZTVhNDIxMzM1MjczNzk5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDEzOjUwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li42MzQxZjFiZmZmYTIzIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xODEsOSArMTgxLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuK1x0LypcbitcdCAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuXG4rXHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbitcdCAqIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXG4rXHQgKi9cbitcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuK1x0aWYgKHNoYWRvd3ApXG4gXHRcdCpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpO1xuIFx0aWYgKG1lbWNnX2lkKVxuIFx0XHQqbWVtY2dfaWQgPSBfX3N3YXBfY2dyb3VwX2dldChjaSwgY2lfb2ZmKTtcbkBAIC0xOTYsNyArMjAxLDcgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRjaV9lbmQgPSBjaV9vZmYgKyBucjtcbiBcdGRvIHtcbiBcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpIHx8XG4rXHRcdGlmICh1bmxpa2VseSghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8XG4gXHRcdFx0ICAgICAhX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgfHxcbiBcdFx0XHQgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fFxuIFx0XHRcdCAgICAgKG1lbWNnX2lkIFx1MDAyNlx1MDAyNiAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSlcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3RhYmxlLmggYi9tbS9zd2FwX3RhYmxlLmhcbmluZGV4IGU2NjEzZTYyZjhkMGYuLmI5MTZhNjQ5MzUyMWEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcbisrKyBiL21tL3N3YXBfdGFibGUuaFxuQEAgLTMwLDYgKzMwLDcgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxuICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKVxuICAqIEJhZDogICAgICB8LS0tLS0tLS0tLS0tLSAxIC0tLS0tLS0tLS0tLS18MTAwMHwgLSBCYWQgc2xvdFxuKyAqIEhpYmVybjogICB8ICAgIDAgICAgIHwtLS0tLS0tIDEgLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgKzU1LDEwIEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcbiAgKiAgIGFsaWduZWQgcG9pbnRlcnMuXG4gICpcbiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuXG4rICpcbisgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kXG4rICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLiBUaGUgY291bnQgZmllbGQgaXMga2VwdCAwIHNvIGl0IG5ldmVyXG4rICogICByZWFkcyBhcyBhIHNsb3QgaW4gdXNlLlxuICAqL1xuIFxuIC8qIE5VTEwgRW50cnksIGFsbCAwICovXG5AQCAtODEsNiArODYsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gLyogQmFkIHNsb3Q6IGVuZHMgd2l0aCAwYjEwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXG4gI2RlZmluZSBTV1BfVEJfQkFEXHRcdCgofjBVTCkgXHUwMDNjXHUwMDNjIDMpXG4gXG4rLyogSGliZXJuYXRpb24gc2xvdDogZW5kcyB3aXRoIDBiMTAwMDAsIG5vIGNvdW50LCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqL1xuKyNkZWZpbmUgU1dQX1RCX0hJQlx0XHQoKCh+MFVMKSBcdTAwM2NcdTAwM2MgNCkgXHUwMDI2IH5TV1BfVEJfQ09VTlRfTUFTSylcbitcbiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqL1xuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFx0U1dQX1RCX0ZMQUdTX0JJVFNcbiBcbkBAIC0xNjYsNiArMTc0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuIFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfQkFEO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2hpYmVybmF0aW9uKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuK3tcbitcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0hJQjtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpXG4ge1xuIFx0cmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC05MjgsNyArOTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxuIFx0ICpcbiBcdCAqIEVsc2UsIGl0J3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi5cbi1cdCAqIFRoZSBzbG90IHN0YXJ0cyB3aXRoIGNvdW50ID09IDEgYW5kIG5ldmVyIGluY3JlYXNlcy5cbitcdCAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KGZvbGlvKSkge1xuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbkBAIC05NDAsOCArOTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdG9yZGVyID0gMDtcbiBcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcbi1cdFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cbi1cdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XG4rXHRcdC8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovXG4rXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbkBAIC0xOTI5LDkgKzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuIFx0XHQvKlxuIFx0XHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XG4tXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXG4rXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3RcbitcdFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXG4gXHRcdCAqL1xuLVx0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpO1xuK1x0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCBfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSBcdTAwM2UgMSkpO1xuIFxuIFx0XHQvKiBSZXNldHRpbmcgdGhlIHNsb3QgdG8gTlVMTCBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGZsYWdzLiAqL1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xuQEAgLTIyMDEsMTIgKzIyMDMsOCBAQCB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG4tXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xuIFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi1cbi1cdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXG4tXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo1Ni4wMzA0NjQxMDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc5MjA1MTYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhpYmVybmF0aW9uIFN3YXAgU2xvdCBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgc3dhcCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS9zd2FwX3RhYmxlLmhgLCBhbmQgYG1tL3N3YXBmaWxlLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoYXQgZmlyc3QuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgU1dQX1RCX0hJQmAsIGEgbmV3IHN3YXAgdGFibGUgZW50cnkgdHlwZSBleHBsaWNpdGx5IGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIGNvbmNlcHR1YWxseSwgc2VncmVnYXRpbmcgdGhlc2Ugc2xvdHMgZnJvbSB0aGUgcmVndWxhciBzd2FwIGVudHJpZXMuXG5cbk15IG1haW4gZm9jdXMgaXMgb24gdGhlIGNoYW5nZXMgdG8gYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLCBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AsIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YC4gSXQgbG9va3MgbGlrZSB3ZSBhcmUgZXhwbGljaXRseSBwcmV2ZW50aW5nIGhpYmVybmF0aW9uIHNsb3RzIGZyb20gZXZlciBoaXR0aW5nIHRoZSBzd2FwIGNhY2hlLiAgRXhjZWxsZW50LCBiZWNhdXNlIHRoZXkgZG9uJ3QgaGF2ZSBhIGNvdW50IGFuZCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZWx5IGFsbG93aW5nIGhpYmVybmF0aW9uIHNsb3RzIHRvIGJlIGFjY2lkZW50YWxseSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUsIHdoaWNoIHdvdWxkIGNhdXNlIHNldmVyZSBpc3N1ZXMgbGF0ZXIsIHByb2JhYmx5IHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgcGFnZSBzdGF0ZS5cblxuR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN3YXAgY2FjaGUgb3BlcmF0ZXMgYW5kIHdoYXQgaGliZXJuYXRpb24gaXMgdHJ5aW5nIHRvIGRvLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyAqbm90KiBpbnRyb2R1Y2luZyBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHMgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgbWlnaHQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgZml4aW5nIGEgc3BlY2lmaWMgc3dhcCBjYWNoZSByZWFkYWhlYWQgYnVnIGFuZCBzZWdyZWdhdGluZyBoaWJlcm5hdGlvbiBzbG90cyBjb3JyZWN0bHkuXG5cblNpbmNlIHRoaXMgcGF0Y2ggaXMgYWJvdXQgZml4aW5nIGEgc3dhcCBjYWNoZSBidWcgYW5kIG5vdCBhIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiwgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBsaWtlIEtBU0FOLCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC1zY29wZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODg0LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUzOjA1LjgyMjUxOTgwM1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBzbG90IG1hbmFnZW1lbnQgdG8gZXhwbGljaXRseSB0cmFjayBoaWJlcm5hdGlvbiBzbG90cyB1c2luZyBhIG5ldyBmbGFnIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGFjY2lkZW50YWxseSBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZSBkdXJpbmcgY2x1c3RlciByZWFkYWhlYWQuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBzd2FwIHN0YXRlIHRyYWNraW5nIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgYXJpc2luZyBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzd2FwIHNsb3QgbWFuYWdlbWVudCB0byBleHBsaWNpdGx5IHRyYWNrIGhpYmVybmF0aW9uIHNsb3RzIHVzaW5nIGEgbmV3IGZsYWcgKFNXUF9UQl9ISUIpIGFuZCBwcmV2ZW50cyB0aGVtIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIHN3YXAgc3RhdGUgdHJhY2tpbmcgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBhcmlzaW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowft8zx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 13:49:25 +0000 UTC FinishedAt: 2026-08-11 13:53:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "HIBERNATION" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "480a31230b426efb005b6e71a14ef80f405f18b6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "HIBERNATION" ], "series_id": "6da09a54-d4ea-4d61-8720-b0ef0185bb71" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_cache_alloc_folio", "swap_alloc_hibernation_slot", "swap_free_hibernation_slot", "folio_put_swap", "swap_put_entries_direct", "swap_cache_del_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7SElCRVJOQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtmb2xpb19wdXRfc3dhcCYjMzQ7LAogICAgJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgc2xvdCBtYW5hZ2VtZW50IHRvIGV4cGxpY2l0bHkgdHJhY2sgaGliZXJuYXRpb24gc2xvdHMgdXNpbmcgYSBuZXcgZmxhZyAoU1dQX1RCX0hJQikgYW5kIHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgc3dhcCBzdGF0ZSB0cmFja2luZyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGFyaXNpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU4ZGE4NjcwZTg5NTQxYjYzZTRiZTQ4NGU1YTQyMTMzNTI3Mzc5OTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMzo1MDozNSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IGI3NmViM2Q4NzZmZDcuLjYzNDFmMWJmZmZhMjMgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTE4MSw5ICYjNDM7MTgxLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuJiM0MztcdC8qXG4mIzQzO1x0ICogT25seSBhIHN3YXBwZWQtb3V0IHNsb3QgbWF5IGJlIGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7XHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbiYjNDM7XHQgKiBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuJiM0MztcdGlmIChzaGFkb3dwKVxuIFx0XHQqc2hhZG93cCA9IHN3cF90Yl90b19zaGFkb3cob2xkX3RiKTtcbiBcdGlmIChtZW1jZ19pZClcbiBcdFx0Km1lbWNnX2lkID0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZik7XG5AQCAtMTk2LDcgJiM0MzsyMDEsNyBAQCBzdGF0aWMgaW50IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdGNpX2VuZCA9IGNpX29mZiAmIzQzOyBucjtcbiBcdGRvIHtcbiBcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpIHx8XG4mIzQzO1x0XHRpZiAodW5saWtlbHkoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fFxuIFx0XHRcdCAgICAgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIHx8XG4gXHRcdFx0ICAgICBpc196ZXJvICE9IF9fc3dhcF90YWJsZV90ZXN0X3plcm8oY2ksIGNpX29mZikgfHxcbiBcdFx0XHQgICAgIChtZW1jZ19pZCBcdTAwMjZcdTAwMjYgKm1lbWNnX2lkICE9IF9fc3dhcF9jZ3JvdXBfZ2V0KGNpLCBjaV9vZmYpKSkpXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oXG5pbmRleCBlNjYxM2U2MmY4ZDBmLi5iOTE2YTY0OTM1MjFhIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF90YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwX3RhYmxlLmhcbkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gICogUEZOOiAgICAgIHxTV0FQX0NPVU5UfFp8LS0tLS0tIFBGTiAtLS0tLS0tfDEwfCAtIENhY2hlZCBzbG90XG4gICogUG9pbnRlcjogIHwtLS0tLS0tLS0tLSBQb2ludGVyIC0tLS0tLS0tLS18MTAwfCAtIChVbnVzZWQpXG4gICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90XG4mIzQzOyAqIEhpYmVybjogICB8ICAgIDAgICAgIHwtLS0tLS0tIDEgLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgJiM0Mzs1NSwxMCBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gICogICBhbGlnbmVkIHBvaW50ZXJzLlxuICAqXG4gICogLSBCYWQ6IFN3YXAgc2xvdCBpcyByZXNlcnZlZCwgcHJvdGVjdHMgc3dhcCBoZWFkZXIgb3IgaG9sZXMgb24gc3dhcCBkZXZpY2VzLlxuJiM0MzsgKlxuJiM0MzsgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kXG4mIzQzOyAqICAgbXVzdCBuZXZlciBlbnRlciB0aGUgc3dhcCBjYWNoZS4gVGhlIGNvdW50IGZpZWxkIGlzIGtlcHQgMCBzbyBpdCBuZXZlclxuJiM0MzsgKiAgIHJlYWRzIGFzIGEgc2xvdCBpbiB1c2UuXG4gICovXG4gXG4gLyogTlVMTCBFbnRyeSwgYWxsIDAgKi9cbkBAIC04MSw2ICYjNDM7ODYsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gLyogQmFkIHNsb3Q6IGVuZHMgd2l0aCAwYjEwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXG4gI2RlZmluZSBTV1BfVEJfQkFEXHRcdCgofjBVTCkgXHUwMDNjXHUwMDNjIDMpXG4gXG4mIzQzOy8qIEhpYmVybmF0aW9uIHNsb3Q6IGVuZHMgd2l0aCAwYjEwMDAwLCBubyBjb3VudCwgcmVzdHMgb2YgYml0cyBhcmUgYWxsIDEgKi9cbiYjNDM7I2RlZmluZSBTV1BfVEJfSElCXHRcdCgoKH4wVUwpIFx1MDAzY1x1MDAzYyA0KSBcdTAwMjYgflNXUF9UQl9DT1VOVF9NQVNLKVxuJiM0MztcbiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqL1xuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFx0U1dQX1RCX0ZMQUdTX0JJVFNcbiBcbkBAIC0xNjYsNiAmIzQzOzE3NCwxMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2JhZCh1bnNpZ25lZCBsb25nIHN3cF90YilcbiBcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpXG4ge1xuIFx0cmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC05MjgsNyAmIzQzOzkyOCw3IEBAIHN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogdXBvbiBmb2xpbyB1bm1hcC5cbiBcdCAqXG4gXHQgKiBFbHNlLCBpdCYjMzk7cyBhIGV4Y2x1c2l2ZSBvcmRlciAwIGFsbG9jYXRpb24gZm9yIGhpYmVybmF0aW9uLlxuLVx0ICogVGhlIHNsb3Qgc3RhcnRzIHdpdGggY291bnQgPT0gMSBhbmQgbmV2ZXIgaW5jcmVhc2VzLlxuJiM0MztcdCAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KGZvbGlvKSkge1xuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbkBAIC05NDAsOCAmIzQzOzk0MCw4IEBAIHN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvcmRlciA9IDA7XG4gXHRcdG5yX3BhZ2VzID0gMTtcbiBcdFx0c3dhcF9jbHVzdGVyX2Fzc2VydF9lbXB0eShjaSwgY2lfb2ZmLCAxLCBmYWxzZSk7XG4tXHRcdC8qIEZha2Ugc2hhZG93IHBsYWNlaG9sZGVyIHdpdGggbm8gZmxhZywgaGliZXJuYXRpb24gZG9lcyBub3QgdXNlIHRoZSB6ZXJvbWFwICovXG4tXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgX19zd3BfdGJfbWtfY291bnQoc2hhZG93X3RvX3N3cF90YihOVUxMLCAwKSwgMSkpO1xuJiM0MztcdFx0LyogRXhjbHVzaXZlbHkgb3duZWQgYnkgaGliZXJuYXRpb24sIG11c3QgbmV2ZXIgZW50ZXIgdGhlIHN3YXAgY2FjaGUgKi9cbiYjNDM7XHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbkBAIC0xOTI5LDkgJiM0MzsxOTI5LDExIEBAIHZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdFx0LypcbiBcdFx0ICogRnJlZWluZyBpcyBkb25lIGFmdGVyIHJlbGVhc2Ugb2YgdGhlIGxhc3Qgc3dhcCBjb3VudFxuLVx0XHQgKiByZWYsIG9yIGFmdGVyIHN3YXAgY2FjaGUgaXMgZHJvcHBlZFxuJiM0MztcdFx0ICogcmVmLCBvciBhZnRlciBzd2FwIGNhY2hlIGlzIGRyb3BwZWQuIEEgaGliZXJuYXRpb24gc2xvdFxuJiM0MztcdFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXG4gXHRcdCAqL1xuLVx0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpO1xuJiM0MztcdFx0Vk1fV0FSTl9PTighc3dwX3RiX2lzX2hpYmVybmF0aW9uKG9sZF90YikgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIFx1MDAzZSAxKSk7XG4gXG4gXHRcdC8qIFJlc2V0dGluZyB0aGUgc2xvdCB0byBOVUxMIGFsc28gY2xlYXJzIHRoZSBpbmxpbmUgZmxhZ3MuICovXG4gXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgbnVsbF90b19zd3BfdGIoKSk7XG5AQCAtMjIwMSwxMiAmIzQzOzIyMDMsOCBAQCB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG4tXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xuIFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi1cbi1cdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXG4tXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7SElCRVJOQVRJT04mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdCYjMzQ7LAogICAgJiMzNDtmb2xpb19wdXRfc3dhcCYjMzQ7LAogICAgJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBsb2dpYyB0byBpbnRyb2R1Y2UgYSBuZXcgaGliZXJuYXRpb24gc2xvdCBzdGF0ZSAoU1dQX1RCX0hJQikgYW5kIHByZXZlbnRzIGhpYmVybmF0aW9uIHNsb3RzIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gSXQgYWxzbyBjaGFuZ2VzIGhvdyBoaWJlcm5hdGlvbiBzbG90cyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZCwgYnlwYXNzaW5nIHRoZSBub3JtYWwgc3dhcCBjYWNoZSByZWZlcmVuY2UgY291bnRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwL2hpYmVybmF0aW9uIGxvZ2ljLCByZWFjaGFibGUgdmlhIHN3YXAgb3BlcmF0aW9ucyBhbmQgaGliZXJuYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOGRhODY3MGU4OTU0MWI2M2U0YmU0ODRlNWE0MjEzMzUyNzM3OTk3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTM6NTA6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggYjc2ZWIzZDg3NmZkNy4uNjM0MWYxYmZmZmEyMyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMTgxLDkgJiM0MzsxODEsMTQgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJb2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTsKIAlpZiAoc3dwX3RiX2lzX2ZvbGlvKG9sZF90YikpCiAJCXJldHVybiAtRUVYSVNUOwotCWlmICghX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpCiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuCiYjNDM7CSAqIENsdXN0ZXIgcmVhZGFoZWFkIHdhbGtzIHJhdyBvZmZzZXQgcmFuZ2VzLCBzbyBpdCBjYW4gbGFuZCBvbgomIzQzOwkgKiBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoc2hhZG93cCAmYW1wOyZhbXA7IHN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSkKJiM0MzsJaWYgKHNoYWRvd3ApCiAJCSpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpOwogCWlmIChtZW1jZ19pZCkKIAkJKm1lbWNnX2lkID0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZik7CkBAIC0xOTYsNyAmIzQzOzIwMSw3IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCWNpX2VuZCA9IGNpX29mZiAmIzQzOyBucjsKIAlkbyB7CiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7Ci0JCWlmICh1bmxpa2VseShzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fAomIzQzOwkJaWYgKHVubGlrZWx5KCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwKIAkJCSAgICAgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIHx8CiAJCQkgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fAogCQkJICAgICAobWVtY2dfaWQgJmFtcDsmYW1wOyAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSkKZGlmZiAtLWdpdCBhL21tL3N3YXBfdGFibGUuaCBiL21tL3N3YXBfdGFibGUuaAppbmRleCBlNjYxM2U2MmY4ZDBmLi5iOTE2YTY0OTM1MjFhIDEwMDY0NAotLS0gYS9tbS9zd2FwX3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF90YWJsZS5oCkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7CiAgKiBQRk46ICAgICAgfFNXQVBfQ09VTlR8WnwtLS0tLS0gUEZOIC0tLS0tLS18MTB8IC0gQ2FjaGVkIHNsb3QKICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKQogICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90CiYjNDM7ICogSGliZXJuOiAgIHwgICAgMCAgICAgfC0tLS0tLS0gMSAtLS0tLS0tfDEwMDAwfCAtIEhpYmVybmF0aW9uIHNsb3QKICAqCiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsCiAgKiBhbmQgdG9nZXRoZXIgdGhleSBmb3JtIHRoZSBgU1dQX1RCX0ZMQUdTX0JJVFNgIHdpZGUgZmxhZ3MgZmllbGQuCkBAIC01NCw2ICYjNDM7NTUsMTAgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUgewogICogICBhbGlnbmVkIHBvaW50ZXJzLgogICoKICAqIC0gQmFkOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQsIHByb3RlY3RzIHN3YXAgaGVhZGVyIG9yIGhvbGVzIG9uIHN3YXAgZGV2aWNlcy4KJiM0MzsgKgomIzQzOyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmQKJiM0MzsgKiAgIG11c3QgbmV2ZXIgZW50ZXIgdGhlIHN3YXAgY2FjaGUuIFRoZSBjb3VudCBmaWVsZCBpcyBrZXB0IDAgc28gaXQgbmV2ZXIKJiM0MzsgKiAgIHJlYWRzIGFzIGEgc2xvdCBpbiB1c2UuCiAgKi8KIAogLyogTlVMTCBFbnRyeSwgYWxsIDAgKi8KQEAgLTgxLDYgJiM0Mzs4Niw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHsKIC8qIEJhZCBzbG90OiBlbmRzIHdpdGggMGIxMDAwIGFuZCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqLwogI2RlZmluZSBTV1BfVEJfQkFECQkoKH4wVUwpICZsdDsmbHQ7IDMpCiAKJiM0MzsvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCwgbm8gY291bnQsIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovCiYjNDM7I2RlZmluZSBTV1BfVEJfSElCCQkoKCh+MFVMKSAmbHQ7Jmx0OyA0KSAmYW1wOyB+U1dQX1RCX0NPVU5UX01BU0spCiYjNDM7CiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqLwogI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUCVNXUF9UQl9GTEFHU19CSVRTCiAKQEAgLTE2Niw2ICYjNDM7MTc0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKQogCXJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpCiB7CiAJcmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHwKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGRlYTJkM2IzNmUwNmYuLjRmYmExNzcwY2U2MTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtOTI4LDcgJiM0Mzs5MjgsNyBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkgKiB1cG9uIGZvbGlvIHVubWFwLgogCSAqCiAJICogRWxzZSwgaXQmIzM5O3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi4KLQkgKiBUaGUgc2xvdCBzdGFydHMgd2l0aCBjb3VudCA9PSAxIGFuZCBuZXZlciBpbmNyZWFzZXMuCiYjNDM7CSAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LgogCSAqLwogCWlmIChsaWtlbHkoZm9saW8pKSB7CiAJCW9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwpAQCAtOTQwLDggJiM0Mzs5NDAsOCBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJb3JkZXIgPSAwOwogCQlucl9wYWdlcyA9IDE7CiAJCXN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX29mZiwgMSwgZmFsc2UpOwotCQkvKiBGYWtlIHNoYWRvdyBwbGFjZWhvbGRlciB3aXRoIG5vIGZsYWcsIGhpYmVybmF0aW9uIGRvZXMgbm90IHVzZSB0aGUgemVyb21hcCAqLwotCQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIF9fc3dwX3RiX21rX2NvdW50KHNoYWRvd190b19zd3BfdGIoTlVMTCwgMCksIDEpKTsKJiM0MzsJCS8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovCiYjNDM7CQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIFNXUF9UQl9ISUIpOwogCX0gZWxzZSB7CiAJCS8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi8KIAkJV0FSTl9PTl9PTkNFKDEpOwpAQCAtMTkyOSw5ICYjNDM7MTkyOSwxMSBAQCB2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiAJCS8qCiAJCSAqIEZyZWVpbmcgaXMgZG9uZSBhZnRlciByZWxlYXNlIG9mIHRoZSBsYXN0IHN3YXAgY291bnQKLQkJICogcmVmLCBvciBhZnRlciBzd2FwIGNhY2hlIGlzIGRyb3BwZWQKJiM0MzsJCSAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3QKJiM0MzsJCSAqIGhhcyBubyBjb3VudCBhbmQgaXMgZnJlZWQgZGlyZWN0bHkgYnkgaXRzIG93bmVyLgogCQkgKi8KLQkJVk1fV0FSTl9PTighc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpICZndDsgMSk7CiYjNDM7CQlWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgJmd0OyAxKSk7CiAKIAkJLyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi8KIAkJX19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTsKQEAgLTIyMDEsMTIgJiM0MzsyMjAzLDggQEAgdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSkKIAlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTsKLQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpOwogCV9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwotCi0JLyogSW4gdGhlb3J5IHJlYWRhaGVhZCBtaWdodCBhZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYnkgYWNjaWRlbnQgKi8KLQlfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpOwogfQogCiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4ODcKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA0MjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEhpYmVybmF0aW9uIFN3YXAgU2xvdCBIYW5kbGluZyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHRoZSBrZXJuZWwgdGhhdCB3YXJyYW50IGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBfdGFibGUuaGAsIGFuZCBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIGltbWVkaWF0ZWx5IHJhaXNlcyBteSBmbGFnIOKAkyB0aGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBhcmVhcy4gVGhpcyBtZWFucyBpdCBoYXMgYSBoaWdoIHBvdGVudGlhbCBmb3IgaW1wYWN0aW5nIGNyaXRpY2FsIGtlcm5lbCBiZWhhdmlvci4KCkl0IHNlZW1zIHRoZSBwYXRjaCBpcyBhbGwgYWJvdXQgaG93IGhpYmVybmF0aW9uIHN3YXAgc2xvdHMgYXJlIG1hbmFnZWQgd2l0aGluIHRoZSBzd2FwIGNhY2hlLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGludHJvZHVjaW5nIGEgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSBmb3IgdGhlc2Ugc2xvdHMuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AsIGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCwgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AsIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgaXMgYmVpbmcgdHdlYWtlZCB0byBwcmV2ZW50IGhpYmVybmF0aW9uIHNsb3RzIChzaGFkb3cgc2xvdHMpIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgaW4gdGhlIGZpcnN0IHBsYWNlLCBlbnN1cmluZyBvbmx5IGFjdHVhbGx5IHN3YXBwZWQtb3V0IHNsb3RzIGdldCBhZGRlZC4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIHNldHRpbmcgYW5kIGNsZWFyaW5nIG9mIHRoaXMgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSBhbmQgZnJlZWluZyBoaWJlcm5hdGlvbiBzbG90cy4KCk15IGZpcnN0IHRob3VnaHQgaXMsIGlzIHRoaXMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgd2hpY2ggaXMgZXNzZW50aWFsIGZvciBmdXp6aW5nPyBTd2FwIGFuZCBoaWJlcm5hdGlvbiBhcmUgYm90aCBwb3RlbnRpYWxseSByZWFjaGFibGUuIEhhbmcgb24uLi4gaGliZXJuYXRpb24gbWlnaHQgYmUgcHJvYmxlbWF0aWMgZGVwZW5kaW5nIG9uIHRoZSBRRU1VIHNldHVwLCBidXQgc3dhcCBpcyBkZWZpbml0ZWx5IHRoZXJlLiBNb3JlIGltcG9ydGFudGx5LCBpdCBsb29rcyBsaWtlIGNoYW5nZXMgdG8gYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGFmZmVjdCBub3JtYWwgc3dhcCByZWFkYWhlYWQgb3BlcmF0aW9ucywgZXZlbiBpbiB0aGUgY2FzZSBvZiBoaWJlcm5hdGlvbi4gJiMzNDtDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb24gc2xvdHMgdGhhdCBhcmUgZnJlZSwgYmFkLCBvciBvd25lZCBieSBoaWJlcm5hdGlvbi4mIzM0OyBTbywgZXZlbiB3aXRob3V0IGhpYmVybmF0aW9uIHN1cHBvcnQsIG5vcm1hbCBzd2FwIHJlYWRhaGVhZCBpcyBkZWZpbml0ZWx5IGFmZmVjdGVkLCB3aGljaCBpcyBncmVhdC4KClNvIG5vdywgbGV0JiMzOTtzIGZpbmQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uLiBJJiMzOTt2ZSBnb3QgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgaW4gYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLiBJdCBpcyBzdGF0aWMsIHNvIEkgbmVlZCB0byBmaW5kIHRoZSBjYWxsZXJzIG9mIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gSSYjMzk7bGwgZG8gYSBxdWljayBncmVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hZGRfY2hlY2smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcF9zdGF0ZS5jPTEzNT12b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTE0Ni0vKipcbm1tL3N3YXBfc3RhdGUuYzoxNDc6ICogX19zd2FwX2NhY2hlX2FkZF9jaGVjayAtIENoZWNrIGlmIGEgcmFuZ2UgaXMgc3VpdGFibGUgZm9yIGFkZGluZyBhIGZvbGlvLlxubW0vc3dhcF9zdGF0ZS5jLTE0OC0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTE2MS0gKi9cbm1tL3N3YXBfc3RhdGUuYzoxNjI6c3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwX3N0YXRlLmMtMTYzLVx0XHRcdFx0ICBzd3BfZW50cnlfdCB0YXJnX2VudHJ5LFxuLS1cbm1tL3N3YXBfc3RhdGUuYz00MTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQzMS1cdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0MzI6XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgTlVMTCwgTlVMTCk7XG5tbS9zd2FwX3N0YXRlLmMtNDMzLVx0c3Bpbl91bmxvY2soXHUwMDI2Y2ktXHUwMDNlbG9jayk7XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTQ1NC1cdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0NTU6XHRlcnIgPSBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKGNpLCB0YXJnX2VudHJ5LCBucl9wYWdlcywgXHUwMDI2c2hhZG93LCBcdTAwMjZtZW1jZ19pZCk7XG5tbS9zd2FwX3N0YXRlLmMtNDU2LVx0aWYgKHVubGlrZWx5KGVycikpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTkzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgcmVmbGVjdGluZyBteSBleHBlcnQgdW5kZXJzdGFuZGluZzoKCioqU3dhcCBDYWNoZSBBbGxvY2F0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBfX3N3YXBfY2FjaGVfYWxsb2NgIGlzIGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLiBUaGF0JiMzOTtzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIHBvdGVudGlhbGx5IGNyaXRpY2FsLCBpbnRlcm5hbCBvcGVyYXRpb24gd2l0aGluIHRoZSBzd2FwIGNhY2hpbmcgbWVjaGFuaXNtLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXM6IHdoYXQgYXJlIHRoZSAqZW50cnkgcG9pbnRzKiBmb3IgYF9fc3dhcF9jYWNoZV9hbGxvY2A/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGlzIHBhcmFtb3VudCB0byBncmFzcGluZyB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHN3YXAgY2FjaGUgbWFuYWdlbWVudC4gS25vd2luZyB0aGUgY29udGV4dHMgd2hlcmUgbWVtb3J5IGlzIGJlaW5nIHN3YXBwZWQsIGFkZGVkLCBvciByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGlzIGNlbnRyYWwgdG8gYW55IGRlZXAgZGl2ZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYF9fc3dhcF9jYWNoZV9hbGxvY2AgdG8gdW5kZXJzdGFuZCB0aGUgcHJvY2Vzc2VzIHRoYXQgYXJlIHRyaWdnZXJpbmcgdGhlc2UgYWxsb2NhdGlvbiBldmVudHMuIEkgbmVlZCB0byBrbm93IHRoZSBvcmlnaW4gb2YgdGhhdCBzd2FwIGNhY2hlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9MzY3PXZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNDEzLSAqL1xubW0vc3dhcF9zdGF0ZS5jOjQxNDpzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXBfc3RhdGUuYy00MTUtXHRcdFx0XHRcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NTE5PXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTUzNC1cdGRvIHtcbm1tL3N3YXBfc3RhdGUuYzo1MzU6XHRcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcbm1tL3N3YXBfc3RhdGUuYy01MzYtXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTY3MAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaWdnaW5nIGludG8gdGhlIFN3YXAgQ2FjaGUgQWxsb2NhdGlvbioqCgpBbHJpZ2h0LCBzbyBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaXMgZGVmaW5pdGVseSBjYWxsaW5nIGBfX3N3YXBfY2FjaGVfYWxsb2NgLiBUaGF0IG11Y2ggaXMgY2xlYXIgZnJvbSB0aGUgY29kZS4gQnV0LCBhbmQgdGhpcyBpcyB0aGUgY3J1eCBvZiBpdCwgKndoYXQqIGlzIGNhbGxpbmcgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGluIHRoZSBmaXJzdCBwbGFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNhbGwgZ3JhcGggaW4gcmV2ZXJzZSBoZXJlLiBJJiMzOTttIGFmdGVyIHRoZSBpbml0aWF0aW5nIGZ1bmN0aW9uIG9yIGZ1bmN0aW9ucywgdGhlIHBsYWNlcyB3aGVyZSB0aGlzIGZvbGlvIGFsbG9jYXRpb24gZm9yIHN3YXAgY2FjaGUgZW50cmllcyBpcyBiZWluZyAqcmVxdWVzdGVkKi4gS25vd2luZyB0aGUgdXBzdHJlYW0gY2FsbGVycyB3aWxsIGdpdmUgbWUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBjb250ZXh0IG9mIHRoZSBhbGxvY2F0aW9uLCBhbmQgd2hlcmUgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIG9yIGJvdHRsZW5lY2tzIG1pZ2h0IGxpZS4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGRpcmVjdCB1c2VyIHBhZ2UgZmF1bHRzLCBpcyBpdCBwYXJ0IG9mIGEgYmFja2dyb3VuZCBzd2FwLWluIHByb2Nlc3MsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGZpcmUgdXAgdGhlIGRlYnVnZ2VyIGFuZCBzdGFydCB0cmFjaW5nIHRob3NlIGZ1bmN0aW9uIGNhbGxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTMxND12b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vc3dhcC5oOjMxNTpzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbm1tL3N3YXAuaC0zMTYtXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDE0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MDItLyoqXG5tbS9zd2FwX3N0YXRlLmM6NTAzOiAqIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8gLSBBbGxvY2F0ZSBmb2xpbyBmb3Igc3dhcHBlZCBvdXQgc2xvdCBpbiBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTUwNC0gKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxuLS1cbm1tL3N3YXBfc3RhdGUuYy01MTgtICovXG5tbS9zd2FwX3N0YXRlLmM6NTE5OnN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXG5tbS9zd2FwX3N0YXRlLmMtNTIwLVx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTY0Nz1zdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTY1Ni1cdFx0XHRyZXR1cm4gZm9saW87XG5tbS9zd2FwX3N0YXRlLmM6NjU3Olx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xubW0vc3dhcF9zdGF0ZS5jLTY1OC1cdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuLS1cbm1tL3N3YXBfc3RhdGUuYz02ODg9c3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycyxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtNjk3LVx0XHRcdHJldHVybiBmb2xpbztcbm1tL3N3YXBfc3RhdGUuYzo2OTg6XHRcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcbm1tL3N3YXBfc3RhdGUuYy02OTktXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE4MzA9dm9pZCBmb2xpb19wdXRfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgcGFnZSAqcGFnZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTE4NzItICogICAgIC4uLlx0XHRcdFx0c3dhcG9mZiYjNDM7c3dhcG9uXG5tbS9zd2FwZmlsZS5jOjE4NzM6ICogICAgIHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oKVxubW0vc3dhcGZpbGUuYy0xODc0LSAqICAgICAgIC8vIGNoZWNrIHN3YXBfbWFwXG4tLVxubW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwMDMtXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xubW0venN3YXAuYzoxMDA0Olx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG5tbS96c3dhcC5jLTEwMDUtXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY5NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIFN3YXAgQ2FjaGUgQWxsb2NhdGlvbiBhbmQgSGliZXJuYXRpb24qKgoKT2theSwgc28gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHdpZGVyIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIHBvdGVudGlhbCBzY29wZSBhbmQgZXh0ZXJuYWwgdXNlLCBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgdHJhY2luZyBpdHMgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29tcG9uZW50cy4gVGhlbiB0aGUgb2J2aW91cyBxdWVzdGlvbiBwb3BzIGludG8gbXkgaGVhZCwgd2hhdCBhYm91dCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgPyBJcyBpdCBzdGF0aWMsIGFuZCBpZiBub3QsIGRvZXMgaXRzIG5vbi1zdGF0aWMgc3RhdHVzIGNyZWF0ZSBhbnkgc2ltaWxhciBwb2ludHMgZm9yIGNvbnNpZGVyYXRpb24/IEkgbmVlZCB0byBhbmFseXplIGhvdyBib3RoIGZ1bmN0aW9ucywgYW5kIHRoZWlyIHJlc3BlY3RpdmUgdmlzaWJpbGl0eSwgYXJlIGRlc2lnbmVkIGFuZCBzdHJ1Y3R1cmVkIHJlbGF0aXZlIHRvIGVhY2ggb3RoZXIuIEkgd29uZGVyIGFib3V0IHRoZSBtb3RpdmF0aW9ucyBiZWhpbmQgdGhlc2UgZGVzaWduIGRlY2lzaW9ucywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBvdGhlciBzdWJzeXN0ZW1zIHdpdGhpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXJjaGl0ZWN0dXJlPyBJIG5lZWQgdG8gbG9vayBpbnRvIHRoaXMgbW9yZSBkZWVwbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc3dhcC5oPTQwOD1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpO1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NDA5OnZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xuaW5jbHVkZS9saW51eC9zd2FwLmgtNDEwLVxuLS1cbmtlcm5lbC9wb3dlci9zd2FwLmM9MTY5PXNlY3Rvcl90IGFsbG9jX3N3YXBkZXZfYmxvY2soaW50IHN3YXApXG4tLVxua2VybmVsL3Bvd2VyL3N3YXAuYy0xNzktXHRcdGlmIChzd3N1c3BfZXh0ZW50c19pbnNlcnQob2Zmc2V0KSlcbmtlcm5lbC9wb3dlci9zd2FwLmM6MTgwOlx0XHRcdHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeShzd2FwLCBvZmZzZXQpKTtcbmtlcm5lbC9wb3dlci9zd2FwLmMtMTgxLVx0XHRlbHNlXG4tLVxua2VybmVsL3Bvd2VyL3N3YXAuYz0xODc9dm9pZCBmcmVlX2FsbF9zd2FwX3BhZ2VzKGludCBzd2FwKVxuLS1cbmtlcm5lbC9wb3dlci9zd2FwLmMtMjAyLVx0XHRmb3IgKG9mZnNldCA9IGV4dC1cdTAwM2VzdGFydDsgb2Zmc2V0IFx1MDAzYz0gZXh0LVx1MDAzZWVuZDsgb2Zmc2V0JiM0MzsmIzQzOylcbmtlcm5lbC9wb3dlci9zd2FwLmM6MjAzOlx0XHRcdHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeShzd2FwLCBvZmZzZXQpKTtcbmtlcm5lbC9wb3dlci9zd2FwLmMtMjA0LVxuLS1cbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yMTkzLS8qKlxubW0vc3dhcGZpbGUuYzoyMTk0OiAqIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KCkgLSBGcmVlIGEgc3dhcCBzbG90IGFsbG9jYXRlZCBmb3IgaGliZXJuYXRpb24uXG5tbS9zd2FwZmlsZS5jLTIxOTUtICogQGVudHJ5OiBzd2FwIGVudHJ5IHRvIGZyZWUuXG4tLVxubW0vc3dhcGZpbGUuYy0yMTk4LSAqL1xubW0vc3dhcGZpbGUuYzoyMTk5OnZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXG5tbS9zd2FwZmlsZS5jLTIyMDAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzcwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIaWJlcm5hdGlvbiBhbmQgU3dhcCBDYWNoZSBJbnRlcmFjdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIHBhdGNoIGltcGFjdHMgdGhlIGtlcm5lbCYjMzk7cyBzd2FwIGFuZCBoaWJlcm5hdGlvbiBtZWNoYW5pc21zLiBJdCBsb29rcyBsaWtlIGBrZXJuZWwvcG93ZXIvc3dhcC5jYCBpcyB0aGUgY29yZSBvZiBoaWJlcm5hdGlvbiBmdW5jdGlvbmFsaXR5LCB1c2luZyBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YC4gSGliZXJuYXRpb24sIG9mIGNvdXJzZSwgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19ISUJFUk5BVElPTmAuIEkga25vdyBTeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgdGVzdGluZyB0aGlzIHRocm91Z2ggdGhpbmdzIGxpa2UgYC9kZXYvc25hcHNob3RgLCB3aGljaCBpcyBwcm9taXNpbmcuCgpIb3dldmVyLCB0aGUgaW1wbGljYXRpb25zIGdvIGJleW9uZCBqdXN0IGhpYmVybmF0aW9uLiBUaGVzZSBjaGFuZ2VzIHRvdWNoIG9uIHRoZSBzdGFuZGFyZCBzd2FwIG9wZXJhdGlvbnMgYXMgd2VsbC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AsIHdoaWNoIGlzIGNhbGxlZCB3aXRoaW4gYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBpcyBiZWluZyBtb2RpZmllZC4gVGhlIGNydXggb2YgdGhlIGNoYW5nZSBsaWVzIGluIGhvdyBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgaGFuZGxlcyBoaWJlcm5hdGlvbiBzbG90cywgYW5kIGhvdyBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2Agbm93IGluY29ycG9yYXRlcyBhIGNoZWNrIHVzaW5nIGAhc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpYC4KCkkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBwYXRjaC4gQmVmb3JlLCBpdCB3YXMgY2hlY2tpbmcgaWYgdGhlIGBvbGRfdGJgIHdhcyBhIGZvbGlvIG9yIGhhZCBhIGNvdW50LiBBZnRlcndhcmQsIGl0IGluY2x1ZGVzIHRoaXMgbmV3IGNvbmRpdGlvbi4gVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIFRoZSBsb2dpYyBub3cgY2hlY2tzIGlmIHRoZSBzd2FwIHRhYmxlIGVudHJ5IGlzICpub3QqIGEgc2hhZG93IGVudHJ5LCBvciBkb2VzICpub3QqIGhhdmUgYSBjb3VudCwgcmV0dXJuaW5nIGAtRU5PRU5UYC4gVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhpcyBpcyBiZWNhdXNlIGNsdXN0ZXIgcmVhZGFoZWFkIG1pZ2h0IGhpdCBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLgoKU28gdGhlIG1haW4gZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAsIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YC4gQWx0aG91Z2ggYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAgaXNuJiMzOTt0IGRpcmVjdGx5IG1vZGlmaWVkLCBpdCYjMzk7cyBvYnZpb3VzbHkgcmVsYXRlZCwgc28gSSBuZWVkIHRvIGNoZWNrIGl0cyBjb250ZXh0LCBpbiBgbW0vc3dhcGZpbGUuY2AuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXBlciBkaXZlIGludG8gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHN3YXAgY2FjaGluZyBhbmQgaGliZXJuYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBzY29wZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zd2FwLmg9NDA1PWJvb2wgZm9saW9fZnJlZV9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLS1cbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwNy0vKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xuaW5jbHVkZS9saW51eC9zd2FwLmg6NDA4OnN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSk7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00MDktdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XG4tLVxua2VybmVsL3Bvd2VyL3N3YXAuYz0xNjk9c2VjdG9yX3QgYWxsb2Nfc3dhcGRldl9ibG9jayhpbnQgc3dhcClcbi0tXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE3Ni1cdCAqL1xua2VybmVsL3Bvd2VyL3N3YXAuYzoxNzc6XHRvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChzd2FwKSk7XG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE3OC1cdGlmIChvZmZzZXQpIHtcbi0tXG5tbS9zd2FwZmlsZS5jPTIxMjQ9dm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjE0OS0vKipcbm1tL3N3YXBmaWxlLmM6MjE1MDogKiBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoKSAtIEFsbG9jYXRlIGEgc3dhcCBzbG90IGZvciBoaWJlcm5hdGlvbi5cbm1tL3N3YXBmaWxlLmMtMjE1MS0gKiBAdHlwZTogc3dhcCBkZXZpY2UgdHlwZSBpbmRleCB0byBhbGxvY2F0ZSBmcm9tLlxuLS1cbm1tL3N3YXBmaWxlLmMtMjE1OC0gKi9cbm1tL3N3YXBmaWxlLmM6MjE1OTpzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXG5tbS9zd2FwZmlsZS5jLTIxNjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzIxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqVHJhY2luZyBIaWJlcm5hdGlvbiBSZWFjaGFiaWxpdHkqKgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciBvciBub3QgdGhlIGBrZXJuZWwvcG93ZXIvc3dhcC5jYCBmaWxlIGlzIGFjdHVhbGx5IHNvbWV0aGluZyB0aGF0JiMzOTtzIHRvdWNoZWQgaW4gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gVGhpcyBzdWdnZXN0cyB3ZSBhcmUgaW52ZXN0aWdhdGluZyB0aGUgcG93ZXIgbWFuYWdlbWVudCBhc3BlY3RzIG9mIHRoZSBrZXJuZWwuIFNpbmNlIHN3YXAgaXMgb2Z0ZW4gaW52b2x2ZWQgd2l0aCBoaWJlcm5hdGlvbiwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIGhpYmVybmF0aW9uLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIGBDT05GSUdfSElCRVJOQVRJT05gIGFuZCBgQ09ORklHX1NXQVBgIGFyZSBlbmFibGVkLCBhcyB0aGF0IHdpbGwgYmUgdGhlIGRldGVybWluaW5nIGZhY3RvcnMgb2YgdGhlIGluY2x1c2lvbiBvZiBgc3dhcC5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhJQkVSTkFUSU9OJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9wb3dlci9LY29uZmlnPTM1PWNvbmZpZyBISUJFUk5BVEVfQ0FMTEJBQ0tTXG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMzctXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzozODpjb25maWcgSElCRVJOQVRJT05cbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5LVx0Ym9vbCBcJiMzNDtIaWJlcm5hdGlvbiAoYWthICYjMzk7c3VzcGVuZCB0byBkaXNrJiMzOTspXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctODMtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzo4NDpjb25maWcgSElCRVJOQVRJT05fU05BUFNIT1RfREVWXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy04NS1cdGJvb2wgXCYjMzQ7VXNlcnNwYWNlIHNuYXBzaG90IGRldmljZVwmIzM0O1xuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnPTk2PWNob2ljZVxuLS1cbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMC1cbmtlcm5lbC9wb3dlci9LY29uZmlnOjEwMTpjb25maWcgSElCRVJOQVRJT05fQ09NUF9MWk9cbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMi1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxua2VybmVsL3Bvd2VyL0tjb25maWctMTA0LVxua2VybmVsL3Bvd2VyL0tjb25maWc6MTA1OmNvbmZpZyBISUJFUk5BVElPTl9DT01QX0xaNFxua2VybmVsL3Bvd2VyL0tjb25maWctMTA2LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz0xMDk9ZW5kY2hvaWNlXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTAtXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMTE6Y29uZmlnIEhJQkVSTkFUSU9OX0RFRl9DT01QXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTItXHRzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzNwoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcml6ZWQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBqdXN0IHRoZSBiZWdpbm5pbmcgb2YgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbjoKCioqQ2hlY2tpbmcgYENPTkZJR19TV0FQYCoqCgpBbHJpZ2h0LCBiZWZvcmUgZGl2aW5nIGludG8gYW55dGhpbmcgZWxzZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyB0byBtaW5kIGlzIHZlcmlmeWluZyB0aGUgc3RhdHVzIG9mIGBDT05GSUdfU1dBUGAuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2V0dGluZywgYW5kIEkgbmVlZCB0byBrbm93IGlmIHN3YXAgc3BhY2UgaXMgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBUaGlzIHRlbGxzIG1lIGEgbG90IGFib3V0IGhvdyB0aGUgc3lzdGVtIGlzIGludGVuZGVkIHRvIGhhbmRsZSBtZW1vcnkgcHJlc3N1cmUuIElmIGl0JiMzOTtzIGRpc2FibGVkLCB0aGUgZGVzaWduIGFuZCBpbXBsaWNhdGlvbnMgZm9yIGhvdyB0aGUgc3lzdGVtIHdpbGwgYmVoYXZlIGR1cmluZyBtZW1vcnkgc3RyZXNzIHdpbGwgYmUgcmFkaWNhbGx5IGRpZmZlcmVudC4gS25vd2luZyB0aGlzIGJhc2VsaW5lIGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGFsbCBzdWJzZXF1ZW50IGZpbmRpbmdzIGFuZCBvYnNlcnZhdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgc3dhcCBpcyBhY3RpdmUgb3Igbm90LiBUaGlzIGlzIGEgY3J1Y2lhbCBzdGFydGluZyBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNXQVAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9taXBzL0tjb25maWc9MTI2Mz1jb25maWcgTUlQU19TUFJBTVxuLS1cbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXG5hcmNoL21pcHMvS2NvbmZpZzoxMjY2OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY3LVx0Ym9vbFxuLS1cbmFyY2gvc2gvS2NvbmZpZz0xMjY9Y29uZmlnIElPX1RSQVBQRURcbi0tXG5hcmNoL3NoL0tjb25maWctMTI4LVxuYXJjaC9zaC9LY29uZmlnOjEyOTpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9zaC9LY29uZmlnLTEzMC1cdGJvb2xcbi0tXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MzkKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3dhcCBhbmQgSGliZXJuYXRpb24gQ29uZmlndXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHRoZSBgU1dBUGAgYW5kIGBISUJFUk5BVElPTmAgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZXNlLCBzdGFydGluZyB3aXRoOiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAsIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YC4gVGhlc2UgYXJlIGxpa2VseSBnb2luZyB0byBiZSB0aGUgY2VudHJhbCBwb2ludHMgb2YgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIHN3YXAgYW5kIGhpYmVybmF0aW9uIHN1YnN5c3RlbXMuCgpCZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBmdW5jdGlvbnMgaGVyZS4gSSBzZWUgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCBidXQgaXQmIzM5O3Mgc3RhdGljLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIGFyZSBjYWxsaW5nIGl0IC0gdW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiBmcm9tIGFuIGV4dGVybmFsIHBlcnNwZWN0aXZlIGlzIHZpdGFsIGhlcmUgZm9yIGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9ODg0PXN0YXRpYyBib29sIGNsdXN0ZXJfc2Nhbl9yYW5nZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy05MTAtXG5tbS9zd2FwZmlsZS5jOjkxMTpzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtOTEyLVx0XHRcdFx0XHQgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwZmlsZS5jPTk2ND1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTk5NC1cdFx0fVxubW0vc3dhcGZpbGUuYzo5OTU6XHRcdGlmICghX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzaSwgY2ksIGZvbGlvLCBvZmZzZXQgJSBTV0FQRklMRV9DTFVTVEVSKSlcbm1tL3N3YXBmaWxlLmMtOTk2LVx0XHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE1MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXJgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXJgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4gVGhpcyBpcyBzaWduaWZpY2FudDsgaXQgbWVhbnMgdGhlIHNjb3BlIG9mIHRoaXMgZnVuY3Rpb24gaXMgbGltaXRlZCwgYW5kIGl0JiMzOTtzIG5vdCB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCByZXN0cmljdGlvbiBpbW1lZGlhdGVseSByYWlzZXMgdGhlIHF1ZXN0aW9uOiAqd2hhdCogaXMgY2FsbGluZyB0aGlzIHRoaW5nPyBXaGVyZSBpcyBpdCBiZWluZyB1c2VkPyBTaW5jZSBJIGNhbiYjMzk7dCBjYWxsIGl0IGRpcmVjdGx5IGZyb20gYW55d2hlcmUsIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIG1vZHVsZSBhcmUgbWFraW5nIHVzZSBvZiB0aGlzIHJlc291cmNlIGFsbG9jYXRpb24gZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgbGFyZ2VyIHN3YXAgbWFuYWdlbWVudCBzeXN0ZW0uIExldCYjMzk7cyBkaWcgaW4gYW5kIGZpZ3VyZSBvdXQgdGhlIGNhbGwgY2hhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9OTExPXN0YXRpYyBib29sIF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtOTYzLS8qIFRyeSB1c2UgYSBuZXcgY2x1c3RlciBmb3IgY3VycmVudCBDUFUgYW5kIGFsbG9jYXRlIGZyb20gaXQuICovXG5tbS9zd2FwZmlsZS5jOjk2NDpzdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtOTY1LVx0XHRcdFx0XHQgICAgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwZmlsZS5jPTEwMTU9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fbGlzdChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xMDI4LVx0XHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xubW0vc3dhcGZpbGUuYzoxMDI5Olx0XHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XG5tbS9zd2FwZmlsZS5jLTEwMzAtXHRcdGlmIChmb3VuZClcbi0tXG5tbS9zd2FwZmlsZS5jPTEwOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTExMjMtXHRcdFx0XHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xubW0vc3dhcGZpbGUuYzoxMTI0Olx0XHRcdGZvdW5kID0gYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBmb2xpbywgb2Zmc2V0KTtcbm1tL3N3YXBmaWxlLmMtMTEyNS1cdFx0fSBlbHNlIHtcbi0tXG5tbS9zd2FwZmlsZS5jPTEzNjc9c3RhdGljIGJvb2wgc3dhcF9hbGxvY19mYXN0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0xMzg2LVx0XHRcdG9mZnNldCA9IGNsdXN0ZXJfb2Zmc2V0KHNpLCBjaSk7XG5tbS9zd2FwZmlsZS5jOjEzODc6XHRcdGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XG5tbS9zd2FwZmlsZS5jLTEzODgtXHR9IGVsc2Uge1xuLS1cbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yMTc4LVx0XHRpZiAoY2x1c3Rlcl9pc191c2FibGUoY2ksIDApKVxubW0vc3dhcGZpbGUuYzoyMTc5Olx0XHRcdG9mZnNldCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgTlVMTCwgcGNwX29mZnNldCk7XG5tbS9zd2FwZmlsZS5jLTIxODAtXHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5MjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFN3YXAgQWxsb2NhdGlvbiBQYXRocyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtZW50YWwgbWFwIG9mIHN3YXAgYWxsb2NhdGlvbiBpcyB0cmlnZ2VyZWQuIEkgc2VlIHRoYXQgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAsIGEgY3JpdGljYWwgZnVuY3Rpb24gZHVyaW5nIHN5c3RlbSBoaWJlcm5hdGlvbiwgaXMgYSBkaXJlY3QgY2FsbGVyIG9mIGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAuIFRoaXMgbWFrZXMgc2Vuc2UsIGFzIGEgaGliZXJuYXRpb24gc3dhcCBhbGxvY2F0aW9uIG5lZWRzIHRvIGJlIGV4dHJlbWVseSByZWxpYWJsZSBhbmQgbGlrZWx5IHBlcmZvcm1zIGEgZnVsbCBzY2FuIHRvIGZpbmQgdGhlIGJlc3QgcG9zc2libGUgY2x1c3Rlci4gRnVydGhlciwgYHN3YXBfYWxsb2NfZmFzdGAgYWxzbyB1c2VzIGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAuIFRoaXMgaW1wbGllcyBhIG1vcmUgcGVyZm9ybWFuY2Utb3JpZW50ZWQgYWxsb2NhdGlvbiBwYXRoIGFsc28gc29tZXRpbWVzIHJldmVydHMgdG8gYSB0aG9yb3VnaCBzZWFyY2gsIHBlcmhhcHMgd2hlbiBoZXVyaXN0aWNzIGZhaWwsIG9yIHdoZW4gb3RoZXIgY29uZGl0aW9ucyBhcmVuJiMzOTt0IG1ldC4KCk5vdywgbXkgY3VyaW9zaXR5IGlzIHBpcXVlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBzd2FwX2FsbG9jX2Zhc3RgIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3dhcCBhbGxvY2F0aW9uIHN1YnN5c3RlbS4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgcG9pbnRzIHRvIGBzd2FwX2FsbG9jX2Zhc3RgPyBJZGVudGlmeWluZyB0aGVzZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB3aGVuIHRoZSBmYXN0IHBhdGggaXMgdHJpZ2dlcmVkIGFuZCB3aGF0IHNjZW5hcmlvcyByZXF1aXJlIGEgbW9yZSByb2J1c3QsIGFsYmVpdCBzbG93ZXIsIHNjYW4gdXNpbmcgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiB3aWxsIGlsbHVtaW5hdGUgaG93IHRoaXMgZW50aXJlIGFsbG9jYXRpb24gc3lzdGVtIGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9hbGxvY19mYXN0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MTM0Nz1zdGF0aWMgYm9vbCBnZXRfc3dhcF9kZXZpY2VfaW5mbyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXG4tLVxubW0vc3dhcGZpbGUuYy0xMzY2LSAqL1xubW0vc3dhcGZpbGUuYzoxMzY3OnN0YXRpYyBib29sIHN3YXBfYWxsb2NfZmFzdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vc3dhcGZpbGUuYy0xMzY4LXtcbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE3NjctXHRsb2NhbF9sb2NrKFx1MDAyNnBlcmNwdV9zd2FwX2NsdXN0ZXIubG9jayk7XG5tbS9zd2FwZmlsZS5jOjE3Njg6XHRpZiAoIXN3YXBfYWxsb2NfZmFzdChmb2xpbykpXG5tbS9zd2FwZmlsZS5jLTE3NjktXHRcdHN3YXBfYWxsb2Nfc2xvdyhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQ0CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdDoKCioqRm9jdXNpbmcgb24gU3dhcCBBbGxvY2F0aW9uKioKCkFscmlnaHQsIHRoZSBjb3JlIGlzc3VlIHNlZW1zIHRvIHJldm9sdmUgYXJvdW5kIHN3YXAgYWxsb2NhdGlvbi4gSSBzZWUgdGhhdCBgZm9saW9fYWxsb2Nfc3dhcGAgZGlyZWN0bHkgY2FsbHMgYHN3YXBfYWxsb2NfZmFzdGAuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdG9yLiBJdCBtZWFucyB0aGF0IGBmb2xpb19hbGxvY19zd2FwYCBpcyB0aGUgaGlnaC1sZXZlbCBlbnRyeSBwb2ludCB3aGVyZSB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBpcyBkZWNpZGVkLiBJdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gQnkgdW5kZXJzdGFuZGluZyBob3cgYGZvbGlvX2FsbG9jX3N3YXBgIHdvcmtzIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIGBzd2FwX2FsbG9jX2Zhc3RgLCBJJiMzOTtsbCBwcm9iYWJseSBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgbG93LWxldmVsIGZ1bmN0aW9ucy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJJiMzOTttIGN1cmlvdXMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBmb2xpbyBzd2FwIGFsbG9jYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCBpbmZvcm1hdGlvbiB0aGUgZnVuY3Rpb24gaG9sZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MjQ4PXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpO1xuLS1cbm1tL3N3YXAuaC0yNTAtLyogRm9yIGludGVybmFsIHVzZSAqL1xubW0vc3dhcC5oOjI1MTpleHRlcm4gdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcC5oLTI1Mi1cdFx0XHRcdFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MjYyPXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMjk3LVx0aWYgKCFmb2xpb19zd2FwcGVkKSB7XG5tbS9zd2FwX3N0YXRlLmM6Mjk4Olx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9zdGFydCwgbnJfcGFnZXMpO1xubW0vc3dhcF9zdGF0ZS5jLTI5OS1cdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwMi1cdFx0XHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcbm1tL3N3YXBfc3RhdGUuYzozMDM6XHRcdFx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xubW0vc3dhcF9zdGF0ZS5jLTMwNC1cdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MjItXHRcdGlmIChjaV9iYXRjaCAhPSAtMSkge1xubW0vc3dhcGZpbGUuYzoxNjIzOlx0XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XG5tbS9zd2FwZmlsZS5jLTE2MjQtXHRcdFx0Y2lfYmF0Y2ggPSAtMTtcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MjgtXHRpZiAoY2lfYmF0Y2ggIT0gLTEpXG5tbS9zd2FwZmlsZS5jOjE2Mjk6XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XG5tbS9zd2FwZmlsZS5jLTE2MzAtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE4ODQ9c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKmdldF9zd2FwX2RldmljZShzd3BfZW50cnlfdCBlbnRyeSlcbi0tXG5tbS9zd2FwZmlsZS5jLTE5MTQtICovXG5tbS9zd2FwZmlsZS5jOjE5MTU6dm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0xOTE2LVx0XHRcdFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcGZpbGUuYz0yMTk5PXZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXG4tLVxubW0vc3dhcGZpbGUuYy0yMjA1LVx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTtcbm1tL3N3YXBmaWxlLmM6MjIwNjpcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpO1xubW0vc3dhcGZpbGUuYy0yMjA3LVx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDU5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhlc2UgdGhvdWdodHMsIGZvcm1hdHRlZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipEZWNvbnN0cnVjdGluZyBTd2FwIENsdXN0ZXIgRnJlZSBFbnRyaWVzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IG1lbnRhbCBtYXAgb2YgdGhlIHN3YXAgc3lzdGVtIGlzIGJlaW5nIHBva2VkIGhlcmUuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBhIGZldyBwbGFjZXM6IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAsIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLiBUaGF0IG1ha2VzIGludHVpdGl2ZSBzZW5zZTsgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBmcmVlaW5nIHVwIHNwYWNlIGluIHRoZSBzd2FwIGNhY2hlLCBhbmQgdGhlc2UgYXJlIGFsbCByZWxhdGVkIGFjdGl2aXRpZXMgLSBlaXRoZXIgcmVtb3ZpbmcgZW50cmllcyBkaXJlY3RseSwgcHV0dGluZyBuZXcgb25lcywgb3IgZnJlZWluZyB0aGUgc2xvdCBkdXJpbmcgaGliZXJuYXRpb24uCgpCdXQgbm93IG15IGF0dGVudGlvbiBpcyBjYXVnaHQgYnkgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIGRpZyBkZWVwZXIuIFdoaWxlIEkga25vdyAqd2hhdCogYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgKmRvZXMqLCB1bmRlcnN0YW5kaW5nIHdoZXJlIGFuZCB3aHkgd2UgKnB1dCogZW50cmllcyBpbnRvIHRoZXNlIGNsdXN0ZXJzIGlzIGNydWNpYWwgZm9yIG9wdGltaXppbmcgc3dhcCBvcGVyYXRpb25zLCBwYXJ0aWN1bGFybHkgaW4gaGlnaC1sb2FkIHNjZW5hcmlvcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyYCB0byBpdHMgY2FsbGVycy4gS25vd2luZyB0aGF0IGNvbnRleHQgZ2l2ZXMgbWUgYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2Ygd2h5IGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGlzIGNhbGxlZC4gSXQmIzM5O2xsIGdpdmUgbWUgY2x1ZXMgdG8gd2hlcmUgdGhlIHJlYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MgZXhpc3QuIElzIHRoaXMgb3BlcmF0aW9uIGJlaW5nIHRyaWdnZXJlZCB0b28gb2Z0ZW4/IERvZXMgdGhlIGNhbGxlciBjb250cmlidXRlIHRvIHVubmVjZXNzYXJ5IGFsbG9jYXRpb25zPyBLbm93aW5nIHRoZSBjYWxsaW5nIGhpZXJhcmNoeSB3aWxsIHByb3ZpZGUgdGhlIGFuc3dlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N3YXBfcHV0X2VudHJpZXNfY2x1c3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTE1Mzc9c3RhdGljIHZvaWQgX19zd2FwX2NsdXN0ZXJfcHV0X2VudHJ5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcGZpbGUuYy0xNTc1LS8qKlxubW0vc3dhcGZpbGUuYzoxNTc2OiAqIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlciAtIERlY3JlYXNlIHRoZSBzd2FwIGNvdW50IG9mIHNsb3RzIHdpdGhpbiBvbmUgY2x1c3RlclxubW0vc3dhcGZpbGUuYy0xNTc3LSAqIEBzaTogVGhlIHN3YXAgZGV2aWNlLlxuLS1cbm1tL3N3YXBmaWxlLmMtMTU4Ny0gKi9cbm1tL3N3YXBmaWxlLmM6MTU4ODpzdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxubW0vc3dhcGZpbGUuYy0xNTg5LVx0XHRcdFx0ICAgICBwZ29mZl90IG9mZnNldCwgaW50IG5yLFxuLS1cbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMTg0My1cbm1tL3N3YXBmaWxlLmM6MTg0NDpcdHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzaSwgc3dwX29mZnNldChlbnRyeSksIG5yX3BhZ2VzLCBmYWxzZSk7XG5tbS9zd2FwZmlsZS5jLTE4NDUtfVxuLS1cbm1tL3N3YXBmaWxlLmM9MjEyND12b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXG4tLVxubW0vc3dhcGZpbGUuYy0yMTQwLVx0XHRjbHVzdGVyX2VuZCA9IG1pbihyb3VuZF91cChvZmZzZXQgJiM0MzsgMSwgU1dBUEZJTEVfQ0xVU1RFUiksIGVuZF9vZmZzZXQpO1xubW0vc3dhcGZpbGUuYzoyMTQxOlx0XHRzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc2ksIG9mZnNldCwgY2x1c3Rlcl9lbmQgLSBvZmZzZXQsIHRydWUpO1xubW0vc3dhcGZpbGUuYy0yMTQyLVx0XHRvZmZzZXQgPSBjbHVzdGVyX2VuZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyNTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQW5hbHl6aW5nIHRoZSBTd2FwIEVudHJ5IEZ1bmN0aW9ucyoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhpcyBzd2FwIGVudHJ5IGJ1c2luZXNzLiBJdCBsb29rcyBsaWtlIGBmb2xpb19wdXRfc3dhcGAgYW5kIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zLCBzaW5jZSB0aGV5IGJvdGggY2FsbCBgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBjbGVhciBpbmRpY2F0b3IgdGhhdCBgZm9saW9fcHV0X3N3YXBgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgaW52ZXN0aWdhdGlvbi4gSXQmIzM5O3MgdGhlIGhpZ2hlc3QtbGV2ZWwgZW50cnkgcG9pbnQsIHNvIHVuZGVyc3RhbmRpbmcgKml0KiB3aWxsIGxpa2VseSBzaGVkIGxpZ2h0IG9uIHRoZSBvdmVyYWxsIHByb2Nlc3MuCgpCdXQsIEkgc2hvdWxkIGFsc28gZG91YmxlLWNoZWNrIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZXJlIGFyZSBzb21lIGtleSB0aGluZ3MgaGFwcGVuaW5nIGluICp0aGF0KiBmdW5jdGlvbiB0aGF0IGFyZW4mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cyBqdXN0IGZyb20gbG9va2luZyBhdCBgZm9saW9fcHV0X3N3YXBgLiBHb3R0YSBiZSB0aG9yb3VnaC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM9OTI9dm9pZCBnbWFwX2hlbHBlcl96YXBfb25lX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxuLS1cbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYy0xMTItXHRcdGRlY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7XG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM6MTEzOlx0XHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzbCwgMSk7XG5hcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmMtMTE0LVx0XHRwdGVfY2xlYXIobW0sIHZtYWRkciwgcHRlcCk7XG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9Mzk4PWludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xuaW5jbHVkZS9saW51eC9zd2FwLmg6Mzk5OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucik7XG5pbmNsdWRlL2xpbnV4L3N3YXAuaC00MDAtXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmg9NDQyPXN0YXRpYyBpbmxpbmUgaW50IHN3YXBfZHVwX2VudHJ5X2RpcmVjdChzd3BfZW50cnlfdCBlbnQpXG4tLVxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDQ2LVxuaW5jbHVkZS9saW51eC9zd2FwLmg6NDQ3OnN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnQsIGludCBucilcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQ0OC17XG4tLVxubW0vbWFkdmlzZS5jPTY1Mz1zdGF0aWMgaW50IG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21hZHZpc2UuYy02OTYtXHRcdFx0XHRucl9zd2FwIC09IG5yO1xubW0vbWFkdmlzZS5jOjY5NzpcdFx0XHRcdHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KGVudHJ5LCBucik7XG5tbS9tYWR2aXNlLmMtNjk4LVx0XHRcdFx0Y2xlYXJfbm9ucHJlc2VudF9wdGVzKG1tLCBhZGRyLCBwdGUsIG5yKTtcbi0tXG5tbS9tZW1vcnkuYz0xODY2PXN0YXRpYyBpbmxpbmUgaW50IHphcF9ub25wcmVzZW50X3B0ZXMoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tZW1vcnkuYy0xODk5LVx0XHRyc3NbTU1fU1dBUEVOVFNdIC09IG5yO1xubW0vbWVtb3J5LmM6MTkwMDpcdFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QoZW50cnksIG5yKTtcbm1tL21lbW9yeS5jLTE5MDEtXHR9IGVsc2UgaWYgKHNvZnRsZWFmX2lzX21pZ3JhdGlvbihlbnRyeSkpIHtcbi0tXG5tbS9zaG1lbS5jPTk3NT1zdGF0aWMgbG9uZyBzaG1lbV9mcmVlX3N3YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vc2htZW0uYy05OTUtXHRpZiAobnJfcGFnZXMpXG5tbS9zaG1lbS5jOjk5NjpcdFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QocmFkaXhfdG9fc3dwX2VudHJ5KHJhZHN3YXApLCBucl9wYWdlcyk7XG5tbS9zaG1lbS5jLTk5Ny1cbi0tXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTE4MDAtICogTk9URTogVGhlIGNhbGxlciBhbHNvIGhhcyB0byBlbnN1cmUgdGhlcmUgaXMgbm8gcmFjZWQgY2FsbCB0b1xubW0vc3dhcGZpbGUuYzoxODAxOiAqIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0IG9uIGl0cyBzd2FwIGVudHJ5IGJlZm9yZSB0aGlzIGhlbHBlciByZXR1cm5zLCBvclxubW0vc3dhcGZpbGUuYy0xODAyLSAqIHRoZSBzd2FwIGNvdW50IG1heSB1bmRlcmZsb3cuXG4tLVxubW0vc3dhcGZpbGUuYz0xOTk4PWludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXBmaWxlLmMtMjAyNS0gKiBvbmx5IGJlIGRvbmUgYnkgZm9saW9fZHVwX3N3YXAsIHdoaWNoIGFsc28gbG9ja3MgdGhlIGZvbGlvLiBCdXQgYSBjb25jdXJyZW50XG5tbS9zd2FwZmlsZS5jOjIwMjY6ICogZGVjcmVhc2Ugb2Ygc3dhcCBjb3VudCBpcyBwb3NzaWJsZSB0aHJvdWdoIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0LCBzbyB0aGlzXG5tbS9zd2FwZmlsZS5jLTIwMjctICogbWF5IHJldHVybiBhIGZhbHNlIHBvc2l0aXZlLlxuLS1cbm1tL3N3YXBmaWxlLmM9MjA5OT1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjExMS0vKipcbm1tL3N3YXBmaWxlLmM6MjExMjogKiBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCgpIC0gUmVsZWFzZSByZWZlcmVuY2Ugb24gcmFuZ2Ugb2Ygc3dhcCBlbnRyaWVzIGFuZFxubW0vc3dhcGZpbGUuYy0yMTEzLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNsYWltIHRoZWlyIGNhY2hlIGlmIG5vIG1vcmUgcmVmZXJlbmNlcyByZW1haW4uXG4tLVxubW0vc3dhcGZpbGUuYy0yMTIzLSAqL1xubW0vc3dhcGZpbGUuYzoyMTI0OnZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcbm1tL3N3YXBmaWxlLmMtMjEyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTgwCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkZvY3VzaW5nIG9uIFN3YXAgRW50cnkgTWFuYWdlbWVudCoqCgpSaWdodCwgc28gYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBwb3BzIHVwIGluIGEgZmV3IGtleSBwbGFjZXM6IGB6YXBfbm9ucHJlc2VudF9wdGVzYCwgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBhbmQgYHNobWVtX2ZyZWVfc3dhcGAuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgZnVuZGFtZW50YWwgdG8gaG93IHdlJiMzOTtyZSBoYW5kbGluZyBzd2FwIGVudHJpZXMuIFNlZW1zIGxpa2UgYSBnb29kIHBsYWNlIHRvIGNvbmNlbnRyYXRlIG15IGF0dGVudGlvbi4gSXQmIzM5O3MgaGFuZGxpbmcgdGhlIGRpcmVjdCByZWxlYXNlIG9mIHRob3NlIGVudHJpZXMsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZXR0ZXIuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCB3aGVyZSB3ZSYjMzk7cmUgYWN0dWFsbHkgKnB1dHRpbmcqIHRob3NlIGVudHJpZXMuCgpHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayBpdCYjMzk7cyB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCB0byBzZWUgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgd2UgYXJlIGdvaW5nIHRvIHBlcmZvcm0gYXQgdGhhdCBwb2ludC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmM9MjUyPXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0yNjEtXG5tbS9zd2FwX3N0YXRlLmM6MjYyOnN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXBfc3RhdGUuYy0yNjMtXHRcdFx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYz0zMjE9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMyNS1cbm1tL3N3YXBfc3RhdGUuYzozMjY6XHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG5tbS9zd2FwX3N0YXRlLmMtMzI3LVx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9NDE0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy00NjktXHRcdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0NzA6XHRcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbm1tL3N3YXBfc3RhdGUuYy00NzEtXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNpLVx1MDAzZWxvY2spO1xuLS1cbm1tL3N3YXBfc3RhdGUuYy00ODAtXHRcdHNwaW5fbG9jayhcdTAwMjZjaS1cdTAwM2Vsb2NrKTtcbm1tL3N3YXBfc3RhdGUuYzo0ODE6XHRcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbm1tL3N3YXBfc3RhdGUuYy00ODItXHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNpLVx1MDAzZWxvY2spO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI5MQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTd2FwIENhY2hlIERlbGV0aW9uKioKClJpZ2h0LCBzbyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgYSBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCYjMzk7cyBpdHMgcHVycG9zZT8gR2l2ZW4gdGhlIG5hbWUsIGl0JiMzOTtzIGludm9sdmVkIGluIGRlbGV0aW5nIGVudHJpZXMgZnJvbSB0aGUgc3dhcCBjYWNoZSwgbGlrZWx5IHJlbGF0ZWQgdG8gcGFnZS1vdXQgb3BlcmF0aW9ucy4gQnV0IHRoZSByZWFsIHF1ZXN0aW9uIGlzLCB3aGF0JiMzOTtzICppbml0aWF0aW5nKiB0aGlzIGRlbGV0aW9uPyBUaGUgY29kZSBzdHJ1Y3R1cmUgc2F5cyB0aGF0IGl0IGNhbGxzIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBpbnRlcm5hbCBvcGVyYXRpb24gd2l0aGluIHRoZSBzd2FwIGNhY2hlIG1hbmFnZW1lbnQuCgpUaGUgbW9yZSBjcnVjaWFsIHBpZWNlIG9mIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYXJnZXIgY29udGV4dCBpczogKndobyogb3IgKndoYXQqIGlzIGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gPyBJcyBpdCB0aGUgcGFnZSByZWNsYWltIG1lY2hhbmlzbT8gSXMgaXQgYSBiYWNrZ3JvdW5kIHByb2Nlc3M/IElzIGl0IHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBtZW1vcnkgbWFuYWdlbWVudD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIHdpbGwgcmV2ZWFsIHRoZSB0cmlnZ2VyIGZvciB0aGVzZSBkZWxldGlvbnMsIGFuZCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4gSXQmIzM5O3MgdGhlIGVzc2VudGlhbCBuZXh0IHN0ZXAgaW4gdHJhY2luZyB0aGUgY2FsbCBjaGFpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwLmg9MzE5PXZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMC1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjItXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuLS1cbm1tL3N3YXAuaD00NTE9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcC5oLTQ1NC1cbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NTYtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI2Mj1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwOC0vKipcbm1tL3N3YXBfc3RhdGUuYzozMDk6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMxMC0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjAtICovXG5tbS9zd2FwX3N0YXRlLmM6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcF9zdGF0ZS5jLTMyMi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzM0LSAqXG5tbS9zd2FwX3N0YXRlLmM6MzM1OiAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XG4tLVxubW0vc3dhcF9zdGF0ZS5jPTM0MT12b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTM0Ni1cdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG5tbS9zd2FwX3N0YXRlLmM6MzQ3Olx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTtcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MTgtXHRcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxubW0vc3dhcGZpbGUuYzoxNjE5Olx0XHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXG5tbS9zd2FwZmlsZS5jLTE2MjAtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTY4Mj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzM4LVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG5tbS92bXNjYW4uYzo3Mzk6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xubW0vdm1zY2FuLmMtNzQwLVx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDEzOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mzk2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTQ3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN3YXAgYW5kIEhpYmVybmF0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24sIGFzIGl0JiMzOTtzIGRpcmVjdGx5IGNhbGxlZCBieSBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AuIEkgc2hvdWxkIGFsc28gZXhhbWluZSBgX19zd2FwX3RhYmxlX2dldGAgYW5kIGBfX3N3YXBfdGFibGVfc2V0YCB0byBjb25maXJtIGlmIHRoZXJlIGFyZSBvdGhlciBkZXBlbmRlbmNpZXMuCgpGcm9tIHRoZSBwYXRjaCwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBUaGlzIHBvaW50cyBtZSB0b3dhcmRzIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4gVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHNlZW0gdG8gYmU6CgoqICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gCiogICBgZm9saW9fYWxsb2Nfc3dhcGAKKiAgIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAKKiAgIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AKKiAgIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAKKiAgIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgCgpXYWl0IGEgbWludXRlLCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhcmUgc3BlY2lmaWNhbGx5IGxpbmtlZCB0byBoaWJlcm5hdGlvbiEgVGhhdCB0cmlnZ2VycyBhIG1lbnRhbCBub3RlOiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaHVuY2ggaXMgY29uZmlybWVkOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYFNXUF9UQl9ISUJgIGFuZCBtb2RpZmllcyBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBpbXBseWluZyB0aGF0IGBDT05GSUdfSElCRVJOQVRJT05gIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFNpbmNlIHRoaXMgaXMgYWxsIHN3YXAtcmVsYXRlZCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBgQ09ORklHX1NXQVBgIGlzIGFsc28gYSBkZXBlbmRlbmN5LiBMZXQgbWUgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuCgpPa2F5LCBjaGVja2luZyBgbW0vS2NvbmZpZ2AgZm9yIGBTV0FQYCBjb25maXJtcyBgQ09ORklHX1NXQVBgIGFzIHRoZSBuYW1lLiBTaW1pbGFybHksIGNoZWNraW5nIGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AgZm9yIGBISUJFUk5BVElPTmAgY29uZmlybXMgdGhhdCBgQ09ORklHX0hJQkVSTkFUSU9OYCBpcyB0aGUgY29ycmVjdCBuYW1lLiBUaGF0IGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5IHRyZWU6IEJvdGggU1dBUCBhbmQgSElCRVJOQVRJT04gYXJlIHJlcXVpcmVkIGZvciB0aGlzIHBhdGNoLgoKSSYjMzk7bGwgcmV2aWV3IHRoZSBjb2RlIGNoYW5nZXMgaW4gYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgIGFuZCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYC4gSW4gYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCBJIHNlZSBhIHNwZWNpYWwgY2FzZTogd2hlbiBgZm9saW9gIGlzIE5VTEwsIGFuIGFsbG9jYXRpb24gaXMgcGVyZm9ybWVkIHNwZWNpZmljYWxseSBmb3IgaGliZXJuYXRpb24uIFRoaXMgYWxzbyBjb25maXJtcyBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhcyBhIGNydWNpYWwgZnVuY3Rpb24gdGhhdCBuZWVkcyBhIGNsb3NlciBsb29rLgoKVGhlbiwgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgaGFuZGxlcyB0aGUgYFNXUF9UQl9ISUJgIGZsYWcsIHdoaWNoIGlzIHVzZWQgZm9yIGhpYmVybmF0aW9uLgoKRmluYWxseSwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBpcyBhbHNvIGltcG9ydGFudCwgYXMgaXQgaGFuZGxlcyB0aGUgZnJlZWluZyBvZiBoaWJlcm5hdGlvbiBzbG90cy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiBhIHZhbGlkYXRpb24gY2hlY2sgYW5kIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3Mgbm90IGJlaW5nIG1pcy11c2VkLiBJdCYjMzk7cyBjYWxsZWQgYnkgYF9fc3dhcF9jYWNoZV9hbGxvY2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSYjMzk7bGwgYWxzbyBhZGQgYF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvYCB0byB0aGUgZm9jdXMgbGlzdCBhcyBpdCBjYWxscyBgX19zd2FwX2NhY2hlX2FsbG9jYC4KClRoZXJlZm9yZSwgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmU6CgoqICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIChhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY2AgYW5kIGBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpb2ApCiogICBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgCiogICBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YAoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTM5MjU9c3RhdGljIGludCBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWQoc3RydWN0IGZvbGlvICpmb2xpbywgdW5zaWduZWQgaW50IG5ld19vcmRlcixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQwMjgtXHRcdFx0aWYgKGNpKSB7XG5tbS9odWdlX21lbW9yeS5jOjQwMjk6XHRcdFx0XHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgZm9saW8sIG5ld19mb2xpbyk7XG5tbS9odWdlX21lbW9yeS5jLTQwMzAtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vbWlncmF0ZS5jLTY1Ni1cdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXG5tbS9taWdyYXRlLmM6NjU3Olx0XHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgZm9saW8sIG5ld2ZvbGlvKTtcbm1tL21pZ3JhdGUuYy02NTgtXHRlbHNlXG4tLVxubW0vc2htZW0uYz0yMDg5PXN0YXRpYyBpbnQgc2htZW1fcmVwbGFjZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKipmb2xpb3AsIGdmcF90IGdmcCxcbi0tXG5tbS9zaG1lbS5jLTIxMjYtXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2tfaXJxKG9sZCk7XG5tbS9zaG1lbS5jOjIxMjc6XHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgb2xkLCBuZXcpO1xubW0vc2htZW0uYy0yMTI4LVx0bWVtX2Nncm91cF9yZXBsYWNlX2ZvbGlvKG9sZCwgbmV3KTtcbi0tXG5tbS9zd2FwLmg9MzIxPXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMi1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7XG5tbS9zd2FwLmg6MzIzOnZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjQtXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xuLS1cbm1tL3N3YXAuaD00NTU9c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi0tXG5tbS9zd2FwLmgtNDU5LVxubW0vc3dhcC5oOjQ2MDpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NjEtXHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldylcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzQxPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzUzLS8qKlxubW0vc3dhcF9zdGF0ZS5jOjM1NDogKiBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyAtIFJlcGxhY2UgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZS5cbm1tL3N3YXBfc3RhdGUuYy0zNTUtICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzY2LSAqL1xubW0vc3dhcF9zdGF0ZS5jOjM2Nzp2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwX3N0YXRlLmMtMzY4LVx0XHRcdFx0c3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTM0OQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDQyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWZpbmluZyB0aGUgU3dhcCBhbmQgSGliZXJuYXRpb24gQVBJIEZvY3VzKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoZXNlIHN3YXAgYW5kIGhpYmVybmF0aW9uIEFQSXMuIEl0IGxvb2tzIGxpa2UgYF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvYCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgaXQmIzM5O3MgY2FsbGVkIGJ5IGBfX2ZvbGlvX2ZyZWV6ZV9hbmRfc3BsaXRfdW5tYXBwZWRgLCBgX19mb2xpb19taWdyYXRlX21hcHBpbmdgLCBhbmQgYHNobWVtX3JlcGxhY2VfZm9saW9gLiBUaG9zZSBhcmUgYWxsIGludGVyZXN0aW5nIGNvbnRleHRzLgoKTGV0IG1lIGp1c3Qgc3VtbWFyaXplIHRoZSBjdXJyZW50IGZvY3VzOgoqICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gCiogICBgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW9gCiogICBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YAoqICAgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YAoKSG1tLCBhcmUgd2UgbWlzc2luZyBhbnl0aGluZz8gTGV0JiMzOTtzIHNlZS4uLiBBaCwgd2hhdCBhYm91dCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYD8gVGhhdCYjMzk7cyBjYWxsZWQgYnkgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyYC4gQW5kIGBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXJgIGlzIHRoZW4gY2FsbGVkIGJ5IGBmb2xpb19wdXRfc3dhcGAgYW5kIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAuIFRoYXQgbWFrZXMgYGZvbGlvX3B1dF9zd2FwYCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCB3b3J0aCBjb25zaWRlcmluZy4gQW5kIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBjYWxsZWQgYnkgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fcmVtb3ZlX21hcHBpbmdgLCBzbyBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGRlZmluaXRlbHkgcmVsZXZhbnQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcmVmaW5lIHRoaXMgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLiBNeSB1cGRhdGVkIGZvY3VzIHN5bWJvbHMgYXJlOgoKKiAgIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYAoqICAgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAKKiAgIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAKKiAgIGBmb2xpb19wdXRfc3dhcGAKKiAgIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAKKiAgIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AKClRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc2V0IG9mIGVudHJ5IHBvaW50cyB0aGF0IGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZC4KCkZpbmFsbHksIEkgc2hvdWxkIGNoZWNrIHRoZSBjb25maWcgbmFtZXMuIFllcywgYEhJQkVSTkFUSU9OYCBhbmQgYFNXQVBgLCBzbyBpdCBsb29rcyBjb3JyZWN0IHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgY29uZmlnIG5hbWUuIE5vdywgbGV0JiMzOTtzIGp1c3QgcXVpY2tseSBjaGVjayBpZiB0aGUgYFNXQVBgIGNvbmZpZyBkZXBlbmRzIG9uIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1dBUCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL21pcHMvS2NvbmZpZz0xMjYzPWNvbmZpZyBNSVBTX1NQUkFNXG4tLVxuYXJjaC9taXBzL0tjb25maWctMTI2NS1cbmFyY2gvbWlwcy9LY29uZmlnOjEyNjY6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXHRib29sXG4tLVxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxuLS1cbmFyY2gvc2gvS2NvbmZpZy0xMjgtXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXG5hcmNoL3NoL0tjb25maWctMTMwLVx0Ym9vbFxuLS1cbm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXG4tLVxubW0vS2NvbmZpZy0xMS1cbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXG5tbS9LY29uZmlnLTEzLVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NjUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBTV0FQIERlcGVuZGVuY2llcyBpbiBtbS9LY29uZmlnKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgU1dBUGAgZmVhdHVyZSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB3aGVyZSBJIGFsd2F5cyBzdGFydCB3aGVuIGRlYWxpbmcgd2l0aCBLY29uZmlnLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgZXhwZWN0IHRvIGZpbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIGNyaXRpY2FsbHksIHRoZWlyIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIHRlbGwgbWUgd2hhdCBvdGhlciBmZWF0dXJlcyBvciBvcHRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBmb3IgYFNXQVBgIHRvIGV2ZW4gYmUgY29uc2lkZXJlZCwgb3IgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGhvdyBgU1dBUGAgZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBpbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NjUKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgU3dhcCBhbmQgSGliZXJuYXRpb24gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoZSBzd2FwIGZ1bmN0aW9uYWxpdHkgaXMgc2V0IHVwIGluIHRoaXMgc3lzdGVtLiBNeSBpbml0aWFsIHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBgU1dBUGAgaGluZ2VzIG9uIGEgZmV3IGtleSBwcmVyZXF1aXNpdGVzLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGRlcGVuZCBvbiB0aGUgcHJlc2VuY2Ugb2YgdGhlIGBNTVVgIChNZW1vcnkgTWFuYWdlbWVudCBVbml0KSBhbmQgYEJMT0NLYCBmZWF0dXJlcywgYnV0IGNydWNpYWxseSwgaXQgKm11c3Qgbm90KiBpbmNsdWRlIGBBUkNIX05PX1NXQVBgLiBgQkxPQ0tgIGlzIHByZXR0eSBtdWNoIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbiwgc28gdGhhdCYjMzk7cyBwcm9iYWJseSBub3Qgd2hlcmUgYW55IGlzc3VlIGxpZXMuIEp1c3QgdG8gYmUgc3VyZSBvZiB0aGUgd2hvbGUgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBISUJFUk5BVElPTmAgbm93LCBhbmQgSSYjMzk7bGwgZmluZCB0aGF0IGluIGBrZXJuZWwvcG93ZXIvS2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgcmVxdWlyZW1lbnRzIGZvciBoaWJlcm5hdGlvbiBpbnRlcmFjdCB3aXRoIHRoZXNlIG90aGVyIGNvbmZpZ3VyYXRpb25zLiBJIHRoaW5rIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUsIHNvIGxldCYjMzk7cyBjb250aW51ZSB0byBpbnZlc3RpZ2F0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvcG93ZXIvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMzg6XHRjb25maWcgSElCRVJOQVRJT05cbiAgMzk6XHRcdGJvb2wgXCYjMzQ7SGliZXJuYXRpb24gKGFrYSAmIzM5O3N1c3BlbmQgdG8gZGlzayYjMzk7KVwmIzM0O1xuICA0MDpcdFx0ZGVwZW5kcyBvbiBTV0FQIFx1MDAyNlx1MDAyNiBBUkNIX0hJQkVSTkFUSU9OX1BPU1NJQkxFXG4gIDQxOlx0XHRzZWxlY3QgSElCRVJOQVRFX0NBTExCQUNLU1xuICA0MjpcdFx0c2VsZWN0IENSQzMyXG4gIDQzOlx0XHRzZWxlY3QgQ1JZUFRPXG4gIDQ0Olx0XHRzZWxlY3QgQ1JZUFRPX0xaT1xuICA0NTpcdFx0c2VsZWN0IENSWVBUT19MWjRcbiAgNDY6XHRcdGhlbHBcbiAgNDc6XHRcdCAgRW5hYmxlIHRoZSBzdXNwZW5kIHRvIGRpc2sgKFNURCkgZnVuY3Rpb25hbGl0eSwgd2hpY2ggaXMgdXN1YWxseVxuICA0ODpcdFx0ICBjYWxsZWQgXCYjMzQ7aGliZXJuYXRpb25cJiMzNDsgaW4gdXNlciBpbnRlcmZhY2VzLiAgU1REIGNoZWNrcG9pbnRzIHRoZVxuICA0OTpcdFx0ICBzeXN0ZW0gYW5kIHBvd2VycyBpdCBvZmY7IGFuZCByZXN0b3JlcyB0aGF0IGNoZWNrcG9pbnQgb24gcmVib290LlxuICA1MDpcdFxuICA1MTpcdFx0ICBZb3UgY2FuIHN1c3BlbmQgeW91ciBtYWNoaW5lIHdpdGggJiMzOTtlY2hvIGRpc2sgXHUwMDNlIC9zeXMvcG93ZXIvc3RhdGUmIzM5O1xuICA1MjpcdFx0ICBhZnRlciBwbGFjaW5nIHJlc3VtZT0vZGV2L3N3YXBwYXJ0aXRpb24gb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmVcbiAgNTM6XHRcdCAgaW4geW91ciBib290bG9hZGVyJiMzOTtzIGNvbmZpZ3VyYXRpb24gZmlsZS5cbiAgNTQ6XHRcbiAgNTU6XHRcdCAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgdGhlIGFkZGl0aW9uYWwgdXNlcmxhbmQgdG9vbHMgYXZhaWxhYmxlXG4gIDU2Olx0XHQgIGZyb20gXHUwMDNjaHR0cDovL3N1c3BlbmQuc2YubmV0XHUwMDNlLlxuICA1NzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTUzMgoJCQkJCQkJb3V0cHV0OiAxODIKCQkJCQkJCXRob3VnaHRzOiA2MDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSGliZXJuYXRpb24gTG9naWMgYW5kIFN3YXAgQ2FjaGUgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYXMgZXhwZWN0ZWQsIGhpYmVybmF0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgY29udGluZ2VudCBvbiBib3RoIGBTV0FQYCBhbmQgYEhJQkVSTkFUSU9OYCBiZWluZyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCYjMzk7cyBhIGdpdmVuLiBOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gdGhlIHNwZWNpZmljcyBvZiB0aGlzIHBhdGNoLgoKSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiB0aGUgYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaW4gaG93IGl0IGhhbmRsZXMgZXhpc3Rpbmcgc3dhcCB0YWJsZSBlbnRyaWVzLiBUaGUgY3JpdGljYWwgcGFydCBpcyBjaGVja2luZyBmb3Igc2hhZG93IGVudHJpZXMgbm93IChgIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKWApLCB3aGljaCBoYXMgaW1wbGljYXRpb25zIGZvciBoaWJlcm5hdGlvbi4gVGhlIGFpbSBpcyB0byBwcmV2ZW50IGhpYmVybmF0aW9uIHNsb3RzIGZyb20gbWlzdGFrZW5seSBnZXR0aW5nIGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc3RhdGUgZm9yIHRoZSBoaWJlcm5hdGlvbiBzbG90IChgU1dQX1RCX0hJQmApLiBJdCBhbHNvIG1vZGlmaWVzIGhvdyBoaWJlcm5hdGlvbiBzbG90cyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZC4KCkkmIzM5O3ZlIGlkZW50aWZpZWQga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYGZvbGlvX3B1dF9zd2FwYCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cy4KCkkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gRm9ydHVuYXRlbHksIGFmdGVyIGEgcXVpY2sgY2hlY2ssIGl0JiMzOTtzIGNsZWFyIHRoYXQgYGZvbGlvX3B1dF9zd2FwYCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAgYXJlIGFsbCBub24tc3RhdGljLCBpbmRpY2F0aW5nIHRoZXkmIzM5O3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGF0aW9uIHVuaXRzLiBUaGlzIGlzIGFzIEkgZXhwZWN0LiBUaGUgY2hhbmdlIGxvb2tzIHNvbGlkIGFuZCB3aWxsIHdvcmsgYXMgaW50ZW5kZWQgd2l0aCBzd2FwIG9wZXJhdGlvbnMgYW5kIGhpYmVybmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtISUJFUk5BVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O2ZvbGlvX3B1dF9zd2FwJiMzNDssCiAgICAmIzM0O3N3YXBfcHV0X2VudHJpZXNfZGlyZWN0JiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtISUJFUk5BVElPTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfY2FjaGVfYWxsb2NfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O3N3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90JiMzNDssCiAgICAmIzM0O2ZvbGlvX3B1dF9zd2FwJiMzNDssCiAgICAmIzM0O3N3YXBfcHV0X2VudHJpZXNfZGlyZWN0JiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMTM6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzd2FwIHNsb3QgbWFuYWdlbWVudCB0byBleHBsaWNpdGx5IHRyYWNrIGhpYmVybmF0aW9uIHNsb3RzIHVzaW5nIGEgbmV3IGZsYWcgKFNXUF9UQl9ISUIpIGFuZCBwcmV2ZW50cyB0aGVtIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIHN3YXAgc3RhdGUgdHJhY2tpbmcgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBhcmlzaW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOGRhODY3MGU4OTU0MWI2M2U0YmU0ODRlNWE0MjEzMzUyNzM3OTk3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMTEgMTM6NTA6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggYjc2ZWIzZDg3NmZkNy4uNjM0MWYxYmZmZmEyMyAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMTgxLDkgJiM0MzsxODEsMTQgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJb2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTsKIAlpZiAoc3dwX3RiX2lzX2ZvbGlvKG9sZF90YikpCiAJCXJldHVybiAtRUVYSVNUOwotCWlmICghX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpCiYjNDM7CS8qCiYjNDM7CSAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuCiYjNDM7CSAqIENsdXN0ZXIgcmVhZGFoZWFkIHdhbGtzIHJhdyBvZmZzZXQgcmFuZ2VzLCBzbyBpdCBjYW4gbGFuZCBvbgomIzQzOwkgKiBzbG90cyB0aGF0IGFyZSBmcmVlLCBiYWQsIG9yIG93bmVkIGJ5IGhpYmVybmF0aW9uLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKQogCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoc2hhZG93cCAmYW1wOyZhbXA7IHN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSkKJiM0MzsJaWYgKHNoYWRvd3ApCiAJCSpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpOwogCWlmIChtZW1jZ19pZCkKIAkJKm1lbWNnX2lkID0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZik7CkBAIC0xOTYsNyAmIzQzOzIwMSw3IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCWNpX2VuZCA9IGNpX29mZiAmIzQzOyBucjsKIAlkbyB7CiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7Ci0JCWlmICh1bmxpa2VseShzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fAomIzQzOwkJaWYgKHVubGlrZWx5KCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwKIAkJCSAgICAgIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpIHx8CiAJCQkgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fAogCQkJICAgICAobWVtY2dfaWQgJmFtcDsmYW1wOyAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSkKZGlmZiAtLWdpdCBhL21tL3N3YXBfdGFibGUuaCBiL21tL3N3YXBfdGFibGUuaAppbmRleCBlNjYxM2U2MmY4ZDBmLi5iOTE2YTY0OTM1MjFhIDEwMDY0NAotLS0gYS9tbS9zd2FwX3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF90YWJsZS5oCkBAIC0zMCw2ICYjNDM7MzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7CiAgKiBQRk46ICAgICAgfFNXQVBfQ09VTlR8WnwtLS0tLS0gUEZOIC0tLS0tLS18MTB8IC0gQ2FjaGVkIHNsb3QKICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKQogICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90CiYjNDM7ICogSGliZXJuOiAgIHwgICAgMCAgICAgfC0tLS0tLS0gMSAtLS0tLS0tfDEwMDAwfCAtIEhpYmVybmF0aW9uIHNsb3QKICAqCiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsCiAgKiBhbmQgdG9nZXRoZXIgdGhleSBmb3JtIHRoZSBgU1dQX1RCX0ZMQUdTX0JJVFNgIHdpZGUgZmxhZ3MgZmllbGQuCkBAIC01NCw2ICYjNDM7NTUsMTAgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUgewogICogICBhbGlnbmVkIHBvaW50ZXJzLgogICoKICAqIC0gQmFkOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQsIHByb3RlY3RzIHN3YXAgaGVhZGVyIG9yIGhvbGVzIG9uIHN3YXAgZGV2aWNlcy4KJiM0MzsgKgomIzQzOyAqIC0gSGliZXJuOiBTd2FwIHNsb3QgaXMgcmVzZXJ2ZWQgYnkgaGliZXJuYXRpb24gZm9yIHRoZSBzdXNwZW5kIGltYWdlLCBhbmQKJiM0MzsgKiAgIG11c3QgbmV2ZXIgZW50ZXIgdGhlIHN3YXAgY2FjaGUuIFRoZSBjb3VudCBmaWVsZCBpcyBrZXB0IDAgc28gaXQgbmV2ZXIKJiM0MzsgKiAgIHJlYWRzIGFzIGEgc2xvdCBpbiB1c2UuCiAgKi8KIAogLyogTlVMTCBFbnRyeSwgYWxsIDAgKi8KQEAgLTgxLDYgJiM0Mzs4Niw5IEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHsKIC8qIEJhZCBzbG90OiBlbmRzIHdpdGggMGIxMDAwIGFuZCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqLwogI2RlZmluZSBTV1BfVEJfQkFECQkoKH4wVUwpICZsdDsmbHQ7IDMpCiAKJiM0MzsvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCwgbm8gY291bnQsIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovCiYjNDM7I2RlZmluZSBTV1BfVEJfSElCCQkoKCh+MFVMKSAmbHQ7Jmx0OyA0KSAmYW1wOyB+U1dQX1RCX0NPVU5UX01BU0spCiYjNDM7CiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqLwogI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUCVNXUF9UQl9GTEFHU19CSVRTCiAKQEAgLTE2Niw2ICYjNDM7MTc0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKQogCXJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfaGliZXJuYXRpb24odW5zaWduZWQgbG9uZyBzd3BfdGIpCiYjNDM7ewomIzQzOwlyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpCiB7CiAJcmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHwKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IGRlYTJkM2IzNmUwNmYuLjRmYmExNzcwY2U2MTYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtOTI4LDcgJiM0Mzs5MjgsNyBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkgKiB1cG9uIGZvbGlvIHVubWFwLgogCSAqCiAJICogRWxzZSwgaXQmIzM5O3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi4KLQkgKiBUaGUgc2xvdCBzdGFydHMgd2l0aCBjb3VudCA9PSAxIGFuZCBuZXZlciBpbmNyZWFzZXMuCiYjNDM7CSAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LgogCSAqLwogCWlmIChsaWtlbHkoZm9saW8pKSB7CiAJCW9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pOwpAQCAtOTQwLDggJiM0Mzs5NDAsOCBAQCBzdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwKIAkJb3JkZXIgPSAwOwogCQlucl9wYWdlcyA9IDE7CiAJCXN3YXBfY2x1c3Rlcl9hc3NlcnRfZW1wdHkoY2ksIGNpX29mZiwgMSwgZmFsc2UpOwotCQkvKiBGYWtlIHNoYWRvdyBwbGFjZWhvbGRlciB3aXRoIG5vIGZsYWcsIGhpYmVybmF0aW9uIGRvZXMgbm90IHVzZSB0aGUgemVyb21hcCAqLwotCQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIF9fc3dwX3RiX21rX2NvdW50KHNoYWRvd190b19zd3BfdGIoTlVMTCwgMCksIDEpKTsKJiM0MzsJCS8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovCiYjNDM7CQlfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIFNXUF9UQl9ISUIpOwogCX0gZWxzZSB7CiAJCS8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi8KIAkJV0FSTl9PTl9PTkNFKDEpOwpAQCAtMTkyOSw5ICYjNDM7MTkyOSwxMSBAQCB2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksCiAJCW9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7CiAJCS8qCiAJCSAqIEZyZWVpbmcgaXMgZG9uZSBhZnRlciByZWxlYXNlIG9mIHRoZSBsYXN0IHN3YXAgY291bnQKLQkJICogcmVmLCBvciBhZnRlciBzd2FwIGNhY2hlIGlzIGRyb3BwZWQKJiM0MzsJCSAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3QKJiM0MzsJCSAqIGhhcyBubyBjb3VudCBhbmQgaXMgZnJlZWQgZGlyZWN0bHkgYnkgaXRzIG93bmVyLgogCQkgKi8KLQkJVk1fV0FSTl9PTighc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8IF9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpICZndDsgMSk7CiYjNDM7CQlWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgJmd0OyAxKSk7CiAKIAkJLyogUmVzZXR0aW5nIHRoZSBzbG90IHRvIE5VTEwgYWxzbyBjbGVhcnMgdGhlIGlubGluZSBmbGFncy4gKi8KIAkJX19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBudWxsX3RvX3N3cF90YigpKTsKQEAgLTIyMDEsMTIgJiM0MzsyMjAzLDggQEAgdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSkKIAlwZ29mZl90IG9mZnNldCA9IHN3cF9vZmZzZXQoZW50cnkpOwogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTsKLQlfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpOwogCV9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwotCi0JLyogSW4gdGhlb3J5IHJlYWRhaGVhZCBtaWdodCBhZGQgaXQgdG8gdGhlIHN3YXAgY2FjaGUgYnkgYWNjaWRlbnQgKi8KLQlfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpOwogfQogCiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODg0CgkJCQkJCQlvdXRwdXQ6IDE2MwoJCQkJCQkJdGhvdWdodHM6IDM1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEhpYmVybmF0aW9uIFN3YXAgU2xvdCBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBzd2FwIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBgbW0vc3dhcF9zdGF0ZS5jYCwgYG1tL3N3YXBfdGFibGUuaGAsIGFuZCBgbW0vc3dhcGZpbGUuY2AuIE15IGluaXRpYWwgY29uY2VybiBpcyBhbHdheXMgYXJvdW5kIG1lbW9yeSBzYWZldHksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoYXQgZmlyc3QuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgU1dQX1RCX0hJQmAsIGEgbmV3IHN3YXAgdGFibGUgZW50cnkgdHlwZSBleHBsaWNpdGx5IGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIGNvbmNlcHR1YWxseSwgc2VncmVnYXRpbmcgdGhlc2Ugc2xvdHMgZnJvbSB0aGUgcmVndWxhciBzd2FwIGVudHJpZXMuCgpNeSBtYWluIGZvY3VzIGlzIG9uIHRoZSBjaGFuZ2VzIHRvIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCwgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCwgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAuIEl0IGxvb2tzIGxpa2Ugd2UgYXJlIGV4cGxpY2l0bHkgcHJldmVudGluZyBoaWJlcm5hdGlvbiBzbG90cyBmcm9tIGV2ZXIgaGl0dGluZyB0aGUgc3dhcCBjYWNoZS4gIEV4Y2VsbGVudCwgYmVjYXVzZSB0aGV5IGRvbiYjMzk7dCBoYXZlIGEgY291bnQgYW5kIHNob3VsZCBub3QgYmUgdHJlYXRlZCB0aGUgc2FtZSB3YXkuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBsaWtlbHkgYWxsb3dpbmcgaGliZXJuYXRpb24gc2xvdHMgdG8gYmUgYWNjaWRlbnRhbGx5IGJyb3VnaHQgaW50byB0aGUgc3dhcCBjYWNoZSwgd2hpY2ggd291bGQgY2F1c2Ugc2V2ZXJlIGlzc3VlcyBsYXRlciwgcHJvYmFibHkgdXNlLWFmdGVyLWZyZWUsIG9yIGNvcnJ1cHRlZCBwYWdlIHN0YXRlLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN3YXAgY2FjaGUgb3BlcmF0ZXMgYW5kIHdoYXQgaGliZXJuYXRpb24gaXMgdHJ5aW5nIHRvIGRvLCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgKm5vdCogaW50cm9kdWNpbmcgYW55IG5ldyBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmUgYXJlIG5vIG5ldyBzdHJ1Y3RzIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLCBubyBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZSBhbGxvY2F0aW9ucyB0aGF0IG1pZ2h0IGhhdmUgdW5pbml0aWFsaXplZCBmaWVsZHMsIGFuZCBubyBtb2RpZmljYXRpb25zIHRvIGJvdW5kcyBjaGVja3Mgb3IgbGVuZ3RoIGNhbGN1bGF0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuIFRoaXMgaXMgcHVyZWx5IGFib3V0IGZpeGluZyBhIHNwZWNpZmljIHN3YXAgY2FjaGUgcmVhZGFoZWFkIGJ1ZyBhbmQgc2VncmVnYXRpbmcgaGliZXJuYXRpb24gc2xvdHMgY29ycmVjdGx5LgoKU2luY2UgdGhpcyBwYXRjaCBpcyBhYm91dCBmaXhpbmcgYSBzd2FwIGNhY2hlIGJ1ZyBhbmQgbm90IGEgbmV3IG1lbW9yeSBhbGxvY2F0aW9uLCBJJiMzOTttIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBsaWtlIEtBU0FOLCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC1zY29wZWQgZml4LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAxMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzd2FwIHNsb3QgbWFuYWdlbWVudCB0byBleHBsaWNpdGx5IHRyYWNrIGhpYmVybmF0aW9uIHNsb3RzIHVzaW5nIGEgbmV3IGZsYWcgKFNXUF9UQl9ISUIpIGFuZCBwcmV2ZW50cyB0aGVtIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIHN3YXAgc3RhdGUgdHJhY2tpbmcgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBhcmlzaW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBzbG90IG1hbmFnZW1lbnQgdG8gZXhwbGljaXRseSB0cmFjayBoaWJlcm5hdGlvbiBzbG90cyB1c2luZyBhIG5ldyBmbGFnIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGFjY2lkZW50YWxseSBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZSBkdXJpbmcgY2x1c3RlciByZWFkYWhlYWQuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBzd2FwIHN0YXRlIHRyYWNraW5nIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgYXJpc2luZyBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTA6MzUuNzk5MjQ2MTQ2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMDIzMzEyODQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIkhJQkVSTkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwiZm9saW9fcHV0X3N3YXBcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBzbG90IG1hbmFnZW1lbnQgdG8gZXhwbGljaXRseSB0cmFjayBoaWJlcm5hdGlvbiBzbG90cyB1c2luZyBhIG5ldyBmbGFnIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGFjY2lkZW50YWxseSBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZSBkdXJpbmcgY2x1c3RlciByZWFkYWhlYWQuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBzd2FwIHN0YXRlIHRyYWNraW5nIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgYXJpc2luZyBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc3dhcCBjYWNoZSBsb2dpYyB0byBpbnRyb2R1Y2UgYSBuZXcgaGliZXJuYXRpb24gc2xvdCBzdGF0ZSAoU1dQX1RCX0hJQikgYW5kIHByZXZlbnRzIGhpYmVybmF0aW9uIHNsb3RzIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gSXQgYWxzbyBjaGFuZ2VzIGhvdyBoaWJlcm5hdGlvbiBzbG90cyBhcmUgYWxsb2NhdGVkIGFuZCBmcmVlZCwgYnlwYXNzaW5nIHRoZSBub3JtYWwgc3dhcCBjYWNoZSByZWZlcmVuY2UgY291bnRpbmcuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwL2hpYmVybmF0aW9uIGxvZ2ljLCByZWFjaGFibGUgdmlhIHN3YXAgb3BlcmF0aW9ucyBhbmQgaGliZXJuYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUwOjM1Ljc5OTI1Mjg3N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU2MTQzODc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZThkYTg2NzBlODk1NDFiNjNlNGJlNDg0ZTVhNDIxMzM1MjczNzk5N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAxMzo1MDozNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li42MzQxZjFiZmZmYTIzIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC0xODEsOSArMTgxLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbiBcXHRpZiAoc3dwX3RiX2lzX2ZvbGlvKG9sZF90YikpXFxuIFxcdFxcdHJldHVybiAtRUVYSVNUO1xcbi1cXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxcbitcXHQvKlxcbitcXHQgKiBPbmx5IGEgc3dhcHBlZC1vdXQgc2xvdCBtYXkgYmUgYnJvdWdodCBpbnRvIHRoZSBzd2FwIGNhY2hlLlxcbitcXHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cXG4rXFx0ICogc2xvdHMgdGhhdCBhcmUgZnJlZSwgYmFkLCBvciBvd25lZCBieSBoaWJlcm5hdGlvbi5cXG4rXFx0ICovXFxuK1xcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLVxcdGlmIChzaGFkb3dwIFxcdTAwMjZcXHUwMDI2IHN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSlcXG4rXFx0aWYgKHNoYWRvd3ApXFxuIFxcdFxcdCpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpO1xcbiBcXHRpZiAobWVtY2dfaWQpXFxuIFxcdFxcdCptZW1jZ19pZCA9IF9fc3dhcF9jZ3JvdXBfZ2V0KGNpLCBjaV9vZmYpO1xcbkBAIC0xOTYsNyArMjAxLDcgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuIFxcdGNpX2VuZCA9IGNpX29mZiArIG5yO1xcbiBcXHRkbyB7XFxuIFxcdFxcdG9sZF90YiA9IF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XFxuLVxcdFxcdGlmICh1bmxpa2VseShzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fFxcbitcXHRcXHRpZiAodW5saWtlbHkoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fFxcbiBcXHRcXHRcXHQgICAgICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSB8fFxcbiBcXHRcXHRcXHQgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fFxcbiBcXHRcXHRcXHQgICAgIChtZW1jZ19pZCBcXHUwMDI2XFx1MDAyNiAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSlcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF90YWJsZS5oIGIvbW0vc3dhcF90YWJsZS5oXFxuaW5kZXggZTY2MTNlNjJmOGQwZi4uYjkxNmE2NDkzNTIxYSAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcXG4rKysgYi9tbS9zd2FwX3RhYmxlLmhcXG5AQCAtMzAsNiArMzAsNyBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XFxuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxcbiAgKiBQb2ludGVyOiAgfC0tLS0tLS0tLS0tIFBvaW50ZXIgLS0tLS0tLS0tLXwxMDB8IC0gKFVudXNlZClcXG4gICogQmFkOiAgICAgIHwtLS0tLS0tLS0tLS0tIDEgLS0tLS0tLS0tLS0tLXwxMDAwfCAtIEJhZCBzbG90XFxuKyAqIEhpYmVybjogICB8ICAgIDAgICAgIHwtLS0tLS0tIDEgLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XFxuICAqXFxuICAqIENPVU5UIGlzIGBTV1BfVEJfQ09VTlRfQklUU2AgbG9uZywgWiBpcyB0aGUgYFNXUF9UQl9aRVJPX0ZMQUdgIGJpdCxcXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxcbkBAIC01NCw2ICs1NSwxMCBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XFxuICAqICAgYWxpZ25lZCBwb2ludGVycy5cXG4gICpcXG4gICogLSBCYWQ6IFN3YXAgc2xvdCBpcyByZXNlcnZlZCwgcHJvdGVjdHMgc3dhcCBoZWFkZXIgb3IgaG9sZXMgb24gc3dhcCBkZXZpY2VzLlxcbisgKlxcbisgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kXFxuKyAqICAgbXVzdCBuZXZlciBlbnRlciB0aGUgc3dhcCBjYWNoZS4gVGhlIGNvdW50IGZpZWxkIGlzIGtlcHQgMCBzbyBpdCBuZXZlclxcbisgKiAgIHJlYWRzIGFzIGEgc2xvdCBpbiB1c2UuXFxuICAqL1xcbiBcXG4gLyogTlVMTCBFbnRyeSwgYWxsIDAgKi9cXG5AQCAtODEsNiArODYsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XFxuIC8qIEJhZCBzbG90OiBlbmRzIHdpdGggMGIxMDAwIGFuZCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqL1xcbiAjZGVmaW5lIFNXUF9UQl9CQURcXHRcXHQoKH4wVUwpIFxcdTAwM2NcXHUwMDNjIDMpXFxuIFxcbisvKiBIaWJlcm5hdGlvbiBzbG90OiBlbmRzIHdpdGggMGIxMDAwMCwgbm8gY291bnQsIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXFxuKyNkZWZpbmUgU1dQX1RCX0hJQlxcdFxcdCgoKH4wVUwpIFxcdTAwM2NcXHUwMDNjIDQpIFxcdTAwMjYgflNXUF9UQl9DT1VOVF9NQVNLKVxcbitcXG4gLyogTWFjcm8gZm9yIHNoYWRvdyBvZmZzZXQgY2FsY3VsYXRpb24gKi9cXG4gI2RlZmluZSBTV0FQX0NPVU5UX1NISUZUXFx0U1dQX1RCX0ZMQUdTX0JJVFNcXG4gXFxuQEAgLTE2Niw2ICsxNzQsMTEgQEAgc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19iYWQodW5zaWduZWQgbG9uZyBzd3BfdGIpXFxuIFxcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0JBRDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19oaWJlcm5hdGlvbih1bnNpZ25lZCBsb25nIHN3cF90YilcXG4re1xcbitcXHRyZXR1cm4gc3dwX3RiID09IFNXUF9UQl9ISUI7XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfY291bnRhYmxlKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxcbiB7XFxuIFxcdHJldHVybiAoc3dwX3RiX2lzX3NoYWRvdyhzd3BfdGIpIHx8IHN3cF90Yl9pc19mb2xpbyhzd3BfdGIpIHx8XFxuZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jXFxuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcXG4tLS0gYS9tbS9zd2FwZmlsZS5jXFxuKysrIGIvbW0vc3dhcGZpbGUuY1xcbkBAIC05MjgsNyArOTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdCAqIHVwb24gZm9saW8gdW5tYXAuXFxuIFxcdCAqXFxuIFxcdCAqIEVsc2UsIGl0J3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi5cXG4tXFx0ICogVGhlIHNsb3Qgc3RhcnRzIHdpdGggY291bnQgPT0gMSBhbmQgbmV2ZXIgaW5jcmVhc2VzLlxcbitcXHQgKiBUaGUgc2xvdCBjYXJyaWVzIG5vIHN3YXAgY291bnQgYW5kIGlzIGZyZWVkIGJ5IG9mZnNldC5cXG4gXFx0ICovXFxuIFxcdGlmIChsaWtlbHkoZm9saW8pKSB7XFxuIFxcdFxcdG9yZGVyID0gZm9saW9fb3JkZXIoZm9saW8pO1xcbkBAIC05NDAsOCArOTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdFxcdG9yZGVyID0gMDtcXG4gXFx0XFx0bnJfcGFnZXMgPSAxO1xcbiBcXHRcXHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcXG4tXFx0XFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cXG4tXFx0XFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XFxuK1xcdFxcdC8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovXFxuK1xcdFxcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIEFsbG9jYXRpb24gd2l0aG91dCBmb2xpbyBpcyBvbmx5IHBvc3NpYmxlIHdpdGggaGliZXJuYXRpb24gKi9cXG4gXFx0XFx0V0FSTl9PTl9PTkNFKDEpO1xcbkBAIC0xOTI5LDkgKzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbiBcXHRcXHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XFxuLVxcdFxcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXFxuK1xcdFxcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3RcXG4rXFx0XFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXFx1MDAzZSAxKTtcXG4rXFx0XFx0Vk1fV0FSTl9PTighc3dwX3RiX2lzX2hpYmVybmF0aW9uKG9sZF90YikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXFx1MDAzZSAxKSk7XFxuIFxcbiBcXHRcXHQvKiBSZXNldHRpbmcgdGhlIHNsb3QgdG8gTlVMTCBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGZsYWdzLiAqL1xcbiBcXHRcXHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xcbkBAIC0yMjAxLDEyICsyMjAzLDggQEAgdm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSlcXG4gXFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XFxuLVxcdF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUik7XFxuIFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIsIDEpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tXFxuLVxcdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXFxuLVxcdF9fdHJ5X3RvX3JlY2xhaW1fc3dhcChzaSwgb2Zmc2V0LCBUVFJTX0FOWVdBWSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19maW5kX2hpYmVybmF0aW9uX3N3YXBfdHlwZShkZXZfdCBkZXZpY2UsIHNlY3Rvcl90IG9mZnNldClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTA6MzYuMjU2MDk2NjEzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTM5NzczOTAxNDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIkhJQkVSTkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwiZm9saW9fcHV0X3N3YXBcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZThkYTg2NzBlODk1NDFiNjNlNGJlNDg0ZTVhNDIxMzM1MjczNzk5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDEzOjUwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li42MzQxZjFiZmZmYTIzIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xODEsOSArMTgxLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuK1x0LypcbitcdCAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuXG4rXHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbitcdCAqIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXG4rXHQgKi9cbitcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuK1x0aWYgKHNoYWRvd3ApXG4gXHRcdCpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpO1xuIFx0aWYgKG1lbWNnX2lkKVxuIFx0XHQqbWVtY2dfaWQgPSBfX3N3YXBfY2dyb3VwX2dldChjaSwgY2lfb2ZmKTtcbkBAIC0xOTYsNyArMjAxLDcgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRjaV9lbmQgPSBjaV9vZmYgKyBucjtcbiBcdGRvIHtcbiBcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpIHx8XG4rXHRcdGlmICh1bmxpa2VseSghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8XG4gXHRcdFx0ICAgICAhX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgfHxcbiBcdFx0XHQgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fFxuIFx0XHRcdCAgICAgKG1lbWNnX2lkIFx1MDAyNlx1MDAyNiAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSlcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3RhYmxlLmggYi9tbS9zd2FwX3RhYmxlLmhcbmluZGV4IGU2NjEzZTYyZjhkMGYuLmI5MTZhNjQ5MzUyMWEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcbisrKyBiL21tL3N3YXBfdGFibGUuaFxuQEAgLTMwLDYgKzMwLDcgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxuICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKVxuICAqIEJhZDogICAgICB8LS0tLS0tLS0tLS0tLSAxIC0tLS0tLS0tLS0tLS18MTAwMHwgLSBCYWQgc2xvdFxuKyAqIEhpYmVybjogICB8ICAgIDAgICAgIHwtLS0tLS0tIDEgLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgKzU1LDEwIEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcbiAgKiAgIGFsaWduZWQgcG9pbnRlcnMuXG4gICpcbiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuXG4rICpcbisgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kXG4rICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLiBUaGUgY291bnQgZmllbGQgaXMga2VwdCAwIHNvIGl0IG5ldmVyXG4rICogICByZWFkcyBhcyBhIHNsb3QgaW4gdXNlLlxuICAqL1xuIFxuIC8qIE5VTEwgRW50cnksIGFsbCAwICovXG5AQCAtODEsNiArODYsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gLyogQmFkIHNsb3Q6IGVuZHMgd2l0aCAwYjEwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXG4gI2RlZmluZSBTV1BfVEJfQkFEXHRcdCgofjBVTCkgXHUwMDNjXHUwMDNjIDMpXG4gXG4rLyogSGliZXJuYXRpb24gc2xvdDogZW5kcyB3aXRoIDBiMTAwMDAsIG5vIGNvdW50LCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqL1xuKyNkZWZpbmUgU1dQX1RCX0hJQlx0XHQoKCh+MFVMKSBcdTAwM2NcdTAwM2MgNCkgXHUwMDI2IH5TV1BfVEJfQ09VTlRfTUFTSylcbitcbiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqL1xuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFx0U1dQX1RCX0ZMQUdTX0JJVFNcbiBcbkBAIC0xNjYsNiArMTc0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuIFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfQkFEO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2hpYmVybmF0aW9uKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuK3tcbitcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0hJQjtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpXG4ge1xuIFx0cmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC05MjgsNyArOTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxuIFx0ICpcbiBcdCAqIEVsc2UsIGl0J3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi5cbi1cdCAqIFRoZSBzbG90IHN0YXJ0cyB3aXRoIGNvdW50ID09IDEgYW5kIG5ldmVyIGluY3JlYXNlcy5cbitcdCAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KGZvbGlvKSkge1xuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbkBAIC05NDAsOCArOTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdG9yZGVyID0gMDtcbiBcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcbi1cdFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cbi1cdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XG4rXHRcdC8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovXG4rXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbkBAIC0xOTI5LDkgKzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuIFx0XHQvKlxuIFx0XHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XG4tXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXG4rXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3RcbitcdFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXG4gXHRcdCAqL1xuLVx0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpO1xuK1x0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCBfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSBcdTAwM2UgMSkpO1xuIFxuIFx0XHQvKiBSZXNldHRpbmcgdGhlIHNsb3QgdG8gTlVMTCBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGZsYWdzLiAqL1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xuQEAgLTIyMDEsMTIgKzIyMDMsOCBAQCB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG4tXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xuIFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi1cbi1cdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXG4tXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MDozNi4yNTYwOTgwNTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDQwNjkxNDgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBIaWJlcm5hdGlvbiBTd2FwIFNsb3QgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gdGhlIGtlcm5lbCB0aGF0IHdhcnJhbnQgZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGluIGBtbS9zd2FwX3N0YXRlLmNgLCBgbW0vc3dhcF90YWJsZS5oYCwgYW5kIGBtbS9zd2FwZmlsZS5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgcmFpc2VzIG15IGZsYWcg4oCTIHRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIGFyZWFzLiBUaGlzIG1lYW5zIGl0IGhhcyBhIGhpZ2ggcG90ZW50aWFsIGZvciBpbXBhY3RpbmcgY3JpdGljYWwga2VybmVsIGJlaGF2aW9yLlxuXG5JdCBzZWVtcyB0aGUgcGF0Y2ggaXMgYWxsIGFib3V0IGhvdyBoaWJlcm5hdGlvbiBzd2FwIHNsb3RzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgc3dhcCBjYWNoZS4gU3BlY2lmaWNhbGx5LCBpdCdzIGludHJvZHVjaW5nIGEgbmV3IGBTV1BfVEJfSElCYCBzdGF0ZSBmb3IgdGhlc2Ugc2xvdHMuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGNlbnRlcmVkIGFyb3VuZCBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AsIGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCwgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AsIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgaXMgYmVpbmcgdHdlYWtlZCB0byBwcmV2ZW50IGhpYmVybmF0aW9uIHNsb3RzIChzaGFkb3cgc2xvdHMpIGZyb20gYmVpbmcgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgaW4gdGhlIGZpcnN0IHBsYWNlLCBlbnN1cmluZyBvbmx5IGFjdHVhbGx5IHN3YXBwZWQtb3V0IHNsb3RzIGdldCBhZGRlZC4gSXQncyBoYW5kbGluZyB0aGUgc2V0dGluZyBhbmQgY2xlYXJpbmcgb2YgdGhpcyBuZXcgYFNXUF9UQl9ISUJgIHN0YXRlIGFuZCBmcmVlaW5nIGhpYmVybmF0aW9uIHNsb3RzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHdoaWNoIGlzIGVzc2VudGlhbCBmb3IgZnV6emluZz8gU3dhcCBhbmQgaGliZXJuYXRpb24gYXJlIGJvdGggcG90ZW50aWFsbHkgcmVhY2hhYmxlLiBIYW5nIG9uLi4uIGhpYmVybmF0aW9uIG1pZ2h0IGJlIHByb2JsZW1hdGljIGRlcGVuZGluZyBvbiB0aGUgUUVNVSBzZXR1cCwgYnV0IHN3YXAgaXMgZGVmaW5pdGVseSB0aGVyZS4gTW9yZSBpbXBvcnRhbnRseSwgaXQgbG9va3MgbGlrZSBjaGFuZ2VzIHRvIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCBhZmZlY3Qgbm9ybWFsIHN3YXAgcmVhZGFoZWFkIG9wZXJhdGlvbnMsIGV2ZW4gaW4gdGhlIGNhc2Ugb2YgaGliZXJuYXRpb24uIFwiQ2x1c3RlciByZWFkYWhlYWQgd2Fsa3MgcmF3IG9mZnNldCByYW5nZXMsIHNvIGl0IGNhbiBsYW5kIG9uIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXCIgU28sIGV2ZW4gd2l0aG91dCBoaWJlcm5hdGlvbiBzdXBwb3J0LCBub3JtYWwgc3dhcCByZWFkYWhlYWQgaXMgZGVmaW5pdGVseSBhZmZlY3RlZCwgd2hpY2ggaXMgZ3JlYXQuXG5cblNvIG5vdywgbGV0J3MgZmluZCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24uIEkndmUgZ290IHRvIGZvY3VzIG9uIHRoZSBjaGFuZ2VzIGluIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gSXQgaXMgc3RhdGljLCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgY2FsbGVycyBvZiBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AuIEknbGwgZG8gYSBxdWljayBncmVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODg3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDI3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTA6NDQuNjk2ODA5MTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMjQ3MzI2NjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NhY2hlX2FkZF9jaGVja1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwX3N0YXRlLmM9MTM1PXZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSlcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0xNDYtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjE0NzogKiBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrIC0gQ2hlY2sgaWYgYSByYW5nZSBpcyBzdWl0YWJsZSBmb3IgYWRkaW5nIGEgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTE0OC0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMTYxLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzoxNjI6c3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcF9zdGF0ZS5jLTE2My1cXHRcXHRcXHRcXHQgIHN3cF9lbnRyeV90IHRhcmdfZW50cnksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NDE0PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKl9fc3dhcF9jYWNoZV9hbGxvYyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTQzMS1cXHRzcGluX2xvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG5tbS9zd2FwX3N0YXRlLmM6NDMyOlxcdGVyciA9IF9fc3dhcF9jYWNoZV9hZGRfY2hlY2soY2ksIHRhcmdfZW50cnksIG5yX3BhZ2VzLCBOVUxMLCBOVUxMKTtcXG5tbS9zd2FwX3N0YXRlLmMtNDMzLVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNDU0LVxcdHNwaW5fbG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcbm1tL3N3YXBfc3RhdGUuYzo0NTU6XFx0ZXJyID0gX19zd2FwX2NhY2hlX2FkZF9jaGVjayhjaSwgdGFyZ19lbnRyeSwgbnJfcGFnZXMsIFxcdTAwMjZzaGFkb3csIFxcdTAwMjZtZW1jZ19pZCk7XFxubW0vc3dhcF9zdGF0ZS5jLTQ1Ni1cXHRpZiAodW5saWtlbHkoZXJyKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MDo0Ni44MjE1NzQ4NDFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY1ODcwNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgcmVmbGVjdGluZyBteSBleHBlcnQgdW5kZXJzdGFuZGluZzpcblxuKipTd2FwIENhY2hlIEFsbG9jYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgX19zd2FwX2NhY2hlX2FsbG9jYCBpcyBjYWxsaW5nIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gVGhhdCdzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIHBvdGVudGlhbGx5IGNyaXRpY2FsLCBpbnRlcm5hbCBvcGVyYXRpb24gd2l0aGluIHRoZSBzd2FwIGNhY2hpbmcgbWVjaGFuaXNtLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24sIGFzIGFsd2F5cywgaXM6IHdoYXQgYXJlIHRoZSAqZW50cnkgcG9pbnRzKiBmb3IgYF9fc3dhcF9jYWNoZV9hbGxvY2A/IFVuZGVyc3RhbmRpbmcgdGhlIGNhbGxpbmcgZnVuY3Rpb25zIGlzIHBhcmFtb3VudCB0byBncmFzcGluZyB0aGUgYnJvYWRlciBwaWN0dXJlIGFuZCBpZGVudGlmeWluZyBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3Mgb3Igc3VidGxlIHJhY2UgY29uZGl0aW9ucyByZWxhdGVkIHRvIHN3YXAgY2FjaGUgbWFuYWdlbWVudC4gS25vd2luZyB0aGUgY29udGV4dHMgd2hlcmUgbWVtb3J5IGlzIGJlaW5nIHN3YXBwZWQsIGFkZGVkLCBvciByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGlzIGNlbnRyYWwgdG8gYW55IGRlZXAgZGl2ZS4gSSdsbCBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgX19zd2FwX2NhY2hlX2FsbG9jYCB0byB1bmRlcnN0YW5kIHRoZSBwcm9jZXNzZXMgdGhhdCBhcmUgdHJpZ2dlcmluZyB0aGVzZSBhbGxvY2F0aW9uIGV2ZW50cy4gSSBuZWVkIHRvIGtub3cgdGhlIG9yaWdpbiBvZiB0aGF0IHN3YXAgY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxOTMsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MDo0OS45ODc0NDgxNTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg5MjM5NTI4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2FjaGVfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcF9zdGF0ZS5jPTM2Nz12b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNDEzLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzo0MTQ6c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcF9zdGF0ZS5jLTQxNS1cXHRcXHRcXHRcXHRcXHRzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9NTE5PXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTM0LVxcdGRvIHtcXG5tbS9zd2FwX3N0YXRlLmM6NTM1OlxcdFxcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcXG5tbS9zd2FwX3N0YXRlLmMtNTM2LVxcdFxcdFxcdFxcdFxcdCB2bWYsIG1wb2wsIGlseCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUwOjUxLjg3OTg0OTc4MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxNDUzMjE2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaWdnaW5nIGludG8gdGhlIFN3YXAgQ2FjaGUgQWxsb2NhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpcyBkZWZpbml0ZWx5IGNhbGxpbmcgYF9fc3dhcF9jYWNoZV9hbGxvY2AuIFRoYXQgbXVjaCBpcyBjbGVhciBmcm9tIHRoZSBjb2RlLiBCdXQsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIGl0LCAqd2hhdCogaXMgY2FsbGluZyBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCBpbiByZXZlcnNlIGhlcmUuIEknbSBhZnRlciB0aGUgaW5pdGlhdGluZyBmdW5jdGlvbiBvciBmdW5jdGlvbnMsIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBmb2xpbyBhbGxvY2F0aW9uIGZvciBzd2FwIGNhY2hlIGVudHJpZXMgaXMgYmVpbmcgKnJlcXVlc3RlZCouIEtub3dpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCBnaXZlIG1lIHZhbHVhYmxlIGluc2lnaHQgaW50byB0aGUgY29udGV4dCBvZiB0aGUgYWxsb2NhdGlvbiwgYW5kIHdoZXJlIHBvdGVudGlhbCBpbmVmZmljaWVuY2llcyBvciBib3R0bGVuZWNrcyBtaWdodCBsaWUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGJhY2suIElzIGl0IHRyaWdnZXJlZCBieSBkaXJlY3QgdXNlciBwYWdlIGZhdWx0cywgaXMgaXQgcGFydCBvZiBhIGJhY2tncm91bmQgc3dhcC1pbiBwcm9jZXNzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBmaXJlIHVwIHRoZSBkZWJ1Z2dlciBhbmQgc3RhcnQgdHJhY2luZyB0aG9zZSBmdW5jdGlvbiBjYWxscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTY3MCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUwOjU1LjAyNTE3MzQ0OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjY3MTE5MzIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN3YXBfY2FjaGVfYWxsb2NfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxND12b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL3N3YXAuaDozMTU6c3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxubW0vc3dhcC5oLTMxNi1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz00MTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNTAyLS8qKlxcbm1tL3N3YXBfc3RhdGUuYzo1MDM6ICogc3dhcF9jYWNoZV9hbGxvY19mb2xpbyAtIEFsbG9jYXRlIGZvbGlvIGZvciBzd2FwcGVkIG91dCBzbG90IGluIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTUwNC0gKiBAdGFyZ19lbnRyeTogc3dhcCBlbnRyeSBpbmRpY2F0aW5nIHRoZSB0YXJnZXQgc2xvdFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTUxOC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6NTE5OnN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxubW0vc3dhcF9zdGF0ZS5jLTUyMC1cXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz02NDc9c3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTY1Ni1cXHRcXHRcXHRyZXR1cm4gZm9saW87XFxubW0vc3dhcF9zdGF0ZS5jOjY1NzpcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbm1tL3N3YXBfc3RhdGUuYy02NTgtXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9Njg4PXN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNjk3LVxcdFxcdFxcdHJldHVybiBmb2xpbztcXG5tbS9zd2FwX3N0YXRlLmM6Njk4OlxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBvcmRlcnMsIHZtZiwgbXBvbCwgaWx4KTtcXG5tbS9zd2FwX3N0YXRlLmMtNjk5LVxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xODMwPXZvaWQgZm9saW9fcHV0X3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE4NzItICogICAgIC4uLlxcdFxcdFxcdFxcdHN3YXBvZmYrc3dhcG9uXFxubW0vc3dhcGZpbGUuYzoxODczOiAqICAgICBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKClcXG5tbS9zd2FwZmlsZS5jLTE4NzQtICogICAgICAgLy8gY2hlY2sgc3dhcF9tYXBcXG4tLVxcbm1tL3pzd2FwLmM9OTg3PXN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTEwMDMtXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG5tbS96c3dhcC5jOjEwMDQ6XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxubW0venN3YXAuYy0xMDA1LVxcdFxcdFxcdFxcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTA6NTYuNjkyMzAyMTA5WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI0ODg3ODc0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29uc2lkZXJpbmcgU3dhcCBDYWNoZSBBbGxvY2F0aW9uIGFuZCBIaWJlcm5hdGlvbioqXG5cbk9rYXksIHNvIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCBpc24ndCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHdpZGVyIGltcGxpY2F0aW9ucywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIHBvdGVudGlhbCBzY29wZSBhbmQgZXh0ZXJuYWwgdXNlLCBJJ20gYWxyZWFkeSBtZW50YWxseSB0cmFjaW5nIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb21wb25lbnRzLiBUaGVuIHRoZSBvYnZpb3VzIHF1ZXN0aW9uIHBvcHMgaW50byBteSBoZWFkLCB3aGF0IGFib3V0IGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGA/IElzIGl0IHN0YXRpYywgYW5kIGlmIG5vdCwgZG9lcyBpdHMgbm9uLXN0YXRpYyBzdGF0dXMgY3JlYXRlIGFueSBzaW1pbGFyIHBvaW50cyBmb3IgY29uc2lkZXJhdGlvbj8gSSBuZWVkIHRvIGFuYWx5emUgaG93IGJvdGggZnVuY3Rpb25zLCBhbmQgdGhlaXIgcmVzcGVjdGl2ZSB2aXNpYmlsaXR5LCBhcmUgZGVzaWduZWQgYW5kIHN0cnVjdHVyZWQgcmVsYXRpdmUgdG8gZWFjaCBvdGhlci4gSSB3b25kZXIgYWJvdXQgdGhlIG1vdGl2YXRpb25zIGJlaGluZCB0aGVzZSBkZXNpZ24gZGVjaXNpb25zLCB3aGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9uIG90aGVyIHN1YnN5c3RlbXMgd2l0aGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhcmNoaXRlY3R1cmU/IEkgbmVlZCB0byBsb29rIGludG8gdGhpcyBtb3JlIGRlZXBseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjY5NiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUwOjU5Ljk0MTE4NzI2M1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1MjMyNzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3N3YXAuaD00MDg9c3dwX2VudHJ5X3Qgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KGludCB0eXBlKTtcXG5pbmNsdWRlL2xpbnV4L3N3YXAuaDo0MDk6dm9pZCBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnlfdCBlbnRyeSk7XFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDEwLVxcbi0tXFxua2VybmVsL3Bvd2VyL3N3YXAuYz0xNjk9c2VjdG9yX3QgYWxsb2Nfc3dhcGRldl9ibG9jayhpbnQgc3dhcClcXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmMtMTc5LVxcdFxcdGlmIChzd3N1c3BfZXh0ZW50c19pbnNlcnQob2Zmc2V0KSlcXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjE4MDpcXHRcXHRcXHRzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdChzd3BfZW50cnkoc3dhcCwgb2Zmc2V0KSk7XFxua2VybmVsL3Bvd2VyL3N3YXAuYy0xODEtXFx0XFx0ZWxzZVxcbi0tXFxua2VybmVsL3Bvd2VyL3N3YXAuYz0xODc9dm9pZCBmcmVlX2FsbF9zd2FwX3BhZ2VzKGludCBzd2FwKVxcbi0tXFxua2VybmVsL3Bvd2VyL3N3YXAuYy0yMDItXFx0XFx0Zm9yIChvZmZzZXQgPSBleHQtXFx1MDAzZXN0YXJ0OyBvZmZzZXQgXFx1MDAzYz0gZXh0LVxcdTAwM2VlbmQ7IG9mZnNldCsrKVxcbmtlcm5lbC9wb3dlci9zd2FwLmM6MjAzOlxcdFxcdFxcdHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeShzd2FwLCBvZmZzZXQpKTtcXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTIwNC1cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxOTMtLyoqXFxubW0vc3dhcGZpbGUuYzoyMTk0OiAqIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KCkgLSBGcmVlIGEgc3dhcCBzbG90IGFsbG9jYXRlZCBmb3IgaGliZXJuYXRpb24uXFxubW0vc3dhcGZpbGUuYy0yMTk1LSAqIEBlbnRyeTogc3dhcCBlbnRyeSB0byBmcmVlLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTk4LSAqL1xcbm1tL3N3YXBmaWxlLmM6MjE5OTp2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxcbm1tL3N3YXBmaWxlLmMtMjIwMC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjAxLjQ5MzUyNDc5N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTkwOTM5MDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBIaWJlcm5hdGlvbiBhbmQgU3dhcCBDYWNoZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSBrZXJuZWwncyBzd2FwIGFuZCBoaWJlcm5hdGlvbiBtZWNoYW5pc21zLiBJdCBsb29rcyBsaWtlIGBrZXJuZWwvcG93ZXIvc3dhcC5jYCBpcyB0aGUgY29yZSBvZiBoaWJlcm5hdGlvbiBmdW5jdGlvbmFsaXR5LCB1c2luZyBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YC4gSGliZXJuYXRpb24sIG9mIGNvdXJzZSwgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19ISUJFUk5BVElPTmAuIEkga25vdyBTeXprYWxsZXIgaGFzIHNvbWUgc3VwcG9ydCBmb3IgdGVzdGluZyB0aGlzIHRocm91Z2ggdGhpbmdzIGxpa2UgYC9kZXYvc25hcHNob3RgLCB3aGljaCBpcyBwcm9taXNpbmcuXG5cbkhvd2V2ZXIsIHRoZSBpbXBsaWNhdGlvbnMgZ28gYmV5b25kIGp1c3QgaGliZXJuYXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggb24gdGhlIHN0YW5kYXJkIHN3YXAgb3BlcmF0aW9ucyBhcyB3ZWxsLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGlzIGJlaW5nIG1vZGlmaWVkLiBUaGUgY3J1eCBvZiB0aGUgY2hhbmdlIGxpZXMgaW4gaG93IGBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzYCBoYW5kbGVzIGhpYmVybmF0aW9uIHNsb3RzLCBhbmQgaG93IGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYCBub3cgaW5jb3Jwb3JhdGVzIGEgY2hlY2sgdXNpbmcgYCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YilgLlxuXG5JIG5lZWQgdG8gZGlnIGludG8gdGhlIGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGUgcGF0Y2guIEJlZm9yZSwgaXQgd2FzIGNoZWNraW5nIGlmIHRoZSBgb2xkX3RiYCB3YXMgYSBmb2xpbyBvciBoYWQgYSBjb3VudC4gQWZ0ZXJ3YXJkLCBpdCBpbmNsdWRlcyB0aGlzIG5ldyBjb25kaXRpb24uIFRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBUaGUgbG9naWMgbm93IGNoZWNrcyBpZiB0aGUgc3dhcCB0YWJsZSBlbnRyeSBpcyAqbm90KiBhIHNoYWRvdyBlbnRyeSwgb3IgZG9lcyAqbm90KiBoYXZlIGEgY291bnQsIHJldHVybmluZyBgLUVOT0VOVGAuIFRoZSBjb21tZW50IHN1Z2dlc3RzIHRoaXMgaXMgYmVjYXVzZSBjbHVzdGVyIHJlYWRhaGVhZCBtaWdodCBoaXQgc2xvdHMgdGhhdCBhcmUgZnJlZSwgYmFkLCBvciBvd25lZCBieSBoaWJlcm5hdGlvbi5cblxuU28gdGhlIG1haW4gZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAsIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YC4gQWx0aG91Z2ggYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAgaXNuJ3QgZGlyZWN0bHkgbW9kaWZpZWQsIGl0J3Mgb2J2aW91c2x5IHJlbGF0ZWQsIHNvIEkgbmVlZCB0byBjaGVjayBpdHMgY29udGV4dCwgaW4gYG1tL3N3YXBmaWxlLmNgLiBUaGlzIGRlZmluaXRlbHkgd2FycmFudHMgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiBzd2FwIGNhY2hpbmcgYW5kIGhpYmVybmF0aW9uIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM3MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MTowOS40ODQ0NjYxMzFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTQ1Njg1ODEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvc3dhcC5oPTQwNT1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwNy0vKiBBbGxvY2F0ZSAvIGZyZWUgKGhpYmVybmF0aW9uKSBleGNsdXNpdmUgZW50cmllcyAqL1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQwODpzd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwOS12b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KTtcXG4tLVxcbmtlcm5lbC9wb3dlci9zd2FwLmM9MTY5PXNlY3Rvcl90IGFsbG9jX3N3YXBkZXZfYmxvY2soaW50IHN3YXApXFxuLS1cXG5rZXJuZWwvcG93ZXIvc3dhcC5jLTE3Ni1cXHQgKi9cXG5rZXJuZWwvcG93ZXIvc3dhcC5jOjE3NzpcXHRvZmZzZXQgPSBzd3Bfb2Zmc2V0KHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChzd2FwKSk7XFxua2VybmVsL3Bvd2VyL3N3YXAuYy0xNzgtXFx0aWYgKG9mZnNldCkge1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTI0PXZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnksIGludCBucilcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjE0OS0vKipcXG5tbS9zd2FwZmlsZS5jOjIxNTA6ICogc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90KCkgLSBBbGxvY2F0ZSBhIHN3YXAgc2xvdCBmb3IgaGliZXJuYXRpb24uXFxubW0vc3dhcGZpbGUuYy0yMTUxLSAqIEB0eXBlOiBzd2FwIGRldmljZSB0eXBlIGluZGV4IHRvIGFsbG9jYXRlIGZyb20uXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxNTgtICovXFxubW0vc3dhcGZpbGUuYzoyMTU5OnN3cF9lbnRyeV90IHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdChpbnQgdHlwZSlcXG5tbS9zd2FwZmlsZS5jLTIxNjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MToxMS4xMzkwMzkzMTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc2MjE2NzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuXG5cbioqVHJhY2luZyBIaWJlcm5hdGlvbiBSZWFjaGFiaWxpdHkqKlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIG9yIG5vdCB0aGUgYGtlcm5lbC9wb3dlci9zd2FwLmNgIGZpbGUgaXMgYWN0dWFsbHkgc29tZXRoaW5nIHRoYXQncyB0b3VjaGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIFRoaXMgc3VnZ2VzdHMgd2UgYXJlIGludmVzdGlnYXRpbmcgdGhlIHBvd2VyIG1hbmFnZW1lbnQgYXNwZWN0cyBvZiB0aGUga2VybmVsLiBTaW5jZSBzd2FwIGlzIG9mdGVuIGludm9sdmVkIHdpdGggaGliZXJuYXRpb24sIEknbSBnb2luZyB0byBzdGFydCBieSBjb25maXJtaW5nIHRoYXQgaXQgaXMgYXNzb2NpYXRlZCB3aXRoIGhpYmVybmF0aW9uLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB2ZXJpZnkgdGhlIGNvbmZpZ3VyYXRpb24gbWFjcm9zIGBDT05GSUdfSElCRVJOQVRJT05gIGFuZCBgQ09ORklHX1NXQVBgIGFyZSBlbmFibGVkLCBhcyB0aGF0IHdpbGwgYmUgdGhlIGRldGVybWluaW5nIGZhY3RvcnMgb2YgdGhlIGluY2x1c2lvbiBvZiBgc3dhcC5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODcyMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjE0LjkwMTIwODQ0MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNDgyNDI0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSElCRVJOQVRJT05cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3Bvd2VyL0tjb25maWc9MzU9Y29uZmlnIEhJQkVSTkFURV9DQUxMQkFDS1NcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTM3LVxcbmtlcm5lbC9wb3dlci9LY29uZmlnOjM4OmNvbmZpZyBISUJFUk5BVElPTlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkhpYmVybmF0aW9uIChha2EgJ3N1c3BlbmQgdG8gZGlzaycpXFxcIlxcbi0tXFxua2VybmVsL3Bvd2VyL0tjb25maWctODMtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6ODQ6Y29uZmlnIEhJQkVSTkFUSU9OX1NOQVBTSE9UX0RFVlxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTg1LVxcdGJvb2wgXFxcIlVzZXJzcGFjZSBzbmFwc2hvdCBkZXZpY2VcXFwiXFxuLS1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZz05Nj1jaG9pY2VcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwMC1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMDE6Y29uZmlnIEhJQkVSTkFUSU9OX0NPTVBfTFpPXFxua2VybmVsL3Bvd2VyL0tjb25maWctMTAyLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTEwNC1cXG5rZXJuZWwvcG93ZXIvS2NvbmZpZzoxMDU6Y29uZmlnIEhJQkVSTkFUSU9OX0NPTVBfTFo0XFxua2VybmVsL3Bvd2VyL0tjb25maWctMTA2LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmtlcm5lbC9wb3dlci9LY29uZmlnPTEwOT1lbmRjaG9pY2VcXG5rZXJuZWwvcG93ZXIvS2NvbmZpZy0xMTAtXFxua2VybmVsL3Bvd2VyL0tjb25maWc6MTExOmNvbmZpZyBISUJFUk5BVElPTl9ERUZfQ09NUFxcbmtlcm5lbC9wb3dlci9LY29uZmlnLTExMi1cXHRzdHJpbmdcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTE6MTYuNDM2MDM4NTQ2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODUxMDY1MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBhbmQgdGhpcyBpcyBqdXN0IHRoZSBiZWdpbm5pbmcgb2YgYSBkZWVwZXIgaW52ZXN0aWdhdGlvbjpcblxuKipDaGVja2luZyBgQ09ORklHX1NXQVBgKipcblxuQWxyaWdodCwgYmVmb3JlIGRpdmluZyBpbnRvIGFueXRoaW5nIGVsc2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgdG8gbWluZCBpcyB2ZXJpZnlpbmcgdGhlIHN0YXR1cyBvZiBgQ09ORklHX1NXQVBgLiBJdCdzIGEgZnVuZGFtZW50YWwgc2V0dGluZywgYW5kIEkgbmVlZCB0byBrbm93IGlmIHN3YXAgc3BhY2UgaXMgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBUaGlzIHRlbGxzIG1lIGEgbG90IGFib3V0IGhvdyB0aGUgc3lzdGVtIGlzIGludGVuZGVkIHRvIGhhbmRsZSBtZW1vcnkgcHJlc3N1cmUuIElmIGl0J3MgZGlzYWJsZWQsIHRoZSBkZXNpZ24gYW5kIGltcGxpY2F0aW9ucyBmb3IgaG93IHRoZSBzeXN0ZW0gd2lsbCBiZWhhdmUgZHVyaW5nIG1lbW9yeSBzdHJlc3Mgd2lsbCBiZSByYWRpY2FsbHkgZGlmZmVyZW50LiBLbm93aW5nIHRoaXMgYmFzZWxpbmUgaXMgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgYWxsIHN1YnNlcXVlbnQgZmluZGluZ3MgYW5kIG9ic2VydmF0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBzd2FwIGlzIGFjdGl2ZSBvciBub3QuIFRoaXMgaXMgYSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MjM3LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTE6MjAuMzIxMTQ4MjcxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyODMwODYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXFxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEyOC1cXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MToyMi4wMTM5ODUyODFaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3MzI4MTM0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgSGliZXJuYXRpb24gQ29uZmlndXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgYFNXQVBgIGFuZCBgSElCRVJOQVRJT05gIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gZ2V0IGEgZmlybSBncmFzcCBvbiB0aGUgY29yZSBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVzZSwgc3RhcnRpbmcgd2l0aDogYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBhbmQgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAuIFRoZXNlIGFyZSBsaWtlbHkgZ29pbmcgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnRzIG9mIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gd2l0aGluIHRoZSBzd2FwIGFuZCBoaWJlcm5hdGlvbiBzdWJzeXN0ZW1zLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBsZXQncyBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZy4gSSdsbCBuZWVkIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgY3J1Y2lhbCBmdW5jdGlvbnMgaGVyZS4gSSBzZWUgYF9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXNgLCBidXQgaXQncyBzdGF0aWMuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgYXJlIGNhbGxpbmcgaXQgLSB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNoYWluIGZyb20gYW4gZXh0ZXJuYWwgcGVyc3BlY3RpdmUgaXMgdml0YWwgaGVyZSBmb3IgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2MzksIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MToyNS40ODcyNjg5ODhaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NTU5MDgyMTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTg4ND1zdGF0aWMgYm9vbCBjbHVzdGVyX3NjYW5fcmFuZ2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy05MTAtXFxubW0vc3dhcGZpbGUuYzo5MTE6c3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy05MTItXFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTk2ND1zdGF0aWMgdW5zaWduZWQgaW50IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtOTk0LVxcdFxcdH1cXG5tbS9zd2FwZmlsZS5jOjk5NTpcXHRcXHRpZiAoIV9fc3dhcF9jbHVzdGVyX2FsbG9jX2VudHJpZXMoc2ksIGNpLCBmb2xpbywgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUikpXFxubW0vc3dhcGZpbGUuYy05OTYtXFx0XFx0XFx0YnJlYWs7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjI3LjE0MzE4Mzc3OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU4ODg5MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVjb25zdHJ1Y3RpbmcgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcmAuIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGl0J3MgZGVjbGFyZWQgYHN0YXRpY2AuIFRoaXMgaXMgc2lnbmlmaWNhbnQ7IGl0IG1lYW5zIHRoZSBzY29wZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIGxpbWl0ZWQsIGFuZCBpdCdzIG5vdCB2aXNpYmxlIG91dHNpZGUgb2YgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gVGhhdCByZXN0cmljdGlvbiBpbW1lZGlhdGVseSByYWlzZXMgdGhlIHF1ZXN0aW9uOiAqd2hhdCogaXMgY2FsbGluZyB0aGlzIHRoaW5nPyBXaGVyZSBpcyBpdCBiZWluZyB1c2VkPyBTaW5jZSBJIGNhbid0IGNhbGwgaXQgZGlyZWN0bHkgZnJvbSBhbnl3aGVyZSwgSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgd2l0aGluIHRoaXMgbW9kdWxlIGFyZSBtYWtpbmcgdXNlIG9mIHRoaXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBsYXJnZXIgc3dhcCBtYW5hZ2VtZW50IHN5c3RlbS4gTGV0J3MgZGlnIGluIGFuZCBmaWd1cmUgb3V0IHRoZSBjYWxsIGNoYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDE1MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjMwLjIwMjA3NTEzOVoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5MjM2MTg4MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zd2FwX3NjYW5fY2x1c3RlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zd2FwZmlsZS5jPTkxMT1zdGF0aWMgYm9vbCBfX3N3YXBfY2x1c3Rlcl9hbGxvY19lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtOTYzLS8qIFRyeSB1c2UgYSBuZXcgY2x1c3RlciBmb3IgY3VycmVudCBDUFUgYW5kIGFsbG9jYXRlIGZyb20gaXQuICovXFxubW0vc3dhcGZpbGUuYzo5NjQ6c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy05NjUtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwMTU9c3RhdGljIHVuc2lnbmVkIGludCBhbGxvY19zd2FwX3NjYW5fbGlzdChzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEwMjgtXFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcXG5tbS9zd2FwZmlsZS5jOjEwMjk6XFx0XFx0Zm91bmQgPSBhbGxvY19zd2FwX3NjYW5fY2x1c3RlcihzaSwgY2ksIGZvbGlvLCBvZmZzZXQpO1xcbm1tL3N3YXBmaWxlLmMtMTAzMC1cXHRcXHRpZiAoZm91bmQpXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEwOTg9c3RhdGljIHVuc2lnbmVkIGxvbmcgY2x1c3Rlcl9hbGxvY19zd2FwX2VudHJ5KHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTEyMy1cXHRcXHRcXHRcXHRvZmZzZXQgPSBjbHVzdGVyX29mZnNldChzaSwgY2kpO1xcbm1tL3N3YXBmaWxlLmM6MTEyNDpcXHRcXHRcXHRmb3VuZCA9IGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyKHNpLCBjaSwgZm9saW8sIG9mZnNldCk7XFxubW0vc3dhcGZpbGUuYy0xMTI1LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTEzNjc9c3RhdGljIGJvb2wgc3dhcF9hbGxvY19mYXN0KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEzODYtXFx0XFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9vZmZzZXQoc2ksIGNpKTtcXG5tbS9zd2FwZmlsZS5jOjEzODc6XFx0XFx0YWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBmb2xpbywgb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jLTEzODgtXFx0fSBlbHNlIHtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjE1OT1zd3BfZW50cnlfdCBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3QoaW50IHR5cGUpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIxNzgtXFx0XFx0aWYgKGNsdXN0ZXJfaXNfdXNhYmxlKGNpLCAwKSlcXG5tbS9zd2FwZmlsZS5jOjIxNzk6XFx0XFx0XFx0b2Zmc2V0ID0gYWxsb2Nfc3dhcF9zY2FuX2NsdXN0ZXIoc2ksIGNpLCBOVUxMLCBwY3Bfb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jLTIxODAtXFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MTozMS43OTQ0NDQyNTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYxMzU0MTc1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBTd2FwIEFsbG9jYXRpb24gUGF0aHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IG1lbnRhbCBtYXAgb2Ygc3dhcCBhbGxvY2F0aW9uIGlzIHRyaWdnZXJlZC4gSSBzZWUgdGhhdCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYSBjcml0aWNhbCBmdW5jdGlvbiBkdXJpbmcgc3lzdGVtIGhpYmVybmF0aW9uLCBpcyBhIGRpcmVjdCBjYWxsZXIgb2YgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYC4gVGhpcyBtYWtlcyBzZW5zZSwgYXMgYSBoaWJlcm5hdGlvbiBzd2FwIGFsbG9jYXRpb24gbmVlZHMgdG8gYmUgZXh0cmVtZWx5IHJlbGlhYmxlIGFuZCBsaWtlbHkgcGVyZm9ybXMgYSBmdWxsIHNjYW4gdG8gZmluZCB0aGUgYmVzdCBwb3NzaWJsZSBjbHVzdGVyLiBGdXJ0aGVyLCBgc3dhcF9hbGxvY19mYXN0YCBhbHNvIHVzZXMgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYC4gVGhpcyBpbXBsaWVzIGEgbW9yZSBwZXJmb3JtYW5jZS1vcmllbnRlZCBhbGxvY2F0aW9uIHBhdGggYWxzbyBzb21ldGltZXMgcmV2ZXJ0cyB0byBhIHRob3JvdWdoIHNlYXJjaCwgcGVyaGFwcyB3aGVuIGhldXJpc3RpY3MgZmFpbCwgb3Igd2hlbiBvdGhlciBjb25kaXRpb25zIGFyZW4ndCBtZXQuXG5cbk5vdywgbXkgY3VyaW9zaXR5IGlzIHBpcXVlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBzd2FwX2FsbG9jX2Zhc3RgIGFuZCB0aGUgcmVzdCBvZiB0aGUgc3dhcCBhbGxvY2F0aW9uIHN1YnN5c3RlbS4gV2hhdCBhcmUgdGhlIGNhbGxpbmcgcG9pbnRzIHRvIGBzd2FwX2FsbG9jX2Zhc3RgPyBJZGVudGlmeWluZyB0aGVzZSB1cHN0cmVhbSBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIGluc2lnaHQgaW50byB3aGVuIHRoZSBmYXN0IHBhdGggaXMgdHJpZ2dlcmVkIGFuZCB3aGF0IHNjZW5hcmlvcyByZXF1aXJlIGEgbW9yZSByb2J1c3QsIGFsYmVpdCBzbG93ZXIsIHNjYW4gdXNpbmcgYGFsbG9jX3N3YXBfc2Nhbl9jbHVzdGVyYC4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBjaGFpbiB3aWxsIGlsbHVtaW5hdGUgaG93IHRoaXMgZW50aXJlIGFsbG9jYXRpb24gc3lzdGVtIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MTozNS40MDc5ODgwMTVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mjc2MTk4MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9hbGxvY19mYXN0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MTM0Nz1zdGF0aWMgYm9vbCBnZXRfc3dhcF9kZXZpY2VfaW5mbyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2kpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTEzNjYtICovXFxubW0vc3dhcGZpbGUuYzoxMzY3OnN0YXRpYyBib29sIHN3YXBfYWxsb2NfZmFzdChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBmaWxlLmMtMTM2OC17XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTc2Ny1cXHRsb2NhbF9sb2NrKFxcdTAwMjZwZXJjcHVfc3dhcF9jbHVzdGVyLmxvY2spO1xcbm1tL3N3YXBmaWxlLmM6MTc2ODpcXHRpZiAoIXN3YXBfYWxsb2NfZmFzdChmb2xpbykpXFxubW0vc3dhcGZpbGUuYy0xNzY5LVxcdFxcdHN3YXBfYWxsb2Nfc2xvdyhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjM3LjMzNTYxMzQ4OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzU2NjI4ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQ6XG5cbioqRm9jdXNpbmcgb24gU3dhcCBBbGxvY2F0aW9uKipcblxuQWxyaWdodCwgdGhlIGNvcmUgaXNzdWUgc2VlbXMgdG8gcmV2b2x2ZSBhcm91bmQgc3dhcCBhbGxvY2F0aW9uLiBJIHNlZSB0aGF0IGBmb2xpb19hbGxvY19zd2FwYCBkaXJlY3RseSBjYWxscyBgc3dhcF9hbGxvY19mYXN0YC4gVGhhdCdzIGEgc3Ryb25nIGluZGljYXRvci4gSXQgbWVhbnMgdGhhdCBgZm9saW9fYWxsb2Nfc3dhcGAgaXMgdGhlIGhpZ2gtbGV2ZWwgZW50cnkgcG9pbnQgd2hlcmUgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgaXMgZGVjaWRlZC4gSXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgbXkgaW52ZXN0aWdhdGlvbi4gQnkgdW5kZXJzdGFuZGluZyBob3cgYGZvbGlvX2FsbG9jX3N3YXBgIHdvcmtzIGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIGBzd2FwX2FsbG9jX2Zhc3RgLCBJJ2xsIHByb2JhYmx5IGdldCBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zLlxuXG5Ob3csIGxldCdzIHRha2UgYSBsb29rIGF0IGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJJ20gY3VyaW91cyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGZvbGlvIHN3YXAgYWxsb2NhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgaW5mb3JtYXRpb24gdGhlIGZ1bmN0aW9uIGhvbGRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0NCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjQxLjA5MjI0NTU4N1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwODU4MjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTI0OD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKTtcXG4tLVxcbm1tL3N3YXAuaC0yNTAtLyogRm9yIGludGVybmFsIHVzZSAqL1xcbm1tL3N3YXAuaDoyNTE6ZXh0ZXJuIHZvaWQgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG5tbS9zd2FwLmgtMjUyLVxcdFxcdFxcdFxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjYyPXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0yOTctXFx0aWYgKCFmb2xpb19zd2FwcGVkKSB7XFxubW0vc3dhcF9zdGF0ZS5jOjI5ODpcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9zdGFydCwgbnJfcGFnZXMpO1xcbm1tL3N3YXBfc3RhdGUuYy0yOTktXFx0fSBlbHNlIGlmIChuZWVkX2ZyZWUpIHtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDItXFx0XFx0XFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXFxubW0vc3dhcF9zdGF0ZS5jOjMwMzpcXHRcXHRcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xcbm1tL3N3YXBfc3RhdGUuYy0zMDQtXFx0XFx0fSB3aGlsZSAoKytjaV9vZmYgXFx1MDAzYyBjaV9lbmQpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MjItXFx0XFx0aWYgKGNpX2JhdGNoICE9IC0xKSB7XFxubW0vc3dhcGZpbGUuYzoxNjIzOlxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX2JhdGNoLCBjaV9vZmYgLSBjaV9iYXRjaCk7XFxubW0vc3dhcGZpbGUuYy0xNjI0LVxcdFxcdFxcdGNpX2JhdGNoID0gLTE7XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MjgtXFx0aWYgKGNpX2JhdGNoICE9IC0xKVxcbm1tL3N3YXBmaWxlLmM6MTYyOTpcXHRcXHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9iYXRjaCwgY2lfb2ZmIC0gY2lfYmF0Y2gpO1xcbm1tL3N3YXBmaWxlLmMtMTYzMC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTg4ND1zdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqZ2V0X3N3YXBfZGV2aWNlKHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xOTE0LSAqL1xcbm1tL3N3YXBmaWxlLmM6MTkxNTp2b2lkIF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy0xOTE2LVxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYz0yMTk5PXZvaWQgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3Qoc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTIyMDUtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhzaSwgb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jOjIyMDY6XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XFxubW0vc3dhcGZpbGUuYy0yMjA3LVxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MTo0Mi44MDA4NDMzMzdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE0NDc0MjIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyBTd2FwIENsdXN0ZXIgRnJlZSBFbnRyaWVzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBtZW50YWwgbWFwIG9mIHRoZSBzd2FwIHN5c3RlbSBpcyBiZWluZyBwb2tlZCBoZXJlLiBJJ20gZm9jdXNpbmcgb24gdGhlIGZ1bmN0aW9uIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJIHNlZSBpdCdzIGNhbGxlZCBmcm9tIGEgZmV3IHBsYWNlczogYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCBgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyYCwgYW5kIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGAuIFRoYXQgbWFrZXMgaW50dWl0aXZlIHNlbnNlOyB3ZSdyZSBkZWFsaW5nIHdpdGggZnJlZWluZyB1cCBzcGFjZSBpbiB0aGUgc3dhcCBjYWNoZSwgYW5kIHRoZXNlIGFyZSBhbGwgcmVsYXRlZCBhY3Rpdml0aWVzIC0gZWl0aGVyIHJlbW92aW5nIGVudHJpZXMgZGlyZWN0bHksIHB1dHRpbmcgbmV3IG9uZXMsIG9yIGZyZWVpbmcgdGhlIHNsb3QgZHVyaW5nIGhpYmVybmF0aW9uLlxuXG5CdXQgbm93IG15IGF0dGVudGlvbiBpcyBjYXVnaHQgYnkgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAuIFRoYXQncyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4gV2hpbGUgSSBrbm93ICp3aGF0KiBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYCAqZG9lcyosIHVuZGVyc3RhbmRpbmcgd2hlcmUgYW5kIHdoeSB3ZSAqcHV0KiBlbnRyaWVzIGludG8gdGhlc2UgY2x1c3RlcnMgaXMgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyBzd2FwIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSBpbiBoaWdoLWxvYWQgc2NlbmFyaW9zLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXJgIHRvIGl0cyBjYWxsZXJzLiBLbm93aW5nIHRoYXQgY29udGV4dCBnaXZlcyBtZSBhIG1vcmUgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB3aHkgYF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllc2AgaXMgY2FsbGVkLiBJdCdsbCBnaXZlIG1lIGNsdWVzIHRvIHdoZXJlIHRoZSByZWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIGV4aXN0LiBJcyB0aGlzIG9wZXJhdGlvbiBiZWluZyB0cmlnZ2VyZWQgdG9vIG9mdGVuPyBEb2VzIHRoZSBjYWxsZXIgY29udHJpYnV0ZSB0byB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucz8gS25vd2luZyB0aGUgY2FsbGluZyBoaWVyYXJjaHkgd2lsbCBwcm92aWRlIHRoZSBhbnN3ZXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ1OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjUwLjk0NTU4ODUxNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTg5MzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xNTM3PXN0YXRpYyB2b2lkIF9fc3dhcF9jbHVzdGVyX3B1dF9lbnRyeShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xNTc1LS8qKlxcbm1tL3N3YXBmaWxlLmM6MTU3NjogKiBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIgLSBEZWNyZWFzZSB0aGUgc3dhcCBjb3VudCBvZiBzbG90cyB3aXRoaW4gb25lIGNsdXN0ZXJcXG5tbS9zd2FwZmlsZS5jLTE1NzctICogQHNpOiBUaGUgc3dhcCBkZXZpY2UuXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE1ODctICovXFxubW0vc3dhcGZpbGUuYzoxNTg4OnN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxubW0vc3dhcGZpbGUuYy0xNTg5LVxcdFxcdFxcdFxcdCAgICAgcGdvZmZfdCBvZmZzZXQsIGludCBucixcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTgzMD12b2lkIGZvbGlvX3B1dF9zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0xODQzLVxcbm1tL3N3YXBmaWxlLmM6MTg0NDpcXHRzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc2ksIHN3cF9vZmZzZXQoZW50cnkpLCBucl9wYWdlcywgZmFsc2UpO1xcbm1tL3N3YXBmaWxlLmMtMTg0NS19XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTIxMjQ9dm9pZCBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChzd3BfZW50cnlfdCBlbnRyeSwgaW50IG5yKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTQwLVxcdFxcdGNsdXN0ZXJfZW5kID0gbWluKHJvdW5kX3VwKG9mZnNldCArIDEsIFNXQVBGSUxFX0NMVVNURVIpLCBlbmRfb2Zmc2V0KTtcXG5tbS9zd2FwZmlsZS5jOjIxNDE6XFx0XFx0c3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHNpLCBvZmZzZXQsIGNsdXN0ZXJfZW5kIC0gb2Zmc2V0LCB0cnVlKTtcXG5tbS9zd2FwZmlsZS5jLTIxNDItXFx0XFx0b2Zmc2V0ID0gY2x1c3Rlcl9lbmQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjUyLjYzMTQ5OTg3NloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE0NzMyMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biByZWFzb25pbmc6XG5cbioqQW5hbHl6aW5nIHRoZSBTd2FwIEVudHJ5IEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIHRoaXMgc3dhcCBlbnRyeSBidXNpbmVzcy4gSXQgbG9va3MgbGlrZSBgZm9saW9fcHV0X3N3YXBgIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucywgc2luY2UgdGhleSBib3RoIGNhbGwgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAuIFRoYXQncyBhIHByZXR0eSBjbGVhciBpbmRpY2F0b3IgdGhhdCBgZm9saW9fcHV0X3N3YXBgIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCB0aGUgaW52ZXN0aWdhdGlvbi4gSXQncyB0aGUgaGlnaGVzdC1sZXZlbCBlbnRyeSBwb2ludCwgc28gdW5kZXJzdGFuZGluZyAqaXQqIHdpbGwgbGlrZWx5IHNoZWQgbGlnaHQgb24gdGhlIG92ZXJhbGwgcHJvY2Vzcy5cblxuQnV0LCBJIHNob3VsZCBhbHNvIGRvdWJsZS1jaGVjayBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgLiBJdCdzIHBvc3NpYmxlIHRoZXJlIGFyZSBzb21lIGtleSB0aGluZ3MgaGFwcGVuaW5nIGluICp0aGF0KiBmdW5jdGlvbiB0aGF0IGFyZW4ndCBpbW1lZGlhdGVseSBvYnZpb3VzIGp1c3QgZnJvbSBsb29raW5nIGF0IGBmb2xpb19wdXRfc3dhcGAuIEdvdHRhIGJlIHRob3JvdWdoLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI1NSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUxOjU2LjA0NjIzNTQzNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0OTM1ODMxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vZ21hcF9oZWxwZXJzLmM9OTI9dm9pZCBnbWFwX2hlbHBlcl96YXBfb25lX3BhZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgdm1hZGRyKVxcbi0tXFxuYXJjaC9zMzkwL21tL2dtYXBfaGVscGVycy5jLTExMi1cXHRcXHRkZWNfbW1fY291bnRlcihtbSwgTU1fU1dBUEVOVFMpO1xcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYzoxMTM6XFx0XFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc2wsIDEpO1xcbmFyY2gvczM5MC9tbS9nbWFwX2hlbHBlcnMuYy0xMTQtXFx0XFx0cHRlX2NsZWFyKG1tLCB2bWFkZHIsIHB0ZXApO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmg9Mzk4PWludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50cnkpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oOjM5OTp2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvc3dhcC5oLTQwMC1cXG4tLVxcbmluY2x1ZGUvbGludXgvc3dhcC5oPTQ0Mj1zdGF0aWMgaW5saW5lIGludCBzd2FwX2R1cF9lbnRyeV9kaXJlY3Qoc3dwX2VudHJ5X3QgZW50KVxcbi0tXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDQ2LVxcbmluY2x1ZGUvbGludXgvc3dhcC5oOjQ0NzpzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9wdXRfZW50cmllc19kaXJlY3Qoc3dwX2VudHJ5X3QgZW50LCBpbnQgbnIpXFxuaW5jbHVkZS9saW51eC9zd2FwLmgtNDQ4LXtcXG4tLVxcbm1tL21hZHZpc2UuYz02NTM9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL21hZHZpc2UuYy02OTYtXFx0XFx0XFx0XFx0bnJfc3dhcCAtPSBucjtcXG5tbS9tYWR2aXNlLmM6Njk3OlxcdFxcdFxcdFxcdHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KGVudHJ5LCBucik7XFxubW0vbWFkdmlzZS5jLTY5OC1cXHRcXHRcXHRcXHRjbGVhcl9ub25wcmVzZW50X3B0ZXMobW0sIGFkZHIsIHB0ZSwgbnIpO1xcbi0tXFxubW0vbWVtb3J5LmM9MTg2Nj1zdGF0aWMgaW5saW5lIGludCB6YXBfbm9ucHJlc2VudF9wdGVzKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tZW1vcnkuYy0xODk5LVxcdFxcdHJzc1tNTV9TV0FQRU5UU10gLT0gbnI7XFxubW0vbWVtb3J5LmM6MTkwMDpcXHRcXHRzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdChlbnRyeSwgbnIpO1xcbm1tL21lbW9yeS5jLTE5MDEtXFx0fSBlbHNlIGlmIChzb2Z0bGVhZl9pc19taWdyYXRpb24oZW50cnkpKSB7XFxuLS1cXG5tbS9zaG1lbS5jPTk3NT1zdGF0aWMgbG9uZyBzaG1lbV9mcmVlX3N3YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9zaG1lbS5jLTk5NS1cXHRpZiAobnJfcGFnZXMpXFxubW0vc2htZW0uYzo5OTY6XFx0XFx0c3dhcF9wdXRfZW50cmllc19kaXJlY3QocmFkaXhfdG9fc3dwX2VudHJ5KHJhZHN3YXApLCBucl9wYWdlcyk7XFxubW0vc2htZW0uYy05OTctXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTgwMC0gKiBOT1RFOiBUaGUgY2FsbGVyIGFsc28gaGFzIHRvIGVuc3VyZSB0aGVyZSBpcyBubyByYWNlZCBjYWxsIHRvXFxubW0vc3dhcGZpbGUuYzoxODAxOiAqIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0IG9uIGl0cyBzd2FwIGVudHJ5IGJlZm9yZSB0aGlzIGhlbHBlciByZXR1cm5zLCBvclxcbm1tL3N3YXBmaWxlLmMtMTgwMi0gKiB0aGUgc3dhcCBjb3VudCBtYXkgdW5kZXJmbG93Llxcbi0tXFxubW0vc3dhcGZpbGUuYz0xOTk4PWludCBzd3Bfc3dhcGNvdW50KHN3cF9lbnRyeV90IGVudHJ5KVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMDI1LSAqIG9ubHkgYmUgZG9uZSBieSBmb2xpb19kdXBfc3dhcCwgd2hpY2ggYWxzbyBsb2NrcyB0aGUgZm9saW8uIEJ1dCBhIGNvbmN1cnJlbnRcXG5tbS9zd2FwZmlsZS5jOjIwMjY6ICogZGVjcmVhc2Ugb2Ygc3dhcCBjb3VudCBpcyBwb3NzaWJsZSB0aHJvdWdoIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0LCBzbyB0aGlzXFxubW0vc3dhcGZpbGUuYy0yMDI3LSAqIG1heSByZXR1cm4gYSBmYWxzZSBwb3NpdGl2ZS5cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjA5OT1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTExLS8qKlxcbm1tL3N3YXBmaWxlLmM6MjExMjogKiBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdCgpIC0gUmVsZWFzZSByZWZlcmVuY2Ugb24gcmFuZ2Ugb2Ygc3dhcCBlbnRyaWVzIGFuZFxcbm1tL3N3YXBmaWxlLmMtMjExMy0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjbGFpbSB0aGVpciBjYWNoZSBpZiBubyBtb3JlIHJlZmVyZW5jZXMgcmVtYWluLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTIzLSAqL1xcbm1tL3N3YXBmaWxlLmM6MjEyNDp2b2lkIHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0KHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpXFxubW0vc3dhcGZpbGUuYy0yMTI1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTE6NTcuNTk1NTk4Mjg5WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTUyMDY2NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipGb2N1c2luZyBvbiBTd2FwIEVudHJ5IE1hbmFnZW1lbnQqKlxuXG5SaWdodCwgc28gYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCBwb3BzIHVwIGluIGEgZmV3IGtleSBwbGFjZXM6IGB6YXBfbm9ucHJlc2VudF9wdGVzYCwgYG1hZHZpc2VfZnJlZV9wdGVfcmFuZ2VgLCBhbmQgYHNobWVtX2ZyZWVfc3dhcGAuIFRoYXQgdGVsbHMgbWUgdGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgZnVuZGFtZW50YWwgdG8gaG93IHdlJ3JlIGhhbmRsaW5nIHN3YXAgZW50cmllcy4gU2VlbXMgbGlrZSBhIGdvb2QgcGxhY2UgdG8gY29uY2VudHJhdGUgbXkgYXR0ZW50aW9uLiBJdCdzIGhhbmRsaW5nIHRoZSBkaXJlY3QgcmVsZWFzZSBvZiB0aG9zZSBlbnRyaWVzLCB3aGljaCBpcyBzb21ldGhpbmcgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYmV0dGVyLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBwb2ludCB3aGVyZSB3ZSdyZSBhY3R1YWxseSAqcHV0dGluZyogdGhvc2UgZW50cmllcy5cblxuR2l2ZW4gdGhlIGNvbnRleHQsIEkgdGhpbmsgaXQncyB3b3J0aCB0YWtpbmcgYSBsb29rIGF0IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCB0byBzZWUgd2hhdCBraW5kIG9mIG9wZXJhdGlvbnMgd2UgYXJlIGdvaW5nIHRvIHBlcmZvcm0gYXQgdGhhdCBwb2ludC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1ODAsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjowMS4yOTA4MDc5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcwNDY3Mjg3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBfc3RhdGUuYz0yNTI9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMjYxLVxcbm1tL3N3YXBfc3RhdGUuYzoyNjI6c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXBfc3RhdGUuYy0yNjMtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zMjE9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzI1LVxcbm1tL3N3YXBfc3RhdGUuYzozMjY6XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbm1tL3N3YXBfc3RhdGUuYy0zMjctXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz00MTQ9c3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtNDY5LVxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcbm1tL3N3YXBfc3RhdGUuYzo0NzA6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbm1tL3N3YXBfc3RhdGUuYy00NzEtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNpLVxcdTAwM2Vsb2NrKTtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy00ODAtXFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjaS1cXHUwMDNlbG9jayk7XFxubW0vc3dhcF9zdGF0ZS5jOjQ4MTpcXHRcXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XFxubW0vc3dhcF9zdGF0ZS5jLTQ4Mi1cXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y2ktXFx1MDAzZWxvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjowMi45OTU0ODU1MloiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTMyMDAwMTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU3dhcCBDYWNoZSBEZWxldGlvbioqXG5cblJpZ2h0LCBzbyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgYSBmdW5jdGlvbiBjYWxsLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCdzIGl0cyBwdXJwb3NlPyBHaXZlbiB0aGUgbmFtZSwgaXQncyBpbnZvbHZlZCBpbiBkZWxldGluZyBlbnRyaWVzIGZyb20gdGhlIHN3YXAgY2FjaGUsIGxpa2VseSByZWxhdGVkIHRvIHBhZ2Utb3V0IG9wZXJhdGlvbnMuIEJ1dCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgd2hhdCdzICppbml0aWF0aW5nKiB0aGlzIGRlbGV0aW9uPyBUaGUgY29kZSBzdHJ1Y3R1cmUgc2F5cyB0aGF0IGl0IGNhbGxzIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBpbnRlcm5hbCBvcGVyYXRpb24gd2l0aGluIHRoZSBzd2FwIGNhY2hlIG1hbmFnZW1lbnQuXG5cblRoZSBtb3JlIGNydWNpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0IGlzOiAqd2hvKiBvciAqd2hhdCogaXMgY2FsbGluZyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2A/IElzIGl0IHRoZSBwYWdlIHJlY2xhaW0gbWVjaGFuaXNtPyBJcyBpdCBhIGJhY2tncm91bmQgcHJvY2Vzcz8gSXMgaXQgcmVsYXRlZCB0byB1c2VyLXNwYWNlIG1lbW9yeSBtYW5hZ2VtZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgd2lsbCByZXZlYWwgdGhlIHRyaWdnZXIgZm9yIHRoZXNlIGRlbGV0aW9ucywgYW5kIHdoZXJlIHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LiBJdCdzIHRoZSBlc3NlbnRpYWwgbmV4dCBzdGVwIGluIHRyYWNpbmcgdGhlIGNhbGwgY2hhaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjkxLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6MDYuNTI3NDg4MjE1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTI5NTkzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcXG4tLVxcbm1tL3N3YXAuaD00NTE9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmgtNDU0LVxcbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtNDU2LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjYyPXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDgtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMwOTogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTMxMC0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMyMC0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXBfc3RhdGUuYy0zMjItXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzM0LSAqXFxubW0vc3dhcF9zdGF0ZS5jOjMzNTogKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zNDE9dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0Ni1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDc6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTtcXG5tbS9zd2FwX3N0YXRlLmMtMzQ4LVxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MTgtXFx0XFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXFxubW0vc3dhcGZpbGUuYzoxNjE5OlxcdFxcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cXG5tbS9zd2FwZmlsZS5jLTE2MjAtXFx0XFx0ICovXFxuLS1cXG5tbS92bXNjYW4uYz02ODI9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtNzM4LVxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG5tbS92bXNjYW4uYzo3Mzk6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XFxubW0vdm1zY2FuLmMtNzQwLVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6MDguMDU3MDg3NzZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTcxMTM4NTg2MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTd2FwIGFuZCBIaWJlcm5hdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgZGVmaW5pdGVseSBhIGtleSBmdW5jdGlvbiwgYXMgaXQncyBkaXJlY3RseSBjYWxsZWQgYnkgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fcmVtb3ZlX21hcHBpbmdgLiBJIHNob3VsZCBhbHNvIGV4YW1pbmUgYF9fc3dhcF90YWJsZV9nZXRgIGFuZCBgX19zd2FwX3RhYmxlX3NldGAgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgb3RoZXIgZGVwZW5kZW5jaWVzLlxuXG5Gcm9tIHRoZSBwYXRjaCwgSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBUaGlzIHBvaW50cyBtZSB0b3dhcmRzIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlIHN3YXAgY2FjaGUgYWxsb2NhdGlvbiBhbmQgZnJlZWluZy4gVGhlIG1vc3QgcmVsZXZhbnQgZnVuY3Rpb25zIHNlZW0gdG8gYmU6XG5cbiogICBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2BcbiogICBgZm9saW9fYWxsb2Nfc3dhcGBcbiogICBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgXG4qICAgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYFxuKiAgIGBzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdGBcbiogICBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YFxuXG5XYWl0IGEgbWludXRlLCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGFuZCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCBhcmUgc3BlY2lmaWNhbGx5IGxpbmtlZCB0byBoaWJlcm5hdGlvbiEgVGhhdCB0cmlnZ2VycyBhIG1lbnRhbCBub3RlOiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTXkgaHVuY2ggaXMgY29uZmlybWVkOiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHMgYFNXUF9UQl9ISUJgIGFuZCBtb2RpZmllcyBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgLCBpbXBseWluZyB0aGF0IGBDT05GSUdfSElCRVJOQVRJT05gIGlzIGRlZmluaXRlbHkgcmVxdWlyZWQuIFNpbmNlIHRoaXMgaXMgYWxsIHN3YXAtcmVsYXRlZCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgY29uZmlybSB0aGF0IGBDT05GSUdfU1dBUGAgaXMgYWxzbyBhIGRlcGVuZGVuY3kuIExldCBtZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcy5cblxuT2theSwgY2hlY2tpbmcgYG1tL0tjb25maWdgIGZvciBgU1dBUGAgY29uZmlybXMgYENPTkZJR19TV0FQYCBhcyB0aGUgbmFtZS4gU2ltaWxhcmx5LCBjaGVja2luZyBga2VybmVsL3Bvd2VyL0tjb25maWdgIGZvciBgSElCRVJOQVRJT05gIGNvbmZpcm1zIHRoYXQgYENPTkZJR19ISUJFUk5BVElPTmAgaXMgdGhlIGNvcnJlY3QgbmFtZS4gVGhhdCBjb25maXJtcyB0aGUgZGVwZW5kZW5jeSB0cmVlOiBCb3RoIFNXQVAgYW5kIEhJQkVSTkFUSU9OIGFyZSByZXF1aXJlZCBmb3IgdGhpcyBwYXRjaC5cblxuSSdsbCByZXZpZXcgdGhlIGNvZGUgY2hhbmdlcyBpbiBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AgYW5kIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLiBJbiBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AsIEkgc2VlIGEgc3BlY2lhbCBjYXNlOiB3aGVuIGBmb2xpb2AgaXMgTlVMTCwgYW4gYWxsb2NhdGlvbiBpcyBwZXJmb3JtZWQgc3BlY2lmaWNhbGx5IGZvciBoaWJlcm5hdGlvbi4gVGhpcyBhbHNvIGNvbmZpcm1zIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgIGFzIGEgY3J1Y2lhbCBmdW5jdGlvbiB0aGF0IG5lZWRzIGEgY2xvc2VyIGxvb2suXG5cblRoZW4sIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgIGhhbmRsZXMgdGhlIGBTV1BfVEJfSElCYCBmbGFnLCB3aGljaCBpcyB1c2VkIGZvciBoaWJlcm5hdGlvbi5cblxuRmluYWxseSwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCBpcyBhbHNvIGltcG9ydGFudCwgYXMgaXQgaGFuZGxlcyB0aGUgZnJlZWluZyBvZiBoaWJlcm5hdGlvbiBzbG90cy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucyB3aXRoIGBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrYC4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIGEgdmFsaWRhdGlvbiBjaGVjayBhbmQgSSBuZWVkIHRvIGVuc3VyZSBpdCdzIG5vdCBiZWluZyBtaXMtdXNlZC4gSXQncyBjYWxsZWQgYnkgYF9fc3dhcF9jYWNoZV9hbGxvY2Agd2hpY2ggaXMgY2FsbGVkIGJ5IGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYC4gSSdsbCBhbHNvIGFkZCBgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW9gIHRvIHRoZSBmb2N1cyBsaXN0IGFzIGl0IGNhbGxzIGBfX3N3YXBfY2FjaGVfYWxsb2NgLlxuXG5UaGVyZWZvcmUsIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdG8gZm9jdXMgb24gYXJlOlxuXG4qICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIChhbmQgYF9fc3dhcF9jYWNoZV9hbGxvY2AgYW5kIGBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpb2ApXG4qICAgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YFxuKiAgIGBzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mzk2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ3OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjoyNS4xNzA5NDg1MDRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzE1ODgwMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0zOTI1PXN0YXRpYyBpbnQgX19mb2xpb19mcmVlemVfYW5kX3NwbGl0X3VubWFwcGVkKHN0cnVjdCBmb2xpbyAqZm9saW8sIHVuc2lnbmVkIGludCBuZXdfb3JkZXIsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQwMjgtXFx0XFx0XFx0aWYgKGNpKSB7XFxubW0vaHVnZV9tZW1vcnkuYzo0MDI5OlxcdFxcdFxcdFxcdF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKGNpLCBmb2xpbywgbmV3X2ZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jLTQwMzAtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9taWdyYXRlLmM9NTgzPXN0YXRpYyBpbnQgX19mb2xpb19taWdyYXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9taWdyYXRlLmMtNjU2LVxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpXFxubW0vbWlncmF0ZS5jOjY1NzpcXHRcXHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgZm9saW8sIG5ld2ZvbGlvKTtcXG5tbS9taWdyYXRlLmMtNjU4LVxcdGVsc2VcXG4tLVxcbm1tL3NobWVtLmM9MjA4OT1zdGF0aWMgaW50IHNobWVtX3JlcGxhY2VfZm9saW8oc3RydWN0IGZvbGlvICoqZm9saW9wLCBnZnBfdCBnZnAsXFxuLS1cXG5tbS9zaG1lbS5jLTIxMjYtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrX2lycShvbGQpO1xcbm1tL3NobWVtLmM6MjEyNzpcXHRfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhjaSwgb2xkLCBuZXcpO1xcbm1tL3NobWVtLmMtMjEyOC1cXHRtZW1fY2dyb3VwX3JlcGxhY2VfZm9saW8ob2xkLCBuZXcpO1xcbi0tXFxubW0vc3dhcC5oPTMyMT12b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcXG5tbS9zd2FwLmg6MzIzOnZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzI0LVxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XFxuLS1cXG5tbS9zd2FwLmg9NDU1PXN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuLS1cXG5tbS9zd2FwLmgtNDU5LVxcbm1tL3N3YXAuaDo0NjA6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTQ2MS1cXHRcXHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzQxPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zNTMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjM1NDogKiBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyAtIFJlcGxhY2UgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtMzU1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzY2LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozNjc6dm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXBfc3RhdGUuYy0zNjgtXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjoyNy4wMDI1NTE2NloiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4OTI0NDI1Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBTd2FwIGFuZCBIaWJlcm5hdGlvbiBBUEkgRm9jdXMqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoZXNlIHN3YXAgYW5kIGhpYmVybmF0aW9uIEFQSXMuIEl0IGxvb2tzIGxpa2UgYF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvYCBpcyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQsIGdpdmVuIHRoYXQgaXQncyBjYWxsZWQgYnkgYF9fZm9saW9fZnJlZXplX2FuZF9zcGxpdF91bm1hcHBlZGAsIGBfX2ZvbGlvX21pZ3JhdGVfbWFwcGluZ2AsIGFuZCBgc2htZW1fcmVwbGFjZV9mb2xpb2AuIFRob3NlIGFyZSBhbGwgaW50ZXJlc3RpbmcgY29udGV4dHMuXG5cbkxldCBtZSBqdXN0IHN1bW1hcml6ZSB0aGUgY3VycmVudCBmb2N1czpcbiogICBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2BcbiogICBgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW9gXG4qICAgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGBcbiogICBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgXG5cbkhtbSwgYXJlIHdlIG1pc3NpbmcgYW55dGhpbmc/IExldCdzIHNlZS4uLiBBaCwgd2hhdCBhYm91dCBgX19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzYD8gVGhhdCdzIGNhbGxlZCBieSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXJgLiBBbmQgYHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcmAgaXMgdGhlbiBjYWxsZWQgYnkgYGZvbGlvX3B1dF9zd2FwYCBhbmQgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YC4gVGhhdCBtYWtlcyBgZm9saW9fcHV0X3N3YXBgIGFuZCBgc3dhcF9wdXRfZW50cmllc19kaXJlY3RgIHdvcnRoIGNvbnNpZGVyaW5nLiBBbmQgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGNhbGxlZCBieSBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AsIHNvIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgZGVmaW5pdGVseSByZWxldmFudC5cblxuQWxyaWdodCwgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdCBvZiBrZXkgZnVuY3Rpb25zLiBNeSB1cGRhdGVkIGZvY3VzIHN5bWJvbHMgYXJlOlxuXG4qICAgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gXG4qICAgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGBcbiogICBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgXG4qICAgYGZvbGlvX3B1dF9zd2FwYFxuKiAgIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGBcbiogICBgc3dhcF9jYWNoZV9kZWxfZm9saW9gXG5cblRoYXQgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgc2V0IG9mIGVudHJ5IHBvaW50cyB0aGF0IGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZC5cblxuRmluYWxseSwgSSBzaG91bGQgY2hlY2sgdGhlIGNvbmZpZyBuYW1lcy4gWWVzLCBgSElCRVJOQVRJT05gIGFuZCBgU1dBUGAsIHNvIGl0IGxvb2tzIGNvcnJlY3QgdGhhdCB3ZSBoYXZlIHRoZSByaWdodCBjb25maWcgbmFtZS4gTm93LCBsZXQncyBqdXN0IHF1aWNrbHkgY2hlY2sgaWYgdGhlIGBTV0FQYCBjb25maWcgZGVwZW5kcyBvbiBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkzNDksIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6MzUuOTI2OTgwNjg2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTcyOTcwMzMyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cXG4tLVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjUtXFxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvbWlwcy9LY29uZmlnLTEyNjctXFx0Ym9vbFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnPTEyNj1jb25maWcgSU9fVFJBUFBFRFxcbi0tXFxuYXJjaC9zaC9LY29uZmlnLTEyOC1cXG5hcmNoL3NoL0tjb25maWc6MTI5OmNvbmZpZyBTV0FQX0lPX1NQQUNFXFxuYXJjaC9zaC9LY29uZmlnLTEzMC1cXHRib29sXFxuLS1cXG5tbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0xMS1cXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxcbm1tL0tjb25maWctMTMtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1MjozNy44OTk5NTg1MThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM0NzcyNTQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgU1dBUCBEZXBlbmRlbmNpZXMgaW4gbW0vS2NvbmZpZyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHRoZSBgU1dBUGAgZmVhdHVyZSB3aXRoaW4gdGhlIGtlcm5lbC4gTXkgZmlyc3QgaW5zdGluY3QsIGFuZCB3aGVyZSBJIGFsd2F5cyBzdGFydCB3aGVuIGRlYWxpbmcgd2l0aCBLY29uZmlnLCBpcyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYG1tL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCwgY3JpdGljYWxseSwgdGhlaXIgZGVwZW5kZW5jaWVzLiBUaGlzIHdpbGwgdGVsbCBtZSB3aGF0IG90aGVyIGZlYXR1cmVzIG9yIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGZvciBgU1dBUGAgdG8gZXZlbiBiZSBjb25zaWRlcmVkLCBvciB0byBmdW5jdGlvbiBjb3JyZWN0bHkuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGBTV0FQYCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgY29uZmlndXJhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0NjUsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo0MS4yNDc2ODcxODlaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo0MS4yNDc4MzI4MTlaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDg4MDkxMDc0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU3dhcCBhbmQgSGliZXJuYXRpb24gQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyB0aGUgc3dhcCBmdW5jdGlvbmFsaXR5IGlzIHNldCB1cCBpbiB0aGlzIHN5c3RlbS4gTXkgaW5pdGlhbCB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYFNXQVBgIGhpbmdlcyBvbiBhIGZldyBrZXkgcHJlcmVxdWlzaXRlcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBkZXBlbmQgb24gdGhlIHByZXNlbmNlIG9mIHRoZSBgTU1VYCAoTWVtb3J5IE1hbmFnZW1lbnQgVW5pdCkgYW5kIGBCTE9DS2AgZmVhdHVyZXMsIGJ1dCBjcnVjaWFsbHksIGl0ICptdXN0IG5vdCogaW5jbHVkZSBgQVJDSF9OT19TV0FQYC4gYEJMT0NLYCBpcyBwcmV0dHkgbXVjaCBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24sIHNvIHRoYXQncyBwcm9iYWJseSBub3Qgd2hlcmUgYW55IGlzc3VlIGxpZXMuIEp1c3QgdG8gYmUgc3VyZSBvZiB0aGUgd2hvbGUgcGljdHVyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBISUJFUk5BVElPTmAgbm93LCBhbmQgSSdsbCBmaW5kIHRoYXQgaW4gYGtlcm5lbC9wb3dlci9LY29uZmlnYC4gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgdGhlIHJlcXVpcmVtZW50cyBmb3IgaGliZXJuYXRpb24gaW50ZXJhY3Qgd2l0aCB0aGVzZSBvdGhlciBjb25maWd1cmF0aW9ucy4gSSB0aGluayBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrIGhlcmUsIHNvIGxldCdzIGNvbnRpbnVlIHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk2NSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6NDYuMTI4NzQ1Nzk1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9wb3dlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDM4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDM4OlxcdGNvbmZpZyBISUJFUk5BVElPTlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiSGliZXJuYXRpb24gKGFrYSAnc3VzcGVuZCB0byBkaXNrJylcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIFNXQVAgXFx1MDAyNlxcdTAwMjYgQVJDSF9ISUJFUk5BVElPTl9QT1NTSUJMRVxcbiAgNDE6XFx0XFx0c2VsZWN0IEhJQkVSTkFURV9DQUxMQkFDS1NcXG4gIDQyOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgNDM6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgNDQ6XFx0XFx0c2VsZWN0IENSWVBUT19MWk9cXG4gIDQ1OlxcdFxcdHNlbGVjdCBDUllQVE9fTFo0XFxuICA0NjpcXHRcXHRoZWxwXFxuICA0NzpcXHRcXHQgIEVuYWJsZSB0aGUgc3VzcGVuZCB0byBkaXNrIChTVEQpIGZ1bmN0aW9uYWxpdHksIHdoaWNoIGlzIHVzdWFsbHlcXG4gIDQ4OlxcdFxcdCAgY2FsbGVkIFxcXCJoaWJlcm5hdGlvblxcXCIgaW4gdXNlciBpbnRlcmZhY2VzLiAgU1REIGNoZWNrcG9pbnRzIHRoZVxcbiAgNDk6XFx0XFx0ICBzeXN0ZW0gYW5kIHBvd2VycyBpdCBvZmY7IGFuZCByZXN0b3JlcyB0aGF0IGNoZWNrcG9pbnQgb24gcmVib290LlxcbiAgNTA6XFx0XFxuICA1MTpcXHRcXHQgIFlvdSBjYW4gc3VzcGVuZCB5b3VyIG1hY2hpbmUgd2l0aCAnZWNobyBkaXNrIFxcdTAwM2UgL3N5cy9wb3dlci9zdGF0ZSdcXG4gIDUyOlxcdFxcdCAgYWZ0ZXIgcGxhY2luZyByZXN1bWU9L2Rldi9zd2FwcGFydGl0aW9uIG9uIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lXFxuICA1MzpcXHRcXHQgIGluIHlvdXIgYm9vdGxvYWRlcidzIGNvbmZpZ3VyYXRpb24gZmlsZS5cXG4gIDU0OlxcdFxcbiAgNTU6XFx0XFx0ICBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSB0aGUgYWRkaXRpb25hbCB1c2VybGFuZCB0b29scyBhdmFpbGFibGVcXG4gIDU2OlxcdFxcdCAgZnJvbSBcXHUwMDNjaHR0cDovL3N1c3BlbmQuc2YubmV0XFx1MDAzZS5cXG4gIDU3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo0Ni4xMjg4MjkwNjVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgyNzkxNjQ0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipIaWJlcm5hdGlvbiBMb2dpYyBhbmQgU3dhcCBDYWNoZSBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgYXMgZXhwZWN0ZWQsIGhpYmVybmF0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgY29udGluZ2VudCBvbiBib3RoIGBTV0FQYCBhbmQgYEhJQkVSTkFUSU9OYCBiZWluZyBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgZ2l2ZW4uIE5vdywgbGV0J3MgZHJpbGwgZG93biBpbnRvIHRoZSBzcGVjaWZpY3Mgb2YgdGhpcyBwYXRjaC5cblxuSSdtIHNlZWluZyBjaGFuZ2VzIGluIHRoZSBgX19zd2FwX2NhY2hlX2FkZF9jaGVja2AgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiBob3cgaXQgaGFuZGxlcyBleGlzdGluZyBzd2FwIHRhYmxlIGVudHJpZXMuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIGNoZWNraW5nIGZvciBzaGFkb3cgZW50cmllcyBub3cgKGAhc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpYCksIHdoaWNoIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhpYmVybmF0aW9uLiBUaGUgYWltIGlzIHRvIHByZXZlbnQgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBtaXN0YWtlbmx5IGdldHRpbmcgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzdGF0ZSBmb3IgdGhlIGhpYmVybmF0aW9uIHNsb3QgKGBTV1BfVEJfSElCYCkuIEl0IGFsc28gbW9kaWZpZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLlxuXG5JJ3ZlIGlkZW50aWZpZWQga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZDogYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBgc3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90YCwgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YCwgYGZvbGlvX3B1dF9zd2FwYCwgYHN3YXBfcHV0X2VudHJpZXNfZGlyZWN0YCwgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoZXNlIGFyZSB0aGUgY29yZSBlbGVtZW50cy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkLiBGb3J0dW5hdGVseSwgYWZ0ZXIgYSBxdWljayBjaGVjaywgaXQncyBjbGVhciB0aGF0IGBmb2xpb19wdXRfc3dhcGAsIGBzd2FwX3B1dF9lbnRyaWVzX2RpcmVjdGAsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCwgYHN3YXBfYWxsb2NfaGliZXJuYXRpb25fc2xvdGAsIGFuZCBgc3dhcF9mcmVlX2hpYmVybmF0aW9uX3Nsb3RgIGFyZSBhbGwgbm9uLXN0YXRpYywgaW5kaWNhdGluZyB0aGV5J3JlIGFjY2Vzc2libGUgb3V0c2lkZSB0aGVpciByZXNwZWN0aXZlIGNvbXBpbGF0aW9uIHVuaXRzLiBUaGlzIGlzIGFzIEkgZXhwZWN0LiBUaGUgY2hhbmdlIGxvb2tzIHNvbGlkIGFuZCB3aWxsIHdvcmsgYXMgaW50ZW5kZWQgd2l0aCBzd2FwIG9wZXJhdGlvbnMgYW5kIGhpYmVybmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTUzMiwiT3V0cHV0VG9rZW5zIjoxODIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MDksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo1NS45NTY3NDgwNTRaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzI0NzY2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiSElCRVJOQVRJT05cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2FsbG9jX2hpYmVybmF0aW9uX3Nsb3RcIixcbiAgICBcInN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJmb2xpb19wdXRfc3dhcFwiLFxuICAgIFwic3dhcF9wdXRfZW50cmllc19kaXJlY3RcIixcbiAgICBcInN3YXBfY2FjaGVfZGVsX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHN3YXAgY2FjaGUgbG9naWMgdG8gaW50cm9kdWNlIGEgbmV3IGhpYmVybmF0aW9uIHNsb3Qgc3RhdGUgKFNXUF9UQl9ISUIpIGFuZCBwcmV2ZW50cyBoaWJlcm5hdGlvbiBzbG90cyBmcm9tIGJlaW5nIGFjY2lkZW50YWxseSBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZSBkdXJpbmcgY2x1c3RlciByZWFkYWhlYWQuIEl0IGFsc28gY2hhbmdlcyBob3cgaGliZXJuYXRpb24gc2xvdHMgYXJlIGFsbG9jYXRlZCBhbmQgZnJlZWQsIGJ5cGFzc2luZyB0aGUgbm9ybWFsIHN3YXAgY2FjaGUgcmVmZXJlbmNlIGNvdW50aW5nLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcC9oaWJlcm5hdGlvbiBsb2dpYywgcmVhY2hhYmxlIHZpYSBzd2FwIG9wZXJhdGlvbnMgYW5kIGhpYmVybmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIkhJQkVSTkFUSU9OXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF9jYWNoZV9hbGxvY19mb2xpb1wiLFxuICAgIFwic3dhcF9hbGxvY19oaWJlcm5hdGlvbl9zbG90XCIsXG4gICAgXCJzd2FwX2ZyZWVfaGliZXJuYXRpb25fc2xvdFwiLFxuICAgIFwiZm9saW9fcHV0X3N3YXBcIixcbiAgICBcInN3YXBfcHV0X2VudHJpZXNfZGlyZWN0XCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzd2FwIGNhY2hlIGxvZ2ljIHRvIGludHJvZHVjZSBhIG5ldyBoaWJlcm5hdGlvbiBzbG90IHN0YXRlIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgaGliZXJuYXRpb24gc2xvdHMgZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBJdCBhbHNvIGNoYW5nZXMgaG93IGhpYmVybmF0aW9uIHNsb3RzIGFyZSBhbGxvY2F0ZWQgYW5kIGZyZWVkLCBieXBhc3NpbmcgdGhlIG5vcm1hbCBzd2FwIGNhY2hlIHJlZmVyZW5jZSBjb3VudGluZy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAvaGliZXJuYXRpb24gbG9naWMsIHJlYWNoYWJsZSB2aWEgc3dhcCBvcGVyYXRpb25zIGFuZCBoaWJlcm5hdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6NTYuMDMwMDAxNjEyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzkyNTQ1NzExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMTM6NTI6NTYuMDMwNDYzMjQyWiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjk3OTIwNzg1MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN3YXAgc2xvdCBtYW5hZ2VtZW50IHRvIGV4cGxpY2l0bHkgdHJhY2sgaGliZXJuYXRpb24gc2xvdHMgdXNpbmcgYSBuZXcgZmxhZyAoU1dQX1RCX0hJQikgYW5kIHByZXZlbnRzIHRoZW0gZnJvbSBiZWluZyBhY2NpZGVudGFsbHkgYWRkZWQgdG8gdGhlIHN3YXAgY2FjaGUgZHVyaW5nIGNsdXN0ZXIgcmVhZGFoZWFkLiBUaGVzZSBjaGFuZ2VzIGludm9sdmUgaW50ZXJuYWwgc3dhcCBzdGF0ZSB0cmFja2luZyBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludm9sdmUgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGFyaXNpbmcgZnJvbSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIGxvZ2ljIGVycm9ycywgb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcywgb3IgdXNlLWFmdGVyLWZyZWUgaXNzdWVzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZThkYTg2NzBlODk1NDFiNjNlNGJlNDg0ZTVhNDIxMzM1MjczNzk5N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDExIDEzOjUwOjM1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCBiNzZlYjNkODc2ZmQ3Li42MzQxZjFiZmZmYTIzIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0xODEsOSArMTgxLDE0IEBAIHN0YXRpYyBpbnQgX19zd2FwX2NhY2hlX2FkZF9jaGVjayhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiBcdGlmIChzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4tXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChvbGRfdGIpKVxuK1x0LypcbitcdCAqIE9ubHkgYSBzd2FwcGVkLW91dCBzbG90IG1heSBiZSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUuXG4rXHQgKiBDbHVzdGVyIHJlYWRhaGVhZCB3YWxrcyByYXcgb2Zmc2V0IHJhbmdlcywgc28gaXQgY2FuIGxhbmQgb25cbitcdCAqIHNsb3RzIHRoYXQgYXJlIGZyZWUsIGJhZCwgb3Igb3duZWQgYnkgaGliZXJuYXRpb24uXG4rXHQgKi9cbitcdGlmICghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8ICFfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSlcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXHRpZiAoc2hhZG93cCBcdTAwMjZcdTAwMjYgc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpKVxuK1x0aWYgKHNoYWRvd3ApXG4gXHRcdCpzaGFkb3dwID0gc3dwX3RiX3RvX3NoYWRvdyhvbGRfdGIpO1xuIFx0aWYgKG1lbWNnX2lkKVxuIFx0XHQqbWVtY2dfaWQgPSBfX3N3YXBfY2dyb3VwX2dldChjaSwgY2lfb2ZmKTtcbkBAIC0xOTYsNyArMjAxLDcgQEAgc3RhdGljIGludCBfX3N3YXBfY2FjaGVfYWRkX2NoZWNrKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRjaV9lbmQgPSBjaV9vZmYgKyBucjtcbiBcdGRvIHtcbiBcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbi1cdFx0aWYgKHVubGlrZWx5KHN3cF90Yl9pc19mb2xpbyhvbGRfdGIpIHx8XG4rXHRcdGlmICh1bmxpa2VseSghc3dwX3RiX2lzX3NoYWRvdyhvbGRfdGIpIHx8XG4gXHRcdFx0ICAgICAhX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgfHxcbiBcdFx0XHQgICAgIGlzX3plcm8gIT0gX19zd2FwX3RhYmxlX3Rlc3RfemVybyhjaSwgY2lfb2ZmKSB8fFxuIFx0XHRcdCAgICAgKG1lbWNnX2lkIFx1MDAyNlx1MDAyNiAqbWVtY2dfaWQgIT0gX19zd2FwX2Nncm91cF9nZXQoY2ksIGNpX29mZikpKSlcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3RhYmxlLmggYi9tbS9zd2FwX3RhYmxlLmhcbmluZGV4IGU2NjEzZTYyZjhkMGYuLmI5MTZhNjQ5MzUyMWEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3RhYmxlLmhcbisrKyBiL21tL3N3YXBfdGFibGUuaFxuQEAgLTMwLDYgKzMwLDcgQEAgc3RydWN0IHN3YXBfbWVtY2dfdGFibGUge1xuICAqIFBGTjogICAgICB8U1dBUF9DT1VOVHxafC0tLS0tLSBQRk4gLS0tLS0tLXwxMHwgLSBDYWNoZWQgc2xvdFxuICAqIFBvaW50ZXI6ICB8LS0tLS0tLS0tLS0gUG9pbnRlciAtLS0tLS0tLS0tfDEwMHwgLSAoVW51c2VkKVxuICAqIEJhZDogICAgICB8LS0tLS0tLS0tLS0tLSAxIC0tLS0tLS0tLS0tLS18MTAwMHwgLSBCYWQgc2xvdFxuKyAqIEhpYmVybjogICB8ICAgIDAgICAgIHwtLS0tLS0tIDEgLS0tLS0tLXwxMDAwMHwgLSBIaWJlcm5hdGlvbiBzbG90XG4gICpcbiAgKiBDT1VOVCBpcyBgU1dQX1RCX0NPVU5UX0JJVFNgIGxvbmcsIFogaXMgdGhlIGBTV1BfVEJfWkVST19GTEFHYCBiaXQsXG4gICogYW5kIHRvZ2V0aGVyIHRoZXkgZm9ybSB0aGUgYFNXUF9UQl9GTEFHU19CSVRTYCB3aWRlIGZsYWdzIGZpZWxkLlxuQEAgLTU0LDYgKzU1LDEwIEBAIHN0cnVjdCBzd2FwX21lbWNnX3RhYmxlIHtcbiAgKiAgIGFsaWduZWQgcG9pbnRlcnMuXG4gICpcbiAgKiAtIEJhZDogU3dhcCBzbG90IGlzIHJlc2VydmVkLCBwcm90ZWN0cyBzd2FwIGhlYWRlciBvciBob2xlcyBvbiBzd2FwIGRldmljZXMuXG4rICpcbisgKiAtIEhpYmVybjogU3dhcCBzbG90IGlzIHJlc2VydmVkIGJ5IGhpYmVybmF0aW9uIGZvciB0aGUgc3VzcGVuZCBpbWFnZSwgYW5kXG4rICogICBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlLiBUaGUgY291bnQgZmllbGQgaXMga2VwdCAwIHNvIGl0IG5ldmVyXG4rICogICByZWFkcyBhcyBhIHNsb3QgaW4gdXNlLlxuICAqL1xuIFxuIC8qIE5VTEwgRW50cnksIGFsbCAwICovXG5AQCAtODEsNiArODYsOSBAQCBzdHJ1Y3Qgc3dhcF9tZW1jZ190YWJsZSB7XG4gLyogQmFkIHNsb3Q6IGVuZHMgd2l0aCAwYjEwMDAgYW5kIHJlc3RzIG9mIGJpdHMgYXJlIGFsbCAxICovXG4gI2RlZmluZSBTV1BfVEJfQkFEXHRcdCgofjBVTCkgXHUwMDNjXHUwMDNjIDMpXG4gXG4rLyogSGliZXJuYXRpb24gc2xvdDogZW5kcyB3aXRoIDBiMTAwMDAsIG5vIGNvdW50LCByZXN0cyBvZiBiaXRzIGFyZSBhbGwgMSAqL1xuKyNkZWZpbmUgU1dQX1RCX0hJQlx0XHQoKCh+MFVMKSBcdTAwM2NcdTAwM2MgNCkgXHUwMDI2IH5TV1BfVEJfQ09VTlRfTUFTSylcbitcbiAvKiBNYWNybyBmb3Igc2hhZG93IG9mZnNldCBjYWxjdWxhdGlvbiAqL1xuICNkZWZpbmUgU1dBUF9DT1VOVF9TSElGVFx0U1dQX1RCX0ZMQUdTX0JJVFNcbiBcbkBAIC0xNjYsNiArMTc0LDExIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzd3BfdGJfaXNfYmFkKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuIFx0cmV0dXJuIHN3cF90YiA9PSBTV1BfVEJfQkFEO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgc3dwX3RiX2lzX2hpYmVybmF0aW9uKHVuc2lnbmVkIGxvbmcgc3dwX3RiKVxuK3tcbitcdHJldHVybiBzd3BfdGIgPT0gU1dQX1RCX0hJQjtcbit9XG4rXG4gc3RhdGljIGlubGluZSBib29sIHN3cF90Yl9pc19jb3VudGFibGUodW5zaWduZWQgbG9uZyBzd3BfdGIpXG4ge1xuIFx0cmV0dXJuIChzd3BfdGJfaXNfc2hhZG93KHN3cF90YikgfHwgc3dwX3RiX2lzX2ZvbGlvKHN3cF90YikgfHxcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggZGVhMmQzYjM2ZTA2Zi4uNGZiYTE3NzBjZTYxNiAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC05MjgsNyArOTI4LDcgQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHQgKiB1cG9uIGZvbGlvIHVubWFwLlxuIFx0ICpcbiBcdCAqIEVsc2UsIGl0J3MgYSBleGNsdXNpdmUgb3JkZXIgMCBhbGxvY2F0aW9uIGZvciBoaWJlcm5hdGlvbi5cbi1cdCAqIFRoZSBzbG90IHN0YXJ0cyB3aXRoIGNvdW50ID09IDEgYW5kIG5ldmVyIGluY3JlYXNlcy5cbitcdCAqIFRoZSBzbG90IGNhcnJpZXMgbm8gc3dhcCBjb3VudCBhbmQgaXMgZnJlZWQgYnkgb2Zmc2V0LlxuIFx0ICovXG4gXHRpZiAobGlrZWx5KGZvbGlvKSkge1xuIFx0XHRvcmRlciA9IGZvbGlvX29yZGVyKGZvbGlvKTtcbkBAIC05NDAsOCArOTQwLDggQEAgc3RhdGljIGJvb2wgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllcyhzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHRcdG9yZGVyID0gMDtcbiBcdFx0bnJfcGFnZXMgPSAxO1xuIFx0XHRzd2FwX2NsdXN0ZXJfYXNzZXJ0X2VtcHR5KGNpLCBjaV9vZmYsIDEsIGZhbHNlKTtcbi1cdFx0LyogRmFrZSBzaGFkb3cgcGxhY2Vob2xkZXIgd2l0aCBubyBmbGFnLCBoaWJlcm5hdGlvbiBkb2VzIG5vdCB1c2UgdGhlIHplcm9tYXAgKi9cbi1cdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBfX3N3cF90Yl9ta19jb3VudChzaGFkb3dfdG9fc3dwX3RiKE5VTEwsIDApLCAxKSk7XG4rXHRcdC8qIEV4Y2x1c2l2ZWx5IG93bmVkIGJ5IGhpYmVybmF0aW9uLCBtdXN0IG5ldmVyIGVudGVyIHRoZSBzd2FwIGNhY2hlICovXG4rXHRcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgU1dQX1RCX0hJQik7XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiBBbGxvY2F0aW9uIHdpdGhvdXQgZm9saW8gaXMgb25seSBwb3NzaWJsZSB3aXRoIGhpYmVybmF0aW9uICovXG4gXHRcdFdBUk5fT05fT05DRSgxKTtcbkBAIC0xOTI5LDkgKzE5MjksMTEgQEAgdm9pZCBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xuIFx0XHQvKlxuIFx0XHQgKiBGcmVlaW5nIGlzIGRvbmUgYWZ0ZXIgcmVsZWFzZSBvZiB0aGUgbGFzdCBzd2FwIGNvdW50XG4tXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkXG4rXHRcdCAqIHJlZiwgb3IgYWZ0ZXIgc3dhcCBjYWNoZSBpcyBkcm9wcGVkLiBBIGhpYmVybmF0aW9uIHNsb3RcbitcdFx0ICogaGFzIG5vIGNvdW50IGFuZCBpcyBmcmVlZCBkaXJlY3RseSBieSBpdHMgb3duZXIuXG4gXHRcdCAqL1xuLVx0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfc2hhZG93KG9sZF90YikgfHwgX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikgXHUwMDNlIDEpO1xuK1x0XHRWTV9XQVJOX09OKCFzd3BfdGJfaXNfaGliZXJuYXRpb24ob2xkX3RiKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAoIXN3cF90Yl9pc19zaGFkb3cob2xkX3RiKSB8fCBfX3N3cF90Yl9nZXRfY291bnQob2xkX3RiKSBcdTAwM2UgMSkpO1xuIFxuIFx0XHQvKiBSZXNldHRpbmcgdGhlIHNsb3QgdG8gTlVMTCBhbHNvIGNsZWFycyB0aGUgaW5saW5lIGZsYWdzLiAqL1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0KGNpLCBjaV9vZmYsIG51bGxfdG9fc3dwX3RiKCkpO1xuQEAgLTIyMDEsMTIgKzIyMDMsOCBAQCB2b2lkIHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90KHN3cF9lbnRyeV90IGVudHJ5KVxuIFx0cGdvZmZfdCBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soc2ksIG9mZnNldCk7XG4tXHRfX3N3YXBfY2x1c3Rlcl9wdXRfZW50cnkoY2ksIG9mZnNldCAlIFNXQVBGSUxFX0NMVVNURVIpO1xuIFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgb2Zmc2V0ICUgU1dBUEZJTEVfQ0xVU1RFUiwgMSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi1cbi1cdC8qIEluIHRoZW9yeSByZWFkYWhlYWQgbWlnaHQgYWRkIGl0IHRvIHRoZSBzd2FwIGNhY2hlIGJ5IGFjY2lkZW50ICovXG4tXHRfX3RyeV90b19yZWNsYWltX3N3YXAoc2ksIG9mZnNldCwgVFRSU19BTllXQVkpO1xuIH1cbiBcbiBzdGF0aWMgaW50IF9fZmluZF9oaWJlcm5hdGlvbl9zd2FwX3R5cGUoZGV2X3QgZGV2aWNlLCBzZWN0b3JfdCBvZmZzZXQpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQxMzo1Mjo1Ni4wMzA0NjQxMDJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTc5MjA1MTYwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhpYmVybmF0aW9uIFN3YXAgU2xvdCBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgc3dhcCBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgYG1tL3N3YXBfc3RhdGUuY2AsIGBtbS9zd2FwX3RhYmxlLmhgLCBhbmQgYG1tL3N3YXBmaWxlLmNgLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIGFyb3VuZCBtZW1vcnkgc2FmZXR5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoYXQgZmlyc3QuIFRoZSBrZXkgdGFrZWF3YXkgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgU1dQX1RCX0hJQmAsIGEgbmV3IHN3YXAgdGFibGUgZW50cnkgdHlwZSBleHBsaWNpdGx5IGZvciBoaWJlcm5hdGlvbiBzbG90cy4gVGhpcyBzZWVtcyBsaWtlIGEgZ29vZCBtb3ZlIGNvbmNlcHR1YWxseSwgc2VncmVnYXRpbmcgdGhlc2Ugc2xvdHMgZnJvbSB0aGUgcmVndWxhciBzd2FwIGVudHJpZXMuXG5cbk15IG1haW4gZm9jdXMgaXMgb24gdGhlIGNoYW5nZXMgdG8gYF9fc3dhcF9jYWNoZV9hZGRfY2hlY2tgLCBgX19zd2FwX2NsdXN0ZXJfYWxsb2NfZW50cmllc2AsIGBfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXNgLCBhbmQgYHN3YXBfZnJlZV9oaWJlcm5hdGlvbl9zbG90YC4gSXQgbG9va3MgbGlrZSB3ZSBhcmUgZXhwbGljaXRseSBwcmV2ZW50aW5nIGhpYmVybmF0aW9uIHNsb3RzIGZyb20gZXZlciBoaXR0aW5nIHRoZSBzd2FwIGNhY2hlLiAgRXhjZWxsZW50LCBiZWNhdXNlIHRoZXkgZG9uJ3QgaGF2ZSBhIGNvdW50IGFuZCBzaG91bGQgbm90IGJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgbGlrZWx5IGFsbG93aW5nIGhpYmVybmF0aW9uIHNsb3RzIHRvIGJlIGFjY2lkZW50YWxseSBicm91Z2h0IGludG8gdGhlIHN3YXAgY2FjaGUsIHdoaWNoIHdvdWxkIGNhdXNlIHNldmVyZSBpc3N1ZXMgbGF0ZXIsIHByb2JhYmx5IHVzZS1hZnRlci1mcmVlLCBvciBjb3JydXB0ZWQgcGFnZSBzdGF0ZS5cblxuR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHN3YXAgY2FjaGUgb3BlcmF0ZXMgYW5kIHdoYXQgaGliZXJuYXRpb24gaXMgdHJ5aW5nIHRvIGRvLCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyAqbm90KiBpbnRyb2R1Y2luZyBhbnkgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm9ybWF0aW9uIGxlYWtzLiBUaGVyZSBhcmUgbm8gbmV3IHN0cnVjdHMgYmVpbmcgZXhwb3NlZCB0byB1c2Vyc3BhY2UsIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlIGFsbG9jYXRpb25zIHRoYXQgbWlnaHQgaGF2ZSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBwdXJlbHkgYWJvdXQgZml4aW5nIGEgc3BlY2lmaWMgc3dhcCBjYWNoZSByZWFkYWhlYWQgYnVnIGFuZCBzZWdyZWdhdGluZyBoaWJlcm5hdGlvbiBzbG90cyBjb3JyZWN0bHkuXG5cblNpbmNlIHRoaXMgcGF0Y2ggaXMgYWJvdXQgZml4aW5nIGEgc3dhcCBjYWNoZSBidWcgYW5kIG5vdCBhIG5ldyBtZW1vcnkgYWxsb2NhdGlvbiwgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBTdGFuZGFyZCBidWcgZGV0ZWN0b3JzLCBsaWtlIEtBU0FOLCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyByZWxhdGVkIHRvIHRoZXNlIGNoYW5nZXMuIEl0IGxvb2tzIGxpa2UgYSBjbGVhbiBhbmQgd2VsbC1zY29wZWQgZml4LlxuXG5cbiIsIklucHV0VG9rZW5zIjozODg0LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDEzOjUzOjA1LjgyMjUxOTgwM1oiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3dhcCBzbG90IG1hbmFnZW1lbnQgdG8gZXhwbGljaXRseSB0cmFjayBoaWJlcm5hdGlvbiBzbG90cyB1c2luZyBhIG5ldyBmbGFnIChTV1BfVEJfSElCKSBhbmQgcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGFjY2lkZW50YWxseSBhZGRlZCB0byB0aGUgc3dhcCBjYWNoZSBkdXJpbmcgY2x1c3RlciByZWFkYWhlYWQuIFRoZXNlIGNoYW5nZXMgaW52b2x2ZSBpbnRlcm5hbCBzd2FwIHN0YXRlIHRyYWNraW5nIGFuZCBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW52b2x2ZSBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgYXJpc2luZyBmcm9tIHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbG9naWMgZXJyb3JzLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBvciB1c2UtYWZ0ZXItZnJlZSBpc3N1ZXMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBzd2FwIHNsb3QgbWFuYWdlbWVudCB0byBleHBsaWNpdGx5IHRyYWNrIGhpYmVybmF0aW9uIHNsb3RzIHVzaW5nIGEgbmV3IGZsYWcgKFNXUF9UQl9ISUIpIGFuZCBwcmV2ZW50cyB0aGVtIGZyb20gYmVpbmcgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIHRoZSBzd2FwIGNhY2hlIGR1cmluZyBjbHVzdGVyIHJlYWRhaGVhZC4gVGhlc2UgY2hhbmdlcyBpbnZvbHZlIGludGVybmFsIHN3YXAgc3RhdGUgdHJhY2tpbmcgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnZvbHZlIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBhcmlzaW5nIGZyb20gdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBsb2dpYyBlcnJvcnMsIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIG9yIHVzZS1hZnRlci1mcmVlIGlzc3Vlcywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowft8zx[1] Phase: Succeeded StartedAt: 2026-08-11 13:53:17 +0000 UTC FinishedAt: 2026-08-11 13:53:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 13:53:17 +0000 UTC FinishedAt: 2026-08-11 13:53:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2] Phase: Succeeded StartedAt: 2026-08-11 13:53:17 +0000 UTC FinishedAt: 2026-08-11 17:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 13:53:17 +0000 UTC FinishedAt: 2026-08-11 17:41:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 13:53:17 +0000 UTC FinishedAt: 2026-08-11 13:53:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 13:53:17 +0000 UTC FinishedAt: 2026-08-11 13:53:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowft8zx/series-workflowft8zx-convert-artifact-3668262234/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 13:53:27 +0000 UTC FinishedAt: 2026-08-11 14:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 13:53:27 +0000 UTC FinishedAt: 2026-08-11 14:11:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*388d2002-6d6f-4583-99cd-9af9b5aeb86a,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-workflowft8zx/series-workflowft8zx-convert-artifact-3668262234/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": "d5598d8b-bb16-4939-bf4e-a17bb54e73e4", "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-workflowft8zx/series-workflowft8zx-build-action-2010345992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 13:53:27 +0000 UTC FinishedAt: 2026-08-11 14:10:53 +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:*388d2002-6d6f-4583-99cd-9af9b5aeb86a,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-workflowft8zx/series-workflowft8zx-convert-artifact-3668262234/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": "d5598d8b-bb16-4939-bf4e-a17bb54e73e4", "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-workflowft8zx/series-workflowft8zx-build-action-2010345992/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 14:11:03 +0000 UTC FinishedAt: 2026-08-11 14:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 14:11:03 +0000 UTC FinishedAt: 2026-08-11 14:11:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 14:11:03 +0000 UTC FinishedAt: 2026-08-11 14:11:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 14:11:03 +0000 UTC FinishedAt: 2026-08-11 14:11:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowft8zx/series-workflowft8zx-convert-artifact-2314532789/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 14:11:13 +0000 UTC FinishedAt: 2026-08-11 14:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 14:11:13 +0000 UTC FinishedAt: 2026-08-11 14:13:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d5598d8b-bb16-4939-bf4e-a17bb54e73e4,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-workflowft8zx/series-workflowft8zx-build-action-2010345992/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-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 14:13:41 +0000 UTC FinishedAt: 2026-08-11 14:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 14:13:41 +0000 UTC FinishedAt: 2026-08-11 14:13:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 14:13:41 +0000 UTC FinishedAt: 2026-08-11 14:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 14:13:41 +0000 UTC FinishedAt: 2026-08-11 14:31:27 +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:*388d2002-6d6f-4583-99cd-9af9b5aeb86a,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-workflowft8zx/series-workflowft8zx-convert-artifact-2314532789/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": "3f5449b6-58db-4f9c-9b40-ad5a000a66f1", "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-workflowft8zx/series-workflowft8zx-build-action-511781057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 14:13:41 +0000 UTC FinishedAt: 2026-08-11 14:31:17 +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:*388d2002-6d6f-4583-99cd-9af9b5aeb86a,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-workflowft8zx/series-workflowft8zx-convert-artifact-2314532789/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": "3f5449b6-58db-4f9c-9b40-ad5a000a66f1", "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-workflowft8zx/series-workflowft8zx-build-action-511781057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 14:31:27 +0000 UTC FinishedAt: 2026-08-11 14:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 14:31:27 +0000 UTC FinishedAt: 2026-08-11 14:31:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 14:31:27 +0000 UTC FinishedAt: 2026-08-11 14:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 14:31:27 +0000 UTC FinishedAt: 2026-08-11 14:33:09 +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:*3f5449b6-58db-4f9c-9b40-ad5a000a66f1,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-workflowft8zx/series-workflowft8zx-build-action-511781057/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-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 14:33:18 +0000 UTC FinishedAt: 2026-08-11 17:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 14:33:18 +0000 UTC FinishedAt: 2026-08-11 17:41:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},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:*d5598d8b-bb16-4939-bf4e-a17bb54e73e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3f5449b6-58db-4f9c-9b40-ad5a000a66f1,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-workflowft8zx/series-workflowft8zx-build-action-2010345992/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-workflowft8zx/series-workflowft8zx-build-action-511781057/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 14:33:18 +0000 UTC FinishedAt: 2026-08-11 14:33:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 14:33:18 +0000 UTC FinishedAt: 2026-08-11 14:33:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},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-workflowft8zx/series-workflowft8zx-convert-artifact-3959789466/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 14:33:18 +0000 UTC FinishedAt: 2026-08-11 14:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 14:33:18 +0000 UTC FinishedAt: 2026-08-11 14:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 14:33:18 +0000 UTC FinishedAt: 2026-08-11 14:33:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 14:33:28 +0000 UTC FinishedAt: 2026-08-11 17:41:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowft8zx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["swap_cache_alloc_folio","swap_alloc_hibernation_slot","swap_free_hibernation_slot","folio_put_swap","swap_put_entries_direct","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"480a31230b426efb005b6e71a14ef80f405f18b6","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","HIBERNATION"],"series_id":"6da09a54-d4ea-4d61-8720-b0ef0185bb71","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 14:33:28 +0000 UTC FinishedAt: 2026-08-11 17:40:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d5598d8b-bb16-4939-bf4e-a17bb54e73e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3f5449b6-58db-4f9c-9b40-ad5a000a66f1,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-workflowft8zx/series-workflowft8zx-build-action-2010345992/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-workflowft8zx/series-workflowft8zx-build-action-511781057/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-workflowft8zx/series-workflowft8zx-convert-artifact-3959789466/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,}