TW9uIEF1ZyAxNiAwMToyOToyNCBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NjLTIuOTUuMSBSZWxlYXNlZC4KCjE5OTktMDgtMTMgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKEdDQ19GT1JfVEFSR0VUKTogTW92ZSAtQi4vIGFmdGVyIHRoZSB0b29sZGlyIC1CLgoKRnJpIEF1ZyAxMyAwMTo0MjoyNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJVHVlIEF1ZyAgMyAwMDowMzo0MSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CiAgICAgICAgKiBmaXhpbmNsdWRlczogRml4IHRoZSByZXR1cm4gdHlwZSBvZiBic2VhcmNoLCBjaGFyKiAtPiB2b2lkKi4KICAgICAgICAqIGZpeGluYy9pbmNsaGFjay5kZWY6IExpa2V3aXNlLgoKRnJpIEF1ZyAxMyAwMToyOTo1NyAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGR3YXJmb3V0LmMgKGZ1bmRhbWVudGFsX3R5cGVfY29kZSk6IFJldHVybiBGVF9ib29sZWFuIGZvcgoJSU5URUdFUl9UWVBFIHdpdGggcHJlY2lzaW9uPT0xLCBpdCdzIF9famF2YV9ib29sZWFuLgoKMTk5OS0wOC0xMSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCiAgICAgICAgKiBlbWl0LXJ0bC5jIChtYXJrX3JlZ19wb2ludGVyKTogRG9uJ3QgaW5jcmVhc2UgdGhlIGFsaWdubWVudCBvZgogICAgICAgIGEgcmVnaXN0ZXIgdGhhdCBpcyBhbHJlYWR5IGtub3duIHRvIGJlIGEgcG9pbnRlci4KCjE5OTktMDgtMTEgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL2luY2xoYWNrLnRwbDogT25seSBpbnN0YWxsIGFzc2VydC5oIGNvbmRpdGlvbmFsbHkuCgkqIGZpeGluYy9pbmNsaGFjay5zaDogUmVnZW5lcmF0ZWQuCgkqIGZpeGluYy9maXhpbmNsLnNoOiBSZWdlbmVyYXRlZC4KCldlZCBBdWcgMTEgMDA6MzQ6MjIgMTk5OSAgSm9lIEJ1Y2sgIDxqYnVja0BzeW5vcHN5cy5jb20+CgoJKiBpbnZva2UudGV4aTogcy9HTlUgQ0MvR0NDLyBmb3IgY29uc2lzdGVuY3kgd2l0aCBnY2MudGV4aS4KCUZpeCBkb2N1bWVudGF0aW9uIG9mIC1hbnNpIGZsYWcgdG8gZGVzY3JpYmUgaXRzIEMrKyBiZWhhdmlvci4KCVJlbW92ZSBib2d1cyByZWZlcmVuY2UgdG8gR0NDIDIuOS4KClR1ZSBBdWcgMTAgMjI6NDA6MzYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCVRodSBBdWcgIDUgMjI6Mjc6MTUgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoJKiBjb25maWcvc2gvbGliMWZ1bmNzLmFzbSAoX19fbW92c3RyU0kwKTogQ2hhbmdlIG9yIHIwLHIwLHIwIHRvIG5vcC4KCShfX19tdWxzaTMpOiBVc2UgJyEnIGNvbW1lbnQgY2hhcmFjdGVyLgoKU2F0IEF1ZyAgNyAwMDowNjozMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY2MudGV4aTogVXBkYXRlIGJ1ZyByZXBvcnRpbmcgdGV4dC4KCglUdWUgSnVsIDIwIDE3OjA3OjU0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgkqIHJzNjAwMC5oIChzdHJ1Y3QgcnM2MDAwX2FyZ3MpOiBBZGQgc3lzdl9ncmVnbm8uCgkqIHJzNjAwMC5jIChpbml0X2N1bXVsYXRpdmVfYXJncyk6IEluaXQgc3lzdl9ncmVnbm8uCgkoZnVuY3Rpb25fYXJnX2JvdW5kYXJ5KTogQWxpZ24gREZtb2RlLgoJKGZ1bmN0aW9uX2FyZ19hZHZhbmNlKTogUmVzdHJ1Y3R1cmUgZm9yIEFCSV9WNDsgdXNlIHN5c3ZfZ3JlZ25vCgl0byBnZXQgZnAgcmVnIGFuZCBzdGFjayBvdmVyZmxvdyBjb3JyZWN0LgoJKGZ1bmN0aW9uX2FyZyk6IExpa2V3aXNlLgoJKGZ1bmN0aW9uX2FyZ19wYXNzX2J5X3JlZmVyZW5jZSk6IFRydWUgZm9yIFRGbW9kZSBmb3IgQUJJX1Y0LgoJKHNldHVwX2luY29taW5nX3ZhcmFyZ3MpOiBSZXN0cnVjdHVyZSBmb3IgQUJJX1Y0OyB1c2UKCWZ1bmN0aW9uX2FyZ19hZHZhbmNlIHRvIHNraXAgZmluYWwgbmFtZWQgYXJndW1lbnQuCgkoZXhwYW5kX2J1aWx0aW5fc2F2ZXJlZ3MpOiBQcm9wZXJseSB1bnNraXAgdGhlIGxhc3QgaW50ZWdlciBhcmcKCXdoZW4gZG9pbmcgdmFyYXJncy4gIEFkanVzdCBvdmVyZmxvdyBsb2NhdGlvbiBjYWxjdWxhdGlvbi4KCSogZ2luY2x1ZGUvdmEtcHBjLmggKHN0cnVjdCBfX3ZhX2xpc3RfdGFnKTogTWFrZSBncHIgYW5kIGZwcgoJZXhwbGljaXRseSB1bnNpZ25lZC4KCShfX1ZBX0ZQX1JFR1NBVkUpOiBVc2UgbmV3IE9GUyBhcmd1bWVudCBpbnN0ZWFkIG9mIEFQLT5mcHIgZGlyZWN0bHkuCgkoX19WQV9HUF9SRUdTQVZFKTogU2ltaWxhcmx5LgoJKF9fdmFfbG9uZ2xvbmdfcCk6IERlbGV0ZS4KCShfX3ZhX2FyZ190eXBlX3Zpb2xhdGlvbik6IE5ldyBkZWNsYXJhdGlvbi4KCSh2YV9hcmcpOiBSZXN0cnVjdHVyZS4gIEZsYWcgcHJvbW90aW9uIGVycm9ycy4gIEFsaWduIGRvdWJsZS4KCVRGbW9kZSBwYXNzZWQgYnkgcmVmZXJlbmNlLgoJKiByczYwMDAubWQgKG1vdmRpXzMyKzEpOiBVc2UgR0VOX0lOVCBhZnRlciBhcml0aG1ldGljCglpbiB0aGUgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCA+IDMyIGNhc2UuCgoxOTk5LTA4LTYgSGVybWFuIEEuSi4gdGVuIEJydWdnZSA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIHJlZy1zdGFjay5jIChjaGFuZ2Vfc3RhY2spIEZpeGVkIHByb2JsZW0gd2l0aCBuZWdhdGl2ZSBhcnJheSBpbmRleC4KCkZyaSBBdWcgIDYgMjA6NDE6MDggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCU1vbiBKdWwgMTkgMTU6MDk6MjkgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoJKiByczYwMDAubWQgKGFyaXRobWV0aWMsIGxvZ2ljYWwsIGFuZCBzaGlmdCBSYyBjb21iaW5lciBwYXR0ZXJucyk6CglEaXNhYmxlIHBhdHRlcm5zIHBlcmZvcm1pbmcgU0ltb2RlIGNvbXBhcmlzb25zIHdpdGggU0ltb2RlIHZhbHVlcwoJaWYgVEFSR0VUX1BPV0VSUEM2NCBhbmQgaW5zdHJ1Y3Rpb24gZG9lcyBub3Qgc2lnbi1leHRlbmQgb3IgZG9lcwoJbm90IG1hc2sgdG8gbmFycm93ZXIgdGhhbiBTSW1vZGUsIGkuZS4gd2hlcmUgYml0IDMxIGFuZCBiaXQgNjMgbWF5CglkaWZmZXIgZm9yIHNpZ25lZCBxdWFudGl0aWVzLgoJKGluZGlyZWN0X2p1bXApOiBBZGQgZXhwYW5kZXIgdG8gY2hvb3NlIFJUTCBiYXNlZCBvbiBUQVJHRVRfNjRCSVQuCgkodGFibGVqdW1wKTogUGF0dGVybnMgY29udGluZ2VudCBvbiBUQVJHRVRfNjRCSVQgbm90IFRBUkdFVF9QT1dFUlBDNjQuCgkoZGVjcmVtZW50X2FuZF9icmFuY2hfb25fY291bnQpOiBBZGQgNjQtYml0IHZhcmlhbnQuCgpUaHUgQXVnICA1IDAyOjQwOjQyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdjYy5jOiBVcGRhdGUgVVJMcyBhbmQgbWFpbCBhZGRyZXNzZXMuCgkqIGdjYy50ZXhpOiBMaWtld2lzZS4KClRodSBBdWcgIDUgMDE6MTQ6MTMgMTk5OSAgRGFuaWVsIEphY29ib3dpdHogPGRyb3dAZmFsc2Uub3JnPgoKCSogcnM2MDAwLmMgKGN1cnJlbnRfZmlsZV9mdW5jdGlvbl9vcGVyYW5kKTogUmV0dXJuIHplcm8gZm9yCgl3ZWFrIGZ1bmN0aW9ucy4KCShyczYwMDBfZW5jb2RlX3NlY3Rpb25faW5mbyk6IERvIG5vdCBzZXQgU1lNQk9MX1JFRl9GTEFHIGZvcgoJd2VhayBzeW1ib2xzLgoJKiByczYwMDAuaCAoRU5DT0RFX1NFQ1RJT05fTklGTyk6IERvIG5vdCBzZXQgU1lNQk9MX1JFRl9GTEFHCglmb3Igd2VhayBzeW1ib2xzLgoKVGh1IEF1ZyAgNSAwMDo1NjozMCAxOTk5ICBHZW9mZnJleSBLZWF0aW5nICAgPGdlb2Zma0BjeWdudXMuY29tPgoKCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogRm9yIEFCSV9WNC9BQklfU09MQVJJUyAtZnBpYywgYWx3YXlzCglhbGxvY2F0ZSBzcGFjZSBpbiB0aGUgc3RhY2sgZnJhbWUgZm9yIHRoZSBQSUMgcmVnaXN0ZXIuCgpUaHUgQXVnICA1IDAwOjIwOjQ3IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsubWQgKHhvcmRpMywgYW5kZGkzKTogVGhlc2UgcGF0dGVybnMgYXJlIG5vdCBhdmFpbGFibGUgb24KCXRoZSBjb2xkZmlyZS4KCldlZCBBdWcgIDQgMjM6Mzk6MjAgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHJlYWwuYyAoR0VUX1JFQUwpOiBEb24ndCB2aW9sYXRlIEFOU0kvSVNPIGFsaWFzaW5nIHJ1bGVzLgoJKFBVVF9SRUFMKTogTGlrZXdpc2UuCgpXZWQgQXVnICA0IDAyOjE1OjMyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uIDxydGhAY3lnbnVzLmNvbT4KCgkqIGp1bXAuYyAoZGVsZXRlX2luc24pOiBEZWxldGUgdGhlIGFkZHJfdmVjIHdoZW4gZGVsZXRpbmcgYSB0YWJsZWp1bXAuCgpXZWQgQXVnICA0IDAxOjA4OjQ0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCiAgICAgICAgKiBmbG93LmMgKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBEbyBub3QgY2FsbCBtZXJnZV9ibG9ja3MKICAgICAgICBvciB0aWR5X2ZhbGx0aHJ1X2VkZ2UgaWYgdGhlIGxhc3QgaW5zbiBpbiB0aGUgYmxvY2sgaXMgbm90CiAgICAgICAgYW4gdW5jb25kaXRpb25hbCBqdW1wIG9yIGEgc2ltcGxlIGNvbmRpdGlvbmFsIGp1bXAuCgpUdWUgQXVnICAzIDAzOjUxOjIwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNzZS5jIChjc2VfaW5zbik6IEZpeCBkdW1iIHRoaW5rbyBpbiBsYXN0IGNoYW5nZS4KCk1vbiBBdWcgIDIgMjM6NDU6NDUgMTk5OSAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYml0cmFuZ2UuY29tPgoKCSogZHdhcmYyb3V0LmMgKGFkZF9sb2NhdGlvbl9vcl9jb25zdF92YWx1ZV9hdHRyaWJ1dGUpOiBDb3JyZWN0Cgl0ZXN0IGZvciBzaXplcyBvZiBwYXNzZWQgYW5kIGRlY2xhcmVkIHBhcmFtZXRlciB0eXBlcy4KCk1vbiBBdWcgIDIgMTI6NDU6MDkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBEb24ndCBmb3JjZSBBTFBIQV9UUF9QUk9HIGZvciBldjYuCgpNb24gQXVnICAyIDAxOjM0OjIyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeC1oZWFkZXIuYyAobWFpbik6IFdoZW4gdGVzdGluZyBmb3IgQ09OVElOVUVELCB1c2Ugc3RyaW5nCgllcXVhbGl0eSwgbm90IHBvaW50ZXIgZXF1YWxpdHkuCgpNb24gQXVnICAyIDAxOjI3OjI0IDE5OTkgIERhbiBOaWNvbGFlc2N1ICA8ZGFubkBpY3MudWNpLmVkdT4KCgkqIHNwYXJjLmMgKHNwYXJjX2Jsb2NrX3Byb2ZpbGVyKTogVXNlIHRoZSAlZzIgcmVnaXN0ZXIsIG5vdCAlbzAuCgpTdW4gQXVnICAxIDIyOjQ2OjQyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNzZS5jIChjc2VfaW5zbik6IEZpeCBsb29wIHdoaWNoIGRlbGV0ZXMgaW5zbnMgYWZ0ZXIgYSBqdW1wCgl0aGF0IGhhcyBiZWNvbWUgYW4gdW5jb25kaXRpb25hbCBqdW1wLgoKCSogbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBGaXggdHlwbyBpbiBDUFUzMiBjYXNlLgoJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IFNpbWlsYXJseS4KCglUdWUgSnVsIDIwIDEyOjM3OjMwIDE5OTkgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGJpdHJhbmdlLmNvbT4KICAgICAgICAqIGR3YXJmMm91dC5jIChvdXRwdXRfYWJicmV2X3NlY3Rpb24pOiBUZXJtaW5hdGUgd2l0aCBhIHplcm8uCgoJVGh1IEp1bCAxNSAxNTo0MDowOSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgkqIHRyZWUuYyAoYnVpbGRfdHlwZV9hdHRyaWJ1dGVfdmFyaWFudCk6IE1vdmUgY3VycmVudF9vYnN0YWNrIHJlc3RvcmUKCWFmdGVyIGJ1aWxkX3F1YWxpZmllZF90eXBlIGNhbGwuCgoJRnJpIEp1biAgNCAwMzoyMDo0MCAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgkqIHNoLmMgKGZpeHVwX2FkZHJfZGlmZl92ZWNzKTogRW1pdCBicmFmIHJlZmVyZW5jZSBsYWJlbC4KCShicmFmX2xhYmVsX3JlZl9vcGVyYW5kKTogRGVsZXRlLgoJKiBzaC5oIChQUkVESUNBVEVfQ09ERVMpOiBSZW1vdmUgYnJhZl9sYWJlbF9yZWZfb3BlcmFuZC4KCSogc2gubWQgKGNhc2VzaV9qdW1wXzIpOiBPcGVyYW5kMSBpcyBub3cgdGhlIGluc2lkZSBvZiBhCglsYWJlbF9yZWYsIGFuZCBoYXMgbm8gcHJlZGljYXRlLgoJVGhlIHBhdHRlbiBoYXMgYSBwcmVkaWNhdGUgdG8gZ3VhcmQgYWdhaW5zdCBpbnZhbGlkIHN1YnN0aXR1dGlvbnMuCgkoZHVtbXlfanVtcCk6IERlbGV0ZS4KCShjYXNlc2kpOiBVcGRhdGUgdXNlIG9mIGNhc2VzaV9qdW1wXzIuCgpUaHUgSnVsIDMxIDEyOjM0OjQ1IDE5OTkgIEpvZSBCdWNrICA8amJ1Y2tAc3lub3BzeXMuY29tPgoKCSogZ2NjLnRleGk6IFVzZSB0ZXJtcyAiR05VIENvbXBpbGVyIENvbGxlY3Rpb24iIGFuZCAiR0NDIi4KCUFsc28gdXBkYXRlIGNvcHlyaWdodC4KCldlZCBKdWwgMjggMjE6Mzk6MzEgUERUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdjYy0yLjk1IFJlbGVhc2VkLgoKCSogdmVyaXNvbi5jOiBObyBsb25nZXIgYSBwcmVyZWxlYXNlLgoKV2VkIEp1bCAyOCAxMzo0OTowMyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBSRUFETUU6IFVwZGF0ZS4KClN1biBKdWwgMjUgMjE6NDA6MzMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NjLnRleGk6IE1vcmUgY2hhbmdlcyByZWxhdGVkIHRvIGxpc3QgY29udmVyc2lvbi4KCSogaW52b2tlLnRleGk6IExpa2V3aXNlLgoKU2F0IEp1bCAxNyAyMzo1ODoyNCAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGluc3YsIGV4dHp2KTogUmVtb3ZlIFNJbW9kZSBkZXBlbmRlbmNlIGluIG5hbWVkCglwYXR0ZXJucy4gIEV4cGxpY2l0bHkgZ2VuZXJhdGUgREltb2RlIFJUTCBpZiBQb3dlclBDNjQgYW5kCglvcGVyYW5kIGlzIERJbW9kZS4KCShpbnN2ZGkpOiBSZXZlcnNlIHN0YXJ0IGFuZCBzaXplIGluIGluc3RydWN0aW9uIHRlbXBsYXRlLgoKMTk5OS0wNy0xNyAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CiAgICAgICAgCgkqIGdjYy50ZXhpOiBVcGRhdGUgZS1tYWlsIGFkZHJlc3NlcyBhbmQgVVJMcyB0byBnY2MuZ251Lm9yZy4KCVJlbW92ZWQgcGFyYWdyYXBoIGFib3V0IGNvbXByZXNzaW9uIG9mIGZpbGVzIGFuZCBzaXplIGxpbWl0YXRpb24sCglkdXBsaWNhdGVkIGluIHRoZSBGQVEuICBVc2UgZ2NjLXBhdGNoZXMgZm9yIHBvc3RpbmcgcGF0Y2hlcy4KCSogZ2NjLmMgKG1haW4pOiBVcGRhdGVkIFVSTCB3aXRoIGJ1ZyByZXBvcnRpbmcgaW5zdHJ1Y3Rpb25zIHRvCglnY2MuZ251Lm9yZy4gIFJlbW92ZWQgZS1tYWlsIGFkZHJlc3MuCgkqIHN5c3RlbS5oIChhYm9ydCk6IExpa2V3aXNlLgoKMTk5OS0wNy0xNyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHN0bXAtbXVsdGlsaWItc3ViKTogTWFrZSB0aGUgZmlsZXMgZXh0cmFjdGVkCglmcm9tICQoTElCR0NDMSkgd3JpdGFibGUuCgpGcmkgSnVsIDE2IDAxOjM5OjU3IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogRml4IGNvbXB1dGF0aW9uIG9mIHNhdmUgbWFzawoJd2hlbiBnZW5lcmF0aW5nIFBJQyBjb2RlLgoKMTk5OS0wNy0xMiAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogaW52b2tlLnRleGk6IFR5cG8gZml4ZXMuCgpXZWQgSnVsIDE0IDIzOjI4OjA2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGVtaXQtcnRsLmMgKGdlbl9yZWFscGFydCk6IElzc3VlIGFuIGVycm9yIGZvciBjYXNlcyBHQ0MgY2FuIG5vdAoJaGFuZGxlIGF0IHRoaXMgdGltZSBpbnN0ZWFkIG9mIHNpbGVudGx5IGdlbmVyYXRpbmcgaW5jb3JyZWN0IGNvZGUuCgkoZ2VuX2ltYWdwYXJ0KTogTGlrZXdpc2UuCgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRW1pdCBhIFVTRSBmb3IgYSBwc2V1ZG8gcmVnaXN0ZXIgd2l0aG91dAoJYSBoYXJkIHJlZ2lzdGVyIGlmIHdlIGNvdWxkIG5vdCBjcmVhdGUgYW4gb3B0aW9uYWwgcmVsb2FkIGZvciB0aGUKCXBzZXVkby4KCldlZCBKdWwgMTQgMDE6NTc6MzkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlZ2NsYXNzLmMgKHNjYW5fb25lX2luc24pOiBOb3RpY2Ugc3VicmVncyB0aGF0IGNoYW5nZSB0aGUKCXNpemUgb2YgdGhlaXIgb3BlcmFuZC4KCShyZWNvcmRfcmVnX2NsYXNzZXMpOiBVc2UgdGhhdCB0byBvYmV5IENMQVNTX0NBTk5PVF9DSEFOR0VfU0laRS4KCldlZCBKdWwgMTQgMDE6Mzc6MDYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChhbHBoYSotKi0qKTogSW5jbHVkZSBhbHBoYS90LWllZWUuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogYWxwaGEvdC1pZWVlOiBOZXcgZmlsZS4KClR1ZSBKdWwgMTMgMTA6NDQ6MTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCVdlZCBKdW4gMTYgMjA6Mjk6MDAgMTk5OSAgSiJvcm4gUmVubmVja2UgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoJKiBjc2UuYyAoY3NlX2luc24pOiBEb24ndCBwdXQgaGFyZCByZWdpc3RlciBzb3VyY2UgaW50byB0YWJsZXMgZm9yCgl0aGUgbGFzdCBpbnNuIG9mIGEgbGliY2FsbC4KCgkqIHJzNjAwMC5jIChmaW5kX2FkZHJfcmVnKTogRG8gbm90IHNlbGVjdCByMCBhcyBhbiBhZGRyZXNzCglyZWdpc3Rlci4KClR1ZSBKdWwgMTMgMDA6NDY6MTggMTk5OSAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgoJKiBtNjhrL3gtbW90MzMwMCAoWENGTEFHUyk6IExpc3Qgb2YgYmlnIGZpbGVzIG5vdyBpbmNsdWRlcyBgY3NlLm8nLgoKTW9uIEp1bCAxMiAyMzozOTowOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByczYwMDAubWQgKG1vdnNmKTogRG8gbm90IGZvcmNlIGVhc3kgRlAgY29uc3RhbnRzIGludG8gbWVtb3J5LgoKU3VuIEp1bCAxMSAxMToyMToyNCAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAobWFpbik6IERvbid0IGNvbXBsYWluIGFib3V0IHNheWluZyAtZ2R3YXJmLgoKRnJpIEp1bCAgOSAwMzo1MTo1MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IERyb3AgImdjYy0iIHByZWZpeCBmcm9tIHZlcnNpb24gIy4KClRodSBKdWwgIDggMTk6MTU6NTEgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogdW5yb2xsLmMgKHVucm9sbF9sb29wcyk6IERvbid0IGRlbGV0ZSBuYW1lZCBDT0RFX0xBQkVMIG9yCglOT1RFX0lOU05fREVMRVRFRF9MQUJFTCBub3RlLgoKVGh1IEp1bCAgOCAxNDoxODo0NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbTY4ay5jIChvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUpOiBBZGQgcGljIHJlZ2lzdGVyIHRvIG1hc2sKCWlmIGxpdmUgYW5kIGZsYWdfcGljLgoJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IExpa2V3aXNlLgoKVGh1IEp1bCAgOCAxMDoyODoyNSAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCSogaW52b2tlLnRleGkgKERFQyBBbHBoYSBPcHRpb25zKTogUHV0IEBlbmQgdGFibGUgYXQKCWJlZ2lubmluZyBvZiBsaW5lLCB0byBhdm9pZCBjb25mdXNpbmcgdGV4aTJodG1sLgoKV2VkIEp1bCAgNyAwMjowMDowNCAxOTk5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgoJKiByZWxvYWQxLmMgKGdlbl9yZWxvYWQpOiBXaGVuIHN5bnRoZXNpemluZyBhIDMgb3BlcmFuZCBhZGQgCglzZXF1ZW5jZSwgaW1wcm92ZSB0ZXN0IGZvciB3aGVuIHRvIHJlbG9hZCBPUDEgaW50byB0aGUgcmVsb2FkCglyZWdpc3RlciBpbnN0ZWFkIG9mIE9QMC4KCldlZCBKdWwgIDcgMDE6Mzg6MDMgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogRG9uJ3QgZGVsZXRlIE5PVEVfSU5TTl9ERUxFVEVEX0xBQkVMIG5vdGVzLgoKMTk5OS0wNy0wNyAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtaG9sbHN0ZWluQGN5Z251cy5jb20+CgoJKiBtODhrL2RndXhiY3MuaCAoQ1BQX1NQRUMpOiBBZGQgbWlzc2luZyBcIGluIG11bHRpLWxpbmUKCXN0cmluZyBsaXRlcmFsLgoKV2VkIEp1bCAgNyAwMToxNjo0MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2luY2x1ZGUvdmFyYXJncy5oIChfX2J1aWx0aW5fdmFfYWxpc3RfdCk6IE5ldyB0eXBlZGVmLgoJKHZhX2RjbCk6IFVzZSBfX2J1aWx0aW5fdmFfYWxpc3RfdC4KCldlZCBKdWwgIDcgMDE6MTM6MzEgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGdlbl9zdHJ1Y3Rfb3JfdW5pb25fdHlwZV9kaWUpOiBPbmx5IHJlbWVtYmVyIHR5cGVzCglvbiB0aGUgcGVybWFuZW50X29ic3RhY2suCgkqIGR3YXJmb3V0LmMgKG91dHB1dF90eXBlKTogTGlrZXdpc2UuCgpGcmkgSnVsICAyIDAzOjA1OjEzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGR3YXJmb3V0LmMgKGZpZWxkX2J5dGVfb2Zmc2V0KTogQ29ycmVjdGx5IGNvbXB1dGUgdGhlIG9iamVjdCdzCglieXRlIG9mZnNldCBmb3IgdGhlIGZpcnN0IGJpdCBvZiBhIGZpZWxkIHdoaWNoIGNyb3NzZXMgYW4gYWxpZ25tZW50Cglib3VuZGFyeSBvbiBhICFCWVRFU19CSUdfRU5ESUFOIHRhcmdldC4KCkZyaSBKdWwgIDIgMDE6MzY6MzYgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBmaXhpbmMuc3ZyNDogRml4IDxhcnBhL2luZXQuaD4gYnkgZGVsZXRpbmcgcHJvdG9zIGZvciBodG9ucyBhbmQKCW50b2hzLgoKRnJpIEp1bCAgMiAwMDo0Njo0NyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoJCQkgIEplZmYgTGF3IDxsYXdAY3lnbnVzLmNvbT4KCgkqIGdpbmNsdWRlL3ZhcmFyZ3MuaCAodmFfZGNsKTogVXNlIHdvcmRfbW9kZSBmb3IgdHlwZSBvZgoJX19idWlsdGluX3ZhX2xpc3QuCgoJKiBleGNlcHQuYzogSW5jbHVkZSBpbnRsLmguCgkoZXhwYW5kX2VoX3JldHVybik6IFNldCBjdXJyZW50X2Z1bmN0aW9uX2Nhbm5vdF9pbmxpbmUuCgkoc2F2ZV9laF9zdGF0dXMsIHJlc3RvcmVfZWhfc3RhdHVzKTogVHdpZGRsZSBlaF9yZXR1cm5fc3R1Yl9sYWJlbC4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIGVoX3JldHVybl9zdHViX2xhYmVsLgoJKiBmbG93LmMgKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBEb24ndCBtZXJnZSBhY3Jvc3MgRUggZWRnZXMuCgkqIE1ha2VmaWxlLmluIChleGNlcHQubyk6IERlcGVuZCBvbiBpbnRsLmguCgpGcmkgSnVsICAyIDAwOjA0OjIzIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAobW92ZGZfaGFyZGZsb2F0MzIpOiBIYW5kbGUgUFJFX0lOQyBhbmQgUFJFX0RFQyB0aGUKCXNhbWUgYXMgb2Zmc2V0dGFibGUgaW4gY2FzZXMgMSBhbmQgMi4KCjE5OTktMDctMDEgIE1hcmsgS2V0dGVuaXMgIDxrZXR0ZW5pc0BnbnUub3JnPgoKCSogY29uZmlnL2kzODYvZ251LmggKENQUF9TUEVDKTogRGVmaW5lIF9fUElDX18gYW5kIF9fcGljX18gaWYKCS1mUElDIG9yIC1mcGljIGlzIHNwZWNpZmllZC4KCldlZCBKdW4gMzAgMjM6NTY6MDEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBVc2UgY29weV90b19tb2RlX3JlZyBmb3IKCSFUQVJHRVRfTUVNX0ZVTkNUSU9OUyBjYXNlIHRvby4KClR1ZSBKdW4gMjkgMDE6Mzc6NTMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbWlwcy5tZCAobGVhc2ksIGxlYWRpKTogTmV3IHBhdHRlcm5zLgoKCSogZXhwci5jIChlbWl0X2Jsb2NrX21vdmUpOiBQcm9wZXJseSBoYW5kbGUgY2FzZSB3aGVyZSBvbmUgb2YgdGhlCglibG9jayBtb3ZlIGFyZ3VtZW50cyBoYXMgYSBxdWV1ZWQgaW5jcmVtZW50IG9yIGRlY3JlbWVudC4KCShjbGVhcl9zdG9yYWdlKTogU2ltaWxhcmx5LiAgRml4IGZvcm1hdHRpbmcgZ29vZi4KCk1vbiBKdW4gMjggMDU6MzI6MDkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbTY4ay5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERlZmluZSBmb3IgIVNVTl9GUEEKCWNhc2UuICBBbHNvIG1ha2UgdGhlIFBJQyByZWdpc3RlciBjYWxsX3VzZWQuCgogICAgICAgICogbTY4ay5oIChGSU5BTElaRV9QSUMpOiBEZWxldGUuCiAgICAgICAgKiBtNjhrLmMgKGZpbmFsaXplX3BpYyk6IERlbGV0ZS4KCgkqIG02OGsuaCAoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBNYWtlIHRoZSBQSUMgcmVnaXN0ZXIgZml4ZWQKCXdoZW4gLWZwaWMvLWZQSUMuCgpNb24gSnVuIDI4IDA1OjE2OjM1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtNjhrLmggKFBSRUZFUlJFRF9SRUxPQURfQ0xBU1MpOiBEb24ndCBmb3JjZSBhbnkgRlAgY29uc3RfZG91YmxlcwoJdG8gbWVtb3J5LgoKTW9uIEp1biAyOCAwNDowNzoyNyAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAob3V0cHV0X3RvYyk6IEFsd2F5cyB1c2UgaGV4IHZhbHVlcyBmb3IgZmxvYXRpbmctcG9pbnQKCWNvbnN0YW50cy4gIFN0b3JlIHNpbmdsZS1wcmVjaXNpb24gdmFsdWVzIGluIHVwcGVyLWhhbGYgb2YgVE9DCgllbnRyeSBpbiA2NC1iaXQgbW9kZS4KCSogcnM2MDAwLm1kIChmbG9hdHNpZGYyLCBmbG9hdHVuc3NpZGYyKTogQWRkICFUQVJHRVRfUE9XRVJQQzY0Cgl0byBmaW5hbCBjb25zdHJhaW50cy4KCShmaXhfdHJ1bmNkZnNpMiBzcGxpdHRlcik6IENoYW5nZSBwYXR0ZXJuIG1hdGNoaW5nIGZjdGl3ei4KCShmY3Rpd3opOiBJbXByb3ZlIGFjY3VyYWN5IG9mIFJUTCBmb3IgcGF0dGVybi4KCgkqIHJzNjAwMC5jIChwcmludF9vcGVyYW5kLCBjYXNlICdMJyk6IFVzZSBwbHVzX2NvbnN0YW50X2Zvcl9vdXRwdXQuCgoJKiBleHBtZWQuYyAoZXhwYW5kX2Rpdm1vZCk6IEVuc3VyZSB1bnNpZ25lZCB2YWx1ZSBmaXRzIGluIHJlZ19ub3RlLgoKRnJpIEp1biAyNSAwNjowNjozNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoTUFTS19TVVBQT1JUX0FSQ0gsIE1BU0tfQ1BVX0VWNSwgTUFTS19DUFVfRVY2KTogRGVmaW5lCglzdWNoIHRoYXQgTUFTS19TVVBQT1JUX0FSQ0ggaXMgbm90IG5lZ2F0aXZlLgoKRnJpIEp1biAyNSAwNTozNTo0NCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKHZlcmlmeV9kb21pbmF0b3IpOiBQcm9wZXJseSBoYW5kbGUgQUREUl9WRUMgYW5kCglBRERSX0RJRkZfVkVDIGluc25zIHRoYXQgYXBwZWFyIGluc2lkZSBsb29wcy4KClRodSBKdW4gMjQgMjI6NTQ6MDUgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgogICAgICAgICAgICAgICAgICAgICAgICAgIEplZmYgTGF3IDxsYXdAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5tZCAobW92ZGZfaGFyZGZsb2F0MzIpOiBSZXZlcnQgcHJldmlvdXMgcGF0Y2guCglIYW5kbGUgTE9fU1VNIHRoZSBzYW1lIGFzIG9mZnNldHRhYmxlIGluIGNhc2VzIDEgYW5kIDIuCgkqIHJzNjAwMC5jIChmaW5kX2FkZHJfcmVnKTogUmV2ZXJ0IHByZXZpb3VzIHBhdGNoLgoKVGh1IEp1biAyNCAyMjo0MzoxMiAxOTk5ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIHN5c3RlbS5oIChzdHJzdHIpOiBOZXcgZXh0ZXJuYWwgZnVuY3Rpb24gZGVjbGFyYXRpb24uCgkqIGFjY29uZmlnLmggKE5FRURfREVDTEFSQVRJT05fU1RSU1RSKTogTmV3IGRlZmluZSBzbG90LgoJKiBjb25maWd1cmUuaW4gKEdDQ19ORUVEX0RFQ0xBUkFUSU9OUyk6IENoZWNrIGZvciBzdHJzdHIuCgkqIGNvbmZpZy5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgoKMTk5OS0wNi0yNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2NjLmMgKG1haW4pOiBSZWFkIHVzZXItc3BlY2lmaWVkIHNwZWNzIGZpbGVzIGFmdGVyIGNvbXB1dGluZwoJYWRkaXRpb25hbCBzdGFydGZpbGVfcHJlZml4ZXMuCgoxOTk5LTA2LTI0ICBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSpmaXhpbmMvaW5jbGhhY2suZGVmKGVuZF9lbHNlX2xhYmVsKTogY29tYmluZWQgZWxzZV9sYWJlbAoJYW5kIGVuZGlmX2xhYmVsIGFuZCBmaXhlZCB0aGUgc2VkIGV4cHJlc3Npb24uCgkqZml4aW5jL3tmaXhpbmNsLnh8aW5jbGhhY2suc2h9OiByZWdlbgoKVHVlIEp1biAyMiAwMTo1ODoxOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByczYwMDAubWQgKG1vdmRmX2hhcmRmbG9hdDMyKTogVXNlICVYIGluc3RlYWQgb2YgYWx3YXlzIGVtaXR0aW5nCgkneCcgd2hlbiBoYW5kbGluZyBub24tb2Zmc2V0dGFibGUgYWRkcmVzc2VzCgpUdWUgSnVuIDIyIDAwOjIwOjA1IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBmaW5hbC5jIChzaG9ydGVuX2JyYW5jaGVzKTogRG9uJ3QgdHJ5IHRvIHNwbGl0IGFuIGluc24gdGhhdCBoYXMKCWJlZW4gZGVsZXRlZC4KCk1vbiBKdW4gMjEgMjM6MzI6MTcgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCVRodSBKdW4gMTcgMTU6MDcgMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCSogZml4aW5jbHVkZXM6IElTQ05UTCBwYXRjaAoKTW9uIEp1biAyMSAyMjoxNTo1MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByczYwMDAuYyAoZmluZF9hZGRyX3JlZyk6IEhhbmRsZSBMT19TVU0gYWRkcmVzc2VzLgoKTW9uIEp1biAyMSAyMjoxNDowNSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKG1vdmRmX2hhcmRmbG9hdDMyKTogRml4IHR5cG8uCgpNb24gSnVuIDIxIDIwOjEwOjQyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb2xsZWN0Mi5jIChtYWluKTogTG9nIGZyYW1lIHRhYmxlIGNvdW50LgoJKEdDQ19PS19TWU1CT0wpIFtFQ09GRl06IEFjY2VwdCBzdEdsb2JhbC4KCShzY2FuX3Byb2dfZmlsZSkgW0NPRkZdOiBIYW5kbGUgZnJhbWUgdGFibGVzLgoKCSogYWxwaGEvYWxwaGEuaCAoVU5BTElHTkVEX1NIT1JUX0FTTV9PUCk6IERlZmluZS4KCShVTkFMSUdORURfSU5UX0FTTV9PUCwgVU5BTElHTkVEX0RPVUJMRV9JTlRfQVNNX09QKTogRGVmaW5lLgoJKiBhbHBoYS9lbGYuaDogVW5kZWYgdGhlbSBhZ2Fpbi4KCSogYWxwaGEvdm1zLmg6IFJlbW92ZSB0aGVpciBkZWZpbml0aW9ucy4KCjE5OTktMDYtMjEgIEpha3ViIEplbGluZWsgIDxqakB1bHRyYS5saW51eC5jej4KCgkqIHJlYWwuYyAoZXJlYWxfZnJvbV9kb3VibGUpOiBGaXggZm9yIDY0LWJpdCBiaWcgZW5kaWFuIGhvc3RzLgoJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBBZGQgY2FzZSBmb3IgaG9zdHMgd2hlcmUgZG91YmxlCglmaXRzIGluIEhPU1RfV0lERV9JTlQgYW5kIG9uZSB1c2VzIHVuaW9uIHRvIGFjY2VzcyBhIGxvbmcgY29uc3RhbnQKCWFzIGRvdWJsZS4KCk1vbiBKdW4gMjEgMTc6MTg6MjUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmMgKHNwYXJjX292ZXJyaWRlX29wdGlvbnMpOiBEb24ndCBhbGxvdyBwcm9maWxpbmcgZm9yCgljb2RlIG1vZGVscyBvdGhlciB0aGFuIG1lZGxvdy4KCShzcGFyY19mdW5jdGlvbl9wcm9maWxlcik6IE5ldyBmdW5jdGlvbiBmcm9tIG9sZCBGVU5DVElPTl9QUk9GSUxFUgoJbWFjcm8uICBVc2UgQVNNX0dFTkVSQVRFX0lOVEVSTkFMX0xBQkVMIGFuZCBNQ09VTlRfRlVOQ1RJT04uCgkoc3BhcmNfZnVuY3Rpb25fYmxvY2tfcHJvZmlsZXIpOiBMaWtld2lzZS4gIFVzZSB1c2VyX2xhYmVsX3ByZWZpeC4KCShzcGFyY19ibG9ja19wcm9maWxlcik6IExpa2V3aXNlLgoJKHNwYXJjX2Z1bmN0aW9uX2Jsb2NrX3Byb2ZpbGVyX2V4aXQpOiBMaWtld2lzZS4KCSogc3BhcmMuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBDYWxsIG5ldyBzcGFyYy5jIGZ1bmN0aW9uLgoJKEZVTkNUSU9OX0JMT0NLX1BST0ZJTEVSKTogTGlrZXdpc2UuCgkoQkxPQ0tfUFJPRklMRVIpOiBMaWtld2lzZS4KCShGVU5DVElPTl9CTE9DS19QUk9GSUxFUl9FWElUKTogTGlrZXdpc2UuCgkoTUNPVU5UX0ZVTkNUSU9OKTogTmV3LgoJKiBzcGFyYy9wYmQuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBEZWxldGUuCgkoRlVOQ1RJT05fQkxPQ0tfUFJPRklMRVIsIEJMT0NLX1BST0ZJTEVSKTogRGVsZXRlLgoJKiBzcGFyYy9zdW40bzMuaCAoRlVOQ1RJT05fUFJPRklMRVIpOiBEZWxldGUuCgkoTUNPVU5UX0ZVTkNUSU9OKTogTmV3LgoJKiBzcGFyYy9zeXN2NC5oIChGVU5DVElPTl9CTE9DS19QUk9GSUxFUik6IERlbGV0ZS4KCShCTE9DS19QUk9GSUxFUik6IERlbGV0ZS4KCShNQ09VTlRfRlVOQ1RJT04pOiBOZXcuCgpNb24gSnVuIDIxIDA2OjIyOjIxIDE5OTkgIE1hcmsgRWxicmVjaHQgPHNub3diYWxsM0BiaWdmb290LmNvbT4KCgkqIGkzODYvZGpncHAuaCAoTElCX1NQRUMpOiBOZXcuCgkoU1RBUlRGSUxFX1NQRUMpOiBOZXcuCgoJKiBpMzg2L3htLWRqZ3BwLmggKE5PX1NZU19TSUdMSVNUKTogRGVsZXRlZC4gTm93IG9ic29sZXRlLgoKTW9uIEp1biAyMSAwNjoxOTozMyAxOTk5ICBQaGlsaXBwZSBEZSBNdXl0ZXIgIDxwaGRtQG1hY3FlbC5iZT4KCgkqIGZpeGluYy9NYWtlZmlsZS5pbiAoZ251LXJlZ2V4Lm8pOiBEbyBub3QgZGVmaW5lIFNURENfSEVBREVSUyBpbgoJY29tcGlsZXIgZmxhZ3MuCgoJKiBzeXN0ZW0uaCAoV1NUT1BTSUcpOiBOZXcgbWFjcm8uCgpNb24gSnVuIDIxIDA1OjMzOjE1IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogYy1wcmFnbWEuYyAocHVzaF9hbGlnbm1lbnQpOiBEb24ndCBpZ25vcmUgYWxpZ25tZW50cyBncmVhdGVyIHRoYW4KCTQgYnl0ZXMuCgkoaW5zZXJ0X3BhY2tfYXR0cmlidXRlcyk6IFRha2UgaW50byBhY2NvdW50IG1lbWJlciBuYXR1cmFsIAoJYWxpZ25tZW50LgoKCSogaTM4Ni93aW5udC5jIChleHBvcnRzX2hlYWQpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGkzODZfcGVfcmVjb3JkX2V4cG9ydGVkX3N5bWJvbCk6IE5ldyBmdW5jdGlvbi4KCShpMzg2X3BlX2FzbV9maWxlX2VuZCk6IFVzZS4KCSogaTM4Ni9jeWd3aW4uaCAoQVNNX09VVFBVVF9DT01NT04pOiBSZWNvcmQgdGhlIGV4cG9ydGVkCglzeW1ib2xzIHRvIGJlIGVtaXR0ZWQgYXQgZW5kIG9mIGFzc2VtYmx5LgoJKEFTTV9ERUNMQVJFX09CSkVDVF9OQU1FKTogTGlrZXdpc2UuCgkoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IExpa2V3aXNlLgoKCSogaTM4Ni91d2luLmggKENQUF9TUEVDKTogVXNlIC1pZGlyYWZ0ZXIgaW5zdGVhZCAtaXByZWZpeCBhbmQKCS1pd2l0aHByZWZpeC4KCk1vbiBKdW4gMjEgMDU6MTc6MDAgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLm1kIChtb3ZkZl9oYXJkZmxvYXQzMik6IFVzZSB3b3JzdCBjYXNlIGluc24gbGVuZ3RoCglhdHRyaWJ1dGVzIGZvciBjYXNlcyAxIGFuZCAyLgoKCSogcnM2MDAwLmMgKGZpbmRfYWRkcl9yZWcpOiBOZXcgZnVuY3Rpb24uCgkqIHJzNjAwMC5oIChmaW5kX2FkZHJfcmVnKTogRGVjbGFyZS4KCShvZmZzZXR0YWJsZV9hZGRyX29wZXJhbmQpOiBEZWxldGUuCgkqIHJzNjAwMC5tZCAobW92ZGZfaGFyZGZsb2F0MzIpOiBIYW5kbGUgbm9uLW9mZnNldHRhYmxlIGxvYWRzCglmcm9tIGFuZCBzdG9yZXMgdG8gR1BScy4KCk1vbiBKdW4gMjEgMDQ6NDQ6MzEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3BhcmMuaCAoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IEZpeCBwYXJlbiBlcnJvciBpbnRyb2R1Y2VkCglpbiBsYXN0IGNoYW5nZS4KClN1biBKdW4gMjAgMTc6MjQ6MzUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emUpOiBEb24ndCBjbGVhciByZWdfbGFzdF91c2VzIG9uIGNhbGxzLgoKU2F0IEp1biAxOSAyMjo1Mjo1NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZSk6IE1hcmsgY2FsbC11c2VyIHJlZ3MgYXMgY2xvYmJlcmVkCglpbnN0ZWFkIG9mIHNldC4KClNhdCBKdW4gMTkgMDU6NDA6MDcgMTk5OSAgUGhpbGlwIEJsdW5kZWxsIDxwYkBuZXh1cy5jby51az4KCgkqIGFybS5jIChhcm1fcmVsb2FkX2luX2hpKTogSW52ZXJ0IHNlbnNlIG9mIHRlc3Qgb24gQllURVNfQklHX0VORElBTi4KClNhdCBKdW4gMTkgMDU6MjU6MDUgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5oIChDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IElmIGZsYWdfcGljLCBuZXZlciB1c2UKCVBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIGZvciBnZW5lcmFsIGFsbG9hY3Rpb24uCgkoSU5JVElBTF9FTElNSU5BVElPTl9PRkZTRVQpOiBDb3VudCB0aGUgZmFjdCB0aGF0IHRoZSBQSUMgcmVnaXN0ZXIKCW11c3QgYmUgc3RhY2tlZCBpZiBpdCBpcyB1c2VkIGZvciBQSUMgYWNjZXNzZXMuCgkqIGFybS5jICh1c2VfcmV0dXJuX2luc24pOiBIYW5kbGUgUElDIHJlZ2lzdGVyIHNwZWNpYWxseS4KCShvdXRwdXRfcmV0dXJuX2luc3RydWN0aW9uKTogTGlrZXdpc2UuCgkob3V0cHV0X2Z1bmNfe3Byb2xvZ3VlLGVwaWxvZ3VlfSk6IExpa2V3aXNlLgoJKG91dHB1dF9leHBhbmRfcHJvbG9ndWUpOiBMaWtld2lzZS4KCgkqIGFybS5jIChhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IFJlbW92ZSB3YXJuaW5nIGFib3V0IFBJQyBjb2RlCglub3QgYmVpbmcgc3VwcG9ydGVkLgoKRnJpIEp1biAxOCAxNTo0NDoxOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfZXhwYW5kX2Jsb2NrX21vdmUpOiBVc2UgZ2V0X2luc25zIHJhdGhlciB0aGFuCglnZW5fc2VxdWVuY2UgYXMgYXJndW1lbnQgdG8gZW1pdF9ub19jb25mbGljdF9ibG9jay4KCkZyaSBKdW4gMTggMDY6NDg6MzAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAoaW9jdGxfZml4X2N0cmwpOiBGaXggdGhlIGRlZmluaXRpb24gb2YgXypJU0NUUkwoKS4KCSogZml4aW5jL3tmaXhpbmNsLngsaW5jbGhhY2suc2h9OiByZWdlbgoKVGh1IEp1biAxNyAxMzoyODozMCAxOTk5ICBEYXZpZCBPJ0JyaWVuIDxvYnJpZW5ARnJlZUJTRC5vcmc+CgoJKiBpMzg2L2ZyZWVic2QtZWxmLmggKExJTktfU1BFQyk6IEZpeCB0eXBvLgoKCSogaTM4Ni9mcmVlYnNkLWVsZi5oIChGVU5DVElPTl9QUk9GSUxFUik6IGxhYmVscyBhcmUgbm90IG5lZWRlZCBhbmQKCXRoZSByZWZlcmVuY2UgdG8gYG1jb3VudCcgd2FzIG5vdCBjb3JyZWN0IGZvciB0aGUgRUxGIG9uIEZyZWVCU0QuCgpUaHUgSnVuIDE3IDAyOjU0OjMwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGludm9rZS50ZXhpIChpYTMyIG9wdGlvbnMpOiBGaXggdHlwby4KCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IFRpZ2h0ZW4gY2hlY2tzIGZvciB3aGVuIGl0IGlzIHNhZmUKCXRvIHNhZmUgdG8gZXh0cmFjdCBhIHN1YndvcmQgb3V0IG9mIGEgUkVHLgoKV2VkIEp1biAxNiAxMDozMzowMiAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZm91dC5jIChhZGRfaW5jb21wbGV0ZV90eXBlKTogTmV3IGZuLgoJKG91dHB1dF90eXBlKTogQ2FsbCBpdC4KCShyZXRyeV9pbmNvbXBsZXRlX3R5cGVzKTogTmV3IGZuLgoJKGR3YXJmb3V0X2ZpbmlzaCk6IENhbGwgaXQuCgoJRnJvbSBFcmljIFJhc2tpbiA8ZWhyQGxpc3R3b3Jrcy5jb20+OgoJKG91dHB1dF90eXBlKTogT3V0cHV0IHR5cGVzIGZvciBiYXNlcy4KClR1ZSBKdW4gMTUgMDE6NTU6MjAgMTk5OSAgRGF2aWQgTydCcmllbiA8b2JyaWVuQEZyZWVCU0Qub3JnPgoKCSogaTM4Ni9mcmVlYnNkLWVsZi5oIChMSU5LX1NQRUMpOiBjbGVhbiB1cCB0aGUgbGlua2luZyBsaWJyYXJ5CglzcGVjaWZpY2F0aW9ucyBhbmQgbWFrZSBpdCByZWFsaXN0aWMuCgkoTElCX1NQRUMpOiBMaWtld2lzZS4KCk1vbiBKdW4gMTQgMDM6NTU6NDAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChyczYwMDAtaWJtLWFpeDQuMyosIHBvd2VycGMtaWJtLWFpeDQuMyopOiBEbyBub3QKCXJlcXVpcmUgYSBzdWItdmVyc2lvbiAjLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoxOTk5LTA2LTE0ICBSb2JlcnQgTGlwZSAgKHJvYmVydGxpcGVAdXNhLm5ldCkKCgkqIHN2cjQuaCAoRFdBUkYyX0RFQlVHR0lOR19JTkZPKTogQ2hlY2sgZm9yIHJlZGVmaW5pdGlvbi4KCjE5OTktMDYtMTQgIEFuZHJlYXMgSmFlZ2VyICA8YWpAYXJ0aHVyLnJoZWluLW5lY2thci5kZT4KCgkqIGdjYy50ZXhpOiBNZW50aW9uIGdjYyAyLjk1IGluc3RlYWQgb2YgZWdjcyAxLjAwLgoKU3VuIEp1biAxMyAwMTowODowMiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogaW52b2tlLnRleGkgKG5vZGUgT3B0aW9uIFN1bW1hcnkpOiBBZGQgLWZwZXJtaXNzaXZlIGZsYWcuCgpTYXQgSnVuIDEyIDAzOjQwOjQyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHNwYXJjLmggKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBEbyBub3RoaW5nIHdpdGggb3BlcmFuZHMKCXRoYXQgcmVxdWlyZSBQSUMgY29kZSBzZXF1ZW5jZXMuCgpGcmkgSnVuIDExIDAzOjE3OjUxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChsaWJnY2MyKTogUGFzcyBNQVlCRV9VU0VfQ09MTEVDVDIgYXMgYW4gYXJndW1lbnQuCgkqIGxpYmdjYzIuYyAoX19DVE9SX0xJU1QsIF9fRFRPUl9MSVNUKTsgRG8gbm90IHByb3ZpZGUKCWluaXRpYWxpemVycyBpcyBzb21lIGNpcmN1bXN0YW5jZXMuCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChlbmRpZl9sYWJlbCk6IEFkZCBhZGRpdGlvbmFsIHNlbGVjdG9yIGZvcgoJbW9yZSBib2d1cyBzdHVmZiBhZnRlciAjZW5kaWYgc3RhdGVtZW50cy4KCSogZml4aW5jL2luY2xoYWNrLnNoLCBmaXhpbmMvZml4aW5jbC54OiBSZWJ1aWx0LgoKVGh1IEp1biAxMCAyMDo0NToyNyAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3lnd2luLmggKFNFVF9BU01fT1ApOiBEZWZpbmUuCgpUaHUgSnVuIDEwIDIwOjM3OjU3IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogcmVnLXN0YWNrLmMgKHN0YWNrX3JlZ19saWZlX2FuYWx5c2lzKTogRmluZCBhbGwgdGhlIFJFVFVSTiBpbnNucy4KClRodSBKdW4gMTAgMTQ6NDc6NTkgMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCiAgICAgICAgKiBmaXhpbmMvaW5jbGhhY2suZGVmKHN1bl9hdXRoX3Byb3RvKTogV2UgZG8gbm90IGtub3cgaG93IHRvCiAgICAgICAgdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIHZhbGlkIHByb3RvdHlwZXMuICBEZWxldGUgYnlwYXNzIGV4cHIuCiAgICAgICAgKGlvY3RsX2ZpeF9jdHJsKTogQ29ycmVjdCB0aGUgc2VsZWN0aW9uIGV4cHJlc3Npb24uCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmKG5vX2RvdWJsZV9zbGFzaCk6IGZpeGVkIHF1b3RpbmcgcnVsZXMKCSogZml4aW5jL2luY2xoYWNrLnNoOiByZWdlbgoJKiBmaXhpbmMvZml4aW5jbC54OiByZWdlbgoKVGh1IEp1biAxMCAwMToyMjo1OSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERpc2FibGUgYml2LT5naXYgdHJhbnNsYXRpb25zIGFuZAoJZ2l2IHJlY29tYmluYXRpb24uICBGb3IgdGhlIHJlbGVhc2UgYnJhbmNoIG9ubHkuCgpXZWQgSnVuICA5IDE1OjU3OjU3IDE5OTkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIHJzNjAwMC5tZCAobW92c2lfZ290X2ludGVybmFsX21lbSk6IERlbGV0ZS4KCSogcnM2MDAwLmggKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogTWFyayBQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTS4KCShHT1RfVE9DX1JFR05VTSk6IERlbGV0ZS4KCShQSUNfT0ZGU0VUX1RBQkxFX1JFR05VTSk6IERlZmluZS4KCShGSU5BTElaRV9QSUMpOiBEaXNhYmxlLgoJKiByczYwMDAuYyAocnM2MDAwX2dvdF9yZWdpc3Rlcik6IE5ldyBjb2RlIGZvciBmaXhlZCBwaWMgcmVnaXN0ZXIuCgkocnM2MDAwX3JlcGxhY2VfcmVnbm8pOiBEZWxldGUuCgkocnM2MDAwX2ZpbmFsaXplX3BpYyk6IExpa2V3aXNlLgoJKG91dHB1dF9wcm9sb2cpOiBIYW5kbGUgUElDX09GRlNFVF9UQUJMRV9SRUdOVU0uCgpXZWQgSnVuICA5IDE5OjQ0OjI2IDE5OTkgIEoib3JuIFJlbm5lY2tlIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAobG9vcF9pbnNuX2ZpcnN0X3ApOiBEb24ndCBjb21wYXJlIExVSURzIHdoZW4gUAoJaXMgYSBub3RlOyB1c2UgPD0gZm9yIHRoZSBjb21wYXJlOyBhZHZhbmNlIFAgd2hpbGUgaXQgaXMKCWEgTk9URS4KCldlZCBKdW4gIDkgMTM6MTI6MjQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAobm9fZG91YmxlX3NsYXNoKTogRml4IHF1b3RpbmcgZm9yIHRlc3QuCgkqIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2ZpeGluY2wuc2g7IFJlYnVpbHQuCgogICAgICAgICogdmFyYXNtLmMgKHJlbW92ZV9mcm9tX3BlbmRpbmdfd2Vha19saXN0KTogVmVyaWZ5IHQtPm5hbWUKICAgICAgICBpcyBub24tTlVMTCBiZWZvcmUgcGFzc2luZyBpdCB0byBzdHJjbXAuCgpXZWQgSnVuICA5IDIzOjAxOjE3IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGludm9rZS50ZXhpOiBBZGQgQzR4IGludm9jYXRpb24gZG9jcy4KCldlZCBKdW4gIDkgMjI6NDI6NDkgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoVEFSR0VUX0VYUE9TRV9MRFAsIExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOgoJRGVmaW5lIG5ldyBtYWNyb3MuIAoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfZW1pdF9tb3ZlX3NlcXVlbmNlLCBzcmNfb3BlcmFuZCk6IFVzZQoJVEFSR0VUX0VYUE9TRV9MRFAuCgkoYzR4X2xlZ2l0aW1pemVfcmVsb2FkX2FkZHJlc3MpOiBOZXcgZnVuY3Rpb24uCgkqIGNvbmZpZy9jNHgvYzR4Lm1kOiBVcGRhdGUgZG9jcy4KCldlZCBKdW4gIDkgMDY6NTAgMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWYoc3VuX2F1dGhfcHJvdG8pOiBieXBhc3MgdGhlIHBhdGNoIGlmCgl0aGUgdHlwZWQgYXJndW1lbnRzIGFyZSBub3QgcGFydCBvZiBhIGNvbW1lbnQKCShpb2N0bF9maXhfY3RybCk6IEFkZGVkIGEgcHVycG9zZSBjb21tZW50CgkqIGZpeGluYy9maXhpbmNsLng6IHJlZ2VuZXJhdGUKCSogZml4aW5jL2luY2xoYWNrLnNoOiByZWdlbmVyYXRlCgpXZWQgSnVuICA5IDA0OjE0OjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeGluY2x1ZGVzOiBBdm9pZCByZW1vdmluZyAnLicuCgkqIGZpeGluYy9maXhpbmMuc3ZyNDogTGlrZXdpc2UuCgkqIGZpeGluYy9maXhpbmMud2lubnQ6IExpa2V3aXNlLgoJKiBmaXhpbmMvaW5jbGhhY2sudHBsOiBMaWtld2lzZS4KCSogZml4aW5jL2ZpeGluY2wuc2gsIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KCldlZCBKdW4gIDkgMDM6NTU6MzQgMTk5OSAgSmltIFdpbHNvbiA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKHJzNjAwMC1pYm0tYWl4NC5bMTJdKik6IENoYW5nZSByeDYwMDAgdG8gcnM2MDAwLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgogICAgICAgICogY29uZmlndXJlLmluIChyczYwMDAtaWJtLWFpeDQuWzEyXSopOiBEZWxldGUgdXNlIG9mIGFpeDQxLWdsZC5oLgogICAgICAgIEFkZCB1c2Ugb2YgeC1haXg0MS1nbGQuCgoxOTk5LTA2LTA5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChzdW5fY2F0bWFjcm8pOiBFc2NhcGUgcGFyZW5zIGluIHRoZSBzZWxlY3QKCXBhdHRlcm4uCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KCldlZCBKdW4gIDkgMDM6MTA6MzQgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogSGFuZGxlIGAjcHJhZ21hIHBhY2soKScKCWNvcnJlY3RseS4KClR1ZSBKdW4gIDggMDU6NDc6NDggMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIG9wdGFicy5jIChleHBhbmRfY21wbHhkaXZfd2lkZSk6IFVzZSBleHBhbmRfYWJzIHRvIGdldCB0aGUgYWJzb2x1dGUKCXZhbHVlcy4KCk1vbiBKdW4gIDcgMjI6MzA6MzcgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAoYmFkX2x2YWwpOiBSZW1vdmUgYm9ndXMgc2VsZWN0b3IuCgkqIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2ZpeGluY2wuc2g7IFJlYnVpbHQuCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChhdm9pZF9ib29sKTogQWxzbyBjYXRjaAoJInR5cGVkZWYgW3Vuc2lnbmVkXSBpbnQgYm9vbCIuCgkqIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2ZpeGluY2wuc2g6IFJlYnVpbHQuCgoJKiBtNjhrL3gtaHAzYnNkNDQ6IERlbGV0ZSBvYnNvbGV0ZSBhbmQgaW5jb3JyZWN0IGZpbGUuCgkqIGNvbmZpZ3VyZS5pbiAobTY4ay1ocC1ic2Q0LjQpOiBObyBsb25nZXIgdXNlIHgtaHAzYnNkNDQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCk1vbiBKdW4gIDcgMjI6MDU6MDMgMTk5OSAgTWFyayBLZXR0ZW5pcyAgPGtldHRlbmlzQGdudS5vcmc+CgoJKiBjb25maWcvaTM4Ni9nbnUuaDogSW5jbHVkZSA8Z251Lmg+IHJpZ2h0IGFmdGVyIDxpMzg2L2xpbnV4Lmg+LAoJc3VjaCB0aGF0IHdlIGNhbiBvdmVycmlkZSBpdHMgZGVmaW5pdGlvbnMgaWYgbmVjZXNzYXJ5LgoJKENQUF9TUEVDKTogTmV3IGRlZmluZS4gIFN1cHBvcnQgcHJvY2Vzc29yIHNwZWNpZmljIHByZWRlZmluZXMgdmlhCgklKGNwcF9jcHUpLgoJKENDMV9TUEVDKTogTmV3IGRlZmluZS4gIFN1cHBvcnQgcHJvY2Vzc29yIHNwZWNpZmljIGNvbXBpbGVyCglvcHRpb25zIHZpYSAlKGNjMV9jcHUpLgoJKFNUQVJURklMRV9TUEVDKTogTmV3IGRlZmluZS4gIFVzZSBjcnQwLm8gaW5zdGVhZCBvZiBjcnQxLm8gZm9yCgktc3RhdGljLgoKMTk5OS0wNi0wNyAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAobWF0aF9nY2NfaWZuZGVmcyk6IEluc2VydCB3aGl0ZXNwYWNlCgliZXR3ZWVuIHNlZCdzIC1lIGZsYWcsIGFuZCB0aGUgb3Blbi1xdW90ZSBmb2xsb3dpbmcgaXQuCgkqIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9maXhpbmNsLnNoOiBSZWJ1aWx0LgoKTW9uIEp1biAgNyAyMDozNDoyMCAxOTk5ICBSb2JlcnQgTGlwZSA8cm9iZXJ0bGlwZUB1c2EubmV0PgoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZhcmFzbS5jIChhc3NlbWJsZV9zdGFydF9mdW5jdGlvbik6IFJlbW92ZSB0aGUgZnVuY3Rpb24KCWZyb20gdGhlIHBlbmRpbmcgd2VhayBkZWNscyBsaXN0IHdoZW4gd2UgZGVmaW5lIGEgZnVuY3Rpb24uCgkoYXNzZW1ibGVfdmFyaWFibGUpOiBTaW1pbGFybHkgZm9yIHZhcmlhYmxlcy4KCSh3ZWFrX2ZpbmlzaCk6IElnbm9yZSBpdGVtcyBvbiB0aGUgbGlzdCB3aXRoIGEgTlVMTCBuYW1lLgoJKHJlbW92ZV9mcm9tX2VuZGluZ193ZWFrX2xpc3QpOyBOZXcgZnVuY3Rpb24gdG8gInJlbW92ZSIgYW4gaXRlbQoJZnJvbSB0aGUgcGVuZGluZyB3ZWFrIGRlY2xhcmF0aW9ucyBsaXN0LgoKTW9uIEp1biAgNyAxOToyNzowNyAxOTk5ICBKZXJyeSBRdWlubiA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCgkqIHBhLm1kIChmbXB5ZmFkZCwgZm1weW5mYWRkLCBmbmVnYWJzKTogTmV3IHBhdHRlcm5zLgoKU3VuIEp1biAgNiAxMTo1ODozNCAxOTk5ICBKYWt1YiBKZWxpbmVrICA8ampAdWx0cmEubGludXguY3o+CgoJKiBzcGFyYy5tZCAoYWJzdGYyKTogVGhpcyBzaG91bGQgYmUgYW4gZXhwYW5kLgoJKHNwbGl0IGFmdGVyIGFic3RmMl9ub3R2OSk6IEZpeCBtb2RlLgoJKGFic3RmMl9ocV92OSk6IE5ldyBwYXR0ZXJuLgoJKGFic3RmMl92OSk6IE9ubHkgdXNlIHdoZW4gbm8gaGFyZCBxdWFkLgoJKGFic2RmMl92OSk6IEZpeCBpZiB0YXJnZXQgaXMgbm90IHRoZSBzYW1lIGFzIHNvdXJjZS4KCShhc2hyc2kzX2V4dGVuZCwgYXNocnNpM19leHRlbmQyLCBsc2hyc2kzX2V4dGVuZCwgbHNocnNpM19leHRlbmQyKToKCUFkZCBjb3JyZWN0IG91dHB1dCBjb25zdHJhaW50cy4KClNhdCBKdW4gIDUgMTc6MDQ6MTYgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCglGcm9tIERhdmUgTG92ZSB0byBlZ2NzLXBhdGNoZXMgb24gMjAgTWF5IDE5OTkgMTc6Mzg6MzggKzAxMDA6CgkqIGludm9rZS50ZXhpOiBDbGFyaWZ5IHRleHQgdmlzLWEtdmlzIEludGVsIENQVXMuCgpGcmkgSnVuICA0IDEzOjMwOjI3IDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgoKCSogYWxwaGEvb3NmLmggKENQUF9TVUJUQVJHRVRfU1BFQyk6IEhhbmRsZSAtdGhyZWFkcy4KCShMSUJfU1BFQyk6IExpa2V3aXNlLgoJTGluayB3aXRoIC1scHJvZjFfciBmb3IgLWcvLXBnLgoKMTk5OS0wNi0wNCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBGaXggY2hhbmdlIG9mIEphbiAxOS4KCkZyaSBKdW4gIDQgMDA6MTI6NDAgMTk5OSAgTWFyYyBFc3BpZSA8ZXNwaWVAY3ZzLm9wZW5ic2Qub3JnPgoKCSogZnJlZWJzZC1lbGYuaCAoU1dJVENIX1RBS0VTX0FSRyk6ICBSZWRlZmluZSwgbm90IGRlZmluZS4KCShTVEFSVEZJTEVfU1BFQyk6ICBEZWZpbmUsIG92ZXJyaWRlIHRoZSBzdnI0LmggdmVyc2lvbi4KCShFTkRGSUxFX1NQRUMpOiAgTGlrZXdpc2UuCgpUaHUgSnVuICAzIDIzOjU4OjU1IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeGluYy9pbmNsaGFjay5kZWYgKGxpbWl0c19pZm5kZWZzKTogQWxzbyBhcHBseSB0byBzeXMvbGltaXRzLmgKCSogZml4aW5jL2ZpeGluY2wueDogUmVnZW5lcmF0ZWQuCgkqIGZpeGluYy9pbmNsaGFjay5zaDogUmVnZW5lcmF0ZWQuCgpUaHUgSnVuIDMgMDc6NDggMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWYoSW9fRGVmX1F1b3Rlcyk6IGNvcnJlY3RlZCBzZWQgZXhwcmVzc2lvbgoJKiBmaXhpbmMvZml4aW5jbC54OiByZWdlbmVyYXRlCgkqIGZpeGluYy9pbmNsaGFjay5zaDogcmVnZW5lcmF0ZQoKVGh1IEp1biAgMyAyMjoyNzo1MCAxOTk5ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxpcGVAdXNhLm5ldD4KCgkqIGkzODYvdWRrLmggKExJTktfU1BFQyk6IENvcnJlY3QgbGlua2VyIHNlYXJjaCBwYXRoIGZvcgoJc3lzdGVtIGxpYnJhcmllcy4KClRodSBKdW4gIDMgMDI6MTU6MDcgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGFkZF9pbmNvbXBsZXRlX3R5cGUpOiBOZXcgZm4uCgkoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IENhbGwgaXQuCgkocmV0cnlfaW5jb21wbGV0ZV90eXBlcyk6IE5ldyBmbi4KCShkd2FyZjJvdXRfZmluaXNoKTogQ2FsbCBpdC4KClRodSBKdW4gIDMgMDE6MTk6MDMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2NzZS5jIChpbnNlcnRfaW5zbl9lbmRfYmIpOiBDb3JyZWN0IHBsYWNlbWVudCBvZiBpbnNucyB3aGVuIHRoZQoJY3VycmVudCBibG9jayBzdGFydHMgd2l0aCBhIENPREVfTEFCRUwgYW5kIGVuZHMgd2l0aCBhIENBTEwgYW5kCgl3ZSBjYW4gbm90IGZpbmQgYWxsIHRoZSBhcmd1bWVudCBzZXR1cCBpbnN0cnVjdGlvbnMgZm9yIHRoZSBDQUxMLgoKV2VkIEp1biAgMiAxMjoyNTo1NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAob3ZlcnJpZGVfb3B0aW9ucyk6IFRoaW5rbyBpbiBsYXN0IHBhdGNoLgoKCSogYWxwaGEvb3NmLmggKENQUF9TVUJUQVJHRVRfU1BFQyk6IERlZmluZS4KCShMSUJfU1BFQyk6IFJlY29nbml6ZSAtcHRocmVhZC4KCldlZCBKdW4gIDIgMDc6MDcgMTk5OSBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL2ZpeGluY2wuYyhnbG9iYWwgZGVmKTogQWRkIEZEX1NIRUxMX1NDUklQVCB0byBtYXJrCglmaXhlcyB0aGF0IG5lZWQgImZpbGU9eHh4XG4iIHByZXBlbmRlZCBiZWZvcmUgaW52b2NhdGlvbgoJKHN0YXJ0X2ZpeGVyIC0gbmV3KTogc3RhcnRpbmcgdGhlIGZpeGVyIHByb2Nlc3MgaXMgY29tcGxleCBlbm91Z2gKCXRvIHdhcnJlbnQgaXRzIG93biByb3V0aW5lLiAgSXQgcHJlcGVuZHMgdGhlICJmaWxlPXh4eFxuIiBzdHVmZi4KCShwcm9jZXNzKTogdXNlcyB0aGUgbmV3IHJvdXRpbmU7IG9taXQgdXNhZ2Ugb2YgcHV0ZW52KCkKCSogZml4aW5jL2ZpeGluY2wudHBsOiBtYXJrIHNoZWxsIHNjcmlwdHMgd2l0aCBGRF9TSEVMTF9TQ1JJUFQKCSogZml4aW5jL2ZpeGluY2wueDogcmVnZW5lcmF0ZQoKV2VkIEp1biAgMiAwNjozNjoxNCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3IChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLm1kICh6ZXJvX2V4dGVuZHFpZGkyKTogRG9uJ3QgYWxsb3cgb3BlcmFuZDEgdG8gYmUgYSBtZW1vcnkKCXJlZmVyZW5jZS4gIFRlbXBvcmFyeSB3b3JrLWFyb3VuZCBmb3IgcHJvYmxlbXMgd2l0aCBjb25zdGFudAoJcG9vbCBoYW5kbGluZy4KCldlZCBKdW4gIDIgMDI6NDA6NDMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKICAgICAgICAqIFJFQURNRSwgY29uZmlndXJlLmluLCBnY2MuMSwgZ2NjLnRleGk6IFVwZGF0ZSBuYW1lIChlZ2NzIC0+IGdjYykKICAgICAgICBhbmQgdmVyc2lvbiAjcyAoMS4xIC0+IDIuOTUpIGFzIG5lZWRlZC4KICAgICAgICAqIFJFQURNRS5nNzc6IEtpbGwgd2F5IG91dCBvZiBkYXRlIGZpbGUgaW4gdGhlIHRvcGxldmVsIGRpcmVjdG9yeS4KCldlZCBKdW4gIDIgMDA6NTI6MzQgMTk5OSAgRGF2aWQgTydCcmllbiA8b2JyaWVuQEZyZWVCU0Qub3JnPgoKCSogY29uZmlndXJlLmluIChpWzM0NTY3XTg2LSotZnJlZWJzZGVsZik6IERvbid0IGluY2x1ZGUgbGludXguaCwKCWkzODYvZnJlZWJzZC1lbGYuaCBubyBsb25nZXIgcmVxdWlyZXMgaXQuICBJbnN0ZWFkIGluY2x1ZGUgc3ZyNC5oLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGkzODYvZnJlZWJzZC1lbGYuaCAoREVGQVVMVF9WVEFCTEVfVEhVTktTKTogRGVmaW5lLgoJKEFTTV9DT01NRU5UX1NUQVJULCBBU01fQVBQX09OLCBBU01fQVBQX09GRiwgU0VUX0FTTV9PUCk6IExpa2V3aXNlLgoJKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSwgV0NIQVJfVU5TSUdORUQpOiBMaWtld2lzZS4KCShTV0lUQ0hfVEFLRVNfQVJHKTogTGlrZXdpc2UuCgkqIGkzODYvZnJlZWJzZC5oOiBSZW1vdmUgRlJFRUJTRF9OQVRJVkUgc3VwcG9ydC4KCSogY29uZmlnL3QtZnJlZWJzZDogTW92ZWQgZnJvbSBjb25maWcvaTM4Ni8gc28gaXQgY2FuIHVzZWQgZm9yIGFsbAoJRnJlZUJTRCB0YXJnZXRzLgoJCk1vbiBNYXkgMzEgMDI6MjI6NTUgMTk5OSAgUGhpbGlwcGUgRGUgTXV5dGVyICA8cGhkbUBtYWNxZWwuYmU+CgoJKiBtNjhrL3gtbW90MzMwMCAoWENGTEFHUyk6IEZpeGVkIHRvIG1hdGNoIHN0Yi5vLCBub3QgZi9zdGIuby4KCldlZCBKdW4gIDIgMDA6MDg6MzQgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKGlbMzQ1NjddODYtKi11ZGsqKTogSW5zdGFsbCBoZWFkZXJzIHdpdGggY3Bpby4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKV2VkIEp1biAgMiAwMDo0OTowMCBFRFQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogZmxvdy5jIChtYXJrX3JlZ3NfbGl2ZV9hdF9lbmQsIGluc25fZGVhZF9wLAoJbWFya19zZXRfMSwgbWFya191c2VkX3JlZ3MpOiBPbmx5IGdpdmUgRlJBTUVfUE9JTlRFUl9SRUdOVU0KCWFuZCBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIHNwZWNpYWwgdHJlYXRtZW50IGlmIHJlbG9hZAoJaGFzbid0IHJ1biBvciB0aGUgZnJhbWUgcG9pbnRlciBpcyBuZWVkZWQuCgkqIGhhaWZhLXNjaGVkLmMgKGF0dGFjaF9kZWF0aHMpOiBMaWtld2lzZS4KCSogc2NoZWQuYyAoYXR0YWNoX2RlYXRocyk6IExpa2V3aXNlLgoKVGh1IE1heSAyNyAyMjowNjo1MiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogY2NjcC5jIChoYW5kbGVfZGlyZWN0aXZlKTogSGFuZGxlIGJhY2tzbGFzaC1uZXdsaW5lcyBpbiBxdW90ZWQKCXN0cmluZ3MgY29ycmVjdGx5LgoKTW9uIE1heSAzMSAyMjo0MjowMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBSZW1vdmUgdGhpcyBwYXRjaCAoZnJvbSB0aGUgYnJhbmNoIG9ubHkpCglXZWQgTWF5IDI2IDA5OjUzOjA1IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CiAgICAgICAgKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBTVFJJUF9OT1BTIHdoZW4gZGVjaWRpbmcgd2hldGhlciBvciBub3QKCXNvbWV0aGluZyBpcyBhIGNhbmRpZGF0ZSBmb3Igb3B0aW1pemVfYml0X2ZpZWxkX2NvbXBhcmUuCgpNb24gTWF5IDMxIDE1OjIzOjIzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAocmVsb2FkXypfaGVscCk6IE5ldyBwYXR0ZXJucyBhbmQgc3BsaXR0ZXJzLgoJKHJlbG9hZF8qKTogVXNlIHRoZW0uCgkobW92W3FoXWkpOiBMaWtld2lzZS4KCk1vbiBNYXkgMzEgMDk6MzY6MTEgMTk5OSAgQ29ydCBEb3VnYW4gIDxjb3J0QGNzLm5tdC5lZHU+CgoJKiByczYwMDAvbGludXguaCAoTElOS19TUEVDKTogVXNlIGVtdWxhdGlvbiBlbGYzMnBwY2xpbnV4LgoKU2F0IE1heSAyOSAxOTowODoxMCAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwaGlsYkBnbnUub3JnPgoKCSogY29uZmlnL2FybS9hb3V0LmggKEFTTV9PVVRQVVRfQUxJR04pOiBPbmx5IGRlZmluZSBpZiBub3QgYWxyZWFkeSAKCWRlZmluZWQuCgkqIGNvbmZpZy9hcm0vZWxmLmggKEFTTV9PVVRQVVRfQUxJR04pOiBEZWZpbmUuCgkoTUFYX09GSUxFX0FMSUdOTUVOVCk6IExpa2V3aXNlLgoKTW9uIE1heSAzMSAwMDo0NToxNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemVfMSk6IE9ubHkgc2V0IENBTl9SRUFDSF9FTkQgaWYgCgljYWxjdWxhdGVfY2FuX3JlYWNoX2VuZCByZXR1cm5zIG5vbnplcm8uCgoJKiBNYWtlZmlsZS5pbiAoQ0ZMQUdTKTogUmVtb3ZlIHdhcm5pbmcgZmxhZ3MuCgkoV0FSTl9DRkxBR1MpOiBEaXNhYmxlLgoKCSogY29uZmlndXJlLmluIChuYXRpdmUgZ2FzIHRlc3RzKTogU2VhcmNoIGZvciBhbiBhc3NlbWJsZXIgaW4gdGhlCglzYW1lIG1hbm5lciB0aGF0IHRoZSBpbnN0YWxsZWQgY29tcGlsZXIgd2lsbC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiB0bS50ZXhpIChNRF9FWEVDX1BSRUZJWCk6IE5vdGUgbmVlZCB0byB1cGRhdGUgY29uZmlndXJlLmluIHRvby4KCgkqIGFsaWFzLmMgKGZpbmRfYmFzZV90ZXJtKTogSW1wcm92ZSBoYW5kbGluZyBvZiBhZGRyZXNzZXMKCWNvbnN0cnVjdGVkIGZyb20gYmluYXJ5IG9wZXJhdGlvbnMuCgpTdW4gTWF5IDMwIDE0OjQzOjM3IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogZml4aW5jbC5jOiBSZXBsYWNlIGxvY2FsIGluY2x1ZGUgc2NoZW1lIHdpdGggI2luY2x1ZGVzIG9mIAoJZ2Fuc2lkZWNsLmggYW5kIHN5c3RlbS5oLgoJKiBwcm9jb3Blbi5jOiAgTGlrZXdpc2UuCgkqIHNlcnZlci5jOiAgTGlrZXdpc2UuCgpTdW4gTWF5IDMwIDE0OjE4OjQwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9uLmggKGNsZWFudXBfbGFiZWwsIGZyYW1lX29mZnNldCk6IERlY2xhcmUuCgkodGFpbF9yZWN1cnNpb25fbGFiZWwsIHRhaWxfcmVjdXJzaW9uX3JlZW50cnkpOiBMaWtld2lzZS4KCShhcmdfcG9pbnRlcl9zYXZlX2FyZWEsIHJ0bF9leHByX2NoYWluKTogTGlrZXdpc2UuCgkqIHN0bXQuYyAoY2xlYW51cF9sYWJlbCwgZnJhbWVfb2Zmc2V0KTogRGVsZXRlIGV4dGVybiBkZWNsYXJhdGlvbnMuCgkodGFpbF9yZWN1cnNpb25fbGFiZWwsIHRhaWxfcmVjdXJzaW9uX3JlZW50cnkpOiBMaWtld2lzZS4KCShhcmdfcG9pbnRlcl9zYXZlX2FyZWEsIHJ0bF9leHByX2NoYWluKTogTGlrZXdpc2UuCgpGcmkgTWF5IDI4IDAzOjQ3OjAzIDE5OTkgIEVyaWMgUmFza2luIChlaHJAbGlzdHdvcmtzLmNvbSkKCgkqIGkzODYvdC1kZ3V4IChFWFRSQV9QQVJUUyk6IEFkZCBjcnRpLm8uCgkoY3J0aS5vKTogQWRkIGJ1aWxkIHJ1bGUgYW5kIGRlcGVuZGVuY2llcy4KCkZyaSBNYXkgMjggMDM6MDc6MTAgMTk5OSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogcnM2MDAwL3N5c3Y0LmggKENDMV9TUEVDKTogQWRkIHN1cHBvcnQgZm9yIC1wcm9maWxlCgkoTElCX0xJTlVYX1NQRUMpOiBMaWtld2lzZS4KCShMSUJfTElOVVhfU1BFQyk6IEFkZCBzdXBwb3J0IGZvciAtcHRocmVhZAoJKENQUF9PU19MSU5VWF9TUEVDKTogTGlrZXdpc2UuCgkoQ1BQX1NZU1ZfU1BFQyk6IEF2b2lkIHJlZGVmaW5pdGlvbnMgaWYgYm90aCAtZnBpYyBhbmQgLWZQSUMgYXJlCglzcGVjaWZpZWQKCgkqIHJzNjAwMC5jIChvdXRwdXRfbWlfdGh1bmspOiBFbmFibGUgZnVsbCBzdXBwb3J0IGFnYWluLgoKVGh1IE1heSAyNyAxMzowNDo1MiAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBpMzg2LmMgKG91dHB1dF9mcF9jYzBfc2V0KTogRG9uJ3QgY2hlY2sgdGhlIEpVTVBfSU5TTiBjb2RlIGZvcgoJY29uZGl0aW9uYWwgbW92ZS4KCShub3RpY2VfdXBkYXRlX2NjLCBvdXRwdXRfZmxvYXRfY29tcGFyZSk6IEVuYWJsZSBUQVJHRVRfQ01PVkUgc3VwcG9ydC4KCShvdXRwdXRfZmxvYXRfY29tcGFyZSwgb3V0cHV0X2ZwX2NjMF9zZXQpOiBGaXggdGhlIEZMT0FUIGNvbXBhcmlzb24KCWZvciBJRUVFIG1hdGggYW5kIENDX0ZDT01JLgoJKHB1dF9qdW1wX2NvZGUpOiBObyBJRUVFIGlmIENDX0ZDT01JIGlzIHNldC4KCjE5OTktMDUtMjcgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZF90cnV0aG9wKTogTWFrZSB0aGUgZmllbGQgcmVmZXJlbmNlIHVuc2lnbmVkCgl3aGVuIGNvbnZlcnRpbmcgYSBzaW5nbGUgYml0IGNvbXBhcmUuCgpUaHUgTWF5IDI3IDAzOjA3OjEzIDE5OTkgIFBoaWxpcCBCbHVuZGVsbCAgPHBiQG5leHVzLmNvLnVrPgoKCUJhc2VkIG9uIHBhdGNoIGJ5IFNjb3R0IEJhbWJyb3VnaCBhbmQgUGF0IEJlaXJuZToKCSogY29uZmlnL2FybS9hcm0uYyAobWFraW5nX2NvbnN0X3RhYmxlKTogTmV3IHZhcmlhYmxlLgoJKiBjb25maWcvYXJtL2FybS5oIChtYWtpbmdfY29uc3RfdGFibGUpOiBEZWNsYXJlLgoJKE9VVFBVVF9JTlRfQUREUl9DT05TVCk6IE1hcmsgc3ltYm9scyBhcyBwb3NpdGlvbiBpbmRlcGVuZGVudCBpZgoJYXBwcm9wcmlhdGUuCgkqIGNvbmZpZy9hcm0vYXJtLm1kIChjb25zdHRhYmxlXzQsIGNvbnN0dGFibGVfOCwgY29uc3R0YWJsZV9lbmQpOgoJS2VlcCB0cmFjayBvZiB3aGVuIHdlIGFyZSBidWlsZGluZyB0aGUgY29uc3RhbnQgdGFibGUuCQoKVGh1IE1heSAyNyAwMjo1Mjo1NSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2YXJhc20uYyAoU1RSSVBfTkFNRV9FTkNPRElORyk6IFJlbW92ZSBkZWZhdWx0IGRlZmluaXRpb24uCgkqIG91dHB1dC5oIChTVFJJUF9OQU1FX0VOQ09ESU5HKTogU3RyaXAgJyonIGxpa2UgdGhlIG9sZCB2YXJhc20KCXZlcnNpb24gZGlkLgoKVGh1IE1heSAyNyAwMjo0MDo0OCAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERvbid0IGRvIGJpdi0+Z2l2IGNvbnZlcnNpb24gb24gY29uc3RhbnRzLgoKVGh1IE1heSAyNyAwMjowOToyNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBEbyBub3QgY2FsbCByZW1vdmVfYWRkcmVzc19yZXBsYWNlbWVudHMKCXdoZW4gcHJlc2VudGVkIHdpdGggaWRlbnRpY2FsIG9wdGlvbmFsIHJlbG9hZHMuCgpXZWQgTWF5IDI2IDE0OjE4OjA1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5oIChNQVNLX0ZJWCwgVEFSR0VUX0ZJWCk6IE5ldy4KCShNQVNLXyopOiBSZW9yZ2FuaXplIGNvbnN0YW50cy4KCShDUFBfQU1fRklYX1NQRUMpOiBOZXcuCgkoVEFSR0VUX1NXSVRDSEVTKTogQWRkIEZJWC4KCShFWFRSQV9TUEVDUyk6IExpa2V3aXNlLgoJKENQUF9DUFVfRVY2X1NQRUMpOiBVc2UgRklYLCBub3QgQ0lYLgoJKFNFQ09OREFSWV9NRU1PUllfTkVFREVEKTogTGlrZXdpc2UuCgkoUkVHSVNURVJfTU9WRV9DT1NUKTogTGlrZXdpc2UuCgkqIGFscGhhLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBBZGQgRklYIHN1cHBvcnQuICBBbHdheXMgdXNlIAoJQUxQSEFfVFBfUFJPRyBmb3IgZXY2LgoJKiBhbHBoYS5tZCAoc3FydCBhbmQgbW92W3NkXWkgcGF0dGVybnMpOiBVc2UgRklYLCBub3QgQ0lYLgoJKiBhbHBoYS9lbGYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMb29rIGF0IEZJWCB0b28uCgkqIGNvbmZpZ3VyZS5pbiAodGFyZ2V0X2NwdV9kZWZhdWx0MikgW2V2Nl06IFVzZSBGSVgsIG5vdCBDSVguCgpXZWQgTWF5IDI2IDA5OjUzOjA1IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgogICAgICAgICogZm9sZC1jb25zdC5jIChmb2xkKTogU1RSSVBfTk9QUyB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90Cglzb21ldGhpbmcgaXMgYSBjYW5kaWRhdGUgZm9yIG9wdGltaXplX2JpdF9maWVsZF9jb21wYXJlLgoKV2VkIE1heSAyNiAwMzo1NDozMyAxOTk5ICBNZWxpc3NhIE8nTmVpbGwgPG9uZWlsbEBjcy5zZnUuY2E+CgoJKiBmaXhpbmMvZml4aW5jbC5jOiAoV0lGU0lHTkFMRUQpOiBEZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KCShXVEVSTVNJRywgV0lGRVhJVEVELCBXRVhJVFNUQVRVUywgV0lGU1RPUFBFRCwgV1NUT1BTSUcpOiBMaWtld2lzZS4KCShTX0lSVVNSLCBTX0lXVVNSLCBTX0lYVVNSLCBTX0lSR1JQLCBTX0lXR1JQLCBTX0lYR1JQKTogTGlrZXdpc2UuCgkoU19JUk9USCwgU19JV09USCwgU19JWE9USCwgU19JUldYVSwgU19JUldYRywgU19JUldYTyk6IExpa2V3aXNlLgoKV2VkIE1heSAyNiAwMjoxOTozMSAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCgkqIGFybS5oIChORUVEX1BMVF9HT1QpOiBGaXggbWlzdGFrZSBpbiBsYXN0IGNoYW5nZS4KCShHT1RfUENSRUwpOiBOZXcgbWFjcm8uICBEZWZpbmUgdG8gMSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoJKiBhcm0vZWxmLmggKEdPVF9QQ1JFTCk6IERlZmluZSB0byAwLgoJKiBhcm0uYyAoYXJtX2ZpbmFsaXplX3BpYyk6IFRha2UgaW50byBhY2NvdW50IHRoZSBzZXR0aW5nIG9mCglHT1RfUENSRUwuCgpUdWUgTWF5IDI1IDE0OjA2OjA2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG91dHB1dC5oIChTVFJJUF9OQU1FX0VOQ09ESU5HKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24uCgkqIGR3YXJmMm91dC5jIChBU01fTkFNRV9UT19TVFJJTkcpOiBVc2UgU1RSSVBfTkFNRV9FTkNPRElORy4KCgkqIGZsb3cuYyAobWFya19zZXRfMSk6IERvIG5vdCByZWNvcmQgQkxLbW9kZSBzdG9yZXMgYXMgZGVhZAoJc3RvcmUgZWxpbWluYXRpb24gY2FuZGlkYXRlcy4KCk1vbiBNYXkgMjQgMTQ6MzQ6MzEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEbyBub3QgY2xlYXIgTk9UX0VWRVJZX0lURVJBVElPTiBhdCB0aGUKCWxhc3QgQ09ERV9MQUJFTCBpbiBhIGxvb3AgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IHBhc3NlZCBhIGp1bXAKCXRvIHRoZSB0b3Agb2YgdGhlIGxvb3AuCgpNb24gTWF5IDI0IDAxOjAyOjU4IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBJZ25vcmUgYW55IGVsZW1lbnRzIG9mIFZBUlMgdGhhdAoJYXJlIG5vdCBWQVJfREVDTHMuCgpTdW4gTWF5IDIzIDIwOjMxOjE2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogR3JvdyByZWdfc2luZ2xlX3VzYWdlIGFzIG5lZWRlZC4KClN1biBNYXkgMjMgMTA6MTM6MjAgMTk5OSAgRGF2aWQgTydCcmllbiA8b2JyaWVuQEZyZWVCU0Qub3JnPgoKCSogaTM4Ni9mcmVlYnNkLWVsZi5oIChMSU5LX1NQRUMpOiBDaGFuZ2UgLXN0YXRpYyB0byAtQnN0YXRpYy4KCUFsc28gcmVtb3ZlIGEgdXNlbGVzcyBjb21tZW50LgoKU3VuIE1heSAyMyAxMDowNToyMyAxOTk5ICBKZXJyeSBRdWlubiA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCgkqIHBhLm1kIChuZWdkZjIsbmVnc2YyKTogIFVzZSBmbmVnIGluc3RlYWQgb2YgZnN1YiBvbiBwYSAyLjAuCgpTYXQgTWF5IDIyIDAxOjI3OjQ5IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiBleHByLmggKGxhbmdfZXhwYW5kX2NvbnN0YW50KTogR3VhcmQgd2l0aCAjaWZkZWYgVFJFRV9DT0RFLgoKVGh1IE1heSAyMCAxMDowMDo0MiAxOTk5ICAgU3RlcGhlbiBMIE1vc2hpZXIgIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CgogICAgICAgICAqIE1ha2VmaWxlLmluIChHQ0NfRk9SX1RBUkdFVCk6IEFkZCAtSSQoYnVpbGRfdG9vbGRpcikvaW5jbHVkZS4KCQkJIApUaHUgTWF5IDIwIDA5OjU4OjU3IDE5OTkgIEphbiBIdWJpY2thIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsKTogQWxpZ24gc3RhY2sgc2xvdCBwcm9wZXJ0bHkuCgkoYXNzaWduX291dGVyX3N0YWNrX2xvY2FsKTogTGlrZXdpc2UuCiAKVGh1IE1heSAyMCAxMDozODo0MyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZXhwci5oIChsYW5nX2V4cGFuZF9jb25zdGFudCk6IERlY2xhcmUuCgkqIHRvcGxldi5jIChsYW5nX2V4cGFuZF9jb25zdGFudCk6IERlZmluZSBpdC4KCSogdmFyYXNtLmMgKG91dHB1dF9jb25zdGFudCk6IFVzZSBpdC4KClRodSBNYXkgMjAgMTE6Mjg6NTMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogb3B0YWJzLmMgKGV4cGFuZF9jbXBseGRpdl9zdHJhaWdodCwgZXhwYW5kX2NtcGx4ZGl2X3dpZGUpOgoJQ2hhbmdlIGZ1bmN0aW9uIGRlZmluaXRpb25zIHRvIEsmUiBzdHlsZS4KClRodSBNYXkgMjAgMDg6MTU6MDAgMTk5OSAgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9maXhpbmNsLmMobWFpbik6IHdlIG11c3Qgbm90IGlnbm9yZSBTSUdDTEQgbm93LgoKVGh1IE1heSAyMCAwNzowNjozOSAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAYWNtLm9yZz4KCgkqIGZpeGluYy9NYWtlZmlsZS5pbihnbnUtcmVnZXgubyk6IGFkZCAkKElOQ0xVREVTKSB0byBjb21waWxlIG9wdGlvbnMKCSogZml4aW5jL2ZpeGluY2wuYyh3YWl0X2Zvcl9waWQpOiBLJlItaWZ5IGFyZ3VtZW50cwoJKHNldmVyYWwgcGxhY2VzKTogb21pdCBzdGF0aWMgaW5pdGlhbGl6YXRpb24KCShwcm9jZXNzKTogdXNlIHNpbmdsZSBmZCwgc2luY2Ugb25seSB0aGUgcmVhZCBmZCBpcyB1c2VkCgkqIGZpeGluYy9nbnUtcmVnZXguYzogZGVmaW5lICdjb25zdCcgYXdheSwgaWYgbm90IHN1cHBvcnRlZAoJKiBmaXhpbmMvcHJvY29wZW4uYyhzZXZlcmFsIHBsYWNlcyk6IG9taXQgc3RhdGljIGluaXRpYWxpemF0aW9uCgkqIGZpeGluYy9zZXJ2ZXIuYzogZGVmaW5lICd2b2xpdGlsZScgYXdheSwgaWYgbm90IHN1cHBvcnRlZAoKMTk5OS0wNS0yMCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL2RieGNvZmYuaCAoREJYX09VVFBVVF9NQUlOX1NPVVJDRV9GSUxFX0VORCk6IFVzZQoJYXNtX2ZwcmludGYgYW5kICVMIHRvIGdlbmVyYXRlIHRoZSBsYWJlbCBuYW1lLgoJKiBjb25maWcvZGJ4ZWxmLmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBMaWtld2lzZS4KCShBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogQ29ycmVjdCBnZW5lcmF0aW9uIG9mIGludGVybmFsIGxhYmVscy4KClRodSBNYXkgMjAgMDE6NDA6NTUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSoganVtcC5jIChjYW5fcmV2ZXJzZV9jb21wYXJpc29uX3ApOiBEbyBub3QgYWJvcnQgaWYgdGhlIGNvbXBhcmlzb24KCWluc24gZm9yIGEgY29uZGl0aW9uYWwganVtcCBjYW4gbm90IGJlIGZvdW5kLgoKV2VkIE1heSAxOSAyMzo1ODo1OCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtaXBzLmggKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBEbyBub3QgcGVyZm9ybSBHUCBvcHRpbWl6YXRpb25zCglvbiB2YXJpYWJsZXMgaW4gc3BlY2lmaWMgc2VjdGlvbnMgb3RoZXIgdGhhbiAuc2JzcyBhbmQgLnNkYXRhLgoKVHVlIE1heSAxOCAxMToyMDo0OCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogc3RtdC5jIChleHBhbmRfcmV0dXJuKTogQ2FsbCBzdGFydF9jbGVhbnVwX2RlZmVycmFsIGFuZAoJZW5kX2NsZWFudXBfZGVmZXJyYWwgYXJvdW5kIGNvbmRpdGlvbmFsIGNvZGUuCgpXZWQgTWF5IDE5IDAzOjEwOjA4IDE5OTkgIEJydWNlIEtvcmIgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmMvZml4aW5jbC50cGw6IEF2b2lkIGRlcGVuZGluZyBvbiBBTlNJIEMgZmVhdHVyZXMgZm9yCglmaWxlbmFtZSBsaXN0cy4gIFV0aWxpemVzIG5ldyBBdXRvR2VuIGZ1bmN0aW9uICJrcnN0ciIuCgkqIGZpeGluYy9maXhpbmNsLng6IFJlYnVpbHQuCgpXZWQgTWF5IDE5IDAyOjQ3OjExIDE5OTkgIEphbiBIdWJpY2thICAoaHViaWNrYUBmcmVlc29mdC5jeikKCgkqIGkzODYuYyAob3V0cHV0X2Zsb2F0X2NvbXBhcmUpOiBBdm9pZCBHTlUtQyBleHRlbnNpb25zLgoKV2VkIE1heSAxOSAwMDo1MDoyNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgdmVyc2lvbiB0byBnY2MtMi45NSBwcmVyZWxlYXNlLgoKVHVlIE1heSAxOCAwMzo1MzozNyAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCUltcHJvdmUgb3Blbi1jb2Rpbmcgb2YgY29tcGxleCBkaXZpZGU6CgkqIGZsYWdzLmg6IERlY2xhcmUgbmV3IGZyb250LWVuZC1tYWxsZWFibGUgZmxhZy4KCSogdG9wbGV2LmM6IERlZmluZSBuZXcgZmxhZy4KCSogb3B0YWJzLmMgKGV4cGFuZF9jbXBseGRpdl9zdHJhaWdodCk6IE5ldyBmdW5jdGlvbiB0byBkbyBvcmlnaW5hbAoJb3Blbi1jb2RpbmcuCgkoZXhwYW5kX2NtcGx4ZGl2X3dpZGUpOiBOZXcgZnVuY3Rpb24gdG8gZG8gbmV3IG9wZW4tY29kaW5nLAoJZnJvbSBUb29uIE1vZW5lLCB3aXRoIGNoYW5nZXMgKGNhbGwgdG8gZW1pdF9iYXJyaWVyLCBkcm9wcGluZwoJb2Ygc3B1cmlvdXMgYG9rID0gMTsnLCBwbHVzIHRoZSBvYnZpb3VzIGBicmVhazsnIC0+IGByZXR1cm4gMDsnKS4KCShleHBhbmRfYmlub3ApOiBBIGJpdCBvZiBzcGFjaW5nIGZpeGluZywgd2hpbGUgYXQgaXQuCglVc2UgbmV3IGZ1bmN0aW9ucyBpbnN0ZWFkIG9mIGlubGluaW5nIHRoZSBvcGVuLWNvZGluZyBjb2RlLgoKVHVlIE1heSAxOCAwMDo1MTo0NiAxOTk5ICBLcmlzdGVyIFdhbGZyaWRzc29uIDxjYXRvQGRmLmx0aC5zZT4KCiAgICAgICAgKiBjb25maWd1cmUuaW4gKGFybSotKi1uZXRic2QqKTogVXNlIGNvbGxlY3QyLgogICAgICAgIChpWzM0NTY3XTg2LSotbmV0YnNkKik6IExpa2V3aXNlLgogICAgICAgIChtNjhrKi0qLW5ldGJzZCopOiBMaWtld2lzZS4KICAgICAgICAobnMzMmstKi1uZXRic2QqKTogTGlrZXdpc2UuCiAgICAgICAgKHNwYXJjLSotbmV0YnNkKik6IExpa2V3aXNlLgogICAgICAgICh2YXgtKi1uZXRic2QqKTogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClR1ZSBNYXkgMTggMDA6MjE6MzQgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcHNwZWMuYzogSW5zZXJ0IC1uby1nY2MgaW50byBjb21tYW5kIGxpbmUgdW5sZXNzIC1nY2Mgd2FzCglnaXZlbiBieSB1c2VyLgoJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBEZWZpbmUgX19HTlVDX18gYW5kCglfX0dOVUNfTUlOT1JfXyBvbmx5IGlmIC1uby1nY2Mgd2FzIG5vdCBnaXZlbi4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoJKiBjcHAudGV4aTogRG9jdW1lbnQgLXggYW5kIC1zdGQgb3B0aW9uczsgZXhwbGFpbiB0aGF0IC1sYW5nCglpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgTWlub3IgcmVsYXRlZCBjb3JyZWN0aW9ucy4KCk1vbiBNYXkgMTcgMjM6NTY6MzkgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhwcm90byk6IFBhc3MgbG9jYXRpb24gb2YgbWtpbnN0YWxsZGlycyB0bwoJZml4cHJvdG8uCgkqIGZpeHByb3RvOiBBdm9pZCB1bnBvcnRhYmxlIGNvbnN0cnVjdHMgc3VjaCBhcyBgYmFzZW5hbWUnIGFuZAoJYG1rZGlyIC1wJy4gIFVzZSBta2luc3RhbGxkaXJzIGZyb20gdGhlIGVudmlyb25tZW50IGlmIGBta2RpciAtcCcKCWZhaWxzLgoKCSogZml4aW5jL2ZpeGluY2wuYzogUmVtb3ZlICNlcnJvciwgaXQgaXMgbm90IHBvcnRhYmxlLgoKTW9uIE1heSAxNyAyMzo1MDo0MSAxOTk5ICBNYXJjIEVzcGllIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBjb2xsZWN0Mi5jIChtYWluKTogIEZpeCB0eXBvIGluIENPTExFQ1QyX0hPU1RfSU5JVElBTElaQVRJT04uCgpNb24gTWF5IDE3IDE5OjQ1OjQxIDE5OTkgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgoKCSogZml4aW5jL2ZpeGluY2wuYyAocHJvY2Vzcyk6IFdhaXQgZm9yIGNoaWxkcmVuIGZyb20gY2hhaW5fb3BlbigpCgl0byBhdm9pZCBjcmVhdGluZyB6b21iaWVzLgoKCSogZml4aW5jL2luY2xoYWNrLnRwbDogUmVtb3ZlZCBuby1vcCBwaXBlLgoKCSogZml4aW5jL2luY2xoYWNrLnNoIGZpeGluYy9maXhpbmNsLnNoOiByZWdlbmVyYXRlCgpNb24gTWF5IDE3IDA3OjIzOjM0IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmRlZiAoVFlQRV9OT05DT1BJRURfUEFSVFMpOiBSZXZpc2UgZG9jdW1lbnRhdGlvbiB0byBtYXRjaAogICAgICAgIHJlYWxpdHkuCiAgICAgICAgKiBleHByLmMgKGluaXRfbm9uY29waWVkX3BhcnRzKTogRG9uJ3QgZ2VuZXJhdGUgaW5pdGlhbGl6ZXJzIGZvcgogICAgICAgIHBhcnRzIHRoYXQgZG9uJ3QgbmVlZCB0aGVtLgoKTW9uIE1heSAxNyAwMjo1NjozNSBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBPY3QgMzEgMDU6MDg6MzQgQ0VUIDE5OTggSmFuIEh1Ymlja2EgIChodWJpY2thQGZyZWVzb2Z0LmN6KQoKCSogcmVnLXN0YWNrLmM6IERvIG5vdCBlbWl0IHBvcCBpbnNucyBhZnRlciBjYzAgc2V0dGVyLgoJKGVtaXRfcG9wX2luc24pOiBEbyBub3QgZW1pdCBpbnNuIGluIGNhc2UgV0hFTiBpcyBOVUxMLgoJKGNvbXBhcmVfZm9yX3N0YWNrX3JlZyk6IFVwZGF0ZSBSRUdfREVBRCBub3RlIGFuZCAKCWRvIG5vdCBlbWl0IHB1c2ggaW5zbi4KCgkqIGkzODYuYzogKG91dHB1dF9mbG9hdF9jb21wYXJlKTogSGFuZGxlIG5ldyBSRUdfREVBRCBub3Rlcy4KCk1vbiBNYXkgMTcgMDE6NTc6MzcgMTk5OSAgRGF2aWQgRGFuZXkgPGRhbmV5QGlidy5jb20ubmk+CgoJKiBpMzg2L3NvbDIuaCAoTElOS19TUEVDKTogRG8gbm90IHBhc3MgIi16IHRleHQiIHRvIHRoZSBsaW5rZXIKCWlmIC1taW1wdXJlLXRleHQuCgoxOTk5LTA1LTE3ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBtNjhrLmMgKHN0YW5kYXJkXzY4ODgxX2NvbnN0YW50X3ApOiBEb24ndCBhY2NlcHQgLTAuMCBhcyB2YWxpZAoJNjg4ODEgY29uc3RhbnQuCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IFdoZW4gY29udmVydGluZyBhIG9uZS1iaXQKCWNvbXBhcmlzb24gZG9uJ3Qgc2lnbiBleHRlbmQgdGhlIGNvbnN0YW50LgoKCSogY3NlLmMgKGNzZV9pbnNuKTogQ29weSBTUkNfQ09OU1QgYmVmb3JlIHB1dHRpbmcgaXQgaW4gdGhlCglSRUdfRVFVQUwgbm90ZS4KCjE5OTktMDUtMTcgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIHJzNjAwMC92eHBwYy5oIChDUFBfU1BFQyk6IEZpeCBzdXBwb3J0IGZvciB2YXJhcmcgZnVuY3Rpb25zLgoKU2F0IE1heSAxNSAxNDoyMjo0MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaGFja3NoZWxsLnRwbDogRml4IG1pcy1hcHBsaWVkIHBhdGNoLgoJKiBmaXhpbmMvaW5jbGhhY2suc2g6IFJlZ2VuZXJhdGVkLgoKVGh1IE1heSAxMyAyMTowNTo1NSAxOTk5ICBNYXJrIEtldHRlbmlzICA8a2V0dGVuaXNAZ251Lm9yZz4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogQWRkIHRoZSBIdXJkICgqLSotZ251KikgdG8gdGhlIGxpc3Qgb2YKCXRhcmdldHMgdGhhdCBkbyBub3QgbmVlZCBhbnkgZml4ZXMuCgpTYXQgTWF5IDE1IDE0OjEyOjM4IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChzZXRfbG9fc3VtKzIpOiBOZXcgc3BsaXR0ZXIgdG8gbG9hZCBsYXJnZQoJY29uc3RfaW50cy4KClNhdCBNYXkgMTUgMTQ6MDk6MDggMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKGRlY3JlbWVudF9hbmRfYnJhbmNoX29uX2NvdW50KTogRGlzYWJsZWQuCgkoZG9sb29wX2JlZ2luLCBkb2xvb3BfZW5kKTogTmV3IHBhdHRlcm5zLgoJKCpycHRiX2luaXQpOiBBZGRlZCBleHRyYSBvcGVyYW5kcy4KCkZyaSBNYXkgMTQgMjE6MzE6MzYgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCp1bXVscWkzX2hpZ2hwYXJ0X2Nsb2JiZXIpOiBGaXggb3BlcmFuZCAyCiAJY29uc3RyYWludHMgb3JkZXIuCgoxOTk5LTA1LTE0ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGZpeGluYy9maXhpbmMueDg2LWxpbnV4LWdudSAoRkRfWkVSTyk6IEZpeCBvcGVyYW5kIG51bWJlcnMgaW4KCWFzbSBpbnB1dCBvcGVyYW5kcy4KClRodSBNYXkgMTMgMTU6MzQ6MTggMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKG1hc2tfY29uc3RhbnQpOiBEZWxldGUuCgkobWFza19vcGVyYW5kKTogTW92ZSBtYXNrX2NvbnN0YW50KCkgYm9keSB0byBoZXJlLgoJKiByczYwMDAuaCAobWFza19jb25zdGFudCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCSogcnM2MDAwLm1kIChuYWJzZGkyKTogUmV2ZXJzZSBzdWJ0cmFjdGlvbiBpbiBzcGxpdHRlci4KClRodSBNYXkgMTMgMDI6MjU6MDEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3BwLnRleGk6IEZpeCBzb21lIHR5cG9zLgoKVGh1IE1heSAxMyAwMTo0OTo1NSAxOTk5ICBHcmFoYW0gU3RvdHQgPEdyYWhhbVNAUkNQLmNvLnVrPgoKCSogbG9vcC5jIChtYXliZV9lbGltaW5hdGVfYml2KTogQ2hlY2sgcmVnbm8gYWdhaW5zdAoJbWF4X3JlZ19iZWZvcmVfbG9vcC4KCgkqIGkzODYuYyAobWVtb3J5X2FkZHJlc3NfaW5mbyk6IENvcnJlY3QgdGhlIHNjYWxlCglmYWN0b3IgdGVzdC4KClRodSBNYXkgMTMgMDE6MzE6MTkgMTk5OSAgTmljayBCdXJyZXR0ICA8bmljay5idXJyZXR0QGJ0aW50ZXJuZXQuY29tPgoKCSogYXJtLm1kIChub3ApOiBCYWNrb3V0IEFwciAyNyBjaGFuZ2UuIEVuc3VyZSBSRUdJU1RFUl9QUkVGSVggaXMKCWFwcGxpZWQgdG8gZWFjaCByZWdpc3Rlci4KCSogYW9mLmggKEFTTV9GSUxFX1NUQVJUKTogRGVmaW5lIHJlZ2lzdGVyIGByMCcuCgoxOTk5LTA1LTEyIDIwOjIyIC0wNDAwICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogTWFrZSAtLWVuYWJsZS1jcHAgYW5kIC0td2l0aC1jcHAtaW5zdGFsbC1kaXIKCWRvY3VtZW50ZWQgb3B0aW9ucy4gIEVuYWJsZSB0aGUgY3BwIGRyaXZlciBieSBkZWZhdWx0LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpXZWQgTWF5IDEyIDE4OjA4OjQ4IDE5OTkgIERhdmlkIEVkZWxzb2huICAgICA8ZWRlbHNvaG5AZ251Lm9yZz4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKICAgICAgICAqIHJzNjAwMC5jIChwcmludF9vcGVyYW5kKSBbd106IENhbGN1bGF0ZSBzaWduZWQgY29uc3RhbnQgbW9yZSBjbGVhcmx5LgogICAgICAgIChyczYwMDBfYWxsb2NhdGVfc3RhY2tfc3BhY2UpOiBQcmludCBhcyBoZXhhZGVjaW1hbCB2YWx1ZS4KICAgICAgICAqIHJzNjAwMC5oIChDT05TVF9PS19GT1JfTEVUVEVSX1ApOiAnTCcgY2hlY2tzIGZvciBhIHNpZ25lZCwKICAgICAgICAxNi1iaXQgc2hpZnRlZCBjb25zdGFudC4gIEZpeCB0eXBvIGZvciAnUCcuCgkoRVhUUkFfQ09OU1RBUklOVCk6ICdUJyBjaGVja3MgZm9yIGEgMzItYml0IG1hc2sgb3BlcmFuZC4KCSogcnM2MDAwLm1kIChtb3ZzaSwgYWRkc2kzX2ludGVybmFsMSwgbW92ZGksIGFkZGRpM19pbnRlcm5hbDEpOgoJVXNlICdMJyBmb3Igc2hpZnRlZCBjb25zdGFudC4KCShhbmRkaTNfaW50ZXJuYWwzKTogRml4IHR5cG8uCgkoMzItYml0IG1hc2sgcGF0dGVybnMpOiBVc2UgJ1QnLgoKV2VkIE1heSAxMiAwNzozMDozMSAxOTk5ICBCcnVjZSBLb3JiIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL2ZpeGluY2wuYyhxdW90ZWRfZmlsZV9leGlzdHMpOiBuZXcgcHJvY2VkdXJlIHRvIGVuc3VyZSB0aGF0CglhIGZpbGUgZXhpc3RzIGJlZm9yZSB0cnlpbmcgdG8gY29weSBpdCBpbnRvIHRoZSBkZXN0aW5hdGlvbgoJKGV4dHJhY3RfcXVvdGVkX2ZpbGVzKTogdXNlIHRoYXQgcm91dGluZS4KCldlZCBNYXkgMTIgMDc6Mjc6MzEgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCglBbGxvdyBmcm9udCBlbmQgKGxpa2UgZzc3J3MpIHRvIG92ZXJyaWRlIG1haW50ZW5hbmNlIG9mIGVycm5vOgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogQm90aGVyIHdpdGggZXJybm8gb25seSBpZgoJZmxhZ19lcnJub19tYXRoLgoJKiBmbGFncy5oOiBEZWNsYXJlIGZsYWdfZXJybm9fbWF0aC4KCSogdG9wbGV2LmM6IERlZmluZSBmbGFnX2Vycm5vX21hdGguCgpUdWUgTWF5IDExIDIzOjU1OjQ5IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeHByb3RvOiBDaGFuZ2UgIm1rZGlyIiBjYWxscyB0byAibWtkaXIgLXAiCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChpb19kZWZfcXVvdGVzKTogQ29uc2lzdGVudGx5IGFsbG93IG11bHRpcGxlCgl3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYmV0d2VlbiB0aGUgImRlZmluZSIgYW5kIHRoZSBuYW1lIG9mIHRoZSBtYWNyby4KCSogZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2luY2xoYWNrLnNoOiBSZWJ1aWx0LgoKVHVlIE1heSAxMSAyMDo0NjozNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfZXhwYW5kX2Jsb2NrX21vdmUpOiBIYW5kbGUgVEltb2RlIHJlZ2lzdGVycwoJdXNlZCB3aXRoIEFERFJFU1NPRi4KCShhbHBoYV9leHBhbmRfYmxvY2tfY2xlYXIpOiBIYW5kbGUgQUREUkVTU09GIHNwZWNpYWxseS4KCjE5OTktMDUtMTEgIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogZml4aW5jL2ZpeGluYy54ODYtbGludXgtZ251IChGRF9aRVJPKTogUmVtb3ZlIHVubmVjY2Vzc2FyeQoJbWVtb3J5IG91dHB1dCBvcGVyYW5kIHdoaWNoIGlycml0YXRlcyBnY2MuCgpUdWUgTWF5IDExIDExOjQ1OjE2IDE5OTkgIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IEFkZCAtTUQsIC1NTUQsIC1NIGFuZCAtTU0gZm9yCgljcHBsaWItZW5hYmxlZCBjb21waWxlcnMuCgpUdWUgTWF5IDExIDExOjM0OjU2IDE5OTkgIFZsYWRpbWlyIE1ha2Fyb3YgIDx2bWFrYXJvdkB0b2Z1LnRvLmN5Z251cy5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQWRkIHBhcmVudGhlc2VzCglhcm91bmQgJiYuCgpNb24gTWF5IDEwIDEzOjUxOjI0IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiB0bS50ZXhpIChGVU5DVElPTl9BUkcpOiBTdGFjayBlbGVtZW50IG9mIFBBUkFMTEVMIG11c3QgY29tZQoJZmlyc3QuCgpUdWUgTWF5IDExIDAxOjMyOjAxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeGluYy9pbmNsaGFjay5kZWYgKHN1bl9hdXRoX3Byb3RvKTogQXBwbHkgdG8gYWxsIHRhcmdldHMuCgkoc3lzel9zdGRsaWJfZm9yX3N1bik6IFNpbWlsYXJseS4KCSogZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2luY2xoYWNrLnNoOiBSZWJ1aWx0LgoKTW9uIE1heSAxMCAyMDozNDoxMCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9lbGYuaCAoVU5JUVVFX1NFQ1RJT05fUCk6IFVuZGVmLgoJKiBjb25maWcvbWlwcy9lbGY2NC5oIChVTklRVUVfU0VDVElPTl9QKTogVW5kZWYuCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoVU5JUVVFX1NFQ1RJT05fUCk6IERlZmluZSB0byAwLgoKMTk5OS0wNS0xMCAxODoyMSAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBmaWxlcy5jIChpbml0aWFsaXplX2lucHV0X2J1ZmZlcik6IE5ldyBmdW5jdGlvbi4KCShmaW5jbHVkZSk6IENhbGwgaXQsIGlmIHBmaWxlLT5pbnB1dF9idWZmZXIgaXMgTlVMTC4gIEFjY2VwdAoJYW55IGNoYXJhY3RlciBkZXZpY2UgYXMgYW4gaW5wdXQgZmlsZS4KCShyZWFkX2FuZF9wcmVzY2FuKTogVXNlIHBmaWxlLT5pbnB1dF9idWZmZXIgYW5kCglwZmlsZS0+aW5wdXRfc3BlY2Nhc2UuCgkqIGNwcGluaXQuYyAoY3BwX2NsZWFudXApOiBGcmVlIHBmaWxlLT5pbnB1dF9idWZmZXIgYW5kCglwZmlsZS0+aW5wdXRfc3BlY2Nhc2UuCgkqIGNwcGxpYi5oIChjcHBfcmVhZGVyKTogQWRkIGlucHV0X2J1ZmZlciwgaW5wdXRfc3BlY2Nhc2UsIGFuZAoJaW5wdXRfYnVmZmVyX2xlbiBtZW1iZXJzLiAgVXNlIG1lbWNweSBpbiBDUFBfUFVUU19RLgoKCSogY3BwbWFpbi5jOiBCdWZmZXIgb3V0cHV0IGluIHRoZSB0b2tlbl9idWZmZXI7IHRocm90dGxlCgludW1iZXIgb2YgY2FsbHMgdG8gZndyaXRlOyBjaGVjayBmb3IgZXJyb3JzIGZyb20gZndyaXRlLgoKMTk5OS0wNS0xMCAxODoyMSAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcHNwZWMuYzogVHJlYXQgdHdvIG5vbi1vcHRpb24gYXJndW1lbnRzIGFzIGlucHV0IGFuZAoJb3V0cHV0IGZpbGUuICBUaHJlZSBvciBtb3JlIG5vbi1vcHRpb24gYXJncyBpcyBhbiBlcnJvci4KCUNsZWFuIHVwLgoJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBQYXNzIC0kIHRvIHRoZSBwcmVwcm9jZXNzb3IuCgkqIG9iamMvbGFuZy1zcGVjcy5oOiBMaWtld2lzZS4KCk1vbiBNYXkgMTAgMTI6NTk6MjAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogb3B0YWJzLmMgKGVtaXRfY21wX2FuZF9qdW1wX2luc25zKTogSGFuZGxlIHRoZSBjYXNlIHdoZXJlIGJvdGgKCW9wZXJhbmRzIHRvIHRoZSBjb21wYXJpc29uIGFyZSBjb25zdGFudHMuCgpNb24gTWF5IDEwIDA3OjI4OjEwIDE5OTkgIEJydWNlIEtvcmIgPGF1dG9nZW5AYXV0b2dlbi5mcmVlc2VydmVycy5jb20+CgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmKGFybV9ub3Jjcm9mdF9oaW50KTogY2hlY2sgYmVmb3JlIGZpeGluZwoJKG5vX2RvdWJsZV9zbGFzaCk6IHBvcnRhYmlsaXR5CgkobWF0aF9leGNlcHRpb24pOiBhZGRlZCByZW1pbmRlciBjb21tZW50CgpNb24gTWF5IDEwIDAxOjI4OjEwIDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJRnJvbSBGcmkgTWF5IDcgIDk6MzE6NDEgMTk5OSBEb25uIFRlcnJ5IChkb25uQGludGVyaXguY29tKToKCSogdmFyYXNtLmMgKG1hcmtfY29uc3RhbnRfcG9vbCk6IEFkZCBzb21lIHRyYW5zaXRpdmUgY2xvc3VyZS4KClN1biBNYXkgIDkgMjI6NTE6MDQgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCglGaXggZ2NjLmRnLzk5MDUwNi0wLmM6CgkqIGMtdHlwZWNrLmMgKHJlcXVpcmVfY29tcGxldGVfdHlwZSk6IEhhbmRsZSBFUlJPUl9NQVJLIGlucHV0LgoKU3VuIE1heSAgOSAxMzoxOToxMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY3NlLmMgKGNwcm9wX2luc24pOiBEbyBub3QgdHJ5IHRvIHNpbXBsaWZ5IGEgc2ltcGxlIGp1bXAuCgpTdW4gTWF5ICA5IDExOjEyOjE5IDE5OTkgIFBoaWxpcCBCbHVuZGVsbCA8YnBAbmV4dXMuY28udWs+CgoJKiBjb25maWcvYXJtL2FybS5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogQWRkIChQTFQpIHRvIGJyYW5jaCBpZgoJbmVjZXNzYXJ5LiAgUmVwb3J0ZWQgYnkgamltQGZlZGVyYXRlZC5jb20uCgpTYXQgTWF5ICA4IDIzOjA1OjM1IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmggKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IE91dHB1dCAiJXIwIiwgbm90ICJyMCIgZm9yIHRoZQoJYmFzZSByZWdpc3RlciBpbiBhbiBhYnNvbHV0ZSBtZW1vcnkgYWRkcmVzcy4KCSogcGEubWQgKGNvbmRpdGlvbmFsIG1vdmVzKTogQXZvaWQgdXNpbmcgaW1tZWRpYXRlIHplcm8gZm9yCglyZWdpc3RlciB6ZXJvLgoKU2F0IE1heSAgOCAwNjoyMzoyMSAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCglCYXNlZCBvbiBwYXRjaCBieSBTY290dCBCYW1icm91Z2g6CgkqIGNvbmZpZy9hcm0vYXJtLmggKE5FRURfUExUX0dPVCk6IE5ldyBtYWNyby4gIFNldCB0byAwIGlmIG5vdAoJYWxyZWFkeSBkZWZpbmVkLgoJKiBjb25maWcvYXJtL2VsZi5oIChORUVEX1BMVF9HT1QpOiBEZWZpbmUgdG8gZmxhZ19waWMuCgkqIGNvbmZpZy9hcm0vYXJtLm1kIChjYWxsX3N5bWJvbCwgY2FsbF92YWx1ZV9zeW1ib2wgZXQgYWwuKTogSWYKCU5FRURfUExUX0dPVCBpcyB0cnVlLCBhZGQgZXhwbGljaXQgIihQTFQpIiB0byBnZW5lcmF0ZWQgYnJhbmNoZXMuCgkqIGNvbmZpZy9hcm0vYXJtLmMgKG91dHB1dF9mdW5jX2VwaWxvZ3VlLAoJb3V0cHV0X3JldHVybl9pbnN0cnVjdGlvbik6IExpa2V3aXNlIGZvciBjYWxscyB0byBhYm9ydC4KClNhdCBNYXkgIDggMDE6NTc6NTggMTk5OSAgRG9ubiBUZXJyeSAoZG9ubkBpbnRlcml4LmNvbSkKCgkqIGNhbGxzLmMgKHJ0eF9mb3JfZnVuY3Rpb25fY2FsbCk6IEV4dGVuZCBmdW5jdGlvbiBwb2ludGVyIGJlaW5nCglwYXNzZWQgdG8gY2hrcl9jaGVja19leGVjX2xpYmZ1bmMsIGlmIG5lZWRlZC4KClNhdCBNYXkgIDggMDE6NTE6NTAgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogZ2luY2x1ZGUvc3RkYXJnLmggKF9fdmFfcm91bmRlZF9zaXplKTogVXNlIGxvbmcgdHlwZSBmb3IKCXJvdW5kaW5nIG9uIEFJWC4KCSogZ2luY2x1ZGUvdmFyYXJncy5oOiBMaWtld2lzZS4KClNhdCBNYXkgIDggMDE6NDc6MjAgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogaW52b2tlLnRleGk6IFJlbW92ZSBkdXBsaWNhdGVzIGluIHRoZSBkZXNjcmlwdGlvbiBvZiAtZAoJbGV0dGVycy4gIEZpeCB1c2Ugb2YgQGl0ZW0gdnMuIEBpdGVteC4KClNhdCBNYXkgIDggMDE6NDM6MDIgMTk5OSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogcnM2MDAwLmggKFJTNjAwMF9WQVJBUkdTX09GRlNFVCk6IERpZSBkaWUgZGllLgoJKENVTVVMQVRJVkVfQVJHUyk6IFJlbW92ZSB2YXJhcmdzX29mZnNldDsgdXBkYXRlIGNvbW1lbnRhcnkuCgkqIHJzNjAwMC5jIChzZXR1cF9pbmNvbWluZ192YXJhcmdzKTogRml4IHR5cG8gbGFzdCBjaGFuZ2UuCgkoaW5pdF9jdW11bGF0aXZlX2FyZ3MpOiBSZW1vdmUgdmFyYXJnc19vZmZzZXQgcmVmZXJlbmNlcy4KCgkqIHJzNjAwMC9saW51eC5oIChOT19JTVBMSUNJVF9FWFRFUk5fQyk6IERlZmluZS4KCShNRF9FWEVDX1BSRUZJWCwgTURfU1RBUlRGSUxFX1BSRUZJWCk6IFVuZGVmaW5lLgoKU2F0IE1heSAgOCAwMTozNDoxOSAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiByZWxvYWQxLmMgKGdlbl9tb2RlX2ludCk6IE5ldyBmdW5jdGlvbi4KCShyZWxvYWRfY3NlX21vdmUyYWRkKTogVXNlIGl0IHRvIGdlbmVyYXRlIHRoZSBuZXcgY29uc3RhbnRzLgoKU2F0IE1heSAgOCAwMToyNTowOSAxOTk5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50KTogRG8gbm90aGluZyBpZiAtZnN5bnRheC1vbmx5LgoKRnJpIE1heSAgNyAxOToxMDoxNSAxOTk5ICBWbGFkaW1pciBNYWthcm92ICA8dm1ha2Fyb3ZAdG9mdS50by5jeWdudXMuY29tPgoKCSogc3BhcmMuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogUHJvaGliaXQgUkVHK1JFRyBhZGRyZXNzaW5nCiAJZm9yIFRGbW9kZSB3aGVuIHRoZXJlIGFyZSBubyBpbnN0cnVjdGlvbnMgd2hpY2ggYWNjZXB0IFJFRytSRUcKIAlpbnN0cnVjdGlvbnMuCgpGcmkgTWF5ICA3IDEyOjM4OjU0IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG1pcHMvZWxmNjQuaCAoTUFLRV9ERUNMX09ORV9PTkxZLCBVTklRVUVfU0VDVElPTl9QKTogRGVmaW5lLgoJKiBtaXBzL21pcHMuYyAobWlwc19zZWxlY3RfcnR4X3NlY3Rpb24pOiBXaGVuIFRBUkdFVF9NSVBTMTYsIHVzZQoJZnVuY3Rpb25fc2VjdGlvbiBpbnN0ZWFkIG9mIHRleHRfc2VjdGlvbi4KCSogbWlwcy9taXBzLmggKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBBZGQgY2hlY2sgZm9yIFVOSVFVRV9TRUNUSU9OX1AKCWluIFRBUkdFVF9NSVBTMTYgU1RSSU5HX0NTVCBoYW5kbGluZy4KCkZyaSBNYXkgIDcgMDk6NTQ6MTEgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCglQYXRjaCBmcm9tOiBOaWNrIEJ1cnJldHQgIDxuaWNrLmJ1cnJldHRAYnRpbnRlcm5ldC5jb20+CgoJKiBhcm0uYyAoYXJtX3Bva2VfZnVuY3Rpb25fbmFtZSk6IE5ldyBmdW5jdGlvbiB0byBpbXBsZW1lbnQKCS1tcG9rZS1mdW5jdGlvbi1uYW1lLgoJKiBhb2YuaCAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IENhbGwgaXQuCgkqIGFvdXQuaCAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IExpa2V3aXNlLgoJKiBlbGYuaCAoQVNNX0RFQ0xBUkVfRlVOQ1RJT05fTkFNRSk6IExpa2V3aXNlLgoJKiBhcm0uaDogUHJvdG90eXBlIGl0LgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBgbm8tcG9rZS1mdW5jdGlvbi1uYW1lJy4KCkZyaSBNYXkgIDcgMTQ6MTk6MzEgMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBmaXhpbmMvc2VydmVyLmMgKGxvYWRfZGF0YSk6IENhc3QgdGV4dF9zaXplIHRvIGxvbmcsIGFkYXB0Cglmb3JtYXQuCgkqIGZpeGluYy9zZXJ2ZXIuYyAocmVhZF9waXBlX3RpbWVvdXQpOiBEZWNsYXJlIHZvbGF0aWxlLCBtb2RpZmllZAoJaW4gc2lnbmFsIGhhbmRsZXIuCgkoc2lnX2hhbmRsZXIpOiBBZGQgZGVidWcgY29kZS4KCSogZml4aW5jL3NlcnZlci5jIChydW5fc2hlbGwpOiBEb24ndCBcLWVzY2FwZSBjZCwgaXQgYnJlYWtzIHRoZQoJVWx0cml4IFY0LjMgL2Jpbi9zaC4KCSogZml4aW5jL3NlcnZlci5jIChkZWZfYXJncyk6IFVzZSBzdGF0aWMgaW5zdGVhZCBvZiBTVEFUSUMgdG8KCWF2b2lkIHJlZGVmaW5pdGlvbiBlcnJvciBmcm9tIGxpbmtlciBpZmYgREVCVUcuCgoJKiBmaXhpbmMvaGFja3NoZWxsLnRwbDogRG9uJ3Qgc3RyaXAgdHJhaWxpbmcgZGlyZWN0b3J5IGZyb20KCURFU1RESVIgLSB0aGF0IGlzIGFscmVhZHkgZG9uZQoKCSogZml4aW5jL2ZpeGluY2wuYyAocnVuX2NvbXBpbGVzKTogZml4IG1lbW9yeSBsZWFrCgpUaHUgTWF5ICA2IDIwOjM0OjAwIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiByZXNvdXJjZS5jIChtYXJrX3JlZmVyZW5jZWRfcmVzb3VyY2VzKTogTWFrZSB2b2xhdGlsCgltb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuCgkobWFya19zZXRfcmVzb3VyY2VzKTogTGlrZXdpc2UuCgpUaHUgTWF5ICA2IDIwOjAyOjMzIDE5OTkgIEZyZWQgRmlzaCAgPGZuZkBiZS5jb20+CgoJKiByczYwMDAveG0tYmVvcy5oIChIQVZFX1ZQUklOVEYpOiBEb24ndCByZWRlZmluZSBpZiBhbHJlYWR5IGRlZmluZWQuCgkoSEFWRV9QVVRFTlYsIEhBVkVfQVRFWElULCBIQVZFX1JFTkFNRSk6IExpa2V3aXNlLgoKV2VkIE1heSAgNSAyMDoyODozMiAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbnN0YWxsLnRleGkgKEhlYWRlciBEaXJzKTogcy9HUExVUy9HUExVU1BMVVMvLgoKV2VkIE1heSAgNSAyMzo0NDoxNSAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBEb24ndCBjb3B5IFZUT1Agbm90ZXMgZnJvbSBjb3B5X25vdGVzX2Zyb20uCgpXZWQgTWF5ICA1IDE2OjI2OjEzIDE5OTkgIFZsYWRpbWlyIE1ha2Fyb3YgIDx2bWFrYXJvdkB0b2Z1LnRvLmN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzKTogUmVuYW1lIGludG8KIAlwdXJnZV9iaXRmaWVsZF9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzLgoJKHB1cmdlX2FkZHJlc3NvZl9yZXBsYWNlbWVudHMpOiBOZXcgdmFyaWFibGUuCgkocHVyZ2VfYWRkcmVzc29mXzEpOiBBZGQgY29kZSBmb3IgY2hhbmdpbmcgYWRkcmVzc29mIGluIG5vdGVzIGZvcgogCWZpZWxkIHZhbHVlcyB3aGljaCBhcmUgZXh0cmFjdGVkIGJ5IHVzYWdlIE1FTSB3aXRoIG5hcnJvd2VyIG1vZGUuCgkocHVyZ2VfYWRkcmVzc29mKTogSW5pdGlhbGl6ZSBwdXJnZV9iaXRmaWVsZF9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzLgoKV2VkIE1heSAgNSAwNzo0MDowMiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCVBhdGNoIGZyb206IE5pY2sgQnVycmV0dCAgPG5pY2suYnVycmV0dEBidGludGVybmV0LmNvbT4KCSogY29uZmlnL2FybS9hcm0uaCAoQVJNX01DT1VOVF9OQU1FKTogRGVmaW5lLgoJKEZVTkNUSU9OX1BST0ZJTEVSKTogUmVtb3ZlIGFzc2VtYmxlciBkaWFsZWN0IGRlcGVuZGVuY3kgYW5kIHVzZQoJQVJNX01DT1VOVF9OQU1FLgoJKFRSQU1QT0xJTkVfVEVNUExBVEUpOiBSZW1vdmUgYXNzZW1ibGVyIGRpYWxlY3QgZGVwZW5kZW5jeS4KCgkqIGNvbmZpZy9hcm0vYW9mLmggKEFSTV9NQ09VTlRfTkFNRSk6IERlZmluZS4KCjE5OTktMDUtMDUgMDk6NTggLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogRml4IGJyYWNlIG5lc3RpbmcgYnVnLgoJKiBvYmpjL2xhbmctc3BlY3MuaDogVXNlICVpLCBub3QgJWcubWksIGZvciB0aGUgaW5wdXQgZmlsZQoJd2hlbiBwcm9jZXNzaW5nIGFuIC5taSBmaWxlLgoKVHVlIE1heSAgNCAxMzoxNzo1NSAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogcmVzb3VyY2UuYyAobWFya19zZXRfcmVzb3VyY2VzKTogSGFuZGxlIFVOU1BFQ19WT0xBVElMRSwKCUFTTV9JTlBVVCwgVFJBUF9JRiwgYW5kIEFTTV9PUEVSQU5EUyBqdXN0IGxpa2UgaW4KCW1hcmtfcmVmZXJlbmNlZF9yZXNvdXJjZXMuCgpNb24gTWF5ICAzIDIyOjM4OjQxIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC9haXg0My5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IENoYW5nZSBub24tUG93ZXJQQwoJYW5kIEFJWDY0IGNvbWJpbmF0aW9uIHRvIHdhcm5pbmcuICBBZGQgd2FybmluZyBmb3IgZGlzYWJsaW5nCglQb3dlclBDNjQgc3VwcG9ydCB3aGVuIHVzaW5nIDY0LWJpdCBtb2RlLgoJKExJQl9TUEVDKTogRG8gbm90IGxpbmsgd2l0aCBsaWJnLmEgaW4gNjQtYml0IG1vZGUuCgkoTElOS19TUEVDKTogRG8gbm90IGV4cG9ydCBsaWJnLmV4cCBzeW1ib2xzIGluIDY0LWJpdCBtb2RlLgoJKiByczYwMDAvcnM2MDAwLmggKE1ZX0lTQ09GRik6IFRyZWF0IGltcG9ydC9leHBvcnQgZmlsZXMgYXMgdmFsaWQKCVhDT0ZGIGZpbGVzLgoJKHJlYWRfb25seV9kYXRhX3NlY3Rpb24sIHByaXZhdGVfZGF0YV9zZWN0aW9uLAoJcmVhZF9vbmx5X3ByaXZhdGVfZGF0YV9zZWN0aW9uKTogQWx3YXlzIGFsaWduIENTRUNUcyB0byBkb3VibGV3b3JkCglib3VuZGFyeSByZWdhcmRsZXNzIG9mIG1vZGUuCgkoVEVYVF9TRUNUSU9OX0FTTV9PUCk6IEFsaWduIHRleHQgQ1NFQ1Qgb24gZG91Ymxld29yZCBib3VuZGFyeSBpbgoJNjQtYml0IG1vZGUuCgkoREFUQV9TRUNUSU9OX0FTTV9PUCk6IEFsd2F5cyBhbGlnbiBDU0VDVCB0byBkb3VibGV3b3JkIGJvdW5kYXJ5LgoJKEFTTV9PVVRQVVRfTE9DQUwpOiBVc2Ugcm91bmRlZCBzaXplIGluIDY0LWJpdCBtb2RlIHRvCgltYWludGFpbiBkb3VibHdvcmQgYWxpZ25tZW50LgoKTW9uIE1heSAgMyAxNDo0NToyMyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChidHN0IGluc25zKTogYnRzdCBkb2VzIG5vdCBsZWF2ZSBjYzAgaW4gYSB1c2VhYmxlCglzdGF0ZSBmb3IgcmVkdW5kYW50IHRzdCBlbGltaW5hdGluby4KCSogbW4xMDMwMC5tZCAoYnRzdCBpbnNucyk6IExpa2V3aXNlLgoKTW9uIE1heSAgMyAxNjoxNDozMiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBtaXBzLmggKFBtb2RlKTogUmV2ZXJ0IE9jdCAxNHRoIGNoYW5nZSB3aGljaCBhZGRlZCBhIGNhc3QuCgpTdW4gTWF5ICAyIDE0OjAyOjIxIDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQGNvZGVzb3VyY2VyeS5jb20+CgoJKiB0cmVlLmggKHN0cnVjdCB0cmVlX2RlY2wpOiBBZGQgY29tZGF0X2ZsYWcuCgkoREVDTF9DT01EQVQpOiBEZWZpbmUgaXQuCgkqIHRvcGxldi5jICh3cmFwdXBfZ2xvYmFsX2RlY2xhcmF0aW9ucyk6IERvbid0IG91dHB1dCBhCglERUNMX0NPTURBVCBmdW5jdGlvbiBqdXN0IGJlY2F1c2UgaXQncyBwdWJsaWMuCgpTdW4gTWF5ICAyIDE1OjE2OjQyIDE5OTkgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEZpeCBlcnJvciBpbiBwcmV2aW91cyBjaGFuZ2UuCgkoQVNTRU1CTEVSX0RJQUxFQ1QpOiBEZWZpbmUuCgkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBSZW5hbWUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIGlmCglyZXF1aXJlZCBmb3IgdGhlIFVOSVggYXNzZW1ibGVyLgoJKEFTTV9PVVRQVVRfSU5UKTogUmVtb3ZlLiAgVGhlIGNvbXBpbGVyIHdpbGwgc3ludGhlc2lzZSBpdC4KCShBU01fT1VUUFVUX0FERFJfVkVDX1BST0xPR1VFKTogUmVtb3ZlLgoJKEFTTV9PUEVOX1BBUkVOLCBBU01fQ0xPU0VfUEFSRU4pOiBDaGFuZ2UgdG8gIlsiIGFuZCAiXSIuCgkoVFJBTVBPTElORV9URU1QTEFURSk6IFVzZSBBU01fT1VUUFVUX1NIT1JULgoJKiBwZHAxMS5jIChvdXRwdXRfYWRkcl9jb25zdF9wZHAxMSk6IENvcHkgb2Ygb3V0cHV0X2FkZHJfY29uc3QKCWFkYXB0ZWQgdG8gb3V0cHV0IGNvbnN0YW50cyBpbiBvY3RhbC4KCSogcGRwMTEuYywgcGRwMTEuaCwgcGRwMTEubWQ6IFVzZSBvdXRwdXRfYWRkcl9jb25zdF9wZHAxMSBpbnN0ZWFkCglvZiBvdXRwdXRfYWRkcl9jb25zdC4gIE91dHB1dCBjb25zdGFudHMgaW4gb2N0YWwuICBVc2UgYXNzZW1ibGVyCglkaWFsZWN0IGFsdGVybmF0aXZlcyB3aGVyZSBERUMgYW5kIFVOSVggYXNzZW1ibGVycyB1c2UgZGlmZmVyZW50CglpbnN0cnVjdGlvbiBuYW1lcy4KClN1biBNYXkgMiAwMToxNTowNiBQRFQgMTk5OSBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCkZyaSBBcHIgMzAgMTM6NTU6NDMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHZhLXBwYy5oIChfX3ZhX3N0YXJ0X2NvbW1vbik6IExldCBfX2J1aWx0aW5fc2F2ZXJlZ3MgZG8gdGhlIHdvcmsuCgkqIHJzNjAwMC5jIChleHBhbmRfYnVpbHRpbl9zYXZlcmVncyk6IEZvciBWNCwgaW5pdGlhbGl6ZSBhIHByaXZhdGUKCXZhX2xpc3Qgc3RydWN0LCBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4KCShzZXR1cF9pbmNvbWluZ192YXJhcmdzKTogVjQgc2F2ZSBhcmVhIGJhc2VkIG9mZiB2aXJ0dWFsX3N0YWNrX3ZhcnMKCWluc3RlYWQgb2YgZnJhbWVfcG9pbnRlci4KClRodSBBcHIgMjkgMjM6MDI6MjIgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIGVtaXQtcnRsLmMgKHN0YXJ0X3NlcXVlbmNlKTogRXhwYW5kIGNvbW1lbnRzLgoJKHN0YXJ0X3NlcXVlbmNlX2Zvcl9ydGxfZXhwcik6IExpa2V3aXNlLgoJKHB1c2hfdG9fc2VxdWVuY2UpOiBMaWtld2lzZS4KCShlbmRfc2VxdWVuY2UpOiBMaWtld2lzZS4KCSogZXhwci5jIChpbmhpYml0X2RlZmVyX3BvcCk6IExpa2V3aXNlLgoJKiBleHByLmggKGluaGliaXRfZGVmZXJfcG9wKTogTGlrZXdpc2UuCgkoTk9fREVGRVJfUE9QKTogTGlrZXdpc2UuCgkoT0tfREVGRVJfUE9QKTogTGlrZXdpc2UuCgpUaHUgQXByIDI5IDIyOjEzOjQ2IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogY29uZmlndXJlLmluIChpPzg2LVVuaXhXYXJlNyotc3lzdik6IFNldCB0aHJlYWRfZmlsZSB0byAncG9zaXgnCgktLWVuYWJsZS10aHJlYWRzWz17eWVzLHB0aHJlYWRzLHBvc2l4fV0gaXMgcGFzc2VkIGFzIGEgY29tbWFuZAoJbGluZSBwYXJhbWV0ZXIgdG8gY29uZmlndXJlLgoJKiBjb25maWcvaTM4Ni9zeXN2NS5oIChMSUJfU1BFQyk6IEFkZCBzdXBwb3J0IGZvciAnLXB0aHJlYWQnLgoJKENQUF9TUEVDKTogTGlrZXdpc2UuCgpUaHUgQXByIDI5IDE3OjIzOjU5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBSZWxpZ2lvdXNseSBtYXNrIGFuZCBzaWduLWV4dGVuZAoJZnJvbSAzMi1iaXRzIHRvIEhPU1RfV0lERV9JTlQuCgpUaHUgQXByIDI5IDE1OjU4OjUyIDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogZml4aW5jL3JlZ2V4LmMsIGZpeGluYy9yZWdleC5oOiBSZW1vdmVkLiAgIFJlcGxhY2Ugd2l0aC4uLgoJKiBmaXhpbmMvZ251LXJlZ2V4LmMsIGZpeGluYy9nbnUtcmVnZXguaDogSW1wb3J0ZWQgZnJvbSBHREIgNC4xOC4KCSogZml4aW5jL01ha2VmaWxlLmluIChPQkosIEhEUik6IEhhbmRsZSBuYW1lIGNoYW5nZXMgZnJvbSBhYm92ZS4KCShnbnUtcmVnZXgubyk6IERlZmluZSBSRUdFWF9NQUxMT0MgdG8gYXZvaWQgbWVtb3J5IGxlYWsuCgkqIGZpeGluYy9maXhpbmNsLmM6IG5ldyByZWdleC5oIGhlYWRlciBuYW1lCgkqIE1ha2VmaWxlLmluOiBuZXcgcmVnZXguW2NoXSBmaWxlIG5hbWVzCgpUaHUgQXByIDI5IDEyOjUzOjMzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjYWxscy5jIChlbWl0X2NhbGxfMSk6IFBhc3Mgcm91bmRlZF9zdGFja19zaXplIHRvIGVtaXRfY2FsbAoJaW5zdGVhZCBvZiB0aGUgdW5yb3VuZGVkIHNpemUuCgoxOTk5LTA0LTI4IDE0OjQwIEJydWNlIEtvcmIgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmMvbWtmaXhpbmMuc2g6IE1ha2VzdXJlIHRoZSByZXN1bHQgc2hlbGwgc2NyaXB0IGlzIHdyaXRhYmxlCgpXZWQgQXByIDI4IDEwOjM2OjM5IDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZy9tNjhrL202OGsubWQgKGNtcHNpKzEpOiBVc2UgY21wLncgd2hlbiBjb21wYXJpbmcgYSAxNiBiaXQKCWNvbnN0YW50IHdpdGggYW4gYWRkcmVzcyByZWdpc3Rlci4KCldlZCBBcHIgMjggMDA6MTQ6NDEgUERUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpUdWUgQXByIDI3IDE5OjUwOjI1IEVEVCAxOTk5ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBydGwuaCAoUkVHX0VIX1JFR0lPTik6IFVwZGF0ZSBjb21tZW50IHRvIGluZGljYXRlIGEgdmFsdWUgb2YgLTEKCWluZGljYXRlcyBubyB0aHJvdyBhbmQgbm8gbm9ubG9jYWwgZ290b3MuCgkqIG9wdGFicy5jIChlbWl0X2xpYmNhbGxfYmxvY2spOiBFbWl0IFJFR19FSF9SRUdJT04gd2l0aCBhIHZhbHVlCglvZiAtMSBpbnN0ZWFkIG9mIDAgdG8gaW5kaWNhdGUgYSBub25sb2NhbCBnb3RvIHdvbid0IGhhcHBlbiBlaXRoZXIuCgkqIGZsb3cuYyAoY291bnRfYmFzaWNfYmxvY2tzLCBmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogSWdub3JlIGxpYmNhbGwKCWJsb2NrcywgbG9vayBmb3IgUkVHX0VIX1JFR0lPTiBub3RlIGV4Y2x1c2l2ZWx5LgoJKG1ha2VfZWRnZXMpOiBDaGVjayBmb3IgUkVHX0VIX1JFR0lPTiA+IDAgZm9yIHNwZWNpZmllZCBoYW5kbGVycy4KClR1ZSBBcHIgMjcgMTU6MzM6NDIgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKHJlYWRfb25seV9kYXRhX3NlY3Rpb24sIHByaXZhdGVfZGF0YV9zZWN0aW9uLAoJcmVhZF9vbmx5X3ByaXZhdGVfZGF0YV9zZWN0aW9uLCB0b2Nfc2VjdGlvbik6IEFsaWduIENTRUNUIG9uCglkb3VibGV3b3JkIGJvdW5kYXJ5IGZvciA2NC1iaXQgdGFyZ2V0LgoJKERBVEFfU0VDVElPTl9BU01fT1ApOiBMaWtld2lzZS4KCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogTGVhZiBwcm9jZWR1cmUgc3RhY2sgbGltaXQgaXMgMjg4LgoKVHVlIEFwciAyNyAyMDoxOTo0NyAxOTk5ICBKIm9ybiBSZW5uZWNrZSA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAoaW5zdik6IFVzZSBjb3B5X2FkZHJfdG9fcmVnLgoKCSogZmluYWwuYyAoaW5zbl9sZW5ndGhzX21heF91aWQpOiBOZXcgdmFyaWFibGUuCgkoaW5pdF9pbnNuX2xlbmd0aHMsIHNob3J0ZW5fYnJhbmNoZXMpOiBTZXQgaXQuCgkoZ2V0X2F0dHJfbGVuZ3Rocyk6IFRlc3QgaW5zbiB1aWQgYWdhaW5zdCBpbnNuX2xlbmd0aHNfbWF4X3VpZC4KCjE5OTktMDQtMjcgMDg6MzIgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogQWJvcnQgaWYgTU9ERSBhcmd1bWVudCBpcyBpbnZhbGlkLgoJKGNvbXBhcmUpOiBQdW50IGlmIFRSRUVfT1BFUkFORCAoZXhwLCAwKSBpcyBhbiBFUlJPUl9NQVJLLgoKVHVlIEFwciAyNyAwMTozMzo0MyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoT1JESU5BUllfRkxBR1NfVE9fUEFTUyk6IFJlbm1hZWQgZnJvbSBGTEFHU19UT19QQVNTLgoJUmVtb3ZlICJDQyIuCgkoRkxBR1NfVE9fUEFTUyk6IE5ldyB2YXJpYWJsZS4KClR1ZSBBcHIgMjcgMDA6MzY6NDQgMTk5OSAgTmljayBCdXJyZXR0ICA8bmljay5idXJyZXR0QGJ0aW50ZXJuZXQuY29tPgoKCSogYXJtLm1kIChub3ApOiBPdXRwdXQgaW5zdHJ1Y3Rpb24gdXNpbmcgb3V0cHV0X2FzbV9pbnNuIHRvIGZpeAoJYXNzZW1ibGVyIGRpYWxlY3QgcHJvYmxlbXMuCgpNb24gQXByIDI2IDIzOjU1OjUwIDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogTWFrZWZpbGUuaW4gKGZpeGluYy5zaCk6IEZpeCBkZXBlbmRlbmNpZXMuCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmIChhdm9pZF9ib29sKTogRW5hYmxlIG1hdGNoIGlmIHR5cGVkZWZzIGFyZQoJcHJlcGVuZGVkIGJ5IHNwYWNlcy4KCShzY281X3N0YXRfd3JhcHBlcnMpOiBOZXcgZml4LiAgIE1ha2Ugc3lzL3N0YXQuaCBDKysgc2FmZS4KCSogZml4aW5jL2ZpeGluY2wuc2gsIGZpeGluYy9maXhpbmNsLngsIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KCk1vbiBBcHIgMjYgMjM6Mjg6NTQgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXRfdmFyX2ludG9fc3RhY2spOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUKCWluIHNldHVwIGZvciBjaGtyX3NldF9yaWdodF9saWJmdW5jIGNhbGxzLgoJKGFzc2lnbl9wYXJhbXMpOiBMaWtld2lzZS4KCSogZXhwci5jIChlbWl0X3B1c2hfaW5zbik6IENoYW5nZSBwdHJfbW9kZSB0byBQbW9kZSBpbgoJc2V0dXAgZm9yIGNoa3JfY29weV9iaXRtYXBfbGliZnVuYyBhbmQgY2hrcl9zZXRfcmlnaHRfbGliZnVuYyBjYWxscy4KCShleHBhbmRfYXNzaWdubWVudCk6IENoYW5nZSBwdHJfbW9kZSB0byBQbW9kZSBpbgoJc2V0dXAgZm9yIGNoa3JfYWRkX2xpYmZ1bmMgYW5kIGNoa3JfY29weV9iaXRtYXBfbGliZnVuYy4KCShzdG9yZV9leHByKTogQ2hhbmdlIHB0cl9tb2RlIHRvIFBtb2RlIGluCglzZXR1cCBmb3IgY2hrcl9hZGRfbGliZnVuYyBhbmQgY2hrcl9jb3B5X2JpdG1hcF9saWJmdW5jLgoJKGV4cGFuZF9leHByKTogQ2hhbmdlIHB0cl9tb2RlIHRvIFBtb2RlIGluCglzZXR1cCBmb3IgY2hrcl9jaGVja19hZGRyX2xpYmZ1bmMuCgkoZXhwYW5kX2J1aWx0aW4pOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX2NoZWNrX3N0cl9saWJmdW5jLCBjaGtyX2NvcHlfYml0bWFwX2xpYmZ1bmMgYW5kCgljaGtyX2NoZWNrX2FkZHJfbGliZnVuYy4KCSogY2FsbHMuYyAocnR4X2Zvcl9mdW5jdGlvbl9jYWxsKTogQ2hhbmdlIHB0cl9tb2RlIHRvIFBtb2RlIGluCglzZXR1cCBmb3IgY2hrcl9jaGVja19leGVjX2xpYmZ1bmMuCgkoZXhwYW5kX2NhbGwpOiBDaGFuZ2UgcHRyX21vZGUgdG8gUG1vZGUgaW4KCXNldHVwIGZvciBjaGtyX3NldF9yaWdodF9saWJmdW5jLgoJKGV4cGFuZF9jYWxsKTogQ2hhbmdlIHB0cl9tb2RlIHRvIFBtb2RlIGluCglzZXR1cCBmb3IgY2hrcl9zZXRfcmlnaHRfbGliZnVuYy4KCShzdG9yZV9vbmVfYXJnKTogQ2hhbmdlIHB0cl9tb2RlIHRvIFBtb2RlIGluCglzZXR1cCBmb3IgY2hrcl9zZXRfcmlnaHRfbGliZnVuYy4KCiAgICAgICAgKiBjLXBhcnNlLmluIChhYnNkY2wxKTogQWxsb3cgYXR0cmlidXRlcyBpbiBleHBsaWNpdCB0eXBlc3BlY3MuCiAgICAgICAgKCVleHBlY3QpOiBVcGRhdGUuCiAgICAgICAgKiBjLXBhcnNlLnk6IFJlZ2VuZXJhdGUuCiAgICAgICAgKiBjLXBhcnNlLmM6IExpa2V3aXNlLgogICAgICAgICogb2JqYy9vYmpjLXBhcnNlLmM6IExpa2V3aXNlLgogICAgICAgICogb2JqYy9vYmpjLXBhcnNlLnk6IExpa2V3aXNlLgoKTW9uIEFwciAyNiAyMToxNzo0MSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjLXByYWdtYS5jIChwdXNoX2FsaWdubWVudCk6IERvbid0IGlnbm9yZSBhbGlnbm1lbnRzIGdyZWF0ZXIgdGhhbgoJNCBieXRlcy4KCShoYW5kbGVfcHJhZ21hX3Rva2VuKTogTGlrZXdpc2UuCgoJKiBjLXByYWdtYS5jOiBTdXBwb3J0IGZvciAjcHJhZ21hIHBhY2sgKHB1c2gsIDxpZD4sIDxuPikuCgkoc3RydWN0IGFsaWduX3N0YWNrKTogQWRkIGlkIGZpZWxkLgoJKHB1c2hfYWxpZ25tZW50LCBwb3BfYWxpZ25tZW50KTogVGFrZSBpZCBwYXJhbWV0ZXIuCgkoaGFuZGxlX3ByYWdtYV90b2tlbik6IEFkZCBuZWNlc3Nhcnkgc3RhdGVzLgoJKiBjLXByYWdtYS5oIChlbnVtIHByYWdtYV9zdGF0ZSk6IEFkZCBuZWNlc3Nhcnkgc3RhdGVzLgoKVHVlIEFwciAyNyAxMzo1ODoyMyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoKmNtcHFmLCAqY21wcWZfbm9vdiwgKmNtcHFpX3Rlc3QsCgkqY21wcWlfdGVzdF9ub292KTogUmVtb3ZlID8gbW9kaWZpZXIgZnJvbSBjb25zdHJhaW50cyBsaXN0LgoJKCpzbXVscWkzX2hpZ2hwYXJ0X2Nsb2JiZXIsICp1bXVscWkzX2hpZ2hwYXJ0X2Nsb2JiZXIpOiBTd2FwCglvdXRwdXQgc3RyaW5ncyB0byBtYXRjaCBuZXcgY29uc3RyYWludCBvcmRlcmluZy4KCjE5OTktMDQtMjYgMTk6MTYgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwaGFzaC5jIChkdW1wX2RlZmluaXRpb24pOiBOZXcgZnVuY3Rpb24uCgkqIGNwcGhhc2guaDogUHJvdG90eXBlIGl0LgoKCSogY3BwbGliLmMgKGhhbmRsZV9kaXJlY3RpdmUpOiBEb24ndCBvdXRwdXQgYW55dGhpbmcgaGVyZS4KCVN0cmVhbWxpbmUuCgkocGFzc190aHJ1X2RpcmVjdGl2ZSk6IFRha2UgYSBsZW5ndGgsIG5vdCBhIHBvaW50ZXIgdG8gdGhlCgllbmQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGRvX2RlZmluZSk6IEhhbmRsZSAtZEQsIC1kTiwgLWczIGVudGlyZWx5IGhlcmUuICBTdHJlYW1saW5lLgoJKGRvX2luY2x1ZGUpOiBIYW5kbGUgLWRJIGhlcmUuCgkoZG9faWRlbnQpOiBDb3JyZWN0IHRvIG1hdGNoIGNjY3AuCgkoZG9fcHJhZ21hKTogQ29weSB0aGUgcHJhZ21hIHRocm91Z2ggaGVyZS4KCShkb19hc3NlcnQsIGRvX3VuYXNzZXJ0KTogVGlkeS4KCgkqIGNwcGluaXQuYyAoY3BwX2ZpbmlzaCk6IElmIC1kTSB3YXMgc3BlY2lmaWVkLCB3YWxrIHRoZSBtYWNybwoJaGFzaCB0YWJsZSBhbmQgY2FsbCBkdW1wX2RlZmluaXRpb24gb24gYWxsIHRoZSBlbnRyaWVzLgoJKiBjcHBtYWluLmM6IGNwcF9maW5pc2ggbWF5IHByb2R1Y2Ugb3V0cHV0LgoKTW9uIEFwciAyNiAxNToyNzozMyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IE1vdmUgY2FsbCB0byBjaGVja19nbG9iYWxfZGVjbGFyYXRpb25zCglhZnRlciBvdXRwdXRfZXhjZXB0aW9uX3RhYmxlIHRvIHJlc3RvcmUgYmVoYXZpb3IgYXMgaXQgd2FzIGJlZm9yZQoJMTk5OS0wNC0yMiBjaGFuZ2UuCgoxOTk5LTA0LTI2IDEwOjUwIC0wNzAwIEJydWNlIEtvcmIgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmMvZml4aW5jbC5jOiAgSW1wcm92ZSB0aGUgaGFuZGxpbmcgb2YgY2hpbGQgcHJvY2VzcyBleGl0cwoJKiBmaXhpbmMvc2VydmVyLltjaF06IEV4cG9ydCB0aGUgaW50ZXJmYWNlIGZvciBzaHV0dGluZyBkb3duCgl0aGUgc2VydmVyIHByb2Nlc3MKCSogZml4aW5jL2luY2xoYWNrLnRwbDogUmVtb3ZlIHVubmVjZXNzYXJ5IGNoYXJhY3RlciBxdW90ZQoJKiBmaXhpbmMvZml4aW5jbC5zaCwgZml4aW5jL2luY2xoYWNrLnNoOiBSZWdlbmVyYXRlCgpNb24gQXByIDI2IDEwOjQxOjQyIEVEVCAxOTk5ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoYnVpbHRpbl9zZXRqbXBfcmVjZWl2ZXIpOiBVc2UgYSBsYWJlbF9yZWYgaW5zdGVhZCBvZgoJYSBjb2RlIGxhYmVsLgoKMTk5OS0wNC0yNiAwOTo0NyAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBydGwudGV4aTogRG9jdW1lbnQgdGhlIHJ0bCBjbGFzc2VzIGFuZCB0aGVpciByZWxhdGlvbiB0bwoJZm9ybWF0cy4KCk1vbiBBcHIgMjYgMDE6MDI6MzggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChmaXhfdHJ1bmMgcGF0dGVybnMpOiBVc2UgcmVnX25vX3N1YnJlZ19vcGVyYW5kIG9uIG9wMAoJZm9yIGxlc3Mgd29yayBpbiByZWxvYWQuCgkobW92c2YgYW5kIG1vdmRmIHBhdHRlcm5zKTogUHV0IGZwIHJlZyBhbHRlcm5hdGl2ZXMgZmlyc3QuCgpNb24gQXByIDI2IDAxOjU1OjU2IDE5OTkgIE1hcmMgRXNwaWUgIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBjb25maWd1cmUuaW4gKG9wZW5ic2QpOiBGYWN0b3JpemUgeG1ha2VfZmlsZS4KCShpeDg2IG9wZW5ic2QpOiBUcmltIG9ic29sZXRlIGNvbW1lbnQuCgkodmF4IG9wZW5ic2QpOiBGaXggdHlwby4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIEFwciAyNiAwMTozMDo1OSAxOTk5IERvbm4gVGVycnkgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9hc3NpZ25tZW50KTogSW1wcm92ZSB0ZXN0IGZvciBwb2ludGVyIHR5cGUuCgpNb24gQXByIDI2IDAwOjI2OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBBY2NvdW50IGZvciB0aGUgc3VicmVnIHdvcmQuCgpNb24gQXByIDI2IDAxOjA4OjM2IDE5OTkgIFRvc2hpeWFzdSBNb3JpdGEgICh0bUBuZXRjb20uY29tKQoKCSogZm9sZC1jb25zdC5jIChtYWtlX3JhbmdlKTogQWx3YXlzIGluaXRpYWxpemUgYXJnMCBhbmQgYXJnMS4KCShmb2xkKTogU2ltaWxhcmx5IGZvciBhbHQwIGFuZCBhbHQxLgoJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc19pbnNucyk6IEluaXRpYWxpemUgaW5zbl9saXN0LgoJKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVnc18xKTogSW5pdGlhbGl6ZSBvZmZzZXQuCgkqIG9wdGFicy5jIChleHBhbmRfYmlub3ApOiBJbml0aWFsaXplIGNhcnJ5X2luLCBjYXJyeV9vdXQsIG9wMF94aGlnaAoJYW5kIG9wMV94aGlnaC4KCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBJbml0aWFsaXplIG1pbnZhbCBhbmQgbWF4dmFsLgoKTW9uIEFwciAyNiAwMTowMjozNCAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogdG9wbGV2LmMgKHJlcG9ydF9lcnJvcl9mdW5jdGlvbik6IFJlb3JkZXIgZmlsZSBzdGFjayBhbmQKCWZ1bmN0aW9uIG5hbWUgcHJpbnRpbmcuICBJZ25vcmUgRklMRSBwYXJhbWV0ZXIuCgpNb24gQXByIDI2IDAwOjU4OjU0IDE5OTkgIEplcnJ5IFF1aW5uIDxqcXVpbm5Abm9ydGVsbmV0d29ya3MuY29tPgoKCSogcGEuaCAoYXJjaGl0ZWN0dXJlX3R5cGUpOiBOZXcgZW51bS4KCShwYV9hcmNoX3N0cmluZywgcGFfYXJjaCk6IERlY2xhcmUuCgkoTUFTS19QQV8xMCwgTUFTS19QQV8yMCk6IE5ldyBmbGFncy4KCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgcGEtcmlzYy0yLTAuICBVcGRhdGUgZG9jcyBmb3IgUEExLjAgY29kZWdlbi4KCShUQVJHRVRfT1BUSU9OUyk6IEFkZCAtbWFyY2g9IG9wdGlvbi4KCSogcGEuYyAocGFfYXJjaCwgcGFfYXJjaF9zdHJpbmcpOiAgRGVmaW5lLgoJKG92ZXJyaWRlX29wdGlvbnMpOiAgU2V0IHRoZW0uCgkqIHBhL3BhLWhwdXgxMC5oIChBU01fRklMRV9TVEFSVCk6ICBPdXRwdXQgTEVWRUwgMi4wIGFzbSBkaXJlY3RpdmUgZm9yCgkyLjAgYXJjaGl0ZWN0dXJlLgoJKiBpbnZva2UudGV4aSAoT3B0aW9uIFN1bW1hcnksIEhQUEEgT3B0aW9ucyk6ICBEb2N1bWVudCBuZXcKCWFyY2hpdGVjdHVyZSBmbGFncy4KCgkqIHBhL3BhLWhwdXguaCwgcGEvcGEtaHB1eDEwLmgsIHBhL3BhLWhwdXg5LmgsIHBhL3BhLW9zZi5oLCBwYS5oLAoJcGEuYywgcGEubWQsIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlOiBSZXBsYWNlIFRBUkdFVF9TTkFLRSBieQoJVEFSR0VUX1BBXzExIGFuZCBNQVNLX1NOQUtFIGJ5IE1BU0tfUEFfMTEuCgpNb24gQXByIDI2IDAwOjI4OjI1IDE5OTkgIFRoZW9kb3JlIFBhcGFkb3BvdWxvIDxUaGVvZG9yZS5QYXBhZG9wb3Vsb0Bzb3BoaWEuaW5yaWEuZnI+CgogCSogZmxhZ3MuaCAoaW5saW5lX21heF9pbnNucyk6IERlY2xhcmUuCiAJKiBpbnRlZ3JhdGUuYyAoaW5saW5lX21heF9pbnNucyk6IE5ldyB2YXJpYWJsZS4KIAkoZnVuY3Rpb25fY2Fubm90X2lubGluZV9wKTogVXNlIGl0LgogCSogdG9wbGV2LmMgKG1haW4pOiBBZGQgdGhlIGZsYWcgLWZpbmxpbmUtbGltaXQtbi4KIAkoZGlzcGxheV9oZWxwKTogRG9jdW1lbnQgLWZpbmxpbmUtbGltaXQtbi4KIAkqIGludm9rZS50ZXhpOiBEb2N1bWVudCAtZmlubGluZS1saW1pdC1uCgpTdW4gQXByIDI1IDIzOjAzOjMyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBSZWxvYWQgaW4tb3V0IHJlZy1vbmx5IG1lbW9yeSBvcGVyYW5kcy4KClN1biBBcHIgMjUgMTM6MDY6MTMgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKGFzc2lnbl9wYXJtcy9TVEFDS19CWVRFUyk6IFJldmVydCBsYXN0IGNoYW5nZSwKCWFuZCB0aGF0IG9mIDE5IE5vdi4KClN1biBBcHIgMjUgMTI6MzA6NTAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGVtaXRfY2FsbF8xKTogTmV3IGFyZyByb3VuZGVkX3N0YWNrX3NpemU7IHVwZGF0ZSBjYWxsZXJzLgoJVXBkYXRlIHBlbmRpbmdfc3RhY2tfYWRqdXN0IGJhc2VkIG9uIHRoaXMgdmFsdWUuCgkoY29tcHV0ZV9hcmd1bWVudF9ibG9ja19zaXplKTogSW5jbHVkZSBwZW5kaW5nX3N0YWNrX2FkanVzdCBpbgoJUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZIGFsaWdubWVudC4KCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogRG9uJ3Qgcm91bmQgdG8gUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZLgoKU3VuIEFwciAyNSAxNDozODoxMCBFRFQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogc3R1cGlkLmMgKHN0dXBpZF9tYXJrX3JlZnMpOiBHZW5lcmF0ZSBhIFJFR19VTlVTRUQgbm90ZQoJZm9yIGEgcmVnaXN0ZXIgd2hpY2ggaXMgY2xvYmJlcmVkIGV2ZW4gaWYgdGhlIHJlZ2lzdGVyCgl3YXMgdXNlZCBieSBhbiBlYXJsaWVyIGluc3RydWN0aW9uLgoKCSogaTM4Ni5tZCAoZml4X3RydW5jc2ZkaTIsIGZpeF90cnVuY2RmZGkyLAoJZml4X3RydW5jeGZkaTIpOiBEb24ndCBib3RoZXIgd2l0aCB0aGUgZ2VuX3JlZ19SVFguCgkoZml4X3RydW5jc2ZzaTIsIGZpeF90cnVuY3NmZGkyLCBmaXhfdHJ1bmNkZnNpMiwKCWZpeF90cnVuY2RmZGkyLCBmaXhfdHJ1bmN4ZnNpMiwgZml4X3RydW5jeGZkaTIpOiBVcGRhdGUKCW9wZXJhbmQgY29uc3RyYWludHMgYW5kIG1vZGVzLgoJKiBpMzg2LmMgKG91dHB1dF9maXhfdHJ1bmMpOiBVc2UgSEltb2RlIHJlZ2lzdGVyIHRvIGF2b2lkCgltZW1vcnkgc3RhbGxzLiAgQ2FsbCBvdXRwdXRfbW92ZV9kb3VibGUgaW5zdGVhZCBvZiBvdXRwdXRfdG9fcmVnLgoJKG91dHB1dF90b19yZWcpOiBSZW1vdmUuCgkqIGkzODYuaDogTGlrZXdpc2UuCgoJKiBpMzg2Lm1kIChuZWdzZjIsIG5lZ2RmMiwgbmVneGYyKTogU2V0IHRoZSB0eXBlCglhdHRyaWJ1dGUgdG8gZnBvcC4KClNhdCBBcHIgMjQgMjM6MTU6NTcgMTk5OSAgRG9ubiBUZXJyeSAoZG9ubkBpbnRlcml4LmNvbSkKCgkqIGFscGhhLm1kIChjYWxsX3ZhbHVlX250KTogQ29ycmVjdCBzdWJzY3JpcHRzLgoKU2F0IEFwciAyNCAyMDo0OToyMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoUFJJTlRfT1BFUkFORF9BRERSRVNTKTogQnJlYWsgb3V0IHRvIC4uLgoJKiBhbHBoYS5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBoZXJlLiAgSGFuZGxlIHN1YnJlZ3MuCgpGcmkgQXByIDIzIDIyOjM1OjQxIEVEVCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBhY2NvbmZpZy5oIChIQVZFX0dBU19GSUxEU19GSVNUUyk6IEFkZC4KCSogY29uZmlndXJlLmluOiBDaGVjayBhc3NlbWJsZXIgaW5zdHJ1Y3Rpb25zLgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgkqIGNvbmZpZy5pbjogTGlrZXdpc2UuCgkqIGkzODYubWQgKGZsb2F0aGlzZjIsIGZsb2F0aGlkZjIsIGZsb2F0aGl4ZjIpOiBOZXcgcGF0dGVybnMuCgkqIGkzODYuYyAocHJpbnRfb3BlcmFuZCk6IFVzZSB0aGUgcHJvcGVyIHN1ZmZpeCBmb3IgYSAzODcgSEltb2RlCglvcGVyYW5kLiAgQWJvcnQgaWYgYSAzODcgb3BlcmFuZCBoYXMgYW4gdW5zdXBwb3J0ZWQgc2l6ZS4KCkZyaSBBcHIgMjMgMTY6NTc6NDAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX3dyaXRlX3ZlcnN0YW1wKTogTWFyayBgZmlsZScgdW51c2VkLgoJKiBhbHBoYS5oIChGVU5DVElPTl9WQUxVRSk6IFVzZSBnZW5fcnR4X1JFRyBub3QgZ2VuX3J0eC4KCShMSUJDQUxMX1ZBTFVFKTogTGlrZXdpc2UuCgkoR09fSUZfTEVHSVRJTUFURV9TSU1QTEVfQUREUkVTUyk6IEhhbmRsZSBub3JtYWwgc3VicmVncy4KCkZyaSBBcHIgMjMgMTQ6NTc6MzMgMTk5OSAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiBhbHBoYTMyLmggKElOSVRJQUxJWkVfVFJBTVBPTElORSk6IEdldCBvZmZzZXRzIHJpZ2h0LgoKCSogYWxwaGEuYyAoYWxwaGFfaW5pdGlhbGl6ZV90cmFtcG9saW5lKTogQWRkIGNvdmVydF9tZW1vcnlfYWRkcmVzcwoJY2FsbHMgYXMgbmVlZGVkLgoKRnJpIEFwciAyMyAxNDozNjo0NyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfZXhwYW5kX3Byb2xvZ3VlKTogRG9uJ3QgbmVnYXRlIGZyYW1lIHNpemUKCWZvciB1c2Ugd2l0aCBzdWJxLgoKRnJpIEFwciAyMyAwOTo0MzoxOCAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IERpc3BsYXkgTEFCRUxfTlVTRVMgZm9yIGxhYmVscy4KClRodSBBcHIgMjIgMjM6MDg6MzcgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHRvcGxldi5oICh3cmFwdXBfZ2xvYmFsX2RlY2xhcmF0aW9ucyk6IERlY2xhcmUuCgkoY2hlY2tfZ2xvYmFsX2RlY2xhcmF0aW9ucyk6IExpa2V3aXNlLgoJKiB0b3BsZXYuYyAod3JhcHVwX2dsb2JhbF9kZWNsYXJhdGlvbnMpOiBOZXcgZnVuY3Rpb24sIHNwbGl0IG91dAoJZnJvbSAuLi4KCShjaGVja19nbG9iYWxfZGVjbGFyYXRpb25zKTogTGlrZXdpc2UuLi4KCShjb21waWxlX2ZpbGUpOiBIZXJlLgoKVGh1IEFwciAyMiAyMjozNDo0MSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYy1wYXJzZS5pbiAoZXhwcl9ub19jb21tYXMpOiBWZXJpZnkgd2UndmUgYW4gZXhwciBiZWZvcmUKCWNhbGxpbmcgQ19TRVRfRVhQX09SSUdJTkFMX0NPREUuCgpUaHUgQXByIDIyIDIyOjIyOjE1IEVEVCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEFsd2F5cyBzZXQKCWN1cnJlbnRfZnVuY3Rpb25fdXNlc19vbmx5X2xlYWZfcmVncyBhcHByb3ByaWF0ZWx5LgoKVGh1IEFwciAyMiAxNDozOTo0MyAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYveG0tY3lnd2luLmggKEhBVkVfQkNPUFkpOiBEZWxldGUgdW5uZWVkZWQgbWFjcm8uCgkoSEFWRV9CWkVSTyk6IExpa2V3aXNlLgoJKEhBVkVfQkNNUCk6IExpa2V3aXNlLgoJKEhBVkVfUklOREVYKTogTGlrZXdpc2UuCgkoSEFWRV9JTkRFWCk6IExpa2V3aXNlLgoJKERJUl9TRVBBUkFUT1JfMik6IERlZmluZS4KCShHRVRfRU5WX1BBVEhfTElTVCk6IFR1cm4gcGF0aCBsaXN0cyBpbnRvIFBPU0lYLgoJKFBBVEhfU0VQQVJBVE9SKTogVXNlICc6Jy4KCjE5OTktMDQtMjIgQnJ1Y2UgS29yYiA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogZW5hYmxlIGRpc2FibGluZyBvZiBmYXN0IGZpeGluY2x1ZGVzCgkqIGNvbmZpZ3VyZTogcmVnZW5lcmF0ZQoKMTk5OS0wNC0yMSAxNDo1NSAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBnZW4tcHJvdG9zLmM6ICN1bmRlZiBhYm9ydCBhZnRlciBpbmNsdWRpbmcgc3lzdGVtLmguCglEZWxldGUgZGVmbnMgb2YgZmFuY3lfYWJvcnQgYW5kCWZhdGFsLgoJKiBmaXgtaGVhZGVyLmM6IERlbGV0ZSBkZWZuIG9mIGZhbmN5X2Fib3J0LgoKV2VkIEFwciAyMSAxMjowOTozOCAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGNjY3AuYyAoc2ltcGxpZnlfZmlsZW5hbWUpOiBBbHdheXMgcHJlc2VydmUgbGVhZGluZyBkb3VibGUgc2xhc2guCgpXZWQgQXByIDIxIDE4OjE1OjU1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kOiBBZGQgbmV3IHBlZXBob2xlcyB0byByZW1vdmUgcmVkdW5kYW50IGxvYWRzLgoKV2VkIEFwciAyMSAxNzo0MToyOSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoYmluYXJ5IHBhdHRlcm5zKTogUmVvcmRlciBhbHRlcm5hdGl2ZXMKCXNvIHRoYXQgdHdvIG9wZXJhbmQgaW5zdHJ1Y3Rpb25zIGFyZSBjaG9zZW4gYmVmb3JlIHRocmVlIG9wZXJhbmQKCWluc3RydWN0aW9ucy4KClR1ZSBBcHIgMjAgMjM6Mzg6NTggMTk5OSAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIG9iamMvTWFrZS1sYW5nLmluIChvYmpjLXBhcnNlLmMpOiBQdXQgQklTT04gcGFyYW1ldGVycyBpbiBjb3JyZWN0CglvcmRlci4KCgkqIE1ha2VmaWxlLmluIChjLXBhcnNlLmMpOiBQdXQgQklTT04gcGFyYW1ldGVycyBpbiBjb3JyZWN0CglvcmRlci4KClR1ZSBBcHIgMjAgMTY6Mzg6MTEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChudF9sZGEpOiBOZXcgcGF0dGVybi4KCSogYWxwaGEuYyAoYWxwaGFfZXhwYW5kX3Byb2xvZ3VlKTogVXNlIGl0IGZvciBsYXJnZSBmcmFtZXMKCXVuZGVyIHdpbmRvd3MgbnQuCgpUdWUgQXByIDIwIDE3OjU3OjE0IDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKICAgICAgICAqIGNvbmZpZy9hcm0vYXJtLm1kIChtb3ZoaSk6ICBBZGQgY2hlY2sgZm9yIG9kZCBvZmZzZXQuCgpUdWUgQXByIDIwIDEzOjE0OjU4IEVEVCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2LmMgKG91dHB1dF9tb3ZlX2RvdWJsZSk6IEFib3J0IGlmIGEgbm9uLW9mZnNldHRhYmxlCgltZW1vcnkgb3BlcmFuZCBpcyBlbmNvdW50ZXJlZC4gIERlbGV0ZSB1bnVzZWQgY29kZS4KCShmaW5kX2FkZHJfcmVnKTogUmVtb3ZlLgoKTW9uIEFwciAxOSAyMToxMzowMiAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCSogdHJlZS5kZWYgKEJMT0NLKTogRml4IHR5cG8gaW4gY29tbWVudC4KCjE5OTktMDQtMTkgMTQ6NTEgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKG91dHB1dF9saW5lX2NvbW1hbmQpOiBEcm9wIENPTkRJVElPTkFMIGFyZ3VtZW50LgoJV2UgY2FuIG9taXQgdW5uZWNlc3NhcnkgbGluZSBjb21tYW5kcyBpZiBmaWxlX2NoYW5nZSA9PQoJc2FtZV9maWxlIGFuZCBwZmlsZS0+bGluZW5vICE9IDAuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGNwcF9nZXRfdG9rZW4gW2Nhc2UgJ1xuJ10pOiBEb24ndCBidW1wIHBmaWxlLT5saW5lbm8gaWYKCUNQUF9PUFRJT05TIChwZmlsZSktPm5vX2xpbmVfY29tbWFuZHMgaXMgc2V0LgoJKiBjcHBsaWIuaDogRml4IHByb3RvdHlwZSBvZiBvdXRwdXRfbGluZV9jb21tYW5kLgoKMTk5OS0wNC0xOCAxNzo0NiAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBmaWxlcy5jIChmaW5kX3Bvc2l0aW9uLCByZWFkX2FuZF9wcmVzY2FuKTogVXNlIGB1bnNpZ25lZAoJbG9uZycgdmFyaWFibGVzIGNvbnNpc3RlbnRseSB0byBjb3VudCBsaW5lIGFuZCBjb2x1bW4gbnVtYmVycy4KClN1biBBcHIgMTggMTU6NTA6MzMgRURUIDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIG91dHB1dC5oIChjdXJyZW50X2Z1bmN0aW9uX2lzX2xlYWYsCgljdXJyZW50X2Z1bmN0aW9uX3VzZXNfb25seV9sZWFmX3JlZ3MpOiBEZWNsYXJlLgoJKiBmdW5jdGlvbi5jIChjdXJyZW50X2Z1bmN0aW9uX2lzX2xlYWYsCgljdXJyZW50X2Z1bmN0aW9uX3VzZXNfb25seV9sZWFmX3JlZ3MpOiBEZWZpbmUuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IEluaXRpYWxpemUgY3VycmVudF9mdW5jdGlvbl9pc19sZWFmCglhbmQgY3VycmVudF9mdW5jdGlvbl91c2VzX29ubHlfbGVhZl9yZWdzLgoJKiBmaW5hbC5jIChsZWFmX2Z1bmN0aW9uKTogRG9uJ3QgZGVmaW5lLgoJKGZpbmFsX3N0YXJ0X2Z1bmN0aW9uKTogUmVwbGFjZSB1c2VzIG9mIGxlYWZfZnVuY3Rpb24gd2l0aAoJY3VycmVudF9mdW5jdGlvbl91c2VzX29ubHlfbGVhZl9yZWdzLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFNldCBjdXJyZW50X2Z1bmN0aW9uX2lzX2xlYWYKCXByaW9yIHRvIGludm9raW5nIGxvY2FsIHJlZ2lzdGVyIGFsbG9jYXRpb24uCgkocmVzdF9vZl9jb21waWxhdGlvbik6IFJlcGxhY2UgdXNlcyBvZiBsZWFmX2Z1bmN0aW9uIHdpdGgKCWN1cnJlbnRfZnVuY3Rpb25fdXNlc19vbmx5X2xlYWZfcmVncy4KCSogZGJ4b3V0LmMgKGRieG91dF9zeW1ib2wsIGRieG91dF9wYXJtcyk6IExpa2V3aXNlLgoJKiBkd2FyZjJvdXQuYyAoYWRkX2xvY2F0aW9uX29yX2NvbnN0X3ZhdWxlX2F0dHJpYnV0ZSk6IExpa2V3aXNlLgoJKiBkd2FyZm91dC5jIChhZGRfbG9jYXRpb25fb3JfY29uc3RfdmFsdWVfYXR0cmlidXRlKTogTGlrZXdpc2UuCgkqIHNkYm91dC5jIChzZGJvdXRfc3ltYm9sKTogTGlrZXdpc2UuCgkqIHNwYXJjLmggKEZVTkNUSU9OX1BST0xPR1VFLCBGVU5DVElPTl9FUElMT0dVRSk6IExpa2V3aXNlLgoJKiBzcGFyYy5jIChlbGlnaWJsZV9mb3JfZXBpbG9ndWVfZGVsYXksIG91dHB1dF9yZXR1cm4sCglzcGFyY19yZXR1cm5fcGVlcGhvbGVfb2spOiBMaWtld2lzZS4KCSogc3BhcmMubWQgKGxlYWZfZnVuY3Rpb24gYXR0cmlidXRlLCB1bnR5cGVkX3JldHVybik6IExpa2V3aXNlLgoJKiBpMzg2LmMgKGl4ODZfY29tcHV0ZV9mcmFtZV9zaXplKTogRG9uJ3QgYWxpZ24gdGhlIHN0YWNrCglmb3IgbGVhZiBmdW5jdGlvbnMgd2hpY2ggZG9uJ3QgYWxsb2NhdGUgYW55IHN0YWNrIHNsb3RzLgoJKiB0bS50ZXhpOiBVcGRhdGUgZG9jdW1lbnRhdGlvbi4KClN1biBBcHIgMTggMDI6MTU6MDkgUERUIDE5OTkgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gQXByIDE4IDAwOjA4OjQ1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5oIChHT19JRl9MRUdJVElNQVRFX1NJTVBMRV9BRERSRVNTKTogQ29ycmVjdCBsYXN0IGNoYW5nZSAtLQoJbWFrZSBzdXJlIEZQX0JBU0VfUCByZWdpc3RlcnMgYXJlIG9ubHkgdXNlZCB3aXRoIGFuIGludGVnZXIuCgpTYXQgQXByIDE3IDIyOjU0OjE3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5oIChSRUdfT0tfRlBfQkFTRV9QKTogTmV3IG1hY3JvLgoJKEdPX0lGX0xFR0lUSU1BVEVfU0lNUExFX0FERFJFU1MpOiBVc2UgaXQuCgkqIGFscGhhLm1kIChhZGRkaTMrMSk6IE5ldyBpbnNuIHRvIGhhbmRsZSBsYXJnZSBjb25zdGFudHMgb2ZmCgl0aGUgc29mdCBmcmFtZSBwb2ludGVyLgoJKGFkZGRpMysyKTogRG9uJ3Qgc3BsaXQgc29mdCBmcmFtZSBwb2ludGVyIG9yIGFyZyBwb2ludGVyIGFkZGl0aW9ucy4KClN1biBBcHIgMTggMTc6MjQ6MTAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAobGVnaXRpbWl6ZV9vcGVyYW5kcyk6IFVzZSBydHhfY29zdAoJdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIHdvcnRod2hpbGUgZm9yY2luZyBhIGNvbnN0YW50IGludG8gYSByZWdpc3Rlci4KCSogY29uZmlnL2M0eC9jNHguaCAoQ09OU1RfQ09TVFMpOiBBbiBpbnRlZ2VyIHZhbHVlIG9mIDI1NSBvciA2NTUzNQoJdXNlZCB3aXRoIGEgbG9naWNhbCBhbmQgb3IgYW4gaW50ZWdlciB2YWx1ZSBvZiAxNiBvciAyNCB1c2VkIHdpdGgKCWEgcmlnaHQgc2hpZnQgaGFzIHplcm8gY29zdCBvbiB0aGUgQzQwLgoKU2F0IEFwciAxNyAyMTozMDoxMSAxOTk5ICBCZXJuZCBTY2htaWR0IDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGdjc2UuYyAoY29tcHV0ZV9sb2NhbF9wcm9wZXJ0aWVzKTogSWYgc2V0cCBpcyBub256ZXJvLCBjbGVhcgoJVFJBTlNQIGluc3RlYWQgb2Ygc2V0dGluZyBpdCB0byBhbGwgb25lcy4KClNhdCBBcHIgMTcgMjE6MTA6MTAgMTk5OSAgSmFuIEh1Ymlja2EgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgogICAgICAgICogaTM4Ni5jIChpMzg2X3ByZWZlcnJlZF9zdGFja19ib3VuZGFyeV9zdHJpbmcpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLgogICAgICAgIChpMzg2X3ByZWZlcnJlZF9zdGFja19ib3VuZGFyeSk6IE5ldyBnbG9iYWwgdmFyaWFibGUuCiAgICAgICAgKG92ZXJyaWRlX2Z1bmN0aW9ucyk6IFNldCBpdC4gIFRpZHkgb3B0aW9uIHNldHRpbmcgY29kZS4KICAgICAgICAqIGkzODYuaCAoVEFSR0VUX09QVElPTlMpOiBOZXcgY29tbWFuZCBsaW5lIG9wdGlvbi4KICAgICAgICAoaTM4Nl9wcmVmZXJyZWRfc3RhY2tfYm91bmRhcnlfc3RyaW5nKTogRGVjbGFyZSBpdC4KICAgICAgICAoaTM4Nl9wcmVmZXJyZWRfc3RhY2tfYm91bmRhcnkpOiBMaWtld2lzZS4KICAgICAgICAoUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZKTogVXNlIGkzODZfcHJlZmVycmVkX3N0YWNrX2JvdW5kYXJ5LgoKU2F0IEFwciAxNyAxOToyMjozOCAxOTk5ICBKYW4gSHViaWNrYSA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYuYyAoazZfY29zdCk6IFRha2UgaW50byBhY2NvdW50IHRoZSBkZWNvZGluZyB0aW1lLgoKU2F0IEFwciAxNyAxOToxMzoyMiAxOTk5ICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCiAgICAgICAgKiBpMzg2LmggKFBSSU5UX09QRVJBTkRfUFVOQ1RfVkFMSURfUCk6IEFsbG93IF8uCiAgICAgICAgKiBpMzg2LmMgKHByaW50X29wZXJhbmQpOiBOZXcgJV8gb3BlcmF0b3IuCgkobG9hZF9waWNfcmVnaXN0ZXIpOiBQcm9wZXIgbnVtYmVyIG9mIGxlYWRpbmcgXyBpbiBHT1QgbGl0ZXJhbC4KICAgICAgICAqIGkzODYubWQgKHByb2xvZ3VlX2dldF9wY19hbmRfc2V0X2dvdCk6IExpa2V3aXNlLgogICAgICAgICogaTM4Ni91bml4LmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBMaWtld2lzZS4KClNhdCBBcHIgMTcgMTk6MTM6MDcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX2V4cGFuZF9wcm9sb2d1ZSk6IFVzZSBnZW5fYWRkZGkzIGluc3RlYWQgb2YKCWVtaXRfbW92ZV9pbnNuK3BsdXNfY29uc3RhbnQuICBGb3IgTlQsIGRvbid0IHVzZSB0aGUgc3RhY2sgcHJvYmUKCWxvb3AgcG9pbnRlciB0byBhbGxvY2F0ZSBzdGFjayBzcGFjZS4KCSogYWxwaGEubWQgKGFkZGRpMyk6IEFsd2F5cyB1c2UgbGRhIHRvIHNldCB0aGUgc3RhY2sgcG9pbnRlci4KCjE5OTktMDQtMTcgMjA6MTEgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogYy1hdXgtaW5mby5jLCBlbWl0LXJ0bC5jLCBleHBsb3cuYywgZXhwbWVkLmMsIGdjc2UuYywKCWhhaWZhLXNjaGVkLmMsIG9wdGFicy5jLCByZW9yZy5jLCByZXNvdXJjZS5jLCBzY2hlZC5jOiBJbmNsdWRlCgl0b3BsZXYuaCBmb3IgcmVhbCBkZWNsYXJhdGlvbiBvZiB0cmltX2ZpbGVuYW1lLgoJKiBNYWtlZmlsZS5pbjogVXBkYXRlIGRlcGVuZGVuY2llcy4KClNhdCBBcHIgMTcgMTQ6MzY6MTkgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCgkqIHRyZWUuYyAoY2hhaW5vbik6IENoZWNrIGZvciBjaXJjdWxhcml0eSBvbmx5IGlmCglFTkFCTEVfQ0hFQ0tJTkcgaXMgZGVmaW5lZC4KCjE5OTktMDQtMTcgMTA6MTUgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY2NjcC5jOiBNYWtlIGZhdGFsIG5vbi1zdGF0aWMuCgpTYXQgQXByIDE3IDIzOjQ3OjI0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kICgqYW5kcWkzXzI1NV9jbG9iYmVyLCphbmRxaTNfNjU1MzVfY2xvYmJlcik6CglOZXcgbG9naWNhbCBhbmQgcGF0dGVybnMgdXNpbmcgQzQwIGJpdC1maWVsZCBpbnNlcnQgaW5zdHJ1Y3Rpb25zLgoJKCpsc2hycWkzXzI0X2Nsb2JiZXIsKmFzaHJxaTNfMjRfY2xvYmJlciwqbHNocnFpM18xNl9jbG9iYmVyLAoJKmFzaHJxaTNfMTZfY2xvYmJlcik6IE5ldyBzaGlmdCBwYXR0ZXJucyB1c2luZyBDNDAgYml0LWZpZWxkIGluc2VydAoJaW5zdHJ1Y3Rpb25zLgoKMTk5OS0wNC0xNiAyMjo0NCAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBzeXN0ZW0uaDogQWx3YXlzIHByb3RvdHlwZSBhYm9ydC4gIFByb3RvdHlwZSBmYXRhbC4gIERlZmluZQoJYWJvcnQgdG8gY2FsbCBmYXRhbCwgbm90IGZwcmludGYvZXhpdC4gIERlZmluZSBhIHN0dWIgbWFjcm8KCWZvciB0cmltX2ZpbGVuYW1lLgoJKiB0b3BsZXYuYzogRGVmaW5lIERJUl9TRVBBUkFUT1IuICAodHJpbV9maWxlbmFtZSk6IE5ldwoJZnVuY3Rpb24uCgkqIHRvcGxldi5oOiBQcm90b3R5cGUgdHJpbV9maWxlbmFtZSwgYW5kICN1bmRlZiBzeXN0ZW0uaCdzIHN0dWIuCgoJKiBnY2MuYywgZ2VuYXR0ci5jLCBnZW5hdHRydGFiLmMsIGdlbmNvZGVzLmMsIGdlbmNvbmZpZy5jLAoJZ2VuZW1pdC5jLCBnZW5leHRyYWN0LmMsIGdlbmZsYWdzLmMsIGdlbm9waW5pdC5jLCBnZW5vdXRwdXQuYywKCWdlbnBlZXAuYywgZ2VucmVjb2cuYzogTWFrZSBmYXRhbCBub24tc3RhdGljLgoJKiBnY292LmMsIGdlbmdlbnJ0bC5jLCBwcm90b2l6ZS5jOiAjdW5kZWYgYWJvcnQgYWZ0ZXIKCWluY2x1ZGluZyBzeXN0ZW0uaC4KCgkqIGNvbmZpZy9pMzg2L2RndXguaCwgY29uZmlnL202OGsveG0tYW1peC5oOiBSZW1vdmUgc3RhbGUgY29kZQoJcmVsYXRpbmcgdG8gYWJvcnQuCgpTYXQgQXByIDE3IDExOjI1OjQ0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChtdWxxZjNfY2xycWZfY2xvYmJlciwgbXVscWkzX2NscnFpX2Nsb2JiZXIpOgoJTmV3IHBhdHRlcm5zIHRvIHN1cHBvcnQgcGFyYWxsZWwgbXVsdGlwbHkgYW5kIGxvYWQgb2YgemVyby4KCkZyaSBBcHIgMTYgMDE6MjM6NDcgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5jICh2YWxpZF9tYWNoaW5lX2F0dHJpYnV0ZSk6IElmIHdlJ3JlIG1vZGlmeWluZyB0aGUKCUZVTkNUSU9OX1RZUEUgd2l0aGluIGEgUE9JTlRFUl9UWVBFIGFuZCB3ZSBkb24ndCBnZXQgYSBkZWNsLAoJdXBkYXRlIHRoZSBQT0lOVEVSX1RZUEUuCgpGcmkgQXByIDE2IDAwOjE5OjMxIDE5OTkgIEphbiBIdWJpY2thIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogaTM4Ni5jICh4ODZfYWRqdXN0X2Nvc3QpOiBNb3ZlIGJyZWFrIHN0YXRlbWVudCB0byBjb3JyZWN0IHBsYWNlLgoKVGh1IEFwciAxNSAyMzoxNzozMyAxOTk5ICBKZXJyeSBRdWlubiA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCgkqIHBhLmggKEhBVkVfUFJFX0lOQ1JFTUVOVCwgSEFWRV9QT1NUX0lOQ1JFTUVOVCwKCUhBVkVfUFJFX0RFQ1JFTUVOVCwgSEFWRV9QT1NUX0RFQ1JFTUVOVCk6IEZpeCBwYV9jcHUgdmFsdWUgZnJvbQoJODAwMCB0byBQUk9DRVNTT1JfODAwMC4KClRodSBBcHIgMTUgMjA6NDY6NTcgMTk5OSAgRG9ubiBUZXJyeSAoZG9ubkBpbnRlcml4LmNvbSkKCgkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBGb3JjZSBwb2ludGVycyB0byBwcm9wZXIgbW9kZSBpZgoJUE9JTlRFUlNfRVhURU5EX1VOU0lHTkVEIGlzIGRlZmluZWQuCgoJKiB4bS1hbHBoYS5oIChhbGxvY2EuaCk6IEFkZCBJbnRlcml4IHRvIGxpc3Qgb2Ygc3BlY2lhbCBtYWNoaW5lcwoJdGhhdCBkb24ndCBsaWtlIGFsbG9jYS5oLCBwZW5kaW5nIHVzaW5nIGF1dG9jb25mIHJlc3VsdHMuCgoJKiBleGNlcHQuYyAoc3RhcnRfY2F0Y2hfaGFkbGVyKTogQmUgc3VyZSBydGltZV9hZGRyZXNzIGlzIFBtb2RlCglpZiBQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQuCgoJKiBleGNlcHQuYyAoZXhwYW5kX2VoX3JldHVybik6IEZvcmNlIHBvaW50ZXJzIHRvIHByb3BlciBtb2RlIGlmCglQT0lOVEVSU19FWFRFTkRfVU5TSUdORUQuCgpUaHUgQXByIDE1IDIzOjEzOjM1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lmg6ICBUd2Vha2VkIGNvbW1lbnQgZm9ybWF0dGluZy4KCSogY29uZmlnL2M0eC9jNHguYzogIExpa2V3aXNlLgoKVGh1IEFwciAxNSAwMjo0NToxOSAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCiAgICAgICAgKiBhY2xvY2FsLm00IChHQ0NfRlVOQ19NS0RJUl9UQUtFU19PTkVfQVJHKTogRGVmaW5lLgogICAgICAgICogY29uZmlndXJlLmluOiBVc2UuCiAgICAgICAgKiBjb25maWd1cmU6IFJlYnVpbHQuCiAgICAgICAgKiBhY2NvbmZpZy5oIChNS0RJUl9UQUtFU19PTkVfQVJHKTogQWRkLgogICAgICAgICogY29uZmlnLmluOiBSZWJ1aWx0LgogICAgICAgICogc3lzdGVtLmg6IFVzZS4KClRodSBBcHIgMTUgMDE6MDM6MjEgMTk5OSAgSmFuIEh1Ymlja2EgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgkJCSAgSmVmZiBMYXcgPGxhd0BjeWdudXMuY29tPgoKCSogaTM4Ni5tZCAoUUltb2RlIGFkZCBwYXR0ZXJuKTogU3VwcG9ydCBsZWEgaW5zdHJ1Y3Rpb24uCgkoSEltb2RlIGFkZCBwYXR0ZXJuKTogTGlrZXdpc2UuCgoJKiBpMzg2Lm1kIChhc2hsc2kgcGF0dGVybnMpOiBDYWxsIG91dHB1dF9hc2hsIGluc3RlYWQgb2Ygb3V0cHV0X2FzaGxzaTMuCgkoYXNobHFpKTogVXNlIGV4cGFuZGVyLCBzZXBhcmF0ZSBMRUEgYW5kIFNBTCAvIEFERCBwYXR0ZXJuczsgY2FsbAoJb3V0cHV0X2FzaGwuCgkoYXNobGhpKTogTGlrZXdpc2UuCgkqIGkzODYuaCAob3V0cHV0X2FzaGwpOiBSZW5hbWVkIGZyb20gb3V0cHV0X2FzaGxzaTMuCgkqIGkzODYuYyAob3V0cHV0X2FzaGwpOiBMaWtld2lzZTsgc3VwcG9ydCBISW1vZGUgYW5kIFFJbW9kZSBvcGVyYW5kcwoJYXMgd2VsbC4KCgkqIGkzODYubWQgKG5vdHNpLCBub3RoaSwgeG9yc2ksIHhvcmhpLCBhbmQgeG9ycWkgcGF0dGVybnMpOiBDYWxsCgltZW1vcnlfYWRkcmVzc19kaXNwbGFjZW1lbnRfbGVuZ3RoIGluc3RlYWQgb2YgbWVtb3J5X2FkZHJlc3NfbGVuZ3RoLgoJKiBpMzg2LmMgKG1lbW9yeV9hZGRyZXNzX2luZm8pOiBSZW5hbWVkIGZyb20gbWVtb3J5X2FkZHJlc3NfbGVuZ3RoLgoJQWNjZXB0IG5ldyBhcmd1bWVudCBESVNQX0xFTkdUSC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuICBJZiBESVNQX0xFTkdUSCwKCXRoZW4gcmV0dXJuIHRoZSBkaXNwbGFjZW1lbnQgbGVuZ3RoLiAgRWxzZSByZXR1cm4gbGVuZ3RoIG9mIHRoZQoJZW50aXJlIG1lbW9yeSBhZGRyZXNzLiAgSGFuZGxlIE1VTFQgY2FzZSBjb3JyZWN0bHkuCgkqIGkzODYuaCAobWVtb3J5X2FkZHJlc3NfaW5mbyk6IFVwZGF0ZSBkZWNsYXJhdGlvbi4KCgkqIGkzODYubWQgKG1lbW9yeV9iaXRfdGVzdCk6IEZpeCBwYXJlbiBlcnJvci4KCldlZCBBcHIgMTQgMjE6Mjk6MTggMTk5OSAgQW5kcmV3IEhhbGV5ICA8YXBoQGN5Z251cy5jb20+CgoJKiBmbG93LmM6IChtYWtlX2VkZ2VzKTogQWx3YXlzIG1ha2UgZWRnZXMgZnJvbSBhIGJhc2ljIGJsb2NrCgl0byBpdHMgZXhjZXB0aW9uIGhhbmRsZXJzLCBldmVuIGlmIHRoZSBibG9jayBlbmRzIHdpdGggYSBqdW1wLgoKMTk5OS0wNC0xNCAyMzoyNiAtMDQwMCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBncmFwaC5jIChub2RlX2RhdGEpOiBSZXR1cm4gdm9pZC4gIElnbm9yZSByZXN1bHQgb2YKCXByaW50X3J0bF9zaW5nbGUuICBDaGFuZ2UgY2FsbGVyIHRvIG1hdGNoLgoJKiBpbnRlZ3JhdGUuYyAoc3Vic3RfY29uc3RhbnRzKTogSW5pdGlhbGl6ZSBvcDBfbW9kZSB0byBhbgoJaW52YWxpZCBtb2RlLCBhbmQgYWJvcnQgYmVmb3JlIHVzZSBpZiBpdCdzIHN0aWxsIGludmFsaWQuCgkoQ2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBSVFhfQ0xBU1MsIFJUWF9GT1JNQVQgdGFibGVzIGFyZSBjb3JydXB0ZWQuKQoJKiBvYmpjL29iamMtYWN0LmMgKGdldF9vYmpjX3N0cmluZ19kZWNsLAoJYnVpbGRfc2VsZWN0b3JfdHJhbnNsYXRpb25fdGFibGUsIGdlbmVyYXRlX3Byb3RvY29sX2xpc3QsCglzeW50aF9pZF93aXRoX2NsYXNzX3N1ZmZpeCwgYnVpbGRfa2V5d29yZF9zZWxlY3RvciwKCWJ1aWxkX3NlbGVjdG9yX2V4cHIsIGdlbl9kZWNsYXJhdG9yKTogQWJvcnQgd2hlbiB0aGUgdHJlZQoJc3RydWN0dXJlIGlzIGNvcnJ1cHRlZC4KCldlZCBBcHIgMTQgMTk6NTc6NDkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChhbHBoYSBpbnRlcml4KTogVXNlIHN5bWJvbGljIG5hbWVzIHRvIHNldAoJdGFyZ2V0X2NwdV9kZWZhdWx0LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6IFVuZG8gbGFzdCBjaGFuZ2UuICBVc2UKCWNvbnZlcnRfbWVtb3J5X2FkZHJlc3MgaW5zdGVhZC4KCldlZCBBcHIgMTQgMTk6NDI6MDIgMTk5OSAgRG9ubiBUZXJyeSAoZG9ubkBpbnRlcml4LmNvbSkKCgkqIGFscGhhL2xpYjFmdW5jcy5hc206IE5ldyBmaWxlLgoJKiBhbHBoYS90LWludGVyaXggKGxpYjFmdW5jcy5hc20pOiBBZGQgdG8gYnVpbGQuCgoJKiBleHBsb3cuYyAoYWxsb2NhdGVfZHluYW1pY19zdGFja19zcGFjZSk6IENvcnJlY3RseSBjb252ZXJ0IFRBUkdFVAoJdG8gUG1vZGUuCgpXZWQgQXByIDE0IDE0OjI2OjM2IDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGkzODYubWQgKHRydW5jeGZkZik6IE91dHB1dCB0aGUgdGVtcGxhdGUgc3VwcGxpZWQKCWJ5IG91dHB1dF9tb3ZlX2RvdWJsZSB3aXRoIHRoZSBjb3JyZWN0IG9wZXJhbmRzLgoKCSogaTM4Ni5tZCAoZXh0ZW5kc2ZkZiwgZXh0ZW5kc2Z4ZiwgZXh0ZW5kZGZ4Zik6IFVzZQoJb3V0cHV0X2Zsb2F0X2V4dGVuZCBpbnN0ZWFkIHNwZWNpZnlpbmcgJyMnIGFzIHRoZSB0ZW1wbGF0ZS4KCSogaTM4Ni5jIChvdXRwdXRfZmxvYXRfZXh0ZW5kKTogRGVmaW5lLgoJKiBpMzg2LmggKG91dHB1dF9mbG9hdF9leHRlbmQpOiBEZWNsYXJlLgoKV2VkIEFwciAxNCAxMDo0ODowMyAxOTk5ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL2VsZi5oLCBjb25maWcvbWlwcy9lbGY2NC5oCgkoQ1RPUlNfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCgkoRFRPUlNfU0VDVElPTl9BU01fT1ApOiBEZWZpbmUuCgkoRVhUUkFfU0VDVElPTlMpOiBEZWZpbmUuCgkoSU5WT0tFX19tYWluKTogRGVmaW5lLgoJKE5BTUVfX01BSU4pOiBEZWZpbmUuCgkoU1lNQk9MX19NQUlOKTogRGVmaW5lLgoJKEVYVFJBX1NFQ1RJT05TX0ZVTkNUSU9OUyk6IERlZmluZS4KCShTRUNUSU9OX0ZVTkNUSU9OX1RFTVBMQVRFKTogRGVmaW5lLgoJKEFTTV9PVVRQVVRfQ09OU1RSVUNUT1IpOiBEZWZpbmUuCgkoQVNNX09VVFBVVF9ERVNUUlVDVE9SKTogRGVmaW5lLgoJKENUT1JfTElTVF9CRUdJTik6IERlZmluZS4KCShDVE9SX0xJU1RfRU5EKTogRGVmaW5lLgoJKERUT1JfTElTVF9CRUdJTik6IERlZmluZS4KCShEVE9SX0xJU1RfRU5EKTogRGVmaW5lLgoJKExJQl9TUEVDKTogRGVmaW5lLgoJKFNUQVJURklMRV9TUEVDKTogRGVmaW5lLgoJKEVOREZJTEVfU1BFQyk6IERlZmluZS4KCSogY29uZmlnL21pcHMvbGludXguaDogIFVuZGVmaW5lIGFsbCBvZiB0aGUgYWJvdmUuCgkqIGNvbmZpZy9taXBzL3J0ZW1zNjQuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9taXBzL3QtcjM5MDA6IExpa2V3aXNlLgoJKiBjb25maWcvbWlwcy90LWVsZjogTmV3IGZpbGUuCgkqIGNvbmZpZy9taXBzL3Z4d29ya3MuaDogTmV3IGZpbGUuCgkqIGNvbmZpZ3VyZS5pbiAobWlwcy13cnMtdnh3b3Jrcyk6IFVzZSBtaXBzL3Z4d29ya3MuaC4KCShtaXBzKi0qLSplbGYqKTogIFVzZSB0LWVsZiBpbnN0ZWFkIG9mIHQtZWNvZmYuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCldlZCBBcHIgMTQgMDk6NTk6MzggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBBbHNvIGZpbmQgZXF1aXZhbGVudCBtZW1zCglmb3Igc3VicmVncyBvZiBwc2V1ZG9zLgoKCSogYWxwaGEuYyAoYWxpZ25lZF9tZW1vcnlfb3BlcmFuZCk6IFJlY29nbml6ZSB0aGUgb3V0cHV0IG9mCglMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTLiAgRXhhbWluZSByZWdfZXF1aXZfbWVtb3J5X2xvYyBpbgoJdGhlIGV2ZW50IG9mIGEgcHNldWRvLgoJKHVuYWxpZ25lZF9tZW1vcnlfb3BlcmFuZCk6IExpa2V3aXNlLiAgRG9uJ3Qgb3RoZXJ3aXNlIGFjY2VwdAoJY29tcGxldGVseSBpbGxlZ2FsIGFkZHJlc3Nlcy4KCShub3JtYWxfbWVtb3J5X29wZXJhbmQpOiBMaWtld2lzZS4gIEhhbmRsZSBzdWJyZWdzIG9mIHBzZXVkb3MuCgkoZ2V0X2FsaWduZWRfbWVtKTogUmV2ZXJ0IHByZXZpb3VzIGNoYW5nZS4gIEFib3J0IGlmIHdlIGRvbid0IGhhdmUgYQoJbWVtLiAgRHVyaW5nIHJlbG9hZCwgY2FsbCBmaW5kX3JlcGxhY2VtZW50IG9uIGFsbCBpbGxlZ2FsIG1lbW9yaWVzLgoJKGdldF91bmFsaWduZWRfYWRkcmVzcyk6IExpa2V3aXNlLgoJKiBhbHBoYS5oIChTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTKTogVXNlICFhbGlnbmVkX21lbW9yeV9vcGVyYW5kCglpbnN0ZWFkIG9mIHVuYWxpZ25lZF9tZW1vcnlfb3BlcmFuZC4KCSogYWxwaGEubWQ6IFJldmVydCBleHRyYSBhcmd1bWVudCB0byBnZXRfYWxpZ25lZF9tZW0uCgkocmVsb2FkX2lucWkpOiBVc2UgYW55X21lbW9yeV9vcGVyYW5kIGluIGNvbnN0cmFpbnRzLiAgQWJvcnQgaWYKCXdlJ3JlIG5vdCBnaXZlbiBzb21lIHNvcnQgb2YgbWVtLgoJKHJlbG9hZF9pbmhpKTogTGlrZXdpc2UuCgkocmVsb2FkX291dHFpLCByZWxvYWRfb3V0aGkpOiBMaWtld2lzZS4KCldlZCBBcHIgMTQgMDk6Mzk6MjAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYubWQgKG5lZ2hpKTogVXNlIHRoZSB3aG9sZSByZWdpc3RlciB3aGVuIHdpZGVuaW5nIHRoZSBvcC4KCjE5OTktMDQtMTQgMTI6MzcgLTA0MDAgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZXJyb3IuYywgY3BwZXhwLmMsIGNwcGxpYi5jOiBOZXZlciBjYWxsIGFib3J0LgoJKiBjcHBoYXNoLmM6IE9ubHkgY2FsbCBhYm9ydCB3aGVuIHdlIGRldGVjdCBjb3JydXB0aW9uIG9mIHRoZQoJbWFsbG9jIGFyZW5hLgoJKiBjcHBtYWluLmM6IERvbid0IGRlZmluZSBmYXRhbCBvciBmYW5jeV9hYm9ydC4KCldlZCBBcHIgMTQgMDk6MTk6MzkgMTk5OSAgSmFuIEh1Ymlja2EgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2LmMgKHg4Nl9hZGp1c3RfY29zdCk6IEFnaSBzdGFsbCB0YWtlcyAxIGN5Y2xlIG9uIFBlbnRpdW0sIGZzdAoJcmVxdWlyZXMgdmFsdWUgdG8gYmUgcmVhZHkgb25lIGV4dHJhIGN5Y2xlLgoKV2VkIEFwciAxNCAxMToyODozNCAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjb25maWcvaTM4Ni9pMzg2LmMgKG1lbW9yeV9hZGRyZXNzX2xlbmd0aCk6IEFkZCBtaXNzaW5nIHBhcmVudGhlc2lzLgoKV2VkIEFwciAxNCAxMzo1OToyNyAxOTk5ICBNYXJ0aW4gdm9uIExvZXdpcyAgPGxvZXdpc0BpbmZvcm1hdGlrLmh1LWJlcmxpbi5kZT4KCgkqIGV4dGVuZC50ZXhpIChEZXByZWNhdGVkIEZlYXR1cmVzKTogTmV3IG5vZGUuCgkqIGludm9rZS50ZXhpICgtV2RlcHJlY2F0ZWQpOiBEb2N1bWVudC4KCldlZCBBcHIgMTQgMDA6MTg6MjIgMTk5OSAgSmFuIEh1Ymlja2EgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2Lm1kIChTSW1vZGUgbG9naWNhbCBjb21wYXJlKTogQXZvaWQgb3V0cHV0aW5nIG5vbi1wYXJpYWJsZSB0ZXN0dwoJYW5kIHRlc3RsIG9uIFBlbnRpdW0uCgkocmVnaXN0ZXIgYW5kIG1lbW9yeSBiaXQgdGVzdHMpOiBMaWtld2lzZS4KCShzZXRjYywgbm9ybWFsIGFuZCByZXZlcnNlZCBjb25kaXRpb25hbCBicmFuY2hlcyk6IFVzZSBzaG9ydGVyCglzZXF1ZW5jZSBmb3IgdGVzdGluZyBmbGFncyBzdG9yZWQgaW4gRUFYLgoKCSogaTM4Ni5tZCAoeG9yc2kzKTogRG8gbm90IG91dHB1dCBOT1QgaW5zdHJjdGlvbnMgb24gUGVudGl1bS4KCSh4b3JxaTMpOiBMaWtld2lzZS4KCSh4b3JoaTMpOiBMaWtld2lzZS4KCShub3RzaTIpOiBMaWtld2lzZS4KCShub3RxaTIpOiBMaWtld2lzZS4KCShub3RoaTIpOiBMaWtld2lzZTsgZG8gbm90IG91dHB1dCBwcmVmaXhlZCBvcGNvZGVzIHdoZW4gcG9zc2libGUuCgoJKiBpMzg2Lm1kIChuZWdoaTIpOiBEbyBub3Qgb3V0cHV0IHByZWZpeGVkIG9wY29kZSB3aGVuIHBvc3NpYmxlLgoJKGFzaGxoaTMpOiBMaWtld2lzZS4KCldlZCBBcHIgMTQgMDA6MDg6NDYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuYyAobWVtb3J5X2FkZHJlc3NfbGVuZ3RoKTogTmV3IGZ1bmN0aW9uLgoJKiBpMzg2LmggKG1lbW9yeV9hZGRyZXNzX2xlbmd0aCk6IERlY2xhcmUgaXQuCgpUdWUgQXByIDEzIDIyOjUyOjA0IDE5OTkgIERvbm4gVGVycnkgKGRvbm5AaW50ZXJpeC5jb20pCgkJCSAgTWFydGluIEhlbGxlciAoSW5nLi1CdWVyb19IZWxsZXJAdC1vbmxpbmUuZGUpCgoJKiBjb25maWd1cmUuaW4gKGludGVyaXggQWxwaGEpOiBBZGQuCgkod2lubnQgQWxwaGEpOiBVc2UgYWxwaGEzMi5oCgkoaW50ZXJpeCBpMzg2KTogUGFyYWxsZWwgQWxwaGEzMi4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogY29uZmlnL2ludGVyaXguaDogTW92ZSBjb21tb24gZWxlbWVudHMgZnJvbSBpMzg2LWludGVyaXguaC4KCSogY29uZmlnL2kzODYvaTM4Ni1pbnRlcml4Lmg6IERlbGV0ZSBzYW1lLgoJKiBjb25maWcvYWxwaGEvYWxwaGEtaW50ZXJpeC5oOiBOZXcgZmlsZS4KCgkqIGNvbmZpZy9hbHBoYS9hbHBoYTMyLmg6IE5ldyBmaWxlLCBwYXJ0IGZyb24gd2luLW50LmguCgkqIGNvbmZpZy9hbHBoYS93aW4tbnQuaDogRGVsZXRpb25zICgtPiBhbHBoYTMyLmgpLgoJKiBjb25maWcvYWxwaGEvaW50ZXJpeC5oOiBOZXcgZmlsZQoKCSogY29uZmlnL2FscGhhL2FscGhhLm1kIChpbnRlcml4KTogQ29tbWVudC4KCgkqIGNvbmZpZy9hbHBoYS94bS1hbHBoYS1pbnRlcml4Lmg6IE5ldyBmaWxlLgoKCSogY29uZmlnL2FscGhhL3QtaW50ZXJpeDogTmV3IGZpbGUuCgoJKiBmaXhpbmMvbWtmaXhpbmMuc2ggKGludGVyaXgvQWxwaGEpOiBBZGQuCgoxOTk5LTA0LTEzICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBpMzg2L3Z4aTM4Ni5oIChDUFBfQ1BVX1NQRUMpOiBEZWZpbmUgYXBwcm9wcmlhdGVseSBmb3Igdnh3b3Jrcy4KCShDUFBfUFJFREVGSU5FUywgTElCX1NQRUMsIFNUQVJURklMRV9TUEVDLCBFTkRGSUxFX1NQRUMpOiBsaWtld2lzZS4KClR1ZSBBcHIgMTMgMjE6MDE6MzYgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoZGVmYXVsdF92YWxpZF9sYW5nX2F0dHJpYnV0ZSk6IE5ldyBmbi4KCSh2YWxpZF9sYW5nX2F0dHJpYnV0ZSk6IE5ldyBjYWxsYmFjayBwdHIuCgkoZGVjbF9hdHRyaWJ1dGVzKTogQ2FsbCBpdC4gIE1vdmUgaW5pdF9wcmlvcml0eSBzdXBwb3J0IGludG8KCUMrKyBmcm9udGVuZC4KClR1ZSBBcHIgMTMgMTc6NDc6MTQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAobW92ZGkpOiBBZGQgc3BsaXR0ZXIuCgpXZWQgQXByIDE0IDEwOjA0OjI3IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChzdG9yZXFmX2ludCwgc3RvcmVxZl9pbnRfY2xvYmJlciwgbG9hZHFmX2ludCwKCWxvYWRxZl9pbnRfY2xvYmJlcik6IEFkZCBuZXcgcGF0dGVybnMgd2l0aCBjb3JyZXNwb25kaW5nIHNwbGl0dGVycwoJdG8gaGFuZGxlIG1vdmVzIG9mIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBpbnRvIGFuZCBvdXQgb2YgaW50YWdlcgoJcmVnaXN0ZXJzIGJ5IHVzaW5nIG1lbW9yeS4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9jaGVja19sZWdpdF9hZGRyKTogRGlzYWxsb3cgUFJFX0lOQyBmb3IgbW9kZXMKCW90aGVyIHRoYW4gUUZtb2RlIGFuZCBRSW1vZGUuCgkobWl4ZWRfc3VicmVnX29wZXJhbmQpOiBOZXcgZnVuY3Rpb24uCgkoYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IElmIG1vdmluZyBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGludG8gb3IKCW91dCBvZiBhbiBpbnRlZ2VyIHJlZ2lzdGVyLCB1c2UgdGhlIG5ldyBwYXR0ZXJucyBzdG9yZXFmX2ludF9jbG9iYmVyCglvciBsb2FkcWZfaW50X2Nsb2JiZXIuCgkocmVnX2ltbV9vcGVyYW5kLCAqX3JlZ19vcGVyYW5kKTogQ2FsbCByZWdfb3BlcmFuZCBpbnN0ZWFkIG9mCglyZWdpc3Rlcl9vcGVyYW5kLgoJKHJlZ19vcGVyYW5kLCBzcmNfb3BlcmFuZCk6IERpc2FsbG93IG9wZXJhbmQgaWYgaXQgc2F0aXNpZmVzCgltaXhlZF9zdWJyZWdfb3BlcmFuZC4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKG1peGVkX3N1YnJlZ19vcGVyYW5kKTogQWRkIHByb3RvdHlwZS4KClR1ZSBBcHIgMTMgMTQ6NDk6MTMgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogaTM4Ni5jIChhZ2lfZGVwZW5kZW50KTogSGFuZGxlIHB1c2ggb3BlcmF0aW9uIG1vcmUgY29ycmVjdGx5LgoKVHVlIEFwciAxMyAxNDo0NToxNyAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2Lm1kIChhbmRkaTMpOiBBZGQgJSBjb25zdHJhaW50LgoJKGlvcmRpMywgeG9yZGkzKTogTGlrZXdpc2UuCgpUdWUgQXByIDEzIDE0OjI5OjU4IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKGV4dGVuZGhpc2kyKTogT3V0cHV0IG1vdiBpbnN0ZWFkIG9mIGN3IGluc3RydWN0aW9uIGZvciBLNgoJdG8gaW1wcm92ZSBkZWNvZGluZyBiYW5kd2lkdGguCgkqIGkzODYubWQgKGV4dGVuZGhpcWkyKTogTGlrZXdpc2UuCgpUdWUgQXByIDEzIDE0OjI2OjMxIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBmcmVlc29mdC5jej4KCgkqIGkzODYubWQgKG1vdnNmX3B1c2gpOiBIYW5kbGUgbWVtb3J5IHRvIG1lbW9yeSBjYXNlIHRvbywgbmV3IHNwbGl0dGVyLgoJKG1vdmRmX3B1c2gsIG1vdnhmX3B1c2gpOiBMaWtld2lzZS4KCShtb3ZzZl9wdXNoX21lbW9yeSwgbW92ZGZfcHVzaF9tZW1vcnksIG1vdnhmX3B1c2hfbWVtb3J5KTogUmVtb3ZlLgoKVHVlIEFwciAxMyAxNDoxNDowNiAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiBpMzg2Lm1kOiBEbyBub3Qgb3V0cHV0IG1vdiAlMCxyZWcgb24gQU1EIEs2LgoKVHVlIEFwciAxMyAxMjoxNDowNyAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjcHBpbml0LmMgKGNwcF9zdGFydF9yZWFkKTogRml4IGJ1ZmZlciBvdmVyd3JpdGUuCgkqIE1ha2VmaWxlLmluIChjcHBpbml0Lm8pOiBUeXBvIGluIGRlcGVuZGVuY2llcy4KClR1ZSBBcHIgMTMgMDU6MDQ6NTkgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uaCAoZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgYXJtLmMpOiBJZmRlZiB0aGVzZSBvdXQgaWYKCUhBVkVfQ09ORklHX0ggaXMgbm90IGRlZmluZWQuCgpUdWUgQXByIDEzIDAyOjExOjExIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmM6IEF2b2lkIFVzaW5nIGltbWVkaWF0ZSB6ZXJvIGZvciByZWdpc3RlciB6ZXJvLgoJKiBwYS5tZDogTGlrZXdpc2UuCgoJKiBwYS5jIChwcmludF9vcGVyYW5kLCBjYXNlICdmJyk6IE5ldyBjYXNlIGZvciBGUCByZWdpc3RlciBvciAwLjAuCgkocHJpbnRfb3BlcmFuZCwgY2FzZSAncicpOiBVc2UgJXIwIGZvciB6ZXJvIHZhbHVlLgoJKiBwYS5tZCAobW92ZSBwYXR0ZXJucywgZmNtcCBwYXR0ZXJucyk6IFVzZSBuZXcgJWYgb3V0cHV0IGFyZy4KCgkqIHBhLmM6IFVzZSBhIHJlZ2lzdGVyIG5hbWUsIG5vdCBhIHJhdyBpbW1lZGlhdGUgaW4gYnJhbmNoLAoJY29tcGFyZS9jbGVhciwgc3ViLCBzdWJiLCB1YWRkY20gYW5kIHZzaGQgaW5zdHJ1Y3Rpb25zLgoJKiBwYS5tZDogTGlrZXdpc2UuCgoJKiBwYS5tZCwgcGEuaCwgZWUuYXNtLCBlZV9mcC5hc20sIGxpYjJmdW5jcy5hc206IExpa2V3aXNlLgoKCSogcGEuYzogVXNlIGEgcmVnaXN0ZXIgbmFtZSwgbm90IGEgcmF3IGltbWVkaWF0ZSBpbiAiYnYiIGluc3RydWN0aW9ucy4KCSogcGEubWQsIHBhLmgsIGVlLmFzbSwgZWVfZnAuYXNtLCBsaWIyZnVuY3MuYXNtOiBMaWtld2lzZS4KCgkqIHBhLmM6IFJlbW92ZSBzcGFjZSByZWdpc3RlciBzcGVjaWZpY2F0aW9uIGluIG1lbW9yeSBhZGRyZXNzZXMsCglleGNlcHQgd2hlcmUgaXQgaXMgYWN0dWFsbHkgbmVlZGVkLgoJKiBwYS5tZCwgcGEuaCwgZWUuYXNtLCBlZV9mcC5hc20sIGxpYjJmdW5jcy5hc206IExpa2V3aXNlLgoKTW9uIEFwciAxMiAyMzozNDozNSAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBBcHIgMTIgMTQ6NTg6MzAgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoKCSogcmVnLXN0YWNrLmMgKGNoZWNrX3N0YWNrX3JlZ3NfbWVudGlvbmVkKTogUmVtb3ZlIHZhcmlhYmxlIFNJWkUuCgpNb24gQXByIDEyIDE5OjE1OjE3IDE5OTkgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CgoJKiByczYwMDAvc3lzdjQuaCAoQ1BQX09TX0xJTlVYX1NQRUMpOiBBZGQgbWlzc2luZyBiYWNrc2xhc2guCgpNb24gQXByIDEyIDE5OjExOjM4IDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogaTM4Ni9jeWd3aW4uaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIC1tY29uc29sZTsgZml4CgktbW5vLW5vcC1mdW4tZGxsaW1wb3J0IGFuZCBtaW5vciBkb2MgZml4ZXMuCgkoU1RBUlRGSUxFX1NQRUMpOiBDeWd3aW4gRExMcyBkb24ndCBoYXZlIGRsbGNydDAuCgkoTElOS19TUEVDKTogQWRkIC1tY29uc29sZSBzdXBwb3J0LgoJKiBpMzg2L21pbmd3MzIuaCAoTElCX1NQRUMpOiBNYWtlIGxpYnJhcmllcyBjb25zaXN0ZW50IHdpdGgKCUN5Z3dpbi4KCShMSU5LX1NQRUMpOiBSZW1vdmUuIFVzZSBDeWd3aW4ncyB2ZXJzaW9uLgoJKE1BVEhfTElCUkFSWSk6IE1ha2UgaXQgbnVsbC4KCSogaTM4Ni9jcnRkbGwuaCAoTUFUSF9MSUJSQVJZKTogTGlrZXdpc2UuCgpGcmkgQXByIDEyIDE1OjAwOjUyIDE5OTkgIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoKCSogYy1kZWNsLmMgKGNfZGVjb2RlX29wdGlvbiwgc3RhcnRfZGVjbCwgc3RhcnRfZnVuY3Rpb24sCglmaW5pc2hfZnVuY3Rpb24pIDogUmVjb2duaXplIC1Xbm8tbWFpbiBzbyB3ZSBjYW4gYXZvaWQgd2FybmluZ3MuCgoxOTk5LTA0LTEyICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGhhc2guYyAoY29sbGVjdF9leHBhbnNpb24sIG1hY3JvZXhwYW5kLAoJcHVzaF9tYWNyb19leHBhbnNpb24pOiBNYWtlIHRoZSBlc2NhcGUgY2hhcmFjdGVyIGluIG1hY3JvCglidWZmZXJzICdccicsIG5vdCAnQCcuICBSZW1vdmUgY29kZSB0byBwcm90ZWN0IGxpdGVyYWwKCW9jY3VyZW5jZXMgb2YgdGhlIGVzY2FwZSBjaGFyYWN0ZXI7ICdccicgY2Fubm90IGFwcGVhcgoJaW4gYSBtYWNybyBidWZmZXIgdW5sZXNzIHdlIHB1dCBpdCB0aGVyZS4KCSogY3BwbGliLmMgKHNraXBfY29tbWVudCwgY29weV9jb21tZW50LCBjcHBfc2tpcF9oc3BhY2UsCgljb3B5X3Jlc3Rfb2ZfbGluZSwgY3BwX2dldF90b2tlbiwgcGFyc2Vfc3RyaW5nLAoJcGFyc2VfYXNzZXJ0aW9uKTogJ1xyJyBtaWdodCBiZSBhIGJhY2tzbGFzaC1uZXdsaW5lIG1hcmtlciwgb3IKCWl0IG1pZ2h0IGJlIGEgbWFjcm8gZXNjYXBlIG1hcmtlciwgZGVwZW5kaW5nIG9uCglDUFBfQlVGRkVSIChwZmlsZSktPmhhc19lc2NhcGVzLiAgJ0AnIGlzIG5vdCBhIHNwZWNpYWwKCWNoYXJhY3Rlci4KCSogY3BwbGliLmg6IFVwZGF0ZSBjb21tZW50YXJ5LgoKTW9uIEFwciAxMiAwOTozMDowMyAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5oICh0YXJnZXRfZnBfbmFtZSwgc3RydWN0dXJlX3NpemVfc3RyaW5nLCBhcm1fY3B1X3NlbGVjdCk6CglDb25zdC1pZnkuCgkqIGFybS5jICh0YXJnZXRfZnBfbmFtZSwgc3RydWN0dXJlX3NpemVfc3RyaW5nKTogQ29uc3QtaWZ5LgoKCSogYXJtLm1kIChyZWxvYWRfaW5oaSwgcmVsb2FkX291dGhpKTogTWFrZSB0aGUgc2NyYXRjaCBESW1vZGUuCgkqIGFybS5jIChhcm1fcmVsb2FkX2luX2hpKTogSGFuZGxlIGNhc2VzIHdoZW4gdGhlIGlucHV0IGlzIHN0aWxsCglhIHBzZXVkbywgbWFrZSB1c2Ugb2Ygc2NyYXRjaCByZWdpc3RlcnMgZm9yIHJlbG9hZGluZyB0aGUgYWRkcmVzcwoJYXMgYXBwcm9wcmlhdGUuCgkoYXJtX3JlbG9hZF9vdXRoaSk6IFNpbWlsYXJseSBmb3Igd2hlbiB0aGUgb3V0cHV0IGlzIHN0aWxsIGEgcHNldWRvLgoKCSogcmlzY2l4LmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IERvY3VtZW50LgoKMTk5OS0wNC0xMiAgQnJ1Y2UgS29yYiAgPGRkc2luYzA5QGl4Lm5ldGNvbS5jb20+CgoJKiBmaXhpbmNsdWRlczoKCW1ha2UgZml4aW5jbHVkZXMgYmVoYXZlIGxpa2UgdGhlIHNjcmlwdHMgaW4gZml4aW5jLwoKCSogTWFrZWZpbGUuaW4oIHN0bXAtZml4aW5jICk6CgllbnN1cmUgdGhlIFNIRUxMIHZhbHVlIGlzIHRoYXQgb2YgdGhlIG1ha2UKCgkqIGZpeGluY2wvaW5jbGhhY2sudHBsOgoJdGhlIGZpbGUgbmFtZSBsaXN0cyBvdWdodCB0byBiZSByZXN0cmljdGVkIHRvICIqLmgiIGFueXdheQoJQysrIGZpbGVzIG1heSBiZSBuYW1lZCAuLi4vW2Etel0rKy8uLi4gYWxzbwoJQWRkaW5nIGNvcHlyaWdodCB5ZWFyIGFuZCBhdHRyaWJ1dGlvbiB0byBvdXRwdXQKCgkqIGZpeGluY2wvaW5jbGhhY2suZGVmOgoJZml4ZWQgYnJva2VuIGV4cHJlc3Npb24KCUNsYXJpZnkgYSBzb21lIGNvbW1lbnRzCgoJKiBmaXhpbmNsL2ZpeGluY2wudHBsOgoJQ2xhcmlmeSBhIHNvbWUgY29tbWVudHMKCVJlbW92ZSBkZWFkIHRlbXBsYXRlIHRleHQKCUNvcnJlY3QgdGhlIGNvdW50aW5nIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMKCk1vbiBBcHIgMTIgMDM6MDc6NDQgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFsaWduZWRfbWVtb3J5X29wZXJhbmQpOiBIYW5kbGUgb3V0IG9mIHJhbmdlIHN0YWNrIHNsb3RzLgoJVGFrZSBhIG5ldyBTQ1JBVENIIGFyZ3VtZW50IGZvciB0aGUgb2NjYXNpb24uICBVcGRhdGUgYWxsIGNhbGxlcnMuCgkoZ2V0X3VuYWxpZ25lZF9hZGRyZXNzKTogQWJvcnQgb24gb3V0IG9mIHJhbmdlIHN0YWNrIHNsb3RzLgoJKiBhbHBoYS5tZCAoYWRkZGkzIHNwbGl0dGVyKTogQ2hlY2sgc19wX3J0eCBub3QgUkVHTk8uCgkocmVsb2FkX2lucWkpOiBDaGVjayBmb3IgYWxpZ25lZCBtZW1zIGJlZm9yZSB1bmFsaWduZWQuCgkocmVsb2FkX2luaGkpOiBMaWtld2lzZS4KCk1vbiBBcHIgMTIgMDM6MTE6MzAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChmbG93X2RlbGV0ZV9pbnNuKTogSWYgd2UgZGVsZXRlIGEgQ09ERV9MQUJFTCwgYWxzbyByZW1vdmUKCWl0IGZyb20gdGhlIG5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMgbGlzdC4KCSoganVtcC5jIChkZWxldGVfaW5zbik6IExpa2V3aXNlLgoJKGp1bXBfb3B0aW1pemVfMSk6IEFsc28gcmVjb21wdXRlIExBQkVMX05VU0VTIHdoZW4gd2UgYXJlIGp1c3QKCW1hcmtpbmcgbGFiZWxzLgoJKiBydGwuaCAocmVtb3ZlX25vZGVfZnJvbV9leHByX2xpc3QpOiBEZWNsYXJlLgoJKiBydGxhbmFsLmMgKHJlbW92ZV9ub2RlX2Zyb21fZXhwcl9saXN0KTogTmV3IGZ1bmN0aW9uLgoKTW9uIEFwciAxMiAwMjozNzowMiAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiByZWctc3RhY2suYzogVXBkYXRlIGNvbW1lbnQsIGluY2x1ZGUgdmFycmF5LmguCgkoc3RhY2tfcmVnc19tZW50aW9uZWRfZGF0YSk6IE5ldyBnbG9iYWwgdmFyaWFibGUuCgkoY2hlY2tfc3RhY2tfcmVnc19tZW50aW9uZWQpOiBOZXcgZnVuY3Rpb24uCgkoc3RhY2tfcmVnc19tZW50aW9uZWQpOiBOZXcgZnVuY3Rpb24uCgkocmVnX3RvX3N0YWNrKTogSW5pdGlhbGl6ZSBhbmQgZnJlZSBzdGFja19yZWdzX21lbnRpb25lZF9kYXRhLAoJdXNlIHN0YWNrX3JlZ3NfbWVudGlvbmVkLgoJKHJlY29yZF9hc21fcmVnX2xpZmUpOiBDaGFuZ2UgaW5zbiB0eXBlIGNhY2hlIGZvciBjaGFuZ2VkIGluc24uCgkocmVjb3JkX3JlZ19saWZlKTogRG8gbm90IGNoYW5nZSB0aGUgaW5zbiBtb2RlLgoJKGVtaXRfcG9wX2luc24pOiBMaWtld2lzZS4KCShlbWl0X3N3YXBfaW5zbik6IExpa2V3aXNlLgoJKG1vdmVfZm9yX3N0YWNrX3JlZyk6IExpa2V3aXNlLgoJKHN0YWNrX3JlZ19saWZlX2FuYWx5c2lzKTogVXNlIHN0YWNrX3JlZ3NfbWVudGlvbmVkLgoJKGVtaXRfc3dhcF9pbnNuKTogTGlrZXdpc2UuCgkoc3Vic3Rfc3RhY2tfcmVncyk6IExpa2V3aXNlLgoJKGNvbnZlcnRfcmVncyk6IExpa2V3aXNlLgoJKiBqdW1wLmMgKGZpbmRfY3Jvc3NfanVtcCk6IFVzZSBzdGFja19yZWdzX21lbnRpb25lZC4KCSogcnRsLmggKHN0YWNrX3JlZ3NfbWVudGlvbmVkKTogRGVjbGFyZS4KCk1vbiBBcHIgMTIgMDA6NTc6MTAgMTk5OSAgVGhlb2RvcmUgUGFwYWRvcG91bG8gIDxUaGVvZG9yZS5QYXBhZG9wb3Vsb0Bzb3BoaWEuaW5yaWEuZnI+CgoJKiBpbnRlZ3JhdGUuYyAoSU5URUdSQVRFX1RIUkVTSE9MRCk6IFN5bmMgaXQgd2l0aCB0aGUgY29tbWVudC4KClN1biBBcHIgMTEgMTA6MjQ6MTggMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAY29kZXNvdXJjZXJ5LmNvbT4KCgkqIHJ0bC5oIChydHhfZGVmKTogVXBkYXRlIGRvY3VtZW50YXRpb24gZm9yIGp1bXAgYW5kIGNhbGwuCgpTdW4gQXByIDExIDA3OjQzOjQ0IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZV8xKTogTWFrZSB0aGUgZGVmaW5pdGlvbiBzdGF0aWMgdG8gbWF0Y2gKCXRoZSBwcm90b3R5cGUuCgpTYXQgQXByIDEwIDIyOjUxOjUzIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBsaW1heC5wYXJ1LmNhcy5jej4KCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpcyk6IE5ldyBwYXJhbWV0ZXIgcmVtb3ZlX2RlYWRfY29kZS4KCShsaWZlX2FuYWx5c2lzXzEpOiBMaWtld2lzZS4KCShwcm9wYWdhdGVfYmxvY2spOiBMaWtld2lzZTsgdXNlIGl0LgoJKiBvdXRwdXQuaDogVXBkYXRlIHByb3RvdHlwZS4KCSogdG9wbGV2LmM6IFVwZGF0ZSBjYWxscyB0byBsaWZlX2FuYWx5c2lzLgoKU2F0IEFwciAxMCAyMjoxMjoxMiAxOTk5ICBKYW4gSHViaWNrYSAgPGh1Ymlja2FAZnJlZXNvZnQuY3o+CgoJKiByZWNvZy5jIChjb25zdHJhaW5fb3BlcmFuZHMpOiBJZ25vcmUgdW5hcnkgb3BlcmF0b3JzIHdoZW4KCW1hdGNoaW5nIG9wZXJhbmRzLiAgUmVjb2duaXplICc1Jy4uJzknIGFzIHdlbGwuCgpTYXQgQXByIDEwIDIxOjUzOjAyIDE5OTkgIFBoaWxpcHAgVGhvbWFzICAoa3Rob21hc0Bnd2RnLmRlKQoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFNldCB0YXJnZXRfY3B1X2RlZmF1bHQyIGZvciB0YXJnZXRfYWxpYXMgazYuCgkqIGkzODYuaCAoVEFSR0VUX1NXSVRDSEVTKTogUmVtb3ZlIG5vLTxjcHU+IGVudHJpZXMuCgkoQ0MxX0NQVV9TUEVDKTogTGlrZXdpc2UuCgkoQ1BQX0NQVV9ERUZBVUxUX1NQRUMpOiBTdHJlYW1saW5lIGRlZmluaXRpb24uICBBZGQgSzYgdmVyc2lvbi4KCShDUFBfSzZfU1BFQyk6IE5ldy4KCShDUFBfQ1BVX1NQRUMpOiBBZGQgSzYgdmFyaWFudC4KCShFWFRSQV9TUEVDUyk6IExpa2V3aXNlLgoKRnJpIEFwciAgOSAxMToyOToxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChtZXJnZV9ibG9ja3Nfbm9tb3ZlKTogUmV3cml0ZSB0byBwcm9wZXJseSBoYW5kbGUgdHdvCglibG9ja3MgdGhhdCB2YW5pc2ggZW50aXJlbHkgZHVyaW5nIG1lcmdpbmcuCgpTYXQgQXByIDEwIDIwOjA5OjU1IDE5OTkgIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGkzODYubWQgKGZsb2F0c2lzZjIsIGZsb2F0ZGlzZjIsIGZsb2F0c2lkZjIsIGZsb2F0ZGlkZjIsCglmbG9hdHNpeGYyLCBmbG9hdGRpeGYyLCBtb3ZzaWNjLCBtb3ZoaWNjLCBtb3ZzZmNjLCBtb3ZkZmNjLAoJbW92eGZjYywgbW92ZGljYyk6IFJlbW92ZSB1bnVzZWQgcmVnaXN0ZXIgY29uc3RyYWludHMgZnJvbQoJdGhlIHNwbGl0dGVycy4KCgkqIGkzODYubWQgKGZpeHVuc190cnVuY3Nmc2kyLCBmaXh1bnNfdHJ1bmNkZnNpMiwKCWZpeHVuc190cnVuY3hmc2kyKTogRGVsZXRlLgoKCSogcmVnLXN0YWNrLmMgKGRlbGV0ZV9pbnNuX2Zvcl9zdGFja2VyKTogRW5zdXJlIHRoYXQKCXRoZSBvbmx5IHNpZGUgZWZmZWN0cyBvZiBhIFBBUkFMTEVMIGFyZSBjbG9iYmVycy4KCShzdWJzdF9zdGFja19yZWdzKTogSGFuZGxlIHN1YnN0X3N0YWNrX3JlZ3NfcGF0IGRlbGV0aW5nCglhIFBBUkFMTEVMLgoJKiBpMzg2Lm1kIChleHRlbmRzZmRmMiwgZXh0ZW5kZGZ4ZjIsCglleHRlbmRzZnhmMik6IFJld3JpdGUgdXNpbmcgYSBzcGxpdHRlci4KCSogaTM4Ni5jIChvdXRwdXRfb3BfZnJvbV9yZWcpOiBSZW1vdmUuCgkqIGkzODYuaDogTGlrZXdpc2UuCgpTYXQgQXByIDEwIDEzOjA5OjE4IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jIChkaV9vcGVyYW5kKTogQWxsb3cgU1VCUkVHcyBhcyB3ZWxsLgoJKHNvZnRfZGZfb3BlcmFuZCk6IEFsbG93IFNVQlJFR3MgYXMgd2VsbC4KClNhdCBBcHIgMTAgMDY6MTQ6MzEgMTk5OSAgSmFuIEh1Ymlja2EgIDxodWJpY2thQHBhcnUuY2FzLmN6PgoKCSogZXh0ZW5kLnRleGkgKEFzc2VtYmxlciBJbnN0cnVjdGlvbnMgd2l0aCBDIEV4cHJlc3Npb24gT3BlcmFuZHMpOgoJRG9jdW1lbnQgdGhlIGkzODYgZmxvYXRpbmcgcG9pbnQgb3BlcmFuZHMuCgoxOTk5LTA0LTEwICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBjb25maWd1cmUuaW4gKCotKi12eHdvcmtzKTogQWRkIHZ4V29ya3MgdGhyZWFkIHN1cHBvcnQgZm9yIGFsbAoJdnhXb3JrcyB0YXJnZXRzLgoJKiBjb25maWd1cmUuaW4gKHRodW1iLXdycy14dndvcmtzKTogQWRkIHZ4V29ya3Mgc3VwcG9ydCBmb3IgdGh1bWIuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClNhdCBBcHIgMTAgMDY6MDQ6NTAgMTk5OSAgRG9ubiBUZXJyeSAgKGRvbm5AaW50ZXJpeC5jb20pCgoJKiBpMzg2L3QtaW50ZXJpeDogVXNlIG1vc3RseSBzeXN0ZW0gaGVhZGVycyB1bmNoYW5nZWQuCglVc2Ugc3lzdGVtIGFzc2VydC5oCgkqIGZpeGluYy9maXhpbmMuaW50ZXJpeDogRGl0dG8gKG1ha2UgYWxtb3N0IG5vLW9wKS4KCSogY29uZmlnL3gtaW50ZXJpeC5oIChfQUxMX1NPVVJDRSk6IGFkZCAtRAoJKiBjb25maWcveC1pbnRlcml4LmggKGNydGkubyk6IERlbGV0ZSBkZXBlbmRlbmN5LgoJKiBjb25maWcveG0taW50ZXJpeC5oIChPTkxZX0lOVF9GSUVMRFMpOiBEZWZpbmUgb25seSB3aGVuIGJvb3RzdHJhcHBpbmcuCgkqIGkzODYveG0taTM4Ni1pbnRlcml4Lmg6IE5ldyBmaWxlLgoJKiBpMzg2L2ludGVyaXguaCAoQVNNX09VVFBVVF9MSU1JVEVEX1NUUklORyk6IEZpeCB3YXJuaW5ncy4KCSogaTM4Ni9pMzg2LWludGVyaXguaDogUmVuYW1lZCBmcm9tIGludGVyaXguaC4KCSogY29uZmlndXJlLmluIChpbnRlcml4KTogVXNlIG5ldyBmaWxlcy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU2F0IEFwciAxMCAwNToyNToyOCAxOTk5ICBEYW5pZWwgSmFjb2Jvd2l0eiAgPGRhbkBkZWJpYW4ub3JnPgoKCSogcnM2MDAwL3N5c3Y0LmggKENQUF9PU19MSU5VWF9TUEVDKTogRml4IGNvbmRpdGlvbnMKCWZvciAtRHVuaXggYW5kIC1EbGludXgsIGFuZCByZW1vdmUgZHVwbGljYXRlIGRlZmluaXRpb24uCglDaGFuZ2UgLUFzeXN0ZW0obGludXgpIHRvIC1Bc3lzdGVtKHBvc2l4KS4KCShDUFBfT1NfU09MQVJJU19TUEVDKTogRml4IGNvbmRpdGlvbnMgZm9yIC1EdW5peCwgLURzdW4sCgktRFNWUjQsIC1EX19FWFRFTlNJT05TX18uCgoJKiByczYwMDAvbGludXguaCAoQ1BQX1BSRURFRklORVMpOiBSZW1vdmUgLUR1bml4LAoJLURsaW51eCwgLUFzeXN0ZW0obGludXgpLCBhbmQgLUFzeXN0ZW0odW5peCkuCgpTYXQgQXByIDEwIDA1OjE0OjUwIDE5OTkgIE1hcmsgRWxicmVjaHQgIDxzbm93YmFsbDNAdXNhLm5ldD4KCgkqIGkzODYvZGpncHAuaCAoU0VUX0FTTV9PUCk6IERlZmluZS4KCgkqIGNjY3AuYyAoRElSX1NFUEFSQVRPUik6IE1vdmUgdG8gdGhlIHRvcCBvZiB0aGUgZmlsZS4KCShpc19kaXJfc2VwYXJhdG9yKTogTmV3IGZ1bmN0aW9uLgoJKHNpbXBsaWZ5X2ZpbGVuYW1lKTogVXNlIGl0LgoJKiBjb2xsZWN0Mi5jIChmaW5kX2FfZmlsZSk6IFVzZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSBpbiBwbGFjZQoJb2YgdGhlIERJUl9TRVBBUkFUT1IgdGVzdC4KCUNvbnNpZGVyIGFueSBmaWxlIHN0YXJ0aW5nIHdpdGggYSBkcml2ZW5hbWUgdG8gYmUgYWJzb2x1dGUuCglJZiB0aGUgYWJzb2x1dGUgZmlsZW5hbWUgdGVzdCBmYWlscyBhbmQgRVhFQ1VUQUJMRV9TVUZGSVggaXMKCWRlZmluZWQsIGFwcGVuZCBFWEVDVVRBQkxFX1NVRkZJWCB0byB0aGUgZmlsZSBhbmQgdHJ5IGFnYWluLgoJKiBjcHBpbml0LmMgKGJhc2VfbmFtZSk6IFVzZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQoJaW4gcGxhY2Ugb2YgX19NU0RPU19fIGFuZCBfV0lOMzIuCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogTGlrZXdpc2UuCgkqIGdjYy5jIChJU19ESVJfU0VQQVJBVE9SKTogRGVmaW5lIG5ldyBtYWNyby4gUmV0dXJucyB0cnVlIGlmIGEKCWNoYXJhY3RlciBpcyBhIGRpcmVjdG9yeSBzZXBhcmF0b3IuCgkoZmluZF9hX2ZpbGUpOiBVc2UgaXQuCgkoY29udmVydF9maWxlbmFtZSk6IExpa2V3aXNlLgoJKHByb2Nlc3NfY29tbWFuZCk6IExpa2V3aXNlLgoJKGRvX3NwZWNfMSk6IExpa2V3aXNlLgoJKGlzX2RpcmVjdG9yeSk6IExpa2V3aXNlLgoJKG1haW4pOiBMaWtld2lzZS4KCSogcHJlZml4LmMgKElTX0RJUl9TRVBBUkFUT1IpOiBEZWZpbmUuIFRlc3RzIHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMKCWEgZGlyZWN0b3J5IHNlcGFyYXRvci4KCSh0cmFuc2xhdGVfbmFtZSk6IFVzZSBpdC4KCSh1cGRhdGVfcGF0aCk6IENoYW5nZSBESVJfU0VQQVJBVE9SXzIgdG8gRElSX1NFUEFSQVRPUi4gRml4Cgl3YXJuaW5nIGluIGJsb2NrIHdoZXJlICcvJyBpcyBjaGFuZ2VkIHRvIERJUl9TRVBBUkFUT1IuCgkqIGkzODYveG0tZGpncHAuaCAoRElSX1NFUEFSQVRPUik6IFNldCB0byAnLycuCgkoRElSX1NFUEFSQVRPUl8yKTogTmV3IG1hY3JvLiBTZXQgdG8gJ1wnLgoJKEhBVkVfRE9TX0JBU0VEX0ZJTEVTWVMpOiBEZWZpbmUuCgkqIGkzODYveG0tbWluZ3czMi5oOiBVcGRhdGVkIGNvcHlyaWdodC4gU2V0CglESVJfU0VQQVJBVE9SXzIgdG8gJy8nLiBEZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0uCgkqIGkzODYveG0tb3MyLmg6IExpa2V3aXNlLgoJKiB3aW5udC94bS13aW5udC5oOiBMaWtld2lzZS4KCSogaTM4Ni94bS1kb3MuaDogTGlrZXdpc2UuICBBZGQgY29weXJpZ2h0LgoKMTk5OS0wNC0xMCAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogcGRwMTEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG9wdGlvbiB0byB2YXJ5IGFzc2VtYmxlciBzeW50YXguCgkoVEFSR0VUX0RFRkFVTFQpOiBQb3NzaWJseSB1c2UgVU5JWCBzeW50YXguCgkoVEFSR0VUX1VOSVhfQVNNLCBUQVJHRVRfVU5JWF9BU01fREVGQVVMVCk6IE5ldyBtYWNyb3MuCgkoUkVHSVNURVJfTkFNRVMpOiBVc2UgInI1IiBpbnN0ZWFkIG9mICJmcCIuCgkoQVNNX09VVFBVVF9BTElHTik6IFVzZSAiLmV2ZW4iIGRpcmVjdGl2ZSwgYW5kIGFib3J0IGZvciBhbnkKCWdyZWF0ZXIgYWxpZ25tZW50LgoJKiAyYnNkLmggKFRBUkdFVF9VTklYX0FTTV9ERUZBVUxUKTogRGVmYXVsdCB0byBVTklYIGFzc2VtYmxlcgoJc3ludGF4IGZvciAyQlNELgoJKiBwZHAxMS5jIChvdXRwdXRfYXNjaWkpOiBVc2Ugd29ya2luZyBzeW50YXggZm9yICIuYnl0ZSIuCgkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogVXNlICIqIiBpbnN0ZWFkIG9mICJAIiB3aGVuIHVzaW5nIFVOSVgKCWFzc2VtYmxlciBzeW50YXguCgpTYXQgQXByIDEwIDAzOjUwOjEyIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJ0bC5oIChyZWJ1aWxkX2p1bXBfbGFiZWxzKTogRGVjbGFyZS4KCSoganVtcC5jIChqdW1wX29wdGltaXplXzEpOiBSZW5hbWVkIGZyb20ganVtcF9vcHRpbWl6ZS4gIE1ha2Ugc3RhdGljLgoJQWRkIG5ldyBhcmd1bWVudCBNQVJLX0xBQkVMU19PTkxZLiAgUXVpdCBhZnRlciBtYXJrX2FsbF9sYWJlbHMgaWYKCXJlcXVlc3RlZC4KCShqdW1wX29wdGltaXplLCByZWJ1aWxkX2p1bXBfbGFiZWxzKTogTmV3IHdyYXBwZXIgZnVuY3Rpb25zIGZvcgoJanVtcF9vcHRpbWl6ZV8xLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFVzZSByZWJ1aWxkX2p1bXBfbGFiZWxzIGluc3RlYWQgb2YKCXJ1bm5pbmcgdGhlIGVudGlyZSBqdW1wIG9wdGltaXplci4KCgkqIHJ0bC5oIChsb2NhbF9hbGxvYyk6IFJldHVybnMgYW4gaW50ZWdlciBub3cuCgkqIGxvY2FsLWFsbG9jLmMgKHJlY29yZGVkX2xhYmVsX3JlZik6IE5ldyBmaWxlIHNjb3BlZCB2YXJpYWJsZS4KCShsb2NhbF9hbGxvYyk6IEluaXRpYWxpemUgcmVjb3JkZWRfbGFiZWxfcmVmIHRvIHplcm8uICBSZXR1cm4gaXRzCgl2YWx1ZSB3aGVuIGxvY2FsIGFsbG9jYXRpb24gaGFzIGNvbXBsZXRlZC4KCSh1cGRhdGVfZXF1aXZfcmVncyk7IElmIHdlIGNyZWF0ZSBhbiBlcXVpdmFsZW5jZSBmb3IgYSBMQUJFTF9SRUYsCglzZXQgcmVjb3JkZWRfbGFiZWxfcmVmLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IFJ1biB0aGUganVtcCBvcHRpbWl6ZXIgYWZ0ZXIKCXJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIHJlbG9hZGluZyBpZiBuZWVkZWQuCgpGcmkgQXByICA5IDIxOjAyOjU3IDE5OTkgIEtyaXN0ZXIgV2FsZnJpZHNzb24gIChjYXRvQGRmLmx0aC5zZSkKCgkqIGkzODYvZ2FzLmggKEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04pOiBGaXggdHlwby4KCSogaTM4Ni9mcmVlYnNkLWVsZi5oIChBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOKTogTGlrZXdpc2UuCgoxOTk5LTA0LTA5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGhhc2guYyAoc3BlY2lhbF9zeW1ib2wpOiBXaGVuIGV4cGFuZGluZyBfX0xJTkVfXywgdXNlIHRoZQoJdG9wIGZpbGUgYnVmZmVyLCBub3QgdGhlIHRvcCBidWZmZXIuCgpGcmkgQXByICA5IDEzOjQxOjA0IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChjaGVjay1nKyssIGNoZWNrLWdjYywgY2hlY2stZzc3LCBjaGVjay1vYmpjKTogQWRkCgljZCAuLiB0byBUQ0xfTElCUkFSWSBjb21tYW5kLgoKRnJpIEFwciAgOSAxMzowNDo1MiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS91bmtub3duLWVsZi5oIChTVUJUQVJHRVRfQ1BVX0RFRkFVTFQpOiBPbmx5IGRlZmluZSBpZgoJbm90IGFscmVhZHkgc3BlY2lmaWVkLgoKRnJpIEFwciAgOSAxMToxODo1NSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMsIEFfSU5JVF9QUklPUklUWSk6IEFsbG93IGFycmF5cwoJb2YgY2xhc3NlcywgdG9vLgoKRnJpIEFwciAgOSAxMDo0MDoxMCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQHNuYWZ1LnJ1dGdlcnMuZWR1PgoKCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zLCBwdHQsIHJzNjAwMF9maWxlX3N0YXJ0LAoJcnM2MDAwX2Zsb2F0X2NvbnN0LCByczYwMDBfcmVwbGFjZV9yZWdubywgZGVidWdfc3RhY2tfaW5mbywKCXJzNjAwMF9vdXRwdXRfbG9hZF90b2NfdGFibGUsIG91dHB1dF9wcm9sb2csIG91dHB1dF9lcGlsb2cpOgoJQ29uc3QtaWZ5IGEgY2hhciouCgkob3V0cHV0X21pX3RodW5rKTogTGlrZXdpc2UuICBNYXJrIHBhcmFtZXRlciBgdGh1bmtfZm5kZWNsJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELiAgSGlkZSB1bnVzZWQgdmFyaWFibGVzIGByMCcsIGBzcCcsIGB0b2MnLAoJYHNjaGFpbicsIGByMTInLCBgYnVmJyBhbmQgYGxhYmVsbm8nLgoJKG91dHB1dF9hc2NpaSk6IENvbnN0LWlmeSBhIGNoYXIqLgoJKHJzNjAwMF9nZW5fc2VjdGlvbl9uYW1lKTogSW5pdGlhbGl6ZSB2YXJpYWJsZSBgbGFzdF9wZXJpb2QnLgoJKHJzNjAwMF9hZGp1c3RfcHJpb3JpdHkpOiBNYXJrIHBhcmFtZXRlciBgaW5zbicgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShyczYwMDBfdHJhbXBvbGluZV90ZW1wbGF0ZSwgcnM2MDAwX2RsbF9pbXBvcnRfcmVmLAoJcnM2MDAwX2xvbmdjYWxsX3JlZiwgcnM2MDAwX2VuY29kZV9zZWN0aW9uX2luZm8pOiBDb25zdC1pZnkgYSBjaGFyKi4KCgkqIHJzNjAwMC5oIChvZmZzZXR0YWJsZV9tZW1fb3BlcmFuZCwgb3B0aW1pemF0aW9uX29wdGlvbnMpOiBBZGQKCXByb3RvdHlwZXMuCgoJKiByczYwMDAubWQgKG1vdmRpLCBkZWZpbmVfc3BsaXQpOiBDYXN0IGEgdmFsdWUgdG8gSE9TVF9XSURFX0lOVAoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgpUaHUgQXByICA4IDE5OjIwOjE4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgQVJSQVlfUkVGLCBDT01QT05FTlRfUkVGLCBCSVRfRklFTERfUkVGKToKCURvIG5vdCB0cnkgdG8gb3B0aW1pemUgYSBhZ2dyZWdhdGUgYWRkcmVzcyB3aGljaCBoYXMgVk9JRG1vZGUuCglNaXJyb3JzIE1hcmNoIDIzIGNoYW5nZSB0byBleHBhbmRfYXNzaWdubWVudC4KCgkqIGZsb3cuYyAoZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcyk6IERvIG5vdCByZXF1aXJlIEVER0VfRkFMTFRIUlUKCWZvciBhbiBlZGdlIHdoZW4gdGlkeWluZyBhbiBlZGdlIHdoaWNoIGNvbm5lY3RzIGNvbnNlY3V0aXZlIGJhc2ljCglibG9ja3MuCgoJKiBmbG93LmMgKGNhbl9kZWxldGVfbGFiZWxfcCk6IERvIG5vdCBjb252ZXJ0IGEgbGFiZWwgaW50byBhCglkZWxldGVkIGxhYmVsIGhlcmUuCgoJKiBjc2UuYyAoZmx1c2hfaGFzaF90YWJsZSk6IE5ldyBmdW5jdGlvbi4KCShjc2VfaW5zbik6IEZsdXNoIHRoZSBoYXNoIHRhYmxlIHdoZW4gd2UgZW5jb3VudGVyIGEgdm9sYXRpbGUgYXNtLgoJKGNzZV9iYXNpY19ibG9jayk6IFVzZSBmbHVzaF9oYXNoX3RhYmxlIGluc3RlYWQgb2YgZG9pbmcgaXQKCWlubGluZS4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9yZWdzXzEpOiBGbHVzaCBrbm93biByZWdpc3RlciB2YWx1ZXMgaWYKCXdlIGVuY291bnRlciBhIHZvbGF0aWxlIGFzbS4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogUmUtZW5hYmxlIEpvZXJuJ3MgbG9vcCBpbXByb3ZlbWVudHMuCgpUaHUgQXByICA4IDA5OjM3OjQwIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fcHJpbnRfb3BlcmFuZCk6IFVuZG8gcHJldmlvdXMgY2hhbmdlIC0KCWFsd2F5cyBwcmludCBsYXJnZSBjb25zdGFudHMgaW4gZGVjaW1hbC4KClRodSBBcHIgIDggMTA6MjI6MjMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlndXJlLmluIChob3N0X3htX2ZpbGUsIGJ1aWxkX3htX2ZpbGUpOiBJbmNsdWRlIGh3aW50LmguCglVc2UgY2FzZSBzdGF0ZW1lbnRzIGluc3RlYWQgb2YgImlmIHRlc3QgLWEgLi4uIC1hIC4uLiAtYSAuLi4iCgoJKiBtYWNobW9kZS5oOiBEb24ndCBkZWZpbmUgSE9TVF9XSURFX0lOVCwgZXRjLiBXcmFwIHVzZSBvZgoJSE9TVF9XSURFX0lOVCBpbiAjaWZkZWYuCgoJKiBtaXBzLmg6IEluY2x1ZGUgaHdpbnQuaCBpbnN0ZWFkIG9mIHByb3ZpZGluZyBkZWZpbml0aW9ucyBmb3IKCUhPU1RfV0lERV9JTlQsIGV0Yy4gIFdyYXAgdXNlcyBvZiBIT1NUX1dJREVfSU5UIGluICNpZmRlZi4KClRodSBBcHIgIDggMDY6MTY6MTQgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAodHJ1bmNkZnNmMiwgdHJ1bmN4ZnNmMiwKCXRydW5jeGZkZjIpOiBSZXdyaXRlIHVzaW5nIGEgc3BsaXR0ZXIuCgpUaHUgQXByICA4IDAxOjI2OjA1IDE5OTkgIEFyZyBIYWFzICAoYWhhYXNAbmVvc29mdC5jb20pCgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnJlZWJzZC1lbGYuaCAoQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTik6IEF2b2lkIGFtYmlndW91cwoJZWxzZSBzdGF0ZW1lbnQuCgkqIGdhcy5oIChBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOKTogTGlrZXdpc2UuCgkqIGxpbnV4LmggKEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04pOiBMaWtld2lzZS4KCSogb3BlbmJzZC5oIChBU01fT1VUUFVUX01BWF9TS0lQX0FMSUdOKTogTGlrZXdpc2UuCgpXZWQgQXByICA3IDIyOjQwOjE5IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGk5NjAvaTk2MC5jIChpOTYwX2Z1bmN0aW9uX3Byb2xvZ3VlKTogRG9uJ3Qgc2F2ZSBzdGF0aWMgY2hhaW4KCXBvaW50ZXIuCgkqIGk5NjAvaTk2MC5oIChTVEFDS19DSEFJTl9SRUdOVU0pOiBDaGFuZ2UgZnJvbSByMyB0byBnMTIuCgkoVFJBTVBPTElORV9URU1QTEFURSk6IExpa2V3aXNlLgoJKEZSQU1FX1BPSU5URVJfUkVRVUlSRUQpOiBDaGVjayBjdXJyZW50X2Z1bmN0aW9uX2hhc19ub25sb2NhbF9nb3RvLgoJKiBpOTYwL2k5NjAubWQgKG5vbmxvY2FsX2dvdG8pOiBSZXdyaXRlLgoKVHVlIEFwciAgNiAxNzo0OTo0OSAxOTk5ICBQaGlsaXAgQmx1bmRlbGwgIDxwYkBuZXh1cy5jby51az4KCgkqIGNvbmZpZy9hcm0vbGliMWZ1bmNzLmFzbTogVGVzdCBmb3IgX19FTEZfXyBub3QgX19lbGZfXy4KCldlZCBBcHIgIDcgMTQ6MDc6MzQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaDgzMDAuYyAoaDgzMDBfYWRqdXN0X2luc25fbGVuZ3RoKTogQWxzbyBhdm9pZCByZWNvZ25pemluZwoJQUREUl9WRUMgYW5kIEFERFJfRElGRl9WRUMgaW5zbnMuCgoJKiBoODMwMC5jIChoODMwMF9hZGp1c3RfaW5zbl9sZW5ndGgpOiBBdm9pZCB0cnlpbmcgdG8gcmVjb2duaXplCglVU0UsIENMT0JCRVIgb3IgU0VRVUVOQ0UgaW5zbnMuCgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBGb3IgSEFWRV9jYzAgbWFjaGluZXMsIGFkanVzdCBjb3B5X2VuZF9sdWlkCgl0byBhY2NvdW50IGZvciB0aGUgdW5jb3BpZWQgaW5zbiB0aGF0IHNldHMgY2MwIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AuCgoJKiB1bnJvbGwuYyAoY29weV9sb29wX2JvZHkpOiBBbHdheXMgZW5zdXJlIGF0IGxlYXN0IHR3byBpbnNucwoJYXJlIGluIHRoZSBjb3BpZWQgbG9vcC4KCldlZCBBcHIgIDcgMTQ6NTI6MTggMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9lbGYuaCAoTUFLRV9ERUNMX09ORV9PTkxZKTogRGVmaW5lLgoJKFVOSVFVRV9TRUNUSU9OX1ApOiBEZWZpbmUuCgoxOTk5LTA0LTA3ICBCcnVjZSBLb3JiICA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9pbmNsaGFjay50cGwgJiBmaXhpbmNsLnRwbDoKCVJlbW92ZSBkeW5hbWljIGNvbnRlbnQgZnJvbSBnZW5lcmF0ZWQgZmlsZXMKCldlZCBBcHIgIDcgMTM6MTY6MjIgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5jIChvdXRwdXRfbW92ZV9tZW1vcnkpOiBSZW1vdmUuCgkqIGkzODYuaDogTGlrZXdpc2UuCgoJKiBpMzg2Lm1kIChtb3ZzaSwgbW92aGksIG1vdnN0cmljdGhpLCBtb3ZxaSwgbW92c3RyaWN0cWksCgltb3ZzZiwgbW92ZGYsIG1vdnhmLCBtb3ZkaSk6IENoZWNrIG5vX25ld19wc2V1ZG9zIGluc3RlYWQKCW9mIChyZWxvYWRfaW5fcHJvZ3Jlc3MgfCByZWxvYWRfY29tcGxldGVkKS4KCldlZCBBcHIgIDcgMDM6MTY6NDUgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKHJlZ19ub19zdWJyZWdfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbi4KCSogYWxwaGEuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGl0LgoJKiBhbHBoYS5tZCAoZmxvYXRkaT9mIHBhdHRlcm5zKTogVXNlIGl0IGZvciBvcDEuCgoJKiBhbHBoYS5jIChhbHBoYV9lbmRfZnVuY3Rpb24pOiBEb24ndCBmbGFnIHdlYWsgZnVuY3Rpb25zLgoKV2VkIEFwciAgNyAwMjoxMTo1NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfYnVpbHRpbikgW0JVSUxUX0lOX1JFVFVSTl9BRERSRVNTXTogVXNlCgljb3B5X3RvX21vZGVfcmVnOyBkb24ndCBmb3JjZSBjb25zdGFudHMgaW50byBhIHJlZ2lzdGVyLgoKVHVlIEFwciAgNiAyMjo1NToyNSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFR5cG8gZmxvd19kdW1wIC0+IGZsb3cyX2R1bXAuCgoxOTk5LTA0LTA2ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CgoJKiBwZHAxMS5jIChzaW1wbGVfbWVtb3J5X29wZXJhbmQpOiBBZGQgZGVmYXVsdCBjYXNlIGluIHN3aXRjaC4KCSogcGRwMTEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGhlbHAgc3RyaW5ncy4KCShOT1RJQ0VfVVBEQVRFX0NDKTogRG9uJ3QgaW5jbHVkZSBleGNlc3MgYXJndW1lbnQgdG8gZm9ybWF0LgoJKEFTTV9PVVRQVVRfRE9VQkxFX0lOVCk6IFJlbW92ZS4KClR1ZSBBcHIgIDYgMjI6MDk6NDAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZXhwYW5kX2J1aWx0aW5fc2V0am1wKTogUHV0IHNldGptcCByZXR1cm4gbGFiZWwgb24KCW5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMgZm9yIGZsb3cuCgpUdWUgQXByICA2IDIyOjA1OjIxIDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBwYXJ1LmNhcy5jej4KCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jICh2ZXJpZnlfZmxvd19pbmZvKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmRfYmFzaWNfYmxvY2tzKTogQ2FsbCBpdCBpZiBFTkFCTEVfQ0hFQ0tJTkcuCgkobWVyZ2VfYmxvY2tzKTogRG9uJ3QgbWVyZ2UgaWYgdGhlcmUgYXJlIG5vbi1kZWxldGFibGUgbGFiZWxzLgoJKiB0b3BsZXYuYyAoZmF0YWxfaW5zbik6IEFsbG93IGEgcHJpbnRmLXN0eWxlIGFyZyBsaXN0LgoJKiB0b3BsZXYuaCAoZmF0YWxfaW5zbik6IFVwZGF0ZSBwcm90b3R5cGUuCgpUdWUgQXByICA2IDE2OjE4OjU4IDE5OTkgIEphbiBIdWJpY2thICA8aHViaWNrYUBwYXJ1LmNhcy5jej4KCgkqIGZsb3cuYyAoc3BsaXRfZWRnZSkgdXBkYXRlIGNvcnJlY3RseSBmbG93IGdyYXBoLCBkaXNhYmxlCglFREdFX0NSSVRJQ0FMIGZsYWcgb24gdGhlIHNwbGl0IGVkZ2UsIHVwZGF0ZSBOVVNFUyBmb3IgbmV3IGxhYmVsLgoKVHVlIEFwciAgNiAxNTo0Nzo1MSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAoZ2VuX3J0eF9DT05TVF9ET1VCTEUpOiBVc2UgWFdJTlQgbm90IFhJTlQuCglDbGVhciB0aGlyZCBhbmQgZm9sbG93aW5nIHNsb3RzLCBpZiB0aGV5IGV4aXN0LgoKVHVlIEFwciAgNiAxNTo0NToyOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChjcmVhdGVfYmFzaWNfYmxvY2spOiBNYWtlIHN1cmUgdGhlIGJiIG5vdGUgaXMgaW4gdGhlIGJsb2NrLgoJKGNhbl9kZWxldGVfbm90ZV9wKTogUmVuYW1lIGZyb20gZGVsZXRlX25vdGVfcC4KCShkZWxldGVfaW5zbl9jaGFpbik6IFByZXNlcnZlIHVuZGVsZXRlYWJsZSBsYWJlbHMgdG9vLgoJKHRpZHlfZmFsbHRocnVfZWRnZSk6IFVzZSBuZXh0X3JlYWxfaW5zbiBpbnN0ZWFkIG9mIGNvbmZ1c2luZwoJaW5saW5lIGNvZGUuCgoxOTk5LTA0LTA2ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGV4cC5jIChwYXJzZV9jaGFyY29uc3QpOiBJbml0aWFsaXplIGMuCgkoY3BwX3BhcnNlX2V4cHIpOiBJbml0aWFsaXplIHJwcmlvLgoJKiBjcHBmaWxlcy5jIChtZXJnZV9pbmNsdWRlX2NoYWlucyk6IEluaXRpYWxpemUgcHJldi4KCShmaW5jbHVkZSk6IFNldCBmcC0+bGluZV9iYXNlIHRvIGZwLT5idWYgYmVmb3JlIHJldHVybmluZy4KCSogY3BwaGFzaC5jIChtYWNyb2V4cGFuZCk6IEluaXRpYWxpemUgdG9rZW4uCgkqIGNwcHNwZWMuYyAobGFuZ19zcGVjaWZpY19kcml2ZXIpOiBDaGFuZ2Ugc3VmZiB0bwoJY29uc3QgY2hhciAqY29uc3QgKi4KCjE5OTktMDQtMDYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwaW5pdC5jIChpbnN0YWxsX3ByZWRlZnMpOiBEZWxldGUgZnVuY3Rpb24uCgkoY3BwX3N0YXJ0X3JlYWQpOiBEb24ndCBjYWxsIGluc3RhbGxfcHJlZGVmcy4KCShjcHBfaGFuZGxlX29wdGlvbik6IFJlbW92ZSBjYXNlICd1JyBhbmQgYWxsIHJlZnMgdG8KCW9wdHMtPmluaGliaXRfcHJlZGVmcy4KCShwcmludF9oZWxwKTogRG9uJ3QgbWVudGlvbiAtdW5kZWYuCgkoaW5pdGlhbGl6ZV9idWlsdGlucyk6IERlZmluZSBfX0hBVkVfQlVJTFRJTl9TRVRKTVBfXywgdG8KCW1hdGNoIGNjY3AuCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX29wdGlvbnMpOiBSZW1vdmUgaW5oaWJpdF9wcmVkZWZzCgltZW1iZXIuCgoJKiBjY2NwLmMgKHByZWRlZnMpOiBEZWxldGUgdmFyaWFibGUuCgkobWFpbik6IFJlbW92ZSBjYXNlICd1JyBpbiBhcmd1bWVudCBwYXJzZSBsb29wLAoJJ2luaGliaXRfcHJlZGVmcycgdmFyaWFibGUsIGFuZCB0aGUgY29kZSBibG9jayB0aGF0IHdvdWxkCglwcm9jZXNzIENQUF9QUkVERUZJTkVTLgoJKGluaXRpYWxpemVfYnVpbHRpbnMpOiBEb24ndCBkZWZpbmUgX19PQkpDX18sIHRoZSBkcml2ZXIgd2lsbAoJZG8gdGhhdC4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFJlbW92ZSAtdW5kZWYgZnJvbSBhbGwgc3BlY3MgdGhhdAoJaW52b2tlIGEgQyBwcmVwcm9jZXNzb3IuCgkqIGNoL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgkqIGNwL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgkqIGYvbGFuZy1zcGVjcy5oOiBMaWtld2lzZS4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoKTW9uIEFwciAgNSAxMTo1NTozMSAxOTk5ICBEb25uIFRlcnJ5ICAoZG9ubkBpbnRlcml4LmNvbSkKCgkqIE1ha2VmaWxlLmluIChTVUJESVJfRkxBR1NfVE9fUEFTUyk6IEZpeCBtaXNhcHBsaWVkIHBhdGNoLgoKTW9uIEFwciAgNSAxMTo1MTozOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChtb3ZkZik6IEhpZGUgR1BSIHNvdXJjZXMgJiBkZXN0aW5hdGlvbnMgZnJvbSByZWdjbGFzcy4KCk1vbiBBcHIgIDUgMDk6NTQ6NDIgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gQXByICA1IDA1OjU1OjE1IDE5OTkgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jbC50cGw6IFNlcGFyYXRlICItZSIgZnJvbSBpdHMgYXJndW1lbnQsIGEgbGEKCXRoZSBTYXQgQXByICAzIDE3OjA1OjEzIDE5OTkgZml4LgoJKiBnZW5maXhlczogRW5zdXJlIHRoYXQgdGhlIHNlcnZlciBzaGVsbCBpcyBfTk9UXyBjc2guCgpNb24gQXByICA1IDAzOjUyOjMwIDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIEFwciAgNSAwNDo0NzoxNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2LmMgKHg4Nl9kb3VibGVfd2l0aF9hZGQpOiBUdXJuIG9mZiBmb3IgUGVudGl1bSBhbmQgUFByby4KCShzbWFsbF9zaGlmdF9vcGVyYW5kLCBvdXRwdXRfYXNobHNpMyk6IE5ldyBmdW5jdGlvbnMuCgkqIGkzODYuaCAoc21hbGxfc2hpZnRfb3BlcmFuZCwgb3V0cHV0X2FzaGxzaTMpOiBEZWNsYXJlLgoJKiBpMzg2Lm1kIChhc2hsc2kzKTogU2ltcGxpZnkgYWhsc2kzIHBhdHRlcm5zLiAgUmVtb3ZlIHNwbGl0dGVycwoJdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KClN1biBBcHIgIDQgMDQ6MDU6MDQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3RtdC5jIChleHBhbmRfbG9vcF9lbmQpOiBXaGVuIGNvcHlpbmcgdGhlIGxvb3AgZXhpdCB0ZXN0LAoJZG8gbm90IHdhbGsgaW50byBhIG5lc3RlZCBsb29wLgoKU3VuIEFwciAgNCAwMDoxNDo1NCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaGFja3NoZWxsLnRwbDogU2tpcCBsaW5rcyB0byBkaXJlY3RvcmllcywgdG8gYXZvaWQKCXJlbW92aW5nIHRoZW0uCgkqIGZpeGluYy9pbmNsaGFjay50cGw6IExpa2V3aXNlLgoJKiBmaXhpbmMvZml4aW5jLnNoLCBmaXhpbmMvZml4aW5jbC54LCBmaXhpbmMvaW5jbGhhY2suc2g6IFJlYnVpbHQuCgpTYXQgQXByICAzIDIzOjQ2OjEzIDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoYWRkc2kzLCBpb3JzaTMsIHhvcnNpMywgYWRkZGkzLCBpb3JkaTMsIHhvcmRpMywKCW1vdnNpX2dvdCwgbW92c2ksIG1vdnNmKTogVXNlIG5vX25ld19wc2V1ZG9zLgoJKiByczYwMDAuYyAocnM2MDAwX2dvdF9yZWdpc3Rlcik6IExpa2V3aXNlLgoJKG9mZnNldHRhYmxlX21lbV9vcGVyZWFuZCk6IFVzZSB8fCBub3QgfC4KClNhdCBBcHIgIDMgMjI6MDI6NTYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogYWNjb25maWcuaCAoRU5BQkxFX0NIRUNLSU5HKTogUmVtb3ZlIHJlZHVuZGFudCAjdW5kZWYuCgkqIGNvbmZpZy5pbjogUmVidWlsdC4KClNhdCBBcHIgIDMgMTY6MjI6NTkgMTk5OSAgVG9zaGl5YXN1IE1vcml0YSAgKHRtQG5ldGNvbS5jb20pCgoJKiBnY2MudGV4aTogQWRkIGluZm8gb24gcmVnbW92ZSBwYXNzLgoKCSogcmVnbW92ZS5jIChmaXh1cF9tYXRjaF8xKTogQ29uc2lzdGVudGx5IGV2YWx1YXRlCglIQVZFX1BPU1RfSU5DUkVNRU5UIGFuZCBIQVZFX1BPU1RfREVDUkVNRU5ULgoKU2F0IEFwciAgMyAxOToyMTowNSAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNvbmZpZ3VyZS5pbiAoREVGQVVMVF9MSU5LRVIsIERFRkFVTFRfQVNTRU1CTEVSKTogVXNlIGdyZXAKCWluc3RlYWQgb2YgdGVzdCBhbmQgc2VkIHRvIGNoZWNrIHdoZXRoZXIgdGhleSdyZSBHTlUgcHJvZ3JhbXMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClNhdCBBcHIgIDMgMTc6NTc6MzUgMTk5OSAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1oZWFkZXJzLXRhciwgaW5zdGFsbC1oZWFkZXJzLWNwaW8pOiBBdm9pZAoJcHJvYmxlbXMgd2l0aCBDRFBBVEguCglSZXBvcnRlZCBieSBSYWxmIENhbmlzIDxjYW5pc0BiaWdmb290LmNvbT4KClNhdCBBcHIgIDMgMTM6NTA6MTYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jLng4Ni1saW51eC1nbnU6IERlbGV0ZWQuCgpTYXQgQXByICAzIDE3OjA1OjEzIDE5OTkgIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogaW5jbGhhY2sudHBsOiBJbnNlcnQgc3BhY2VzIGJldHdlZW4gYHNlZCAtZScgYW5kICcuLi4nLgoJUmVwb3J0ZWQgYnkgS2F2ZWggUi4gR2hhemkgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgkqIGZpeGluYy9maXhpbmNsLnNoLCBmaXhpbmMvZml4aW5jbC54LCBmaXhpbmMvaW5jbGhhY2suc2g6IFJlZ2VuLgoKU2F0IEFwciAgMyAxNDo1NDo0NiAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgoKCSogdHJlZS5kZWYgKEJMT0NLKTogRml4IHR5cG8gaW4gY29tbWVudC4KClNhdCBBcHIgIDMgMDA6NTM6MjkgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAoZmxvYXRzaXNmMiwgZmxvYXRkaXNmMiwgZmxvYXRzaWRmMiwgZmxvYXRkaWRmMiwKCWZsb2F0c2l4ZjIsIGZsb2F0ZGl4ZjIpOiBSZXdyaXRlIHVzaW5nIGEgc3BsaXR0ZXIuCgpGcmkgQXByICAyIDE3OjM2OjEwIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fcHJpbnRfb3BlcmFuZCk6IFByaW50IGxhcmdlIGNvbnN0YW50cyBpbgoJaGV4IHJhdGhlciB0aGFuIGRlY2ltYWwuCgpGcmkgQXByICAyIDE3OjIzOjU4IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnR4KTogVXNlIGJvdGggSE9TVF9XSURFX0lOVF9QUklOVF9ERUMKCWFuZCBIT1NUX1dJREVfSU5UX1BSSU5UX0hFWCB0byBkaXNwbGF5IGNvbnN0YW50cy4KCjE5OTktMDQtMDIgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY29uZmlnL2kzODYvaTM4Ni5oOiBEb2N1bWVudCBhbGwgVEFSR0VUX1NXSVRDSEVTIG9yIGFkZAoJZXhwbGljaXQgbnVsbCBpbml0aWFsaXplci4KCgkqIGNvbmZpZy9pMzg2L2N5Z3dpbi5oOiBEb2N1bWVudCBhbGwgU1VCVEFSR0VUX1NXSVRDSEVTLgoJKiBjb25maWcvaTM4Ni9kZ3V4Lmg6IExpa2V3aXNlLgoJKiBjb25maWcvaTM4Ni9vc2YxZWxmLmg6IExpa2V3aXNlLgoJKiBjb25maWcvaTM4Ni93aW4zMi5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvb3Nmcm9zZS5oOiBMaWtld2lzZS4gIERyb3Agb2Jzb2xldGUgLW1uby1pZGVudCBvcHRpb24uCgpGcmkgQXByICAyIDE3OjQ5OjQ0IDE5OTkgIFRvc2hpeWFzdSBNb3JpdGEgIDx0bUBuZXRjb20uY29tPgoKCSogcmVnbW92ZS5jIChmaXh1cF9tYXRjaF8xKTogUmVtb3ZlIG5vdyB1c2VsZXNzIGlmICgwKS4KClNhdCBBcHIgIDMgMTE6Mzc6MjAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogdG0udGV4aSAoVVNFX0xPQURfUE9TVF9ERUNSRU1FTlQsIFVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRG9jdW1lbnQuCgkoVVNFX0xPQURfUE9TVF9JTkNSRU1FTlQsIFVTRV9MT0FEX1BSRV9JTkNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfSU5DUkVNRU5UKTogRml4IGRvY3VtZW50YXRpb24uCgoJKiBydGwuaAkoVVNFX0xPQURfUE9TVF9ERUNSRU1FTlQsIFVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5ULAoJVVNFX0xPQURfUE9TVF9JTkNSRU1FTlQsIFVTRV9MT0FEX1BSRV9JTkNSRU1FTlQsCglVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfSU5DUkVNRU5UKTogUHJvdmlkZSBkZWZhdWx0CglkZWZpbml0aW9uLgoKCSogZXhwci5jIChVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwgVVNFX0xPQURfUFJFX0lOQ1JFTUVOVCwKCVVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCwgVVNFX1NUT1JFX1BSRV9JTkNSRU1FTlQpOiBEZWxldGUgZGVmYXVsdAoJZGVmaW5pdGlvbi4KCkZyaSBBcHIgIDIgMTY6MDM6MDUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jLmRndXgsIGZpeGluYy5pbnRlcml4LCBmaXhpbmMuaXJpeCwgZml4aW5jLnB0eDogRGVsZXRlZC4KCSogZml4aW5jLnNjbywgZml4aW5jLnN2cjQsIGZpeGluYy53aW5udCwgZml4aW5jLndyYXA6IExpa2V3aXNlLgoKRnJpIEFwciAgMiAxNTo0NjoyNSAxOTk5ICBEb25uIFRlcnJ5ICAoZG9ubkBpbnRlcml4LmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogU2V0IGFuZCBzdWJzdGl0dXRlIHF1b3RlZF9jY19zZXRfYnlfY29uZmlndXJlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIE1ha2VmaWxlLmluIChTVUJESVJfRkxBR1NfVE9fUEFTUyk6IEZpeCBxdW90aW5nIHByb2JsZW0gd2l0aCBgYC4KCkZyaSBBcHIgIDIgMTQ6MzU6NDUgMTk5OSAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBjb25maWcvaTM4Ni9jeWd3aW4uaCAoQ1BQX1NQRUMpOiBVc2UgbWluZ3dfaW5jbHVkZV9wYXRoIGluc3RlYWQKCW9mIGEgaGFyZGNvZGVkIHBhdGggZm9yIC1tbm8tY3lnd2luLgoJKG1pbmd3X2luY2x1ZGVfcGF0aCk6IE5ldy4KCjE5OTktMDQtMDIgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLmM6IEluY2x1ZGUgInJlY29nLmgiLgoJKG91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBucmVncycsIGBpJywKCWBvZmZzZXQnLgoJKG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCglgbWF5X2NhbGxfYWxsb2NhJywgYG5yZWdzJywgYHJlZ25vJywgYGFkanVzdF9mcCcuCgkob3V0cHV0X2FzY2lpKTogTWFyayBhcyByZXR1cm5pbmcgdm9pZC4KCShwcmludF9vcGVyYW5kX2FkZHJlc3M6IExpa2V3aXNlLgoJKHNpbXBsZV9tZW1vcnlfb3BlcmFuZCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBwbHVzMCcsIGBwbHVzMScsCglgb2Zmc2V0Jy4KCSogcGRwMTEuaDogRGVjbGFyZSBmdW5jdGlvbnMgYGFyaXRoX29wZXJhbmQnLAoJYGNvbnN0X2ltbWVkaWF0ZV9vcGVyYW5kJywgYGV4cGFuZF9zaGlmdF9vcGVyYW5kJywKCWBsZWdpdGltYXRlX2FkZHJlc3NfcCcsIGBub3RpY2VfdXBkYXRlX2NjX29uX3NldCcsIGBvdXRwdXRfYXNjaWknLAoJYG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZScsIGBvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUnLAoJYHByaW50X29wZXJhbmRfYWRkcmVzcycsIGByZWdpc3Rlcl9tb3ZlX2Nvc3QnLAoJYHNpbXBsZV9tZW1vcnlfb3BlcmFuZCcuCgkoSEFSRF9SRUdOT19NT0RFX09LKTogUGFyZW50aGVzaXplIGBSRUdOTycgYXJnLgoJKFJFR05PX1JFR19DTEFTUyk6IExpa2V3aXNlLgoJKiBwZHAxMS5tZDogQWRkIGV4cGxpY2l0IGBpbnQnIHRvIGBzdGF0aWMgY291bnQnIChpbiB0d28gcGxhY2VzKS4KCShhZGRoaTMpOiBBZGQgZXhwbGljaXQgYnJhY2VzIHRvIGF2b2lkIGFtYmlndW91cyBlbHNlLgoJKGFkZHFpMyk6IExpa2V3aXNlLgoJKGFzaGxoaTMpOiBMaWtld2lzZS4KCkZyaSBBcHIgIDIgMTQ6MTc6MTAgMTk5OSAgSmVycnkgSmFtZXMgIDxqZXJyeUBjcy51Y3NiLmVkdT4KCgkqIGdjYy9pbnZva2UudGV4aTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGFkZGl0aW9uYWwgc3VwcG9ydGVkCglNSVBTIENQVSB0eXBlcywgb3B0aW9ucyAtbWlwczE2IGFuZCAtbWVudHJ5LCBhbmQgQUJJIGFuZCBJU0EKCWRlZmF1bHRzLgoKRnJpIEFwciAgMiAxNDoxMjowNiAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kOiBEZWxldGUgZmxvYXRpbmcgcG9pbnQgY29tcGFyZSwgYWRkLCBzdWJ0cmFjdCwKCW11bHRpcGx5LCBhbmQgZGl2aWRlIHBhdHRlcm5zIHdoaWNoIGFsbG93ZWQgaW50ZWdlcgoJb3BlcmFuZHMuCgkqIGkzODYuYyAob3V0cHV0XzM4N19iaW5hcnlfb3ApOiBEZWxldGUgdW51c2VkIGNvZGUuCgkob3V0cHV0X2Zsb2F0X2NvbXBhcmUpOiBMaWtld2lzZS4KCkZyaSBBcHIgIDIgMTE6NTM6MzcgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5tZCAobW92c2YrMSwgbW92ZGYrMSwgbW92eGYrMSk6IFVwZGF0ZSBjb25zdHJhaW50cwoJc28gdGhhdCBTRUNPTkRBUllfTUVNT1JZX1JFTE9BRCBpcyB1c2VkLiAgUmVtb3ZlIGRlYWQgY29kZS4KCjE5OTktMDQtMDIgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogZml4aW5jL21rZml4aW5jLnNoOiBBZGRlZCBzdXBwb3J0IGZvciB4ODYtaW50ZXJpeC4KCSogZml4aW5jL2ZpeGluYy5pbnRlcml4OiBGaXhpbmNsdWRlcyBzY3JpcHQsIHNsaWdodCBjaGFuZ2VzCglmcm9tIC4vZml4aW5jLmludGVyaXguICBVbnRlc3RlZCAobmVlZHMgaW50ZXJpeCBib3gpLgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmOgoJQ29tcGxldGUgdGhlIGNoYW5nZSB0byB0aGUgJ2ZpeGluYy50bXAnIGZpbGUuCglGaXhlZCByZWdleCBmb3IgZmluZGluZyBDKysgaGVhZGVycy4KCSogZml4aW5jbC54LCBmaXhpbmNsLnNoLCBpbmNsaGFjay5zaDogUmVnZW5lcmF0ZS4KCkZyaSBBcHIgIDIgMTE6MzY6MTIgMTk5OSAgSmFuIEh1Ymlja2EgIChodWJpY2thQHBhcnUuY2FzLmN6KQoKCSogaTM4Ni5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MsIGNhc2UgUkVHKTogRG8gbm90IHVzZSBFU0kgYWRkcmVzc2luZwoJbW9kZSBmb3IgdGhlIEs2LgoKCSogaTM4Ni5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MsIGNhc2UgTVVMVCk6IFVzZSBtb3JlIGVmZmljaWVudAoJZW5jb2RpbmcgKG11bHQgKHJlZykgKGNvbnN0X2ludCAyKSkuCgpUaHUgQXByICAxIDE3OjAxOjUwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJTW92ZSBvdmVyIHBhdGNoIGZyb20gQmVybmQgU2NobWlkdCBmcm9tIEdDIGJyYW5jaDoKCSogZW1pdC1ydGwuYyAoZ2VuX3J0eF9DT05TVF9ET1VCTEUpOiBOZXcgZnVuY3Rpb24uCgkoZ2VuX3J0eCk6IENhbGwgaXQuICBUaWR5IGNhc2VzLgoJKiBydGwuaCAoZ2VuX3J0eF9DT05TVF9ET1VCTEUpOiBQcm90b3R5cGUgaXQuCgkqIGdlbmdlbnJ0bC5jOiBBZGQgY29tbWVudGFyeS4KCShzcGVjaWFsX3J0eCk6IEFsc28gbWF0Y2ggQ09OU1RfRE9VQkxFLgoJKGdlbmNvZGUpOiBFbWl0IGNhbGwgdG8gbWVtc2V0IGluc3RlYWQgb2YgYnplcm8uCgpGcmkgQXByICAyIDEyOjU4OjI2IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChhc2hsaGkzLCBsc2hyaGkzLCBhc2hyaGkzKTogRm9yY2Ugb3BlcmFuZCAxCglpbnRvIGEgcmVnaXN0ZXIgaWYgc2hpZnQgY291bnQgbm90IGNvbnN0YW50LgoJKGFzaGxoaTNfcmVnLCBsc2hyaGkzX3JlZywgYXNocmhpM19yZWcpOiBFbnN1cmUgdGhhdCBvcGVyYW5kIDEKCWlzIGEgcmVnaXN0ZXIuCgpGcmkgQXByICAyIDEyOjE5OjE3IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kICgqZGIpOiBFbmFibGUgcGF0dGVybiBpZiBUQVJHRVRfTE9PUF9VTlNJR05FRAoJaXMgbm9uLXplcm8uCgkobW92c3RycWlfc21hbGwsIG1vdnN0cnFpX2xhcmdlLCAqY21wc3RycWkpOiBBZGQgKyBtb2RpZmllciB0byBhZGRyZXNzCglyZWdpc3RlciBjb25zdHJhaW50cy4KCSgqbW92aGlfY2xvYmJlcisxKTogTW9kaWZ5IHNwbGl0dGVyIHBhdHRlcm4gdG8gaGFuZGxlIGRlc3RpbmF0aW9uCglyZWdpc3RlciB0aGF0IGlzIHVzZWQgaW4gdGhlIHNvdXJjZSBhZGRyZXNzLgoJKCp4b3JoaTNfY2xvYmJlcik6IFJlcGxhY2UgQU5EIHdpdGggWE9SIGluIGNhbGwgdG8gbGVnaXRpbWl6ZV9vcGVyYW5kcy4KCkZyaSBBcHIgIDIgMTI6MTY6MTUgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaDogQWRkZWQgbW9yZSBjb21tZW50cy4KCkZyaSBBcHIgIDIgMTE6NTg6MjIgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IEZvcmNlIGludmFsaWQgUUltb2RlCgljb25zdGFudHMgaW50byBtZW1vcnkgaWYgd2UgZ2V0IGNhbGxlZCBkaXJlY3RseSBmcm9tIGdlbl9tb3ZlX2luc24KCXJhdGhlciB0aGFuIGVtaXRfbW92ZV9pbnNuLgoJKGM0eF9sZWdpdGltaXplX2FkZHJlc3MpOiBGaXggdXAgTEFCRUxfUkVGIGFkZHJlc3Nlcy4KClRodSBBcHIgIDEgMTI6MDQ6MDUgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZXhwci5jIChzdG9yZV9maWVsZCk6IFdoZW4gY2hlY2sgZGlyZWN0X3N0b3JlLCBhc3N1bWUgYWxsIGNvbXBsZXgKCW1vZGVzIGNhbiBiZSBkaXJlY3RseSBzdG9yZWQuCgoxOTk5LTA0LTAxICBCcnVjZSBLb3JiICA8ZGRzaW5jMDlAaXgubmV0Y29tLmNvbT4KCgkqIGZpeGluYy9nZW5maXhlczogTmV3IHNoZWxsIHNjcmlwdCB0aGF0IHJ1bnMgYXV0b2dlbgoJdG8gY3JlYXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCgoxOTk5LTA0LTAxICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoY3BwbWFpbiQoZXhlZXh0KSk6IERlcGVuZCBvbiBpbnRsLm8uICBMaW5rIGluIGludGwuby4KClRodSBBcHIgIDEgMDM6NDg6MzQgMTk5OSAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogaTM4Ni5jIChvdXRwdXRfZnBfY29uZGl0aW9uYWxfbW92ZSk6IEFib3J0IGZvciBMVCwgTEUsIEdFLCBhbmQgR1QKCXNpZ25lZCBpbnRlZ2VyIGNvbXBhcmlzb25zLgoKCSogaTM4Ni5jIChvdXRwdXRfaW50X2NvbmRpdGlvbmFsX21vdmUpOiBVc2UgImVudW0gcnR4X2NvZGUiIGZvciBjb2RlCgl0eXBlLgoKCSogaTM4Ni5jIChub3RpY2VfdXBkYXRlX2NjKTogTm8gbmVlZCB0byBjaGVjayB0aGUgSU5UIG1vZGUgZm9yCgljb25kaXRpb25hbCBtb3ZlcyBzaW5jZSBGTE9BVCBjb25kaXRpb25hbCBtb3ZlcyBkb24ndCBhZmZlY3QgY2MwLgoKVGh1IEFwciAgMSAwMjoxNzoxOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmaXhpbmMvaW5jbGhhY2suZGVmICh6enpfa2lfc3lzY2FsbHMsIHp6el90aW1lKTogRml4IHRyaWdnZXIKCXN0cmluZyB0byBvbmx5IG1hdGNoIG9uIGhwdXgxMS4KCSogZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2luY2xoYWNrLnNoLCBmaXhpbmMvZml4aW5jLnNoOiBSZWJ1aWx0LgoKVGh1IEFwciAgMSAwMTowOToyNyAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGZpeGluYy9oYWNrc2hlbGwudHBsOiBDb21wbGV0ZSB0cmFuc2l0aW9uIHRvIGZpeGluYy50bXAuCgkqIGZpeGluYy9pbmNsaGFjay5zaDogUmVidWlsdC4KCgkqIGZpeGluYy9pbmNsaGFjay5kZWY6IEZpeCB0eXBvcyBpbiBjX2FzbS5oIGZpeC4KCSogZml4aW5jL2ZpeGluY2wueCwgZml4aW5jL2luY2xoYWNrLnNoLCBmaXhpbmMvZml4aW5jLnNoOiBSZWJ1aWx0LgoKV2VkIE1hciAzMSAxNzoyMDoxMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IEFsbG93IGRicl9zY2hlZHVsZSB0byB3cml0ZSB0bwoJdGhlIGR1bXAgZmlsZSB0b28uCgpXZWQgTWFyIDMxIDEyOjMyOjQzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogTmV3IGFyZ3VtZW50IGBkb19jbGVhbnVwJy4KCUNvbmRpdGlvbmFsbHkgY2FsbCBkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzLgoJKGZyZWVfYmFzaWNfYmxvY2tfdmFycyk6IFplcm8gRU5UUlkvRVhJVCBkYXRhLgoJKGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzKTogS2lsbC4gIFNwbGl0IGludG8uLi4KCShhbGxvY2F0ZV9iYl9saWZlX2RhdGEsIGFsbG9jYXRlX3JlZ19saWZlX2RhdGEpOiAuLi4gbmV3IGZ1bmN0aW9ucy4KCShsaWZlX2FuYWx5c2lzXzEpOiBVcGRhdGUuCgkqIGdjc2UuYyAoZ2NzZV9tYWluKTogVXBkYXRlIGZpbmRfYmFzaWNfYmxvY2tzIGNhbGwuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogTGlrZXdpc2UuCgkqIHN0dXBpZC5jIChzdHVwaWRfbGlmZV9hbmFseXNpcyk6IFVwZGF0ZSBsaWZlIGRhdGEgY2FsbHMuCgkqIHJ0bC5oLCBvdXRwdXQuaDogVXBkYXRlIHByb3RvdHlwZXMuCgpXZWQgTWFyIDMxIDEyOjEwOjAwIDE5OTkgIEJydWNlIEtvcmIgIDxkZHNpbmMwOUBpeC5uZXRjb20uY29tPgoKCSogaW5jbGhhY2suZGVmIChzZXZlcmFsKTogQWRkZWQgc3BhY2VzIGluIHRlc3RzIHRvIGVuc3VyZQoJY29ycmVjdCBzaGVsbCBzeW50YXguICBBZGRlZCBjX2FzbS5oIGZpeCBmcm9tIGZpeGluY2x1ZGVzLgoJQWxzbyBjb3JyZWN0ZWQgdGhlIGNvcnJlY3RlZCBmaXggdG8gQysrIGNvbW1lbnRzIDotfQoKCSogaW5jbGhhY2sudHBsOiBDaGFuZ2VkIG1ldGhvZCBvZiB0cmF2ZXJzaW5nIHN5bWxpbmsgdHJlZXMKCXNvIHRoYXQgZmlsZSBuYW1lIG1hdGNoaW5nIHdpbGwgd29yayBjb3JyZWN0bHkuCgoJKiBmaXhpbmNsLmMsIGhhY2tzaGVsbC50cGw6IEZhbGxvdXQgZnJvbSBhYm92ZS4KCSogZml4aW5jbC54LCBpbmNsaGFjay5zaCwgZml4aW5jbC5zaDogUmVidWlsdC4KClR1ZSBNYXIgMzAgMTA6NDM6NDkgMTk5OSAgUGhpbGlwIEJsdW5kZWxsICA8cGJAbmV4dXMuY28udWs+CgoJKiBjb25maWcvYXJtL2FvdXQuaCAoREJYX0RFQlVHR0lOR19JTkZPKTogQXZvaWQgcmVkZWZpbml0aW9uIGlmCglkYnhlbGYuaCB3YXMgcHJldmlvdXNseSBpbmNsdWRlZC4KCShDUFBfQVBDU19QQ19ERUZBVUxUX1NQRUMpOiBObyBuZWVkIHRvIHVuZGVmaW5lLgoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaCAoRlBfREVGQVVMVCk6IENvcnJlY3RseSBvdmVycmlkZSB0aGUKCWRlZmluaXRpb24gZnJvbSBhcm0uaC4KCldlZCBNYXIgMzEgMTA6MzM6MzcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGMtZ3BlcmYuaCk6IEdlbmVyYXRlIHVzaW5nIGdwZXJmIGxhbmd1YWdlICdDJywgbm90CgknS1ItQycsIHNvIGdwZXJmIHVzZXMgdGhlIGBjb25zdCcga2V5d29yZCBvbiBzdHJpbmdzLgoKCSogYy1wYXJzZS5ncGVyZiAocmVzd29yZCk6IENvbnN0LWlmeSBhIGNoYXIqLgoKV2VkIE1hciAzMSAwMTo0OTozMSAxOTk5ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQHplbWJ1LmNvbT4KCgkqIHQtcnRlbXMgKExJTUlUU19IX1RFU1QsIExJQkdDQzJfSU5DTFVERVMpOiBEZWZpbmUuCgpXZWQgTWFyIDMxIDAwOjUwOjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHN5c3RlbS5oIChTVERFUlJfRklMRU5PKTogRml4IHR5cG8uCgoJKiBpbmNsaGFjay5kZWYgKGJvb2wpOiBBbHNvIGZpeCBib2d1cyBib29sIGluIGN1cnNlc19jb2xyL2N1cnNlcy5oLgoJKiBmaXhpbmNsLngsIGluY2xoYWNrLnNoLCBmaXhpbmNsLnNoOiBSZWJ1aWx0LgoKVHVlIE1hciAzMCAyMDo1MTo0MCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogYWxpYXMuYyAoYWxpYXNfc2V0X2NvbXBhcmUpOiBSZW1vdmUuCgkocmVjb3JkX2FsaWFzX3N1YnNldCk6IFVzZSBzcGxheV90cmVlX2NvbXBhcmVfaW50cyBpbnN0ZWFkIG9mCglhbGlhc19zZXRfY29tcGFyZS4KCShpbml0X2FsaWFzX29uY2UpOiBMaWtld2lzZS4KCSogY3NlLmM6IEluY2x1ZGUgc3BsYXktdHJlZS5oLgoJKHJlZ19xdHkpOiBSZW1vdmUuCgkocmVnX3RpY2spOiBMaWtld2lzZS4KCShyZWdfdGFibGUpOiBMaWtld2lzZS4KCShjc2VfcmVnX2luZm8pOiBOZXcgc3RydWN0dXJlLgoJKGNzZV9yZWdfaW5mb19mcmVlX2xpc3QpOiBOZXcgdmFyaWFibGUuCgkoY3NlX3JlZ19pbmZvX3RyZWUpOiBMaWtld2lzZS4KCShjYWNoZWRfcmVnbm8pOiBMaWtld2lzZS4KCShjYWNoZWRfY3NlX3JlZ19pbmZvKTogTGlrZXdpc2UuCgkoYWxsX21pbnVzX29uZSk6IFJlbW92ZS4KCShjb25zZWNfaW50cyk6IExpa2V3aXNlLgoJKEdFVF9DU0VfUkVHX0lORk8pOiBOZXcgbWFjcm8uCgkoUkVHX1RJQ0spOiBMaWtld2lzZS4gIFVzZSB0aHJvdWdob3V0IGluc3RlYWQgb2YgcmVnX3RpY2suCgkoUkVHX0lOX1RBQkxFKTogTGlrZXdpc2UuICBVc2UgdGhyb3VnaG91dCBpbnN0ZWFkIG9mIHJlZ19pbl90YWJsZS4KCShSRUdfUVRZKTogTGlrZXdpc2UuICBVc2UgdGhyb3VnaG91dCBpbnN0ZWFkIG9mIHJlZ19xdHkuCgkoZ2V0X2NzZV9yZWdfaW5mbyk6IE5ldyBmdW5jdGlvbi4KCShmcmVlX2NzZV9yZWdfaW5mbyk6IExpa2V3aXNlLgoJKG5ld19iYXNpY19ibG9jayk6IFJlaW5pdGlhbGl6ZSBjc2VfcmVnX2luZm9fdHJlZSBpbnN0ZWFkIG9mCglyZWdfdGljaywgYWxsX21pbnVzX29uZSwgYW5kIGNvbnNlY19pbnRzLgoJKiBNYWtlZmlsZS5pbiAoY3NlLm8pOiBEZXBlbmQgb24gc3BsYXktdHJlZS5oCgpUdWUgTWFyIDMwIDEzOjE5OjM2IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGxpYmdjYzIuYyAodGhyb3dfaGVscGVyKTogSnVzdCByZXR1cm4gdGhlIFNQIG9mZnNldCwgcmF0aGVyIHRoYW4KCWEgd2hvbGUgdWRhdGEuICBJbmNsdWRlIGFyZ3Nfc2l6ZSBpbiB0aGUgb2Zmc2V0LgoJKF9fdGhyb3csIF9fcmV0aHJvdyk6IEFkanVzdC4KClR1ZSBNYXIgMzAgMTE6Mzk6MjcgMTk5OSAgQ3JhaWcgQnVybGV5ICA8Y3JhaWdAamNiLXNjLmNvbT4KCgkqIGV4dGVuZC50ZXhpIChFeHRlbmRlZCBBc20pOiBEZWxldGUgc3B1cmlvdXMgYGInIGJlZm9yZQoJYEBlbmQgZXhhbXBsZScsIHdoaWNoIHdhcyBjb25mdXNpbmcgdGV4aTJodG1sLgoKVHVlIE1hciAzMCAwMDoyNjozNCAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAob3V0cHV0X2xpbmVfaW5mbyk6IERvbid0IGVtaXQgcmVkdW5kYW50IGluZm8uCglEbyBzdGFydCBhIG5ldyByb3cgaWYgdGhlIGZpbGUgY2hhbmdlcyBhbmQgdGhlIGxpbmUgIyBkb2Vzbid0LgoKTW9uIE1hciAyOSAxNTo0ODozOSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoSW52b2tpbmcgRysrLCBDKysgRGlhbGVjdCBPcHRpb25zKTogVXBkYXRlLgoKTW9uIE1hciAyOSAxNTowNTozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKHN0YXJ0X2R5bmFtaWNfaGFuZGxlcik6IEZvcmNlIGptcF9idWYgYWRkcmVzcyB0bwoJYW5kIG9wZXJhbmQgYmVmb3JlIG1vdmluZyB0byBtZW1vcnkuCgpNb24gTWFyIDI5IDE1OjExOjEwIDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJKiBpbnZva2UudGV4aSAoQ29kZSBHZW4gT3B0aW9ucyk6IEF0dGVtcHQgdG8gY2xhcmlmeQoJLWZjaGVjay1tZW1vcnktdXNhZ2UuICBNaW5vciBlZGl0cyB0byAtZnByZWZpeC1mdW5jdGlvbi1uYW1lLgoKTW9uIE1hciAyOSAyMDo1Mjo0NyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChtYXliZV9lbGltaW5hdGVfYml2KTogRm9yIGxpYmNhbGxzIHRoYXQgc2V0IGEgZ2l2LCBza2lwIHRvCgllbmQgb2YgbGliY2FsbC4KCk1vbiBNYXIgMjkgMjA6MzU6NDkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChtdWxzaTMpOiBUYWcgYW4gZXh0cmEgUkVHX0VRVUFMIG5vdGUgdG8gdGhlIG1pZGRsZSBpbnNuLgoKTW9uIE1hciAyOSAxMTo1MDozNCAxOTk5ICBKZXJyeSBRdWlubiAgPGpxdWlubkBub3J0ZWxuZXR3b3Jrcy5jb20+CgoJKiBwYS5oIChIQVZFX1BSRV9JTkNSRU1FTlQpOiBEaXNhYmxlIHdoZW4gb3B0aW1pemluZyBmb3IgYSBQQTgwMDAKCWNsYXNzIG1hY2hpbmUuCgkoSEFWRV9QUkVfREVDUkVNRU5ULCBIQVZFX1BPU1RfSU5DUkVNRU5UKTogTGlrZXdpc2UuCgkoSEFWRV9QT1NUX0RFQ1JFTUVOVCk6IExpa2V3aXNlLgoKTW9uIE1hciAyOSAwODoyNDo0MyAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogRml4IHBvcnRhYmlsaXR5IHByb2JsZW1zIHdpdGggb2xkIHNoZWxscy4KCgkqIGZpeGluYy9SRUFETUU6IFVwZGF0ZWQgZm9yIHJlbGVhc2UgYW5ub3VuY2VtZW50CgpTdW4gTWFyIDI4IDIwOjI2OjU1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHJlY29nLmggKGluc25fb3V0ZnVuLCBpbnNuX29wZXJhbmRfcHJlZGljYXRlKTogQWRkIHByb3RvdHlwZQoJYXJndW1lbnRzLgoKCSogcnRsLmggKG5vdGVfc3RvcmVzKTogTGlrZXdpc2UuCgoJKiBydGxhbmFsLmMgKG5vdGVfc3RvcmVzKTogTGlrZXdpc2UuCgpTdW4gTWFyIDI4IDE1OjM0OjI4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBBbHdheXMgbWFyayB0aGUgY29uc3RhbnQgcG9vbC4KClN1biBNYXIgMjggMTY6MDk6MDEgMTk5OSAgSmVycnkgUXVpbm4gIDxqcXVpbm5Abm9ydGVsbmV0d29ya3MuY29tPgoKCSogcGEubWQgKHBhNzEwMExDc2hpZnRtZW0sIHBhNzEwMExDYWx1KTogQ2hhbmdlIHNpbXVsdGFuZWl0eS4gIFVzZQoJc2hpZnQvbWVtIG9wcyBpbiBwYTcxMDBMQ2FsdS4KCgkqIHBhLmMgKHBhX2FkanVzdF9jb3N0KTogRG9uJ3QgZG8gY29zdCBhZGp1c3RtZW50cyBvbiBwYTgwMDAuCgkocGFfcmVvcmcpOiBEb24ndCBjYWxsIHBhX2NvbWJpbmVfaW5zdHJ1Y3Rpb25zIG9uIHBhODAwMC4KClN1biBNYXIgMjggMTU6Mjc6MjYgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBSZW1vdmUgYWNjaWRlbnRhbCBjb2RlIGR1cGxpY2F0aW9uLgoKU3VuIE1hciAyOCAxMjoyMjoxMiAxOTk5ICBSb2JlcnQgTGlwZSAgKHJvYmVydGxpcGVAdXNhLm5ldCkKCgkqIGkzODYvc3lzdjUuaDogTmV3IGZpbGUgdG8gZGVzY3JpYmUgVW5peFdhcmU3L1NWUjUuCgkqIGNvbmZpZ3VyZS5pbiAoaT84Ni1Vbml4V2FyZTcqLXN5c3YpOiBVc2UgaXQuCgkqIGkzODYvdWRrLmg6IFVzZSBzeXN2NS5oLiAgTm93IHVzZXMgRHdhcmYtMi4KClN1biBNYXIgMjggMDE6MTU6MDQgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gTWFyIDI4IDAwOjQ0OjI3IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHNkYm91dC5jIChzZGJvdXRfc3ltYm9sKTogRG8gbm90IGNhbGwgYnVpbGRfcG9pbnRlcl90eXBlLCBidWlsZAoJb25lIG9uIHRoZSBmbHkgYW5kIGRvIG5vdCBjYWNoZSB0aGUgcmVzdWx0LgoKCSogZ2NjLmNwcywgY3BwLmNwczogRGVsZXRlIHVud2FudGVkIGZpbGVzLgoKU2F0IE1hciAyNyAyMzozNzo0MCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChtb3ZkaWNjKzMsIG1vdmRpY2MrNCk6IFJld3JpdGUgdXNpbmcgc3BsaXRfZGkuCgkqIGkzODYuYyAob3V0cHV0X2ludF9jb25kaXRpb25hbF9tb3ZlKTogRGVsZXRlIHVudXNlZCBjb2RlLgoKU2F0IE1hciAyNyAyMToxNzozNiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAve2FpeDQxLmgsYWl4NDMuaH0gKEFTTV9DUFVfU1BFQyk6IEFkZCA2MDRlLgoKU2F0IE1hciAyNyAxNjoxMzo1MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKG1hcmtfdXNlZF9yZWdzKTogSW1wcm92ZSBoYW5kbGluZyBvZiBBU01zLgoKMTk5OS0wMy0yNiAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoeGNwcCwgY3Bwc3BlYy5vKTogTmV3IHRhcmdldHMuCgkoQ1BQX0lOU1RBTExfTkFNRSk6IE5ldyBtYWNyby4KCShpbnN0YWxsLWNwcCk6IEluc3RhbGwgeGNwcC4gIFVzZSBDUFBfSU5TVEFMTF9OQU1FLgoJKGFsbC5idWlsZCwgc3RhcnQuZW5jYXApOiBCdWlsZCB4Y3BwLgoKCSogY3Bwc3BlYy5jOiBOZXcgZmlsZSwgaW1wbGVtZW50cyBhcmd1bWVudCBmaWx0ZXJpbmcgZm9yIGEKCXVzZXItdmlzaWJsZSBDIHByZXByb2Nlc3Nvci4KCSogY3BwLnNoOiBSZW1vdmVkLgoKRnJpIE1hciAyNiAyMDo0MTo0NiAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoc3RtcC1maXhpbmMpOiBVc2UgdG9vbGRpciBpbnN0ZWFkIG9mIGdjY190b29sZGlyLgoKRnJpIE1hciAyNiAxNjowMjozNyAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluIChhcm0tKi12eHdvcmtzKik6IEp1c3QgaW5jbHVkZSBhcm0vdnhhcm0uaC4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoJKiBjb25maWcvYXJtL3Z4YXJtLmg6IERlZmluZSBTVUJUQVJHRVRfQ1BVX0RFRkFVTFQgYmVmb3JlCglpbmNsdWRpbmcgYXJtL2NvZmYuaAoKMTk5OS0wMi0xNiAgU2NvdHQgQmFtYnJvdWdoICA8c2NvdHRiQGNvcmVsY29tcHV0ZXIuY29tPgoKCSogY29uZmlndXJlLmluIChhcm0qLSotbGludXgtZ251Kik6IFNldCB0aHJlYWRfZmlsZSB0byAncG9zaXgnIGlmCgktLWVuYWJsZS10aHJlYWRzWz17eWVzLHB0aHJlYWRzLHBvc2l4fV0gaXMgcGFzc2VkIGFzIGEgY29tbWFuZAoJbGluZSBwYXJhbWV0ZXIgdG8gY29uZmlndXJlLgoKCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKCSogZ2NjL2NvbmZpZy9hcm0vdC1saW51eCAoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogSW5jbHVkZSAtZlBJQy4KCkZyaSBNYXIgMjYgMTk6NDI6MTkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY29tYmluZV9naXZzKTogRml4IGluZGV4IGludG8gY2FuX2NvbWJpbmUgd2hlbiBkb2luZwoJYmVuZWZpdCBhZGp1c3RtZW50IGZvciByZW1haW5pbmcgZ2l2cyB3aGVuIGhhdmluZyBjb21iaW5lZCBhIGdpdi4KCkZyaSBNYXIgMjYgMTE6Mzg6MDEgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdC1hcm0tZWxmIChFWFRSQV9NVUxUSUxJQl9QQVJUUyk6IERlZmluZS4KCkZyaSBNYXIgMjYgMTA6NDg6MjcgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vbGludXgtZWxmLmg6IEluY2x1ZGUgZGJ4ZWxmLmgKCkZyaSBNYXIgMjYgMTA6NDM6NDcgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9zdnI0Lmg6IEluY2x1ZGUgbmV3IGhlYWRlciBmaWxlIGRieGVsZi5oLgoJKERCWF9ERUJVR0dJTkdfSU5GTyk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9VU0VfQklOQ0wpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX0lERU5USUZZX0dDQyk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKEFTTV9JREVOVElGWV9HQ0NfQUZURVJfU09VUkNFKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9GVU5DVElPTl9GSVJTVCk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBSZW1vdmUgZGVmaW5pdGlvbi4KCgkqIGNvbmZpZy9lbGZvcy5oOiBJbmNsdWRlIG5ldyBoZWFkZXIgZmlsZSBkYnhlbGYuaC4KCShEQlhfREVCVUdHSU5HX0lORk8pOiBSZW1vdmUgZGVmaW5pdGlvbi4KCShEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX0lERU5USUZZX0dDQyk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKEFTTV9JREVOVElGWV9HQ0NfQUZURVJfU09VUkNFKTogUmVtb3ZlIGRlZmluaXRpb24uCgkoQVNNX09VVFBVVF9TT1VSQ0VfTElORSk6IFJlbW92ZSBkZWZpbml0aW9uLgoJKERCWF9GVU5DVElPTl9GSVJTVCk6IFJlbW92ZSBkZWZpbml0aW9uLgoKCSogY29uZmlnL2RieGVsZi5oOiBOZXcgaGVhZGVyIGZpbGUuCgkoREJYX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lLgoJKERCWF9CTE9DS1NfRlVOQ1RJT05fUkVMQVRJVkUpOiBEZWZpbmUuCgkoREJYX0ZVTkNUSU9OX0ZJUlNUKTogRGVmaW5lLgoJKERCWF9VU0VfQklOQ0wpOiBEZWZpbmUuCgkoREJYX0NPTlRJTl9MRU5HVEgpOiBEZWZpbmUuCgkoQVNNX0lERU5USUZZX0dDQyk6IERlZmluZS4KCShBU01fSURFTlRJRllfR0NDX0FGVEVSX1NPVVJDRSk6IERlZmluZS4KCShBU01fT1VUUFVUX1NPVVJDRV9MSU5FKTogRGVmaW5lLgoJKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRV9FTkQpOiBEZWZpbmUuCgpGcmkgTWFyIDI2IDAxOjU5OjE1IDE5OTkgICJDaGFybGVzIE0uIEhhbm51bSIgIDxyb290QGloYWNrLm5ldD4KCgkqIGZvbGQtY29uc3QuYyAoZm9sZF90cnV0aG9wKTogT3B0aW1pemUgYml0ZmllbGQgcmVmZXJlbmNlcyB3aXRoCglkaWZmZXJlbnQgbWFza3MgYXMgbG9uZyBhcyB0aGVpciBzaXplIGFuZCBiaXQgcG9zaXRpb24gYXJlIHRoZSBzYW1lLgoKCSogZm9sZC1jb25zdC5jIChmb2xkX3RydXRob3ApOiBCdWlsZCBhIHR5cGUgZm9yIGJvdGggdGhlIGxocyBhbmQKCXJocyBhbmQgdXNlIGl0IGFwcHJvcHJpYXRlbHkuCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IE1hc2sgdGhlIGxocyBhbmQgcmhzIGFmdGVyIG1lcmdpbmcKCWFkamFjZW50IGJpdGZpZWxkIHJlZmVyZW5jZXMuCgoJKiBmb2xkLWNvbnN0LmMgKGZvbGRfdHJ1dGhvcCk6IFZlcmlmeSB0aGF0IHRoZSBsaHMgYW5kIHJocyBhcmUKCWluIHRoZSBzYW1lIGJpdCBwb3NpdGlvbiB3aGVuIG9wdGltaXppbmcgYml0ZmllbGQgcmVmZXJlbmNlcwoJd2hpY2ggaGF2ZSB0aGUgc2FtZSBtYXNrLgoKVGh1IE1hciAyNSAyMjo1MzoyNyAxOTk5ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZ2NjLnRleGkgKENvcHkgQXNzaWdubWVudCk6IE5ldyBub2RlLgoKMTk5OS0wMy0yNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBnY2MuYzogQ29tcGlsZSB1bmNvbmRpdGlvbmFsbHkgYWxsIGNvZGUgZm9ybWVybHkgZGVwZW5kZW50CglvbiAjaWZkZWYgTEFOR19TUEVDSUZJQ19EUklWRVIuCgkqIGdjY3NwZWMuYzogTmV3IGZpbGUgd2l0aCBzdHViIGxhbmdfc3BlY2lmaWNfZHJpdmVyLAoJbGFuZ19zcGVjaWZpY19wcmVfbGluay4KCSogTWFrZWZpbGUuaW46IExpbmsgZ2Njc3BlYy5vIGludG8geGdjYy4gIEFkZCBydWxlIHRvIGNvbXBpbGUKClRodSBNYXIgMjUgMjE6MDg6MDIgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZ2NjLnRleGkgKFRlbXBvcmFyaWVzKTogVXBkYXRlLgoKVGh1IE1hciAyNSAxNjo1Mzo1MyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY29tYmluZS5jIChkaXN0cmlidXRlX25vdGVzKTogUGxhY2UgUkVHX0xBQkVMIGFsc28gd2hlcmUKCVJFR19FUVVBTCBpbmRpY2F0ZXMuCgpUaHUgTWFyIDI1IDEyOjQ2OjM3IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGEyOWsvYTI5ay5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jIHN0cmluZ3MuCgkqIGk5NjAvaTk2MC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jIHN0cmluZ3MuCgkqIGludm9rZS50ZXhpIChhMjlrKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIC1tbm8tbXVsdG0gb3B0aW9uLgoKVGh1IE1hciAyNSAxNDowNDo1NCAxOTk5ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBydGwudGV4aSAoUlRYX0ZSQU1FX1JFTEFURURfUCk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBydGwuaCAoc3RydWN0IHJ0eF9kZWYpOiBVcGRhdGUgY29tbWVudCBmb3IgZnJhbWVfcmVsYXRlZCBmaWVsZC4KCShzZXRfdW5pcXVlX3JlZ19ub3RlKTogRGVjbGFyZSBwcm90b3R5cGUuCgkqIGR3YXJmMm91dC5jIChkd2FyZjJvdXRfZnJhbWVfZGVidWdfZXhwcik6IFNwbGl0IG91dCBmcm9tCgknZHdhcmYyb3V0X2ZyYW1lX2RlYnVnJyB0byBoYW5kbGUgb25seSBleHByZXNzaW9ucywgYW5kIHByb2Nlc3MKCWNvbXBvbmVudCBwYXJ0cyBvZiBhIFBBUkFMTEVMIGV4cHJlc3Npb24uCgkoZHdhcmYyb3V0X2ZyYW1lX2RlYnVnKTogUHJvY2VzcyBpbnNucyBvbmx5LCBhbmQgY2FsbAoJbmV3IGZ1bmN0aW9uICdkd2FyZjJvdXRfZnJhbWVfZGVidWdfZXhwcicgZm9yIHBhdHRlcm5zLgoJKiBlbWl0LXJ0bC5jIChzZXRfdW5pcXVlX3JlZ19ub3RlKTogTmV3IGZ1bmN0aW9uIHRvIGFkZCBhIHJlZyBub3RlLAoJYnV0IGlmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIG9uZSwgZGVsZXRlIGl0IGZpcnN0LgoJKiBleHBtZWQuYyAoZXhwYW5kX211bHQsIGV4cGFuZF9kaXZtb2QpOiBVc2Ugc2V0X3VuaXF1ZV9yZWdfbm90ZS4KCSogb3B0YWJzLmMgKGFkZF9lcXVhbF9ub3RlLCBleHBhbmRfYmlub3ApOiBVc2Ugc2V0X3VuaXF1ZV9yZWdfbm90ZS4KCShlbWl0X25vX2NvbmZsaWN0X2Jsb2NrLCBlbWl0X2xpYmNhbGxfYmxvY2spOiBVc2Ugc2V0X3VuaXF1ZV9yZWdfbm90ZS4KCShleHBhbmRfZml4KTogVXNlIHNldF91bmlxdWVfcmVnX25vdGUuCgpUaHUgTWFyIDI1IDExOjQ3OjQ5IDE5OTkgIEFydCBIYWFzICA8YWhhYXNAbmVvc29mdC5jb20+CgoJKiB0bGluay5jIChzeW1ib2xfaGFzaF9uZXdmdW5jKTogUmVtb3ZlIHJlZHVuZGFudCBjYWxsIHRvCgloYXNoX25ld2Z1bmMuCgkoZmlsZV9oYXNoX25ld2Z1bmMsIGRlbWFuZ2xlZF9oYXNoX25ld2Z1bmMpOiBMaWtld2lzZS4KClRodSBNYXIgMjUgMTA6MDU6NTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZKTogU2V0IHRvIDEyOC4KCjE5OTktMDMtMjUgIFBoaWxpcCBCbHVuZGVsbCAgPHBiQG5leHVzLmNvLnVrPgoKCUJhc2VkIG9uIHBhdGNoIGZyb20gSmltIFN0dWR0ICA8amltQGZlZGVyYXRlZC5jb20+OgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oIChTVEFSVEZJTEVfU1BFQywgRU5ERklMRV9TUEVDKTogQ29weQoJZGVmaW5pdGlvbnMgZnJvbSBjb25maWcvbGludXguaC4KCShEQlhfQkxPQ0tTX0ZVTkNUSU9OX1JFTEFUSVZFKTogRGVmaW5lIHRvIDEuCgpUaHUgTWFyIDI1IDAyOjEyOjQyIDE5OTkgIEZpbm4gSGFrYW5zc29uICA8ZmlubkBheGlzLmNvbT4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQ29ycmVjdCBhIGNvbW1lbnQuCgoJKiBydGwuaCAoTUVNX0NPUFlfQVRUUklCVVRFUyk6IFJlbW92ZSB1bm5lY2Vzc2FyeSBlbmRpbmcgYmFja3NsYXNoLgoKVGh1IE1hciAyNSAwMjowMjoxMyAxOTk5ICBBeGVsIFRoaW1tICA8QXhlbC5UaGltbUBwaHlzaWsuZnUtYmVybGluLmRlPgoKCSogTWFrZWZpbGUuaW4gKFJBTkxJQl9URVNUKTogSW1wcm92ZSB0ZXN0LgoKVGh1IE1hciAyNSAwMToxNTozMyAxOTk5ICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIGNvbWJpbmUuYyAoZm9yY2VfdG9fbW9kZSwgY2FzZSBQTFVTKTogVXNlIHNpZ24gZXh0ZW5kZWQgbWFzawoJd2hlbiBtYXNraW5nIHRoZSBsb3cgYml0cyBvdXQgb2YgYSBjb25zdGFudC4KClR1ZSBNYXIgMjMgMTU6NDU6MjUgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgkJCSAgSmVmZiBMYXcgIDxsYXdAY3lnbnVzLmNvbT4KCgkqIGZvbGQtY29uc3QuYyAobWFrZV9yYW5nZSk6IElmIG9yaWdfdHlwZSBpcyB1bnNldCwgc2V0IGl0IGFzIHNvb24KCWFzIHdlIGtub3cgdGhlIHR5cGUuICBSZW1vdmUgbm93IHVubmVjZXNzYXJ5IHNldCBvZiBvcmlnX3R5cGUgZm9yCgljb252ZXJzaW9ucy4KCldlZCBNYXIgMjQgMjM6Mjc6MjUgMTk5OSAgTWFyayBFbGJyZWNodCAgPHNub3diYWxsM0B1c2EubmV0PgoJCQkgIEplZmYgTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBzeXN0ZW0uaCAoU1RESU5fRklMRU5PKTogUHJvdmlkZSBkZWZhdWx0IGRlZmluaXRpb24gaWYgb25lIGlzIG5vdAoJcHJvdmlkZWQgYnkgdGhlIHN5c3RlbSBoZWFkZXIgZmlsZXMuCgkoU1RET1VUX0ZJTEVOTywgU1RERVJSX0ZJTEVOTyk6IExpa2V3aXNlLgoKCSogaTM4Ni94bS1kamdwcC5oIChDT0xMRUNUMl9IT1NUX0lOSVRJQUxJWkFUSU9OKTogTmV3IG1hY3JvLgoJKiBjb2xsZWN0Mi5jIChtYWluKTogVXNlIGl0LgoJKHBleGVjdXRlX3BpZCk6IE5ldyB2YXJpYWJsZS4gSG9sZHMgcmV0dXJuIHZhbHVlIGZyb20gY2FsbCB0byBwZXhlY3V0ZS4KCShjb2xsZWN0Ml9leGVjdXRlKTogUmV3b3JrIHRvIHVzZSBwZXhlY3V0ZSBpbnN0ZWFkIG9mIGZvcmsuCgkoY29sbGVjdDJfd2FpdCk6IFVzZSBwd2FpdCgpIGluc3RlYWQgb2Ygd2FpdCgpLgoKCSogaTM4Ni9kamdwcC5oOiBGaXggdHlwby4KCldlZCBNYXIgMjQgMjM6MjQ6MzAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZml4aW5jL21rZml4aW5jLnNoOiBSZWNvZ25pemUgY3lnd2luKiBpbnN0ZWFkIG9mIG9ubHkKCWN5Z3dpbjMyLgoKV2VkIE1hciAyNCAxNTo0NDoxMiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL20zMnIvbTMyci5jIChpbml0X2lkZW50cyk6IEFjY2VwdCBib3RoIE5BTUUgYW5kIF9fTkFNRV9fCgl2ZXJzaW9ucyBvZiBhdHRyaWJ1dGUgbmFtZXMgYW5kIHZhbHVlcy4KCShtMzJyX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUpOiBMaWtld2lzZS4KCShtMzJyX2VuY29kZV9zZWN0aW9uX2luZm8pOiBMaWtld2lzZS4KCldlZCBNYXIgMjQgMjE6NDI6MTUgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogSWYgb3V0cHV0LXJlbG9hZGluZyBmb3IgYQoJc2ltcGxlIG1vdmUgaW5zbiwgdHJ5IHRvIGluaGVyaXQgYW4gZXF1aXZhbGVuY2UgZm9yIHRoZSBpbnB1dC4KCjE5OTktMDItMjQgIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGFybS9hb3V0LmggKERCWF9PVVRQVVRfTUFJTl9TT1VSQ0VfRklMRU5BTUUpOiBGaXggcXVvdGluZy4KCjE5OTktMDMtMjQgIEppbSBCbGFuZHkgIDxqaW1iQHp3aW5nbGkuY3lnbnVzLmNvbT4KCgkqIGxpYmdjYzIuYyAoX19DVE9SX0xJU1RfXywgX19EVE9SX0xJU1RfXyk6IEluaXRpYWxpemUgb24gYWxsCglwbGF0Zm9ybXMuCgpXZWQgTWFyIDI0IDAxOjM1OjAxIDE5OTkgIEdlb2ZmIEtlYXRpbmcgIDxnZW9mZmtAb3plbWFpbC5jb20uYXU+CgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBSZWNvZ25pemUgYSByb3RhdGUgYnkgYW4gdW5zaWduZWQgYW1vdW50LgoKVHVlIE1hciAyMyAyMzozMjoxNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAocm90bHNpMyk6IE5ldyBleHBhbmRlci4gIFN5bnRoZXNpemUgYSB2YXJpYWJsZSByb3RhdGUKCWxlZnQgdXNpbmcgYSB2YXJpYWJsZSByb3RhdGUgcmlnaHQuICBQcm92aWRlIGFub255bW91cyBwYXR0ZXJuIGZvcgoJcm90YXRlIGxlZnQgYnkgYSBjb25zdGFudCB2YWx1ZS4KCgkqIGV4cHIuYyAoZXhwYW5kX2Fzc2lnbm1lbnQpOiBEbyBub3QgdHJ5IHRvIG9wdGltaXplIGEgYWdncmVnYXRlCglhZGRyZXNzIHdoaWNoIGhhcyBWT0lEbW9kZS4KClR1ZSBNYXIgMjMgMjI6NTE6NDggMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgkJCSAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiBwcm90b2l6ZS5jIChhYnNwYXRoKTogUHJlc2VydmUgbXVsdGlwbGUgbGVhZGluZyBzbGFzaGVzIGZvcgoJX1dJTjMyIGFuZCBJbnRlcml4LgoKMTk5OS0wMS0yMyAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogYXJtL3Z4YXJtLmg6IFNwbGl0IG91dCB2eFdvcmtzIHN1cHBvcnQgaW50byBzZXBhcmF0ZSBoZWFkZXJmaWxlCglhbmQgdnhpZnkuCgkqIGFybS9hcm0uYyAoY3B1X2RlZmF1bHRzKTogQWxsb3cgYXJtNzEwIGFzIGRlZmF1bHQuCgoJKiBjb25maWd1cmUuaW46IFNwbGl0IG91dCB2eFdvcmtzIHN1cHBvcnQgZm9yIEFybS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIE1hciAyMyAxMToyMDowMyAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoZmlyc3RfcnRsX29wLCBoYXNfY2xlYW51cHMpOiBIYW5kbGUgR09UT19TVUJST1VUSU5FX0VYUFIuCgpUdWUgTWFyIDIzIDA5OjAwOjM5IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3Jpc2NpeDEuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvYyBzdHJpbmcuCgkqIGNvbmZpZy9hcm0vcmlzY2l4MS0xLmggKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2Mgc3RyaW5nLgoKVHVlIE1hciAyMyAwNzo1MDoyMCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0Bjb2Rlc291cmNlcnkuY29tPgoKCSogZnVuY3Rpb24uYzogSW5jbHVkZSBoYXNoLmguCgkoaW5zbnNfZm9yX21lbV9lbnRyeSk6IE5ldyBzdHJ1Y3QuCgkocHV0X3JlZ19pbnRvX3N0YWNrKTogVGFrZSBhbiBvcHRpb25hbCBoYXNoLXRhYmxlIG1hcHBpbmcgTUVNcyB0bwoJdGhlIElOU05zIHRoYXQgdXNlIHRoZW0uCgkoZml4dXBfdmFyX3JlZnMpOiBMaWtld2lzZS4KCShwdXRfYWRkcmVzc29mX2ludG9fc3RhY2spOiBMaWtld2lzZS4KCShwdXJnZV9hZGRyZXNzb2ZfMSk6IExpa2V3aXNlLiAgS2VlcCB0aGUgaGFzaC10YWJsZSB1cCB0byBkYXRlIGlmCgl3ZSBhZGQgbmV3IGluc3RydWN0aW9ucy4KCShmaXh1cF92YXJfcmVmc19pbnNucyk6IFVzZSBpdCB0byBhdm9pZCBzZWFyY2hpbmcgdGhlIGVudGlyZQoJaW5zdHJ1Y3Rpb24gY2hhaW4uCgkoaW5zbnNfZm9yX21lbV9uZXdmdW5jKTogTmV3IGZ1bmN0aW9uLgoJKGluc25zX2Zvcl9tZW1fY29tcCk6IExpa2V3aXNlLgoJKGluc25zX2Zvcl9tZW1fd2Fsayk6IExpa2V3aXNlLgoJKGNvbXB1dGVfaW5zbnNfZm9yX21lbSk6IExpa2V3aXNlLgoJKHBvcF9mdW5jdGlvbl9jb250ZXh0X2Zyb20pOiBQYXNzIE5VTEwgZm9yIHRoZSBoYXNoLXRhYmxlLgoJKHB1dF92YXJfaW50b19zdGFjayk6IExpa2V3aXNlLgoJKGdlbl9tZW1fYWRkcmVzc29mKTogTGlrZXdpc2UuCgkoZmx1c2hfYWRkcmVzc29mKTogTGlrZXdpc2UuCgkocHVyZ2VfYWRkcmVzc29mKTogQ2FsbCBjb21wdXRlX2luc25zX2Zvcl9tZW0gdG8gcHJlLWNvbXB1dGUgdGhlCgloYXNoIHRhYmxlLgoJKiBNYWtlZmlsZS5pbiAoT0JKUyk6IEluY2x1ZGUgaGFzaC5vLgoJKGZ1bmN0aW9uLm8pOiBEZXBlbmQgb24gaGFzaC5oLgoKVHVlIE1hciAyMyAwMDozOToxNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2L29wZW5ic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBVc2Ugc3ltYm9saWMgbmFtZXMgaW5zdGVhZCBvZgoJbnVtYmVycy4KCSogaTM4Ni9uZXRic2QuaCwgaTM4Ni9mcmVlYnNkLmg6IExpa2V3aXNlLgoKCSogY3J0c3R1ZmYuYzogVXNlIEFOU0kgZnVuY3Rpb24gZGVmaW5pdGlvbnMuICBGaXggbWlub3Igd2hpdGVzcGFjZQoJcHJvYmxlbXMuCgoJKiBpMzg2L29wZW5ic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZpbmUuCgkqIGNvbmZpZ3VyZS5pbjogRG8gbm90IHNldCBUQVJHRVRfQ1BVX0RFRkFVTFQgZm9yIHg4NiBPcGVuQlNECgljb25maWd1cmF0aW9ucy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIE1hciAyMyAwMDozOToxMCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2L2ZyZWVic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBEZWZpbmUgaW5zdGVhZAoJb2YgVEFSR0VUX0NQVV9ERUZBVUxULgoJKiBpMzg2L25ldGJzZC5oIChUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgoKTW9uIE1hciAyMiAyMzo1MjowMSAxOTk5ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCQkJICBEb25uIFRlcnJ5ICA8ZG9ubkBpbnRlcml4LmNvbT4KCgkqIHNkYm91dC5jIChzeW1zLmgpOiBEb24ndCBpbmNsdWRlIG9uIEludGVyaXguCgkqIHRvcGxldi5jIChtYWluKTogTm8gc2JyayBvbiBJbnRlcml4LgoKCSogY29uZmlndXJlLmluOiBBZGQgaTM4Ni1wYy1pbnRlcml4IHN1cHBvcnQuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCSogZml4aW5jLmludGVyaXg6IE5ldyBmaWxlLgoJKiBjb25maWcvaW50ZXJpeC5oOiBOZXcgZmlsZS4KCSogY29uZmlnL3gtaW50ZXJpeDogTmV3IGZpbGUuCgkqIGNvbmZpZy94bS1pbnRlcml4Lmg6IE5ldyBmaWxlLgoJKiBpMzg2L2ludGVyaXguaDogTmV3IGZpbGUuCgkqIGkzODYvaW50ZXJpeC5jOiBOZXcgZmlsZS4KCSogaTM4Ni90LWludGVyaXg6IE5ldyBmaWxlLgoKTW9uIE1hciAyMiAyMzo0MTo0OSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2LmggKFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSk6IERlZmluZS4KCk1vbiBNYXIgMjIgMjM6NDE6MzEgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogaTM4Ni5jIChpeDg2X2NvbXB1dGVfZnJhbWVfc2l6ZSk6IE5ldyBmdW5jdGlvbi4KCShpeDg2X3Byb2xvZ3VlLCBpeDg2X2VwaWxvZ3VlKTogVXNlIGl0LgoJKiBpMzg2LmggKElOSVRJQUxfRUxJTUlOQVRJT05fT0ZGU0VUKTogTGlrZXdpc2UuCgkqIHJlbG9hZDEuYzogUHJvdmlkZSBkZWZhdWx0IGZvciBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkuCgpNb24gTWFyIDIyIDE4OjA2OjU5IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG1pcHMvbWlwcy5oIChUQVJHRVRfU1dJVENIRVMsIFRBUkdFVF9PUFRJT05TKTogQWRkIG9wdGlvbiBkb2MKCXN0cmluZ3MuCgkqIG1pcHMvYWJpNjQuaCAoU1VCVEFSR0VUX1RBUkdFVF9PUFRJT05TKTogTGlrZXdpc2UuCgpNb24gTWFyIDIyIDE2OjE4OjI3IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2VsZi5oIChWQUxJRF9NQUNISU5FX0RFQ0xfQVRUUklCVVRFKTogRG8gbm90IGJvdGhlcgoJcGFzc2luZyBBVFRSSUJVVEVTIHRvIGFybV92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlLgoKCSogY29uZmlnL2FybS9jb2ZmLmggKFZBTElEX01BQ0hJTkVfREVDTF9BVFRSSUJVVEUpOiBEbyBub3QgYm90aGVyCglwYXNzaW5nIEFUVFJJQlVURVMgdG8gYXJtX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUuCgoJKiBjb25maWcvYXJtL2FybS5oIChERUZBVUxUX1JUWF9DT1NUUyk6IERvIG5vdCBib3RoZXIgcGFzc2luZwoJT1VURVJfQ09ERSB0byBhcm1fcnR4X2Nvc3RzIC0gaXQgaXMgbm90IHVzZWQuCgkoYXJtX2NvbXBhcmVfZnApOiBEZWxldGUgZGVjbGFyYXRpb24uCgkoRklOQUxfUFJFU0NBTl9JTlNOKTogRG8gbm90IGJvdGhlciBwYXNzaW5nIE9QVkVDIG9yIE5PUEVSQU5EUyB0bwoJYXJtX2ZpbmFsX3ByZXNjYW5faW5zbiAtIHRoZXkgYXJlIG5vdCB1c2VkLgoJKGNvbnN0X29rX2Zvcl9vcCk6IFJlbW92ZSBwcm90b3R5cGUuCgkoYXJtX3J0eF9jb3N0cyk6IEZpeCBwcm90b3R5cGUuCgkoYXJtX3ZhbGlkX21hY2hpbmVfZGVjbF9hdHRyaWJ1dGUpOiBGaXggcHJvdG90eXBlLgoJKGZpbmFsX3ByZXNjYW5faW5zbik6IEZpeCBwcm90b3R5cGUuCgoJKiBjb25maWcvYXJtL2FybS5tZDogUmVtb3ZlIHJlZmVyZW5jZXMgdG8gYXJtX2NvbXBhcmVfZnAuCgoJKiBjb25maWcvYXJtL2FybS5jIChhcm1fY29tcGFyZV9mcCk6IERlbGV0ZS4KCShjb25zdF9va19mb3Jfb3ApOiBNYWtlIGZ1bmN0aW9uIHN0YXRpYy4gIEFkZCBwcm90b3R5cGUuICBSZW1vdmUKCW1vZGUgcGFyYW1ldGVyIC0gaXQgaXMgdW51c2VkLgoJKGFybV9ydHhfY29zdHMpOiBSZW1vdmUgb3V0ZXJfY29kZSBwYXJhbWV0ZXIuCgkocmVsb2FkX21lbW9yeV9vcGVyYW5kKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkocG93ZXJfb2ZfdHdvX29wZXJhbmQpOiBEZWNsYXJlIG1vZGUgcGFyYW1ldGVyIHVudXNlZC4KCShlcXVhbGl0eV9vcGVyYXRvcik6IERlY2xhcmUgbW9kZSBwYXJhbWV0ZXIgdW51c2VkLgoJKGxvYWRfbXVsdGlwbGVfb3BlcmF0aW9uKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkoc3RvcmVfbXVsdGlwbGVfb3BlcmF0aW9uKTogRGVjbGFyZSBtb2RlIHBhcmFtZXRlciB1bnVzZWQuCgkobXVsdGlfcmVnaXN0ZXJfcHVzaCk6IERlY2xhcmUgbW9kZSBwYXJhbWV0ZXIgdW51c2VkLgoJKGFybV92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogUmVtb3ZlIGF0dHJpYnV0ZXMgcGFyYW1ldGVyIC0KCWl0IGlzIHVudXNlZC4KCShzZWxlY3RfZG9taW5hbmNlX2NjX21vZGUpOiBSZW1vdmUgb3AgcGFyYW1ldGVyIC0gaXQgaXMgdW51c2VkLgoJKGdlbl9jb21wYXJlX3JlZyk6IFJlbW92ZSBmcCBwYXJhbWV0ZXIgLSBpdCBpcyB1bnVzZWQuCgkoZmluYWxfcHJlc2Nhbl9pbnNuKTogUmVtb3ZlIG9wdmVjIGFuZCBub3BlcmFuZHMgcGFyYW1ldGVycyAtIHRoZXkKCWFyZSB1bnVzZWQuCgpNb24gTWFyIDIyIDE0OjM1OjI4IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiB0bS50ZXhpIChNRF9TQ0hFRF9JTklUKTogQWRkIG1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcy4KCk1vbiBNYXIgMjIgMjI6MjQ6MzAgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2FzX25lZWRlZCk6IFNldCByZWxvYWRfaXNfb3V0cHV0X3JlbG9hZCAvCglyZWxvYWRfaGFzX291dHB1dF9yZWxvYWQgZm9yIGF1dG9faW5jIGV4cHJlc3Npb25zIHRoYXQgY291bGQgYmUKCXJlbG9hZGVkLiAgQ2FsbCBmb3JnZXRfb2xkX3JlbG9hZHMgZm9yIFJFR19JTkMgbm90ZXMuCgpNb24gTWFyIDIyIDIxOjUxOjU3IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBjc2UuYyAoY3NlX2luc24pOiBEb24ndCBjaGFuZ2UgdGhlIHJlc3VsdCByZWdpc3RlciBvZiBhIGxpYmNhbGwuCgpNb24gTWFyIDIyIDIxOjA4OjU5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBydGwuaCAoc2hhbGxvd19jb3B5X3J0eCk6IERlY2xhcmUuCgkqIHJ0bC5jIChzaGFsbG93X2NvcHlfcnR4KTogTmV3IGZ1bmN0aW9uLgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzX3RvcGxldik6IFVzZSBzaGFsbG93X2NvcHlfcnR4IGluc3RlYWQgb2YKCWNvcHlfcnR4LgoKTW9uIE1hciAyMiAxMDo0NDozMyAxOTk5ICBWbGFkaW1pciBNYWthcm92ICA8dm1ha2Fyb3ZAdG9mdS50by5jeWdudXMuY29tPgoKCSogY29uZmlnL2g4MzAwL2g4MzAwLm1kIChhZGp1c3RfbGVuZ3RoKTogTmV3IGF0dHJpYnV0ZS4KCShtb2RoaTMrMSwgYW5kc2kzKzEsIGlvcnNpMysxLCBleHR6disxLCBleHR6disyKTogQ2hhbmdlIGluc24KCWRlZmF1bHQgdmFsdWUgb2YgYXR0cmlidXRlICJhZGp1c3RfbGVuZ3RoIiBvbnRvICJubyIuCgoJKiBjb25maWcvaDgzMDAvaDgzMDAuYyAoaDgzMDBfYWRqdXN0X2luc25fbGVuZ3RoKTogQWRqdXN0CglsZW5ndGggb25seSBpZiB0aGUgYXR0cmlidXRlICJhZGp1c3RfbGVuZ3RoIiB2YWx1ZSBpcyAieWVzIi4KCVVzZSAwIGlmIHRoZSBzaGlmdCBpcyBuZWdhdGl2ZS4KCgkqIGZpbmFsLmMgKHNob3J0ZW5fYnJhbmNoZXMpOiBDaGVjayBpbnNuIGxlbmd0aCBhZnRlciBpdHMKCWFkanVzdGluZy4KClN1biBNYXIgMjEgMTc6MzM6NDggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTg2MC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKiBpODYwL3BhcmFnb24uaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogaTM3MC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgZGVmYXVsdCBjYXNlLgoJKiBmeDgwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBkZWZhdWx0IGNhc2UuCgkqIGVseHNpLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uIGZvciBkZWZhdWx0IGNhc2UuCgkqIGNsaXBwZXIuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogMTc1MGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogcGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCShUQVJHRVRfT1BUSU9OUyk6IExpa2V3aXNlIGZvciBkZWZhdWx0IGNhc2UuCgkqIG1uMTAzMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCSogaDgzMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIGRlZmF1bHQgY2FzZS4KCgkqIGdjc2UuYyAoZHVtcF9oYXNoX3RhYmxlKTogRml4IHdoaXRlc3BhY2UgaW4gZGVjbGFyYXRpb24uCgkoY29tcHV0ZV90cmFuc3BvdXQpOiBSZW5hbWVkIGZyb20gcHJlX2NvbXB1dGVfdHJhbnNwb3V0LgoJKGNvbXB1dGVfcHJlXyopOiBEZWxldGVkLgoJKHByZV9leHByX3JlYWNoZXNfaGVyZV9wKTogTmV3IGFyZ3VtZW50LCBDSEVDS19QUkVfQ09NUC4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJKGluc2VydF9pbnNuX2VuZF9iYik6IFJlbmFtZWQgZnJvbSBwcmVfaW5zZXJ0X2luc24uCgkocHJlXyopOiBEZWxldGUgdW51c2VkIHZhcmlhYmxlcy4gIE9ubHkgbGVhdmUgbG9jYWwgcHJvcGVydGllcyBhbmQKCWdsb2JhbCByZWR1bmRhbnQvb3B0aW1hbCBjb21wdXRhdGlvbiBwb2ludHMuCgkoYWxsb2NfcHJlX21lbSwgZnJlZV9wcmVfbWVtKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoJKGNvbXB1dGVfcHJlX2RhdGEpOiBTaW1wbGlmeSBhbmQgY2FsbCBwcmVfbGNtIHRvIHJ1biB0aGUgbGF6eQoJY29kZSBtb3Rpb24gZGF0YWZsb3cgYW5hbHlzaXMuCgkocHJlX2luc2VydCwgcHJlX2luc2VydF9jb3BpZXMsIHByZV9kZWxldGUpOiBSZXZhbXAgdG8gdXNlIExDTQoJYmFzZWQgcmVkdW5kYW50IGFuZCBvcHRpbWFsIGNvbXB1dGF0aW9uIHBvaW50cy4KCgkqIGJhc2ljLWJsb2NrLmggKHByZV9sY20sIHByZV9yZXZfbGNtKTogRGVjbGFyZS4KCgkqIHRvcGxldi5jIChtYWluKTogQSBkZWJ1ZyBvcHRpb24gd2l0aG91dCBhIGxldmVsIGRlZmF1bHRzIHRvCglsZXZlbCAyLgoKU3VuIE1hciAyMSAxMjoxMzowMSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogZmxvdy5jIChjYW5fZGVsZXRlX2xhYmVsX3ApOiBEbyBub3QgYWxsb3cgdXNlciBzcGVjaWZpZWQKCWxhYmVscyB0byBiZSBkZWxldGVkLgoJKiBkd2FyZjJvdXQuYyAoZ2VuX2xhYmVsX2RpZSk6IEdlbmVyYXRlIGFkZHJlc3NlcyBmb3IgZGVsZXRlZAoJKHByb2dyYW1tZXIgc3BlY2lmaWVkKSBsYWJlbHMuCgkqIGR3YXJmb3V0LmMgKG91dHB1dF9sYWJlbF9kaWUpOiBHZW5lcmF0ZSBhZGRyZXNzZXMgZm9yIGRlbGV0ZWQKCShwcm9ncmFtbWVyIHNwZWNpZmllZCkgbGFiZWxzLgoKMTk5OS0wMy0yMSAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogTWFrZWZpbGUuaW4gKHhnY2MkKGV4ZWV4dCkpOiBBZGQgaW50bC5vIHRvIGxpc3Qgb2YgZmlsZXMgdG8gYmUKCWxpbmtlZCB3aXRoLgoKU3VuIE1hciAyMSAwMToxNTowMyAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBNYXIgMjAgMjI6MjY6MjMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3BhcmMuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG51bGwgZGVzY3JpcHRpb24gdG8gZGVmYXVsdCBjYXNlLgoKU2F0IE1hciAyMCAyMTo0NjowNiAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWxleC5jICh5eWxleCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGJ5dGVzJy4KCgkqIGZsb3cuYyAocHJpbnRfcnRsX3dpdGhfYmIpOiBDYXN0IHRoZSByZXR1cm4gdmFsdWUgb2YgYWxsb2NhLgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogV3JhcCB2YXJpYWJsZSBgdmFyYXJnc19zZXR1cCcgaW4KCW1hY3JvIFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MuCgkodGhyZWFkX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNucyk6IE1hcmsgcGFyYW1ldGVyIGBmJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogbG9jYWwtYWxsb2MuYyAobm9fZXF1aXYpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBzdG9yZScuCgoJKiBzY2hlZC5jIChzY2hlZHVsZV9pbnNucyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGBpbnNuJyBhbmQgYG5leHQnLgoKCSogdGxpbmsuYyAoc3ltYm9sX2hhc2hfbmV3ZnVuYywgc3ltYm9sX2hhc2hfbG9va3VwLAoJZmlsZV9oYXNoX25ld2Z1bmMsIGZpbGVfaGFzaF9sb29rdXAsIGRlbWFuZ2xlZF9oYXNoX25ld2Z1bmMsCglkZW1hbmdsZWRfaGFzaF9sb29rdXAsIHN5bWJvbF9wdXNoLCBzeW1ib2xfcG9wLCBmaWxlX3B1c2gsCglmaWxlX3BvcCwgdGxpbmtfaW5pdCwgdGxpbmtfZXhlY3V0ZSwgZnJvYl9leHRlbnNpb24sCglvYnN0YWNrX2ZnZXRzLCB0ZmdldHMsIHBmZ2V0cywgZnJlYWRzeW0sIHJlYWRfcmVwb19maWxlLAoJbWF5YmVfdHdlYWssIHJlY29tcGlsZV9maWxlcywgcmVhZF9yZXBvX2ZpbGVzLAoJZGVtYW5nbGVfbmV3X3N5bWJvbHMsIHNjYW5fbGlua2VyX291dHB1dCk6IEFkZCBzdGF0aWMgcHJvdG90eXBlLgoKCShzeW1ib2xfaGFzaF9uZXdmdW5jLCBmaWxlX2hhc2hfbmV3ZnVuYywgZGVtYW5nbGVkX2hhc2hfbmV3ZnVuYyk6CglNYWtlIHRoZSB0aGlyZCBhcmd1bWVudCBhIGBoYXNoX3RhYmxlX2tleScuCgoJKiB0b3BsZXYuYyAoZGVidWdfc3RhcnRfc291cmNlX2ZpbGUpOiBNYXJrIHBhcmFtZXRlciBgZmlsZW5hbWUnCgl3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgpTdW4gTWFyIDIxIDAyOjI4OjIxIDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHRtLnRleGkgKFZhcmFyZ3MpOiBEb24ndCBzcGxpdCBhcmd1bWVudCBvZiBAaXRlbSBhY3Jvc3MgbGluZXMuCgoJKiBpbnZva2UudGV4aTogRml4IHVzZSBvZiBAaXRlbSB2cyBAaXRlbXguCgpTdW4gTWFyIDIxIDA5OjU5OjU0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBudWxsIGRlc2NyaXB0aW9uIHRvCglkZWZhdWx0IGNhc2UuCgpTYXQgTWFyIDIwIDIzOjMzOjU0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogRml4IGRlYnVnIG1lc3NhZ2UuCgpTYXQgTWFyIDIwIDE1OjU0OjM1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChkZWNyZW1lbnRfYW5kX2JyYW5jaF9vbl9jb3VudCk6IEVtaXQgcnB0Yl9lbmQKCXBhdHRlcm4gaW5zdGVhZCBvZiBkZWNyZW1lbnRfYW5kX2JyYW5jaF91bnRpbF96ZXJvIHBhdHRlcm4uCgpTYXQgTWFyIDIwIDExOjM5OjU4IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBjb25maWcvYzR4L2M0eC5oIChUQVJHRVRfT1BUSU9OUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoKRnJpIE1hciAxOSAyMzoyNjoyOSAxOTk5ICBNYXJ0aW4gdm9uIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IEhhbmRsZSBFUlJPUl9NQVJLIG11Y2ggZWFybGllci4KCkZyaSBNYXIgMTkgMTU6Mjg6MzggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChjcmVhdGVfZGVmaW5pdGlvbik6IENhc3QgdG8gVV9DSEFSKiB3aGVuIGFzc2lnbmluZyB0byBvbmUuCgoJKiBjcHBmaWxlcy5jIChyZWFkX2FuZF9wcmVzY2FuKTogTGlrZXdpc2UuCglTdGFydCBhICNkZWZpbmUgaW4gY29sdW1uIDAuCgoJKiBjcHBsaWIuYyAoY3BwX2RlZmluZSk6IENhc3QgdG8gVV9DSEFSKiB3aGVuIGFzc2lnbmluZyB0byBvbmUuCgkoY3BwX3B1c2hfYnVmZmVyKTogTGlrZXdpc2UgZm9yIGNwcF9idWZmZXIqLgoJKGRvX2luY2x1ZGUpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgYGZiZWcnIGFuZCBgZmVuZCcgdG8gdW5zaWduZWQgY2hhciouCgkoZG9fZW5kaWYpOiBDYXN0IHRvIGNoYXIqIHdoZW4gYXNzaWduaW5nIHRvIG9uZS4KCShkb19hc3NlcnQpOiBMaWtld2lzZS4KCShkb191bmFzc2VydCk6IExpa2V3aXNlLgoJKGNwcF9yZWFkX2NoZWNrX2Fzc2VydGlvbik6IENoYW5nZSB0aGUgdHlwZSBvZiBgbmFtZScgdG8gVV9DSEFSKi4KCURvbid0IGRvIHVubmVjZXNzYXJ5IGNhc3QgdG8gY2hhciogYW55bW9yZS4KCgkqIGdlbnJlY29nLmMgKG1ha2VfaW5zbl9zZXF1ZW5jZSk6IENhc3QgdG8gY2hhcioqIHdoZW4gYXNzaWduaW5nCgl0byBvbmUuICBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBiemVybyB0byBQVFIuCgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYG5vdGUnLgoKCSogcmVsb2FkMS5jIChuZXdfaW5zbl9jaGFpbik6IENhc3QgdG8gc3RydWN0IGluc25fY2hhaW4qIHdoZW4KCWFzc2lnbmluZyB0byBvbmUuCgoJKiBydGwuYyAoY29weV9ydHgpOiBVc2UgbWVtY3B5IGluc3RlYWQgb2YgYmNvcHkuCgpGcmkgTWFyIDE5IDExOjE5OjMxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNhbGxzLmMgKGluaXRpYWxpemVfYXJndW1lbnRfaW5mb3JtYXRpb24pOiBNYXJrIHBhcmFtZXRlcnMKCWBudW1fYWN0dWFscycgYW5kIGBuX25hbWVkX2FyZ3MnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGRieG91dC5jIChkYnhvdXRfc3RhcnRfbmV3X3NvdXJjZV9maWxlKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlcgoJYGZpbGVuYW1lJy4KCShkYnhvdXRfZmluaXNoKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlcnMgYGZpbGUnIGFuZCBgZmlsZW5hbWUnLgoJKGRieG91dF9wcmVwYXJlX3N5bWJvbCk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYGRlY2wnLgoJKGRieG91dF9iZWdpbl9mdW5jdGlvbik6IExpa2V3aXNlLgoKCSogZXhwbG93LmMgKGhhcmRfZnVuY3Rpb25fdmFsdWUpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBmdW5jJy4KCgkqIGZ1bmN0aW9uLmMgKGxvY2F0ZV9hbmRfcGFkX3Bhcm0pOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGBmbmRlY2wnLgoKCSogZXhwbWVkLmMgKGV4cGFuZF9kaXZtb2QpOiBPbWl0IHVudXNlZCBhcmd1bWVudCB0byBgZXhwYW5kX2FicycuCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBMaWtld2lzZS4KCSogZXhwci5oIChleHBhbmRfYWJzKTogRGVsZXRlIHVudXNlZCBhcmd1bWVudCBmcm9tIHByb3RvdHlwZS4KCSogb3B0YWJzLmMgKGV4cGFuZF9hYnMpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgdW5zaWduZWRwJy4KCgkqIHNkYm91dC5jIChzZGJvdXRfaW5pdCk6IE1hcmsgcGFyYW1ldGVyIGBzeW1zJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkoc2Rib3V0X2VuZF9ibG9jayk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYG4nLgoKCSogdG9wbGV2LmMgKGRlYnVnX2RlZmluZSk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXJzIGBsaW5lbm8nIGFuZAoJYGJ1ZmZlcicuCgkoZGVidWdfdW5kZWYpOiBMaWtld2lzZS4KCgkqIHZhcmFzbS5jIChuYW1lZF9zZWN0aW9uKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciAncmVsb2MnLgoJKGFzc2VtYmxlX2V4dGVybmFsKTogTGlrZXdpc2UgZm9yIHBhcmFtZXRlciBgZGVjbCcuCgkoYXNzZW1ibGVfYWxpYXMpOiBMaWtld2lzZSBmb3IgcGFyYW1ldGVyIGB0YXJnZXQnLgoKRnJpIE1hciAxOSAwMTo1NDozMCAxOTk5ICBUaGVvZG9yZSBQYXBhZG9wb3VsbyAgPFRoZW9kb3JlLlBhcGFkb3BvdWxvQHNvcGhpYS5pbnJpYS5mcj4KCgkqIHRvcGxldi5jIChyZWFkX2ludGVncmFsX3BhcmFtZXRlcik6IENvbnN0aWZ5LiAgQmV0dGVyIGNvbnRyb2wgb2YKCWVycm9yIG1lc3NhZ2VzLgoJKG1haW4pOiBVc2UgcmVhZF9pbnRlZ3JhbF9wYXJhbWV0ZXIgdG8gc2V0IG9wdGltaXplLCBpZF9jbGFzaF9sZW4sCglsYXJnZXJfdGhhbl9zaXplLCBhbmQgdGhlIGRlYnVnZ2luZyBsZXZlbC4KCSogdG9wbGV2LmggKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogVXBkYXRlIHByb3RvdHlwZS4KCkZyaSBNYXIgMTkgMDE6NDI6MDUgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIHN5c3RlbS5oOiBVc2UgcHV0Y191bmxvY2tlZCwgZnB1dGNfdW5sb2NrZWQsIGFuZAoJZnB1dHNfdW5sb2NrZWQgb25seSBpZiBwdXRjX3VubG9ja2VkIGhhcyBhIHByb3RvdHlwZSBhbHJlYWR5LgoJUHJvdG90eXBlIGZwdXRzX3VubG9ja2VkIGlmIG5lY2Vzc2FyeS4KCSogY29uZmlndXJlLmluOiBDaGVjayBmb3IgcHJvdG90eXBlcyBvZiBwdXRjX3VubG9ja2VkIGFuZAoJZnB1dHNfdW5sb2NrZWQuCgkqIGFjY29uZmlnLmg6IFVwZGF0ZWQuCgkqIGNvbmZpZy5pbiwgY29uZmlndXJlOiBSZWJ1aWx0LgoKRnJpIE1hciAxOSAwMjo0NToxMiAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIE1ha2VmaWxlLmluIChJTlRMX1RBUkdFVFMpOiBOZXcgbWFjcm8uCgkoJChJTlRMX1RBUkdFVFMpKTogRGVwZW5kIG9uIGdlbmVyYXRlZCBzb3VyY2VzOyBkcm9wIGRlcGVuZGVuY2llcwoJb24gY3AvcGFyc2UuYyBhbmQgb2JqYy9vYmpjLXBhcnNlLmMuCgkoJChzcmNkaXIpL2NwL3BhcnNlLmMpOiBNb3ZlIHRvIGNwL01ha2UtbGFuZy5pbi4KCSogb2JqYy9NYWtlLWxhbmcuaW4gKCQoSU5UTF9UQVJHRVRTKSk6IERlcGVuZCBvbiBvYmpjL29iamMtcGFyc2UuYy4KClRodSBNYXIgMTggMjI6Mjg6NTMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTg2MC5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogaTg2MC9wYXJhZ29uLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBpMzcwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBmeDgwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKiBlbHhzaS5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogY2xpcHBlci5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZG9jdW1lbnRhdGlvbi4KCSogMTc1MGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIHBhLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoJKFRBUkdFVF9PUFRJT05TKTogTGlrZXdpc2UuCgkqIG1uMTAzMDAuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24uCgkqIGg4MzAwLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCBkb2N1bWVudGF0aW9uLgoKVGh1IE1hciAxOCAxNTo1ODoyNiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBEbyBub3QgcGVyZm9ybSBwc2V1ZG8gcmVwbGFjZW1lbnRzCglpZiB0aGUgbG9vcCBjb250YWlucyB2b2xhdGlsZSBtZW1vcnkgcmVmZXJlbmNlcy4KClRodSBNYXIgMTggMTk6MDk6NTAgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfdG9wbGV2KTogV2hlbiBwcm9jZXNzaW5nIFggcmVjdXJzaXZlbHksCglkb24ndCBhbHRlciBpdCBkZXN0cnVjdGl2ZWx5IGV4Y2VwdCBieSBmaWxsaW5nIGluIGNvbnN0YW50cy4KClRodSBNYXIgMTggMTA6MTQ6MTggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChkZWZhdWx0X2luY2x1ZGUpOiBJbml0aWFsaXplIHN0cnVjdHVyZSBtZW1iZXJzLgoJKHBhc3NfdGhydV9kaXJlY3RpdmUpOiBDaGFuZ2UgdGhlIHR5cGUgb2YgJ2tleXdvcmRfbGVuZ3RoJyB0byBpbnQuCgkobWFpbik6IENhc3QgYGJpbmR0ZXh0ZG9tYWluJyBhbmQgYHRleHRkb21haW4nIHRvICh2b2lkKS4KCgkqIGNvbGxlY3QyLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGNwcG1haW4uYyAobWFpbik6IExpa2V3aXNlLgoKCSogZ2NjLmMgKG1haW4pOiBMaWtld2lzZS4KCgkqIGdjb3YuYyAobWFpbik6IExpa2V3aXNlLgoKCSogcHJvdG9pemUuYyAobWFpbik6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKG1haW4pOiBMaWtld2lzZS4KCjE5OTktMDMtMTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBzX2V4cGxpY2l0X3R5cGVfc2l6ZV9zdHJpbmcpOiBDb3JyZWN0CglpdHMgdHlwZS4KClRodSBNYXIgMTggMDE6MjQ6MjUgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluOiBVc2UgImV4aXQgMSIsIG5vdCAiZXhpdCAoMSkiLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpXZWQgTWFyIDE3IDIzOjE3OjQyIDE5OTkgIE1hcmsgS2V0dGVuaXMgIDxrZXR0ZW5pc0BnbnUub3JnPgoKCSogY29uZmlnL3QtZ251IChTWVNURU1fSEVBREVSX0RJUik6IE5ldyB2YXJpYWJsZS4gIFNldCB0bwoJYC9pbmNsdWRlJyBpbiBvcmRlciB0byBmaW5kIHRoZSBzeXN0ZW0ncyBsaW1pdHMuaC4KCldlZCBNYXIgMTcgMjM6MDA6MTggMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBmaXhpbmMvZml4aW5jbC5jOiBJbmNsdWRlIGF1dG8taG9zdC5oIGluc3RlYWQgb2YgY29uZmlnLmguCgkqIGZpeGluYy9wcm9jb3Blbi5jOiBMaWtld2lzZS4KCSogZml4aW5jL3JlZ2V4LmM6IExpa2V3aXNlLgoJKiBmaXhpbmMvc2VydmVyLmM6IExpa2V3aXNlLgoKV2VkIE1hciAxNyAyMjo0NjoxMyAxOTk5ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQuCgoJKiBjb25maWcvaTM4Ni9nbzMyLmg6IERlbGV0ZS4KCSogY29uZmlnL2kzODYvZGpncHAuaDogTmV3LiBSZW5hbWVkIGZyb20gZ28zMi5oLgoJQWRkZWQgLURESkdQUD0yIHRvIENQUF9QUkVERUZJTkVTLgoJKiBjb25maWcvaTM4Ni9nbzMyLXJ0ZW1zLmg6IERlbGV0ZS4KCSogY29uZmlnL2kzODYvZGpncHAtcnRlbXMuaDogTmV3LiBSZW5hbWVkIGZyb20gZ28zMi1ydGVtcy5oLgoJQWRkZWQgLURESkdQUD0yIHRvIENQUF9QUkVERUZJTkVTLgoJKiBjb25maWcvaTM4Ni94bS1nbzMyLmg6IERlbGV0ZS4KCSogY29uZmlnL2kzODYveG0tZGpncHAuaDogTmV3LiBSZW5hbWVkIGZyb20geG0tZ28zMi5oLgoJKiBjb25maWcvaTM4Ni94LWdvMzI6IERlbGV0ZS4KCSogY29uZmlnL2kzODYveC1kamdwcDogTmV3LiBSZW5hbWVkIGZyb20geC1nbzMyLgoJKiBjb25maWcvaTM4Ni90LWdvMzI6IERlbGV0ZS4KCSogY29uZmlnL2kzODYvdC1kamdwcDogTmV3LiBSZW5hbWVkIGZyb20gdC1nbzMyLgoJKiBjb25maWd1cmUuaW4ocGMtbXNkb3NkamdwcCk6IFNldCB4bV9maWxlIHRvIGkzODYveG0tZGpncHAuaC4KCVNldCB0bV9maWxlIHRvIGkzODYvZGpncHAuaC4gU2V0IHRtYWtlX2ZpbGUgdG8gaTM4Ni90LWRqZ3BwLgoJU2V0IHhtYWtlX2ZpbGUgdG8gaTM4Ni94LWRqZ3BwLgoJKCotZ28zMi1tc2RvcywgKi1nbzMyKik6IFJlbW92ZSBlbnRyaWVzLiAgV2FybiB0aGF0IEdPMzIvREpHUFAgVjEuWAoJaXMgbm93IHVuc3VwcG9ydGVkIGFuZCAqLXBjLW1zZG9zZGpncHAgZm9yIERKR1BQIFYyLlggc2hvdWxkIGJlCgl1c2VkIGluc3RlYWQuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGdjYy5jIChwcm9jZXNzX2NvbW1hbmQpOiBEdW1wIGxpbmtfY29tbWFuZF9zcGVjIHRvby4KCldlZCBNYXIgMTcgMjA6Mzg6MDggMTk5OSAgSmVycnkgUXVpbm4gIDxqcXVpbm5Abm9ydGVsbmV0d29ya3MuY29tPgoJCQkgIEplZmYgTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBwYS5tZDogQWRkIHJlYWwgUEE4MDAwIHNjaGVkdWxpbmcgaW5mb3JtYXRpb24uCgoJKiBwYS5oIChwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfODAwMCBzeW1ib2wuCgkoSVNTVUVfUkFURSk6IFJldmFtcCwgaW5jbHVkaW5nIFBBODAwMCBzdXBwb3J0LgoJKiBwYS5jIChvdmVycmlkZV9vcHRpb25zKTogQWRkIDgwMDAgYXMgLW1zY2hlZHVsZT0gb3B0aW9uLgoJRG8gbm90IGNhbGwgc3RyY21wIGlmIHBhX2NwdV9zdHJpbmcgaXMgbnVsbC4KCSogcGEubWQgKGF0dHIgY3B1KTogQWRkIDgwMDAuCgkqIGludm9rZS50ZXhpOiBBZGQgZG9jdW1lbnRhdGlvbiBmb3IgUEE4MDAwIHNjaGVkdWxpbmcuCgpXZWQgTWFyIDE3IDE4OjIwOjI0IDE5OTkgIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoVEFSR0VUX1NXSVRDSEVTLCBUQVJHRVRfT1BUSU9OUyk6CglBZGQgZGVzY3JpcHRpb25zLgoJKiBjb25maWcvc3BhcmMvc3A2NC1lbGYuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9zcGxldC5oIChTVUJUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KCldlZCBNYXIgMTcgMTQ6NTE6MTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoY29tcHV0ZV9pbW1lZGlhdGVfZG9taW5hdG9ycyk6IE5ldyBmdW5jdGlvbi4KCSogYmFzaWMtYmxvY2suaCAoY29tcHV0ZV9pbW1lZGlhdGVfZG9taW5hdG9ycyk6IERlY2xhcmUgaXQuCgoJKiBhbHBoYS5oIChIQVJEX1JFR05PX01PREVfT0spOiBBbGxvdyBvbmx5IDQgYW5kIDggYnl0ZSB1bml0IG1vZGVzCglpbiBGUCByZWdzLgoJKE1PREVTX1RJRUFCTEVfUCk6IERlZmluZSBhc3ltbWV0cmljbHkgd3J0IG1vZGVzIGlsbGVnYWwgaW4gRlAgcmVncy4KCldlZCBNYXIgMTcgMTQ6NDE6NDEgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYW91dC5oIChBU01fR0VORVJBVEVfSU5URVJOQUxfTEFCRUwpOiBGaXggY29tcGlsZQoJdGltZSB3YXJuaW5nLgoJKiBjb25maWcvYXJtL2FybS5tZDogRml4IHZhcmlvdXMgY29tcGlsZSB0aW1lIHdhcm5pbmdzLgoJKiBjb25maWcvYXJtL2FybS5oOiBGaXggdmFyaW91cyBjb21waWxlIHRpbWUgd2FybmluZ3MuICBBZGQKCWZ1bmN0aW9uIHByb3RvdHlwZXMuCgkqIGNvbmZpZy9hcm0vYXJtLmM6IEZpeCB2YXJpb3VzIGNvbXBpbGUgdGltZSB3YXJuaW5ncy4KCShhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IFJlb3JnYW5pemUgdG8gc2VwYXJhdGUgdHVuaW5nIGZyb20KCXRhcmdldHRpbmcuCgkoYml0X2NvdW50KTogTmV3IGZ1bmN0aW9uOiBSZXR1cm4gYSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGJpdHMKCXNldCBpbiBhIHdvcmQuCgpXZWQgTWFyIDE3IDIxOjI5OjEyIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRG9uJ3Qga2VlcCBSRUdfREVBRCBub3RlcyBhcm91bmQgZm9yCgl0aGluZ3MgdGhhdCB3ZXJlIGVsaW1pbmF0ZWQuCgpXZWQgTWFyIDE3IDEyOjE2OjI2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChmaXh1cF92YXJfcmVmc18xKTogRmlyc3QgdHJ5IG1vdmluZyB0aGUgZXhwcmVzc2lvbgoJZGlyZWN0bHkgaW50byBhIHJlZ2lzdGVyLiAgRG9uJ3Qgc2VwYXJhdGUgY2MwIHNldHRlciBhbmQgdXNlci4KCldlZCBNYXIgMTcgMTE6MjA6MjkgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY3BwZmlsZXMuYyAoUElQRV9CVUYpOiAjZGVmaW5lIFBJUEVfQlVGIGlmIG5vdCBkZWZpbmVkIGFscmVhZHkuCgpXZWQgTWFyIDE3IDA5OjI1OjA2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGMtbGV4LmM6IERvbid0IGluY2x1ZGUgc2V0am1wLmguCgkocGFyc2VfZmxvYXQpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKHBmX2FyZ3MpOiBOZXcgc3RydWN0LgoJKHl5bGV4KTogVXNlIHRoZW0gaW4gY2FsbCB0byBgZG9fZmxvYXRfaGFuZGxlcicuCgoxOTk5LTAzLTE2ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBjZXhwLnkgKHl5ZXJyb3IpOiBDYWxsIHZlcnJvciB0byBnZXQgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZS4KCSogY2V4cC5jOiBSZWJ1aWx0LgoKCSogLmdkYmluaXQ6IE1vdmUgY29tbWFuZCB0byBwdXQgYnJlYWtwb2ludCBhdCBhYm9ydCB0byBlbmQgb2YgZmlsZQoJc28gdGhhdCBnZGIgZG9lcyBub3QgYmFpbCBvdXQgZWFybHkuCgpUdWUgTWFyIDE2IDE1OjMwOjE5IDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBydGwuaDogUmVuYW1lIHByb3RvdHlwZSBmb3IgZnJlZV9iYl9tZW1vcnkgdG8gZnJlZV9iYl9tZW0uCgpUdWUgTWFyIDE2IDIzOjQwOjA5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAobW92c2lfaSk6IE1vdmUgdC9yIGFsdGVybmF0aXZlIGFmdGVyIHIvckkgYWx0ZXJuYXRpdmUuCgpUdWUgTWFyIDE2IDEzOjQ0OjUwIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG1uMTAyMDAvbW4xMDIwMC5tZCAoYWRkc2kzLCBzdWJzaTMsIGFzaGxzaTMsIGxzaHJzaTMsIGFzaHJzaTMpOgoJRGVsZXRlIGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlIGRlY2xhcmF0aW9uLgoKMTk5OS0wMy0xNiAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBmaWxlcy5jIChyZWFkX2FuZF9wcmVzY2FuKTogTWFwIGJhY2tzbGFzaC1uZXdsaW5lIHRvICdccicKCSh3aGljaCBjYW5ub3Qgb3RoZXJ3aXNlIGFwcGVhciBpbiB0aGUgcHJvY2Vzc2VkIGJ1ZmZlcikgYW5kCgltb3ZlIGl0IG91dCBvZiB0b2tlbnMgdGhhdCBpdCBhcHBlYXJzIGluIHRoZSBtaWRkbGUgb2YuCglJbXByb3ZlIHBlcmZvcm1hbmNlLgoJKGZpbmRfcG9zaXRpb24pOiBOZXcgZnVuY3Rpb24uCgoJKiBjcHBsaWIuYzogXHIgKG9uZSBjaGFyYWN0ZXIpIGluZGljYXRlcyBiYWNrc2xhc2gKCW5ld2xpbmUsIG5vdCBcXFxuICh0d28gY2hhcmFjdGVycykuICBJdCBjYW5ub3QgYXBwZWFyIGluIHRoZQoJbWlkZGxlIG9mIGEgdG9rZW4uICBDYWxsIENQUF9CVU1QX0xJTkUgKHBmaWxlKSB3aGVuZXZlcgoJcGFyc2luZyBtb3ZlcyBwYXN0IFxuIG9yIFxyLiAgSW5jcmVtZW50IHBmaWxlLT5saW5lbm8gd2hlbmV2ZXIKCWEgXG4gaXMgcGxhY2VkIGludG8gdG9rZW5fYnVmZmVyLiAgT25seSBvbmUgbWFyayBjYW4gZXhpc3QgYXQKCWEgdGltZSwgYW5kIENQUF9CVU1QX0xJTkUgbXVzdCBub3QgYmUgdXNlZCB3aGlsZSBpdCBpcwoJYWN0aXZlLiAgSXQgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGJ5IGNwcF9wb3BfYnVmZmVyIGFuZAoJcGFyc2VfZ290b19tYXJrLiAgXHIgaXMgbm90IGluIGlzX2hvcl9zcGFjZSBvciBpc19zcGFjZS4KCgkoTkVXTElORV9GSVgsIE5FV0xJTkVfRklYMSwgYWRqdXN0X3Bvc2l0aW9uLAoJdXBkYXRlX3Bvc2l0aW9uLCBjb3VudF9uZXdsaW5lcywgcGFyc2VfbW92ZV9tYXJrKTogUmVtb3ZlZC4KCShwYXJzZV9zdHJpbmcsIGNvcHlfY29tbWVudCk6IE5ldyBmdW5jdGlvbnMuCgkocGFyc2VfbmFtZSk6IFJldHVybnMgdm9pZC4KCShwYXJzZV9zZXRfbWFyaywgcGFyc2VfY2xlYXJfbWFyaywgcGFyc2VfZ290b19tYXJrKTogVGFrZSBvbmx5CglvbmUgYXJndW1lbnQsIGEgY3BwX3JlYWRlciAqLiAgQ2hhbmdlIGZvciBuZXcgbWFya2luZyBzY2hlbWUuCgkoc2tpcF9jb21tZW50KTogSGFuZGxlIENISUxMIGxpbmUgY29tbWVudHMgdG9vLiAgU2Vjb25kCglhcmd1bWVudCBpcyBub3cgZmlyc3QgY2hhcmFjdGVyIG9mIGNvbW1lbnQgbWFya2VyOyBhbGwgY2FsbGVycwoJY2hhbmdlZC4gIElzc3VlIGVycm9yIGZvciB1bnRlcm1pbmF0ZWQgYmxvY2sgY29tbWVudCBoZXJlLgoJKGNwcF9za2lwX2hzcGFjZSk6IFJlY29nbml6ZSBDSElMTCBjb21tZW50cy4KCShjb3B5X3Jlc3Rfb2ZfbGluZSk6IExpa2V3aXNlLiAgQ2FsbCBza2lwX2NvbW1lbnQgYW5kCglwYXJzZV9zdHJpbmcgZGlyZWN0bHksIGRvbid0IGdvIHRocm91Z2ggY3BwX2dldF90b2tlbi4gIEVtaXQKCSIvKiovIiBmb3IgYmxvY2sgY29tbWVudHMgaWYgLXRyYWRpdGlvbmFsIChjcmVhdGVfZGVmaW5pdGlvbgoJbmVlZHMgdGhpcykuCgkoZG9fZGVmaW5lKTogRG9uJ3QgcGxheSB3aXRoIHB1dF9vdXRfY29tbWVudHMuCgkoY3BwX3B1c2hfYnVmZmVyKTogSW5pdGlhbGl6ZSAtPm1hcmsgdG8gLTEuCgkoY3BwX2J1Zl9saW5lX2FuZF9jb2wpOiBKdXN0IHJlYWQgb3V0IHRoZSB2YWx1ZXMgaW4gdGhlIGJ1ZmZlcgoJc3RydWN0dXJlLgoJKG91dHB1dF9saW5lX2NvbW1hbmQpOiBVc2UgY3BwX2J1Zl9saW5lX2FuZF9jb2wuICBGaXgKCWZvcm1hdHRpbmcuICBSZW1vdmUgc3RhbGUgY29kZS4KCShjcHBfZ2V0X3Rva2VuKTogQnJlYWsgb3V0IHN0cmluZyBwYXJzaW5nIGNvZGUgdG8KCXBhcnNlX3N0cmluZy4gIFVzZSBza2lwX2NvbW1lbnQgZm9yIENISUxMIGNvbW1lbnRzIHRvby4gIFVzZQoJY29weV9jb21tZW50IGZvciBwdXRfb3V0X2NvbW1lbnRzIGluc3RlYWQgb2YgZGlua2luZyB3aXRoCgltYXJrcy4gIFJlbW92ZSBzdGFsZSBjb2RlLiAgRG9uJ3QgY2FsbCBvdXRwdXRfbGluZV9jb21tYW5kCgl1bmxlc3MgaXQncyBuZWNlc3NhcnkuCgoJKiBjcHBsaWIuaCAocGFyc2VfbWFya2VyKTogUmVtb3ZlZC4KCShzdHJ1Y3QgY3BwX2J1ZmZlcik6IExpbmVfYmFzZSBpcyBub3cgYSB1bnNpZ25lZCBjaGFyICo7IGFkZAoJYG1hcmsnIFtsb25nXSwgcmVtb3ZlIGBtYXJrcycgW3N0cnVjdCBwYXJzZV9tYXJrZXIgKl0uCgkocGFyc2Vfc2V0X21hcmssIHBhcnNlX2NsZWFyX21hcmssIHBhcnNlX2dvdG9fbWFyayk6IFVwZGF0ZQoJcHJvdG90eXBlcy4KCShDUFBfQlVNUF9MSU5FLCBDUFBfQlVNUF9CVUZGRVJfTElORSk6IE5ldyBtYWNyb3MuCgkqIGNwcGluaXQuYyAoaXNfaG9yX3NwYWNlLCBpc19zcGFjZSk6ICdccicgaXMgbm90IGNvbnNpZGVyZWQKCXdoaXRlc3BhY2UuCgkqIGNwcGV4cC5jIChjcHBfcGFyc2VfZXhwcmVzc2lvbik6IFVzZSBjcHBfc2tpcF9oc3BhY2UsIG5vdAoJU0tJUF9XSElURV9TUEFDRS4KCSogY3BwaGFzaC5jIChtYWNhcmcpOiBEaXNhYmxlIGxpbmUgY29tbWFuZHMgd2hpbGUgZXhwYW5kaW5nLgoKVHVlIE1hciAxNiAxMTozMDoxOSAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KSA6IFJlbW92ZSB3YXJuaW5nIGZvciBpbnRlZ2VyIGxpdGVyYWxzIGJlaW5nCglsYXJnZXIgdGhhbiB0aGUgbGFyZ2VzdCB0YXJnZXQgaW50LiAgQWRkIHdhcm5pbmcgZm9yIGludGVnZXIKCWxpdGVyYWwgYmVpbmcgbGFyZ2VyIHRoYW4gdGhhbiBpdHMgY2hvc2VuIHR5cGUuCgpUdWUgTWFyIDE2IDEwOjUzOjE3IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogaW52b2tlLnRleGk6IEFkZCAtbWxvbmczMiBkb2N1bWVudGF0aW9uLgoJKiBjb25maWcvbWlwcy9taXBzLmggKG1pcHNfZXhwbGljaXRfdHlwZV9zaXplX3N0cmluZyk6IE5ldy4KCShUQVJHRVRfU1dJVENIRVMpOiBBZGQgJ2xvbmczMicuCgkoVEFSR0VUX09QVElPTlMpOiBBZGQgJ2V4cGxpY2l0LXR5cGUtc2l6ZScuCgkoQ0MxX1NQRUNTKTogU2V0IC1tZXhwbGljaXQtdHlwZS1zaXplLgoJKExPTkdfTUFYX1NQRUMpOiBDaGFuZ2UgYSB1c2Ugb2YgJ25vLWxvbmc2NCcgdG8gJ2xvbmczMicuCgkqIGNvbmZpZy9taXBzL2FiaTY0LmggKExPTkdfTUFYX1NQRUMpOiBTYW1lLiAgQWRkICdtYWJpPTMyJy4KCSogY29uZmlnL21pcHMvbWlwcy5jIChtaXBzX2V4cGxpY2l0X3R5cGVfc2l6ZV9zdHJpbmcpOiBOZXcuCgkob3ZlcnJpZGVfb3B0aW9ucyk6IFVzZSBpdC4KCSogY29uZmlnL21pcHMvb3Nmcm9zZS5oIChDQzFfU1BFQ1MpOiBTZXQgLW1leHBsaWNpdC10eXBlLXNpemUuCgoJKiBjb25maWcvbWlwcy9taXBzLmggKFNVQlRBUkdFVF9DUFBfU0laRV9TUEVDKToKCVBvaW50ZXIgc2l6ZSBub3cgZGVwZW5kcyBvbiBib3RoIHNpemUgbG9uZ3MgYW5kIHNpemUgb2YgR1AKCXJlZ2lzdGVycy4KClR1ZSBNYXIgMTYgMTA6MjI6MjIgMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9pcmlzLmggKENUT1JTX1NFQ1RJT05fQVNNX09QLERUT1JTX1NFQ1RJT05fQVNNX09QLAoJZHRvcnNfc2VjdGlvbik6IFVzZSBQbW9kZSA9PSBESW1vZGUgcmF0aGVyIHRoYW4gVEFSR0VUX0xPTkc2NC4KCSogY29uZmlnL21pcHMvbWlwcy5jIChvdmVycmlkZV9vcHRpb25zKTogQWxsb3cgLW1sb25nNjQgYW5kCgktbWludDY0IHdpdGggLW1pcHMyIG9yIGxlc3MuCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoTUFTS19MT05HNjQpOiBGaXggY29tbWVudC4KCShQT0lOVEVSX1NJWkUpOiBVc2UgUG1vZGUgPT0gREltb2RlIHJhdGhlciB0aGFuIFRBUkdFVF9MT05HNjQuCgkoUG1vZGUpOiBNYWtlIFBtb2RlIHRoZSBzbWFsbGVyIG9mIGxvbmdzIG9yIGdwIHJlZ2lzdGVycy4KCSogaW52b2tlLnRleGk6IE5vdGUgdGhlIG5ldyBzaXplIGZvciBwb2ludGVycy4KCk1vbiBNYXIgMTUgMjI6NDU6MjUgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfe0RPVUJMRSxGTE9BVH0pOiBBbHdheXMgZ2VuZXJhdGUgSUVFRSA3NTQKCWJpdC1wYXR0ZXJuIGRpcmVjdGx5LgoJKEFTTV9PVVRQVVRfUkVHX3tQVVNILFBPUH0pOiBEZWxldGUuCgkqIHJzNjAwMC5jIChmaXJzdF9yZWdfdG9fc2F2ZSk6IElmIHByb2ZpbGluZyBhbmQgY29udGV4dCBuZWVkZWQsCglhbGxvY2F0ZSBhIHJlZyB0byBzYXZlIHN0YXRpYyBjaGFpbiBmb3IgYWxsIEFCSXMuICBGb3IgQUlYCglwcm9maWxpbmcsIGNhbGN1bGF0ZSBwYXJhbWV0ZXIgcmVnaXN0ZXJzIHRvIHNhdmUgYmFzZWQgb24gbmVlZC4KCShvdXRwdXRfZnVuY3Rpb25fcHJvZmlsZXIpOiBTYXZlIGFuZCByZXN0b3JlIHN0YXRpYyBjaGFpbiBhcm91bmQKCXByb2ZpbGUgY2FsbCBmb3IgYWxsIEFCSXMuCgoxOTk5LTAzLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGluaXQuYzogSW5zdGVhZCBvZiBvbmUgcGVuZGluZyBsaXN0LCBrZWVwIHNlcGFyYXRlIGxpc3RzCglmb3IgZWFjaCBjYXRlZ29yeSBvZiBwZW5kaW5nIG9wdGlvbjogLUQvLVUsIC1BLCAtaW5jbHVkZSwKCS1pbWFjcm9zLiAgTW92ZSB0aGUgZm91ciBwYXJ0aWFsIGluY2x1ZGUtcGF0aCBsaXN0cyBpbnRvIHRoZQoJcGVuZGluZyBibG9jay4gIFVzZSBoZWFkIGFuZCB0YWlsIHBvaW50ZXJzIHNvIHdlIGRvbid0IGV2ZXIKCWhhdmUgdG8gcmV2ZXJzZSB0aGUgbGlzdHMuCgoJKGNwcF9zdGFydF9yZWFkKTogQnJlYWsgb3V0IGJsb2NrcyBvZiBjb2RlIHRvIHRoZWlyIG93bgoJZnVuY3Rpb25zOiBpbnN0YWxsX3ByZWRlZnMgYW5kIGluaXRpYWxpemVfZGVwZW5kZW5jeV9vdXRwdXQuCglVc2UgcGF0aF9pbmNsdWRlIGZvciBDX0lOQ0xVREVfUEFUSCBhbmQgZnJpZW5kcyBhcyB3ZWxsIGFzCglDUEFUSC4gIFJlbW92ZSBpbmNsdWRlX2RlZmF1bHRzIGd1bmsuICBXYXJuIGFib3V0IHRoZQoJY29tYmluYXRpb24gb2YgLWxhbmctY2hpbGwgYW5kIC10cmlncmFwaHMuICBPcHRpbWl6ZSBzdHJpbmcKCWJhc2hpbmcuICBXYWxrIGVhY2ggcGVuZGluZyBsaXN0IG9uY2UsIGRlYWxsb2NhdGluZyBhcyB3ZSBnby4KCgkoYXBwZW5kX2luY2x1ZGVfY2hhaW4pOiBCcm91Z2h0IG92ZXIgZnJvbSBjcHBmaWxlcy5jLiAgTWFyawoJZGlycyBhcyBzeXN0ZW0gaW5jbHVkZSBkaXJzIGlmIGFuZCBvbmx5IGlmIGFwcGVuZGluZyB0bwoJc3lzdGVtIGluY2x1ZGUgcGF0aC4gSWYgb3B0cy0+dmVyYm9zZSwgcHJpbnQgYSBub3RpY2Ugd2hlbiBhCglkaXIgaXMgZHJvcHBlZCBmcm9tIHRoZSBpbmNsdWRlIHBhdGggYmVjYXVzZSBpdCBkb2Vzbid0CglleGlzdC4gIEZpeCBtZW1vcnkgbGVhazogdGhpcyBmdW5jdGlvbiBpcyBub3Qgc3VwcG9zZWQgdG8gY29weQoJaXRzIERJUiBhcmd1bWVudC4KCgkobnJldmVyc2VfcGVuZGluZywgcHVzaF9wZW5kaW5nKTogUmVtb3ZlZC4KCShBUFBFTkQpOiBOZXcgbWFjcm8gZm9yIGFkZGluZyB0byBwZW5kaW5nIGxpc3RzLgoJKHBhdGhfaW5jbHVkZSk6IENhbiBub3cgYWRkIHRvIGFueSBwYXJ0aWFsIGluY2x1ZGUgcGF0aC4KCShiYXNlX25hbWUpOiBCcmluZyBvdmVyIGZyb20gY2NjcC5jLgoJKGNwcF9vcHRpb25zX2luaXQpOiBBbGxvY2F0ZSB0aGUgcGVuZGluZyBibG9jay4KCShjcHBfaGFuZGxlX29wdGlvbik6IEFkZCAtLXZlcnNpb24uICBFeGl0IGFmdGVyIC0taGVscC4gIEZpeAoJZm9ybWF0dGluZy4gIE9yZGVyIC1pZm9vIG9wdGlvbnMgYnkgZnJlcXVlbmN5IG9mIHVzYWdlLgoJKGluc3RhbGxfcHJlZGVmcyk6IE5ldyBmdW5jdGlvbiwgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIGNvZGUKCXRoYXQgd2FzIGluIGNwcF9zdGFydF9yZWFkLgoJKGluaXRpYWxpemVfZGVwZW5kZW5jeV9vdXRwdXQpOiBMaWtld2lzZS4gIFVuZGVyc3RhbmQgT0JKRUNUX1NVRkZJWC4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogRXhwb3J0LgoJKG1lcmdlX2luY2x1ZGVfY2hhaW5zKTogRG9uJ3QgbnJldmVyc2UgdGhlIGxpc3RzLiAgSWYKCW9wdHMtPnZlcmJvc2UsIHByaW50IGEgbm90aWNlIHdoZW4gYSBkdXBsaWNhdGUgZGlyIGlzIGRldGVjdGVkCglhbmQgZHJvcHBlZCBmcm9tIHRoZSBpbmNsdWRlIHBhdGguCgkoZmluY2x1ZGUpOiBGaXggZXhjZXNzaXZlIGNsZXZlcm5lc3MgaW4gc2V0dGluZwoJZnAtPnN5c3RlbV9oZWFkZXJfcC4KCShhY3R1YWxfZGlyZWN0b3J5KTogU2V0IHgtPnN5c3AgZnJvbQoJQ1BQX0JVRkZFUiAocGZpbGUpLT5zeXN0ZW1faGVhZGVyX3Agc28gdGhhdCBvbmUgc3lzdGVtIGhlYWRlcgoJbWF5IGluY2x1ZGUgYW5vdGhlciB3aXRoICIiLgoJKGRlcHNfb3V0cHV0KTogRml4IGRvdWJsZSBhZGp1c3RtZW50IG9mIGRlcHNfc2l6ZSB3aGljaCB3b3VsZAoJY2F1c2UgYWxsIGRlcGVuZGVuY2llcyBhZnRlciB0aGUgZmlyc3QgdHdvIGxpbmVzIHRvIGJlIGxvc3QuCgoJKiBjcHBsaWIuYyAoY3BwX3VuYXNzZXJ0KTogTmV3IGZ1bmN0aW9uLgoJKiBjcHBsaWIuaDogTGF5IG91dCBzdHJ1Y3QgY3BwX3BlbmRpbmcgaGVyZS4gIEFkanVzdAoJcHJvdG90eXBlcy4gIEFkZCBpbmNsdWRlX3ByZWZpeF9sZW4gdG8gc3RydWN0IGNwcF9vcHRpb25zLgoKTW9uIE1hciAxNSAxNjowMTo1MiAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlzcC9taXBzLmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IE1ha2UgdGhlIGNvc3Qgb2YgbW92aW5nCglmcm9tIEhJL0xPL0hJTE8vTUQgaW50byBnZW5lcmFsIHJlZ2lzdGVycyB0aGUgc2FtZSBhcyBmb3Igb25lCglvZiBtb3ZpbmcgZ2VuZXJhbCByZWdpc3RlcnMgdG8gSEkvTE8vSElMTy9NRC4KCk1vbiBNYXIgMTUgMTI6Mzk6MzggMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tMzJyL20zMnIuYyAoaW5pdF9pZGVudHMpOiBOZXcgZnVuY3Rpb24uICBJbml0aWFsaXplCglzdGF0aWMgdHJlZSBub2RlcyBmb3IgbTMyciBzcGVjaWZpYyBhdHRyaWJ1dGUgaWRlbnRpZmllcnMuICBSZW1vdmUKCWxlYWRpbmcgYW5kIHRyYWlsaW5nIGRvdWJsZSB1bmRlcnNjb3JlcyBmcm9tIHRoZSBhdHRyaWJ1dGUgbmFtZXMuCgkobTMycl92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogQ2FsbCBpbml0X2lkZW50cy4KCShtMzJyX2VuY29kZV9zZWN0aW9uX2luZm8pOiBDYWxsIGluaXRfaWRlbnRzLgoKTW9uIE1hciAxNSAxMDoyMDoyMCAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEFkZCBhIFJFR19MQUJFTCBub3RlIGlmIHdlIHN1YnN0aXR1dGUgYQoJTEFCRUxfUkVGIGZvciBzb21ldGhpbmcgZWxzZS4KCk1vbiBNYXIgMTUgMDg6MjQ6MTcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZm9sZC1jb25zdC5jIChleGFjdF9yZWFsX2ludmVyc2UpOiBNb3ZlIHZhcmlhYmxlIGBmbG9hdF9lcnJvcicKCWludG8gdGhlIHNjb3BlIHdoZXJlIGl0IGlzIHVzZWQuCgkoY29uc3RfYmlub3BfMSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoY2JfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoY29uc3RfYmlub3ApOiBVc2UgdGhlbSBpbiBjYWxsIHRvIGBkb19mbG9hdF9oYW5kbGVyJy4KCShmb2xkX2NvbnZlcnRfMSk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZmNfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoZm9sZF9jb252ZXJ0KTogVXNlIHRoZW0gaW4gY2FsbCB0byBgZG9fZmxvYXRfaGFuZGxlcicuCgpNb24gTWFyIDE1IDIyOjUwOjE4IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHJ0bGFuYWwuYyAoYXV0b19pbmNfcCk6IE5ldyBmdW5jdGlvbi4KCSogcnRsLmggKGF1dG9faW5jX3ApOiBQcm90b3R5cGUgaXQuCgkqIHJlbG9hZDEuYyAoYWRkX2F1dG9faW5jX25vdGVzKTogTmV3IGZ1bmN0aW9uLgoJKHJlbG9hZCk6IFN0cmlwIFJFR19JTkMgbm90ZXMgYW5kIGNhbGwgYWRkX2F1dG9faW5jX25vdGVzCglmb3IgZWFjaCBpbnNuIHRvIHJlc3RvcmUgdGhlbSBjb3JyZWN0bHkuCgoxOTk5LTAzLTE1ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvTWFrZWZpbGUuaW4gKHByb2NvcGVuLm8pOiBMaXN0IHRoZSBhY3R1YWwKCWRlcGVuZGVuY2llcy4KClN1biBNYXIgMTQgMTY6MjI6MTAgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY3NlLmMgKGNoZWNrX2ZvbGRfY29uc3RzKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShjZmNfYXJncyk6IE5ldyBzdHJ1Y3QuCgkoc2ltcGxpZnlfcmVsYXRpb25hbF9vcGVyYXRpb24pOiBVc2UgdGhlbSBpbiBjYWxsIHRvCglgZG9fZmxvYXRfaGFuZGxlcicuCgoJKiB0b3BsZXYuYyAoZG9fZmxvYXRfaGFuZGxlcik6IE5ldyBmdW5jdGlvbiB0byB3cmFwIGNhbGxzIHRvCglzZXRqbXAvc2V0X2Zsb2F0X2hhbmRsZXIuCgoJKiB0b3BsZXYuaCAoZG9fZmxvYXRfaGFuZGxlcik6IEFkZCBleHRlcm4gcHJvdG90eXBlLgoKCSogdHJlZS5jIChidWlsZF9yZWFsX2Zyb21faW50X2NzdF8xKTogTmV3IHN0YXRpYyBmdW5jdGlvbi4KCShicmZpY19hcmdzKTogTmV3IHN0cnVjdC4KCShidWlsZF9yZWFsX2Zyb21faW50X2NzdCk6IFVzZSB0aGVtIGluIGNhbGwgdG8KCWBkb19mbG9hdF9oYW5kbGVyJy4KClN1biBNYXIgMTQgMDE6MTU6MDYgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgTWFyIDEzIDE3OjM3OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplXzEpOiBPbmx5IGNsZWFyIHJlZ19sYXN0X3VzZXMgb24gYSBTRVQuCgpTYXQgTWFyIDEzIDExOjM2OjE2IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmMgKGFybV9zcGxpdF9jb25zdGFudCk6IERvbid0IHRyeSB0byBmb3JjZSBhIGNvbnN0YW50IHRvCgltZW1vcnkgYWZ0ZXIgYXJtX3Jlb3JnIGhhcyBydW4uCgkoYWZ0ZXJfYXJtX3Jlb3JnKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShhcm1fcmVvcmcpOiBTZXQgaXQuCgkob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiBDbGVhciBpdC4KCkZyaSBNYXIgMTIgMjA6MjY6MzIgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogY29uZmlndXJlLmluICh7cnM2MDAwLHBvd2VycGN9LWlibS1haXgqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBub25lLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgTWFyIDEyIDIwOjQ1OjMwIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAobG9vcF9pdGVyYXRpb25zKTogRG9uJ3QgcmV0dXJuIGEgZmluYWwgdmFsdWUgZm9yIEVRCgljb21wYXJpc29uIGxvb3BzLgoKRnJpIE1hciAxMiAxMjozNTowMSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBXaGVuIGlnbm9yZSBlcXVpdmFsZW5jZQoJc2V0dGluZyBpbnNuLCBjbGVhciBuZWVkX2VsaW0sIG5lZWRfcmVsb2FkLCBhbmQgbmVlZF9vcGVyYW5kX2NoYW5nZS4KCkZyaSBNYXIgMTIgMDc6NTQ6NDMgMTk5OSAgQnJ1Y2UgS29yYiAgPGtvcmJAZGF0YWRlc2lnbi5jb20+CgoJKiBmaXhpbmMvZml4aW5jLio6IFNvbWUgY2hhbmdlcyBmcm9tIHRoZSBmaXhpbmNsLWJyYW5jaAoJd2VyZSBub3QgYXBwbGllZCAoPz8hISkuICBDb3JyZWN0ZWQuCgoJKiBmaXhpbmMvTWFrZWZpbGUuaW46IFNhbWUgdGhpbmcuCgpGcmkgTWFyIDEyIDAwOjUxOjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBBbGxvdyBhIENBTExfRVhQUiB3aXRoIGEgbW9kZSB3aWRlciB0aGFuCglNQVhfSU5URUdFUl9DT01QVVRBVElPTl9NT0RFLgoKVGh1IE1hciAxMSAxNDowMDo1OCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogRGlzYWxsb3cgUUkvSEltb2RlIGluIGZwIHJlZ3MuCgkoTU9ERVNfVElFQUJMRV9QKTogVXBkYXRlLgoKCSogYWxwaGEubWQgKGV2NV9lMCk6IENvbmZsaWN0IGxvYWRzIGFuZCBzdG9yZXMuCgpUaHUgTWFyIDExIDEzOjU1OjUyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBtYWNobW9kZS5oIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogUHJvdG90eXBlLgoJKiBzdG9yLWxheW91dC5jIChzbWFsbGVzdF9tb2RlX2Zvcl9zaXplKTogUmVtb3ZlIHN0YXRpYy4KClRodSBNYXIgMTEgMjE6MjU6NTkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRG9uJ3QgZG8gYml2IGluY3JlbWVudCAtPiBERVNUX1JFRyBnaXYKCWNvbnZlcnNpb24gaWYgd2UgZG9uJ3Qga25vdyB0aGUgbGlmZXRpbWUuCgpUaHUgTWFyIDExIDIwOjM3OjU5IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQuMWMgKGRlbGV0ZV9hZGRyZXNzX3JlbG9hZHNfMSk6IENoZWNrIGZvciByZWxvYWRzIG9mCglDVVJSRU5UX0lOU04gZXZlbiBpZiBpdCBzZXRzIERTVC4KClRodSBNYXIgMTEgMTA6Mjk6NTAgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGFkZF9BVF9sYmxfb2Zmc2V0KTogUmVuYW1lIGZyb20gYWRkX0FUX3NlY3Rpb25fb2Zmc2V0LgoJKHByaW50X2RpZSwgc2l6ZV9vZl9kaWUsIHZhbHVlX2Zvcm1hdCwgb3V0cHV0X2RpZSk6IEFkanVzdC4KClRodSBNYXIgMTEgMTA6Mjc6NDIgMTk5OSAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsaXBlQHVzYS5uZXQ+CgoJKiBkd2FyZjJvdXQuYyAoVEVYVF9TRUNUSU9OX0xBQkVMLCBERUJVR19MSU5FX1NFQ1RJT05fTEFCRUwsCglERUJVR19JTkZPX1NFQ1RJT05fTEFCRUwsIEFCQlJFVl9TRUNUSU9OX0xBQkVMLAoJdGV4dF9zZWN0aW9uX2xhYmVsLCBkZWJ1Z19saW5lX3NlY3Rpb25fbGFiZWwsCglkZWJ1Z19pbmZvX3NlY3Rpb25fbGFiZWwsIGFiYnJldl9zZWN0aW9uX2xhYmVsKTogTmV3LgoJKG91dHB1dF9jb21waWxhdGlvbl91bml0X2hlYWRlcik6IEVtaXQgbGFiZWwgYXNzb2NpYXRlZAoJd2l0aCBzZWN0aW9uIGluc3RlYWQgb2Ygc2VjdGlvbiBuYW1lIGl0c2VsZi4KCShvdXRfcHVibmFtZXMsIG91dHB1dF9hcmFuZ2VzLCBvdXRwdXRfbGluZV9pbmZvLAoJZHdhcmYyb3V0X2ZpbmlzaCk6IExpa2V3aXNlLgoJKGR3YXJmMm91dF9pbml0KTogQnVpbGQgaW50ZXJuYWwgbGFiZWwgbmFtZXMgZm9yIHNlY3Rpb25zCglmcm9tIHN0YXRpYyBsYWJlbHMuCgpUaHUgTWFyIDExIDE3OjI4OjMyIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5tZCAobXVsc2kzKTogRW5kIG11bC5sIHNlcXVlbmNlIHdpdGggYSBuby1vcCBtb3ZlLgoKVGh1IE1hciAxMSAwODo1MjowMiAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIE1ha2VmaWxlLmluOiBBY3RpdmF0ZWQgZml4aW5jL21rZml4aW5jLnNoLgoJKiBjb25maWd1cmUuaW46IEFjdGl2YXRlZCBmaXhpbmMvbWtmaXhpbmMuc2guCgpUaHUgTWFyIDExIDAxOjM4OjAyIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY3BwZmlsZXMuYyAoSU5PX1RfRVEpOiBIYW5kbGUgVVdJTi4KCgkqIGMtY29tbW9uLmMgKGRlY2xfYXR0cmlidXRlcyk6IEZsYWcgdW5yZWNvZ25pemVkIGF0dHJpYnV0ZQoJZnVuY3Rpb25zIGFzIHdhcm5pbmdzIGluc3RlYWQgb2YgYXMgZXJyb3JzLgoKCVN1cHBvcnQgZm9yIGkzODYtcGMtdXdpbi4KCSogaTM4Ni91d2luLmg6IE5ldyBmaWxlLgoJKiBpMzg2L3htLXV3aW4uaDogTmV3IGZpbGUuCgkqIGkzODYvdC11d2luOiBOZXcgZmlsZS4KCSogaTM4Ni91d2luLmFzbTogTmV3IGZpbGUuCgkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2XTg2LSotdXdpbiopOiBEZWZpbmUuCglBZGQgV29ya2Fyb3VuZCBmb3IgdmZvcmsgYnVnIHdoZW4gaG9zdGVkIG9uIHV3aW4uCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCgkqIGNjY3AuYyAoSU5PX1RfRVEpOiBVbmRlZmluZS4gVVdJTiBoYXMgaW5vZGVzLgoJKGFic29sdXRlX2ZpbGVuYW1lKTogVVdJTiB1c2VzIFBPU0lYIHBhdGhuYW1lcyBvbmx5LgoJKiBsaWJnY2MyLmMgKGdldHBhZ2VzaXplKTogRG8gbm90IGRlZmluZSBmb3IgVVdJTi4KCShtcHJvdGVjdCk6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jIChkaXJlbnQuaCk6IENvbmRpdGlvbmFsbHkgaW5jbHVkZS4KCShmcHV0Yyk6IFByb3RvdHlwZSBvbmx5IGlmIGl0J3Mgbm90IGEgbWFjcm8uCgpXZWQgTWFyIDEwIDAyOjQ5OjA0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIGluaXRfcHJpb3JpdHkgc3R1ZmYuCgoxOTk5LTAzLTExICBDb2xpbiBTbWl0aCAgPGNvbGluQHdycy5jb20+CgoJKiBzZGJvdXQuYyAocGxhaW5fdHlwZV8xKTogTWFrZSBib29sZWFuIHR5cGVzIHdvcmsgYmV0dGVyIHdpdGggc2RiLgoKVGh1IE1hciAxMSAwMDoyMDo1MiAxOTk5ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGdjYy50ZXhpOiBVcGRhdGUgYnVnIHJlcG9ydGluZyBpbnN0cnVjdGlvbnMgdG8gbWF0Y2gKCWN1cnJlbnQgZXptbG0gbGlzdCByZWFsaXR5LgoKV2VkIE1hciAxMCAyMzoxMToxOSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY2MuYyAocHJpbnRfZmlsZV9uYW1lLCBwcmludF9wcm9nX25hbWUsIHNwZWNfbWFjaGluZSwKCXJlYWRfc3BlY3MsIHNldF9zcGVjLCBsb29rdXBfY29tcGlsZXIsIGJ1aWxkX3NlYXJjaF9saXN0LAoJcHV0ZW52X2Zyb21fcHJlZml4ZXMsIGZpbmRfYV9maWxlLCByZWNvcmRfdGVtcF9maWxlLAoJZGVsZXRlX2lmX29yZGluYXJ5LCBoYW5kbGVfYnJhY2VzLCBkb19zcGVjLCBkb19zcGVjXzEsIGZpbmRfZmlsZSwKCWlzX2RpcmVjdG9yeSwgdmFsaWRhdGVfc3dpdGNoZXMsIHVzZWRfYXJnLCBkZWZhdWx0X2FyZywKCXBmYXRhbF93aXRoX25hbWUsIHBlcnJvcl93aXRoX25hbWUsIHBmYXRhbF9wZXhlY3V0ZSwgZmF0YWwsIGVycm9yLAoJbm90aWNlLCBhZGRfcHJlcHJvY2Vzc29yX29wdGlvbiwgYWRkX2Fzc2VtYmxlcl9vcHRpb24sCglhZGRfbGlua2VyX29wdGlvbiwgcHJvY2Vzc19jb21tYW5kLCBleGVjdXRlLAoJdW51c2VkX3ByZWZpeF93YXJuaW5ncywgY2xlYXJfYXJncywgZmF0YWxfZXJyb3IsCglsYW5nX3NwZWNpZmljX2RyaXZlciwgdXNlcl9zcGVjcywgY29tcGlsZXIsIGxpbmtfY29tbWFuZF9zcGVjLAoJb3B0aW9uX21hcCwgdHJhbnNsYXRlX29wdGlvbnMsIG1ha2VfdGVtcF9maWxlLCB0ZW1wX25hbWUsCglwcm9ncmFtbmFtZSwgcGF0aF9wcmVmaXgsIG1hY2hpbmVfc3VmZml4LCBqdXN0X21hY2hpbmVfc3VmZml4LAoJZ2NjX2V4ZWNfcHJlZml4LCBzdGFuZGFyZF9leGVjX3ByZWZpeCwgc3RhbmRhcmRfZXhlY19wcmVmaXhfMSwKCW1kX2V4ZWNfcHJlZml4LCBtZF9zdGFydGZpbGVfcHJlZml4LCBtZF9zdGFydGZpbGVfcHJlZml4XzEsCglzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4LCBzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzEsCglzdGFuZGFyZF9zdGFydGZpbGVfcHJlZml4XzIsIHRvb2xkaXJfYmFzZV9wcmVmaXgsIHRvb2xkaXJfcHJlZml4LAoJbXVsdGlsaWJfZGlyLCB0ZW1wX2ZpbGVuYW1lLCB0ZW1wX2ZpbGUsIGNvbW1hbmQsIHN3aXRjaHN0ciwKCWluZmlsZSwgb3V0ZmlsZXMsIGlucHV0X2ZpbGVuYW1lLCBpbnB1dF9iYXNlbmFtZSwgaW5wdXRfc3VmZml4LAoJY2hlY2tfbGl2ZV9zd2l0Y2gsIG1haW4pOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKV2VkIE1hciAxMCAyMDoyODoyOSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsY20uYzogTmV3IGZpbGUuCgkqIE1ha2VmaWxlLmluIChPQkpTKTogQWRkIGxjbS5vLgoJKGxjbS5vKTogQWRkIGRlcGVuZGVuY2llcy4KCgkqIGdjc2UuYyAoY29tcHV0ZV9wcmVfbG9jYWxfcHJvcGVydGllcyk6IERlbGV0ZS4KCShjb21wdXRlX3ByZV9kYXRhKTogVXNlIGNvbXB1dGVfbG9jYWxfcHJvcGVydGllcyBpbnN0ZWFkIG9mCgljb21wdXRlX3ByZV9sb2NhbF9wcm9wZXJ0aWVzLgoKCSogZ2NzZS5jOiBNb3JlIGNvbW1lbnRzLCB3aGl0ZXNwYWNlIGFuZCBzaW1pbGFyIGZpeGVzLgoJKGR1bXBfY3VpZF90YWJsZSwgbWF5YmVfc2V0X3JkX2dlbiwgZHVtcF9jcHJvcF9kYXRhKTogRGVsZXRlLgoJKGR1bXBfcHJlX2RhdGEsIGNvbXB1dGVfY3Byb3BfbG9jYWxfcHJvcGVydGllcyk6IExpa2V3aXNlLgoJKG9uZV9jbGFzc2ljX2djc2VfcGFzcyk6IExvc2UgdW51c2VkIGFyZ3VtZW50LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjb21wdXRlX2hhc2hfdGFibGUsIGNvbXB1dGVfZXhwcl9oYXNoX3RhYmxlKTogTGlrZXdpc2UuCgkoY29tcHV0ZV9zZXRfaGFzaF90YWJsZSwgb25lX3ByZV9nY3NlX3Bhc3MsIG1hcmtfY2FsbCk6IExpa2V3aXNlLgoJKGNwcm9wX2luc24sIGNwcm9wLCBvbmVfY3Byb3BfcGFzcyk6IEFkZCBuZXcgYXJndW1lbnQgQUxURVJfSlVNUFMuCglBbGwgY2FsbGVycyBjaGFuZ2VkLiAgT25seSBhbHRlciBqdW1wcyBpZiBBTFRFUl9KVU1QUyBpcyBub256ZXJvLgoJTG9zZSB1bnVzZWQgYXJndW1lbnQuCgkoZ2NzZV9tYWluKTogQWx3YXlzIHJ1biBhIGNwcm9wIHBhc3MgYWZ0ZXIgZmluaXNoaW5nIGdsb2JhbCBjc2UuCgkoY29tcHV0ZV9sb2NhbF9wcm9wZXJ0aWVzKTogTmV3IGZ1bmN0aW9uLgoJKGhhc2hfc2Nhbl9wYXQsIGhhc2hfc2Nhbl9pbnNuKTogTm8gbG9uZ2VyIGNhbGwgbWF5YmVfc2V0X3JkX2dlbi4KCShjb21wdXRlX2Nwcm9wX2RhdGEpOiBVc2UgY29tcHV0ZV9sb2NhbF9wcm9wZXJ0aWVzLgoKCSogZ2NzZS5jOiBVcGRhdGUgdmFyaW91cyBjb21tZW50cy4KCShjdXJyZW50X2Z1bmN0aW9uX2NhbGxzX2xvbmdqbXApOiBEZWxldGUgZGVjbGFyYXRpb24uCgoJKiBnY3NlLmMgKHJ1bl9qdW1wX29wdF9hZnRlcl9nY3NlKTogTmV3IHZhcmlhYmxlLgoJKGdjc2VfbWFpbik6IFJldHVybnMgYW4gaW50ZWdlci4KCShoYXNoX3NjYW5fc2V0KTogUmVjb3JkIGluaXRpYWxpemF0aW9ucyBmcm9tIENPTlNUX0RPVUJMRXMgdG9vLgoJKHRyeV9yZXBsYWNlX3JlZyk6IFVwZGF0ZSBzb21lIGNvbW1lbnRzLgoJKGNwcm9wX2luc24pOiBBbGxvdyBwcm9wYWdhdGlvbiBpbnRvIHNvbWUgSlVNUF9JTlNOcyB0b28uCgkqIHJ0bC5oIChnY3NlX21haW4pOiBVcGRhdGUgcHJvdG90eXBlLgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IElmIGdjc2VfbWFpbiByZXR1cm5zIG5vbnplcm8sCgl0aGVuIHJ1biBhIGp1bXAgb3B0aW1pemF0aW9uIHBhc3MuCgkqIGp1bXAuYyAoZGVsZXRlX2JhcnJpZXJfc3VjY2Vzc29ycyk6IERlbGV0ZSBub3AganVtcHMgdG9vLgoKV2VkIE1hciAxMCAxOTowNDozMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guYyAoZnBfYXJpdGhfcmVnX29wZXJhbmQpOiBBY3R1YWxseSB0ZXN0IGlmIHJlZyBpcyBzdWl0YWJsZQoJZm9yIEZQIGFyaXRobWV0aWMuICBDaGFuZ2VkIGNhbGxlci4KCSogc2gubWQgKHN1YnNmMywgc3Vic2ZfaSk6IFVzZSBmcF9hcml0aF9yZWdfb3BlcmFuZC4KCldlZCBNYXIgMTAgMTg6NTY6MzEgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAoY2hvb3NlX3JlbG9hZF9yZWdzKTogV2hlbiBpbmhlcml0aW5nIGZyb20gdGhlIGZyYW1lCglwb2ludGVyLCBkb24ndCBjbG9iYmVyIGl0LgoKV2VkIE1hciAxMCAwODowMTo1MiAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIGZpeGluYy9maXhpbmMuKjogUmVzeW5jLWVkIHdpdGggdGhlIGZpbGVzIGluIHRoaXMKCWRpcmVjdG9yeS4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaDogVGhlIG1hY2hpbmUgY2FzZSBlbGVtZW50cyB3ZXJlCglvdXQtb2Ytb3JkZXIuICAodGhlIGl4ODYtKi1saW51eC1nbnUqIGVudHJ5IG5lZWRlZCB0bwoJYmUgZWFybGllcikuCgpXZWQgTWFyIDEwIDAwOjAxOjI0IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOiBGaXggY2FsY3VsYXRpb24gb2YgbnVtYmVyCglvZiBhZmZlY3RlZCByZWdpc3RlcnMuCgpUdWUgTWFyICA5IDE1OjQ4OjE1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKHRpZHlfZmFsbHRocnVfZWRnZSk6IEJlIG1vcmUgY2FyZWZ1bCBmaW5kaW5nIHRoZSBsYXN0CglCQVJSSUVSIG9mIGEgbGlzdC4gIERlbGV0ZSB0aGUgY2MwIHNldHRlciBhcyB3ZWxsIGFzIGEgY29uZCBqdW1wLgoKVHVlIE1hciAgOSAxNToyNjowMiAxOTk5ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBiaXRyYW5nZS5jb20+CgoJKiBpMzg2Lm1kIChhc2hsc2kzIHNwbGl0dGVyKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCgpUdWUgTWFyICA5IDExOjM1OjIwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWctc3RhY2suYyAoc3RhY2tfcmVnX2xpZmVfYW5hbHlzaXMpOiBVc2UgcmV0dXJuanVtcF9wCglpbnN0ZWFkIG9mIGFuIGV4cGxpY2l0IHRlc3QgZm9yIFJFVFVSTi4KClR1ZSBNYXIgIDkgMDk6MzM6MTYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHRvcGxldi5vKTogRGVwZW5kIG9uICQoQkFTSUNfQkxPQ0tfSCkuCgoJKiB0b3BsZXYuYzogSW5jbHVkZSBiYXNpYy1ibG9jay5oLgoKVHVlIE1hciAgOSAwMjowODoxNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjYWxscy5jIChsb2FkX3JlZ2lzdGVyX3BhcmFtZXRlcnMpOiBOZXcgZnVuY3Rpb24uCgkoZXhwYW5kX2NhbGwpOiBVc2UgaXQuCgoJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IFNsaWdodGx5IHJlb3JnYW5pemUgY29kZS4KCgkqIGNhbGxzLmMgKGNvbXB1dGVfYXJndW1lbnRfYWRkcmVzc2VzKTogTmV3IGZ1bmN0aW9uLgoJKHJ0eF9mb3JfZnVuY3Rpb25fY2FsbCk6IE5ldyBmdW5jdGlvbi4KCShleHBhbmRfY2FsbCk6IFVzZSB0aGVtLgoKCSogaTM4Ni5tZCAoemVyb19leHRlbmRoaXNpMik6IFNwbGl0IGludG8gYW4gZXhwYW5kZXIgYW5kIGFub255bW91cwoJcGF0dGVybi4gIEFkZCBuZXcgYW5vbnltb3VzIHBhdHRlcm4gZm9yIHVzZSB3aGVuIG9wdGltaXppbmcgZm9yCglzaXplIG9yIGZvciB0aGUgUFByby4KCSh6ZXJvX2V4dGVuZHFpaGkyLCB6ZXJvX2V4dGVuZHFpc2kyKTogTGlrZXdpc2UuCgpNb24gTWFyICA4IDIzOjQzOjQ3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplXzEpOiBGaXggbGFzdCBjaGFuZ2UgLS0gYWRkIGNsb2JiZXIKCWRlcGVuZGVuY2llcyB0byBzZXRzIGluIHRoZSBub24taGFyZC1yZWcgY2FzZSB0b28uCgpNb24gTWFyICA4IDE4OjU1OjIxIDE5OTkgIE1hcmMgRXNwaWUgIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBjb25maWcvb3BlbmJzZC5oIChIQU5ETEVfU1lTVl9QUkFHTUEpOiBEZWZpbmUuCgpNb24gTWFyICA4IDE2OjA0OjQ0IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGxvY2FsLWFsbG9jLmMgKGNvbWJpbmVfcmVncyk6IERvbid0IGNvbWJpbmUgaWYgd2UgaGF2ZSBhIGhhcmQgcmVnCglmb3Igd2hpY2ggQ0xBU1NfTElLRUxZX1NQSUxMRURfUCBpcyB0cnVlLgoKCSogdW5yb2xsLmMgKGxvb3BfaXRlcmF0aW9ucyk6IE9ubHkgY2FsbCBsb29wX2ZpbmRfZXF1aXZfdmFsdWUgaWYgd2UKCWhhdmUgYSBSRUcgb3IgU1VCUkVHLgoKTW9uIE1hciAgOCAxNToyNzo0MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2Lm1kIChhc2hsc2kzKTogUmV2aXNlIGNvbW1lbnRzLiAgUHJvdmlkZSBuZXcgYW5vbnltb3VzCglwYXR0ZXJuIGZvciBQZW50aXVtIGFuZCBQUHJvL1BJSS4gIFJldmVyc2UgY29uc3RyYWludHMgaW4KCWdlbmVyaWMgYXNobHNpMyBhbm9ueW1vdXMgcGF0dGVybi4KCgkqIGNhbGxzLmMgKGluaXRpYWxpemVfYXJndW1lbnRfaW5mbyk6IEFjY2VwdCBhIHBvaW50ZXIgdG8KCUNVTVVMQVRJVkVfQVJHUy4KCShleHBhbmRfY2FsbCk6IFBhc3MgdGhlIGFkZHJlc3Mgb2YgQ1VNVUxBVElWRV9BUkdTLgoKCSogcnM2MDAwL3htLXN5c3Y0LmggKEhPU1RfQklUU19QRVJfTE9OR0xPTkcpOiBSZW1vdmUgI2lmIDAuCgoJKiBtbjEwMzAwLmggKENBU0VfRFJPUFNfVEhST1VHSCk6IERlbGV0ZS4KCSogbW4xMDIwMC5oIChDQVNFX0RST1BTX1RIUk9VR0gpOiBEZWxldGUuCgkqIGg4MzAwLmggKENBU0VfRFJPUFNfVEhST1VHSCk6IERlbGV0ZS4KCgkqIGZsb3cuYyAobWVyZ2VfYmxvY2tzX25vbW92ZSk6IEZvciBIQVZFX2NjMCB0YXJnZXRzLCBtYWtlIHN1cmUKCXRvIGFsc28gZGVsZXRlIHRoZSBjYzAgc2V0dGVyIHdoZW4gZGVsZXRpbmcgYSBjb25kaXRpb25hbCBicmFuY2gKCXRvIHRoZSBuZXh0IGJsb2NrLgoKTW9uIE1hciAgOCAxODo0NzoxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVnbW92ZS5jIChjb3B5X3NyY190b19kZXN0KTogTmV3IGFyZ3VtZW50IG1heF9vbGRfdWlkLgoKTW9uIE1hciAgOCAwODoyMzowMCAxOTk5ICBCcnVjZSBLb3JiICA8a29yYkBkYXRhZGVzaWduLmNvbT4KCgkqIENoYW5nZUxvZzogTWVyZ2VkIGVudHJpZXMgZnJvbSBmaXhpbmNsLWJyYW5jaC4KClN1biBNYXIgIDcgMTE6NDg6NTYgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKEVOQ09ERV9CTE9DS0FHRSk6IERvbid0IHNoaWZ0IHVuaXQgdG9vIGZhci4KCShwcmludF9leHApOiBTcGVjaWFsIGNhc2UgYWRkaXRpb24gb2YgYSBjb25zdGFudC4KCShwcmludF92YWx1ZSkgW0NPTlNUX0lOVF06IFVzZSBIT1NUX1dJREVfSU5UX1BSSU5UX0hFWC4KClN1biBNYXIgIDcgMTE6MjE6MDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGhhaWZhLXNjaGVkLmMgKHJlZ19sYXN0X2Nsb2JiZXJzKTogTmV3LgoJKHJlZ19wZW5kaW5nX2Nsb2JiZXJzLCBiYl9yZWdfbGFzdF9jbG9iYmVycyk6IE5ldy4KCShjb21wdXRlX2Jsb2NrX2JhY2t3YXJkX2RlcGVuZGVuY2VzKTogQWxsb2NhdGUgbWVtb3J5IGZvciB0aGVtLgoJKHNjaGVkdWxlX3JlZ2lvbik6IExpa2V3aXNlLgoJKHNjaGVkX2FuYWx5emVfMSk6IENsb2JiZXJzIGRvbid0IGludGVyZmVyZSB3aXRoIG9uZSBhbm90aGVyLgoJVGhleSBkbyBpbnRlcmZlcmUgd2l0aCBzZXRzIC4uLgoJKHNjaGVkX2FuYWx5emVfMik6IC4uLiBhbmQgdXNlcy4KCShzY2hlZF9hbmFseXplKTogTGlrZXdpc2UuCgkoc2NoZWRfYW5hbHl6ZV9pbnNuKTogVXBkYXRlIHJlZ19sYXN0X2Nsb2JiZXJzIGFwcHJvcHJpYXRlbHkuCgpTdW4gTWFyICA3IDA4OjMwOjM3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdtb24tc29sMi5jOiBJbmNsdWRlIGNvbmZpZy5oIGFuZCBzeXN0ZW0uaC4gIERvbid0IHJlZHVuZGFudGx5CglpbmNsdWRlIHN5c3RlbSBoZWFkZXIgZmlsZXMuCgkoc2Njc2lkKTogUmVtb3ZlLgoJKG1vbmNvbnRyb2wsIG1vbnN0YXJ0dXAsIF9tY2xlYW51cCwgaW50ZXJuYWxfbWNvdW50KTogUHJvdG90eXBlLgoJKF9tY2xlYW51cCk6IEFkZCB0aGUgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoaW50ZXJuYWxfbWNvdW50KTogRGVjbGFyZSBgZXRleHQnIGFzIGEgY2hhcltdIG5vdCBhIGZ1bmN0aW9uLgoJQ2FzdCBgZXRleHQnIHRvIGNoYXIqIHdoZW4gY2FsbGluZyBgbW9uc3RhcnR1cCcuCgoJKiBzcGFyYy5jIChmcmFtZV9iYXNlX25hbWUsIHNhdmVfcmVncywgcmVzdG9yZV9yZWdzLAoJYnVpbGRfYmlnX251bWJlciwgc3BhcmNfY21vZGVsX3N0cmluZywgc3BhcmNfYWxpZ25fbG9vcHNfc3RyaW5nLAoJc3BhcmNfYWxpZ25fanVtcHNfc3RyaW5nLCBzcGFyY19hbGlnbl9mdW5jc19zdHJpbmcsIGNvZGVfbW9kZWwsCgljcHVfZGVmYXVsdCwgY3B1X3RhYmxlLCBvdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsCglvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUsIG91dHB1dF9yZXR1cm4sCglzcGFyY19mbGF0X291dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwgdWx0cmFfY29kZV9uYW1lcywKCXNwYXJjX2ZsYXRfb3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogQ29uc3RpZnkgYSBjaGFyKi4KCShoeXBlcnNwYXJjX2FkanVzdF9jb3N0KTogQWRkIGEgZGVmYXVsdCBjYXNlIGluIGEgc3dpdGNoLgoKCSogc3BhcmMuaCAoc3BhcmNfY21vZGVsX3N0cmluZywgT1ZFUlJJREVfT1BUSU9OUywKCXNwYXJjX2NwdV9zZWxlY3QsIHNwYXJjX2FsaWduX2xvb3BzX3N0cmluZywKCXNwYXJjX2FsaWduX2p1bXBzX3N0cmluZywgc3BhcmNfYWxpZ25fZnVuY3Nfc3RyaW5nLAoJb3V0cHV0X3JldHVybik6IENvbnN0aWZ5IGEgY2hhciouCgoJKiBzcGFyYy5tZCAobW92ZGkpOiBDaGFuZ2UgdGhlIGNvbXBhcmlzb24gb2YgSE9TVF9CSVRTX1BFUl9XSURFX0lOVAoJc28gdGhhdCB3ZSBjaGVjayAiPT0gMzIiLCBpbnN0ZWFkIG9mICIhPSA2NCIuICBDYXN0IGEgdmFsdWUgdG8KCUhPU1RfV0lERV9JTlQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBIaWRlIHRoZSBkZWNsYXJhdGlvbgoJZm9yIHZhcmlhYmxlIGBjaGFpbicuCgpTdW4gTWFyICA3IDA4OjA1OjI3IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHN5c3RlbS5oIChjb25zdCwgaW5saW5lKTogTW92ZSB0aGUgc3RhZ2UyIGhhbmRsaW5nIG9mIHRoZXNlCglrZXl3b3Jkcy1hcy1tYWNyb3MgZnJvbSBoZXJlLi4uCgoJKiBnYW5zaWRlY2wuaCAoY29uc3QsIGlubGluZSk6IC4uLnRvIGhlcmUuCgpTdW4gTWFyICA3IDAyOjQ0OjE1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChwdXNoX29wZXJhbmQsIHBvcF9vcGVyYW5kKTogVk9JRG1vZGUgbmVlZG4ndCBtYXRjaCBtb2Rlcy4KClN1biBNYXIgIDcgMDE6NTg6NDcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNzZS5jIChjYW5vbl9oYXNoKTogTmV2ZXIgcmVqZWN0IGhhcmQgcmVncyBpbiBDQ21vZGUuCgpTdW4gTWFyICA3IDAxOjE1OjA0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IE1hciAgNiAxNzoxODo0NCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCQkJICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChtYWtlX2VkZ2VzKTogSGFuZGxlIGNhc2VzaSB0aGF0IGp1bXAgdG8gZGVmYXVsdCBicmFuY2guCglJZiBDQVNFX0RST1BTX1RIUk9VR0gsIGZvcmNlIGZhbGx0aHJ1IHRvIGJsb2NrIGFmdGVyIGNhc2VzaS4KClNhdCBNYXIgIDYgMDc6NDk6MjMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1hdXgtaW5mby5jIChkYXRhX3R5cGUsIGFmZml4X2RhdGFfdHlwZSwgZ2VuX2RlY2wsCglnZW5fZm9ybWFsX2xpc3RfZm9yX3R5cGUsIGdlbl9mb3JtYWxfbGlzdF9mb3JfZnVuY19kZWYsIGdlbl90eXBlKToKCVF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCgoJKiBjLWNvbW1vbi5jIChkZWNsYXJlX2hpZGRlbl9jaGFyX2FycmF5LCBhZGRfYXR0cmlidXRlLCBpZl9lbHQsCglkZWNsYXJlX2Z1bmN0aW9uX25hbWUsIGRlY2xfYXR0cmlidXRlcywgZm9ybWF0X2NoYXJfaW5mbywKCWNoZWNrX2Zvcm1hdF9pbmZvLCBiaW5hcnlfb3BfZXJyb3IpOiBMaWtld2lzZS4KCgkqIGNleHAueSAoeXllcnJvciwgZXJyb3IsIHBlZHdhcm4sIHdhcm5pbmcsIHRva2VuKTogTGlrZXdpc2UuCgoJKiBnY3NlLmMgKGR1bXBfaGFzaF90YWJsZSk6IExpa2V3aXNlLgoKCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6IExpa2V3aXNlLgoKCSogb3B0YWJzLmM6IEluY2x1ZGUgaW5zbi1jb25maWcuaCBlYXJsaWVyLgoJKGluaXRfbGliZnVuY3MsIGluaXRfaW50ZWdyYWxfbGliZnVuY3MsIGluaXRfZmxvYXRpbmdfbGliZnVuY3MpOgoJUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCgkqIHJlYWwuYyAoYXNjdG9lMjQsIGFzY3RvZTUzLCBhc2N0b2U2NCwgYXNjdG9lMTEzLCBhc2N0b2UsCglhc2N0b2VnLCBtdGhlcnIsIGVyZWFsX2F0b2YpOiBMaWtld2lzZS4KCgkqIHJlYWwuaCAoZXJlYWxfYXRvZik6IExpa2V3aXNlLgoKCSogc2JpdG1hcC5jIChkdW1wX3NiaXRtYXBfdmVjdG9yKTogTGlrZXdpc2UuCgoJKiBzYml0bWFwLmggKGR1bXBfc2JpdG1hcF92ZWN0b3IpOiBMaWtld2lzZS4KCgkqIHN0bXQuYyAobmVzdGluZywgbl9vY2N1cnJlbmNlcywgZXhwYW5kX3N0YXJ0X2Nhc2UpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogTGlrZXdpc2UuCgoJKiB0cmVlLmggKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCwgZXhwYW5kX3N0YXJ0X2Nhc2UpOiBMaWtld2lzZS4KCkZyaSBNYXIgIDUgMjM6MTY6NDIgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKEFTTV9PVVRQVVRfUkVHX3tQVVNILFBPUH0pOiBBZGQgNjQtYml0IHN1cHBvcnQgYW5kIGRvCglub3Qgb3ZlcndyaXRlIEFJWCBsaW5rIHJlZ2lzdGVyIHNhdmUgYXJlYS4KCkZyaSBNYXIgIDUgMjM6MDg6MDEgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfc3VicmVnX2FkZHJlc3MpOiBBY3R1YWxseSBjcmVhdGUgdGhlIFVTRQoJZm9yIHRoZSByZWdpc3Rlciwgbm90IHRoZSBuZXcgbWVtb3J5IGxvY2F0aW9uLgoKRnJpIE1hciAgNSAyMTo0MTowNyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IElmIHBzZXVkbyB0aGF0IGNhbid0IGJlIHJlcGxhY2VkCgl3aXRoIGl0cyBlcXVpdmFsZW50IGNvbnN0YW50LCBmYWxsIGJhY2sgdG8gcmVsb2FkX2luLgoKRnJpIE1hciAgNSAxMzoyMDozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IERlbGV0ZSAuZmxvdzIgZGVidWdnaW5nIGZpbGVzLgoKRnJpIE1hciAgNSAxMTozNjoxMSAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0uYyAoYXJtX292ZXJyaWRlX29wdGlvbnMpOiBDaGFuZ2UgZGVmYXVsdCB0YXJnZXQKCWNwdSBzZWxlY3Rpb24gc28gdGhhdCBlbmFibGluZyBUQVJHRVRfQVBDU18zMiBkb2VzIG5vdCBvdmVycmlkZQoJZGVmYXVsdCB0YXJnZXQgQ1BVLgoKRnJpIE1hciAgNSAxOToyNjoyMyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guaCAoU0xPV19CWVRFX0FDQ0VTUyk6IERlZmluZSB0byAxLgoJKEJPT0xfVFlQRV9TSVpFKTogRGVmaW5lLgoKRnJpIE1hciAgNSAwMjoxNDo1NCAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fc3RhY2tfdGVtcF9mb3JfdHlwZSk6IEFib3J0CglpZiBtb2RlID09IEJsa21vZGUgYW5kIGFsaWduIGlzIGxlc3MgdGhhbgoJQklHR0VTVF9BTElHTk1FTlQgLyBCSVRTX1BFUl9VTklULgoJKGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlKTogUm91bmQgdGhlIHNpemUgcGFyYW1ldGVyCglwYXNzZWQgdG8gYXNzaWduX3N0YWNrX2xvY2FsIGluc3RlYWQgb2Ygc2l6ZSBpdHNlbGYuCgpUaHUgTWFyICA0IDE1OjAwOjM1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBNYXJrIGJsb2NrcyBhcyB0aGV5CglhcmUgcHV0IG9uIHRvIHRoZSB3b3JrbGlzdCwgbm90IGFzIHRoZXkgYXJlIHRha2VuIG9mZi4KClRodSBNYXIgIDQgMDA6MDU6NDQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9oYXNfY29tcHV0ZWRfanVtcCk6IFJlbW92ZSBkdXBsaWNhdGUKCWRlZmluaXRpb24uCgpXZWQgTWFyICAzIDE5OjA5OjExIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG02OGsvbTY4MDIwLWVsZi5oIChJTklUX1NFQ1RJT05fQVNNX09QLCBGSU5JX1NFQ1RJT05fQVNNX09QKTogVW5kZWYuCgkoU1RBUlRGSUxFX1NQRUMsIEVOREZJTEVfU1BFQyk6IERlZmluZSB0byBlbXB0eSBzdHJpbmcuCgoJKiBzcGFyYy9lbGYuaCAoTVVMREkzX0xJQkNBTEwsIERJVkRJM19MSUJDQUxMLCBVRElWREkzX0xJQkNBTEwsCglNT0RESTNfTElCQ0FMTCwgVU1PRERJM19MSUJDQUxMLCBTVERDXzBfSU5fU1lTVEVNX0hFQURFUlMpOiBVbmRlZi4KCShJTklUX1NVQlRBUkdFVF9PUFRBQlMpOiBEZWZpbmUgdG8gZW1wdHkuCgpXZWQgTWFyICAzIDAwOjAwOjM3IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBzaC5jIChmb3JjZV9pbnRvKTogTmV3IGZ1bmN0aW9uLgoJKGV4cGFuZF9ibG9ja19tb3ZlKTogVXNlIGl0LgoKVHVlIE1hciAgMiAxMDozOTo0MyAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY2NjcC5jIChzdHJ1Y3QgZGVmYXVsdF9pbmNsdWRlKTogQWRkICdpbmNsdWRlZCcgZmllbGQuCgkobWFpbik6IFNldCAnaW5jbHVkZWQnIGZpZWxkIHdoZW4gYSBkZWZhdWx0IGluY2x1ZGUgZGlyZWN0b3J5CglpcyBhZGRlZCB0byB0aGUgY2hhaW4uICBJZiAtdiBpcyBzcGVjaWZpZWQgbGlzdCBhbGwgZGVmYXVsdAoJaW5jbHVkZSBkaXJlY3RvcmllcyB3aGljaCBkbyBub3QgZ2V0IGFwcGVuZGVkIHRvIHRoZSBjaGFpbi4KClR1ZSBNYXIgIDIgMDk6MjQ6MTAgMTk5OSAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoZ3h4X2luY2x1ZGVfZGlyKTogUmVuYW1lIHRvCglnY2NfZ3h4X2luY2x1ZGVfZGlyIGluIG9yZGVyIHRvIHByZXZlbnQgaXQgYmVpbmcgb3ZlcnJpZGRlbiBieQoJYSB0b3AgbGV2ZWwgTWFrZWZpbGUuCgkoZ2NjX3Rvb2xkaXIpOiBJZiAkZXhlY19wcmVmaXggIT0gJHByZWZpeCB0aGVuIHVzZSB0aGUKCWRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIGFzIHRoZSBiYXNpcyBmb3IgZ2NjX3Rvb2xkaXIuCgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgoJKiBNYWtlZmlsZS5pbjogUmVuYW1lIGd4eF9pbmNsdWRlX2RpciB0byBnY2NfZ3h4X2luY2x1ZGVfZGlyLgoKVHVlIE1hciAgMiAxNjo0NTozMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogRG9uJ3QgbWFrZSBleHRyYSBjb3BpZXMgb2YKCU5PVEVfSU5TTl9MT09QX0NPTlQgbm90ZXMuCgpUdWUgTWFyICAyIDA3OjQ0OjU2IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiB0cmVlLmMgKHNhdmVfdHJlZV9zdGF0dXMpOiBEb24ndCB0cmVhdCBmdW5jdGlvbnMgd2l0aCBubyBjb250ZXh0CglhcyBuZXN0ZWQuCgpUdWUgTWFyICAyIDA5OjM3OjA1IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogTWFrZWZpbGUuaW4gKE1BS0VJTkZPKTogVXNlIG1ha2VpbmZvIGJ1aWx0IGZyb20gc2libGluZwoJdHJlZSB3aGVuIGF2YWlsYWJsZS4KClR1ZSBNYXIgIDIgMTA6MTI6NDggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYWxwaGEuYyAoYWxwaGFfY3B1X25hbWUsIGFscGhhX2NwdV9zdHJpbmcsIGFscGhhX3RwX3N0cmluZywKCWFscGhhX2Zwcm1fc3RyaW5nLCBhbHBoYV9mcHRtX3N0cmluZywgYWxwaGFfbWxhdF9zdHJpbmcsCgljdXJyZW50X2Z1bmN0aW9uX2ZpbGUpOiBBZGQgdGhlIGBjb25zdCcga2V5d29yZC4KCShub3JtYWxfbWVtb3J5X29wZXJhbmQpOiBNYXJrIHBhcmFtZXRlciBgbW9kZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCShhbHBoYV9leHBhbmRfdW5hbGlnbmVkX2xvYWQpOiBBZGQgYSBkZWZhdWx0IGNhc2UgdG8gYSBzd2l0Y2guCgoJKiBhbHBoYS5oIChhbHBoYV9jcHVfc3RyaW5nLCBhbHBoYV9mcHJtX3N0cmluZywgYWxwaGFfZnB0bV9zdHJpbmcsCglhbHBoYV90cF9zdHJpbmcsIGFscGhhX21sYXRfc3RyaW5nKTogQWRkIHRoZSBgY29uc3QnIGtleXdvcmQuCgkobm9ybWFsX21lbW9yeV9vcGVyYW5kKTogQWRkIHByb3RvdHlwZS4KCgkqIGFscGhhLm1kOiBDYXN0IGFuIGV4cHJlc3Npb24gdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KClR1ZSBNYXIgIDIgMTA6MDA6MjEgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogbWlwcy5jIChhYm9ydF93aXRoX2luc24pOiBNYWtlIGZ1bmN0aW9uIHN0YXRpYywgYWRkIGEgcHJvdG90eXBlLAoJY29uc3RpZnkgMm5kIHBhcmFtZXRlciBhbmQgbWFyayB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCShjdXJyZW50X2Z1bmN0aW9uX2ZpbGUsIG1pcHNfY3B1X3N0cmluZywgbWlwc19pc2Ffc3RyaW5nLAoJbWlwc19hYmlfc3RyaW5nLCBtaXBzX25vX21pcHMxNl9zdHJpbmcsIG1pcHNfZW50cnlfc3RyaW5nLAoJbWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzLCBvdXRwdXRfYmxvY2tfbW92ZSwgbG9hZF9zdG9yZSwKCW92ZXJyaWRlX29wdGlvbnMsIG1ha2VfdGVtcF9maWxlLCBtaXBzMTZfZnBfYXJncyk6IFF1YWxpZnkgYSBjaGFyKgoJd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogbWlwcy5oIChjdXJyZW50X2Z1bmN0aW9uX2ZpbGUsIG1pcHNfY3B1X3N0cmluZywgbWlwc19pc2Ffc3RyaW5nLAoJbWlwc19hYmlfc3RyaW5nLCBtaXBzX2VudHJ5X3N0cmluZywgbWlwc19ub19taXBzMTZfc3RyaW5nLAoJbWlwc19tb3ZlXzF3b3JkLCBtaXBzX21vdmVfMndvcmRzLCBvdXRwdXRfYmxvY2tfbW92ZSk6IExpa2V3aXNlLgoJKGFib3J0X3dpdGhfaW5zbik6IFJlbW92ZSBleHRlcm4gcHJvdG90eXBlLgoKCSogbWlwcy5tZDogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCVJlbW92ZSBtYW55IHVudXNlZCB2YXJpYWJsZXMgbmFtZWQgYGxhYmVsJy4KClR1ZSBNYXIgIDIgMDE6Mjc6NTIgMTk5OSAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogTWFrZWZpbGUuaW4gKGNwcF9pbnN0YWxsX2RpciwgSU5TVEFMTF9DUFAsIFVOSU5TVEFMTF9DUFApOiBOZXcKCXZhcmlhYmxlcy4KCShpbnN0YWxsLWNwcCwgdW5pbnN0YWxsLWNwcCk6IE5ldyB0YXJnZXRzLgoJKGluc3RhbGwtbm9ybWFsKTogRGVwZW5kIG9uICQoSU5TVEFMTF9DUFApLgoJKHVuaW5zdGFsbCk6IERlcGVuZCBvbiAkKFVOSU5TVEFMTF9DUFApLgoJKiBjb25maWd1cmUuaW4gKGNwcF9pbnN0YWxsX2Rpcik6IE5ldywgc3Vic3RpdHV0ZS4KCSh0bWFrZV9maWxlKTogQWRkZWQgdC1pbnN0YWxsLWNwcCBmb3IgLS1lbmFibGUtY3BwLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNwcC5zaDogTmV3IGNwcCBzY3JpcHQuCgkqIGNvbmZpZy90LWluc3RhbGwtY3BwOiBOZXcgdGFyZ2V0IGZyYWdtZW50LgoKVHVlIE1hciAgMiAwMTo0MDowMSAxOTk5ICBGcmFueiBTaXJsICA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+CgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY3NlLmMgKGZvbGRfcnR4KTogVXBkYXRlIGNvbW1lbnRzIGZvciAoY29uc3QgKG1pbnVzIChsYWJlbCkgKGxhYmVsKSkpCgljYXNlLgoJKGNzZV9pbnNuKTogQXZvaWQgY3JlYXRpbmcgYSBib2d1cyBSRUdfRVFVQUwgbm90ZSBmb3IKCShjb25zdCAobWludXMgKGxhYmVsKSAobGFiZWwpKSkKCShyZWNvcmRfanVtcF9jb25kKTogRml4IG1pc21hdGNoZWQgcGFyZW4gaW4gY29tbWVudC4KClR1ZSBNYXIgIDIgMDE6MDc6MTIgMTk5OSAgRGFuIE5pY29sYWVzY3UgIDxkYW5uQGdvZHppbGxhLmljcy51Y2kuZWR1PgoKCSogZmluYWwuYyAoZW5kX2ZpbmFsKTogVGhlcmUgYXJlIDExIHdvcmRzIGluIHRoZSAibWFpbiBoZWFkZXIiCglzdHJ1Y3R1cmUsIG5vdCAxMC4KClR1ZSBNYXIgIDIgMDA6MDk6MTggMTk5OSAgTWFyYyBFc3BpZSAgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGV4dGVuZC50ZXhpOiBSZWZlcmVuY2UgX19leHRlbnNpb25fXyBpbiB0aGUgaW5kZXguCgpNb24gTWFyICAxIDE5OjA5OjMyIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChDUk9TU19GTE9BVF9IKTogRGVsZXRlLgoJKEZMT0FUX0gpOiBVc2UgZmxvYXRfaF9maWxlLgoJKHJlc3QuY3Jvc3MsIHN0bXAtaW50LWhkcnMpOiBEZWxldGUgZ2Zsb2F0LmggZGVwZW5kZW5jeS4KCShnZmxvYXQuaCk6IERlbGV0ZS4KCShzdG1wLWludC1oZHJzKTogVXNlIEZMT0FUX0ggaW5zdGVhZCBvZiBnZmxvYXQuaC4KCShtb3N0bHljbGVhbik6IERlbGV0ZSBnbG9hdC5oIHJlZmVyZW5jZS4KCShpbnN0YWxsLWNyb3NzLXJlc3QsIGluc3RhbGwtZmxvYXQtaC1jcm9zcywgc3RtcC1oZWFkZXJzKTogVXBkYXRlCgljb21tZW50cy4KCSogY29uZmlndXJlLmluIChzcGFyY3Y5LSotc29sYXJpczIqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBub25lLgoJKHNwYXJjLSotc29sYXJpczIqKTogU2V0IGZsb2F0X2Zvcm1hdCB0byBub25lIGZvciAyLjUgYW5kIGhpZ2hlci4KCShmbG9hdF9oX2ZpbGUpOiBTZXQgZnJvbSBmbG9hdF9mb3JtYXQuICBTdWJzdGl0dXRlIGludG8gTWFrZWZpbGUuaW4uCgkoZmxvYXRfZm9ybWF0KTogTm8gbG9uZ2VyIHN1YnN0aXR1dGUgaW50byBNYWtlZmlsZS5pbi4KCSogY3Jvc3MtbWFrZSAoRkxPQVRfSCk6IERlbGV0ZS4KCSogY29uZmlnL21pcHMvdC1jcm9zczY0IChGTE9BVF9IKTogRGVsZXRlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpNb24gTWFyICAxIDE2OjM2OjE4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMubWQgKGRpdl90cmFwX25vcm1hbCwgZGl2X3RyYXBfbWlwczE2KTogUmVxdWlyZSB0aGUgZGVwZW5kZW50CglpbnNuIHRvIGJlIGFuIElOU04gYmVmb3JlIGxvb2tpbmcgYXQgaXRzIHBhdHRlcm4uCgpNb24gTWFyICAxIDE1OjAzOjUxIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tNjhrL2xiMXNmNjguYXNtICh1ZGl2c2kzKTogQ2hhbmdlIGptaSB0byBqY3MuICBGaXggY29tbWVudHMuCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoTEVHSVRJTUFURV9JTkRFWF9SRUdfUCk6IFJlamVjdCBTSUdOX0VYVEVORCBvZgoJSEltb2RlIHJlZyB3aGVuIFRBUkdFVF81MjAwLgoKTW9uIE1hciAgMSAyMTo0NDozMCAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCUZyb20gVG9zaGl5YXN1IE1vcml0YToKCSogc2guaCAoQ0FDSEVfTE9HKTogU0gyIGhhcyBjYWNoZSwgdG9vLgoKTW9uIE1hciAgMSAxNDoyMzozNiAxOTk5ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBEaXNhYmxlIC1mZnVuY3Rpb24tc2VjdGlvbnMgYW5kCglkZWJ1Z2dpbmcgd2FybmluZyBpZiB0aGUgb2JqZWN0IGZvcm1hdCBpcyBlbGYuCgpNb24gTWFyICAxIDExOjQ2OjI1IDE5OTkgIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY29uZmlnL2g4MzAwL2g4MzAwLmMgKHByaW50X29wZXJhbmQpOiBVc2UgMTYgYml0IGFkZHJlc3NpbmcKCXdoZW4gdGhlIGRhdGEgaW4gOC1iaXQgYXJlYSBhbmQgY2FuIG5vdCBiZSBhZGRyZXNzZWQgYnkgOC1iaXQuCgpTdW4gRmViIDI4IDE2OjQwOjAwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmbG93LmMgKGNyZWF0ZV9iYXNpY19ibG9jayk6IERpc3JlZ2FyZCBpbnRlZ3JhdGVkIGJiIG5vdGVzLgoKU3VuIEZlYiAyOCAxNTo1NzowNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMubWQgKGJsb2NrYWdlLCBub25sb2NhbF9nb3RvX3JlY2VpdmVyKTogU2V0IGxlbmd0aCB0byAwLgoKU3VuIEZlYiAyOCAxNDo0Nzo1MyAxOTk5ICBBcnR1cm8gTW9udGVzICA8bWl0b3N5c0Bjb2xvbXNhdC5jb20uY28+CgoJKiBjb25maWcvaTM4Ni90LXNjbzVnYXMgKGNydGkubyk6IE5ldyB0YXJnZXQuCgpTdW4gRmViIDI4IDE1OjEwOjE3IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoZWxmX2hpZ2gsIG1vdnNpX2dvdCwgKm1vdnNpX2dvdF9pbnRlcm5hbCwKCSptb3ZzaV9nb3RfaW50ZXJuYWxfbWVtLCBHT1Qgc3BsaXR0ZXIsIG1vdmRmX2hhcmRmbG9hdDMyLAoJbW92ZGZfc29mdGZsb2F0MzIsIG1vdmRmX2hhcmRmbG9hdDY0LCBtb3ZkZl9zb2Z0ZmxvYXQ2NCwKCWxvYWRfbXVsdGlwbGUsIGFsbG9jYXRlX3N0YWNrLCBjYWxsX2luZGlyZWN0X2FpeDMyLAoJY2FsbF9pbmRpcmVjdF9haXg2NCwgY2FsbF92YWx1ZV9pbmRpcmVjdF9haXgzMiwKCWNhbGxfdmFsdWVfaW5kaXJlY3RfYWl4NjQsIGNhbGxfaW5kaXJlY3RfbnQsCgljYWxsX3ZhbHVlX2luZGlyZWN0X250KTogVXNlIGdwY19yZWdfb3BlcmFuZCBpbnN0ZWFkIG9mCglyZWdpc3Rlcl9vcGVyYW5kLgoKU3VuIEZlYiAyOCAxNToxMDoxNyAxOTk5ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5tZCAob25lX2NtcGxzaTIsIGFuZHNpMywgaW9yc2kzLCB4b3JzaTMsICplcXZzaTMsCgkqYW5kY3NpMywgKmlvcmNzaTMsICpuYW5kc2kzLCAqbm9yc2kzKTogQWRkIGFsdGVybmF0aXZlcyB0byB1c2UgQ1IKCW90aGVyIHRoYW4gY3IwLgoJKiByczYwMDAuYyAoYW5keyw2NH1fb3BlcmFuZCk6IElmIHRoZSB1c2VyIGRpZCAtZmZpeGVkLWNyMCwgZG9uJ3QKCWFsbG93IGFuZGkuIG9yIGFuZGlzLiB3aGljaCBhbHdheXMgc2V0IGNyMC4KClN1biBGZWIgMjggMDE6MTU6MDQgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gRmViIDI4IDAyOjAwOjM4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGludm9rZS50ZXhpOiBVcGRhdGUgaW5mb3JtYXRpb24gZm9yIFBBIHNjaGVkdWxpbmcuCgpTYXQgRmViIDI3IDIzOjIxOjQ3IDE5OTkgIEplcnJ5IFF1aW5uICA8anF1aW5uQG5vcnRlbG5ldHdvcmtzLmNvbT4KCQkJICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBwYS5jIChvdmVycmlkZV9vcHRpb25zKTogQ2hhbmdlIGRlZmF1bHQgdG8gNzEwMExDLgoKCSogcGEuaCAoUkVHX0FMTE9DX09SREVSKTogQ2hhbmdlIG9yZGVyIHRvIGFsbG9jYXRlIGxlZnQgaGFsZiBvZgoJZmxvYXQgcmVncyBiZWZvcmUgcmlnaHQgaGFsZiBvZiBmbG9hdCByZWdzLgoKU2F0IEZlYiAyNyAyMjo0ODozOCAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnJhbWUuaDogVXBkYXRlIHNvbWUgY29tbWVudHMuCgkqIGRlZmF1bHRzLmggKFRBUkdFVF9BVFRSSUJVVEVfV0VBSyk6IERlZmluZS4KCSogY3J0c3R1ZmYuYyAoX19yZWdpc3Rlcl9mcmFtZV9pbmZvLCBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyk6IERlY2xhcmUKCXVzaW5nIFRBUkdFVF9XRUFLX0FUVFJJQlVURS4KCShfX2RvX2dsb2JhbF9kdG9yc19hdXgpOiBDaGVjayBpZiBfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyBpcwoJemVybyBiZWZvcmUgY2FsbGluZyBpdC4KCShfX2RvX2dsb2JhbF9kdG9ycyk6IExpa2V3aXNlLgoJKGZyYW1lX2R1bW15KTogQ2hlY2sgaWYgX19yZWdpc3Rlcl9mcmFtZV9pbmZvIGlzIHplcm8gYmVmb3JlCgljYWxsaW5nIGl0LgoJKF9fZnJhbWVfZHVtbXkpOiBMaWtld2lzZS4KClNhdCBGZWIgMjcgMTk6MTg6MjQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogU0VSVklDRTogVXBkYXRlIGZyb20gdGhlIEZTRi4KClNhdCBGZWIgMjcgMTQ6MzE6MjIgMTk5OSAgQXJ0dXJvIE1vbnRlcyAgPG1pdG9zeXNAY29sb21zYXQuY29tLmNvPgoKCSogY29uZmlnL2kzODYvdC1zY281IChjcnRpLm8pOiBOZXcgdGFyZ2V0LgoJKiBjb25maWcvaTM4Ni9zY281LmggKFNUQVJURklMRV9TUEVDKTogSW5jbHVkZSBjcnRpLm8gd2hlbgoJbGlua2luZyAtc2hhcmVkLgoJKiBjb25maWd1cmUuaW4gKGlbMzQ1NjddODYtKi1zY28zLjJ2NSopOiBBZGQgY3J0aS5vLgoKU2F0IEZlYiAyNyAwMToxMjo0MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtZC50ZXhpIChwcm9sb2d1ZSxlcGlsb2d1ZSk6IERvY3VtZW50IG5hbWVkIHBhdHRlcm5zLgoKRnJpIEZlYiAyNiAxOTozMToyNSAxOTk5ICBEYXZlIExvdmUgIDxmeEBnbnUub3JnPgoKCSogbWQudGV4aSwgaW52b2tlLnRleGk6IEZpeCB1bnRlcm1pbmF0ZWQgQHhyZWZzLgoKRnJpIEZlYiAyNiAxNTozMzo0NSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2VuYXR0cnRhYi5jIChzaW1wbGlmeV9rbm93aW5nKTogRml4IHVuaW5pdGlhbGl6ZWQgcmVhZAoJaW4gRmViIDIxIGNoYW5nZS4KCgkqIGdlbmV4dHJhY3QuYyAobWFpbik6IENsZWFyIHJlY29nX29wZXJhbmRzIGJlZm9yZSBleHRyYWN0aW5nLgoKRnJpIEZlYiAyNiAwMjoyNDo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjLXByYWdtYS5jIChhZGRfd2Vhayk7IERlbGV0ZS4gIE1vdmVkIGludG8uLi4KCSogdmFyYXNtLmMgKGFkZF93ZWFrKTogTmV3IGV4dGVybmFsIGZ1bmN0aW9uLgoJKGRlY2xhcmVfd2Vhayk6IElmIEhBTkRMRV9QUkFHTUFfV0VBSywgdGhlbiBhZGQgdGhlIGZ1bmN0aW9uIHRvCgl0aGUgbGlzdCBvZiB3ZWFrIGZ1bmN0aW9ucy4KCSogYy1wcmFnbWEgKGFkZF93ZWFrKTogRGVjbGFyZS4KClRodSBGZWIgMjUgMjM6NDM6NTkgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCglGbG93IHJld3JpdGUgdG8gdXNlIGJhc2ljIGJsb2NrIHN0cnVjdHVyZXMgYW5kIGVkZ2UgbGlzdHM6CgoJKiBiYXNpYy1ibG9jay5oICh4X2Jhc2ljX2Jsb2NrX2hlYWQsIHhfYmFzaWNfYmxvY2tfZW5kKTogS2lsbC4KCShiYXNpY19ibG9ja19jb21wdXRlZF9qdW1wX3RhcmdldCwgYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCk6IEtpbGwuCgkoc3RydWN0IGVkZ2VfZGVmKTogTmV3LgoJKHN0cnVjdCBiYXNpY19ibG9ja19kZWYpOiBOZXcuCgkoYmFzaWNfYmxvY2tfaW5mbyk6IE5ldy4KCShCTE9DS19IRUFELCBCTE9DS19FTkQpOiBVcGRhdGUuCgkoRU5UUllfQkxPQ0tfUFRSLCBFWElUX0JMT0NLX1BUUik6IE5ldy4KCSh1aWRfYmxvY2tfbnVtYmVyKTogS2lsbC4KCShiYXNpY19ibG9ja19mb3JfaW5zbiwgQkxPQ0tfRk9SX0lOU04pOiBOZXcuCgkoQkxPQ0tfTlVNKTogVXBkYXRlLgoJKiBmbG93LmMgKFhOTUFMTE9DKTogS2lsbC4KCShtYXhfdWlkX2Zvcl9mbG93KTogS2lsbC4KCSh1aWRfYmxvY2tfbnVtYmVyKTogS2lsbC4KCSh1aWRfdm9sYXRpbGUpOiBUdXJuIGludG8gYSBiaXRtYXAuCgkoU0VUX0lOU05fVk9MQVRJTEUpOiBOZXcuCgkoYmFzaWNfYmxvY2tfaW5mbyk6IE5ldy4KCShlbnRyeV9leGl0X2Jsb2Nrcyk6IE5ldy4KCSh4X2Jhc2ljX2Jsb2NrX2hlYWQsIHhfYmFzaWNfYmxvY2tfZW5kKTogS2lsbC4KCShiYXNpY19ibG9ja19jb21wdXRlZF9qdW1wX3RhcmdldCwgYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCk6IEtpbGwuCgkoZmxvd19pbnRfbGlzdF9ibG9ja3MsIGJhc2ljX2Jsb2NrX3N1Y2MsIGJhc2ljX2Jsb2NrX3ByZWQpOiBLaWxsLgoJKGJhc2ljX2Jsb2NrX2xvb3BfZGVwdGgpOiBLaWxsLgoJKGJhc2ljX2Jsb2NrX2Zvcl9pbnNuKTogTmV3LgoJKGZpbmRfYmFzaWNfYmxvY2tzKTogU3BsaXQgb3V0IGluaXRpYWwgYmxvY2sgY291bnRpbmcgaW50bwoJY291bnRfYmFzaWNfYmxvY2tzLiAgQ2FsbCBmdW5jdGlvbnMgc3BsaXQgb3V0IG9mIGZpbmRfYmFzaWNfYmxvY2tzXzEuCgkoY291bnRfYmFzaWNfYmxvY2tzKTogTmV3LgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBTcGxpdCBvdXQgZWRnZSByZWNvZ25pdGlvbiwgdW5yZWFjaGFibGUKCWJsb2NrIGRlbGV0aW9uLgoJKGNyZWF0ZV9iYXNpY19ibG9jayk6IE5ldy4KCShjb21wdXRlX2JiX2Zvcl9pbnNuKTogTmV3LgoJKGNsZWFyX2VkZ2VzKTogTmV3LgoJKGZyZWVfYmJfbWVtb3J5KTogS2lsbC4KCShhZGRfZWRnZSwgYWRkX2VkZ2VfdG9fbGFiZWwpOiBLaWxsLgoJKG1hcmtfbGFiZWxfcmVmKTogS2lsbC4KCShtYWtlX2VkZ2VzKTogUmV3cml0ZSB0byB1c2UgZWRnZSBsaXN0cy4KCShtYWtlX2VkZ2UsIG1ha2VfbGFiZWxfZWRnZSk6IE5ldy4KCShtYXJrX2NyaXRpY2FsX2VkZ2VzKTogTmV3LgoJKHNwbGl0X2VkZ2UsIGluc2VydF9pbnNuX29uX2VkZ2UpOiBOZXcuCgkoY29tbWl0X29uZV9lZGdlX2luc2VydGlvbiwgY29tbWl0X2VkZ2VfaW5zZXJ0aW9ucyk6IE5ldy4KCShkZWxldGVfdW5yZWFjaGFibGVfYmxvY2tzKTogUmV3cml0ZSB0byB1c2UgZWRnZSBsaXN0cy4KCVNwbGl0IG91dCBFSCByZWdpb24gbWFuaXB1bGF0aW9uIGludG8gZGVsZXRlX2VoX3JlZ2lvbnMuCglDYWxsIHRpZHlfZmFsbHRocnVfZWRnZSBhbmQgbWVyZ2VfYmxvY2tzLgoJKGRlbGV0ZV9laF9yZWdpb25zKTogTmV3LgoJKGRlbGV0ZV9ub3RlX3ApOiBOZXcuCgkoZGVsZXRlX2luc25fY2hhaW4pOiBOZXcuCgkoZGVsZXRlX2Jsb2NrKTogU3BsaXQgb3V0IGNvZGUgaW50byBkZWxldGVfaW5zbl9jaGFpbiBhbmQKCXRpZHlfZmFsbHRocnVfZWRnZS4gIFVwZGF0ZSBlZGdlIGxpc3RzLgoJKGV4cHVuZ2VfYmxvY2spOiBOZXcuCgkoZmxvd19kZWxldGVfaW5zbik6IE5ldz8KCShjYW5fZGVsZXRlX2xhYmVsX3ApOiBOZXc/CgkobWVyZ2VfYmxvY2tzX25vbW92ZSwgbWVyZ2VfYmxvY2tzKTogTmV3LgoJKHRpZHlfZmFsbHRocnVfZWRnZSk6IE5ldy4KCShjYWxjdWxhdGVfbG9vcF9kZXB0aCk6IE5ldy4KCShsaWZlX2FuYWx5c2lzKTogQWxsb2NhdGUgYW5kIGZyZWUgdWlkX3ZvbGF0aWxlLgoJKGZyZWVfYmFzaWNfYmxvY2tfdmFycyk6IFVwZGF0ZSBmb3IgbmV3IHN0cnVjdHVyZXMuCgkocmVjb3JkX3ZvbGF0aWxlX2luc25zKTogVXNlIFNFVF9JTlNOX1ZPTEFUSUxFLgoJKG1hcmtfcmVnc19saXZlX2F0X2VuZCk6IFRpZHkgRVhJVF9JR05PUkVfU1RBQ0sgdXNhZ2UuCgkobWFya191c2VkX3JlZ3MpOiBMaWtld2lzZS4KCShsaWZlX2FuYWx5c2lzXzEpOiBVc2UgYmIgZ2xvYmFsX2xpdmVfYXRfc3RhcnQsIGdsb2JhbF9saXZlX2F0X2VuZCwKCWxvY2FsX3NldCByZWdzZXRzLiAgVXNlIGJiLT5hdXggdG8gc3RvcmUgbmV3X2xpdmVfYXRfZW5kLiAgQmVnaW4KCWxpZmUgcHJvcGFnYXRpb24gZnJvbSBFWElUX0JMT0NLIHJhdGhlciB0aGFuIGxhc3QgYmxvY2suICBDbGVhcgoJcmVnc19ldmVyX2xpdmUgYWZ0ZXIgbWFya19yZWdzX2xpdmVfYXRfZW5kLgoJKGFsbG9jYXRlX2Zvcl9saWZlX2FuYWx5c2lzKTogVXBkYXRlIGZvciBuZXcgc3RydWN0dXJlcy4KCShwcm9wYWdhdGVfYmxvY2spOiBTcGxpdCBvdXQgbG9vcCBkZXB0aCBjYWxjdWxhdGlvbiB0bwoJY2FsY3VsYXRlX2xvb3BfZGVwdGguCgkocmVnbm9fdW5pbml0aWFsaXplZCk6IFVzZSBiYi0+Z2xvYmFsX2xpdmVfYXRfc3RhcnQuCgkocmVnbm9fY2xvYmJlcmVkX2F0X3NldGptcCk6IExpa2V3aXNlLgoJKGR1bXBfYmJfZGF0YSk6IExpa2V3aXNlLgoJKGZpbmRfYXV0b19pbmMpOiBVc2UgQkxPQ0tfRk9SX0lOU04gaW5zdGVhZCBvZiBCTE9DS19OVU0uCgkoZHVtcF9mbG93X2luZm8pOiBVcGRhdGUgZm9yIG5ldyBzdHJ1Y3R1cmVzLgoJKGR1bXBfZWRnZV9pbmZvKTogTmV3LgoJKHByaW50X3J0bF93aXRoX2JiKTogVXBkYXRlIGZvciBuZXcgc3RydWN0dXJlcy4KCShjb21wdXRlX3ByZWRzX3N1Y2NzKTogRG8gbm8gd29yayAtLSBjb252ZXJ0IGVkZ2UgbGlzdHMuCgkoc2V0X2Jsb2NrX2Zvcl9pbnNuKTogRnJvbSBjb3Jwc2Ugb2Ygb2xkIHNldF9ibG9ja19udW0uCgkoc2V0X2Jsb2NrX251bSk6IENhbGwgaXQuCgoJKiBydGwuYyAobm90ZV9pbnNuX25hbWUpOiBBZGQgTk9URV9JTlNOX0JBU0lDX0JMT0NLLgoJKiBydGwuaCAocnR1bmlvbl9kZWYpOiBBZGQgYmIgZW50cnkuCgkoTk9URV9CQVNJQ19CTE9DSyk6IE5ldy4KCShOT1RFX0lOU05fQkFTSUNfQkxPQ0spOiBOZXcuCgoJKiB2YXJyYXkuaCAodmFycmF5X2RhdGFfdGFnKTogQWRkIGJiIGVudHJ5LgoJKFZBUlJBWV9CQl9JTklULCBWQVJSQVlfQkIpOiBOZXcuCgoJKiBlbWl0LXJ0bC5jIChlbWl0X2xhYmVsX2JlZm9yZSk6IE5ldy4KCgkqIGV4Y2VwdC5jIChleHBhbmRfcmV0aHJvdyk6IERlbGV0ZSBpbnNucyBmb2xsb3dpbmcgdGhlIGNhbGwgdG8KCXJldGhyb3cuICBQdXQgdGhlIFJFR19FSF9SRVRIUk9XIG9uIHRoZSBjYWxsLgoKCSoganVtcC5jIChyZXR1cm5qdW1wX3AsIHJldHVybmp1bXBfcF8xKTogTmV3LgoKCSogZXhwci5oIChub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzKTogTmV3IGRlY2xhcmF0aW9uLgoJKiBmdW5jdGlvbi5jIChub25sb2NhbF9nb3RvX2hhbmRsZXJfbGFiZWxzKTogRGVmaW5lIGl0LgoJKHB1c2hfZnVuY3Rpb25fY29udGV4dF90byk6IFNhdmUgaXQuCgkocG9wX2Z1bmN0aW9uX2NvbnRleHRfZnJvbSk6IFJlc3RvcmUgaXQuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IENsZWFyIGl0LgoJKG5vbmxvY2FsX2xhYmVsX3J0eF9saXN0KTogS2lsbC4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogQWRkIHN0b3JhZ2Ugc3BhY2UgZm9yIGl0LgoJKiBzdG10LmMgKGV4cGFuZF9ubF9oYW5kbGVyX2xhYmVsKTogUmV0dXJuIHRoZSBuZXcgbGFiZWwuCgkoZXhwYW5kX25sX2dvdG9fcmVjZWl2ZXJzKTogQ29sbGVjdCBhIGxpc3Qgb2YgdGhlbSBpbgoJbm9ubG9jYWxfZ290b19oYW5kbGVyX2xhYmVscy4KCgkqIE1ha2VmaWxlLmluIChwcmludC1ydGwubyk6IERlcGVuZCBvbiBiYXNpYy1ibG9jay5oLgoJKGZsb3cubyk6IERlcGVuZCBvbiBpbnNuLWZsYWdzLmguCgoJKiBmdW5jdGlvbi5jICh0aHJlYWRfcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX2luc25zKTogRG8gbm90CgloYWxmLWhlYXJ0ZWRseSB1cGRhdGUgYmIgc3RydWN0dXJlcy4KCgkqIHRvcGxldi5jOiBBZGQgZmxvdzIgZHVtcCBhcyAtZHcuCgkocmVzdF9vZl9jb21waWxhdGlvbik6IEZpbmlzaCAuZ3JlZyBiZWZvcmUgZmxvdzIuCgoJKiBncmFwaC5jIChkcmF3X2VkZ2UpOiBIYW5kbGUgY2xhc3MgMy4KCShwcmludF9ydGxfZ3JhcGhfd2l0aF9iYik6IE1ha2UgYWJub3JtYWwgZWRnZXMgcmVkIGNsYXNzIDIsCgljaGFuZ2Ugbm9uLWZhbGwtdGhydSBidXQgYWRqYWNlbnQgdG8gZ3JlZW4gY2xhc3MgMy4gIFVwZGF0ZQoJdG8gdXNlIG5ldyBzdHJ1Y3R1cmVzLgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IEhhbmRsZSBOT1RFX0lOU05fQkFTSUNfQkxPQ0suCgoJKiByZWctc3RhY2suYyAoQkxPQ0tfTlVNKTogQ29udmVydCB0byBmdW5jdGlvbi4gIEFib3J0IGlmCglibG9ja19udW1iZXIgaXMgLTEuCgkocmVnX3RvX3N0YWNrKTogSW5pdGlhbGl6ZSBibG9ja19udW0gdG8gLTEuCgoJKiBjb21iaW5lLmMgKHNldF9ub256ZXJvX2JpdHNfYW5kX3NpZ25fY29waWVzKTogVXBkYXRlIHJlZmVyZW5jZQoJdG8gYmFzaWNfYmxvY2tfbGl2ZV9hdF9zdGFydCB0byBiYi0+Z2xvYmFsX2xpdmVfYXRfc3RhcnQuCgkodHJ5X2NvbWJpbmUpOiBMaWtld2lzZS4KCShyZWdfZGVhZF9hdF9wKTogTGlrZXdpc2UuCgkqIGdsb2JhbC5jIChnbG9iYWxfY29uZmxpY3RzKTogTGlrZXdpc2UuCglIYW5kbGUgc3RhY2sgcmVncyBvbiBhbGwgYWJub3JtYWwgZWRnZXMsIG5vdCBqdXN0IGNvbXB1dGVkIGp1bXBzLgoJKG1hcmtfZWxpbWluYXRpb24pOiBVcGRhdGUgcmVmZXJlbmNlIHRvIGJhc2ljX2Jsb2NrX2xpdmVfYXRfc3RhcnQuCgkoYnVpbGRfaW5zbl9jaGFpbik6IExpa2V3aXNlLgoJKiBoYWlmYS1zY2hlZC5jIChoYWlmYV9lZGdlKTogUmVuYW1lIGZyb20gZWRnZSBmb3IgY29uZmxpY3QuCgkoaXNfY2ZnX25vbnJlZ3VsYXIpOiBMb29rIGF0IG5vbmxvY2FsX2dvdG9faGFuZGxlcl9sYWJlbHMgaW5zdGVhZAoJb2Ygbm9ubG9jYWxfbGFiZWxfcnR4X2xpc3QuCgkoY2hlY2tfbGl2ZV8xKTogVXBkYXRlIHJlZmVyZW5jZSB0byBiYXNpY19ibG9ja19saXZlX2F0X3N0YXJ0LgoJKHVwZGF0ZV9saXZlXzEpOiBMaWtld2lzZS4KCShmaW5kX3ByZV9zY2hlZF9saXZlKTogTGlrZXdpc2UuCgkoZmluZF9wb3N0X3NjaGVkX2xpdmUpOiBMaWtld2lzZS4KCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBMaWtld2lzZS4KCShibG9ja19hbGxvYyk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKHJlbG9hZCwgcmVsb2FkX2NvbWJpbmUpOiBMaWtld2lzZS4KCSogcmVnbW92ZS5jIChtYXJrX2ZsYWdzX2xpZmVfem9uZXMpOiBMaWtld2lzZS4KCSogcmVzb3VyY2UuYyAobWFya190YXJnZXRfbGl2ZV9yZWdzKTogTGlrZXdpc2UuCgkqIHNjaGVkLmMgKHNjaGVkdWxlX2Jsb2NrKTogTGlrZXdpc2UuCgoJKiByZWdjbGFzcy5jIChyZWdzZXRfcmVsZWFzZV9tZW1vcnkpOiBEb24ndCBmcmVlCgliYXNpY19ibG9ja19saXZlX2F0X3N0YXJ0LgoKCSogdW5yb2xsLmMgKGNvcHlfbG9vcF9ib2R5KTogRG9uJ3QgZHVwbGljYXRlIE5PVEVfSU5TTl9CQVNJQ19CTE9DSy4KClRodSBGZWIgMjUgMjE6MzI6MzQgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZml4aW5jLndyYXA6IEFsc28gaGFuZGxlIHN0cnVjdCBxdWV1ZSBpbiBzeXMvc3RyZWFtLmguCgkqIGZpeGluYy5zdnI0OiBMaWtld2lzZS4KCgkqIGR3YXJmMm91dC5jIChzY29wZV9kaWVfZm9yKTogU2V0IHNjb3BlX2RpZSB0byBjb21wX3VuaXRfZGllCglyYXRoZXIgdGhhbiBhc3NlcnRpbmcgaXQuCgpUaHUgRmViIDI1IDIzOjMzOjA2IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGV4cC5jIChsZWZ0X3NoaWZ0LCByaWdodF9zaGlmdCwgcGFyc2VfY2hhcmNvbnN0LCBDT01QQVJFLAoJY3BwX3BhcnNlX2V4cHIpOiBSZXBsYWNlIHVzZXMgb2YgbG9uZy9IT1NUX0JJVFNfUEVSX0xPTkcgd2l0aAoJSE9TVF9XSURFU1RfSU5UL0hPU1RfQklUU19QRVJfV0lERVNUX0lOVC4KCgkqIE1ha2VmaWxlLmluIChjcHBtYWluLm8sIGNwcGxpYi5vLCBjcHBoYXNoLm8sIGNwcGFsbG9jLm8sCgljcHBlcnJvci5vLCBjcHBleHAubywgY3BwZmlsZXMubywgY3BwaW5pdC5vLCBmaXgtaGVhZGVyLm8sCglzY2FuLWRlY2xzLm8pOiBEb24ndCBkZXBlbmQgb24gbWFjaG1vZGUuaC4KCgkqIGNwcGV4cC5jOiBEb24ndCBkZWZpbmUgQ0hBUl9CSVQgb3IgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBhbnltb3JlLgoJUmVwbGFjZSBhbGwgaW5zdGFuY2VzIG9mIEhPU1RfV0lERV9JTlQgd2l0aCBIT1NUX1dJREVTVF9JTlQuCgoJKiBjcHBmaWxlcy5jOiBMaWtld2lzZS4KCgkqIGNwcGxpYi5jOiBMaWtld2lzZS4KCgkqIGNwcGxpYi5oOiBMaWtld2lzZS4gIEFsc28gZG9uJ3QgaW5jbHVkZSBtYWNobW9kZS5oIGFueW1vcmUuCgpUaHUgRmViIDI1IDE4OjQ2OjI2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnY2MuYyAoZGVmYXVsdF9jb21waWxlcnMpOiBEZWZpbmUgX19GQVNUX01BVEhfXyB3aGVuIGFwcHJvcHJpYXRlLgoJKiBvYmpjL2xhbmctc3BlY3MuaDogTGlrZXdpc2UuCgpUaHUgRmViIDI1IDE2OjE5OjQzIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLm1kIChjYWxsIHBhdHRlcm5zKTogTG9zZSB1bnVzZWQgYXJndW1lbnQgdG8gb3V0cHV0X2NhbGwuCgoJKiBwcmludC1ydGwuYyAocHJpbnRfcnRsKTogUHJpbnQgL2ogYW5kIC9jIGZvciB0aGUganVtcC9jYWxsIGZsYWdzLgoKMTk5OS0wMi0yNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjcHBoYXNoLmMgKGluc3RhbGwpOiBSZW5hbWUgdG8gY3BwX2luc3RhbGwsIGFkZCBjcHBfcmVhZGVyKgoJZmlyc3QgYXJndW1lbnQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGhhc2h0YWIpOiBSZW1vdmVkLgoJKGNwcF9sb29rdXAsIGNwcF9pbnN0YWxsKTogQ2hhbmdlIGFsbCByZWZzIHRvIGhhc2h0YWIgdG8KCXBmaWxlLT5oYXNodGFiLgoJKGNwcF9oYXNoX2NsZWFudXApOiBSZW1vdmVkLgoJKiBjcHBoYXNoLmg6IEFkanVzdCBwcm90b3R5cGVzLgoJKiBjcHBsaWIuaCAoc3RydWN0IGNwcF9yZWFkZXIpOiBBZGQgaGFzaHRhYiBwb2ludGVyLgoJKiBjcHBpbml0LmMgKGNwcF9yZWFkZXJfaW5pdCk6IEFsc28gYWxsb2NhdGUgc3BhY2UgZm9yIHRoZQoJaGFzaHRhYi4KCShjcHBfY2xlYW51cCk6IERlbGV0ZSBhbGwgbWFjcm9zIGFuZCBmcmVlIHRoZSBoYXNodGFiLgoKVGh1IEZlYiAyNSAyMTo1Mjo1NCAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guaCAoUEFTU19JTl9SRUdfUCk6IEZvciBUQVJHRVRfSElUQUNISSwgZG9uJ3QgcGFzcyBzdHJ1Y3R1cmVzCglpbiByZWdpc3RlcnMuCgoJKiBleHByLmggKFBSRVRFTkRfT1VUR09JTkdfVkFSQVJHU19OQU1FRCk6IFByb3ZpZGUgZGVmYXVsdCBkZWZpbml0aW9uLgoJKiBmdW5jdGlvbi5jIChhc3NpZ25fcGFybXMpOiBIb25vdXIgUFJFVEVORF9PVVRHT0lOR19WQVJBUkdTX05BTUVELgoJKiBjYWxscy5jIChleHBhbmRfY2FsbCk6IExpa2V3aXNlLgoKCSogc2guYyAoc2hfZXhwYW5kX3Byb2xvZ3VlKTogRm9yIFRBUkdFVF9ISVRBQ0hJLCBkb24ndCBwdXNoIHZhcmFyZ3MgLwoJc3RkYXJnIGFyZ3VtZW50cy4KCSogc2guaCAoQ1BQX1NQRUMpOiBBZGQgLURfX0hJVEFDSElfXyBmb3IgLW1oaXRhY2hpLgoJKEZVTkNUSU9OX0FSRyk6IEZvciBUQVJHRVRfSElUQUNISSwgZG9uJ3QgcGFzcyB1bm5hbWVkCglhcmd1bWVudHMgaW4gcmVnaXN0ZXJzLgoJKFBSRVRFTkRfT1VUR09JTkdfVkFSQVJHU19OQU1FRCk6IERlZmluZS4KCSogdmEtc2guaCAoZW50aXJlIGZpbGUpOiBJZiBfX0hJVEFDSElfXyBpcyBkZWZpbmVkLCB1c2Ugc2hbMTIzXQoJZmxhdm9yIHZhcmFyZ3MuCgpUaHUgRmViIDI1IDE0OjMyOjQwIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNzZS5jIChkdW1wX2NsYXNzKTogUmV2ZXJ0IGxhc3QgY2hhbmdlIGFuZCBtYWtlIHRoZSBwcm90b3R5cGUKCWV4dGVybi4KClRodSBGZWIgMjUgMTk6MTM6NDIgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJ0bC5oIChpbnNuX2ZpcnN0X3ApOiBEb24ndCBkZWNsYXJlLgoJKiBydGxhbmFsLmMgKGluc25fZmlyc3RfcCk6IERlbGV0ZS4KCSogbG9vcC5jIChsb29wX2luc25fZmlyc3RfcCk6IEZhc3RlciBpbXBsZW1lbnRhdGlvbi4KClRodSBGZWIgMjUgMTA6NDQ6MzUgMTk5OSAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uaCAoVEFSR0VUX1NXSVRDSEVTKTogRGVsZXRlIGRlcHJlY2F0ZWQgc3dpdGNoZXMgLW1bMjM2XS4KCShUQVJHRVRfMywgVEFSR0VUXzYpOiBEZWxldGUuCgkoQVJNX0ZMQUdfQVJNWzM2XSk6IERlbGV0ZS4KCShDUFBfQ1BVX0FSQ0hfU1BFQyk6IE5vIG5lZWQgdG8gaGFuZGxlIC1tWzIzNl0gYW55IG1vcmUuCgkoQ0MxX1NQRUMpOiBEb24ndCBleHBhbmQgLW1bMjM2XSBpbnRvIG5ldyBlcXVpdmFsZW50cy4KCShDUFBfQVBDU19QQ19TUEVDKTogTm8gbmVlZCB0byBoYW5kbGUgLW1bMjM2XSBhbnkgbW9yZS4KCSogYXJtLmMgKGFybV9vdmVycmlkZV9vcHRpb25zKTogRGVsZXRlIHdhcm5pbmdzIGFib3V0IGRlcHJlY2F0ZWQKCW9wdGlvbnMgLW1bMjM2XS4KCgkqIGFybS5jIChhcm1fZmluYWxpemVfcGljKTogQnVpbGQgdGhlIGxhYmVsIGludG8gdGhlIHNwZWNpYWwgcGljCglhZGp1c3RtZW50IGluc24gaW5zdGVhZCBvZiBpc3N1aW5nIGl0IHNlcGFyYXRlbHkuCgkqIGFybS5tZCAocGljX2FkZF9kb3RfcGx1c19laWdodCk6IFJld29yayB0byBjb250YWluIHRoZSBsYWJlbAoJdGhhdCBpcyBuZWVkZWQuCgoJKiBhcm0ubWQgKCp6ZXJvZXh0cmFjdHFpX2NvbXBhcmUwX3NjcmF0Y2gpOiBEZWxldGUuCgkoKm5lX3plcm9leHRyYWN0c2kpOiBOZXcgcGF0dGVybi4KClRodSBGZWIgMjUgMTg6NDA6MDYgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHN0bXQuYyAoZXhwYW5kX2VuZF9sb29wKTogR3JvayBjb2RlIGVtaXR0ZWQgYnkKCWV4cGFuZF9leGl0X2xvb3BfaWZfZmFsc2UuCgpUaHUgRmViIDI1IDEwOjE3OjMyIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jIChyZXR1cm5faW5fbWVtb3J5KTogRmxvYXQgZmllbGRzIGluIHVuaW9ucwoJZm9yY2UgYSByZXR1cm4gaW4gbWVtb3J5LgoJKGxvYWRfbXVsdGlwbGVfc2VxdWVuY2UpOiBBZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0d28gTERSCglpbnN0cnVjdGlvbnMgY2FuIGJlIGJldHRlciB0aGFuIGFuIExETUlBIGluc3RydWN0aW9uLgoKCSogY29uZmlnL2FybS9hcm0uaCAoVEFSR0VUX1NIT1JUX0JZX0JZVEVTKTogQWRkIGNvbW1lbnQKCWRlc2NyaWJpbmcgdGhlIHJlYWwgbWVhbmluZyBvZiB0aGlzIG9wdGlvbi4KCShGSVhFRF9SRUdJU1RFUlMpOiBEZWZhdWx0IHIxMCB0byBub3QtZml4ZWQuCgkoQ0FMTF9VU0VEX1JFR0lTVEVSUyk6IERlZmF1bHQgcjEwIHRvIG5vdC1jYWxsLXVzZWQuCgkoU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogSWYgbm90IGRlZmluZWQsIGRlZmluZQoJYXMgZW1wdHkuCgkoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBGaXggcjEwIGlmIFRBUkdFVF9BUENTX1NUQUNLIGlzCgl0cnVlLiAgSW52b2tlIFNVQlRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSBhZnRlcgoJcGVyZm9ybWluZyBvdGhlciBjaGVja3MuCgoJKiBjb25maWcvYXJtL2FybS5tZCAoemVyb19leHRlbmRoaXNpMik6IFVuZG8gcHJldmlvdXMgY2hhbmdlLgoJKGV4dGVuZGhpc2kyKTogVW5kbyBwcmV2aW91cyBjaGFuZ2UuCglBbHNvIGFkZCBjb21tZW50cyBkZXNjcmliaW5nIHdoeSBUQVJHRVRfU0hPUlRfQllfQllURVMgY2FuIGJlCglpZ25vcmVkIGZvciBhcm12NCh0KSBhcmNoaXRlY3R1cmVzLgoKCSogY29uZmlnL2FybS9yaXNjaXguaCAoU1VCVEFSR0VUX0NPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKToKCURlZmluZSB0byBmaXggcjEwLgoKCSogY29uZmlnL2FybS9yaXNjaXgxLTEuaAoJKFNVQlRBUkdFVF9DT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERlZmluZSB0byBmaXggcjEwLgoKVGh1IEZlYiAyNSAxMjowOTowNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjc2UuYyAoZHVtcF9jbGFzcyk6IE1ha2UgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gc3RhdGljIHRvIG1hdGNoCgl0aGUgcHJvdG90eXBlLgoKV2VkIEZlYiAyNCAxNzo0NzoyOCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBkYnhvdXQuYyAoZ3N0YWIuaCk6IFVzZSBpZiBDUk9TU19DT01QSUxFLgoKCSogZHdhcmYyb3V0LmMgKGFkZF9sb2NhdGlvbl9vcl9jb25zdF92YWx1ZV9hdHRyaWJ1dGUpOiBBZGQgYmlnCgllbmRpYW4gY29ycmVjdGlvbiBmb3IgcGFybXMgcGFzc2VkIGluIHJlZ3MgYnV0IGxpdmluZyBvbiB0aGUgc3RhY2suCgpXZWQgRmViIDI0IDE0OjAzOjU0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNhbGxzLmMgKGluaXRpYWxpemVfYXJndW1lbnRfaW5mb3JtYXRpb24pOiBOZXcgZnVuY3Rpb24gZXh0cmFjdGVkCglmcm9tIGV4cGFuZF9jYWxsLgoJKGV4cGFuZF9jYWxsKTogVXNlIGluaXRpYWxpemVfYXJndW1lbnRfaW5mb3JtYXRpb24uICBSZW1vdmUgdmFyaWFibGVzCgl3aGljaCBhcmUgbm8gbG9uZ2VyIHVzZWQgZHVlIHRvIGNsZWFudXBzLgoKCSogY2FsbHMuYyAoY29tcHV0ZV9hcmd1bWVudF9ibG9ja19zaXplKTogTmV3IGZ1bmN0aW9uLCBleHRyYWN0ZWQgZnJvbQoJZXhwYW5kX2NhbGxzLgoJKGV4cGFuZF9jYWxscyk6IFVzZSBjb21wdXRlX2FyZ3VtZW50X2Jsb2NrX3NpemUuICBEZWxldGUKCW9yaWdpbmFsX2FyZ3Nfc2l6ZSwgdXNlIHVuYWRqdXN0ZWRfYXJnc19zaXplIGluc3RlYWQuCgoJKiBjYWxscy5jIChwcmVjb21wdXRlX2FyZ3VtZW50cyk6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20KCWV4cGFuZF9jYWxsLgoJKGV4cGFuZF9jYWxsKTogVXNlIHByZWNvbXB1dGVfYXJndW1lbnRzLgoKCSogY2FsbHMuYyAoZmluYWxpemVfbXVzdF9wcmVhbGxvY2F0ZSk6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20KCWV4cGFuZF9jYWxsLgoJKGV4cGFuZF9jYWxsKTogVXNlIGZpbmFsaXplX211c3RfcHJlYWxsb2NhdGUuCgoJKiBjYWxscy5jIChzdG9yZV9vbmVfYXJnKTogTWFyayAidmFyaWFibGVfc2l6ZSIgYXMgcG9zc2libHkgdW51c2VkLgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzLCBjYXNlICdwJyk6IFNldCBjbGFzc2VzIGFwcHJvcHJpYXRlbHkuCglBbiBhbHRlcm5hdGl2ZSBhbHdheXMgZmFpbHMgaWYgaXQgbmVlZHMgYSBwc2V1ZG8gYW5kIG5vIHN1aXRhYmxlCglyZWdpc3RlciBjbGFzcyBjYW4gYmUgZm91bmQuCgpXZWQgRmViIDI0IDE5OjQ3OjU2IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmggKGxvb3BfaW5zbl9maXJzdF9wKTogRGVjbGFyZS4KCSogbG9vcC5jIChsb29wX2luc25fZmlyc3RfcCk6IE5vIGxvbmdlciBzdGF0aWMuCgkqIHVucm9sbC5jIChpdGVyYXRpb25faW5mbyk6IEZpeCBjb21wYXJpc29uIHRvCglyZWdfaXZfdHlwZS0+bnVtX2VsZW1lbnRzLgoJQmVmb3JlIGFjY2Vzc2luZyByZWdfYml2X2NsYXNzLCBjaGVjayBpbmRleCBhZ2FpbnN0CgltYXhfcmVnX2JlZm9yZV9sb29wLgoJRml4IGFuZCBlbmFibGUgY29kZSBmb3IgZ2l2IGl0ZXJhdG9ycy4KCShsb29wX2l0ZXJhdGlvbnMpOiBDb21wYXJlIHdpdGggcmVnX2l2X3R5cGUtPm51bV9lbGVtZW50cyBpbnN0ZWFkCglvZiB3aXRoIG1heF9yZWdfYmVmb3JlX2xvb3AuCgpXZWQgRmViIDI0IDE5OjE3OjExIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBBdm9pZCBvdXQtb2YtYm91bmRzIGluZGV4IGZvciBsb2NhbF9yZWduby4KCldlZCBGZWIgMjQgMTE6MjY6NDEgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBEb24ndCB1c2UKCVBJQ19PRkZTRVRfVEFCTEVfUkVHTlVNIGZvciByZWdpc3RlciBhbGxvY2F0aW9uIHdoZW4gLWZQSUMuCgpUdWUgRmViIDIzIDE2OjI0OjE5IDE5OTkgIE1hcmMgTGVobWFubiAgPHBjZ0Bnb29mLmNvbT4KCgkqIGNvbmZpZy9pMzg2L2kzODYubWQ6IEZpeCB0eXBvLgoKTW9uIEZlYiAyMiAxOTozNjozMyAxOTk5ICBBbmRyZXcgQ2FnbmV5ICA8Y2FnbmV5QGIxLmN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLmMgKG1pcHNfZGVidWdnZXJfb2Zmc2V0KTogV2hlbiBUQVJHRVRfTUlQUzE2ICYmCglmcmFtZV9wb2ludGVyX25lZWRlZCBhZGp1c3QgZnJhbWUgc2l6ZS4KCShmdW5jdGlvbl9wcm9sb2d1ZSk6IERvbid0IE1JUFMxNiAubWFzayBHUE9GRlNFVC4gQWxyZWFkeSBhZGp1c3RlZAoJaW4gLmZyYW1lIHBzZXVkby1vcC4KCUZybSBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+OgoJKiBtaXBzLmMgKGZ1bmN0aW9uX3Byb2xvZ3VlKTogQWRqdXN0IGZyYW1lIHNpemUgaW4gLmZyYW1lIHBzZXVkby1vcAoJd2hlbiBUQVJHRVRfTUlQUzE2ICYmIGZyYW1lX3BvaW50ZXJfbmVlZGVkLgoKMTk5OS0wMi0yMiAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmg6IEFkZCBUQVJHRVRfQ1BVX3N0cm9uZ2FybTExMDAuCglBZGQgLW1uby1zY2hlZCBjb21tYW5kIGxpbmUgc3dpdGNoIHRvIGRpc2FibGUgc2NoZWR1bGluZyBvZgoJaW5zdHJ1Y3Rpb25zIGludG8gdGhlIGZ1bmN0aW9uJ3MgcHJvbG9ndWUuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IFJlbW92ZS4KCShUQVJHRVRfT1BUSU9OUyk6IEFkZCAiZnBlPSIgb3B0aW9uIHRvIG1hdGNoIGRvY3VtZW50YXRpb24uCgkoc3RydWN0IGFybV9jcHVfc2VsZWN0KTogUmVwbGFjZSAnc2V0X3R1bmVfcCcgYW5kICdzZXRfYXJjaF9wJwoJZmllbGRzIHdpdGggJ3Byb2Nlc3NvcnMnIGZpZWxkLgoJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogQWxsb3cgcjEwIHRvIGJlIHVzZWQgaWYgc3RhY2sKCWNoZWNraW5nIGlzIG5vdCBlbmFibGVkLgoJKFJFVFVSTl9JTl9NRU1PUlkpOiBBbHdheXMgY2FsbCBhcm1fcmV0dXJuX2luX21lbW9yeS4KCgkqIGNvbmZpZy9hcm0vYXJtLmMgKGFybV9jcHUpOiBSZW1vdmUuCgkodHVuZV9mbGFncyk6IFJlbW92ZS4KCShhcm1faXNfc3Ryb25nKTogTmV3IHZhcmlhYmxlOiB0cnVlIGlmZiB0aGUgdGFyZ2V0IHByb2Nlc3NvciBpcyBhCglTdHJvbmdBUk0uCgkoYXJtX2lzXzZfb3JfNyk6IE5ldyB2YXJpYWJsZTogdHJ1ZSBpZmYgdGhlIHRhcmdldCBwcm9jZXNzb3IgaXMgYW4KCUFSTTYgb3IgYW5kIEFSTTcuCgkoYXJtX3NlbGVjdCk6IEZpZWxkcyByZW9yZ2FuaXNlZC4KCShzdHJ1Y3QgcHJvY2Vzc29ycyk6IHByb2Nlc3Nvcl90eXBlIGZpZWxkIHJlbW92ZWQuCgkoYWxsX3Byb2NzKTogUmVtb3ZlLgoJKGFsbF9jb3Jlcyk6IE5ldyBhcnJheTogRGVmaW5pdGlvbnMgb2YgYWxsIGtub3duIEFSTSBjcHUgY29yZXMuCgkoYWxsX2FyY2hpdGVjdHVyZXMpOiBOZXcgYXJyYXk6IERlZmluaXRpb25zIG9mIGFsbCBrbm93biBBUk0KCWFyY2hpdGVjdHVyZXMuCgkoc3RyZXEpOiBOZXcgbWFjcm8uCgkoRkxfU0NIRUQpOiBOZXcgcHJvY2Vzc29yIGZsYWc6IHByb2Nlc3NvciByZXF1aXJlZCBsb2FkCglzY2hlZHVsaW5nLgoJKEZMX1NUUk9ORyk6IE5ldyBwcm9jZXNzb3IgZmxhZzogcHJvY2Vzc29yIGlzIGEgU3Ryb25nQVJNLgoJKGFybV9vdmVycmlkZV9vcHRpb25zKTogUmVvcmdhbml6ZWQgdG8gbWFrZSBjb2RlIGNsZWFyZXIuCgkodXNlX3JldHVybl9pbnNuKTogVGVzdCBmb3IgIm5vdCAoVEFSR0VUX0FQQ1MgYW5kCglmcmFtZV9wb2ludGVyX25lZWRlZCkiLgoJKGFybV9yZXR1cm5faW5fbWVtb3J5KTogSW1wcm92ZSBoYW5kbGluZyBvZiBzdHJ1Y3R1cmVzLgoKCSogY29uZmlnL2FybS9hcm0ubWQ6IFJlbW92ZSAiY3B1IiBhdHRyaWJ1dGUuICBSZXBsYWNlIHdpdGgKCSJpc19zdHJvbmdhcm0iIGFuZCAiaXNfYXJtXzZfb3JfNyIgYXR0cmlidXRlcy4KCSh6ZXJvX2V4dGVuZGhpc2kyKTogQ2hlY2sgZm9yIFRBUkdFVF9TSE9SVF9CWV9CWVRFUyBiZWZvcmUKCWFybV9hcmNoNC4KCShleHRlbmRoaXNpMik6IENoZWNrIGZvciBUQVJHRVRfU0hPUlRfQllfQllURVMgYmVmb3JlIGFybV9hcmNoNC4KCgkqIGludm9rZS50ZXhpIChBUk0gT3B0aW9ucyk6IERvY3VtZW50IC1tdHVuZT0gYW5kIC1tZnA9IG9wdGlvbnMuCgoxOTk5LTAyLTIyICBQaGlsaXAgQmx1bmRlbGwgIDxwaGlsYkBnbnUub3JnPgoKCSogY29uZmlnL2FybS9saW51eC1nYXMuaCAoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogUmVwbGFjZSBkZWZhdWx0CglkZWZpbml0aW9uIHdpdGggb25lIGluY2x1ZGluZyBjYWNoZSBzeW5jaHJvbml6YXRpb24uCgkoQ0xFQVJfSU5TTl9DQUNIRSk6IENvcnJlY3Qgc3lzY2FsbCBudW1iZXIgYW5kIGVuYWJsZSBkZWZpbml0aW9uLgoJTW92ZSBkZWZpbml0aW9uIG9mIGluaGliaXRfbGliYyB0by4uLgoJKiBjb25maWcvYXJtL3htLWxpbnV4Lmg6IC4uLiBoZXJlLgoKCSogY29uZmlnL2FybS90LWxpbnV4OiBEaXNhYmxlIG11bHRpbGliIGNvbmZpZ3VyYXRpb25zIHNpbmNlIHRoZQoJb25seSBlZmZlY3QgZm9yIG1vc3QgcGVvcGxlIGlzIHRvIGNhdXNlIGJ1aWxkcyB0byBmYWlsLgoKCSogY29uZmlnL2FybS9lbGYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBBZGQgLmZpbGUgZGlyZWN0aXZlLgoJKEFTTV9TUEVDKTogVHJhbnNsYXRlIC1tYXBjcy1mbG9hdCB0byAtbWZsb2F0IGZvciB0aGUgYXNzZW1ibGVyLgoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaCAoREVGQVVMVF9WVEFCTEVfVEhVTktTKTogRGVmaW5lLgoJKEhBTkRMRV9TWVNWX1BSQUdNQSk6IExpa2V3aXNlLgoJKExJQl9TUEVDKTogQ29weSBkZWZpbml0aW9uIGZyb20gZ2VuZXJpYyBMaW51eCBmaWxlcy4KCShMSUJHQ0NfU1BFQyk6IEluY2x1ZGUgLWxmbG9hdCBpZiAtbXNvZnQtZmxvYXQgd2FzIGdpdmVuLgoJKEZQX0RFRkFVTFQpOiBTZXQgdG8gU09GVDMgb24gMzItYml0IHRhcmdldHMuCgkoRFdBUkYyX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lLgoJKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6IERlZmluZSBhcyBEQlhfREVCVUcuCgpNb24gRmViIDIyIDE2OjU0OjE4IDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAobGliY2FsbF9vdGhlcl9yZWdzKTogTWFrZSBleHRlcm4uCgkqIHJ0bC5oIChmaW5kX2xhc3RfdmFsdWUpOiBBZGQgcGFyYW1ldGVyIHRvIHByb3RvdHlwZS4KCShsaWJjYWxsX290aGVyX3JlZyk6IEFkZCBleHRlcm4gZGVjbGFyYXRpb24uCgkqIHJ0bGFuYWwuYyAoZmluZF9sYXN0X3ZhbHVlKTogQWRkIGFub3RoZXIgcGFyYW1ldGVyIHRvIGFsbG93CglhIGRlZmluaXRpb24gdXNpbmcgYSBoYXJkd2FyZSByZWdpc3RlciB0byBiZSBmb3VuZCBhcyB3ZWxsLgoKTW9uIEZlYiAyMiAxMzozMzo0NyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY3NlLmMgKGR1bXBfY2xhc3MpOiBOZXcgZnVuY3Rpb24uCgkoaW52YWxpZGF0ZV9tZW1vcnkpOiBGaXggdHlwbyBpbiBjb21tZW50LgoJKiBmdW5jdGlvbi5jICh0ZW1wX3Nsb3QpOiBBZGQgYW4gYWxpYXMgc2V0IGZpZWxkLgoJKGFzc2lnbl9zdGFja190ZW1wKTogT25seSByZXVzZSBzbG90cyBpZiB0aGV5IHdpbGwgaGF2ZSB0aGUKCXNhbWUgYWxpYXMgc2V0IGFzIGJlZm9yZS4KCShjb21iaW5lX3RlbXBfc2xvdHMpOiBEb24ndCBjb21iaW5lIGlmIC1mc3RyaWN0LWFsaWFzaW5nOwoJdGhhdCdzIHVuc2FmZS4KCSogcnRsLmMgKGNvcHlfcnR4KTogQ29weSBhbGwgdGhlIGZsYWdzIChpbiBwYXJ0aWN1bGFyLAoJTUVNX1NDQUxBUl9QKS4KCk1vbiBGZWIgMjIgMTQ6MTM6MjMgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGlbMzQ1NjddODYtKi1saW51eC1nbnUqLAoJaVszNDU2N104Ni0qLWxpbnV4LWdudWxpYmMxLCBpWzM0NTY3XTg2LSotbGludXgtZ251YW91dCosCglpWzM0NTY3XTg2LSotbGludXgtZ251b2xkbGQqKTogVXNlIGZpeGluYy54ODYtbGludXgtZ251IGFzCglmaXhpbmNsdWRlcy4KCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGZpeGluYy54ODYtbGludXgtZ251OiBOZXcgc2NyaXB0IGZvciBmaXhpbmcgYXNtLXN0YXRlbWVudHMgYnVnCglvbiB4ODYgbGludXguCgoJKiBmaXhpbmMvZml4aW5jLng4Ni1saW51eC1nbnU6IENvcHkgb2YgdGhlIHByZXZpb3VzIG9uZS4KCgkqIGZpeGluYy9ta2ZpeGluYy5zaCAoaVszNDU2N104Ni0qLWxpbnV4LWdudSosCglpWzM0NTY3XTg2LSotbGludXgtZ251bGliYzEsIGlbMzQ1NjddODYtKi1saW51eC1nbnVhb3V0KiwKCWlbMzQ1NjddODYtKi1saW51eC1nbnVvbGRsZCopOiBVc2UgZml4aW5jLng4Ni1saW51eC1nbnUgYXMKCWZpeGluY2x1ZGVzLgoKTW9uIEZlYiAyMiAwODo1NTowNSAxOTk5ICBPdmlkaXUgUHJlZGVzY3UgIDxvdmlkaXVAY3VwLmhwLmNvbT4KCgkqIG9iamMvb2JqYy1hY3QuYyAoZW5jb2RlX3R5cGUpOiBUZW1wb3JhcnkgcmV2ZXJ0IHRvIHRoZSBvbGQKCWJlaGF2aW9yIG9mIGVuY29kaW5nIHR5cGVzIGFzIHRoZSBuZXcgb25lIHNlZW1zIHRvIGJyZWFrIHRoZQoJZW5jb2Rpbmcgb2YgYml0ZmllbGRzLgoKTW9uIEZlYiAyMiAxMTo0MDo0NCAxOTk5ICBDcmFpZyBCdXJsZXkgIDxjcmFpZ0BqY2Itc2MuY29tPgpTYXQgRmViIDIwIDA5OjU5OjM2IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoYWxsLmludGVybmFsLCBhbGwuY3Jvc3MpOiBEZXBlbmQgb24gYGRvYycKCXRhcmdldCwgdG8gZW5zdXJlIGRvY3MgZ2V0IG1hZGUgYmVmb3JlIGluc3RhbGxhdGlvbi4KCglEZWNyZWFzZSBzcHVyaW91cyB3YXJuaW5ncyBmcm9tIC1mc3ludGF4LW9ubHk6CgkqIHN0bXQuYyAoZXhwYW5kX2V4cHJfc3RtdCk6IEV4cGFuZCBleHByIGV2ZW4gd2hlbiAtZnN5bnRheC1vbmx5LgoKTW9uIEZlYiAyMiAxMDo1NTowMCAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogUmVwbGFjZSB3YXJuaW5nIGFib3V0IGludGVnZXIgY29uc3RhbnRzIGJlaW5nCglsYXJnZXIgdGhhbiBsb25nLWxvbmdzLCB3aXRoIGEgd2FybmluZyBhYm91dCBpbnRlZ2VyIGNvbnN0YW50cwoJYmVpbmcgbGFyZ2VyIHRoYW4gdGhlIGxhcmdlc3QgdGFyZ2V0IGludGVnZXIuCgpNb24gRmViIDIyIDA4OjM1OjM4IDE5OTkgIENyYWlnIEJ1cmxleSAgPGNyYWlnQGpjYi1zYy5jb20+CgoJRml4IC1mc3ludGF4LW9ubHkgSUNFczoKCSogdmFyYXNtLmMgKGFzc2VtYmxlX3plcm9zLCBhc3NlbWJsZV92YXJpYWJsZSwKCW91dHB1dF9jb25zdGFudF9kZWYpOiBEbyBub3RoaW5nIHdoZW4gLWZzeW50YXgtb25seS4KCkZyaSBGZWIgMTkgMTg6MTg6NTYgMTk5OSAgRG9uIEJvd21hbiAgPGRvbkBwaXhzdHJlYW0uY29tPgoKCSogY29uZmlndXJlLmluIChtaXBzKi0qLXZ4d29ya3MqKTogRW5hYmxlIGd0aHJlYWRzIHZ4d29ya3Mgc3VwcG9ydC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIEZlYiAyMSAyMDozNDo0NCAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBGZWIgMjEgMjA6MzU6MTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlnL2FvdXRvcy5oIChBU01fT1VUUFVUX0NPTlNUUlVDVE9SKTogRGVsZXRlLgoJKEFTTV9PVVRQVVRfREVTVFJVQ1RPUiwgQVNNX09VVFBVVF9HQ19FTlRSWSk6IExpa2V3aXNlLgoJKiB0bS50ZXhpOiBVcGRhdGUgZG9jcyBmb3IgY29uc3RydWN0b3JzIGFuZCBkZXN0cnVjdG9ycy4KClN1biBGZWIgMjEgMTc6MTE6MTggMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdlbmF0dHJ0YWIuYyAoY2hlY2tfYXR0cl92YWx1ZSk6IEFsbG93IG5lZ2F0aXZlIGNvbnN0X2ludCBpZgoJbmVnYXRpdmVfb2suICBBY2NlcHQgaW50ZWdyYWwgYXJpdGhtZXRpYyBvcGVyYXRvcnMuICBBY2NlcHQKCWRpcmVjdCByZWZlcmVuY2VzIHRvIG90aGVyIGF0dHJpYnV0ZXMuICBBY2NlcHQgc3ltYm9sX3JlZiBpbgoJbm9uLWNvbnN0YW50IGF0dHJpYnV0ZXMuCgkobWF4X2F0dHJfdmFsdWUpOiBBZGQgbmV3IGFyZ3VtZW50IGB1bmtub3ducCcuICBVcGRhdGUgYWxsIGNhbGxlcnMuCgkob3JfYXR0cl92YWx1ZSk6IExpa2V3aXNlLgoJKHNpbXBsaWZ5X2tub3dpbmcpOiBEb24ndCBvcHRpbWl6ZSBpZiBtYXhfYXR0cl92YWx1ZSB1bmtub3duLgoJKHdyaXRlX2xlbmd0aF91bml0X2xvZyk6IExpa2V3aXNlIHdpdGggb3JfYXR0cl92YWx1ZS4KCShmaW5kX2FuZF9tYXJrX3VzZWRfYXR0cmlidXRlcyk6IERvbid0IGZhbGx0aHJ1IGNhc2UuCgkod3JpdGVfYXR0cl9zZXQpOiBQYXNzIHRocnUgYWxsIG5vbi1jb25kIGV4cHJlc3Npb25zLgoJKHdyaXRlX2F0dHJfdmFsdWUpOiBIYW5kbGUgc3ltYm9sX3JlZiwgYXR0ciwgYW5kIGFyaXRobWV0aWMuCgpTdW4gRmViIDIxIDEzOjE2OjQ0IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHJlZ21vdmUuYyAoZGlzY292ZXJfZmxhZ3NfcmVnKTogVXNlIHdvcmRfbW9kZSBpbnN0ZWFkIG9mIFNJbW9kZS4KClN1biBGZWIgMjEgMTM6MTU6NDAgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlZ21vdmUuYyAoZGlzY292ZXJfZmxhZ3NfcmVnKTogUmVtb3ZlIGNjMCBjb2RlLgoJKG1hcmtfZmxhZ3NfbGlmZV96b25lcykgW0hBVkVfY2MwXTogRm9yY2UgdXNlIG9mIGNjMDsgYmFpbCBpZgoJYSBwb3RlbnRpYWwgZmxhZ3MgcmVnaXN0ZXIgd2FzIGlkZW50aWZpZWQuCgpTYXQgRmViIDIwIDE2OjE2OjA3IDE5OTggIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIHJzNjAwMC5tZCAoc2NjIHBsdXMgbHR1KTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCgpTYXQgRmViIDIwIDA5OjA4OjQ0IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogeG0tYXJtLmggKEhPU1RfQklUU19QRVJfTE9OR0xPTkcpOiBEZWZpbmUuCgpGcmkgRmViIDE5IDIzOjAyOjAyIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWdtb3ZlLmMgKGRpc2NvdmVyX2ZsYWdzX3JlZyk6IE5ldyBmdW5jdGlvbi4KCShmbGFnc19zZXRfMSwgbWFya19mbGFnc19saWZlX3pvbmVzKTogTmV3IGZ1bmN0aW9ucy4KCShyZWdtb3ZlX29wdGltaXplKTogQ2FsbCB0aGVtLgoJKGZpeHVwX21hdGNoXzEpOiBVc2UgaW5zbiBtb2RlcyByYXRoZXIgdGhhbiBzZXRzX2NjMF9wLgoKRnJpIEZlYiAxOSAyMjo0NzowMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcnRsYW5hbC5jIChpbnNuX2ZpcnN0X3ApOiBGaXggcmV0dXJuIHZhbHVlIGZvciBpbnNuID09IHJlZmVyZW5jZS4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlLCBjaGVja19maW5hbF92YWx1ZSwgY2hlY2tfZGJyYV9sb29wKToKCVVzZSBsb29wX2luc25fZmlyc3RfcC4KCkZyaSBGZWIgMTkgMTU6NDk6MjYgMTk5OSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgkJCSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLm1kIChzY2MgcGx1cyBlcSk6IEZpeCBvdXRwdXQgdGVtcGxhdGUuCgkoc2NjIHBsdXMgbHR1KTogRml4IG91dHB1dCB0ZW1wbGF0ZSBhbmQgY29sbGFwc2UgdmFyaWFudHMKCWNvcnJlY3RpbmcgZWFybHkgY2xvYmJlcnMuCgkoc2NjIHBsdXMgZ2V1KTogRml4IG91dHB1dCB0ZW1wbGF0ZS4KCShzY2MgcGx1cyBndCk6IEZpeCBvdXRwdXQgdGVtcGxhdGUuCgkoc2NjIHBsdXMgZ3R1KTogRml4IG91dHB1dCB0ZW1wbGF0ZSBhbmQgY29sbGFwc2UgdmFyaWFudHMuCgpGcmkgRmViIDE5IDE1OjQzOjU5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGluaXQuYyAocHJpbnRfaGVscCk6IFJlbW92ZSB1bmVzY2FwZWQgbmV3bGluZSBpbiBzdHJpbmcuCgpGcmkgRmViIDE5IDE5OjU1OjA2IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENoZWNrIGZvciBpbnRlcnZlbmluZyBqdW1wcyB3aGVuCgljb252ZXJ0aW5nIGJpdiBpbmNyZW1lbnQgdG8gZ2l2LgoKVGh1IEZlYiAxOCAxNjozNjo1OCAxOTk5ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmIChUUllfRklOQUxMWV9FWFBSLCBHT1RPX1NVQlJPVVRJTkVfRVhQUik6IE5ldyB0cmVlIG5vZGVzLAoJKiBleHByLmMgKGV4cGFuZF9leHByKTogU3VwcG9ydCBuZXcgdHJlZSBub2Rlcy4KCkZyaSBGZWIgMTkgMTA6MTc6NTYgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5jIChtNjhrX2FsaWduX2xvb3BzX3N0cmluZywKCW02OGtfYWxpZ25fanVtcHNfc3RyaW5nLCBtNjhrX2FsaWduX2Z1bmNzX3N0cmluZyk6IEFkZCBjb25zdC4KCSogY29uZmlnL202OGsvbTY4ay5oIChtNjhrX2FsaWduX2xvb3BzX3N0cmluZywKCW02OGtfYWxpZ25fanVtcHNfc3RyaW5nLCBtNjhrX2FsaWduX2Z1bmNzX3N0cmluZyk6IExpa2V3aXNlLgoKVGh1IEZlYiAxOCAyMzoyODozNSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBiaXRtYXAuYyAoYml0bWFwX3ByaW50KTogUXVhbGlmeSBhIGNoYXIqIHdpdGggdGhlIGBjb25zdCcga2V5d29yZC4KCgkqIGJpdG1hcC5oIChiaXRtYXBfcHJpbnQpOiBMaWtld2lzZS4KCgkqIGMtZGVjbC5jIChidWlsdGluX2Z1bmN0aW9uLCBncm9rZGVjbGFyYXRvciwgZ3Jva2ZpZWxkKTogTGlrZXdpc2UuCgoJKiBjLWxhbmcuYyAoYnVpbGRfb2JqY19zdHJpbmcpOiBMaWtld2lzZS4KCgkqIGMtbGV4LmMgKHl5ZXJyb3IsIGV4dGVuZF90b2tlbl9idWZmZXIpOiBMaWtld2lzZS4gIERvbid0IGluY2x1ZGUKCWxpbWl0cy5oIG9yIGN0eXBlLmguICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBwJy4KCgkqIGMtbGV4LmggKHl5ZXJyb3IpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogYy1wcmFnbWEuYyAoaGFuZGxlX3ByYWdtYV90b2tlbik6IExpa2V3aXNlLgoKCSogYy1wcmFnbWEuaCAoaGFuZGxlX3ByYWdtYV90b2tlbik6IExpa2V3aXNlLgoKCSogYy10cmVlLmggKGJ1aWxkX29iamNfc3RyaW5nLCBidWlsdGluX2Z1bmN0aW9uLCBncm9rZmllbGQsCglidWlsZF9pbmRpcmVjdF9yZWYsIGx2YWx1ZV9vcl9lbHNlLCByZWFkb25seV93YXJuaW5nLCBlcnJvcl9pbml0LAoJcGVkd2Fybl9pbml0KTogTGlrZXdpc2UuCgoJKiBjLXR5cGVjay5jIChjb252ZXJ0X2Zvcl9hc3NpZ25tZW50LCB3YXJuX2Zvcl9hc3NpZ25tZW50LAoJcHVzaF9zdHJpbmcsIHdhcm5pbmdfaW5pdCwgaW5jb21wbGV0ZV90eXBlX2Vycm9yLAoJYnVpbGRfaW5kaXJlY3RfcmVmLCBsdmFsdWVfb3JfZWxzZSwgcmVhZG9ubHlfd2FybmluZywKCWJ1aWxkX2NfY2FzdCwgc3BlbGxpbmcsIHB1c2hfbWVtYmVyX25hbWUsIHByaW50X3NwZWxsaW5nLAoJZXJyb3JfaW5pdCwgcGVkd2Fybl9pbml0LCBzdGFydF9pbml0KTogTGlrZXdpc2UuCgoJKiBvYmpjL29iamMtYWN0LmMgKGJ1aWxkX29iamNfc3RyaW5nKTogTGlrZXdpc2UuCgoJKiBwcmludC10cmVlLmMgKHByaW50X25vZGVfYnJpZWYsIHByaW50X25vZGUpOiBMaWtld2lzZS4KCgkqIHRyZWUuaCAobHZhbHVlX29yX2Vsc2UsIHByaW50X25vZGUsIHByaW50X25vZGVfYnJpZWYpOiBMaWtld2lzZS4KClRodSBGZWIgMTggMjA6NDQ6MjEgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzKTogQ29ycmVjdGx5IGhhbmRsZSAncCcgY29uc3RyYWludC4KClRodSBGZWIgMTggMTk6NTk6MzcgMTk5OSAgTWFyYyBFc3BpZSAgPGVzcGllQGN2cy5vcGVuYnNkLm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiA6SGFuZGxlIE9wZW5CU0QgcGxhdGZvcm1zLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZy9vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBjb25maWcveG0tb3BlbmJzZC5oOiBOZXcgZmlsZS4KCSogY29uZmlnL3Qtb3BlbmJzZDogTmV3IGZpbGUuCgkqIGNvbmZpZy90LW9wZW5ic2QtdGhyZWFkOiBOZXcgZmlsZS4KClRodSBGZWIgMTggMTg6NDc6MDkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBSb3VuZCBTSVpFIGJlZm9yZSBjYWxsaW5nCglhc3NpZ25fc3RhY2tfbG9jYWwgZm9yIEJMS21vZGUgc2xvdHMuCgpGcmkgRmViIDE5IDAxOjQ1OjA2IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IEZvciBkZXJpdmVkIGdpdnMsIHJlcGxhY2UgdGhlCglnaXYgdGhpcyB3YXMgZGVyaXZlZCBmcm9tIHdpdGggaXRzIG5ld19yZWcuCgkocmVjb21iaW5lX2dpdnMpOiBEb24ndCBzZXQgbmV3X3JlZyBmb3IgZGVyaXZlZCBnaXYuCglBbmQgZG9uJ3QgcHJpbnQgaXQsIHByaW50IFNVTSBpbnN0ZWFkLgoKVGh1IEZlYiAxOCAxNTo1Mjo0OSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBtNjhrZWxmLmggKEFTTV9SRVRVUk5fQ0FTRV9KVU1QKTogQWRkIDUyMDAgc3VwcG9ydC4KCjE5OTktMDItMTggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmM6IEtpbGwgZGVmaW5lIG9mIFNURENfVkFMVUUuICBEb24ndCBpbmNsdWRlIG91dHB1dC5oCgkgIG9yIHByZWZpeC5oLiBDaGFuZ2UgQ1BQX0lTX01BQ1JPX0JVRkZFUiB0byBub3QgcmVmZXIgdG8KCSAgbWFjcm9fY2xlYW51cC4KCSAgKEdFVF9FTlZfUEFUSF9MSVNULCBQQVRIX1NFUEFSQVRPUiwgU1RBTkRBUkRfSU5DTFVERV9ESVIsCgkgIHByZWRlZnMsIFNJWkVfVFlQRSwgUFRSRElGRl9UWVBFLCBXQ0hBUl9UWVBFLAoJICBDUFBfV0NIQVJfVFlQRSwgVVNFUl9MQUJFTF9QUkVGSVgsIFJFR0lTVEVSX1BSRUZJWCwgc3RydWN0CgkgIGNwcF9wZW5kaW5nLCB2ZXJzaW9uX3N0cmluZywgc3RydWN0IGRlZmF1bHRfaW5jbHVkZSwKCSAgaW5jbHVkZV9kZWZhdWx0c19hcnJheSwgcGF0aF9pbmNsdWRlLCBjcHBfb3B0aW9uc19pbml0LAoJICBkdW1wX3NwZWNpYWxfdG9fYnVmZmVyLCBpbml0aWFsaXplX2J1aWx0aW5zLCBjcHBfc3RhcnRfcmVhZCwKCSAgY3BwX3JlYWRlcl9pbml0LCBucmV2ZXJzZV9wZW5kaW5nLCBwdXNoX3BlbmRpbmcsIHByaW50X2hlbHAsCgkgIGNwcF9oYW5kbGVfb3B0aW9uLCBjcHBfaGFuZGxlX29wdGlvbnMsIGNwcF9maW5pc2gsCgkgIGNwcF9jbGVhbnVwKTogTW92ZSB0byBjcHBpbml0LmMuCgkgIChtYWNyb19jbGVhbnVwLCBzdHJ1Y3QgYXJnbGlzdCwgY29sbGVjdF9leHBhbnNpb24sCgkgIGNyZWF0ZV9kZWZpbml0aW9uLCBjb21wYXJlX2RlZnMsIGNvbXBfZGVmX3BhcnQsIEFSR19CQVNFLAoJICBzdHJ1Y3QgYXJnZGF0YSwgbWFjYXJnLCBjaGFuZ2VfbmV3bGluZXMsIHRpbWVzdGFtcCwKCSAgbW9udGhuYW1lcywgc3BlY2lhbF9zeW1ib2wsIHVuc2FmZV9jaGFycywgbWFjcm9leHBhbmQsCgkgIHB1c2hfbWFjcm9fZXhwYW5zaW9uKTogTW92ZSB0byBjcHBoYXNoLmMuCgkgIChxdW90ZV9zdHJpbmcsIGNoZWNrX21hY3JvX25hbWUsIGNwcF9leHBhbmRfdG9fYnVmZmVyLAoJICBvdXRwdXRfbGluZV9jb21tYW5kLCBjcHBfdW5kZWYpOiBFeHBvcnQuCgkgIChudWxsX3VuZGVyZmxvdywgbnVsbF9jbGVhbnVwLCBoYW5kbGVfZGlyZWN0aXZlKTogTWFrZSBzdGF0aWMuCgoJKiBjcHBsaWIuaDogUHJvdG90eXBlIG5vdy1leHBvcnRlZCBmdW5jdGlvbnMuICBBZGp1c3QgZGVjbHMgb2YKCSAgc3ludGF4IHRhYmxlcyBzbyB3ZSBjYW4gaW5jbHVkZSBjcHBsaWIuaCBpbiBjcHBpbml0LmMuCgkqIGNwcGhhc2guaDogUHJvdG90eXBlIGFsbCBmdW5jdGlvbnMgZXhwb3J0ZWQgYnkgY3BwaGFzaC5jLgoJKiBjcHBpbml0LmM6IE1ha2Ugc3ludGF4IHRhYmxlcyBpbml0aWFsaXplZCBkYXRhIGlmIHBvc3NpYmxlCgkgICh1c2VzIEdDQyBkZXNpZ25hdGVkLWluaXRpYWxpemVyIGV4dGVuc2lvbikuCgkqIGNwcGV4cC5jOiBNYWtlIGNwcF9sZXggc3RhdGljLgoJKiBNYWtlZmlsZS5pbjogTW92ZSAtRCBzd2l0Y2hlcyBmb3IgdGhlIHZhcmlvdXMgaW5jbHVkZSBkaXJzCgkgIGZyb20gY3BwbGliLm8gcnVsZSB0byBjcHBpbml0Lm8gcnVsZS4gIEFkanVzdCBkZXBlbmRlbmNpZXMuCgpUaHUgRmViIDE4IDEzOjE1OjU2IDE5OTkgIE1hcmMgRXNwaWUgIDxlc3BpZUBjdnMub3BlbmJzZC5vcmc+CgoJKiBhbHBoYS9vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBhbHBoYS94bS1vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBzcGFyYy9vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBzcGFyYy94bS1vcGVuYnNkLmg6IE5ldyBmaWxlLgoJKiBtNjhrL29wZW5ic2QuaDogTmV3IGZpbGUuCgkqIG02OGsveG0tb3BlbmJzZC5oOiBOZXcgZmlsZS4KCSogaTM4Ni9vcGVuYnNkLmg6IE5ldyBmaWxlLCBvcmlnaW5hbGx5IGZyb20gbmV0YnNkLgoJKiBpMzg2L3htLW9wZW5ic2QuaDogTmV3IGZpbGUuCgoxOTk5LTAyLTE3ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIE1ha2VmaWxlLmluOiBDb3JyZWN0IGRlcGVuZGVuY2llcyBmb3IgY3BwbGliIG9iamVjdCBmaWxlcy4KCldlZCBGZWIgMTcgMTQ6MDQ6MTggMTk5OSAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAubWQgKHthZGQsc3VifXNpMyBgLicpOiBBZGQgYWx0ZXJuYXRpdmVzIHRvIHVzZSBDUiBvdGhlcgoJdGhhbiBjcjAuCgpXZWQgRmViIDE3IDE2OjU5OjI4IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERvbid0IG1vdmUgZ2l2IGluc24gZm9yIGJpdiB0dXJuZWQgZ2l2CgliZWxvdyBzY2FuX3N0YXJ0LgoKV2VkIEZlYiAxNyAxMDo1NjoyNCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiB0cmVlLmMgKHRyZWVfbm9kZV9raW5kX25hbWVzLCBwcmludF9vYnN0YWNrX25hbWUsCglnZXRfaWRlbnRpZmllciwgbWF5YmVfZ2V0X2lkZW50aWZpZXIsIGJ1aWxkX3N0cmluZywKCWJ1aWxkX2V4cHJfd2ZsLCBpc19hdHRyaWJ1dGVfcCwgbG9va3VwX2F0dHJpYnV0ZSwKCXByaW50X29ic3RhY2tfc3RhdGlzdGljcywgZ2V0X2ZpbGVfZnVuY3Rpb25fbmFtZV9sb25nLCB0cmVlX2NoZWNrLAoJdHJlZV9jbGFzc19jaGVjaywgZXhwcl9jaGVjayk6IFF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnCglrZXl3b3JkLgoKCSogdHJlZS5oIChnZXRfaWRlbnRpZmllciwgbWF5YmVfZ2V0X2lkZW50aWZpZXIsIGJ1aWxkX3N0cmluZywKCWJ1aWxkX2V4cHJfd2ZsLCBpc19hdHRyaWJ1dGVfcCwgbG9va3VwX2F0dHJpYnV0ZSwKCXByaW50X29ic3RhY2tfc3RhdGlzdGljcywgcHJpbnRfb2JzdGFja19uYW1lLCB0cmVlX2NoZWNrLAoJdHJlZV9jbGFzc19jaGVjaywgZXhwcl9jaGVjayk6IExpa2V3aXNlLgoKVHVlIEZlYiAxNiAyMToyOTozOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBpMzg2L2ZyZWVic2QtZWxmLmgsIGkzODYvZ2FzLmgsIGkzODYvbGludXguaDogRml4IG1pbm9yIHNwYWNpbmcKCWVycm9ycy4KCgkqIGNhbGxzLmMgKHN0b3JlX29uZV9hcmcpOiBNYXJrIGFueSBzbG90cyB1c2VkIGZvciB0aGUgYXJndW1lbnQKCWFzIGluLXVzZSBpbW1lZGlhdGVseSBhZnRlciB3ZSdyZSBkb25lIHNhdmluZyBhbnkgc2xvdHMgd2hpY2gKCXdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhpcyBhcmd1bWVudC4KClR1ZSBGZWIgMTYgMjE6MDI6MDcgMTk5OSAgQW50b24gSGFydGwgIDx0b25pQGRldnNvZnQuY29tPgoKCSogcnM2MDAwLm1kIChjYWxsX3ZhbHVlKTogRml4IHR5cG8uCgpXZWQgRmViIDE3IDAxOjI5OjA3IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IENhbGN1bGF0ZSBtYXliZV9kZWFkIGJlZm9yZQoJY2FsbGluZyByZWNvbWJpbmVfZ2l2cy4KCldlZCBGZWIgMTcgMDA6NDM6MTIgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRHVtcCBiaXYgaW5jcmVtZW50IC0+IGdpdiBjb252ZXJzaW9ucy4KClR1ZSBGZWIgMTYgMTU6MzE6MzkgMTk5OSAgT3ZpZGl1IFByZWRlc2N1ICA8b3ZpZGl1QGN1cC5ocC5jb20+CgoJKiBvYmpjL29iamMtYWN0LmMgKGVuY29kZV90eXBlKTogRW5jb2RlIHRoZSB0eXBlIGluc3RlYWQgb2YKCWVuY29kaW5nIHRoZSBtb2RlIG9mIHRoZSB0eXBlIChwYXRjaCBmcm9tIFJpY2hhcmQgRnJpdGgtTWFjZG9uYWxkCgk8cmljaGFyZEBicmFpbnN0b3JtLmNvLnVrPikuCgpUdWUgRmViIDE2IDEwOjUzOjUxIDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogY29uZmlnL2FybS9hcm0ubWQgKCp6ZXJvZXh0cmFjdHFpX2NvbXBhcmUwX3NjcmF0Y2gpOiBSZS1hZGQgbG9hZAoJaW5zdHJ1Y3Rpb24ga2lsbGVkIGluIHByZXZpb3VzIGNoYW5nZS4gIFNpbXBsaWZ5IG1hc2sgZ2VuZXJhdGlvbi4KCSgqemVyb2V4dHJhY3RzaV9jb21wYXJlMF9zY3JhdGNoKTogU2ltcGxpZnkgbWFzayBnZW5lcmF0aW9uLgoKVHVlIEZlYiAxNiAwOTo1MjoyNiAxOTk5ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9hcm0ubWQgKHplcm9leHRyYWN0cWlfY29tcGFyZTBfc2NyYXRjaCk6IEVuc3VyZSB0aGF0CgliaXRmaWVsZCBkb2VzIG5vdCBvdmVyZmxvdyBhIGJ5dGUgYm91bmRhcnkuCgpUdWUgRmViIDE2IDAxOjM3OjMzIDE5OTkgIENoYXJsZXMgRyBXYWxkbWFuICA8Y2d3QGFsdW0ubWl0LmVkdT4KCgkqIGMtY29tbW9uLmMgKHNob3J0ZW5fY29tcGFyZSk6IEdldCB0aGUgbWluL21heCB2YWx1ZSBmcm9tIHRoZQoJdW5kZXJseWluZyB0eXBlIG9mIGFuIGVudW1lcmF0aW9uLCBub3QgdGhlIGVudW1lcmF0ZWQgdHlwZSBpdHNlbGYuCgpNb24gRmViIDE1IDIzOjA0OjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGp1bXAuYzogSW5jbHVkZSBpbnNuLWF0dHIuaC4KCShkZWxldGVfY29tcHV0YXRpb24pOiBJZiByZWxvYWQgaGFzIGNvbXBsZXRlZCBhbmQgaW5zbiBzY2hlZHVsaW5nCglhZnRlciByZWxvYWQgaXMgZW5hYmxlZCwgdGhlbiBkbyBub3QgZGVwZW5kIG9uIFJFR19ERUFEIG5vdGVzLgoJKiBNYWtlZmlsZS5pbiAoanVtcC5vKTogRGVwZW5kIG9uIGluc24tYXR0ci5oLgoKTW9uIEZlYiAxNSAxNjo1NzozOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5tZCAoYWRkc2kzKTogQWxsb3cgbGVhIGZvciBhbnkgY29uc3RhbnRfcC4KCjE5OTktMDItMTUgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogUmVtb3ZlIC1maWRlbnQgYW5kCgkgIC1mbm9pZGVudCwgd2hpY2ggYXJlIG5vdyBoYW5kbGVkIGJ5IHRoZSBsYW5ndWFnZSBpbmRlcGVuZGVudAoJICBvcHRpb24gcGFyc2VyLgoKMTk5OS0wMi0xNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBjLWNvbW1vbi5jIChVTkdFVEMgW1VTRV9DUFBMSUI9MV0pOiBEbyBub3RoaW5nIGlmIGMgaXMgRU9GLgoJKiBjLWxleC5jOiBMaWtld2lzZS4KCSogY3BwbGliLmMgKGNwcF9wdXNoX2J1ZmZlciwgY3BwX3BvcF9idWZmZXIpOiBVc2UgYSBsaW5rZWQKCWxpc3QgaW4gbWFsbG9jZWQgbWVtb3J5IGZvciB0aGUgYnVmZmVyIHN0YWNrLgoJKGNwcF9nZXRfdG9rZW4pOiBEb24ndCBwb3AgdGhlIGxhc3QgYnVmZmVyIG9mZiB0aGUgc3RhY2suCglDYWxscyBhZnRlciBDUFBfRU9GIGhhcyBiZWVuIHJldHVybmVkIHByb2R1Y2UgQ1BQX0VPRiB3aXRoIG5vCglzdGF0ZSBjaGFuZ2UuCgkoY3BwX2ZpbmlzaCk6IFBvcCBsYXN0IGJ1ZmZlciBoZXJlLgoJKGRvX2xpbmUpOiBEb24ndCBmcmVlIGlwLT5sYXN0X25vbWluYWxfZm5hbWUgaWYgaXQgaXMgZXF1YWwgdG8KCWlwLT5mbmFtZS4KCShzcGVjaWFsX3N5bWJvbCk6IElmIGEgVF9DT05TVCBpcyB0aGUgZW1wdHkgc3RyaW5nLCBwdXNoIGEKCXNpbmdsZSBgQCAnIGVzY2FwZSBpbnN0ZWFkLgoJKG1hY3JvZXhwYW5kKTogU3BlY2lhbCBzeW1ib2wgYnVmZmVycyBoYXZlIGVzY2FwZXMgdG9vLgoJKiBjcHBsaWIuaCAoc3RydWN0IGNwcF9idWZmZXIpOiBSZW1vdmUgdW51c2VkIGZpZWxkcywgYWRkIHByZXYKCWJ1ZmZlciBwb2ludGVyLgoJKHN0cnVjdCBjcHBfcmVhZGVyKTogUmVtb3ZlIGJ1ZmZlcl9zdGFjay4gIEFkZAoJYnVmZmVyX3N0YWNrX2RlcHRoLgoJKENQUF9QUkVWX0JVRkZFUiwgQ1BQX05VTExfQlVGRkVSKTogQnVmZmVyIHN0YWNrIGlzIG5vdyBhCglsaW5rZWQgbGlzdC4KCk1vbiBGZWIgMTUgMTQ6NDQ6NTMgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jOiBEb24ndCBkZWZpbmUgSE9TVF9XSURFX0lOVC4gIFJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIG9mCglXSURFX0lOVCB3aXRoIFdJREVTVF9JTlQuCgoJKiBjZXhwLnk6IExpa2V3aXNlLgoJRG9uJ3QgZGVmaW5lIHVuc2lnbmVkX0hPU1RfV0lERV9JTlQsIENIQVJfQklUIG9yCglIT1NUX0JJVFNfUEVSX1dJREVfSU5ULiAgUmVwbGFjZSBvY2N1cnJlbmNlcyBvZiBQUklOVEZfUFJPVE9fMSgpCglzdHlsZSB3aXRoIFBWUFJPVE8oKSBBVFRSSUJVVEVfUFJJTlRGXzEgc3R5bGUgbWFjcm9zLiAgUmVwbGFjZQoJb2NjdXJyZW5jZXMgb2YgInVuc2lnbmVkX0hPU1QiIHdpdGggInVuc2lnbmVkIEhPU1QiLiAgUHJvdmlkZSBhCglkZWZpbml0aW9uIG9mIHZhcmlhYmxlIGBjODknIHdoZW4gY29tcGlsaW5nIGEgdGVzdCBiaW5hcnkgYW5kIHNldCBpdC4KCgkqIHN5c3RlbS5oOiBEb24ndCBkZWZpbmUgdGhlIFBSSU5URl9QUk9UT18qIG1hY3Jvcy4KCk1vbiBGZWIgMTUgMTE6MzM6NTEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChtYXJrX2xvb3BfanVtcCk6IEhhbmRsZSBMT19TVU0uICBJZiB3ZSBlbmNvdW50ZXIgc29tZXRoaW5nCgl3ZSBkbyBub3QgdW5kZXJzdGFuZCwgbWFyayB0aGUgbG9vcCBhbmQgY29udGFpbmluZyBsb29wcyBhcyBpbnZhbGlkLgoKTW9uIEZlYiAxNSAwMDo0MDo0NSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogYWxpYXMuYyAoaW5pdF9hbGlhc19hbmFseXNpcyk6IEF2b2lkIHNlbGYtcmVmZXJlbnRpYWwgdmFsdWUKCXdoZW4gc2V0dGluZyByZWdfa25vd25fdmFsdWUgZnJvbSBSRUdfRVFVQUwgbm90ZXMuCgpTdW4gRmViIDE0IDIzOjEyOjEwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2LmMgKGxlZ2l0aW1hdGVfYWRkcmVzc19wKTogVmVyaWZ5IG1vZGVzIG9mIGJhc2UgYW5kIGluZGV4LgoKU3VuIEZlYiAxNCAyMzowMToyOCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5jIChsZWdpdGltYXRlX3BpY19hZGRyZXNzX2Rpc3BfcCk6IFJlbW92ZSBzdGF0aWMuCgkqIGkzODYuaCAoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QKTogVXNlIGl0IGluc3RlYWQgb2YKCW9wZW4tY29kaW5nIGNhc2VzLgoKU3VuIEZlYiAxNCAyMTowMzoyOCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBleGNlcHQuYyAoc3RhcnRfY2F0Y2hfaGFuZGxlcik6IFVzZSBlbWl0X2NtcF9hbmRfanVtcF9pbnNucy4KCSogZXhwbG93LmMgKHByb2JlX3N0YWNrX3JhbmdlKTogTGlrZXdpc2UuCgkqIGV4cG1lZC5jIChkb19jbXBfYW5kX2p1bXApOiBMaWtld2lzZS4KCSogZXhwci5jIChzdG9yZV9leHByLCBleHBhbmRfZXhwciwgZXhwYW5kX2J1aWx0aW4pOiBMaWtld2lzZS4KCShkb190YWJsZWp1bXApOiBMaWtld2lzZS4KCSogc3RtdC5jIChleHBhbmRfZXhwcl9zdG10LCBleHBhbmRfZW5kX2Nhc2UpOiBMaWtld2lzZS4KCShkb19qdW1wX2lmX2VxdWFsLCBlbWl0X2Nhc2Vfbm9kZXMpOiBMaWtld2lzZS4KCSogb3B0YWJzLmMgKGVtaXRfY21wX2FuZF9qdW1wX2luc25zKTogQ2xhcmlmeSBjb21tZW50cy4gIElmIFVOU0lHTkVEUCwKCXRoZW4gY29udmVydCBjb21wYXJpc29uIHRvIGFuIHVuc2lnbmVkIGNvZGUgYmVmb3JlIGVtaXR0aW5nIHRoZSBqdW1wLgoJKGV4cGFuZF9mbG9hdCwgZXhwYW5kX2ZpeCk6IFVzZSBlbWl0X2NtcF9hbmRfanVtcF9pbnNucy4KClN1biBGZWIgMTQgMDI6MjQ6MTUgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gRmViIDE0IDAxOjE1OjA0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEZlYiAxNCAwMDo0NTo1MCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmM6IERpc2FibGUgcmVjZW50IGxvb3AgY2hhbmdlcy4gIFRlbXBvcmFyeSBhcyBKb2VybgoJY29udGludWVzIHRvIGZpeCBwcm9ibGVtcy4KClNhdCBGZWIgMTMgMjM6Mjk6NDIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoY29tYmluZV9naXZzX3VzZWRfYnlfb3RoZXIpOiBEZWxldGUuCgkoY29tYmluZV9naXZzX2JlbmVmaXRfZnJvbSk6IERlbGV0ZS4KCShjb21iaW5lX2dpdnMpOiBEZW55IGNvbWJpbmF0aW9uIG9mIGdpdnMgb25seSB1c2VkIG9uY2UuICBTaW1wbGlmeQoJY29kZSB3aXRoIHRoZSBkZWF0aCBvZiBjb21iaW5lX2dpdnNfYmVuZWZpdF9mcm9tLgoKU3VuIEZlYiAxNCAxMToyNDowNSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IENhbGwgcmVnX2luX2Jhc2ljX2Jsb2NrX3AgYmVmb3JlCglsb29wX3JlZ191c2VkX2JlZm9yZV9wLgoKU2F0IEZlYiAxMyAwNTozMjowMCAxOTk5ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5tZDogVXNlIGdlbl9ydHhfRk9PIGluc3RlYWQgb2YgZ2VuX3J0eCAoRk9PLCAuLi4pLgoJKiBhcm0uaDogTGlrZXdpc2UuCgkqIGFybS5jOiBMaWtld2lzZS4KCgkqIGFybS5oIChUQVJHRVRfT1BUSU9OUyk6IFJlZm9ybWF0IGZvciBjbGFyaXR5LgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IFdoZW4gZ2VuZXJhdGluZyBQSUMsIHJlZmVyZW5jZXMgdG8gc3ltYm9scwoJaW4gdGhlIGNvbnN0YW50IHBvb2wgYXJlbid0IHZhbGlkLgoJKExFR0lUSU1BVEVfUElDX09QRVJBTkRfUCk6IExpa2V3aXNlLgoKCSogYXJtLmM6IEluY2x1ZGUgInN5c3RlbS5oIiwgbm90IHN0ZGlvLmggYW5kIHN0cmluZy5oLgoKRnJpIEZlYiAxMiAxMzowNjoyOCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBSZXR1cm4gaWYgb3B0aW1pemVfdGFpbF9yZWN1cnNpb24gc3VjY2VlZGVkLgoJKG9wdGltaXplX3RhaWxfcmVjdXJzaW9uKTogQ2hhbmdlIHJldHVybiB0eXBlIGZyb20gdm9pZCB0byBpbnQuCglBZGQgcmV0dXJuIHN0YXRlbWVudHMuCgkqIHRyZWUuaCAob3B0aW1pemVfdGFpbF9yZWN1cnNpb24pOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoLgoKRnJpIEZlYiAxMiAyMTowOTo1MSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc19zdWJyZWdfYWRkcmVzcyk6IE5ldyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJZmluZF9yZWxvYWRzX3RvcGxldi4KCShmaW5kX3JlbG9hZHNfdG9wbGV2LCBmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogVXNlIGl0LgoKRnJpIEZlYiAxMiAxMzoyMDo1MiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoODMwMC5tZCAoemVyb19leHRlbmRoaXNpMiBIOC8zMDAgdmFyaWFudCk6IENvcnJlY3RseSBoYW5kbGUKCWV4dGVuZGluZyBhIENPTlNUX0lOVC4KCgkqIGg4MzAwLm1kIChwZWVwaG9sZSBmb3IgY29tYmluaW5nIG1lbXJlZnMpOiBEZWxldGUgaW5jb3JyZWN0IHBlZXBob2xlLgoKRnJpIEZlYiAxMiAxODoyOToxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChsb29wX2luc25fZmlyc3RfcCwgYml2X2VsaW1pbmF0aW9uX2dpdl9oYXNfMF9vZmZzZXQpOgoJTmV3IGZ1bmN0aW9ucy4KCShtYXliZV9lbGltaW5hdGVfYml2XzEpOiBVc2UgYml2X2VsaW1pbmF0aW9uX2dpdl9oYXNfMF9vZmZzZXQuCgpGcmkgRmViIDEyIDE2OjU2OjEwIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGxvYWRfbWVtcyk6IERvbid0IGd1ZXNzIGhvdyB0byBkbyBhIGxvYWQgLyBzdG9yZSwgdXNlCgllbWl0X21vdmVfaW5zbi4KCkZyaSBGZWIgMTIgMDk6MjQ6MjYgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3lzdGVtLmg6IFByb3ZpZGUgYSBkZWZpbml0aW9uIGZvciBIT1NUX1dJREVTVF9JTlQsIGV0Yy4KCkZyaSBGZWIgMTIgMjM6Mzc6MjYgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X2FkZHJlc3NfY29zdCk6IFJldmVydCA5IEZlYiBjaGFuZ2UuCgpGcmkgRmViIDEyIDAwOjUxOjI2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogRml4IGhhbmRsaW5nIG9mIGFuIGF1dG9pbmNyZW1lbnRlZAoJcHNldWRvIHdoaWNoIGlzIGhvbWVkIGluIHRoZSBzdGFjay4KCgkqIG1pcHMuYyAoc2F2ZV9yZXN0b3JlX2luc25zKTogRml4IGxvb3AgdG8gc2F2ZS9yZXN0b3JlIEZQIHJlZ2lzdGVycy4KCShjb21wdXRlX2ZyYW1lX3NpemUpOiBDaGFuZ2UgbG9vcCBvdmVyIEZQIHJlZ3MgdG8gYmUgY29uc2lzdGVudAoJd2l0aCB0aGUgbG9vcCBpbiBzYXZlX3Jlc3RvcmVfaW5zbnMuCgpUaHUgRmViIDExIDE3OjM4OjQwIDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGk5NjAvaTk2MC5oIChPVkVSUklERV9PUFRJT05TKTogV2FybiBpZiAtbWxvbmctZG91YmxlLTY0IGlzIHVzZWQuCgkoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogVW5kZWYgdGhlbiB1bmNvbmRpdGlvbmFsbHkgZGVmaW5lIHRvIDk2LgoKVGh1IEZlYiAxMSAxNToxMTozNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChic2V0KTsgUmUtZW5hYmxlLgoKVGh1IEZlYiAxMSAxNToyMDo0OSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2gubWQgKGlzX3NmdW5jKTogTmV3IGF0dHJpYnV0ZS4KCSogc2guaCAoSU5TTl9TRVRTX0FSRV9ERUxBWUVELCBJTlNOX1JFRkVSRU5DRVNfQVJFX0RFTEFZRUQpOiBVc2UgaXQuCgpUaHUgRmViIDExIDAxOjA2OjQ5IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBmb2xkLWNvbnN0LmMgKHJhbmdlX2Jpbm9wKTogVGFrZSBhY2NvdW50IG9mIHRoZSBib3VuZGVkIG5hdHVyZQoJb2YgZml4ZWQgbGVuZ3RoIGFyaXRobWV0aWMgd2hlbiBjb21wYXJpbmcgdW5ib3VuZGVkIHJhbmdlcy4KClRodSBGZWIgMTEgMDA6MDg6MTcgMTk5OSAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBDbGVhciBiZXN0X3AKCXdoZW4gYW4gZXhhY3QgbWF0Y2ggaXMgZm91bmQuCgoJKiBpMzg2LmggKExPQ0FMX0FMSUdOTUVOVCk6IERlZmluZS4KCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX2xvY2FsLCBhc3NpZ25fb3V0ZXJfc3RhY2tfbG9jYWwpOiBVc2UgaXQuCgkoYXNzaWduX3N0YWNrX3RlbXBfZm9yX3R5cGUpOiBOZXcgZnVuY3Rpb24gYmFzZWQgb24gYXNzaWduX3N0YWNrX3RlbXAuCgkoYXNzaWduX3N0YWNrX3RlbXApOiBDYWxsIGl0LgoJKGFzc2lnbl90ZW1wKTogVXNlIGFzc2lnbl9zdGFja190ZW1wX2Zvcl90eXBlLCBub3QgYXNzaWduX3N0YWNrX3RlbXAuCgkqIHN0bXQuYzogVXNlIGFzc2lnbl90ZW1wLCBub3QgYXNzaWduX3N0YWNrX3RlbXAuCgkqIHRtLnRleGk6IERvY3VtZW50IExPQ0FMX0FMSUdOTUVOVC4KCldlZCBGZWIgMTAgMjM6Mjg6MjggMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVvcmcuYzogRmluaXNoIGRlbGV0aW5nIGhhbGYtZGVsZXRlZCBjb21tZW50LgoKV2VkIEZlYiAxMCAxNzoxMjoyMSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBTaWduIGV4dGVuZCBSRUFMX1ZBTFVFX1RPX1RBUkdFVF9TSU5HTEUKCXJlc3VsdC4KCSogZmluYWwuYyAoc3BsaXRfZG91YmxlKTogU2lnbiBleHRlbmQgUkVBTF9WQUxVRV9UT19UQVJHRVRfRE9VQkxFCglyZXN1bHQuCgkqIHJlYWwuYyAoZW5kaWFuKTogRGVsZXRlIHNpZ24gZXh0ZW5zaW9uIGNvZGUuCgkqIGNvbmZpZy9tMzJyL20zMnIubWQgKG1vdnNmX2luc24rMSk6IFJFQUxfVkFMVUVfVE9fVEFSR0VUX1NJTkdMRSBjYWxsCglyZXBsYWNlZCB3aXRoIG9wZXJhbmRfc3Vid29yZCBjYWxsLgoKV2VkIEZlYiAxMCAxNToxNjozOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGNtb3YgY29tcG91bmQgcGF0dGVybnMpOiBEZWxldGUuICBKdW1wIGNhbiBub3cKCWNyZWF0ZSB0aGUgY29ycmVjdCBjb25zdHJ1Y3RzIGluIHRoZSBmaXJzdCBwbGFjZS4KCldlZCBGZWIgMTAgMTE6MDM6MjIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoYWxwaGFldjYqKTogRml4IHR5cG8gaW4gdGFyZ2V0X2NwdV9kZWZhdWx0Mi4KCldlZCBGZWIgMTAgMTM6NTk6MTggMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogbWJjaGFyLmMgKGxvY2FsX21iX2N1cl9tYXgpOiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgTUJfQ1VSX01BWCBpcyAwLgoKV2VkIEZlYiAxMCAxMDozNTowNSAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiB0bXAtZW1zZ2lkcy5jOiBEZWxldGUuCgpXZWQgRmViIDEwIDA5OjU3OjA4IDE5OTkgIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBydGxhbmFsLmMgKGZvcl9lYWNoX3J0eCk6IEZpeCBkZWNsYXJhdGlvbiB0byBjb25mb3JtIHRvIEdOVQoJY29kaW5nIHN0YW5kYXJkcy4KCldlZCBGZWIgMTAgMTA6MDk6NDEgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDIwMC5tZCAoYnNldCwgYmNscik6IE9wZXJhbmQgMCBpcyBhIHJlYWQvd3JpdGUgb3BlcmFuZC4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmVfbm90ZV9zdG9yZSk6IFNlY29uZCBhcmd1bWVudCBpcyBubwoJbG9uZ2VyIHVudXNlZC9pZ25vcmVkLiAgSGFuZGxlIG11bHRpLXJlZ2lzdGVyIGhhcmQgcmVncy4KCShtb3ZlMmFkZF9ub3RlX3N0b3JlKTogU2ltcGxpZnkuCgpXZWQgRmViIDEwIDEwOjA1OjIzIDE5OTkgIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogY29sbGVjdDIuYyAoY29sbGVjdF9leGVjdXRlKTogUmVtb3ZlIGN5Z3dpbi1zcGVjaWZpYyBjb2RlLgoKVHVlIEZlYiAgOSAxNzoyNzoyOSAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogc3lzdGVtLmggKF8sIE5fKTogUmVtb3ZlIGR1bW15IGkxOG4gbWFjcm9zLgoJKiBwcm90b2l6ZS5jOiBNb3ZlIGluY2x1c2lvbiBvZiBpbnRsLmggdG8gYWZ0ZXIgc3lzdGVtLmguCgkqIGNleHAueTogSW5jbHVkZSBpbnRsLmguCgkqIGNleHAuYzogUmVidWlsdC4KClR1ZSBGZWIgIDkgMTY6NTI6MjIgMTk5OSAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2N5Z3dpbi5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IE5ldyBtYWNybyB0byBpZ25vcmUKCWZwaWMvZlBJQyBmb3Igd2luZG93czMyIHRhcmdldHMuCgkqIGkzODYveG0tY3lnd2luLmggKEdFVF9FTlZfUEFUSF9MSVNUKTogUmVwbGFjZSAnXFwnIGluIHdpbmRvd3MzMgoJcGF0aHMgd2l0aCAnLycuCgkqIGkzODYvbWluZ3czMi5oIChDUFBfU1BFQyk6IERlZmluZS4KCShDUFBfUFJFREVGSU5FUyk6IEFkZCBNSU5HVzMyIHZlcnNpb24gaWQuCgkqIGkzODYvY3J0ZGxsLmggKENQUF9QUkVERUZJTkVTKTogTGlrZXdpc2UuCgoJKiBNYWtlZmlsZS5pbiAoY29sbGVjdDIkKGV4ZWV4dCkpOiBEZWxldGUgcmVkdW5kYW50IGRlcGVuZGVuY3kgYW5kCglhZGQgbWlzc2luZyBleGVleHQgdG8gdGFyZ2V0LgoKCSogZ2NjLmMgKGNvbnZlcnRfZmlsZW5hbWUpOiBIYW5kbGUgbnVsbCBmaWxlbmFtZSBhcmd1bWVudC4KCldlZCBGZWIgMTAgMTU6NDY6MTAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZoZl9ub2Nsb2JiZXIsICptb3ZoaV9ub2Nsb2JiZXIpOiBVc2UKCW0gY29uc3RyYWludCBpbnN0ZWFkIG9mIFFULgoKMTk5OS0wMi0wOSAgQnJlbmRhbiBLZWhvZSAgPGJyZW5kYW5AY3lnbnVzLmNvbT4KCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IE1vdmUgSVAgdG8gYmUgZGVjbGFyZWQgaW4gZnVuY3Rpb24KCXNjb3BlLCByYXRoZXIgdGhhbiBpbmRpdmlkdWFsIGNhc2Ugc3RhdGVtZW50cy4KCjE5OTktMDItMDkgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkuY29sdW1iaWEuZWR1PgoKCSogY3BwZmlsZXMuYyAoZmluY2x1ZGUpOiBIYW5kbGUgcGlwZXMgcHJvcGVybHkgdW5kZXIgb2xkIEJTRAoJICBkZXJpdmF0aXZlcy4KCjE5OTktMDItMDkgIE1lbGlzc2EgTydOZWlsbCAgPG9uZWlsbEBjcy5zZnUuY2E+CgoJKiBzeXN0ZW0uaDogUHJvdmlkZSBmYWxsYmFjayBkZWZpbml0aW9ucyBmb3IgU19JU0NIUiwKCSAgU19JU1NPQ0ssIFNfSVNGSUZPLCBPX05PTkJMT0NLLCBhbmQgT19OT0NUVFkuCgoxOTk5LTAyLTA5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChkb19kZWZpbmUpOiBBbGxvdyByZWRlZmluaW5nIF9fU1REQ19fIHdpdGggLUQuCgoxOTk5LTAyLTA5ICBKaW0gQmxhbmR5ICA8amltYkB6d2luZ2xpLmN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IEZvciBQb3dlclBDIGNvbmZpZ3VyYXRpb25zLCBhY2NlcHQgIjQwMSIsICJlYzYwM2UiLAoJIjc0MCIsIGFuZCAiNzUwIiBhcyB2YWxpZCBhcmd1bWVudHMgdG8gLS13aXRoLWNwdS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIEZlYiAgOSAwMDowMDoxNCAxOTk5ICBNYXJrIEtldHRlbmlzICA8a2V0dGVuaXNAZ251Lm9yZz4KCgkqIGNvbmZpZ3VyZS5pbiAoaVszNDU2N104Ni0qZ251Kik6IFNldCBmbG9hdF9mb3JtYXQgdG8gaTM4Ni4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIEZlYiAgOCAyMjozODoyNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByczYwMDAubWQ6IFJldmVydCAiYWx0ZXJuYXRlIHVzZSBvZiBjcnMgaWYgY3IwIG5vdCBhdmFpbGFibGUiCglwYXRjaGVzIGZyb20gMDEtMjItMTk5OSwgMDEtMjQtMTk5OSwgMDEtMjYtMTk5OSwgYW5kIDAyLTA4LTE5OTkuCgpNb24gRmViICA4IDIxOjM2OjQ0IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBvdXRwdXQuaCAoY3VycmVudF9mdW5jdGlvbl9oYXNfY29tcHV0ZWRfanVtcCk6IFJlbmFtZSBmcm9tCgljdXJyZW50X2Z1bmN0aW9uX2FkZHJlc3Nlc19sYWJlbHMuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IExpa2V3aXNlIGZvciBhZGRyZXNzZXNfbGFiZWxzIG1lbWJlci4KCSogcnRsLmggKEZVTkNUSU9OX0ZMQUdTX0hBU19DT01QVVRFRF9KVU1QKTogTGlrZXdpc2UuCgkqIGZ1bmN0aW9uLmMgKGN1cnJlbnRfZnVuY3Rpb25faGFzX2NvbXB1dGVkX2p1bXApOiBMaWtld2lzZS4KCVVwZGF0ZSBhbGwgcmVmZXJlbmNlcy4KCSogaW50ZWdyYXRlLmMgKGZ1bmN0aW9uX2Nhbm5vdF9pbmxpbmVfcCk6CglUZXN0IGN1cnJlbnRfZnVuY3Rpb25faGFzX2NvbXB1dGVkX2p1bXAgaW5zdGVhZCBvZiBhZGRyZXNzZXNfbGFiZWxzLgoJKGluaXRpYWxpemVfZm9yX2lubGluZSk6IExpa2V3aXNlIHNhdmUuCgkob3V0cHV0X2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlIHJlc3RvcmUuCgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogRG9uJ3QgcmVmZXJlbmNlIGFkZHJlc3Nlc19sYWJlbHMgdmFyaWFibGVzLgoJKiBzdG10LmMgKGV4cGFuZF9jb21wdXRlZF9nb3RvKTogU2V0IGhhc19jb21wdXRlZF9qdW1wLgoKMTk5OS0wMi0wOCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJVGhpcyBpcyBiZWluZyBpbnN0YWxsZWQgb25seSB0byBnZXQgaXQgaW50byB0aGUgcmVwb3NpdG9yeSB0byBoZWxwCgl3aXRoIHRoZSByZXZlcnQsIHJlc3VibWl0ICYgcmV2aWV3IHByb2Nlc3MgZm9yIHRoZSBtYXNzaXZlIHJzNjAwMC5tZAoJY2hhbmdlcy4KCSogcnM2MDAwLm1kIChhbmRzaTNfaW50ZXJuYWwxIHNwbGl0dGVyKTogRG9uJ3Qgc3BsaXQgaWYgdXNpbmcgdGhlCglybHdpbm0gaW5zdHJ1Y3Rpb24uCgkoYW5kZGkzX2ludGVybmFsMSk6IExpa2V3aXNlLgoJKGFuZHNpM19pbnRlcm5hbHsyLDN9KTogQ29ycmVjdCBzb21lIGluc24gbGVuZ3Rocy4KCShhbmRkaTMqKTogUmVzdG9yZSBtaXNzaW5nIFRBUkdFVF9QT1dFUlBDNjQsIGFuZCBkb24ndCBlbWl0IG9sZAoJbW5lbW9uaWNzLgoKTW9uIEZlYiAgOCAyMTozMTowNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChyZWdfc2luZ2xlX3VzYWdlKTogTmV3IGZpbGUtc2NvcGUgdmFyaWFibGUgLi4uCgkoc2Nhbl9sb29wKTogLi4uIG1vdmVkIG91dCBvZiBoZXJlLiAgQWx3YXlzIGluaXRpYWxpemUuCglUZXN0IGxvb3BfaGFzX2NhbGwgaW5zdGVhZCBvZiByZWdfc2luZ2xlX3VzYWdlIG5vdCB6ZXJvLgoJRnJlZSByZWdfc2luZ2xlX3VzYWdlIGFmdGVyIHN0cmVuZ3RoIHJlZHVjdGlvbi4KCShjb3VudF9sb29wX3JlZ3Nfc2V0KTogQXNzdW1lIHNpbmdsZV91c2FnZSBub24temVyby4KCShjb21iaW5lX2dpdnNfdXNlZF9ieV9vdGhlcik6IFRlc3QgcmVnX3NpbmdsZV91c2FnZS4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IFJlbW92ZSByZWdfc2luZ2xlX3VzYWdlCglhcyBhIHBhcmFtZXRlci4gIEFzc3VtZSBub24temVyby4KCjE5OTktMDItMDggIFphY2sgV2VpbmJlcmcgIDx6YWNrQG1pZG5pdGUuZWMucmhuby5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYyAoc3BlY2lhbF9zeW1ib2wpOiBSZXdyaXRlLiAgRG9uJ3QgY29weSB0aGluZ3MKCSAgbXVsdGlwbGUgdGltZXMuICBIYW5kbGUgX19TVERDX18gc3BlY2lhbGx5LiAgVF9DT05TVAoJICBpbmRpY2F0ZXMgYSBjb25zdGFudCAvc3RyaW5nLy4gIERvbid0IGhhbmRsZSBUXypfVFlQRSBhbmQKCSAgVF9TUEVDX0RFRklORUQuICBVc2UgY3BwX2J1Zl9saW5lX2FuZF9jb2wgaW5zdGVhZCBvZgoJICBhZGp1c3RfcG9zaXRpb24uICBEZXRlcm1pbmUgdGhlIGZpbGUgYnVmZmVyIG9ubHkgaWYgbmVlZGVkLgoJICAoaW5pdGlhbGl6ZV9idWlsdGlucyk6IEhhbmRsZSBfX1NJWkVfVFlQRV9fLAoJICBfX1BUUkRJRkZfVFlQRV9fLCBfX1dDSEFSX1RZUEVfXywgX19VU0VSX0xBQkVMX1BSRUZJWF9fLCBhbmQKCSAgX19SRUdJU1RFUl9QUkVGSVhfXyB3aXRoIFRfQ09OU1Qgc3BlY2lhbCBoYXNodGFiIGVudHJpZXMuCgkgIERvbid0IHByb3ZpZGUgX19PQkpDX187IHRoZSBkcml2ZXIgZG9lcyB0aGF0LiAgUHJvdmlkZQoJICBfX1NURENfVkVSU0lPTl9fLCB1c2luZyBUX0NPTlNULiAgVXNlIFRfU1REQyBmb3IKCSAgX19TVERDX18uICBHaXZlIGluc3RhbGwgdGhlIGxlbmd0aCBvZiBhbGwgc3ltYm9scyBkZWZpbmVkLgoJICAoZXZhbF9pZl9leHByZXNzaW9uKTogRHJvcCBjb2RlIHRvIGluc2VydCBhbmQgcmVtb3ZlIHRoZQoJICAiZGVmaW5lZCIgc3BlY2lhbCBzeW1ib2wuCgoJKiBjcHBsaWIuaDogUmVtb3ZlIFNFTEZfRElSX0RVTU1ZIChubyBsb25nZXIgdXNlZCkuICBSZW1vdmUKCSAgVF8qX1RZUEUgYW5kIFRfU1BFQ19ERUZJTkVEIGZyb20gZW51bSBub2RlX3R5cGU7IGFkZCBUX1NUREMuCgoJKiBjcHBoYXNoLmMgKGluc3RhbGwpOiBEcm9wIHRoZSBgaXZhbHVlJyBwYXJhbWV0ZXIuICBDb25zdGlmeQoJICB0aGUgYHZhbHVlJyBwYXJhbWV0ZXIuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKiBjcHBoYXNoLmggKGluc3RhbGwpOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoLgoJICAodW5pb24gaGFzaHZhbCk6IFJlbW92ZSBgaXZhbCcgbWVtYmVyLgoJKiBjcHBleHAuYyAoY3BwX2xleCk6IEhhbmRsZSBgZGVmaW5lZCcgaGVyZS4KCk1vbiBGZWIgIDggMTc6Mjk6NDIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuaCAoRVhUUkFfQ09OU1RSQUlOVCk6IEZpeCBjb21tZW50LgoKTW9uIEZlYiAgOCAxODo1Nzo0NSAxOTk5ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGMtdHlwZWNrLmMgKGNoZWNrX2luaXRfdHlwZV9iaXRmaWVsZHMpOiBVc2Ugbm9uaW5jcmVtZW50YWwKCWluaXRpYWxpemF0aW9uIG9mIHVuaW9ucyB3aG9zZSBmaXJzdCBtZW1iZXIgaXMgYSBiaXRmaWVsZC4KCVJlbW92ZSB1bm5lY2Vzc2FyeSBjb2RlIGZvciBjaGVja2luZyB0aGUgZGVjbGFyYXRpb24gbW9kZQoJYWZ0ZXIgREVDTF9DX0JJVF9GSUVMRC4KCgkqIHZhcmFzbS5jIChvdXRwdXRfY29uc3RydWN0b3IpOiBBZGRpdGlvbmFsIGNvbW1lbnQgYWJvdXQgdGhlCgljb25zdHJ1Y3RvciBvZiBiaXRmaWVsZCB1bmlvbiBpbml0aWFsaXphdGlvbi4KClR1ZSBGZWIgIDkgMTE6NTU6MDQgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZoaV9zdGlrKTogTmV3IHBhdHRlcm4uCgkobW92aGkpOiBBbGxvdyBzb21lIGltbWVkaWF0ZSBjb25zdGFudHMgdG8gYmUgZGlyZWN0bHkKCXN0b3JlZCBpbiBtZW1vcnkuCgpUdWUgRmViICA5IDExOjM0OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChhbGwgY2FsbCBwYXR0ZXJucyk6IEFkZCBjb25zdHJhaW50cyAiVXIiLgoJKGNhbGwsIGNhbGxfdmFsdWUpOiBGb3JjZSBhZGRyZXNzIGludG8gYSByZWdpc3RlciBpZiBub3QgdmFsaWQKCWZvciBhIGNhbGwgaW5zdHJ1Y3Rpb24uCgkobG9hZF9pbW1lZF9hZGRyZXNzKTogRW1pdCBhIFVTRSBvZiB0aGUgU1lNQk9MX1JFRiB0aGF0IGlzCglmb3JjZWQgaW50byBtZW1vcnkuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9wcmludF9vcGVyYW5kKTogRml4ICdDJyBhbmQgJ1UnIG1vZGlmaWVycy4KClR1ZSBGZWIgIDkgMTE6MDg6NDEgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoY2FsbF9hZGRyZXNzX29wZXJhbmQsIHN5bWJvbGljX2FkZHJlc3Nfb3BlcmFuZCk6CglSZW5hbWUgZnJvbSBjYWxsX29wZXJhbmQgYW5kIHN5bWJvbGljX29wZXJhbmQgcmVzcGVjdGl2ZWx5LiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChjYWxsX2FkZHJlc3Nfb3BlcmFuZCwgc3ltYm9saWNfYWRkcmVzc19vcGVyYW5kKToKCUxpa2V3aXNlLgoJKiBjb25maWcvYzR4L2M0eC5oIChjYWxsX2FkZHJlc3Nfb3BlcmFuZCwgc3ltYm9saWNfYWRkcmVzc19vcGVyYW5kKToKCUxpa2V3aXNlLgoJKFBSRURJQ0FURV9DT0RFUyk6IEFsbG93IENPTlNULCBMQUJFTF9SRUYgZm9yIGNhbGxfYWRkcmVzc19vcGVyYW5kLgoKVHVlIEZlYiAgOSAxMDo1MjoyNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfbGVnaXRpbWl6ZV9hZGRyZXNzKTogRG9uJ3QgZ2VuZXJhdGUgYQoJTE9fU1VNIGFkZHJlc3MgZm9yIEhJbW9kZSBvciBIRm1vZGUgYnV0IGluc3RlYWQgZm9yY2UgYWRkcmVzcyBpbnRvCglhIHJlZ2lzdGVyIHNvIHRoYXQgaXQgaXMgb2Zmc2V0dGFibGUuCgkoYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IEhhbmRsZSBMT19TVU0gaW1tZWRpYXRlIGFkZHJlc3MuCgpUdWUgRmViICA5IDEwOjQ2OjQyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9hZGRyZXNzX2Nvc3QpOiBSZXR1cm4gY29zdCBvZiAxIGZvcgoJUkVHK1JFRyBhZGRyZXNzaW5nIGlmIHN0cmVuZ3RoIHJlZHVjdGlvbiBlbmFibGVkLgoKVHVlIEZlYiAgOSAxMDoxMDozMSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L3QtYzR4ICAoTElCR0NDMl9DRkxBR1MpOiBEZWxldGUuCgkoVEFSR0VUX0xJQkdDQzJfQ0ZMQUdTKTogRGVmaW5lLgoKMTk5OS0wMi0wOCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy92ODUwL3Y4NTAubWQ6IFJlcGxhY2UgXFxuXFx0IHdpdGggXFw7CgoJKiBjb25maWcvdjg1MC92ODUwLm1kOiBFbmZvcmNlIFRBUkdFVF9MT05HX0NBTExTIG9wdGlvbi4KCSogY29uZmlnL3Y4NTAvdjg1MC5jIChjb25zdHJ1Y3RfcmVzdG9yZV9qciwgY29uc3RydWN0X3NhdmVfamFybCk6CglFbmZvcmNlIFRBUkdFVF9MT05HX0NBTExTIG9wdGlvbi4KCk1vbiBGZWIgIDggMTE6NDM6MDcgMTk5OSAgRG9ubiBUZXJyeSAgPGRvbm5AaW50ZXJpeC5jb20+CgoJKiByZWFsLmMgKFBVVF9SRUFMKSBbWEZtb2RlXTogWmVybyB0aGUgYmFsYW5jZSBvZiB0aGUgc3RydWN0dXJlLgoKTW9uIEZlYiAgOCAxMTozNzoyNCAxOTk5ICBNYXJjIEVzcGllICAoZXNwaWVAY3ZzLm9wZW5ic2Qub3JnKQoKCSogbTg4ay90LWx1bmEtZ2FzOiBSZW1vdmUgYmFzaCBkZXBlbmRlbmN5LgoKTW9uIEZlYiAgOCAxMTozNDo0NCAxOTk5ICBHcmFoYW0gIDxncmFoYW1zQHJjcC5jby51az4KCgkqIGNvbGxlY3QyLmMgKHhyZWFsbG9jKTogRml4IHR5cG8gaW4gbGFzdCBjaGFuZ2UuCgpNb24gRmViICA4IDA5OjEzOjM4IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIEZlYiAgNyAyMjoxODo0MiAxOTk5ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxpcGVAdXNhLm5ldD4KCgkqIHRyZWUuaCAoVFlQRV9DSEVDSyk6IE1ha2UgaXQgY2xlYXIgdG8gdGhlIHByZXByb2Nlc3NvcgoJdGhhdCB3ZSBkbyBub3Qgd2FudCBtYWNybyByZXBsYWNlbWVudCB3aXRoaW4gYSBjaGFyYWN0ZXIgY29uc3RhbnQuCgkoVFlQRV9DSEVDSzEpOiBMaWtld2lzZS4KClN1biBGZWIgIDcgMTU6Mzc6MTAgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdHJlZS5oIChERUNMX1ApOiBOZXcgbWFjcm8uCgpTdW4gRmViICA3IDAxOjE1OjA0IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IEZlYiAgNiAxODoxNDo0NiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMzAwLm1kIChyZWxvYWRfaW5zaSk6IERvIG5vdCBlYXJseWNsb2JiZXIgdGhlIG91dHB1dCBvcGVyYW5kLgoKCSogUkVBRE1FLmc3NywgZ2NjLmMsIGdjYy50ZXhpOiBVcGRhdGUgZW1haWwgYWRkcmVzc2VzLgoJKiBpbnZva2UudGV4aSBzeXN0ZW0uaDogTGlrZXdpc2UuCgpTYXQgRmViICA2IDExOjA0OjA4IDE5OTkgIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IEFmdGVyIGV4cHJlc3NfZnJvbSwgY2FsbCByZXBsYWNlX3J0eAoJdG8gY29udmVydCBkZXN0X3JlZyB0byBuZXdfcmVnLgoKU2F0IEZlYiAgNiAxMDozMTozNSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOiBCZSBtb3JlIGNhcmVmdWwgd2l0aAoJU1RSSUNUX0xPV19QQVJULCBaRVJPX0VYVFJBQ1QgYW5kIFNJR05fRVhUUkFDVC4KCShtb3ZlMmFkZF9ub3RlX3N0b3JlKTogTGlrZXdpc2UuCgpTYXQgRmViICA2IDEwOjE4OjAxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfYW5kX3ByZXNjYW4pOiBDYXN0IHRoZSByZXN1bHQgb2YgYHhyZWFsbG9jJyB0bwoJVV9DSEFSKiB3aGVuIGFzc2lnbmluZyB0byBvbmUuICBFbnN1cmUgdGhlIHZhbHVlcyBvZiBhID86IG9wZXJhdG9yCgloYXZlIHRoZSBzYW1lIHR5cGUuCgoJKiBjcHBpbml0LmMgKGluaXRpYWxpemVfY2hhcl9zeW50YXgpOiBVc2UgSyZSIGZ1bmN0aW9uIGRlZmluaXRpb24uCgpTYXQgRmViICA2IDExOjE3OjAzIDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgoKCVN1cHBvcnQgZm9yIEFSTTkKCSogY29uZmlnL2FybS9hcm0uYyAoYWxsX3Byb2NzKTogQWRkIGFybTkgYW5kIGFybTl0ZG1pLgoJKiBjb25maWcvYXJtL2FybS5oICgoVEFSR0VUX0NQVV9hcm05LCBUQVJHRVRfQ1BVRF9hcm05dGRtaSk6IERlZmluZS4KCShUQVJHRVRfQ1BVX0RFRkFVTFQpOiBSZXdvcmsgdG8gc3VwcG9ydCBBUk05LgoJKENQUF9DUFVfQVJDSF9TUEVDKTogTGlrZXdpc2UuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL2FybS5tZCAoYXR0ciBjcHUpOiBBZGQgYXJtOS4KCglHZW5lcmFsIHNjaGVkdWxpbmcgY2hhbmdlcwoJKiBjb25maWcvYXJtL2FybS5jIChNQVhfSU5TTlNfU0tJUFBFRCk6IERlbGV0ZS4KCShtYXhfaW5zbnNfc2tpcHBlZCk6IE5ldyB2YXJpYWJsZS4KCShhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IElmIGdlbmVyYXRpbmcgaGFyZCBmbG9hdGluZyBwb2ludCBjb2RlIGZvcgoJdGhlIEZQQSwgZW1pdCBjb2RlIGZvciB2ZXJzaW9uIDMuCglXaGVuIG9wdGltaXppbmcgZm9yIHNwYWNlLCBkb24ndCBzeW50aGVzaXplIGNvbnN0YW50cy4KCVJld29yZCBzZXZlcmFsIGZsYWdzIGJhc2VkIG9uIHRoZSByZXF1ZXN0ZWQgcHJvY2Vzc29yIGFuZCBvcHRpbWl6YXRpb24KCWxldmVsLgoJKHVzZV9yZXR1cm5faW5zbik6IE5ldyBhcmd1bWVudCBpc2NvbmQsIGFsbCBjYWxsZXJzIGNoYW5nZWQuICBEb24ndAoJdXNlIGEgcmV0dXJuIGluc24gaWYgaXQgd2lsbCBiZSBjb25kaXRpb25hbCBhbmQgdGhhdCB3b3VsZCBiZQoJZXhwZW5zaXZlOyBlZyBvbiBTdHJvbmdBUk0uCgkoYXJtX2FkanVzdF9jb3N0KTogQW50aS0gYW5kIG91dHB1dC0gZGVwZW5kZW5jaWVzIG5vcm1hbGx5IGhhdmUgbm8KCWNvc3QuCgkobG9hZF9tdWx0aXBsZV9zZXF1ZW5jZSk6IE5ld2VyIEFSTXMgZG9uJ3QgYmVuZWZpdCBmcm9tIGxkbSBpZgoJdGhlIHNlcXVlbmNlIGlzIHNob3J0LgoJKGZpbmFsX3ByZXNjYW5faW5zbik6IFVzZSBtYXhfaW5zbnNfc2tpcHBlZCBpbnN0ZWFkIG9mCglNQVhfSU5TTlNfU0tJUFBFRC4gIE5vdGUgd2hldGhlciB3ZSB3aWxsIG1ha2UgYSByZXR1cm4gaW5zdHJ1Y3Rpb24KCWNvbmRpdGlvbmFsLCBhbmQgYXZpb2QgdGhpcyBpZiBpdCB3b3VsZCBiZSBleHBlbnNpdmUuCgkqIGNvbmZpZy9hcm0vYXJtLm1kIChzY2hlZHVsaW5nIGF0dHJpYnV0ZXMgYW5kIGZ1bmN0aW9uIHVuaXRzKToKCVJld3JpdGUgdG8gYmV0dGVyIGRlc2NyaWJlIEFSTTgsIDkgYW5kIFN0cm9uZ0FSTS4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kICgqbW92aGlfaW5zbl9saXR0bGVlbmQpOiBNYWtlIG9wMCBwcmVkaWNhdGUKCXNfcmVnaXN0ZXJfb3BlcmFuZC4KCSgqaWZjb21wYXJlX3BsdXNfbW92ZSk6IFVzZSBhcm1fcmhzX29wZXJhbmQgaW4gcGxhY2Ugb2YKCWFybV9yaHNtX29wZXJhbmQuICBSZXdvcmsgY29uc3RyYWludHMuCgkoKmlmX3BsdXNfbW92ZSk6IExpa2V3aXNlLgoJKCppZmNvbXBhcmVfbW92ZV9wbHVzKTogTGlrZXdpc2UuCgkoKmlmX21vdmVfcGx1cyk6IExpa2V3aXNlLgoJKCppZmNvbXByZV9hcml0aF9tb3ZlKTogTGlrZXdpc2UuCgkoKmlmX2FyaXRoX21vdmUpOiBMaWtld2lzZS4KCSgqaWZjb21wYXJlX21vdmVfYXJpdGgpOiBMaWtld2lzZS4KCSgqaWZfbW92ZV9hcml0aCk6IExpa2V3aXNlLgoKCSogY29uZmlnL2FybS94bS1uZXRic2QuaDogRG9uJ3QgaW5jbHVkZSBhcm0veG0tYXJtLmguCgoxOTk5LTAyLTA1ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQSBzdG9yZSB1c2luZyBhbiBhZGRyZXNzIGdpdiBmb3Igd2hpY2gKCXdlIGhhdmUgbm8gbGlmZSBpbmZvcm1hdGlvbiBpcyBub3QgcmV2ZXJzaWJsZS4KCkZyaSBGZWIgIDUgMTc6MDg6MDEgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoZml4dXBfdmFyX3JlZnMpOiBTY2FuIGNhdGNoX2NsYXVzZXMgdG9vLgoKRnJpIEZlYiAgNSAxMTo0OTo0OSAxOTk5ICBCZW5qYW1pbiBLb3NuaWsgIDxia296QGxvb255LmN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBGaXggcmVzZXJ2ZWQgc3BhY2UgZm9yIGluaXRfcHJpb3JpdHkuCgkqIHRyZWUuaCAoTUFYX1JFU0VSVkVEX0lOSVRfUFJJT1JJVFkpOiBOZXcgbWFjcm8uCgpGcmkgRmViICA1IDEyOjM3OjA1IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogQ2xlYXIgbm90X2V2ZXJ5X2l0ZXJhdGlvbiB3aGVuCglwYXNzaW5nIHRoZSBOT1RFX0lOU05fTE9PUF9DT05UIG5vdGUuCgoJKiBoYWlmYS1zY2hlZC5jIChhZGRfZGVwZW5kZW5jZSk6IERvIG5vdCBhZGQgYSBkZXBlbmRlbmN5IG9uIGEKCW5vdGUuCgpGcmkgRmViICA1IDEwOjU1OjQzIDE5OTkgIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChzcGxpdF9ibG9ja19pbnNucyk6IE9ubHkgY2FsbCB1cGRhdGVfZmxvd19pbmZvIGlmCglpbnN0cnVjdGlvbiBzY2hlZHVsaW5nIGlzIGVuYWJsZWQuCgoxOTk5LTAyLTA1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIE1ha2VmaWxlLmluIChnZW4tcHJvdG9zKTogVXNlIGxpYmNwcC5hIGxpa2UgZXZlcnlvbmUgZWxzZS4KCkZyaSBGZWIgIDUgMDc6MDk6MjkgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoZmlyc3RfbG9vcF9zdG9yZV9pbnNuKTogTmV3IGZpbGUtc2NvcGUgdmFyaWFibGUuCgkocHJlc2Nhbl9sb29wKTogU2V0IGl0LgoJKGNoZWNrX2RicmFfbG9vcCk6IENoZWNrIGlmIGEgc3RvcmUgZGVwZW5kcyBvbiBhIHJlZ2lzdGVyCgl0aGF0IGlzIHNldCBhZnRlciB0aGUgc3RvcmUuCgpGcmkgRmViICA1IDA2OjU1OjE1IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiB1bnJvbGwuYyAoZW50aXJlIGZpbGUpOiBSZW1vdmUgdGFicyAvIHNwYWNlcyBhdCBlbmQgb2YgbGluZXMuCglSZXBsYWNlIHNwYWNlcyB3aXRoIHRhYnMgd2hlcmUgYXBwcm9wcmlhdGUuCgpUaHUgRmViICA0IDE1OjEyOjQxIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHNjYW5fbG9vcCk6IE5ldyBhcmd1bWVudCBsb29wX2NvbnQuICBDaGFuZ2VkIGNhbGxlci4KCShzdHJlbmd0aF9yZWR1Y2UpOiBOZXcgYXJndW1lbnQgbG9vcF9jb250LiBDaGFuZ2VkIGNhbGxlci4KCUJlZm9yZSBjbGVhcmluZyBub3RfZXZlcnlfaXRlcmF0aW9uIGFmdGVyIGEgbGFiZWwsIGNoZWNrIGlmCgl3ZSBhcmUgbm90IGFscmVhZHkgcGFzdCBMT09QX0NPTlQuCgoxOTk5LTAyLTA0ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGVycm9yLmMgKGNwcF9wcmludF9jb250YWluaW5nX2ZpbGVzKTogRml4IGZvcm1hdHRpbmcKCWJ1ZyBpbmR1Y2VkIGJ5IG1lcmdlLgoKMTk5OS0wMi0wNCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChpbml0aWFsaXplX2NoYXJfc3ludGF4KTogTW92ZSB0byBjcHBpbml0LmMuCgkoY3BwX2RlZmluZSk6IFJlbW92ZSByZWR1bmRhbnQgc3ludGF4IGNoZWNrcy4KCShtYWtlX2Fzc2VydGlvbik6IFJlbmFtZSBjcHBfYXNzZXJ0LCByZW1vdmUgcmVkdW5kYW50IHN5bnRheAoJY2hlY2tzLCBleHBvcnQuCgkoY3BwX29wdGlvbnNfaW5pdCk6IERvbid0IGluaXQgdGhpbmdzIHRvIHplcm8gdHdpY2UuCgkoY3BwX2V4cGFuZF90b19idWZmZXIpOiBVc2UgbWVtY3B5LCBub3QgYSBjaGFyLWJ5LWNoYXIgbG9vcC4KCShkb19pbmNsdWRlKTogS2lsbCBleGNlc3NpdmVseSB2ZXJib3NlICNpbXBvcnQgd2FybmluZyB0aGF0CglzbnVjayBiYWNrIGluIGluIHRoZSBnY2MyIG1lcmdlLgoJKGNvbnZlcnRfc3RyaW5nKTogUmVtb3ZlZC4KCShkb19saW5lKTogUmV3cml0ZSB3aXRoIHNpbXBsZSBsYXN0LW5hbWUtdXNlZCBjYWNoZSBpbnN0ZWFkIG9mCglwcml2YXRlIGhhc2h0YWJsZS4KCShjcHBfc3RhcnRfcmVhZCk6IENhbGwgaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCBoZXJlLCBub3QuLi4KCShjcHBfcmVhZGVyX2luaXQpOiAuLi5oZXJlLgoJKGNwcF9oYW5kbGVfb3B0aW9ucyk6IFN1cHBvcnQgdGhlIC1zdGQgc3dpdGNoLgoJKiBjcHBsaWIuaCAoY3BwX2J1ZmZlcik6IEFkZCBsYXN0X25vbWluYWxfZm5hbWUgbWVtYmVyLgoJKGNwcF9vcHRpb25zKTogQWRkIGM5eCBmbGFnLgoJRGVjbGFyZSBhbGwgdGhlIGlzXyogdGFibGVzIGFuZCB0cmlncmFwaCB0YWJsZSBoZXJlLCBhcyBjb25zdC4KCVByb3RvdHlwZSBjcHBfYXNzZXJ0IGFuZCBpbml0aWFsaXplX2NoYXJfc3ludGF4LgoJKiBjcHBpbml0LmM6IE5ldyBmaWxlLgoJKiBjcHBmaWxlcy5jIChyZWFkX2FuZF9wcmVzY2FuKTogT3B0aW1pemUuCgkqIE1ha2VmaWxlLmluIChMSUJDUFBfT0JKUyk6IEFkZCBjcHBpbml0Lm8uCgpUaHUgRmViICA0IDEwOjQ2OjMwIDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogY29uZmlnL21pcHMvbWlwcy5tZCAoW3VdZGl2bW9kc2k0LFt1XWRpdm1vZGRpNCxbdV1kaXZzaTMsW3VdZGl2ZGkzLAoJW3VdbW9kc2kzLFt1XW1vZGRpMykgOiBEb24ndCBjb3B5IHRoZSAiemVybyIgYXJndW1lbnQgdG8gYSByZWdpc3RlcgoJYmVmb3JlIGNhbGxpbmcgZ2VuX2Rpdl90cmFwLgoKV2VkIEZlYiAgMyAyMTo1NjoyNyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGExLjEtKi0qLCBocHBhMiotKik6IFVzZSBzeW1ib2xpYyB2YWx1ZSByYXRoZXIKCXRoYW4gbnVtZXJpYyB2YWx1ZSBmb3IgdGFyZ2V0X2NwdV9kZWZhdWx0Li4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKV2VkIEZlYiAgMyAyMTo1NTo1NiAxOTk5ICBNYXJjIEVzcGllICA8TWFyYy5Fc3BpZUBsaWFmYS5qdXNzaWV1LmZyPgoKCSogTWFrZWZpbGUuaW4gKHhnY2MkKGV4ZWV4dCkpOiBSZW1vdmUgY2hvb3NlLXRlbXAsIHBleGVjdXRlIGFuZAoJbWtzdGVtcC4gIEdldCB0aGVtIGZyb20gbGliaWJlcnR5LgoJKENPTExFQ1QyX09CSlMpOiBTaW1pbGFybHkgZm9yIGNob29zZS10ZW1wLCBjcGx1cy1kZW0gYW5kIG1rc3RlbXAuCgkoUFJPVE9fT0JKUyk6IFNpbWlsYXJseSBmb3IgY2hvb3NlLXRlbXAsIGdldG9wdCwgZ2V0b3B0MSBhbmQgcGV4ZWN1dGUuCgkoY3BsdXMtZGVtLm8sIHBleGVjdXRlLm8sIGNob29zZS10ZW1wLm8pOiBSZW1vdmUgYnVpbGQgcnVsZXMuCgkobWtzdGVtcC5vLCBnZXRvcHQxLm8sIGdldG9wdC5vKTogTGlrZXdpc2UuCgoJKiBwYS1nYXMuaCAoVEFSR0VUX0RFRkFVTFQpOiBVc2Ugc3ltYm9saWMgdmFsdWVzIHJhdGhlciB0aGFuIG51bWVyaWMKCXZhbHVlcy4KCSogcGEtaHB1eC5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KCSogcGEtaHB1eDEwLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgoJKiBwYS1ocHV4OS5oIChMSU5LX1NQRUMpOiBMaWtld2lzZS4KCSogcGEtb3NmLmggKExJTktfU1BFQyk6IExpa2V3aXNlLgoJKiBwYS1wcm8uaCAoVEFSR0VUX0RFRkFVTFQpOiBMaWtld2lzZS4KCSogcGExLmggKFRBUkdFVF9ERUZBVUxUKTogTGlrZXdpc2UuCgkqIHBhLmggKE1BU0tfKik6IE5ldyBkZWZpbmVzLgoJKFRBUkdFVF8qKTogVXNlIHN5bWJvbGljIHZhbHVlcyByYXRoZXIgdGhhbiBudW1lcmljIHZhbHVlcy4KCShUQVJHRVRfU1dJVENIRVMpOiBMaWtld2lzZS4KCShUQVJHRVRfREVGQVVMVCk6IExpa2V3aXNlLgoJKENQUF9TUEVDKTogTGlrZXdpc2UuCgpXZWQgRmViICAzIDIxOjA3OjM4IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NzZV9yZWdzXzEpOiBVbmRvIEphbiAxNiBwYXRjaC4KCSogcmVsb2FkLmMgKGZpbmRfcmV1c2FibGVfcmVsb2FkKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglwdXNoX3JlbG9hZC4gIEFkZCBjb2RlIHRvIHZlcmlmeSB0aGF0IG5vbmUgb2YgdGhlIGludm9sdmVkCglvdXRwdXRzIGFyZSBzdWJqZWN0IHRvIGVhcmx5Y2xvYmJlcnMuCgkocHVzaF9yZWxvYWQpOiBCcmVhayBvdXQgbmV3IGZ1bmN0aW9uIGZpbmRfcmV1c2FibGVfcmVsb2FkLgoJRGVsZXRlICJyZWdpc3RlciIga2V5d29yZCBmb3IgSU4sIE9VVCBhcmdzLgoKV2VkIEZlYiAgMyAxNTo1MTowNCAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMuYyAodHJ1ZV9yZWdfb3JfMF9vcGVyYW5kKSA6IE5ldyBmdW5jdGlvbi4KCSogY29uZmlnL21pcHMvbWlwcy5oIChQUkVESUNBVEVfQ09ERVMpOiBBZGQgdHJ1ZV9yZWdfb3JfMF9vcGVyYW5kLgoJKiBjb25maWcvbWlwcy9taXBzLm1kIChkaXZfdHJhcCxkaXZfdHJhcF9ub3JtYWwsZGl2X3RyYXBfbWlwczE2KToKCVVzZSB0cnVlX3JlZ19vcl8wX29wZXJhbmQgZm9yIGRpdl90cmFwLgoKV2VkIEZlYiAgMyAyMDo0NDo1OSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5oIChleHByZXNzX2Zyb20pOiBEZWNsYXJlLgoJKHN0cnVjdCBpbmR1Y3Rpb24pOiBSZXBsYWNlIGRlcml2ZWQgZmxhZyB3aXRoIGRlcml2ZWRfZnJvbSBwb2ludGVyLgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSwgcmVjb3JkX2dpdiwgcmVjb21iaW5lX2dpdnMpOiBMaWtld2lzZS4KCShleHByZXNzX2Zyb20pOiBObyBsb25nZXIgc3RhdGljLgoJKiB1bnJvbGwuYyAoZmluZF9zcGxpdHRhYmxlX2dpdnMpOiBSZXBsYWNlIGRlcml2ZWQgd2l0aCBkZXJpdmVkX2Zyb20uCglXaGVuIHByb2Nlc3NpbmcgYW4gYWRkcmVzcyBnaXYgd2l0aCB3aGljaCBhbm90aGVyIGdpdiBoYXMgYmVlbgoJY29tYmluZWQgdGhhdCBoYXMgYWxzbyBiZWVuIGRlcml2ZWQgZnJvbSBhIHRoaXJkIGdpdiwgaGFuZGxlIGxpa2UKCWhhdmluZyBjb21iaW5lZCB3aXRoIHRoZSB0aGlyZCBnaXYuCglTZXQgc3BsaXR0YWJsZV9yZWdzX3VwZGF0ZXMgYXBwcm9wcmlhdGVseSBmb3IgZGVyaXZlZCBnaXZzLgoKV2VkIEZlYiAgMyAxNToyNjo1OCAxOTk5ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKGRpdl90cmFwX21pcHMxNik6IFJlbW92ZSBub3AncyBhZnRlciBicmFuY2hlcy4KCldlZCBGZWIgIDMgMTE6NTY6MjMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYyAoaW5zbl9zZXRzX2FuZF9yZWZzX2FyZV9kZWxheWVkKTogTmV3IGZ1bmN0aW9uLgoJKiBwYS5oIChJTlNOX1NFVFNfQVJFX0RFTEFZRUQpOiBVc2UgaXQuCgkoSU5TTl9SRUZFUkVOQ0VTX0FSRV9ERUxBWUVEKTogTGlrZXdpc2UuCgpXZWQgRmViICAzIDA2OjI0OjQ5IDE5OTkgIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogY29uZmlnL2FybS90LWFybS1lbGYgKExJQkdDQzJfQ0ZMQUdTKTogRGVsZXRlLgoJKiBjb25maWcvYXJtL3QtbGludXggKExJQkdDQzJfQ0ZMQUdTKTogRGVsZXRlLgoJKFRBUkdFVF9MSUJHQ0MyX0NGTEFHUyk6IERlZmluZS4KCShMSUJHQ0MyX0RFQlVHX0NGTEFHUyk6IERlZmluZS4KCSogY29uZmlnL2FybS90LW5ldGJzZDogTGlrZXdpc2UuCgkqIGNvbmZpZy9hcm0vdC1zZW1pOiBMaWtld2lzZS4KCSogY29uZmlnL2FybS90LXNlbWlhb2Y6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL3QtcmlzY2l4OiBMaWtld2lzZS4KCldlZCBGZWIgIDMgMTA6NTk6MDcgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5jIChwcmludF9vcGVyYW5kX2FkZHJlc3MpOiBXaGVuIHByaW50aW5nIGEKCVNZTUJPTF9SRUYgdGhhdCBlbmRzIGluIGAuPGxldHRlcj4nIHB1dCBwYXJlbnRoZXNlcyBhcm91bmQgaXQuCgpUdWUgRmViICAyIDIzOjM4OjM1IDE5OTkgIERhdmlkIE8nQnJpZW4gIDxvYnJpZW5ARnJlZUJTRC5vcmc+CgoJKiBpMzg2L2ZyZWVic2QqLmggbm93IGFsbG93cyAnJCcgaW4gbGFiZWwgbmFtZXMgYW5kIGRvZXMgbm90IHVzZSB0aGUKCVBDQyBzdHJ1Y3QgcmV0dXJuIG1ldGhvZC4KClR1ZSBGZWIgIDIgMjI6Mzg6MjMgMTk5OSAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW46IENoYW5nZSBhbGwgdXNlcyBvZiBBUiB0byBBUl9GT1JfVEFSR0VULiAgQ2hhbmdlIGFsbCB1c2VzCglvZiBIT1NUX0FSIHRvIEFSLiAgTGlrZXdpc2UgZm9yIEFSX0ZMQUdTLCBSQU5MSUIsIGFuZCBSQU5MSUJfVEVTVC4KCShSQU5MSUJfVEVTVCk6IFRlc3QgdG8gc2VlIGlmIHJhbmxpYiBleGlzdHMuICBPbmx5IHRlc3QgYWJzb2x1dGUgZmlsZQoJbmFtZXMgaWYgaG9zdCA9PSB0YXJnZXQuCgkoSE9TVF9BUiwgSE9TVF9BUl9GTEFHUywgSE9TVF9SQU5MSUIsIEhPU1RfUkFOTElCX1RFU1QpOiBEZWxldGUuCgkoQVJfRkxBR1NfRk9SX1RBUkdFVCk6IFJlbmFtZWQgZnJvbSBBUl9GT1JfVEFSR0VUX0ZMQUdTLgoJKEFSLCBBUl9GTEFHUywgT0xEQVIsIE9MREFSX0ZMQUdTLCBSQU5MSUIsIFJBTkxJQl9URVNUKTogRGVsZXRlIHJ1bGVzCglzZXR0aW5nIHRoZW0gdG8gKl9GT1JfVEFSR0VULgoJKiBjcm9zcy1tYWtlIChBUiwgQVJfRkxBR1MsIE9MREFSLCBPTERBUl9GTEFHUywgUkFOTElCLCBSQU5MSUJfVEVTVCk6CglEZWxldGUuCgpUdWUgRmViICAyIDIyOjM4OjE5IDE5OTkgIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogdG9wbGV2LmggKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKHJlYWRfaW50ZWdyYWxfcGFyYW1ldGVyKTogTmV3IGZ1bmN0aW9uLgoKRnJpIEphbiAyOSAyMTowMDo1NiAxOTk5ICBCb2IgTWFuc29uICA8bWFuc29uQGNoYXJtZWQuY3lnbnVzLmNvbT4KCgkqIHJlc291cmNlLmMsIHJlc291cmNlLmg6IE5ldyBmaWxlcy4KCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgaXQuCgoJKiBoYWlmYS1zY2hlZC5jIChyZWdub191c2VfaW4pOiBNb3ZlZCB0byBydGxhbmFsLmMuCgkoc3BsaXRfYmxvY2tfaW5zbnMpOiBNb3ZlZCB0byByZWNvZy5jLgoJKHVwZGF0ZV9mbG93X2luZm8pOiBNYWtlIHB1YmxpYy4KCSogcnRsLmg6IERlY2xhcmUgdGhlbS4KCgkqIHJlb3JnLmM6IE1vdmVkIHRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIGNvbXB1dGluZyByZXNvdXJjZQoJdXNhZ2UgdG8gcmVzb3VyY2UuYy4KCgkqIHNjaGVkLmMgKHJlZ25vX3VzZV9pbik6IE1vdmVkIHRvIHJ0bGFuYWwuYy4KCSh1cGRhdGVfZmxvd19pbmZvKTogTWFrZSBwdWJsaWMuCgkoc2NoZWR1bGVfaW5zbnMpOiBVc2Ugc3BsaXRfYmxvY2tfaW5zbnMuCgoJKiByZWNvZy5jIChzcGxpdF9ibG9ja19pbnNucyk6IE5ldyBmdW5jdGlvbi4KClR1ZSBGZWIgIDIgMjI6MDM6MjYgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL2xpbnV4LmggKExJTktfU1RBUlRfREVGQVVMVF9TUEVDKTogRGVsZXRlLCB1bnVzZWQuCgkoTElOS19PU19ERUZBVUxUX1NQRUMpOiBEZWxldGUsIHVudXNlZC4KClR1ZSBGZWIgIDIgMjA6Mjk6MzQgMTk5OSAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGFybS0qLW9hYmkpOiBTdXBwb3J0LgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYtb2FiaS5oOiBOZXcgZmlsZS4KClR1ZSBGZWIgIDIgMTk6NDM6NTkgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5tZCAoYXNobHNpMyk6IFR1cm4gaW50byBhIGRlZmluZV9leHBhbmQgYW4gYW5vbnltb3VzIHBhdHRlcm4uCglNYWtlIHRoZSBhbm9ueW1vdXMgcGF0dGVybiBtYXRjaCB3aGVuICEgb3B0aW1pemVfc2l6ZS4KCShhc2hsc2kzIHNpemUgb3B0aW1pemVyKTogTmV3IHBhdHRlcm4uCgoJKiBpbnRsL01ha2VmaWxlLmluICh1bmluc3RhbGwpOiBBZGQgbWlzc2luZyAiOyBcIi4KClR1ZSBGZWIgIDIgMTg6MjE6MjMgMTk5OSAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBzcGFyYy5oIChUQVJHRVRfQ1BVX3NwYXJjODZ4KTogQWRkZWQuIFRBUkdFVF9DUFVfc3BhcmNsaXRlODZ4CglzeW5vbnltLgoKVHVlIEZlYiAgMiAyMDoyNDoxMSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChsb29wX29wdGltaXplKTogRml4IHZhbHVlIG1heF91aWRfZm9yX2xvb3AgaXMgcmVzZXQKCXRvIGFmdGVyIGZpbmRfYW5kX3ZlcmlmeV9sb29wcyBjYWxsLgoKVHVlIEZlYiAgMiAxOTo0ODoyOSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogKHJlY29tYmluZV9naXZzKTogRG9uJ3QgdXNlIGEgZ2l2IHRoYXQncyBsaWtlbHkgdG8gYmUgZGVhZCB0bwoJZGVyaXZlIG90aGVycy4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBGaXggdGVzdCBmb3IgbGlmZXRpbWUgb3ZlcmxhcHMgLyBsb29wCgl3cmFwIGFyb3VuZCB3aGVuIGRlcml2aW5nIGdpdnMuCgpNb24gRmViICAxIDIwOjAwOjQwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWNvZy5jIChjaGVja19hc21fb3BlcmFuZHMpOiBUcmVhdCBpbmRldGVybWluYXRlIG9wZXJhbmQgb2sKCXJlc3VsdHMgYXMgc3VjY2Vzcy4gIFRyeSBoYXJkZXIgdG8gcmVzb2x2ZSBhIG1hdGNoaW5nIGNvbnN0cmFpbnQuCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFJlY29nbml6ZSB3aGVuIGFuIG91dHB1dCBvcGVyYW5kJ3MKCWNvbnN0cmFpbnQgZG9lcyBub3QgYWxsb3cgbWVtb3J5LiAgVHJlYXQgaW5kZXRlcm1pbmF0ZSBvcGVyYW5kIG9rCglyZXN1bHRzIGFzIGZhaWx1cmUuICBUcnkgaGFyZGVyIHRvIHJlc29sdmUgYSBtYXRjaGluZyBjb25zdHJhaW50LgoKTW9uIEZlYiAgMSAxNTowMDowMiAxOTk5ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCglVc2UgdmFycmF5cyBmb3IgY29uc3RhbnQtZXF1aXZhbGVuY2UgZGF0YToKCgkqIHZhcnJheS5oIChzdHJ1Y3QgY29uc3RfZXF1aXZfZGF0YSk6IE5ldyB0eXBlLgoJKHVuaW9uIHZhcnJheV9kYXRhX3RhZyk6IE5ldyBlbGVtZW50IGNvbnN0X2VxdWl2LgoJKFZBUlJBWV9DT05TVF9FUVVJVl9JTklULCBWQVJSQVlfQ09OU1RfRVFVSVYpOiBOZXcgbWFjcm9zLgoJKFZBUlJBWV9TSVpFKTogTmV3IG1hY3JvLCByZXR1cm5zIG51bWJlciBvZiBlbGVtZW50cy4KCSogaW50ZWdyYXRlLmg6IEluY2x1ZGUgdmFycmF5LmguCgkoc3RydWN0IGlubGluZV9yZW1hcCk6IFJlcGxhY2UgY29uc3RfZXF1aXZfbWFwLCBjb25zdF9hZ2VfbWFwIGFuZAoJY29uc3RfZXF1aXZfbWFwX3NpemUgd2l0aCBhIGNvbnN0X2VxdWl2X3ZhcnJheSBlbGVtZW50LgoJKE1BWUJFX0VYVEVORF9DT05TVF9FUVVJVl9WQVJSQVkpOiBOZXcgbWFjcm87IGdyb3dzIHZhcnJheSBpZgoJbmVlZGVkLgoJKFNFVF9DT05TVF9FUVVJVl9EQVRBKTogTmV3IG1hY3JvOyBzZXRzIHJ0eCBhbmQgYWdlIGZpZWxkcwoJc2ltdWx0YW5lb3VzbHksIGdyb3dpbmcgdGhlIHZhcnJheSBpZiBuZWVkZWQuCgoJKiBpbnRlZ3JhdGUuYyAoZ2xvYmFsX2NvbnN0X2VxdWl2X21hcCwKCWdsb2JhbF9jb25zdF9lcXVpdl9tYXBfc2l6ZSk6IERlbGV0ZWQsIHJlcGxhY2VkIGJ5Li4uLgoJKGdsb2JhbF9jb25zdF9lcXVpdl92YXJyYXkpOiBOZXcgdmFyaWFibGUuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFJlZmVyZW5jZXMgY2hhbmdlZC4KCSogaW50ZWdyYXRlLmg6IFVwZGF0ZSBkZWNsYXJhdGlvbnMuCgoJKiBpbnRlZ3JhdGUuYyAocHJvY2Vzc19yZWdfcGFybSwgZXhwYW5kX2lubGluZV9mdW5jdGlvbiwKCWNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlLCB0cnlfY29uc3RhbnRzLCBzdWJzdF9jb25zdGFudHMsCgltYXJrX3N0b3Jlcyk6IFVzZSB2YXJyYXkgYWxsb2NhdGlvbiBhbmQgYWNjZXNzb3IgbWFjcm9zLCBuZXcKCWludGVncmF0ZS5oIG1hY3JvcywgYW5kIGdsb2JhbF9jb25zdF9lcXVpdl92YXJyYXkuICBEb24ndAoJY29uZGl0aW9uYWxpemUgbm9uLU5VTEwgc3RvcmVzIG9uIGFycmF5IHNpemU7IGluc3RlYWQsIGV4cGFuZCB0aGUKCWFycmF5IGFzIG5lZWRlZC4KCSogdW5yb2xsLmMgKHVucm9sbF9sb29wKTogTGlrZXdpc2UuCgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBJbml0aWFsaXplIGNvbnN0X2VxdWl2X3ZhcnJheSBlbGVtZW50IHRvCgl6ZXJvLiAgQWZ0ZXIgYWxsb2NhdGluZyB2YXJyYXksIGFsd2F5cyBleGl0IHRocm91Z2ggYm90dG9tIG9mCglmdW5jdGlvbiwgd2hlcmUgaXQgY2FuIGJlIGRlYWxsb2NhdGVkIGlmIG5lZWRlZC4gIERvbid0IGV4cGxpY2l0bHkKCXJlYWxsb2NhdGUgY29uc3RfZXF1aXZfbWFwIHN0b3JhZ2U7IGluc3RlYWQsIGp1c3QgZW5zdXJlIHRoZQoJdmFycmF5IGhhcyBiZWVuIGluaXRpYWxpemVkLCBhbmQgdXBkYXRlIHRoZSBnbG9iYWwgcmVmZXJlbmNlLgoKTW9uIEZlYiAgMSAwOTo0MDoyNSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaCAoaW5saW5lLCBjb25zdCk6IEhhbmRsZSB0aGVzZSBmb3Igc3RhZ2UyIChhbmQgbGF0ZXIpIGdjYy4KCgkqIGR3YXJmMm91dC5jIChpbmxpbmUpOiBEb24ndCBkZWZpbmUuCgoJKiBkd2FyZm91dC5jIChpbmxpbmUpOiBMaWtld2lzZS4KClN1biBKYW4gMzEgMjI6MDQ6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBEdW1wIHJlY29tYmluYXRpb24gYW5kIGRlcml2YXRpb24gZGF0YS4KClN1biBKYW4gMzEgMjA6MzQ6MjkgMTk5OSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5jb2x1bWJpYS5lZHU+CgoJKiBmbGFncy5oOiBEZWNsYXJlIGZsYWdfbm9faWRlbnQuCgkqIHRvcGxldi5jOiBEZWZpbmUgZmxhZ19ub19pZGVudC4gIFByb2Nlc3MgLWYobm8tKWlkZW50IGhlcmUuCgkqIGMtdHJlZS5oOiBEb24ndCBkZWNsYXJlIGZsYWdfbm9faWRlbnQuCgkqIGMtZGVjbC5jOiBEb24ndCBkZWZpbmUgZmxhZ19ub19pZGVudC4gIERvbid0IHByb2Nlc3MKCSAgLWYobm8tKWlkZW50IHN3aXRjaGVzIGhlcmUuCgoJKiBjb25maWcvZWxmb3MuaCAoQVNNX0ZJTEVfRU5EKTogT3V0cHV0IGZpbmFsIC5pZGVudCBkaXJlY3RpdmUKCSAgb25seSBpZiAhZmxhZ19ub19pZGVudC4KCSogY29uZmlnL3B0eDQuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9zdnI0Lmg6IExpa2V3aXNlLgoJKiBjb25maWcvYWxwaGEvZWxmLmg6IExpa2V3aXNlLgoJKiBjb25maWcvYXJtL2xpbnV4LWVsZi5oOiBMaWtld2lzZS4KCSogY29uZmlnL2kzODYvc2NvNS5oOiBMaWtld2lzZS4KCSogY29uZmlnL2k4NjAvZngyODAwLmg6IExpa2V3aXNlLgoJKiBjb25maWcvbWlwcy9nbnUuaDogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L29zZnJvc2UuaDogTGlrZXdpc2UuCgoJKiBnY2MuYyAoQyBzcGVjcyk6IE1hcCAtUW4gdG8gLWZuby1pZGVudC4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IExpa2V3aXNlLgoKTW9uIEZlYiAgMSAxMDo1MjowNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWd1cmUuaW46IERvbid0IHJlbW92ZSBsb29wLm8gYW5kIHVucm9sbC5vIHdoZW4KCWVuYWJsZS1oYWlmYSBpcyBzZWxlY3RlZC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIEphbiAzMSAxMzoyMjowMiAxOTk5ICBKb2huIFdlaGxlICAoam9obkBmZWl0aC5jb20pCgoJKiBpMzg2Lm1kIChtb3ZzaWNjLCBtb3ZoaWNjLCBtb3ZzZmNjLCBtb3ZkZmNjLAoJbW92eGZjYywgbW92ZGljYyk6IERlbGV0ZSB1bmNvbnN0cmFpbmVkIGFsdGVybmF0aXZlcy4KCSogaTM4Ni5jIChvdXRwdXRfZnBfY29uZGl0aW9uYWxfbW92ZSwKCW91dHB1dF9pbnRfY29uZGl0aW9uYWxfbW92ZSk6IERlbGV0ZSB1bnVzZWQgY2FzZS4KClN1biBKYW4gMzEgMDE6MTU6MDQgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gSmFuIDMxIDAwOjUyOjM3IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAobW92IHBhdHRlcm5zKTogRW1pdCB0aGUgYXNzZW1ibGVyIGFsaWFzZXMgbW92IGFuZCBmbW92CglpbnN0ZWFkIG9mIGJpcyBhbmQgY3B5cy4gIENvbWJpbmUgYWx0ZXJuYXRpdmVzIHdoZXJlIHBvc3NpYmxlLgoKU2F0IEphbiAzMCAyMzoxNDoxMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY292LmMgKGZub3RpY2UpOiBBZGQgbWlzc2luZyBGSUxFKiBwYXJhbWV0ZXIuCgkoZnVuY3Rpb25fc3VtbWFyeSk6IEZpeCBmb3JtYXQgc3BlY2lmaWVycyBpbiBjYWxscyB0byBgZm5vdGljZScuCgkob3V0cHV0X2RhdGEpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChmbm90aWNlKTogQ29uc3RpZnkgY2hhciogcGFyYW1ldGVyLgoKCSogdG9wbGV2LmggKGZub3RpY2UpOiBBZGQgcHJvdG90eXBlLgoJV3JhcCBwcm90b3R5cGUgd2l0aCBCVUZTSVogdG8gcHJvdGVjdCBGSUxFKiB1c2FnZS4KClN1biBKYW4gMzEgMTU6MzM6MDkgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoUlRYX0NPU1RTKTogRXhwbGljaXRseSBkZWZpbmUgYzR4IGNvc3RzLgoKU2F0IEphbiAzMCAwODoyNzoyMyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBIYW5kbGUgUkVHX0VIX1JFR0lPTiBub3Rlcy4KCgkqIGFsaWFzLmMgKGZpeGVkX3NjYWxhcl9hbmRfdmFyeWluZ19zdHJ1Y3RfcCk6IEFkZCAic3RhdGljIiB0bwoJZnVuY3Rpb24gZGVmaW5pdGlvbi4KCShhbGlhc2VzX2V2ZXJ5dGhpbmdfcCwgd3JpdGVfZGVwZW5kZW5jZV9wKTpMaWtld2lzZS4KCgkqIGluc3RhbGwudGV4aTogRml4IG1lcmdlIGxvc3NhZ2VzLgoKCSogY2NjcC5jIChtYWluKTogT25seSBjYWxsIHNldGxvY2FsZSAoTENfTUVTU0FHRVMsIC4uLikgaWYgTENfTUVTU0FHRVMKCWlzIGRlZmluZWQuCgkqIGNvbGxlY3QyLmMgKG1haW4pOiBMaWtld2lzZS4KCSogY3BwbWFpbi5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdjYy5jIChtYWluKTogTGlrZXdpc2UuCgkqIGdjb3YuYyAobWFpbik6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jIChtYWluKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBwYS5tZCAocGFyYWxsZWwgc2hpZnQgYW5kIHNoaWZ0YWRkKTogTWFyayBvdXRwdXQgb2Ygc2hpZnQgYXMgYW4KCWVhcmx5Y2xvYmJlci4KCgkqIGxvb3AuYzogRGlzYWJsZSByZWNlbnQgbG9vcCBjaGFuZ2VzLiAgVGVtcG9yYXJ5IGFzIEpvZXJuCgljb250aW51ZXMgdG8gZml4IHByb2JsZW1zLgoKU2F0IEphbiAzMCAwMzoyNDozNyAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBTaXplIHJlZ19tYXAgYWNjb3JkaW5nIHRvIHJlZ19pdl90eXBlLgoKRnJpIEphbiAyOSAxODoyNjowNyAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBlbWl0LXJ0bC5jIChyZW1vdmVfaW5zbik6IE5ldyBmdW5jdGlvbi4KCSogcnRsLmggKHJlbW92ZV9pbnNuKTogQWRkIHByb3RvdHlwZS4KCSogZnVuY3Rpb24uYyAocmVwb3NpdGlvbl9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfbm90ZXMpOiBDYWxsIHJlbW92ZV9pbnNuLgoKRnJpIEphbiAyOSAyMjozNDo0MSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChyZWNvbWJpbmVfZ2l2cyk6IERvbid0IHRyeSB0byBkZXJpdmUgZ2l2cyB0aGF0IGhhdmUgY29tYmluZWQuCgpGcmkgSmFuIDI5IDE1OjAwOjM5IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5jIChub3RpY2UsIGZub3RpY2UpOiBDaGVjayBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywKCXdoZW4gZGVjbGFyaW5nIGFyZ3VtZW50cyBhbmQgY2FsbGluZyB2YV9hcmcoKSB0byBpbml0aWFsaXplIHRoZW0uCgoJKiBjb2xsZWN0Mi5jIChub3RpY2UpOiBMaWtld2lzZS4KCgkqIGxvb3AuYyAoZmluZF9saWZlX2VuZCk6IFVzZSBQUk9UTygpIG1hY3JvIGluIHRoZSBwcm90b3R5cGUuCgpGcmkgSmFuIDI5IDE0OjM2OjExIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbGxlY3QyLmMgKGVycm9yKTogRml4IHR5cG8gaW4gZGVjbGFyYXRpb24uCgoJKiBjcHBlcnJvci5jIChjcHBfbWVzc2FnZSk6IExpa2V3aXNlLgoKCSogY3BwbGliLmMgKGNwcF93YXJuaW5nKTogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaCAoY3BwX25vdGljZSk6IFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFsc28gYWRkCglBVFRSSUJVVEVfUFJJTlRGXzEuCgoJKiB0b3BsZXYuYyAoZXJyb3IpOiBGaXggdHlwbyBpbiBkZWNsYXJhdGlvbi4KCkZyaSBKYW4gMjkgMTU6NDQ6MTMgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoc3RyZW5ndGhfcmVkdWNlKTogRml4IEhBVkVfY2MwIGhhbmRsaW5nIHdoZW4gc2Nhbm5pbmcKCWZvcndhcmQgZnJvbSBjb250IGRvbWluYXRvci4KCkZyaSBKYW4gMjkgMDc6MTA6MjcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jIChlcHJpbnRfc3RyaW5nKTogQ29uc3RpZnkgYSBjaGFyKi4KCShub3RpY2UpOiBMaWtld2lzZS4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZCBBVFRSSUJVVEVfUFJJTlRGXzEuCgkodm5vdGljZSk6IENvbnN0aWZ5IGEgY2hhciouCgkoZXJyb3IpOiBMaWtld2lzZS4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZCBBVFRSSUJVVEVfUFJJTlRGXzEuCgkodmVycm9yKTogQ29uc3RpZnkgYSBjaGFyKi4KCSh3YXJuaW5nKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQgQVRUUklCVVRFX1BSSU5URl8xLgoJKHZ3YXJuaW5nKTogQ29uc3RpZnkgYSBjaGFyKi4KCShlcnJvcl93aXRoX2xpbmUpOiBMaWtld2lzZS4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZAoJQVRUUklCVVRFX1BSSU5URl8yLgoJKHZlcnJvcl93aXRoX2xpbmUpOiBDb25zdGlmeSBhIGNoYXIqLgoJKHZ3YXJuaW5nX3dpdGhfbGluZSk6IExpa2V3aXNlLgoJKHdhcm5pbmdfd2l0aF9saW5lKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQKCUFUVFJJQlVURV9QUklOVEZfMi4KCShwZWR3YXJuKTogQ29uc3RpZnkgYSBjaGFyKi4gIFVzZSBQVlBST1RPIG5vdCBWUFJPVE8sIGFkZAoJQVRUUklCVVRFX1BSSU5URl8xLgoJKHBlZHdhcm5fd2l0aF9saW5lKTogTGlrZXdpc2Ugd2l0aCBBVFRSSUJVVEVfUFJJTlRGXzIuCgkocGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUpOiBMaWtld2lzZSB3aXRoIEFUVFJJQlVURV9QUklOVEZfNC4KCUFsc28gY29ycmVjdCB0eXBvIGluIHBhcmFtZXRlciBuYW1lIGRlY2xhcmF0aW9uLgoJKG1ha2VfYXNzZXJ0aW9uKTogQ29uc3RpZnkgYSBjaGFyKi4KCShxdW90ZV9zdHJpbmdfZm9yX21ha2UpOiBMaWtld2lzZS4KCShkZXBzX291dHB1dCk6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuICBVc2UgUFZQUk9UTyBub3QgVlBST1RPLCBhZGQKCUFUVFJJQlVURV9QUklOVEZfMS4gIFVzZSBBVFRSSUJVVEVfTk9SRVRVUk4gbm90IGFuIGV4cGxpY2l0CgkiX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSkiLgoJKGZhbmN5X2Fib3J0KTogTGlrZXdpc2UgZm9yIEFUVFJJQlVURV9OT1JFVFVSTi4KCShwZmF0YWxfd2l0aF9uYW1lKTogTGlrZXdpc2UuCgkocGlwZV9jbG9zZWQpOiBMaWtld2lzZS4KCShtZW1vcnlfZnVsbCk6IExpa2V3aXNlLgoKRnJpIEphbiAyOSAwMDoxNDo1NSAxOTk5ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBHcm93IHNldF9pbl9sb29wIC8gbl90aW1lc19zZXQgLwoJbWF5X25vdF9vcHRpbWl6ZSB0byBwcm9wZXIgc2l6ZSB3aGVuIGNvbnZlcnRpbmcgYml2IGluY3JlbWVudHMKCWludG8gZ2l2cy4KCUlmIG5lY2Vzc2FyeSwgcmVhbGxvY2F0ZSByZWdfaXZfdHlwZSAvIHJlZ19pdl9pbmZvIGJlZm9yZSBjYWxsaW5nCglyZWNvbWJpbmVfZ2l2cy4KClRodSBKYW4gMjggMjM6MjQ6MDggMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAocmVjb21iaW5lX2dpdnMpOiBOZXcgcGFyYW1ldGVyIHVucm9sbF9wLiAgSWYgc2V0LCBkb24ndAoJZ2VuZXJhdGUgY29tcGxleCBhZGRzLiAgQ2hhbmdlZCBjYWxsZXIuCglEb24ndCBnZW5lcmF0ZSBhZGRzIHRoYXQgY29zdCBtb3JlIHRoYW4gdGhlIG9yaWdpbmFsIG9uZS4KCShzdHJlbmd0aF9yZWR1Y2UpOiBXYXJuaW5nIGZpeGVzLgoKVGh1IEphbiAyOCAwOTo0MToxMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGExLjAtaHAtaHB1eDEwKik6IFVzZSB0LXBhLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpXZWQgSmFuIDI3IDIzOjM5OjUzIDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBydGwuaCAoaW5zbl9maXJzdF9wLCBub19qdW1wc19iZXR3ZWVuX3ApOiBEZWNsYXJlLgoJKiBydGxhbmFsLmMgKGluc25fZmlyc3RfcCwgbm9fanVtcHNfYmV0d2Vlbl9wKTogTmV3IGZ1bmN0aW9uLgoJKiBsb29wLmggKHZhcnJheS5oKTogSW5jbHVkZS4KCShzdHJ1Y3QgaW5kdWN0aW9uKTogQ2hhbmdlIGNvbWJpbmVkX3dpdGggdG8gdW5zaWduZWQuCglOZXcgbWVtYmVycyBkZXJpdmVkLCBpeCBhbmQgbGFzdF91c2UuCgkocmVnX2l2X3R5cGUsIHJlZ19pdl9pbmZvKTogTm93IHZhcnJheV90eXBlLiAgQWxsIHJlZmVyZW5jZXMgY2hhbmdlZC4KCShSRUdfSVZfVFlQRSwgUkVHX0lWX0lORk8pOiBEZWZpbmUuCgkoZmlyc3RfaW5jcmVtZW50X2dpdiwgbGFzdF9pbmNyZW1lbnRfZ2l2KTogRGVjbGFyZS4KCSogbG9vcC5jIChsb29wX251bWJlcl9sb29wX2NvbnQpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGxvb3BfbnVtYmVyX2NvbnRfZG9taW5hdG9yKTogTGlrZXdpc2UuCgkocmVnX2l2X3R5cGUsIHJlZ19pdl9pbmZvKTogTm93IHZhcnJheV90eXBlLgoJKGZpcnN0X2luY3JlbWVudF9naXYsIGxhc3RfaW5jcmVtZW50X2dpdik6IE5ldyB2YXJpYWJsZXMuCgkoY29tcHV0ZV9sdWlkcywgdmVyaWZ5X2RvbWluYXRvciwgZmluZF9saWZlX2VuZCk6IE5ldyBmdW5jdGlvbnMuCgkoY21wX3JlY29tYmluZV9naXZzX3N0YXRzLCByZWNvbWJpbmVfZ2l2cyk6IExpa2V3aXNlLgoJKGxvb3Bfb3B0aW1pemUpOiBBbGxvY2F0ZSBsb29wX251bWJlcl9sb29wX2NvbnQgYW5kCglsb29wX251bWJlcl9jb250X2RvbWluYXRvci4gIFVzZSBjb21wdXRlX2x1aWRzLgoJKGZpbmRfYW5kX3ZlcmlmeV9sb29wcyk6IEluaXRpYWxpemUgbG9vcF9udW1iZXJfbG9vcF9jb250IGFuZAoJbG9vcF9udW1iZXJfY29udF9kb21pbmF0b3IuCgkoc3RyZW5ndGhfcmVkdWNlKTogVHJ5IHRvIGZpbmQgYml2cyB0aGF0IGNhbiBiZSBleHByZXNzZWQgYXMgZ2l2cwoJb2YgYW5vdGhlciBiaXYsIGFuZCB0byBjb252ZXJ0IGJpdiBpbmNyZW1lbnRzIGludG8gZ2l2cy4KCUNhbGwgcmVjb21iaW5lX2dpdnMuICBIYW5kbGUgZGVyaXZlZCBnaXZzLgoJKHJlY29yZF9iaXYpOiBOZXcgYXJndW1lbnQgbG9jYXRpb24uICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHJlY29yZF9naXYpOiBJbml0aWFsaXplIGRlcml2ZWQgYW5kIGxhc3RfdXNlIGZpZWxkcy4KCShiYXNpY19pbmR1Y3Rpb25fdmFyKTogTmV3IGFyZ3VtZW50IGxvY2F0aW9uLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCShjb21iaW5lX2dpdnMpOiBEb24ndCBjb21iaW5lIGEgREVTVF9SRUcgZ2l2IHdpdGggYSBERVNUX0FERFIgZ2l2LgoJSW5jcmVtZW50IGNvbWJpbmVkX3dpdGggaW5zdGVhZCBvZiBzZXR0aW5nIHRvIDEuCgkqIHVucm9sbC5jIChkZXJpdmVkX3JlZ3MpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKHVucm9sbF9sb29wKTogSW5pdGlhbGl6ZSBpdC4KCUFsbG9jYXRlIGxvY2FsX3JlZ25vIGFjY29yZGluZyB0byBtYXhfcmVnX251bS4KCShjb3B5X2xvb3BfYm9keSk6IENvcGUgd2l0aCBkZXJpdmVkIGdpdnMuCgkoZmluZF9zcGxpdHRhYmxlX2dpdnMpOiBDaGVjayBmb3IgR2l2cyBtYWRlIGZyb20gYml2IGluY3JlbWVudHMuCglTZXQgZGVyaXZlZF9yZWdzIGZvciBnaXZzLgoJKiBNYWtlZmlsZS5pbiAoc3RtdC5vLCBsb29wLm8sIHVucm9sbC5vKTogRGVwZW5kIG9uIGxvb3AuaCAuCgpXZWQgSmFuIDI3IDE5OjMxOjM2IDE5OTkgIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IEhhbmRsZSBjYXNlIHdoZW4gYSByZWdpc3RlcgoJaGFzIGJlZW4gdXNlZCBpbiBhIHdpZGVyIG1vZGUuCgoxOTk5LTAxLTI3ICBCcnVjZSBLb3JiICA8YXV0b2dlbkBsaW51eGJveC5jb20+CgoJKiBmaXhpbmMvZml4aW5jbC5jLCBmaXhpbmMvc2VydmVyLltjaF06CglSZW1vdmVkIHRoZSBsYXN0IG9mIHRoZSBjYXBpdGFsaXplZCB2YXJpYWJsZSBhbmQgcHJvYyBuYW1lcy4KCgkqIGZpeGluYy9zZXJ2ZXIuYzogUmVtb3ZlZCB0aGUgcHJvY2VzcyBvcGVuIGNvZGUuCgkqIGZpeGluYy9wcm9jb3Blbi5jOiBOZXcgZmlsZSBjb250YWluaW5nIHRoZSBwcm9jIG9wZW4gY29kZS4KCSogZml4aW5jL2luY2xoYWNrLnRwbDogQWRkZWQgY29kZSB0byBieXBhc3MgYSByZWFkYWJpbGl0eSB0ZXN0Cgl3aGVuIGEgZmlsZSBpcyBub3QgcHJlc2VudC4gIEEgcHJvYmxlbSBvbiBzb21lIHN5c3RlbXMuCgkqIGZpeGluYy9pbmNsaGFjay5zaCwgZml4aW5jL2ZpeGluY2wuc2g6IFJlZ2VuZXJhdGVkLgoKV2VkIEphbiAyNyAxMTo1ODoxOCAxOTk5ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjcHBsaWIuaCAoY3BwX25vdGljZSk6IEFkZCBwcm90b3R5cGUuCgpXZWQgSmFuIDI3IDAyOjIwOjQ4IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1lcmdlIGdjYzIgc25hcHNob3QgMTk5ODA5MjkuCgoJKiBjY2NwLmMgKFBSSU5URl9QUk9UTyk6IFJlbW92ZS4KCShQUklOVEZfUFJPVE9fezEsMiwzLDR9OiBMaWtld2lzZS4KCSogY2V4cC55OiBMaWtld2lzZS4KCSogc3lzdGVtLmg6IEFkZCBQUklOVEZfUFJPVE8gYW5kIFBSSU5URl9QUk9UT197MSwyLDMsNH0uCgoJKiBmaXgtaGVhZGVyLmMgKGNwcF9maWxlX2xpbl9mb3JfbWVzc2FnZSk6IERlbGV0ZS4gIEluIGxpYmNwcC4KCShjcHBfcHJpbnRfY29udGFpbmluZ19maWxlcywgdl9jcHBfbWVzc2FnZSwgY3BwX21lc3NhZ2UpOiBMaWtld2lzZS4KCShjcHBfZmF0YWwsIGNwcC1QZmF0YWxfd2l0aF9uYW1lKTogTGlrZXdpc2UuCgoJKiBnZW4tcHJvdG9zLmMgKGhhc2hmKTogRGVsZXRlIGluIGNwcGhhc2guby4KCSogZ2VuLXByb3Rvcy5jIChoYXNoZik6IERlbGV0ZSBpbiBjcHBoYXNoLm8uCgoJKiBleHByLmM6IERvIG5vdCBtZXJnZSBTQVZFX1NUQUNLQVJFQV9NT0RFIGNoYW5nZXMuCgkqIGV4cG1lZC5jOiBMaWtld2lzZS4KCSogcnM2MDAwLm1kOiBMaWtld2lzZS4KCgkqIHJzNjAwMC5jLCByczYwMDAubWQ6IERvIG5vdCBtZXJnZSBmb3JtYXR0aW5nIGNoYW5nZXMgeWV0LgoKV2VkIEphbiAyNyAwMToxMzo0MiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnM2MDAwLmMgKGlucHV0X29wZXJhbmQpOiBEb24ndCBleHBlY3QgQ09OU1QgYXJvdW5kIENPTlNUQU5UX1BfUlRYLgoJKiByczYwMDAubWQgKG1vdnNpLCBtb3ZkaSk6IExpa2V3aXNlLgoKVHVlIEphbiAyNiAxMzozMTozOCAxOTk5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChleHBhbmRfZnVuY3Rpb25fZW5kKTogUGFzcyBhcmdfcG9pbnRlcl9zYXZlX2FyZWEgdG8KCXZhbGlkaXplX21lbSBiZWZvcmUgdXNpbmcgaXQuICBFbWl0IGNvZGUgaW50byBhIHNlcXVlbmNlLgoKVHVlIEphbiAyNiAxMzo0MTozOCAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGRveiArIHNldCBjciBhbmQgb3IgKyBzZXQgY3IgcGF0dGVybnMpOiBBZGQgbWlzc2luZwoJJyMnIHRvIHNwbGl0IHBhdHRlcm5zLiAgQ29ycmVjdCBpbmRlbnRhdGlvbiBvZiBzb21lIG5ldyBwYXR0ZXJucy4KCjE5OTktMDEtMjYgIFphY2sgV2VpbmJlcmcgIDx6YWNrQG1pZG5pdGUuZWMucmhuby5jb2x1bWJpYS5lZHU+CgoJKiBjcHBmaWxlcy5jIChzYWZlX3JlYWQpOiBEZWxldGVkLgoJKHJlYWRfYW5kX3ByZXNjYW4pOiBOZXcgZnVuY3Rpb24sIHJlcGxhY2VzIHNhZmVfcmVhZCwgY29udmVydHMKCWFuZC9vciB3YXJucyBhYm91dCB0cmlncmFwaHMsIHNpbGVudGx5IGNvbnZlcnRzIG9kZCBsaW5lCgl0ZXJtaW5hdG9ycyAoXHIsIFxuXHIsIFxyXG4pLiAgV2FybnMgYWJvdXQgbm8gbmV3bGluZSBhdCBFT0YuCgkoZmluY2x1ZGUpOiBVc2UgcmVhZF9hbmRfcHJlc2NhbjsgdHVybiBvZmYgbm9uYmxvY2tpbmcgbW9kZSBvbgoJdGhlIGlucHV0IGRlc2NyaXB0b3I7IHJlbW92ZSBmaWxlLXNpemUtZXhhbWluYXRpb24gYW5kCgluby1uZXdsaW5lLWF0LUVPRiBndW5rIHdoaWNoIGlzCWxvbmdlciBuZWNlc3Nhcnk7IGJlIG1vcmUKCWNhcmVmdWwgYWJvdXQgY2hlY2tpbmcgdGhhdCB3ZSd2ZSBiZWVuIGhhbmRlZCBhIGxlZ2l0aW1hdGUKCWZpbGUgdG8gcmVhZCAob25seSByZWFsIGZpbGVzLCBwaXBlcywgYW5kIHR0eXMgYXJlIGFjY2VwdGFibGUpLgoJKiBjcHBsaWIuaCAoY3BwX29wdGlvbnMpOiBSZW5hbWUgbm9fdHJpZ3JhcGhzIGZsYWcgdG8KCWB0cmlncmFwaHMnIGFuZCBpbnZlcnQgaXRzIHNlbnNlLgoJKHRyaWdyYXBoX3RhYmxlKTogRGVjbGFyZS4KCShjcHBfd2FybmluZ193aXRoX2xpbmUpOiBQcm90b3R5cGUuCgkqIGNwcGxpYi5jOiBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8gdHJpZ3JhcGhfcGNwLiBEZWZpbmUKCXRyaWdyYXBoX3RhYmxlOyBpbml0aWFsaXplIGl0IGluIGluaXRpYWxpemVfY2hhcl9zeW50YXguICBPcGVuCglmaWxlcyBpbiBub25ibG9ja2luZyBtb2RlLiAgcy9ub190cmlncmFwaHMvdHJpZ3JhcGhzLwoJdGhyb3VnaG91dCwgYW5kIGludmVydCBzZW5zZS4gIFB1dCBjcHBfd2FybmluZ193aXRoX2xpbmUgYmFjawoJaW4gYW5kIGV4cG9ydCBpdC4KClR1ZSBKYW4gMjYgMjM6MjE6NDkgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguaCAoQ09VTlRFUl9SRUdTKTogTmV3IHJlZ2lzdGVyIGNsYXNzLgoJKiBjb25maWcvYzR4L2M0eC5tZCAoKnJwdGJfaW5pdCk6IENoYW5nZSBjb25zdHJhaW50cy4KCShycHRiX2VuZCk6IEVtaXQgYWx0ZXJuYXRlIGxvb3BpbmcgaW5zdHJ1Y3Rpb25zIGlmCglSQyByZWdpc3RlciBub3QgYWxsb2NhdGVkIGZvciBsb29wIGNvdW50ZXIuCgkoZGVjcmVtZW50X2FuZF9icmFuY2hfb25fY291bnQpOiBBbGxvdyBvdGhlciByZWdpc3RlcnMKCWZvciBsb29wIGNvdW50ZXIuCgoxOTk5LTAxLTI1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGV4cC5jIChzdHJ1Y3QgYXJnbGlzdCk6IFJlbW92ZWQuCgkocGFyc2VfbnVtYmVyKTogVXNlIEhPU1RfV0lERV9JTlQgZm9yIHRoZSBhY2N1bXVsYXRvci4KCUFsbG93IHR3byBgbCcgc3VmZml4ZXMgdW5sZXNzIEM4OS4gIENsZWFuIHVwLiAgTWFrZSBzdGF0aWMuCgkocGFyc2VfY2hhcmNvbnN0KTogTmV3IGZ1bmN0aW9uIGJyb2tlbiBvdXQgb2YgY3BwX2xleC4KCUNvZGUgY2xlYW5lZCB1cCBkcmFzdGljYWxseS4gIERvbid0IHVzZSBhIHRva2VuX2J1ZmZlci4KCSh0b2tlbl9idWZmZXIpOiBSZW1vdmVkLgoJKGNwcF9sZXgpOiBEb24ndCBjYWxsIHBhcnNlX251bWJlciBvbiBhIGNvbnN0YW50IHN0cmluZy4KCVVzZSBwYXJzZV9jaGFyY29uc3QuCgkoY3BwX3BhcnNlX2V4cHIpOiBQcm9wZXJseSBoYW5kbGUgYW4gRVJST1Igb3AgcmV0dXJuZWQgYnkKCWNwcF9sZXguCgoxOTk5LTAxLTI1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmM6IERvbid0IGluY2x1ZGUgc2lnbmFsLmgsIHN5cy90aW1lcy5oLCBvcgoJc3lzL3Jlc291cmNlLmguIERvbid0IGRlY2xhcmUgbG9jYWx0aW1lLgoJKG1hY3JvZXhwYW5kKTogSGFuZGxlIHNwZWNpYWwgc3ltYm9scyBoZXJlLgoJKHB1c2hfbWFjcm9fZXhwYW5zaW9uKTogQ2hvcCBvZmYgdGhlIHRyYWlsaW5nICdAICcgaWYgcG9zc2libGUKCWhlcmUuCgkoY3BwX2dldF90b2tlbik6IERvbid0IGRvIGVpdGhlciBvZiB0aGUgYWJvdmUgdHdvIHRoaW5ncyBoZXJlLgoJTW92ZSBgc3RyaW5nJyBsYWJlbCBqdXN0IGFmdGVyIGNhc2UgJyInIHNvIHRoYXQgd2lkZSBzdHJpbmdzCglkb24ndCBjcmFzaCB0aGUgcHJlcHJvY2Vzc29yLgoKU3VuIEphbiAyNCAyMDoxMzo0NSAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAubWQgKGxlZnQgc2hpZnQgKyBzZXQgY3IgcGF0dGVybnMpOiBBZGQgbWlzc2luZyAnIycgdG8KCXNwbGl0IHBhdHRlcm5zLgoJKG1vdmUgcmVnaXN0ZXIgKyBzZXQgY3IgcGF0dGVybik6IExpa2V3aXNlLgoJKG1vdmRpLCAhVEFSR0VUX1BPV0VSUEM2NCBzcGxpdHRlcnMpOiBBZGQgYmFjayBpbiBKYW4uIDE1dGggcGF0Y2gsCglpbmFkdmVydGVudGx5IGRlbGV0ZWQuCgpTdW4gSmFuIDI0IDA4OjA3OjU5IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHN0bXQuYyAoc3RtdF9sb29wX25lc3RfZW1wdHkpOiBOZXcgZnVuY3Rpb24uCgkqIHRyZWUuaCAoc3RtdF9sb29wX25lc3RfZW1wdHkpOiBEZWNsYXJlIGl0LgoJKiBydGwuZGVmIChDQUxMX1BMQUNFSE9MREVSKTogTmV3IHJ0eCBjb2RlLgoKU3VuIEphbiAyNCAyMToyNDo0MyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfZW1pdF9tb3ZlX3NlcXVlbmNlLCBjNHhfZW5jb2RlX3NlY3Rpb25faW5mbyk6CglOZXcgZnVuY3Rpb25zLgoJKGM0eF9jaGVja19sZWdpdF9hZGRyKTogUmVtb3ZlIFVTRSBhbmQgUExVUywgYWxsb3cKCUxPX1NVTSwgYW5kIGRpc2FibGUgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLCBhbmQgQ09OU1QgY2FzZXMuCgkoYzR4X2xlZ2l0aW1pemVfYWRkcmVzcyk6IFBlbmFsaXplIFNZTUJPTF9SRUYsIExBQkVMX1JFRiwgYW5kCglDT05TVCBjYXNlcy4gIEFkZCBMT19TVU0uCgkoYzR4X3ByaW50X29wZXJhbmQpOiBNb2RpZmllZCAnQycgYW5kICdSJyBjYXNlcyBmb3IgY2FsbHMuCglBZGRlZCAnVScgY2FzZS4gIFJlbW92ZSBkZXBlbmRlbmNlIG9uIFNZTUJPTF9SRUZfRkxBRy4KCShjNHhfcHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSGFuZGxlIExPX1NVTS4KCShjNHhfc2Nhbl9mb3JfbGRwKTogRGVsZXRlLiAgSG9vcmF5IQoJKGM0eF9wcm9jZXNzX2FmdGVyX3JlbG9hZCk6IFJlbW92ZSBjYWxsIHRvIGM0eF9zY2FuX2Zvcl9sZHAuCglTcGxpdCBhbGwgaW5zbnMuCgkoYzR4X2ltbWVkX2ludF9jb25zdGFudCk6IFJlbmFtZWQgZnJvbSBjNHhfaW50X2NvbnN0YW50LiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCgkoYzR4X2ltbWVkX2Zsb2F0X2NvbnN0YW50KTogUmVuYW1lZCBmcm9tIGM0eF9mbG9hdF9jb25zdGFudC4gIEFsbAoJY2FsbGVycwljaGFuZ2VkLgoJKGM0eF9UX2NvbnN0cmFpbnQpOiBBbGxvdyBMT19TVU0sIGRpc2FibGUgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLAoJYW5kIENPTlNULgoJKGM0eF9VX2NvbnN0cmFpbnQsIHN5bWJvbGljX29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zLgoJKHNyY19vcGVyYW5kKTogQWxsb3cgJ0knIGNvbnN0YW50cyBpbiBISW1vZGUuICBBbGxvdyBMT19TVU0sCglkaXNhYmxlIFNZTUJPTF9SRUYsIExBQkVMX1JFRiwgYW5kIENPTlNULgoJKGxzcmNfb3BlcmFuZCwgdHNyY19vcGVyYW5kKTogQ2FsbCBzcmNfb3BlcmFuZCBpbnN0ZWFkIG9mCglnZW5lcmFsX29wZXJhbmQuCgkoYzR4X29wZXJhbmRfc3Vid29yZCk6IFVwZGF0ZSBjb21tZW50cy4KCgkqIGNvbmZpZy9jNHgvYzR4LmMgKFRBUkdFVF9MT0FEX0FERFJFU1MpOiBOZXcgbWFjcm8uCgkoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogQWxsb3cgU1lNQk9MX1JFRiwgTEFCRUxfUkVGLCBDT05TVCwKCXBsdXMgSElHSCBhbmQgTE9fU1VNIGZvciB0aGUgQzQwLgoJKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBEZWZpbmUgbWFjcm8uCgkoc3ltYm9saWNfb3BlcmFuZCwgYzR4X1VfY29uc3RyYWludCwgYzR4X2VtaXRfbW92ZV9zZXF1ZW5jZSk6IE5ldwoJcHJvdG90eXBlcy4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgc3ltYm9saWNfb3BlcmFuZC4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChtb3ZxaSwgbW92Z3FmLCBtb3ZoaSwgbW92aGkpOiBDYWxsCgljNHhfZW1pdF9tb3ZlX3NlcXVlbmNlLgoJKGZsb2F0dW5zcWlxZjIsIGZpeHVuc190cnVuY3FmcWkyKTogUmV3b3JrIGVtaXR0ZWQgUlRMCgl0byBhdm9pZCBzeW1ib2wgcmVmZXJlbmNlcy4KCShhbGwgcGF0dGVybnMgd2l0aCBnIGNvbnN0cmFpbnQpOiBSZXBsYWNlICdnJyBjb25zdHJhaW50IHdpdGggJ3JJbScuCgkoc2V0X2hpZ2gpOiBSZW5hbWVkIGZyb20gc2V0X2hpZ2hfdXNlLgoJKHNldF9sb19zdW0pOiBSZW5hbWVkIGZyb20gc2V0X2lvcl9sb191c2UuCgkoYWxsIGNhbGwgcGF0dGVybnMpOiBNYWtlIE1FTSBleHBsaWNpdCBpbiBjYWxsIGFkZHJlc3Mgb3BlcmFuZHMuCglNb2RpZmllZCBvdXRwdXQgdGVtcGxhdGVzIHRvIHVzZSAnVScgbW9kaWZpZXIuCgpTdW4gSmFuIDI0IDAxOjE1OjA1IDE5OTkgIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IEphbiAyMyAyMjozNDo1NyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBmaW5hbC5jIChiYl9zdHIpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUga2V5d29yZCBgY29uc3QnLgoJKGFkZF9iYl9zdHJpbmcsIGZpbmFsX3NjYW5faW5zbiwgb3V0cHV0X2FzbV9pbnNuKTogTGlrZXdpc2UuCgoJKiBmaXgtaGVhZGVyLmMgKHJlYWRfc2Nhbl9maWxlKTogTGlrZXdpc2UuCgoJKiBnZW5vdXRwdXQuYyAob3V0cHV0X2VwaWxvZ3VlLCBwcm9jZXNzX3RlbXBsYXRlKTogTGlrZXdpc2UuCgoJKiBsb2NhbC1hbGxvYy5jIChyZXF1aXJlc19pbm91dCwgYmxvY2tfYWxsb2MpOiBMaWtld2lzZS4KCgkqIG91dHB1dC5oIChvdXRwdXRfYXNtX2luc24sIGFzc2VtYmxlX3N0cmluZyk6IExpa2V3aXNlLgoKCSogcmVjb2cuYyAocmVjb2dfY29uc3RyYWludHMsIGNoZWNrX2FzbV9vcGVyYW5kcywKCWRlY29kZV9hc21fb3BlcmFuZHMsIGV4dHJhY3RfaW5zbiwgcHJlcHJvY2Vzc19jb25zdHJhaW50cywKCWNvbnN0cmFpbl9vcGVyYW5kcyk6IExpa2V3aXNlLgoKCSogcmVjb2cuaCAob3BlcmFuZF9hbHRlcm5hdGl2ZSwgcmVjb2dfY29uc3RyYWludHMsIGluc25fdGVtcGxhdGUsCglpbnNuX291dGZ1biwgaW5zbl9vcGVyYW5kX2NvbnN0cmFpbnQsIGluc25fbmFtZSk6IExpa2V3aXNlLgoKCSogcmVnY2xhc3MuYyAocmVjb3JkX3JlZ19jbGFzc2VzLCBzY2FuX29uZV9pbnNuKTogTGlrZXdpc2UuCgoJKiByZWdtb3ZlLmMgKGZpbmRfbWF0Y2hlcyk6IExpa2V3aXNlLgoKCSogcmVsb2FkLmMgKGFsdGVybmF0aXZlX2FsbG93c19tZW1jb25zdCk6IExpa2V3aXNlLgoKCSogcmVsb2FkMS5jIChjb25zdHJhaW50X2FjY2VwdHNfcmVnX3AsCglyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzKTogTGlrZXdpc2UuCgoJKiBydGwuaCAoZGVjb2RlX2FzbV9vcGVyYW5kcyk6IExpa2V3aXNlLgoKCSogc2Nhbi5oIChmbl9kZWNsKTogTGlrZXdpc2UuCgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RyaW5nKTogTGlrZXdpc2UuCgpTYXQgSmFuIDIzIDAxOjM3OjM2IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbiAoZ2NjX3Rvb2xkaXIpOiBIYW5kbGUgY2FzZSB3aGVyZSBleGVjX3ByZWZpeCBoYXMKCW5vdCBiZWVuIGV4cGxpY2l0bHkgc2V0LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoJKiBmb2xkLWNvbnN0LmMgKGxzaGlmdF9kb3VibGUpOiBNYXJrICdwcmVjJyBhcmd1bWVudHMgYXMgcG9zc2libHkKCXVudXNlZC4KCgkqIGJpdG1hcC5oIChiaXRtYXBfaGVhZF9kZWYpOiBNYWtlIGluZHggZmllbGQgdW5zaWduZWQuCgoJKiBjb25maWd1cmUuaW4gKGdjY190b29sZGlyKTogV2hlbiBub3QgbWFraW5nIGEgcmVsYXRpdmUgZ2NjX3Rvb2xkaXIsCgl1c2UgJGV4ZWNfcHJlZml4LyR0YXJnZXRfYWxpYXMgZm9yIGdjY190b29sZGlyLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgSmFuIDIyIDExOjQ4OjU2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjcHBwLmMgKHhyZWFsbG9jKTogRml4IHR5cG8gbGFzdCBjaGFuZ2UuCgkqIGNwcGFsbG9jLmMsIGdjYy5jLCBnZW5hdHRyLmMsIGdlbmF0dHJ0YWIuYywgZ2VuY29kZXMuYzogTGlrZXdpc2UuCgkqIGdlbmNvbmZpZy5jLCBnZW5lbWl0LmMsIGdlbmV4dHJhY3QuYywgZ2VuZmxhZ3MuYzogTGlrZXdpc2UuCgkqIGdlbm9waW5pdC5jLCBnZW5vdXRwdXQuYywgZ2VucGVlcC5jLCBnZW5yZWNvZy5jOiBMaWtld2lzZS4KCjE5OTktMDEtMjIgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKENSMF9SRUdOT19QKTogTmV3IG1hY3JvIHRvIHRlc3QgaWYgY3IwLgoJKENSX1JFR05PX05PVF9DUjBfUCk6IE5ldyBtYWNybyB0byB0ZXN0IGlmIGNyLCBidXQgbm90IGNyMC4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgY2NfcmVnX25vdF9jcjBfb3BlcmFuZC4KCShjY19yZWdfbm90X2NyMF9vcGVyYW5kKTogQWRkIGRlY2xhcmF0aW9uLgoKCSogcnM2MDAwLmMgKGNjX3JlZ19ub3RfY3IwX29wZXJhbmQpOiBSZXR1cm4gdHJ1ZSBpZiByZWdpc3RlciBpcyBhCglwc2V1ZG8gcmVnaXN0ZXIsIG9yIGEgY29udHJvbCByZWdpc3RlciB0aGF0IGlzIG5vdCBDUjAuCgoJKiByczYwMDAubWQgKGFsbCBjb21iaW5lciBwYXR0ZXJucyBidWlsZGluZyAuIGluc3RydWN0aW9ucyk6IEZvcgoJYWxsIGAuJyBpbnN0cnVjdGlvbnMgdGhhdCBkbyBzb21ldGhpbmcgYW5kIHNldCBjcjAsIGFkZCBhbgoJYWx0ZXJuYXRpdmUgdGhhdCBkb2VzIHRoZSBvcGVyYXRpb24sIGFuZCB0aGVuIHNldHMgYSBkaWZmZXJlbnQKCWZsYWcsIGluIG9yZGVyIHRvIGF2b2lkIHVzaW5nIHRoZSBjb3N0bHkgbWNyZiBpbnN0cnVjdGlvbiBhbmQgYWxzbwoJYWxsb3cgY3IwIHRvIGJlIGNsb2JiZXJlZCBpbiBhc20gc3RhdGVtZW50cy4gIEFsc28gZml4IGEgZmV3CglwYXR0ZXJucyB0aGF0IHVzZWQgdGhlIHdyb25nIHJlZ2lzdGVyLgoKCSogcnM2MDAwLmggKHJzNjAwMF9jcHVfc2VsZWN0KTogTWFrZSBzdHJpbmcsIG5hbWVzIGJlIGNvbnN0IGNoYXIgKi4KCShyczYwMDBfZGVidWdfbmFtZSk6IE1ha2UgY29uc3QgY2hhciAqLCBub3QgY2hhciAqLgoKCSogc3lzdjQuaCAocnM2MDAwX3thYmksc2RhdGF9X25hbWUpOiBNYWtlIGNvbnN0IGNoYXIgKi4KCgkqIHJzNjAwMC5jIChyczYwMDBfe2RlYnVnLGFiaSxzZGF0YX1fbmFtZSk6IE1ha2UgY29uc3QgY2hhciAqLgoJKHJzNjAwMF9zZWxlY3QpOiBVc2UgY29uc3QgY2hhciAqIGluIGNhc3RzLgoKRnJpIEphbiAyMiAwNzo0MzowMSAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZ2NjX3Rvb2xkaXIpOiBNb3ZlIGJlZm9yZSBmaXJzdCByZWZlcmVuY2UuCglMZXQgYXV0b2NvbmYgc3Vic3RpdHV0ZSBpbiBhIHZhbHVlLgoJKiBjb25maWd1cmUuaW4gKGdjY190b29sZGlyKTogT25seSB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZQoJdG9vbCBkaXJlY3RvcnkgaWYgJGV4ZWNfcHJlZml4ID09ICRwcmVmaXguCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIE1ha2VmaWxlLmluICh0b29sZGlyKTogUmVwbGFjZSB3aXRoIGdjY190b29sZGlyLgoKVGh1IEphbiAyMSAyMzoyMTo1NyAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChhc2hsZGlfY29uc3QpOiBEaXNhYmxlIGZvciAhVEFSR0VUXzUyMDAuICBGaXggaW5kZW50YXRpb24uCgkoYXNobGRpMyBleHBhbmRlcik6IFNpbWlsYXJseS4gIFVwZGF0ZSBjb21tZW50cy4KCShhc2hyZGlfY29uc3QsIGxzaHJkaV9jb25zdCk6IEZpeCBpbmRlbnRhdGlvbi4KCShhc2hyZGkzLCBsc2hyZGkzKTogRml4IGluZGVudGF0aW9uLiAgVXBkYXRlIGNvbW1lbnRzLgoKVGh1IEphbiAyMSAyMTo1MzozNiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAodHJ5X3NwbGl0KTogRG9uJ3QgdHJ5IHRvIHNwbGl0IG5vbi1pbnN0cnVjdGlvbnMuCgpUaHUgSmFuIDIxIDIzOjQ3OjMwIDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZW1pdF9wdXNoX2luc24pOiBGaXggZHVtYiB0eXBvLgoKVGh1IEphbiAyMSAyMDoyNDowMiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBSZWNvZ25pemUgYW5kIGFjY2VwdAoJdHJhbnNmb3JtYXRpb25zIHRoYXQgd2UgaGF2ZSBwZXJmb3JtZWQgZWFybGllci4KCSogYWxwaGEuaCAoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IExpa2V3aXNlLgoKCSogYWxwaGEubWQgKHByb2xvZ3VlX3N0YWNrX3Byb2JlX2xvb3ApOiBEb24ndCBkbyBvdXIgb3duIGxhYmVsCgloYW5kbGluZywgY2FsbCBnZW5fbGFiZWxfcnR4IGluc3RlYWQuCgpUaHUgSmFuIDIxIDE3OjQ1OjE4IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKHtyczYwMDB8cG93ZXJwY30taWJtLWFpeDQuWzEyXSopOiBBZGQgbWlzc2luZyBgdGhlbicuCgoJKiBjY2NwLmMgKHhyZWFsbG9jKTogQ2FsbCBtYWxsb2MgZ2l2ZW4gYSBOVUxMIG9sZCBwb2ludGVyLgoJKiBjb2xsZWN0Mi5jLCBjcHBhbGxvYy5jLCBnY2MuYywgZ2VuYXR0ci5jLCBnZW5hdHRydGFiLmM6IExpa2V3aXNlLgoJKiBnZW5jb2Rlcy5jLCBnZW5jb25maWcuYywgZ2VuZW1pdC5jLCBnZW5leHRyYWN0LmM6IExpa2V3aXNlLgoJKiBnZW5mbGFncy5jLCBnZW5vcGluaXQuYywgZ2Vub3V0cHV0LmMsIGdlbnBlZXAuYzogTGlrZXdpc2UuCgkqIGdlbnJlY29nLmMsIG1pcHMtdGZpbGUuYywgcHJvdG9pemUuYzogTGlrZXdpc2UuCgpUaHUgSmFuIDIxIDE5OjQ0OjU1IDE5OTkgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogY29uZmlndXJlLmluICh7cnM2MDAwfHBvd2VycGN9LWlibS1haXg0LlsxMl0qKTogSWYKCS0td2l0aC1nbnUtbGQsIHVzZSB4LWFpeDQxLWdsZCBpbnN0ZWFkIG9mIHgtYWl4NDEgdG8gc3VwcHJlc3MKCWFkZGluZyAtV2wsLWJiaWd0b2MgdG8gQk9PVF9MREZMQUdTLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgoJKiBjb25maWcvcnM2MDAwL3gtYWl4NDEtZ2xkOiBOZXcgZmlsZSwgZG9uJ3Qgc2V0IEJPT1RfTERGTEFHUy4KClRodSBKYW4gMjEgMTU6NDg6MDMgMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY3BwZXhwLmMgKGNwcF9sZXgpOiBBbGxvY2F0ZSB0b2tlbl9idWZmZXIgZHluYW1pY2FsbHkuCgpUaHUgSmFuIDIxIDE0OjE4OjA0IDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoTU9WRV9CWV9QSUVDRVNfUCk6IERlZmluZSBjb25kaXRpb24gZm9yIGRlY2lkaW5nIHRvIHVzZQoJbW92ZV9ieV9waWVjZXMuCgkoTU9WRV9NQVhfUElFQ0VTKTogRGVmaW5lIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIG1vdmUgYXQgb25jZS4KCShVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwgVVNFX0xPQURfUFJFX0RFQ1JFTUVOVCk6IERlZmluZSBkZWZhdWx0cy4KCShVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVmaW5lIGRlZmF1bHRzLgoJKG1vdmVfYnlfcGllY2VzKTogVXNlIG5ldyBtYWNyb3MuCgkoZW1pdF9ibG9ja19tb3ZlKTogVXNlIG5ldyBtYWNyb3MuCgkoY2xlYXJfYnlfcGllY2VzKTogVXNlIG5ldyBtYWNyb3MuCgkoY2xlYXJfc3RvcmFnZSk6IFVzZSBuZXcgbWFjcm9zLgoJKGVtaXRfcHVzaF9pbnNuKTogVXNlIG5ldyBtYWNyb3MuCgkoZXhwYW5kX2V4cHIpOiBVc2UgbmV3IG1hY3Jvcy4KCSogY29uZmlnL3NoL3NoLmggKFVTRV9MT0FEX1BPU1RfSU5DUkVNRU5ULCBVU0VfTE9BRF9QUkVfREVDUkVNRU5UKToKCURlZmluZS4KCShVU0VfU1RPUkVfUE9TVF9JTkNSRU1FTlQsIFVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVmaW5lLgoJKE1PVkVfQllfUElFQ0VTX1ApOiBEZWZpbmUgYmFzZWQgb24gYWxpZ25tZW50IGFuZCBUQVJHRVRfU01BTExDT0RFLgoJKE1PVkVfTUFYX1BJRUNFUyk6IE1vdmUgOCBieXRlcyBvbiBTSDQuCgkqIHRtLnRleGkoTU9WRV9CWV9QSUVDRVNfUCwgTU9WRV9NQVhfUElFQ0VTLCBVU0VfTE9BRF9QT1NUX0lOQ1JFTUVOVCwKCVVTRV9MT0FEX1BSRV9ERUNSRU1FTlQsIFVTRV9TVE9SRV9QT1NUX0lOQ1JFTUVOVCwKCVVTRV9TVE9SRV9QUkVfREVDUkVNRU5UKTogRGVzY3JpYmUgbmV3IG1hY3Jvcy4KClRodSBKYW4gMjEgMTQ6MTM6MzEgMTk5OSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiB2YXJhc20uYyAob3V0cHV0X2NvbnN0YW50X3Bvb2wpOiBVc2UgZmxvb3JfbG9nMiBpbnN0ZWFkIG9mCglleGFjdF9sb2cyIGZvciBBU01fT1VUUFVUX0FMSUdOLgoKCSogc3Rvci1sYXlvdXQuYyAobGF5b3V0X3R5cGUpOiBEbyBtYWNoaW5lLWRlcGVuZGVudCBleHRyYSBhbGlnbm1lbnQuCgoJKiBlbWl0LXJ0bC5jIChvcGVyYW5kX3N1YndvcmQpOiBIYW5kbGUgY2FzZSB3aGVuIGEgc3Vid29yZCBvdXRzaWRlCgl0aGUgb3BlcmFuZC4KCgkqIHRtLnRleGkgKFJPVU5EX1RZUEVfe1NJWkUsQUxJR059KTogTW9yZSBhY2N1cmF0ZSBkZXNjcmlwdGlvbnMgb2YKCXRoZSBtYWNyb3MuCgpUaHUgSmFuIDIxIDAxOjU5OjMwIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjc2UuYyAoZm9sZF9ydHgpOiBSZXZlcnQgMjkgRGVjIGNoYW5nZS4KCShjc2VfaW5zbik6IFJldmVydCAxMiBKYW4gY2hhbmdlLgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKTogRG9uJ3QgZW1pdCBDT05TVCBhcm91bmQgQ09OU1RBTlRfUF9SVFguCgkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcyk6IFJldmVydCAyOSBEZWMgY2hhbmdlLgoJKiBydGwuZGVmOiBMaWtld2lzZS4KCSogcnRsLmggKENPTlNUQU5UX1ApOiBMaWtld2lzZS4KCgkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc24pOiBOZXZlciB0cnkgdG8gZmx1c2ggQ09OU1RBTlRfUF9SVFgKCXRvIG1lbW9yeS4KCSogcmVjb2cuYyAoaW1tZWRpYXRlX29wZXJhbmQpOiBBY2NlcHQgQ09OU1RBTlRfUF9SVFguCgkqIGFscGhhLmMgKGlucHV0X29wZXJhbmQpOiBMaWtld2lzZS4KCSogYzR4LmMgKGNvbnN0X29wZXJhbmQpOiBMaWtld2lzZS4KCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogVXNlIHJlZ2lzdGVyX29wZXJhbmQKCWluc3RlYWQgb2YgYXJpdGhfb3BlcmFuZCwgd2hpY2ggZG9lcyBub3QgZXhpc3QuCgoJKiAxNzUwYS5oOiBGaXggY29tbWVudCBjbG9zdXJlLgoJKiBhMjlrLmMgKGEyOWtfc2V0X21lbWZsYWdzKTogRml4IHR5cG8gaW4gMTkgSmFuIGNoYW5nZS4KCSogYXJjLm1kIChvbmVfY21wbHNpMl9zZXRfY2NfaW5zbik6IEZpeCBzZXQgbW9kZSBtaXNtYXRjaC4KCSogYXJtLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEZpeCB0eXBvLgoJKiBpMzcwLm1kIChhbm9uIG11bHQgYW5kIGRpdiBwYXR0ZXJucyk6IEZpeCBzZXQgbW9kZSBtaXNtYXRjaC4KCSogaTg2MC5jIChvdXRwdXRfZGVsYXllZF9icmFuY2gpOiBGaXggb3BlcmFuZHMgdG8gY29uc3RyYWluX29wZXJhbmRzLgoJKG91dHB1dF9kZWxheV9pbnNuKTogTGlrZXdpc2UuCgkqIG04OGsubWQgKGFub24gcm90YXRlIGluc25zKTogRml4IHNldCBtb2RlIG1pc21hdGNoLgoJKGFub24gQkxLbW9kZSBtb3Zlcyk6IENvbW1vbml6ZSBhbmQgZml4IHNldCBtb2RlIG1pc21hdGNoZXMuCgkqIG5zMzJrLm1kICh1ZGl2bW9kZGlbc2hxXWk0X2ludGVybmFsKTogRml4IG1vZGUgbWlzbWF0Y2guCgkqIHJvbXAubWQgKG1vdmRmKTogRml4IHR5cG8uCgpUaHUgSmFuIDIxIDAwOjI5OjM1IDE5OTkgIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiBNYWtlZmlsZS5pbiAoaW5zdGFsbC1jb21tb24pOiBSZW1vdmUgZXh0cmFuZW91cyBjaG1vZCBmb3IgZ2NvdgoJaW5zdGFsbC4KCldlZCBKYW4gMjAgMTg6MTU6MDggMTk5OSAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZnVuY3Rpb24uYyAoYXNzaWduX3Bhcm1zKTogU2F2ZSBhbmQgcmVzdG9yZSBzZXR0aW5nIG9mCglUUkVFX1VTRUQgKHBhcm0pLgoKV2VkIEphbiAyMCAxMjo1MTo0MiAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogYXJtLm1kOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUyB3aGVyZSBhcHByb3ByaWF0ZSB0aHJvdWdob3V0LgoJUGFzcyBNRU1fU0NBTEFSX1AgdG8gYXJtX2dlbl9zdG9yZV9tdWx0aXBsZSB3aGVyZSBhcHByb3ByaWF0ZS4KClR1ZSBKYW4gMTkgMjE6MjA6NTIgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlY29nLmMgKHBvcF9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgoJKiByZWNvZy5oIChwb3Bfb3BlcmFuZCk6IERlY2xhcmUgaXQuCgkqIGdlbnJlY29nLmMgKHByZWRzKTogRGVmaW5lIGl0LgoKCSogZXhwci5jIChkb19qdW1wX2Zvcl9jb21wYXJlKTogSGFuZGxlIGNvbmRpdGlvbmFsIGJyYW5jaCBleHBhbmRlcnMKCWVtaXR0aW5nIG11bHRpcGxlIGp1bXAgaW5zdHJ1Y3Rpb25zLgoJKiBqdW1wLmMgKGNvbmRqdW1wX2xhYmVsKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAoY29uZGp1bXBfbGFiZWwpOiBEZWNsYXJlIGl0LgoKVHVlIEphbiAxOSAyMTowODoyMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChlbWl0X21vdmVfaW5zbl8xKTogUmV2ZXJ0IDE3IERlYyBjaGFuZ2UuICBEb24ndCBlbWl0CgljbG9iYmVyIGR1cmluZyBvciBhZnRlciByZWxvYWQuCgpUdWUgSmFuIDE5IDE2OjU2OjAzIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnZW5vdXRwdXQuYyAobmFtZV9mb3JfaW5kZXgpOiBOZXcgZnVuY3Rpb24uCgkoc2Nhbl9vcGVyYW5kcywgdmFsaWRhdGVfaW5zbl9hbHRlcm5hdGl2ZXMpOiBVc2UgaXQuCgkqIGdlbnJlY29nLmMgKGluc25fbmFtZV9wdHJfc2l6ZSk6IE5ldyB2YXJpYWJsZS4KCShtYWtlX2luc25fc2VxdWVuY2UpOiBGaWxsIGluIGluc25fbmFtZV9wdHIuCgkobWVyZ2VfdHJlZXMpOiBVc2UgaXQuCgpUdWUgSmFuIDE5IDE2OjM3OjM2IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBpMzg2L2lzYy5oIChUQVJHRVRfREVGQVVMVCk6IERlZmluZSBzeW1ib2xpY2x5LgoJKiBpMzg2L2lzY2NvZmYuaCwgaTM4Ni9uZXh0LmgsIGkzODYvc2NvLmgsIGkzODYvc2NvNS5oOiBMaWtld2lzZS4KCSogaTM4Ni9zY29kYnguaCwgaTM4Ni9zZXF1ZW50LmgsIGkzODYudW5peC5oOiBMaWtld2lzZS4KClR1ZSBKYW4gMTkgMTU6MDA6MTAgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChOVU1fU1RPUkVTKTogRGVsZXRlLgoJKGxvb3Bfc3RvcmVfbWVtcyk6IFR1cm4gaW50byBhbiBFWFBSX0xJU1Qgb2YgTUVNcy4KCShwcmVzY2FuX2xvb3ApOiBQcm9wZXJseSBpbml0aWFsaXplIGxvb3BfbWVtc19pZHguCgkobm90ZV9hZGRyX3N0b3JlZCk6IFNpbXBsaWZ5IHVzaW5nIGxpc3Qgc3RydWN0dXJlIGluc3RlYWQgb2YKCWZpeGVkIHNpemVkIGFycmF5LgoJKGludmFyaWFudF9wLCBjaGVja19kYnJhX2xvb3AsIGxvYWRfbWVtcyk6IFNpbWlsYXJseS4KCgkqIGZsb3cuYyAoaW52YWxpZGF0ZV9mcm9tX2F1dG9pbmMpOiBOZXcgZnVuY3Rpb24uCgkobWFya19zZXRfMSwgbWFya191c2VkX3JlZ3MpOiBVc2UgaXQuCgoJKiBNYWtlZmlsZS5pbiAocHJvdG9pemUubywgdW5wcm90b2l6ZS5vKTogRGVwZW5kIG9uIE1ha2VmaWxlLgoKMTk5OS0wMS0xOSAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBpbnZva2UudGV4aSAoLW1sb25nLWRvdWJsZS02NCk6IE5ldyBvcHRpb24gZGVzY3JpcHRpb24uCgoxOTk5LTAxLTE5ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBsaWJnY2MyLmM6IENoYW5nZSBhbGwgdXNlcyBvZiBMT05HX0RPVUJMRV9UWVBFX1NJWkUgdG8KCUxJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFLgoJKExJQkdDQzJfTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogTmV3LiAgU2V0IHRvIExPTkdfRE9VQkxFX1RZUEVfU0laRQoJaWYgbm90IGRlZmluZWQuCgkqIGk5NjAvaTk2MC5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZSB0byBtbnVtZXJpY3MuCgkoQ1BQX1NQRUNTKTogQWRkIC1tbG9uZy1kb3VibGUtNjQgc3VwcG9ydC4KCShUQVJHRVRfRkxBR19MT05HX0RPVUJMRV82NCwgVEFSR0VUX0xPTkdfRE9VQkxFXzY0KTogTmV3LgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbWxvbmctZG91YmxlLTY0IHN1cHBvcnQuCgkoTE9OR19ET1VCTEVfVFlQRV9TSVpFKTogTGlrZXdpc2UuCgkoTElCR0NDMl9MT05HX0RPVUJMRV9UWVBFX1NJWkUpOiBEZWZpbmUuCgkqIGk5NjAvdng5NjAtY29mZi5oIChNVUxUSUxJQl9ERUZBVUxUUyk6IERlZmluZSB0byBtc29mdC1mbG9hdC4KCShDUFBfU1BFQ1MpOiBBZGQgLW1sb25nLWRvdWJsZS02NCBzdXBwb3J0LgoJKiBpOTYwL3QtOTYwYmFyZSAoTVVMVElMSUJfT1BUSU9OUyk6IEFkZCBtbG9uZy1kb3VibGUtNjQuCgkoTVVMVElMSUJfRElSTkFNRVMpOiBBZGQgbGQ2NC4KCSogaTk2MC90LXZ4d29ya3M5NjAgKE1VTFRJTElCX09QVElPTlMsIE1VTFRJTElCX0RJUk5BTUVTKTogTGlrZXdpc2UuCgpUdWUgSmFuIDE5IDExOjU0OjA0IDE5OTkgIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogU3RyaXAgYSBUQVJHRVRfRVhQUiBpZiB3ZSdyZSBwYXNzaW5nIGJ5CglpbnZpc2libGUgcmVmZXJlbmNlLgoKVHVlIEphbiAxOSAxNDo1MTozNiAxOTk5ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuYyAob2Zmc2V0dGFibGVfYWRkcl9vcGVyYW5kKTogRGVsZXRlLgoJKG9mZnNldHRhYmxlX21lbV9vcGVyYW5kKTogTmV3IGZ1bmN0aW9uLgoJKiByczYwMDAuaCAoUFJFRElDQVRFX0NPREVTKTogUmVmbGVjdCBmdW5jdGlvbiBjaGFuZ2UuCgkoUlM2MDAwX1NBVkVfVE9DKTogUmVwcmVzZW50IGFkZHJlc3MgYXMgTUVNLgoJKiB3aW4tbnQuaCAoUlM2MDAwX1NBVkVfVE9DKTogU2FtZS4KCSogcnM2MDAwLm1kIChpbmRpcmVjdCBjYWxscyk6IENoYW5nZSBvZmZzZXR0YWJsZSBhZGRyZXNzIHBhcmFtZXRlcgoJdG8gb2Zmc2V0dGFibGUgbWVtb3J5IHBhcmFtZXRlci4KClR1ZSBKYW4gMTkgMTA6MjQ6NTMgMTk5OSAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHJ0bC5oIChydHhfZGVmKTogVXBkYXRlIGRvY3VtZW50YXRpb24uCgkoTUVNX0lOX1NUUlVDVF9QKTogTGlrZXdpc2UuCgkoTUVNX1NDQUxBUl9QKTogTmV3IG1hY3JvLgoJKE1FTV9DT1BZX0FUVFJJQlVURVMpOiBMaWtld2lzZS4KCShNRU1fU0VUX0lOX1NUUlVDVF9QKTogTGlrZXdpc2UuCgkqIHJ0bC50ZXhpIChNRU1fU0NBTEFSX1ApOiBEb2N1bWVudC4KCSogYWxpYXMuYyAoY2Fub25fcnR4KTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkoZml4ZWRfc2NhbGFyX2FuZF92YXJ5aW5nX3N0cnVjdF9wKTogTmV3IGZ1bmN0aW9uLiAgVXNlCglNRU1fU0NBTEFSX1AgcmF0aGVyIHRoYW4gIU1FTV9JTl9TVFJVQ1RfUC4KCShhbGlhc2VzX2V2ZXJ5dGhpbmdfcCk6IExpa2V3aXNlLgoJKHRydWVfZGVwZW5kZW5jZSk6IFVzZSB0aGVtLgoJKHdyaXRlX2RlcGVuZGVuY2VfcCk6IE5ldyBmdW5jdGlvbiwgY29udGFpbmluZyBjb2RlIGNvbW1vbiB0bwoJYW50aV9kZXBlbmRlbmNlIGFuZCBvdXRwdXRfZGVwZW5kZW5jZS4KCShhbnRpX2RlcGVuZGVuY2UpOiBVc2UgaXQuCgkob3V0cHV0X2RlcGVuZGVuY2UpOiBMaWtld2lzZS4KCSogY2FsbHMuYyAoc2F2ZV9maXhlZF9hcmd1bWVudF9hcmVhKTogRG9uJ3QgY2xlYXIKCU1FTV9JTl9TVFJVQ1RfUC4KCShleHBhbmRfY2FsbCk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKGVtaXRfbGlicmFyeV9jYWxsKTogRG9uJ3QgY2xlYXIgTUVNX0lOX1NUUlVDVF9QLgoJKGVtaXRfbGlicmFyeV9jYWxsX3ZhbHVlKTogTGlrZXdpc2UuCgkoc3RvcmVfb25lX2FyZyk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3J0eCk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKG1ha2VfZXh0cmFjdGlvbik6IExpa2V3aXNlLgoJKHNpbXBsaWZ5X3NoaWZ0X2NvbnN0KTogTGlrZXdpc2UuCgkoZ2VuX2xvd3BhcnRfZm9yX2NvbWJpbmUpOiBMaWtld2lzZS4KCSogY3NlLmMgKGdlbl9sb3dwYXJ0X2lmX3Bvc3NpYmxlKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGVtaXQtcnRsLmMgKG9wZXJhbmRfc3Vid29yZCk6IExpa2V3aXNlLgoJKGNoYW5nZV9hZGRyZXNzKTogTGlrZXdpc2UuCgkqIGV4cGxvdy5jIChzdGFiaWxpemUpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogZXhwci5jIChwcm90ZWN0X2Zyb21fcXVldWUpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCShlbWl0X2dyb3VwX3N0b3JlKTogVXNlIE1FTV9TRVRfSU5fU1RSVUNUX1AuCgkoY29weV9ibGttb2RlX2Zyb21fcmVnKTogTGlrZXdpc2UuCgkoc3RvcmVfZmllbGQpOiBMaWtld2lzZS4KCShleHBhbmRfZXhwcik6IFJlbW92ZSBib2d1cyBndWVzc3dvcmsgc2V0dGluZyBNRU1fSU5fU1RSVUNUX1AKCWhldXJpc3RpY2FsbHkuICBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShnZXRfbWVtb3J5X3J0eCk6IExpa2V3aXNlLgoJKiBmaW5hbC5jIChhbHRlcl9zdWJyZWcpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogZnVuY3Rpb24uYyAoYXNzaWduX3N0YWNrX3RlbXApOiBDbGVhciBNRU1fU0NBTEFSX1AgYW5kCglNRU1fQUxJQVNfU0VUIG9uIG5ld2x5IHJldHVybmVkIE1FTXMuCgkoYXNzaWduX3RlbXApOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShwdXRfcmVnX2ludG9fc3RhY2spOiBMaWtld2lzZS4KCShmaXh1cF92YXJfcmVmczEpOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCShnZW5fbWVtX2FkZHJlc3NvZik6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKGFzc2lnbl9wYXJtcyk6IExpa2V3aXNlLgoJKGV4cGFuZF9mdW5jdGlvbik6IExpa2V3aXNlLgoJKiBpbnRlZ3JhdGUuYyAoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IExpa2V3aXNlLgoJKGNvcHlfcnR4X2FuZF9zdWJzdGl0dXRlKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGxvb3AuYyAobm90ZV9hZGRyX3N0b3JlZCk6IFJlbW92ZSBjaGVjayBvbiBNRU1fSU5fU1RSVUNUX1AuCgkqIG9wdGFicy5jIChnZW5fbW92ZV9pbnNuKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBQcmludCAvZiBmb3IgZnJhbWVfcmVsYXRlZC4KCSogcmVjb2cuYyAodmFsaWRhdGVfcmVwbGFjZV9ydHhfMSk6IFVzZSBNRU1fQ09QWV9BVFRSSUJVVEVTLgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IENvcHkgTUVNX1NDQUxBUl9QIGFzIHdlbGwuCgkqIHN0bXQuYyAoZXhwYW5kX2RlY2wpOiBVc2UgTUVNX1NFVF9JTl9TVFJVQ1RfUC4KCShleHBhbmRfYW5vbl91bmlvbl9kZWNsKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIHZhcmFzbS5jIChtYWtlX2RlY2xfcnRsKTogVXNlIE1FTV9TRVRfSU5fU1RSVUNUX1AuCgkob3V0cHV0X2NvbnN0YW50X2RlZik6IExpa2V3aXNlLgoJKiBhMjlrLmMgKGEyOWtfc2V0X21lbWZsYWdzXzEpOiBUYWtlIHNjYWxhcl9wLgoJU2V0IE1FTV9TQ0FMQVJfUC4KCShhMjlrX3NldF9tZW1mbGFncyk6IFVzZSBpdC4KCSogYWxwaGEuYyAoZ2V0X2FsaWduZWRfbWVtKTogVXNlIE1FTV9DT1BZX0FUVFJJQlVURVMuCgkqIGM0eC5jIChjNHhfc2Nhbl9mb3JfbGQpOiBMaWtld2lzZS4KCSogaDgzMDAuYyAoZml4X2JpdF9vcGVyYW5kKTogTGlrZXdpc2UuCgkqIG04OGsuYyAobGVnaXRpbWl6ZV9hZGRyZXNzKTogTGlrZXdpc2UuCgkoYmxvY2tfbW92ZV9sb29wKTogTGlrZXdpc2UuCgkoYmxvY2tfbW92ZV9ub19sb29wKTogTGlrZXdpc2UuCgkoYmxvY2tfbW92ZV9zZXF1ZW5jZSk6IExpa2V3aXNlLgoJKG04OGtfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKiBtaXBzL2FiaTY0LmggKFNFVFVQX0lOQ09NSU5HX1ZBUkFSR1MpOiBMaWtld2lzZS4KCSogcnM2MDAwLmMgKGV4cGFuZF9ibG9ja19tb3ZlX2luc24pOiBVc2UgTUVNX0NPUFlfQVRUUklCVVRFUy4KCSogc2guYyAoc2hfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBNRU1fU0VUX0lOX1NUUlVDVF9QLgoJKiBhcm0uaCAoYXJtX2dlbl9sb2FkX211bHRpcGxlKTogVGFrZSBzY2FsYXJfcC4KCShhcm1fc3RvcmVfbG9hZF9tdWx0aXBsZSk6IExpa2V3aXNlLgoJKiBhcm0uYyAoYXJtX2dlbl9sb2FkX211bHRpcGxlKTogTGlrZXdpc2UuCgkoYXJtX2dlbl9zdG9yZV9tdWx0aXBsZSk6IExpa2V3aXNlLgoJKGFybV9nZW5fbW92c3RycWkpOiBUcmVhdCBNRU1fU0NBTEFSX1AgbGlrZSBNRU1fSU5fU1RSVUNUX1AuCgpUdWUgSmFuIDE5IDEyOjMwOjM3IDE5OTkgIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIG9wdGFicy5jIChlbWl0X2xpYmNhbGxfYmxvY2spOiBBZGQgYSBSRUdfRUhfUkVHSU9OIHJlZyBub3RlIHRvIGFsbAoJY2FsbHMgd2l0aGluIGEgbGliY2FsbCBibG9jayB0byBpbmRpY2F0ZSBubyB0aHJvd3MgYXJlIHBvc3NpYmxlLgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzLCBmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG9uJ3QgbG9vayBmb3IKCWxpYmNhbGwgYmxvY2tzLiBEb24ndCBhZGQgZWRnZXMgdG8gZXhjZXB0aW9uIGhhbmRsZXJzIGlmIHdlIHNlZQoJYSBSRUdfRUhfUkVHSU9OIG5vdGUgd2l0aCBhIHZhbHVlIG9mIDAuCgkobWFrZV9lZGdlcyk6IE92ZXJyaWRlIGFjdGl2ZV9laF9yZWdpb24gdmVjdG9yIGlmIHRoZSBjYWxsIGhhcyBhIG5vdGUKCWluZGljYXRpbmcgdGhlIGNhbGwgZG9lcyBub3QgdGhyb3cuCgoxOTk5LTAxLTE5ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9yczYwMDAvc3lzdjQuaCAoQ0MxX1NQRUMpOiBGaXggY29ycmVjdCBudW1iZXJzIG9mIHt9LgoKVHVlIEphbiAxOSAwNjoyNjozMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoY2NjcC5vLCBjcHBsaWIubyk6IERlcGVuZCBvbiBNYWtlZmlsZS4KCk1vbiBKYW4gMTggMDk6NTY6NDEgMTk5OSAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaW52b2tlLnRleGkgKEMrKyBEaWFsZWN0IE9wdGlvbnMpOiBEb2N1bWVudCAtZm5vLXJ0dGkuCgoxOTk5LTAxLTE4ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqICBpbnZva2UudGV4aSAoLW1jcHU9NzQwLCAtbWNwdT03NTApOiBOZXcgb3B0aW9ucy4KCSgtbShuby0pbXVsdGlwbGUsIC1tKG5vLSlzdHJpbmcpOiBEZXNjcmliZSBjYXNlcyBmb3IgUFBDNzQwICYKCVBQQzc1MC4KCjE5OTktMDEtMTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmggKHtBU00sQ1BQfV9DUFVfU1BFQyk6IEFkZCBzdXBwb3J0IGZvciBhbGwgbWFjaGluZXMKCXN1cHBvcnRlZCB3aXRoIC1tY3B1PXh4eC4KCShwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfUFBDNzUwLgoJKEFESlVTVF9QUklPUklUWSk6IENhbGwgcnM2MDAwX2FkanVzdF9wcmlvcml0eS4KCShSVFhfQ09TVFMpOiBTdXBwbHkgY29zdHMgZm9yIDc1MCBtdWx0aXBseS9kaXZpZGUgb3BlcmF0aW9ucy4KCShyczYwMDBfYWRqdXN0X3ByaW9yaXR5KTogQWRkIGRlY2xhcmF0aW9uLgoKCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogLW1jcHU9ezc1MCw3NDB9IG5vdyBzZXRzIHRoZQoJcHJvY2Vzc29yIHR5cGUgYXMgNzUwLCBub3QgNjAzLiAgQWxsb3cgLW1tdWx0aXBsZSBhbmQgLW1zdHJpbmcgb24KCWxpdHRsZSBlbmRpYW4gNzUwIHN5c3RlbXMuCgkocnM2MDAwX2FkanVzdF9wcmlvcml0eSk6IFN0dWIgZm9yIG5vdy4KCShnZXRfaXNzdWVfcmF0ZSk6IFRoZSBQb3dlclBDIDc1MCBjYW4gaXNzdWUgMiBpbnN0cnVjdGlvbnMvY3ljbGUuCgoJKiByczYwMDAubWQgKGZ1bmN0aW9uL2NwdSBhdHRyaWJ1dGVzKTogQWRkIGluaXRpYWwgcHBjNzUwIHN1cHBvcnQuCgoJKiBzeXN2NC5oIChTVFJJQ1RfQUxJR05NRU5UKTogRG9uJ3QgZm9yY2Ugc3RyaWN0IGFsaWdubWVudCBpZgoJbGl0dGxlIGVuZGlhbi4KCShDQzFfU1BFQyk6IFBhc3MgLW1zdHJpY3QtYWxpZ24gaWYgbGl0dGxlIGVuZGlhbiwgYW5kIG5vdAoJb3ZlcnJpZGRlbi4KCShDQzFfRU5ESUFOX3tMSVRUTEUsQklHLERFRkFVTFR9X1NQRUMpOiBFbmRpYW4gc3BlY2lmaWMgY29uZmlncy4KCShTVUJUQVJHRVRfRVhUUkFfU1BFQ1MpOiBBZGQgY2MxIGVuZGlhbiBzcGVjcy4KCgkqIHtzeXN2NCxlYWJpfWxlLmggKENDMV9FTkRJQU5fREVGQVVMVF9TUEVDKTogT3ZlcnJpZGUsIGRlZmF1bHQgaXMKCWxpdHRsZSBlbmRpYW4uCgoJKiB0LXBwY2dhcyAoTVVMVElMSUJfKik6IERlbGV0ZSBvYnNvbGV0ZSBTb2xhcmlzIG11bHRpbGlicy4KCk1vbiBKYW4gMTggMTI6MDM6MDggMTk5OSAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBjb25maWcvbWlwcy9taXBzLm1kIChkaXZfdHJhcCk6IFNwbGl0IGRpdl90cmFwX21pcHMxNgoJZnJvbSBkaXZfdHJhcC4KCShkaXZfdHJhcF9ub3JtYWwsZGl2X3RyYXBfbWlwczE2KTogQ29ycmVjdCB0aGUgbGVuZ3RoIGF0dHJpYnV0ZXMuCgpNb24gSmFuIDE4IDExOjQ4OjI4IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IFF1YWxpZnkgYSBjaGFyKiB3aXRoIHRoZSBgY29uc3QnIGtleXdvcmQuCglJbnN0ZWFkIG9mIHdyaXRpbmcgdG8gY29uc3QgY2hhciAqYnVmIGRpcmVjdGx5LCB1c2UgYSBub24tY29uc3QKCXZhcmlhYmxlIGB3YnVmJyB0byBhbGxvY2F0ZSBhbmQgd3JpdGUgYSBzdHJpbmcsIHRoZW4gc2V0IGJ1ZiA9IHdidWYuCgoJKiBjcHB1bHAuYyAodXNlcl9sYWJlbF9wcmVmaXgpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JwoJa2V5d29yZC4KCgkqIGR5bi1zdHJpbmcuYyAoZHluX3N0cmluZ19hcHBlbmQpOiBMaWtld2lzZS4KCgkqIGR5bi1zdHJpbmcuaCAoZHluX3N0cmluZ19hcHBlbmQpOiBMaWtld2lzZS4KCgkqIGZpbmFsLmMgKGVuZF9maW5hbCwgb3V0cHV0X29wZXJhbmRfbG9zc2FnZSwgYXNtX2ZwcmludGYpOiBMaWtld2lzZS4KCgkqIG91dHB1dC5oIChlbmRfZmluYWwsIG91dHB1dF9vcGVyYW5kX2xvc3NhZ2UsIGFzbV9mcHJpbnRmLAoJbmFtZWRfc2VjdGlvbiwgZGVjb2RlX3JlZ19uYW1lLCBtYWtlX2RlY2xfcnRsLCB1c2VyX2xhYmVsX3ByZWZpeCk6CglMaWtld2lzZS4KCgkqIHByb2ZpbGUuYyAoaW5pdF9icmFuY2hfcHJvYik6IExpa2V3aXNlLgoKCSogdG9wbGV2LmMgKHNldF90YXJnZXRfc3dpdGNoLCB2bWVzc2FnZSwKCXZfbWVzc2FnZV93aXRoX2ZpbGVfYW5kX2xpbmUsIHZfbWVzc2FnZV93aXRoX2RlY2wsCgl2X2Vycm9yX3dpdGhfZmlsZV9hbmRfbGluZSwgdl9lcnJvcl93aXRoX2RlY2wsIHZfZXJyb3JfZm9yX2FzbSwKCXZlcnJvciwgdmZhdGFsLCB2X3dhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLCB2X3dhcm5pbmdfd2l0aF9kZWNsLAoJdl93YXJuaW5nX2Zvcl9hc20sIHZ3YXJuaW5nLCB2cGVkd2Fybiwgdl9wZWR3YXJuX3dpdGhfZGVjbCwKCXZfcGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUsIHZzb3JyeSwgdl9yZWFsbHlfc29ycnksCglvcGVuX2R1bXBfZmlsZSwgZHVtcF9ydGwsIGNsZWFuX2R1bXBfZmlsZSwKCXByaW50X3ZlcnNpb24sIHByaW50X3NpbmdsZV9zd2l0Y2gsIHByaW50X3N3aXRjaF92YWx1ZXMsCglkdW1wX2Jhc2VfbmFtZSwgZGVidWdfYXJncywgbGFuZ19pbmRlcGVuZGVudF9vcHRpb25zLAoJdXNlcl9sYWJlbF9wcmVmaXgsIGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zLCB0YXJnZXRfc3dpdGNoZXMsCgl0YXJnZXRfb3B0aW9ucywgcHJpbnRfdGltZSwgcGZhdGFsX3dpdGhfbmFtZSwgZmF0YWxfaW9fZXJyb3IsCglmYXRhbF9pbnNuLCBkZWZhdWx0X3ByaW50X2Vycm9yX2Z1bmN0aW9uLCBwcmludF9lcnJvcl9mdW5jdGlvbiwKCXJlcG9ydF9lcnJvcl9mdW5jdGlvbiwgZXJyb3Jfd2l0aF9maWxlX2FuZF9saW5lLCBlcnJvcl93aXRoX2RlY2wsCgllcnJvcl9mb3JfYXNtLCBlcnJvciwgZmF0YWwsIHdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLAoJd2FybmluZ193aXRoX2RlY2wsIHdhcm5pbmdfZm9yX2FzbSwgd2FybmluZywgcGVkd2FybiwKCXBlZHdhcm5fd2l0aF9kZWNsLCBwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSwgc29ycnksCglyZWFsbHlfc29ycnksIGJvdGNoLCBvdXRwdXRfcXVvdGVkX3N0cmluZywgb3V0cHV0X2ZpbGVfZGlyZWN0aXZlLAoJb3Blbl9kdW1wX2ZpbGUsIHJlc3Rfb2ZfZGVjbF9jb21waWxhdGlvbiwgZGlzcGxheV9oZWxwLCBtYWluKToKCUxpa2V3aXNlLgoKCSogdG9wbGV2LmggKHByaW50X3RpbWUsIGZhdGFsLCBmYXRhbF9pb19lcnJvciwgcGZhdGFsX3dpdGhfbmFtZSwKCWZhdGFsX2luc24sIHdhcm5pbmcsIGVycm9yLCBwZWR3YXJuLCBwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSwKCXdhcm5pbmdfd2l0aF9maWxlX2FuZF9saW5lLCBlcnJvcl93aXRoX2ZpbGVfYW5kX2xpbmUsIHNvcnJ5LAoJcmVhbGx5X3NvcnJ5LCBkZWZhdWx0X3ByaW50X2Vycm9yX2Z1bmN0aW9uLCByZXBvcnRfZXJyb3JfZnVuY3Rpb24sCglyZXN0X29mX2RlY2xfY29tcGlsYXRpb24sIHBlZHdhcm5fd2l0aF9kZWNsLCB3YXJuaW5nX3dpdGhfZGVjbCwKCWVycm9yX3dpdGhfZGVjbCwgZXJyb3JfZm9yX2FzbSwgd2FybmluZ19mb3JfYXNtLCBvdXRwdXRfcXVvdGVkX3N0cmluZywKCW91dHB1dF9maWxlX2RpcmVjdGl2ZSwgYm90Y2gpOiBMaWtld2lzZS4KCgkqIHRyZWUuaCAobWFrZV9kZWNsX3J0bCk6IExpa2V3aXNlLgoKCSogdmFyYXNtLmMgKHN0cmlwX3JlZ19uYW1lLCBuYW1lZF9zZWN0aW9uLCBkZWNvZGVfcmVnX25hbWUsCgltYWtlX2RlY2xfcnRsKTogTGlrZXdpc2UuCgpNb24gSmFuIDE4IDExOjM1OjQ5IDE5OTkgIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKFRDTF9MSUJSQVJZKTogVXNlICdjZCcgdG8gZmluZCB0aGUgbGlicmFyeQoJZGlyZWN0b3J5IGxvZ2ljYWxseSByYXRoZXIgdGhhbiBwaHlzaWNhbGx5LgoKTW9uIEphbiAxOCAwOTowNTozNyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBsb29wLmMgKGluc2VydF9iY3QpOiBIaWRlIHRoZSBkZWZpbml0aW9uIG9mIHZhcmlhYmxlcwoJYGluY3JlbWVudF9kaXJlY3Rpb24nLCBgY29tcGFyZV9kaXJlY3Rpb24nLCBgYWRkX2l0ZXJhdGlvbicgYW5kCglgbG9vcF92YXJfbW9kZScuCgoJKiByZWNvZy5jIChtb2RlX2RlcGVuZGVudF9hZGRyZXNzX3ApOiBNYXJrIHBhcmFtZXRlciBgYWRkcicgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4gIE1hcmsgbGFiZWwgYHdpbicgd2l0aCBBVFRSSUJVVEVfVU5VU0VEX0xBQkVMLgoJKG1vZGVfaW5kZXBlbmRlbnRfb3BlcmFuZCk6IE1hcmsgbGFiZWwgYGxvc2UnIHdpdGgKCUFUVFJJQlVURV9VTlVTRURfTEFCRUwuCgoJKiByZWdjbGFzcy5jIChuX29jY3VycmVuY2VzKTogUmVtb3ZlIHByb3RvdHlwZSBhbmQgZGVmaW5pdGlvbi4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogTWFyayB2YXJpYWJsZSBgdGVtJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDYXN0IHRoZSBmaXJzdCB0d28gYXJndW1lbnRzIG9mIGBiY29weScgdG8gUFRSLgoKCSogc2JpdG1hcC5jIChzYml0bWFwX2NvcHkpOiBMaWtld2lzZS4KCgkqIHNjYW4tZGVjbHMuYyAoc2Nhbl9kZWNscyk6IEhpZGUgbGFiZWwgYGhhbmRsZV9jb21tYScuCgoJKiB0b3BsZXYuYyAob3V0cHV0X2xhbmdfaWRlbnRpZnkpOiBNYXJrIHByb3RvdHlwZSB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKCSogdHJlZS5jIChtYWtlX25vZGUpOiBDYXN0IHRoZSBmaXJzdCBhcmd1bWVudCBvZiBgYnplcm8nIHRvIFBUUi4KCShtYWtlX3RyZWVfdmVjKTogTGlrZXdpc2UuCgkoYnVpbGQxKTogTGlrZXdpc2UuCgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhdGljX3NwYWNlKTogTWFyayB2YXJpYWJsZSBgdGVtJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKTW9uIEphbiAxOCAwNDoyODozNiAxOTk5ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogTWFrZWZpbGUuaW4gKEdDT1ZfSU5TVEFMTF9OQU1FKTogTmV3IG1hY3JvLgoJKGluc3RhbGwtY29tbW9uKTogVXNlIGl0LgoJKHVuaW5zdGFsbCk6IFVzZSBpdC4KCSh1bmluc3RhbGwpOiBVc2UgY29ycmVjdCBuYW1lcyBmb3IgcHJvdG9pemUgYW5kIHVucHJvdG9pemUuCgpNb24gSmFuIDE4IDAzOjUyOjU2IDE5OTkgIENocmlzdGlhbiBCcnVlbCAgPENocmlzdGlhbi5CcnVlbEBzdC5jb20+CgkJCSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChsYXN0X21lbV9zZXQpOiBEZWxldGUgdmFyaWFibGUuICBSZWZlcmVuY2VzIHJlbW92ZWQuCgkobWVtX3NldF9saXN0KTogTmV3IHZhcmlhYmxlLgoJKGxpZmVfYW5hbHlzaXMpOiBJbml0aWFsaXplIGFuZCBmaW5hbGl6ZSBhbGlhcyBhbmFseXNpcy4KCShwcm9wYWdhdGVfYmxvY2spOyBJbml0aWFsaXplIG1lbV9zZXRfbGlzdC4gIENsZWFyIGZvciBDQUxMX0lOU05zLgoJKGluc25fZGVhZF9wKTogRm9yIGEgc3RvcmUgdG8gbWVtb3J5LCBzZWFyY2ggdGhlIGVudGlyZSBtZW1fc2V0X2xpc3QKCWZvciBhIG1hdGNoLgoJKG1hcmtfc2V0XzEpOiBLaWxsIGVudHJpZXMgb24gdGhlIG1lbV9zZXRfbGlzdCBmb3IgYWxpYXNlZCB3cml0ZXMgb3IKCWNoYW5nZXMgdG8gdGhlaXIgYWRkcmVzc2VzLiAgQWRkIG5ldyBlbnRyaWVzIHRvIHRoZSBtZW1fc2V0X2xpc3QgZm9yCgltZW1vcnkgd3JpdGVzIHdyaXRlcy4KCShtYXJrX3VzZWRfcmVncyk6IEtpbGwgZW50cmllcyBvbiB0aGUgbWVtX3NldF9saXN0IHdoaWNoIG1heSBiZQoJcmVmZXJlbmNlZCBieSBhIGxvYWQgb3BlcmF0aW9uLgoKTW9uIEphbiAxOCAwMTowMTowMiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhbGlhcy5jIChiYXNlX2FsaWFzX2NoZWNrKTogQWRkIG1pc3NpbmcgcmV0dXJuIGZvciBkaWZmZXJpbmcKCXN5bWJvbHMgY2FzZS4KCk1vbiBKYW4gMTggMDA6MzY6MTMgMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBtaXBzLXRkdW1wLmMgKHByaW50X2ZpbGVfZGVzYyk6IEhhbmRsZSB1bmtub3duIGZpbGVuYW1lcyBhbmQKCW1pc3NpbmcgbG9jYWwgc3ltYm9scy4KClN1biBKYW4gMTcgMjE6MDQ6MzEgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGp1bXAuYyAocnR4X3JlbnVtYmVyZWRfZXF1YWxfcCk6IFNwZWNpYWwgY2FzZSBDT0RFX0xBQkVMLgoKCSogc3lzdGVtLmggKGJjb3B5KTogSW1wbGVtZW50IHdpdGggbWVtbW92ZSBub3QgbWVtY3B5LgoKU3VuIEphbiAxNyAxOToyMzoyMCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoY3BwdWxwLm8pOiBBZGQgZGVwZW5kZW5jaWVzLgoKCSogaTM4Ni5tZCAoaW50ZWdlciBjb25kaXRpb25hbCBtb3Zlcyk6IEFkZCBtaXNzaW5nIGVhcmx5Y2xvYmJlcnMuCgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzEpOiBVbmRvIEF1ZyAxOCBjaGFuZ2UuICBVcGRhdGUKCVJFR19OX0NBTExTX0NST1NTRUQgYW5kIFJFR19MSVZFX0xFTkdIIGlmIGFuZCBvbmx5IGlmIHdlIGNoYW5nZQoJd2hlcmUgYSByZWdpc3RlciBpcyBsaXZlLgoKU3VuIEphbiAxNyAwMzoyMDo0NyAxOTk5ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiByZWctc3RhY2suYyAoc3Vic3Rfc3RhY2tfcmVnc19wYXQpOiBBYm9ydCBpZiB0aGUgZGVzdGluYXRpb24KCW9mIGEgRlAgY29uZGl0aW9uYWwgbW92ZSBpcyBub3Qgb24gdGhlIEZQIHJlZ2lzdGVyIHN0YWNrLgoKU3VuIEphbiAxNyAwMToxNTowNCAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBKYW4gMTYgMjM6NDA6MzMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChyZWxvYWRfY3NlX3JlZ3NfMSk6IERvIG5vdCBjYWxsCglyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzIGZvciBhbiBpbnNuIHdpdGggYXNtIG9wZXJhbmRzLgoKCSogY2NjcC5jIChwcmludF9oZWxwKTogRml4IHR5cG9zLgoJKiBjcHBsaWIuYyAocHJpbnRfaGVscCk6IEZpeCB0eXBvcy4KCSogdG9wbGV2LmMgKGZfb3B0aW9zbik6IEZpeCB0eXBvcy4KCShkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IEZpeCB0eXBvcy4KClNhdCBKYW4gMTYgMjE6NDg6MTcgMTk5OSAgTWFyYyBFc3BpZSAgKE1hcmMuRXNwaWVAb3BlbmJzZC5vcmcpCgoJKiBnY2MuYyAoZG9fc3BlY18xKTogRml4IG9idmlvdXMgdHlwby4KClNhdCBKYW4gMTYgMTk6MzE6MDcgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IElmIGB3YXJuX3RyYWRpdGlvbmFsJywgd2FybiB3aGVuCglhIG5vbi1zdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb24gZm9sbG93cyBhIHN0YXRpYyBvbmUuCgoJKiBpbnZva2UudGV4aSAoLVd0cmFkaXRpb25hbCk6IERvY3VtZW50IHRoZSBleHRyYSBjaGVjayBub3cgZG9uZQoJYnkgdGhpcyBmbGFnLgoKU2F0IEphbiAxNiAxNToxMzo0NiAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAoc2hhZGQpOiBDcmVhdGUgc2hhZGQgaW5zbnMsIGV2ZW4gaWYgdGhlIHJlc3VsdCBvZiB0aGUgc2hpZnQgaXMKCW5lZWRlZCB3aXRob3V0IHRoZSBhZGRpdGlvbi4KClNhdCBKYW4gMTYgMTA6NDg6MTYgMTk5OSAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLm1kIChtb3ZkZiwgbW92c2YpOiBUZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Igbm9fbmV3X3BzZXVkb3MgbG9zc2FnZS4KCkZyaSBKYW4gMTUgMjM6NDQ6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHNwYXJjLmMgKHNwYXJjX2lzc3VlKTogQWRkIGh5cGVyc3BhcmMvc3BhcmNsaXRlODZ4IGVudHJpZXMuCgpGcmkgSmFuIDE1IDIyOjMwOjA0IDE5OTkgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5oIChDT05TVF9PS19GT1JfTEVUVEVSX1ApOiBEbyBub3QgYXNzdW1lIDMyLWJpdCBDT05TVF9JTlQuCgkqIHJzNjAwMC5jICh1X3Nob3J0X2NpbnRfb3BlcmFuZCwgYWRkX29wZXJhbmQsIGxvZ2ljYWxfb3BlcmFuZCwKCW5vbl9hZGRfY2ludF9vcGVyYW5kLCBub25fbG9naWNhbF9jaW50X29wZXJhbmQpOiBMaWtld2lzZS4KCShnZXRfaXNzdWVfcmF0ZSk6IEFkZCBDUFVfUFBDNjA0RSBjYXNlLgoJKiByczYwMDAubWQgKG1vdmRpLCAhVEFSR0VUX1BPV0VSUEM2NCBzcGxpdHRlcnMpOiBIYW5kbGUgNjQtYml0IGhvc3RzLgoKRnJpIEphbiAxNSAxODo0MjoxMiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChxdWV1ZWRfc3ViZXhwX3ApOiBNYWtlIHB1YmxpYy4KCSogZXhwci5oIChxdWV1ZWRfc3ViZXhwX3ApOiBEZWNsYXJlIGl0LgoJKiByZWNvZy5jIChhc21fb3BlcmFuZF9vayk6IE5ldyBmdW5jdGlvbi4KCShjaGVja19hc21fb3BlcmFuZHMpOiBVc2UgaXQuICBBZnRlciByZWxvYWQsIHVzZSBjb25zdHJhaW5fb3BlcmFuZHMKCWluc3RlYWQuCgkqIHJlY29nLmggKGFzbV9vcGVyYW5kX29rKTogRGVjbGFyZSBpdC4KCSogc3RtdC5jIChleHBhbmRfYXNtX29wZXJhbmRzKTogVXNlIGl0IHRvIHRyeSBoYXJkZXIgdG8gbWFrZQoJYXNtcyBpbml0aWFsbHkgc2F0aXNmeSB0aGVpciBjb25zdHJhaW50cy4KCkZyaSBKYW4gMTUgMTc6NDM6NTkgMTk5OSAgSmVmZnJleSBBLiBMYXcgIDxsYXdAcnRsLmN5Z251cy5jb20+CgoJKiBzcGFyYy5oIChMRUdJVElNSVpFX1JFTE9BRF9BRERSRVNTKTogRG8gbm90IGNyZWF0ZQoJKG1lbSAobG9fc3VtICguLi4pKSBmb3IgVEZtb2RlIHVubGVzcyBUQVJHRVRfVjkuCgpTYXQgSmFuIDE2IDEyOjQ3OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChub3RfcmVwZWF0X3JlZyk6IEFsbG93IGxkcCBpbnN0cnVjdGlvbgoJaW4gZGVsYXkgc2xvdCBvZiBSUFRCRC4KClNhdCBKYW4gMTYgMTI6MjY6NDAgMTk5OSAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9saWJnY2MuUyAoX19fZGl2aGkzLCBfX19tb2RoaTMpOiBGaXggbG9uZyBsb25nCglkaXZpZGUgYW5kIG1vZHVsbyBzaWduIHByb2JsZW0uCgpGcmkgSmFuIDE1IDExOjAyOjMxIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIHVucm9sbC5jIChsb29wX2l0ZXJhdGlvbnMpOiBSZXR1cm4gMCBpZiB0aGUgbGFzdCBsb29wIGluc24KCWlzIG5vdCBhIGp1bXAgaW5zbiBvciBpZiB0aGUgbG9vcCBoYXMgbXVsdGlwbGUgYmFjayBlZGdlcy4KCjE5OTktMDEtMTUgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNvbmZpZ3VyZS5pbiAoZml4aW5jX2RlZnMpOiBEbyBub3QgZGVmaW5lIGZvciBtWzY4XThrLW1vdG9yb2xhLXN5c3Z7LDN9OwoJaXQncyB3b3JraW5nIHByb3Blcmx5IG5vdy4gIFJlbW92ZSBjb21tZW50IHNheWluZyAic2VlIG02OGstbW90b3JvbGEtc3lzdgoJYXMgYW4gZXhhbXBsZSIuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSB1c2luZyBhdXRvY29uZi4KCgkqIGZpeGluYy9maXhpbmNsLmMgKG1haW4pOiBEbyBub3QgaWdub3JlIFNJR0NITEQuCgpUaHUgSmFuIDE0IDIyOjM4OjQxIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHVucm9sbC5jIChmaW5kX3NwbGl0dGFibGVfZ2l2cyk6IEZvciBhIERFU1RfQUREUiBnaXYsIGRvIG5vdCBzaGFyZQoJYSByZWdpc3RlciB3aXRoIGFub3RoZXIgREVTVF9BRERSIGdpdiBpZiB0aGUgYWRkcmVzcyBpcyBub3QgdmFsaWQuCgoJKiBwYS5jIChocHBhX2V4cGFuZF9lcGlsb2d1ZSk6IFNhdmUgYW5kIHJlc3RvcmUgdGhlIHN0YXRpYyBjaGFpbgoJYXJvdW5kIHRoZSBjYWxsIHRvIG1jb3VudC4KCgkqIGg4MzAwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBVc2UgYXNtX2ZwcmludGYsIG5vdCBmcHJpbnRmLgoKCSogc3RtdC5jIChleHBhbmRfZW5kX2Nhc2UpOiBVc2UgZW1pdF9jbXBfYW5kX2p1bXBfaW5zbnMgdG8gYXZvaWQKCWdlbmVyYXRpbmcgbm9uLWNhbm9uaWNhbCBydGwuCgoxOTk5LTAxLTE0ICBWbGFkaW1pciBOLiBNYWthcm92ICA8dm1ha2Fyb3ZAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pOTYwL2k5NjAuYyAoaTk2MF9vdXRwdXRfbW92ZV9kb3VibGVfemVybywKCWk5NjBfb3V0cHV0X21vdmVfcXVhZF96ZXJvKTogTmV3IGZ1bmN0aW9ucyBmb3IgbW92aW5nIHplcm9zLgoJKGk5NjBfb3V0cHV0X21vdmVfZG91YmxlLCBpOTYwX291dHB1dF9tb3ZlX3F1YWQpOiBBZGRpdGlvbmFsIGNvZGUKCWZvciBzaXR1YXRpb24gd2hlbiBtb3ZpbmcgdW5hbGlnbmVkIHJlZ2lzdGVyIGdyb3VwLgoKCSogY29uZmlnL2k5NjAvaTk2MC5oIChpOTYwX291dHB1dF9tb3ZlX2RvdWJsZV96ZXJvLAoJaTk2MF9vdXRwdXRfbW92ZV9xdWFkX3plcm8pOiBUaGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMuCgoJKiBjb25maWcvaTk2MC9pOTYwLm1kIChtb3ZkaSsxLCBtb3Z0aSsxKTogVXNhZ2Ugb2YgdGhlIGZ1bmN0aW9ucy4KCjE5OTktMDEtMTMgIFZsYWRpbWlyIE4uIE1ha2Fyb3YgIDx2bWFrYXJvdkBjeWdudXMuY29tPgoKCSogY29uZmlnL2k5NjAvaTk2MC5jIChpOTYwX2Z1bmN0aW9uX3Byb2xvZ3VlKTogTmV3IGNvZGUgKG9wdGltYWwKCXNvbHV0aW9uKSBmb3Igc2F2aW5nIGdsb2JhbCByZWdpc3RlcnMgaW4gbG9jYWwgcmVnaXN0ZXJzLgoJKGZvcm1fcmVnX2dyb3VwcywgcmVnX2dyb3VwX2NvbXBhcmUsIHNwbGl0X3JlZ19ncm91cCk6IE5ldwoJZnVuY3Rpb25zIHVzZWQgYnkgdGhlIGNvZGUuCgkocmVnX2dyb3VwKTogTmV3IHN0cnVjdHVyZSBkZWZpbml0aW9uIGZvciB0aGUgbmV3IGNvZGUuCgoxOTk5LTAxLTEzICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvZml4aW5jbC5jIChjcmVhdGVfZmlsZSk6IFBhc3MgZmlsZSBjcmVhdGlvbiBtYXNrIGFzCgl0aGlyZCBwYXJhbWV0ZXIgdG8gIm9wZW4iLiAgVXNlIE9fVFJVTkMgZmxhZyB0byBvcGVuIGluc3RlYWQgb2YKCWV4cGxpY2l0bHkgdW5saW5rJ2luZyB0aGUgZmlsZS4KCShwcm9jZXNzKTogYW5kIGZvcmdldCBhYm91dCB0aGUgImNobW9kIiBzdHVmZi4KCldlZCBKYW4gMTMgMjA6MTI6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGludGVncmF0ZS5jIChleHBhbmRfaW5saW5lX2Z1bmN0aW9uKTogUmVjb2duaXplIChtZW0gKGFkZHJlc3NvZikpCglhbmQgc3Vic3RpdHV0ZS4gIENvcHkgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZXJlIGludG8gYSBuZXcgcHNldWRvLgoKV2VkIEphbiAxMyAxNjo0NzowMCAxOTk5ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0uYyAob3V0cHV0X2Z1bmNfZXBpbG9ndWUpOiBDaGVjayBUQVJHRVRfQUJPUlRfTk9SRVRVUk4KCWJlZm9yZSBnZW5lcmF0aW5nIGEgY2FsbCB0byBhYm9ydCBmb3Igdm9sYXRpbGUgZnVuY3Rpb25zLgoJKiBjb25maWcvYXJtLmggKEFSTV9GTEFHX0FCT1JUX05PUkVUVVJOKTogRGVmaW5lLgoJKFRBUkdFVF9BQk9SVF9OT1JFVFVSTik6IERlZmluZS4KCShhYm9ydC1vbi1ub3JldHVybik6IE5ldyBvcHRpb24uCgpUaHUgSmFuIDE0IDEzOjUyOjQyIDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4Lm1kIChpbl9hbm51bF9zbG90XzMpOiBDb3JyZWN0bHkgYWxsb3cgdW5hcnljYwoJYW5kIGJpbmFyeWNjIG9wZXJhdGlvbnMgaW4gM3JkIGFubnVsbGVkIGRlbGF5IHNsb3QhCgpXZWQgSmFuIDEzIDE2OjE2OjQ0IDE5OTkgIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS5jIChvdXRwdXRfZnVuY19lcGlsb2d1ZSk6IENoZWNrIFRBUkdFVF9BQk9SVF9OT1JFVFVSTgoJYmVmb3JlIGdlbmVyYXRpbmcgYSBjYWxsIHRvIGFib3J0IGZvciB2b2xhdGlsZSBmdW5jdGlvbnMuCgkqIGNvbmZpZy9hcm0uaCAoQVJNX0ZMQUdfQUJPUlRfTk9SRVRVUk4pOiBEZWZpbmUuCgkoVEFSR0VUX0FCT1JUX05PUkVUVVJOKTogRGVmaW5lLgoJKGFib3J0LW9uLW5vcmV0dXJuKTogTmV3IG9wdGlvbi4KCldlZCBKYW4gMTMgMTM6MzA6MDggMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jICh4c3RyZHVwKTogUmVuYW1lZCBmcm9tIGBzYXZlc3RyaW5nJy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglSZW1vdmUgcHJvdG90eXBlIHdoaWNoIHdlIGdldCBmcm9tIGxpYmliZXJ0eS5oLgoKCSogY29sbGVjdDIuYyAoeHN0cmR1cCk6IExpa2V3aXNlLgoKCSogZ2VuZXh0cmFjdC5jICh4c3RyZHVwKTogTGlrZXdpc2UgZm9yIGBjb3B5c3RyJy4KCShteWJ6ZXJvKTogUmVtb3ZlIGl0IGFuZCB1c2UgYG1lbXNldCcgaW5zdGVhZC4KCgkqIGdlbm91dHB1dC5jIChteWJjb3B5LCBteWJ6ZXJvKTogUmVtb3ZlIHRoZXNlLiAgQWxsIGNhbGxlcnMgY2hhbmdlZAoJdG8gdXNlIGBtZW1jcHknIGFuZCBgbWVtc2V0JyBpbnN0ZWFkLgoKCSogZ2VucmVjb2cuYyAoeHN0cmR1cCk6IFJlbmFtZWQgZnJvbSBgY29weXN0cicuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4gIFJlbW92ZSBwcm90b3R5cGUuCgkobXliY29weSwgbXliemVybyk6IFJlbW92ZSB0aGVzZSBhbmQgdXNlIG1lbWNweS9tZW1zZXQuCgpXZWQgSmFuIDEzIDAwOjU5OjA0IDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMuaCAoTE9BRF9FWFRFTkRfT1ApOiBDb3JyZWN0IGZvciBTSW1vZGUgYW5kIENDbW9kZSBtb3ZlcyB3aGVuCglnZW5lcmF0aW5nIGNvZGUgZm9yIFRBUkdFVF82NEJJVC4KClR1ZSBKYW4gMTIgMTQ6MDU6MzcgMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKHByaW50X29wZXJhbmQsIGNhc2VzICdtJyBhbmQgJ00nKTogRG8gbm90IGRlcGVuZCBvbgoJSE9TVF9XSURFX0lOVCB3b3JkLXNpemUuCgkocnM2MDAwX3N0YWNrX2luZm8pOiBSZW1vdmUgcmVkdW5kYW50IGFsaWdubWVudCBvZiBmcG1lbS4KClR1ZSBKYW4gMTIgMTQ6MDU6MzcgMTk5OSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5jIChzaG9ydF9jaW50X29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkodV9zaG9ydF9jaW50X29wZXJhbmQsIHJlZ19vcl9jaW50X29wZXJhbmQsIGxvZ2ljYWxfb3BlcmFuZCk6IExpa2V3aXNlLgoJKGlucHV0X29wZXJhbmQpOiBBZGp1c3QgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkqIHJzNjAwMC5oIChQUkVESUNBVEVfQ09ERVMpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggcmVmZXJlbmNlcy4KCSogcnM2MDAwLm1kIChtb3ZzaSk6IEFkanVzdCBDT05TVEFOVF9QX1JUWCBoYW5kbGluZy4KCShtb3ZoaSwgbW92cWkpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkobW92ZGkpOiBBZGp1c3QgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgoxOTk5LTAxLTEyICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgdXNpbmcgYXV0b2NvbmYuCgoJKiBmaXhpbmMvTWFrZWZpbGUuaW4gKElOQ0xVREVTKTogQWRkIC1JJChzcmNkaXIpLy4uLy4uL2luY2x1ZGUuCgkqIGZpeGluYy9maXhpbmNsLmMgKFNJR0NITEQpOiBVc2UgU0lHQ0xEIG9uICh2ZXJ5KSBvbGQgc3lzdGVtcy4KCShwcm9jZXNzKTogImZjaG1vZCIgaXNuJ3QgYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zLCB1c2UgImNobW9kIgoJaW5zdGVhZC4KCSogZml4aW5jL3NlcnZlci5jOiBBZGQgI2luY2x1ZGUgPHN5cy90eXBlcy5oPi4KCShTVERJTl9GSUxFTk8pOiBBZGQgZGVmYXVsdCBkZWZpbml0aW9uIGlmIG5vIGluY2x1ZGUgZmlsZSBkZWZpbmVzCglpdCBhbHJlYWR5LgoJKFNURE9VVF9GSUxFTk8pOiBMaWtld2lzZS4KClR1ZSBKYW4gMTIgMTA6MjM6MjQgMTk5OSAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBtaXBzLm1kIChjYWxsX3ZhbHVlX2ludGVybmFsM2MpOiBOZXcgcGF0dGVybiBmb3IgLW1pcHMxNiAtbWxvbmctY2FsbHMuCgoxOTk5LTAxLTEyICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBtNjhrL21vdDMzMDAuaCAoQUREX01JU1NJTkdfUE9TSVgsIEFERF9NSVNTSU5HX1hPUEVOKTogRGVmaW5lIHRvCgllbnN1cmUgYWxsIHByb3RvdHlwZXMgbmVjZXNzYXJ5IGZvciBidWlsZGluZyBsaWJpbyB3aWxsIGJlIGF2YWlsYWJsZS4KCSogbTY4ay94bS1tb3QzMzAwLmggKEFERF9NSVNTSU5HX1BPU0lYLCBBRERfTUlTU0lOR19YT1BFTik6IFJlbW92ZQoJZGVmaW5pdGlvbnMgaGVyZSBhcyB0aGV5IGFyZSBub3QgaG9zdCBzcGVjaWZpYy4KCSogbTg4ay9zeXN2My5oLCBtODhrL3htLXN5c3YzLmg6IExpa2V3aXNlLgoKVHVlIEphbiAxMiAwMjo1Mzo0NiAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogY3NlLmMgKGNzZV9pbnNuKTogTmV2ZXIgcHJlZmVyIChjb25zdCAoY29uc3RhbnRfcF9ydHgpKS4KClR1ZSBKYW4gMTIgMDI6MzY6MTAgMTk5OSAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpUdWUgSmFuIDEyIDAxOjMwOjE5IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBydGwuYyAocnR4X2FsbG9jKTogVXNlIG1lbXNldCBpbnN0ZWFkIG9mIGlubGluZSBsb29wLgoKCSogcmVjb2cuaCAocmVjb2dfb3BfYWx0KTogRGVjbGFyZSBleHRlcm4uCgpUdWUgSmFuIDEyIDAwOjIzOjMxIDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IElmIHRoZSBub3RlIGFjY2Vzc2VzIGEgbWVtK2FkZHJlc3NvZgoJaW4gYSB3aWRlciBtb2RlIHRoYW4gYW55IHJlcGxhY2VtZW50LCBhZGp1c3QgdGhlIGNhY2hlZCByZXBsYWNlbWVudC4KCUNhY2hlIHRyaXZpYWwgc3Vic3RpdHV0aW9ucyBhcyB3ZWxsLgoKVHVlIEphbiAxMiAwMDowNjowMCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKE9CSkVDVFMpOiBBZGQgc2JpdG1hcC5vLgoJKEJBU0lDX0JMT0NLX0gpOiBBZGQgc2JpdG1hcC5oLgoJKiBiYXNpYy1ibG9jay5oOiBNb3ZlIHNpbXBsZSBiaXRtYXAgY29kZSB0byBzYml0bWFwLmguCgkqIGZsb3cuYzogTW92ZSBzaW1wbGUgYml0bWFwIGNvZGUgdG8gc2JpdG1hcC5jLgoJKiBzYml0bWFwLmgsIHNiaXRtYXAuYzogTmV3IGZpbGVzLgoKTW9uIEphbiAxMSAyMzo1MTo1MCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuaCAoVEFSR0VUX1NXSVRDSEVTKTogRG9jdW1lbnQgc3dpdGNoZXMuCgkoVEFSR0VUX09QVElPTlMpOiBMaWtld2lzZS4KCgkqIGFscGhhL2VsZi5oIChBU01fRklOSVNIX0RFQ0xBUkVfT0JKRUNUKTogVXNlIEhPU1RfV0lERV9JTlRfUFJJTlRfREVDLgoKTW9uIEphbiAxMSAyMjo1NDoxNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChuZXdfYWxpYXNfc2V0KTogUmV0dXJuIHplcm8gaWYgIWZsYWdfc3RyaWN0X2FsaWFzaW5nLgoKTW9uIEphbiAxMSAyMjozNjowMSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYmFzaWMtYmxvY2suaCAoYmFzaWNfYmxvY2tfaGVhZCk6IFJlbmFtZSB0byB4X2Jhc2ljX2Jsb2NrX2hlYWQuCgkoYmFzaWNfYmxvY2tfZW5kKTogUmVuYW1lIHRvIHhfYmFzaWNfYmxvY2tfZW5kLgoJKEJMT0NLX0hFQUQsIEJMT0NLX0VORCk6IFVwZGF0ZS4KCgkqIGNhbGxlci1zYXZlLmM6IENoYW5nZSBiYXNpY19ibG9ja19oZWFkL2VuZCByZWZlcmVuY2VzIHRvCglCTE9DS19IRUFEL0VORC4KCSogY29tYmluZS5jLCBmbG93LmMsIGZ1bmN0aW9uLmMsIGdjc2UuYywgZ2xvYmFsLmM6IExpa2V3aXNlLgoJKiBncmFwaC5jLCBoYWlmYS1zY2hlZC5jLCBsb2NhbC1hbGxvYy5jLCByZWdjbGFzcy5jOiBMaWtld2lzZS4KCSogcmVnbW92ZS5jLCByZWxvYWQxLmMsIHJlb3JnLmMsIHNjaGVkLmM6IExpa2V3aXNlLgoKU2F0IEphbiAgOSAyMzo1NDowOSAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBnY2MuYyAoeHN0cmVycm9yKTogUmVuYW1lZCBmcm9tIG15X3N0cmVycm9yLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuICBSZW1vdmUgcHJvdG90eXBlIHNpbmNlIHdlIGdldCB0aGF0IGZyb20gbGliaWJlcnR5LmguCgoJKiBwcm90b2l6ZS5jICh4c3RyZXJyb3IpOiBMaWtld2lzZS4KClNhdCBKYW4gIDkgMjM6MjI6MDQgMTk5OSAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2NjLmMgKHJlYWRfc3BlY3MpOiBFbnN1cmUgZm9ybWF0IHNwZWNpZmllcnMgbWF0Y2ggdGhlaXIgYXJndW1lbnRzLgoKU2F0IEphbiAgOSAyMDowNDoyNCAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChjb3B5X25vZGUpOiBPb3BzLiAgVGhhdCB3b3VsZCBiZSBjb3B5IG5vdCB6ZXJvCglpbiB0aGF0IGxhc3QgY2hhbmdlLgoKU3VuIEphbiAxMCAxNTozNTo0MSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jOiBJbmNsdWRlIHN5c3RlbS5oLgoJKGM0eF9jYWxsZXJfc2F2ZV9tYXApOiBEaXNhYmxlIGNhbGxlciBzYXZlIGZvciBSQy4KCShjNHhfb3B0aW1pemF0aW9uX29wdGlvbnMpOiBEaXNhYmxlIHNjaGVkdWxpbmcgYmVmb3JlIHJlbG9hZC4KCSh2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlKSA6IERlZmluZSByZXR1cm4gdHlwZSBhcyBpbnQuCglSZW1vdmUgdW51c2VkIHZhcmlhYmxlIHJlZ3MuCgkqIGNvbmZpZy9jNHgvYzR4LmggKFJFR0lTVEVSX01PVkVfQ09TVCk6IE1ha2UgaW5kZXBlbmRlbnQgb2YgcmVnaXN0ZXIKCWNsYXNzLgoJKiBjb25maWcvYzR4L2M0eC5tZCAocm90bHFpMywgcm90cnFpMyk6IEZpeCB1cCBlbWl0dGVkIFJUTCB0bwoJaGFuZGxlIHJvdGF0aW9ucy4KCSgqZGIsIGRlY3JlbWVudF9hbmRfYnJhbmNoX3VudGlsX3plcm8pOiBGaXggdXAgY29uc3RyYWludHMKCXRvIGtlZXAgcmVsb2FkIGhhcHB5LgoKU2F0IEphbiAgOSAxODozNToyOSAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogdHJlZS5jIChtYWtlX25vZGUpOiBDYWxsIGJ6ZXJvIGluc3RlYWQgb2YgaW5saW5lIGNsZWFyLgoJKGNvcHlfbm9kZSwgbWFrZV90cmVlX3ZlYywgYnVpbGQxKTogTGlrZXdpc2UuCgkoZ2V0X2lkZW50aWZpZXIpOiBDYWxsIHN0cmxlbiBpbnN0ZWFkIG9mIGlubGluZSBjb3VudC4KCShtYXliZV9nZXRfaWRlbnRpZmllcik6IExpa2V3aXNlLgoKU3VuIEphbiAxMCAxNDowNDo1MSAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoaW5fYW5udWxfc2xvdF8zKTogQWxsb3cgdW5hcnljYyBhbmQgYmluYXJ5Y2MKCW9wZXJhdGlvbnMgaW4gM3JkIGFubnVsbGVkIGRlbGF5IHNsb3QuCgkoKmxzaHJxaTNfY29uc3Rfc2V0KTogRGlzYWxsb3cgYyBjb25zdHJhaW50IGZvciBvcGVyYW5kMC4KCShtb2RoaTMrMSwgbW9kaGkzKzIpOiBTZXQgYXR0cmlidXRlIHR5cGUgdG8gbXVsdGkuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9TX2NvbnN0cmFpbnQpOiBSZW1vdmVkIHNwYWNlIGluIG1pZGRsZSBvZgoJIT0gb3BlcmF0b3IuCgpTYXQgSmFuICA5IDExOjQ0OjU1IDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdhbnNpZGVjbC5oOiBBbGxvdyBhdHRyaWJ1dGUgdW51c2VkIG9uIGxhYmVscyBvbmx5IHdoZW4gd2UgYXJlCgl2ZXJzaW9uIDIuOTMgb3IgaGlnaGVyLiAgTm90IGFsbCB2ZXJzaW9ucyBvZiAyLjkyIGhhdmUgdGhpcyBmZWF0dXJlLgoKCSogdmVyc2lvbi5jOiBCdW1wIG1pbm9yIG51bWJlciB0byA5My4KCkZyaSBKYW4gIDggMTA6NTE6MTMgMTk5OSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uY3MudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5oOiBEZWNsYXJlIG91dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZS4KCSogcmVjb2cuaDogRGVjbGFyZSBuZXh0X2luc25fdGVzdHNfbm9faW5lcXVhbGl0eS4KCkZyaSBKYW4gIDggMDE6NDM6NTMgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogc3RtdC5jIChvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbik6IE5ldyBmdW5jdGlvbiwgZXh0cmFjdGVkIGZyb20gLi4uCgkoZXhwYW5kX3JldHVybik6IFVzZSBvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbi4KCSogdHJlZS5oIChvcHRpbWl6ZV90YWlsX3JlY3Vyc2lvbik6IERlY2xhcmUuCgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogTW92ZSBjYWxsIHRvIG91dHB1dF9mdW5jX3N0YXJ0X3Byb2ZpbGVyCgl0byBhZnRlciB0aGUgbG9vcCB0byBlbWl0IGRlZmVycmVkIGZ1bmN0aW9ucy4KClRodSBKYW4gIDcgMTk6NTI6NTMgMTk5OSAgR2VyYWxkIFBmZWlmZXIgIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgoKCSogc3lzdGVtLmggKGFib3J0KTogU3VwcGx5IG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gaG93IHRvCglyZXBvcnQgYW4gSW50ZXJuYWwgQ29tcGlsZXIgRXJyb3IuCgpUaHUgSmFuICA3IDA5OjI1OjU4IDE5OTkgIEJydWNlIEtvcmIgIChrb3JiQGRhdGFkZXNpZ24uY29tKQoKCSogZml4aW5jL2ZpeGluY2wuYyAoKik6IE1vcmUgZGVjYXBpdGFsaXphdGlvbiBvZiB2YXJpYWJsZXMKCXBsdXMgc29tZSBleHBsYW5hdG9yeSBjb21tZW50cy4KCgkqIGZpeGluYy9NYWtlZmlsZS5pbiBmaXhpbmMvbWtmaXhpbmMuc2g6CglXaGVuIHRoZSBmaXhpbmNsIHByb2dyYW0gZG9lcyBub3Qgd29yayBmb3IgYSBjZXJ0YWluIHN5c3RlbSwKCXdlIHN1YnN0aXR1dGUgYSBzaGVsbCBzY3JpcHQuICBBZGRlZCB1c2VyIGNvbW1lbnRhcnkgd2hlbgoJdGhpcyBoYXBwZW5zLgoKVGh1IEphbiAgNyAxMToyNjoxNyAxOTk5ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY2FsbHMuYyAoc3RvcmVfdW5hbGlnbmVkX2FyZ3VtZW50c19pbnRvX3BzZXVkb3MpOiBVc2UgeG1hbGxvYyB0bwoJYWxsb2NhdGUgbWVtb3J5IHRoYXQgd2lsbCBsaXZlIGJleW9uZCB0aGlzIGZ1bmN0aW9uLgoJKGV4cGFuZF9jYWxsKTogRnJlZSBpdCBoZXJlLgoKVGh1IEphbiAgNyAwMzowODoxNyAxOTk5ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogc3BhcmMuaCAoUFJFRkVSUkVEX1JFTE9BRF9DTEFTUyk6IFNlbGVjdCBHRU5FUkFMX1JFR1MgZm9yCglpbnRlZ2VyIGRhdGEgbm90IGRlc3RpbmVkIGZvciBmcCByZWdzLgoJKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBOZXcuCgpUaHUgSmFuICA3IDAzOjAzOjQyIDE5OTkgIFN0YW4gQ294ICA8c2NveEBjeWdudXMuY29tPgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJU3VwcG9ydCBmb3IgSHlwZXJzcGFyYyBhbmQgU3BhcmNsaXRlODZ4OgoJKiBzcGFyYy5oIChUQVJHRVRfQ1BVX2h5cGVyc3BhcmMsIFRBUkdFVF9DUFVfc3BhcmNsaXRlODZ4KTogTmV3LgoJKENQUF9DUFUzMl9ERUZBVUxUX1NQRUMpOiBGaXggdXAgZm9yIHRoZSBuZXcgdGFyZ2V0cy4KCShBU01fQ1BVMzJfREVGQVVMVF9TUEVDKTogTGlrZXdpc2UuCgkoVEFSR0VUX0NQVV9ERUZBVUxUKTogTGlrZXdpc2UuCgkoZW51bSBwcm9jZXNzb3JfdHlwZSk6IExpa2V3aXNlLgoJKENQUF9FTkRJQU5fU1BFQyk6IEhhbmRsZSBsaXR0bGUgZW5kaWFuIGRhdGEuCgkoTElCR0NDMl9XT1JEU19CSUdfRU5ESUFOKTogTGlrZXdpc2UuCgkoQURKVVNUX0NPU1QpOiBDYWxsIHNwYXJjX2FkanVzdF9jb3N0LgoJKiBzcGFyYy5jIChzcGFyY19vdmVycmlkZV9vcHRpb25zKTogRml4IHVwIGZvciB0aGUgbmV3IHRhcmdldHMuCgkoc3VwZXJzcGFyY19hZGp1c3RfY29zdCk6IE1ha2Ugc3RhdGljLgoJKGh5cGVyc3BhcmNfYWRqdXN0X2Nvc3QpOiBOZXcuCgkodWx0cmFzcGFyY19hZGp1c3RfY29zdCk6IE1ha2Ugc3RhdGljLgoJKHNwYXJjX2FkanVzdF9jb3N0KTogTmV3LgoJKiBzcGFyYy5tZCAoYXR0ciBjcHUpOiBBZGQgaHlwZXJzcGFyYyBhbmQgc3BhcmNsaXRlODZ4LgoJKGZ1bmN0aW9uX3VuaXQpOiBBZGQgaHlwZXJzcGFyYyBzY2hlZHVsaW5nIHJ1bGVzLgoKCSogY29uZmlndXJlLmluICh3aXRoX2NwdSBoYW5kbGVyKTogUmVjb2duaXplIGh5cGVyc3BhcmMuCgpUaHUgSmFuICA3IDIzOjU0OjA1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IEFkZGVkIHNwYWNlIGFmdGVyIG5lZ2F0aW9uIG9wZXJhdG9yLgoJKiBjb25maWcvYzR4L2M0eC5oOiBMaWtld2lzZS4KCSogY29uZmlnL2M0eC9jNHgubWQ6IExpa2V3aXNlLgoKVGh1IEphbiAgNyAyMzozOToyNyAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfcHJlZmVycmVkX3JlbG9hZF9jbGFzcyk6IEFsd2F5cyByZXR1cm4gY2xhc3MuCgpUaHUgSmFuICA3IDAwOjI5OjI1IDE5OTkgIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGNvbWJpbmUuYyAobnVtX3NpZ25fYml0X2NvcGllcyk6IEluIE5FRywgTVVMVCwgRElWIGFuZCBNT0QgY2FzZXMsCgl3aGVuIGEgdGVzdCBjYW4ndCBiZSBwZXJmb3JtZWQgZHVlIHRvIGxpbWl0ZWQgd2lkdGggb2YKCUhPU1RfQklUU19QRVJfV0lERV9JTlQsIHVzZSB0aGUgbW9yZSBjb25zZXJ2YXRpdmUgYXBwcm94aW1hdGlvbi4KCUZpeCBVRElWIGNhc2UgZm9yIGNhc2VzIHdoZXJlIHRoZSBmaXJzdCBvcGVyYW5kIGhhcyB0aGUgaGlnaGVzdCBiaXQKCXNldC4KClRodSBKYW4gIDcgMDA6MDE6MzggMTk5OSAgTHV0eiBWaWV3ZWcgIDxsa3ZAbWFuaWEucm9iaW4uZGU+CgoJKiBwYS5oIChyZWdfY2xhc3MpOiBBZGQgRlBVUFBFUl9SRUdTLgoJKFJFR19DTEFTU19OQU1FUyk6IFNpbWlsYXJseS4KCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBTaW1pbGFybHkuCgkoUkVHTk9fUkVHX0NMQVNTKTogSGFuZGxlIEZQVVBQRVJfUkVHUy4KCShGUF9SRUdfQ0xBU1NfUCk6IExpa2V3aXNlLgoJKFJFR19DTEFTU19GUk9NX0xFVFRFUik6IFNpbWlsYXJseS4KCShDTEFTU19NQVhfTlJFR1MpOiBTaW1pbGFybHkuCgoxOTk5LTAxLTA2ICBCcmVuZGFuIEtlaG9lICA8YnJlbmRhbkBjeWdudXMuY29tPgoKCSogZml4aW5jbHVkZXM6IEZvciBIUC9VWCAxMC4yMCwgYWxzbyBsb29rIGluIGN1cnNlc19jb2xyL2N1cnNlcy5oCglmb3IgYSB0eXBlZGVmIG9mIGJvb2wuICBNYWtlIHN1cmUgdG8gaGF2ZSBhIGNvcHkgb2YgdGhlIGZpbGUgaXMKCWluIHBsYWNlIGJlZm9yZSB3ZSBsb29rIHRvIGZpeCBpdC4gIEZpeCB0eXBvIGluIHZhcmlhYmxlIG5hbWUgdG8KCUZJTEUuCgpXZWQgSmFuICA2IDA3OjUxOjA1IDE5OTkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluKSBbY2FzZSBCVUlMVF9JTl9DT05TVEFOVF9QXTogVXNlCgl2YWx1ZV9tb2RlIGZvciB0aGUgcmV0dXJuIG1vZGUuCgpXZWQgSmFuICA2IDE3OjU1OjE5IDE5OTkgIFJvYmVydCBMaXBlICA8cm9iZXJ0bGlwZUB1c2EubmV0PgoKCSogY29uZmlndXJlLmluOiBOZXcgZmxhZyAtLXdpdGgtZHdhcmYyLiAgSWYgc2V0LCBlbmFibGVzIERXQVJGLTIKCWRlYnVnZ2luZyBhcyBkZWZhdWx0LgoKCSogY29uZmlnL3RtLWR3YXJmMi5oOiBOZXcgZmlsZS4KCldlZCBKYW4gIDYgMTY6MDg6NTQgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaDgzMDAuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IERlZmluZS4KCgkqIHBhLmggKERPTlRfUkVDT1JEX0VRVUlWQUxFTkNFKTogS2lsbC4KCSogbG9jYWwtYWxsb2MuYyAodXBkYXRlX2VxdWl2X3JlZ3MpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgkqIHRtLnRleGkgKERPTlRfUkVDT1JEX0VRVUlWQUxFTkNFKTogS2lsbC4KCgkqIGNhbGxzLmMgKHNwZWNpYWxfZnVuY3Rpb25fcCk6IFB1c2ggYWxsb2NhIHRlc3QgaW5zaWRlIHRoZSBsYXJnZQoJY29uZGl0aW9uYWwgd2hpY2ggZXhjbHVkZXMgZnVuY3Rpb25zIG5vdCBhdCBmaWxlIHNjb3BlIG9yIG5vdAoJZXh0ZXJuLgoKCSogY2FsbHMuYyAoc3BlY2lhbF9mdW5jdGlvbl9wKTogTmV3IGZ1bmN0aW9uIGJyb2tlbiBvdXQgb2YKCWV4cGFuZF9jYWxsLgoJKHByZWNvbXB1dGVfcmVnaXN0ZXJfcGFyYW1ldGVycyk6IExpa2V3aXNlLgoJKHN0b3JlX29uZV9hcmcpOiBMaWtld2lzZS4KCShzdG9yZV91bmFsaWduZWRfYXJndW1ldG5zX2ludG9fcHNldWRvcyk6IExpa2V3aXNlLgoJKHNhdmVfZml4ZWRfYXJndW1lbnRfYXJlYSk6IExpa2V3aXNlLgoJKHJlc3RvcmVfZml4ZWRfYXJndW1lbnRfYXJlYSk6IExpa2V3aXNlLgoJKGV4cGFuZF9jYWxsKTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKVGh1IEphbiAgNyAwMDoxMjoyNCAxOTk5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZCAoYWRkcWkzKTogSWYgdGhlIGRlc3RpbmF0aW9uIG9wZXJhbmQgaXMKCWEgaGFyZCByZWdpc3RlciBvdGhlciB0aGFuIGFuIGV4dGVuZGVkIHByZWNpc2lvbiByZWdpc3RlciwKCWVtaXQgYWRkcWkzX25vY2xvYmJlci4KCSgqYWRkcWkzX25vY2xvYmJlcl9yZWxvYWQpOiBOZXcgcGF0dGVybiBhZGRlZCBzbyB0aGF0IHJlbG9hZAoJd2lsbCByZWNvZ25pemUgYSBzdG9yZSBvZiBhIHBzZXVkbywgZXF1aXZhbGVudCB0byB0aGUgc3VtCglvZiB0aGUgZnJhbWUgcG9pbnRlciBhbmQgYSBjb25zdGFudCwgYXMgYW4gYWRkIGluc24uCgoxOTk5LTAxLTA2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBmaXhpbmMvZml4aW5jbC5jOiBSZS1pbmRlbnQgYWNjb3JkaW5nIHRvIHRoZSBHTlUgc3RhbmRhcmRzLgoJZml4aW5jL3NlcnZlci5jOiBMaWtld2lzZS4KCWZpeGluYy9zZXJ2ZXIuaDogTGlrZXdpc2UuCgpXZWQgSmFuICA2IDEwOjQzOjI5IDE5OTkgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZy9tNjhrL202OGsuYyAoY29uc3RfdWludDMyX29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFgKCWhhbmRsaW5nLgoJKGNvbnN0X3NpbnQzMl9vcGVyYW5kKTogTGlrZXdpc2UuCgpXZWQgSmFuICA2IDA5OjQ0OjUxIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5oOiBJbiBhZGRpdGlvbiB0byBjaGVja2luZyBfSkJMRU4sIGFsc28gY2hlY2sgaWYgYHNldGptcCcKCWlzIGEgbWFjcm8gd2hlbiBkZWNpZGluZyBpZiB3ZSBjYW4gdXNlIGBqbXBfYnVmJyBpbiBwcm90b3R5cGVzLgoKV2VkIEphbiAgNiAwMzoxODo1MyAxOTk5ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKHBjLW1zZG9zZGpncHApOiBTZXQgeF9tYWtlIHRvIHgtZ28zMi4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoJKiBpMzg2L3htLWdvMzIuaDogRGVmaW5lIExJQlNURENYWC4KCSogaTM4Ni94LWdvMzI6IE5ldy4KCSogaTM4Ni9nbzMyLmggKE1EX0VYRUNfUFJFRklYKTogRGVmaW5lLgoJKEZJTEVfTkFNRV9BQlNPTFVURV9QKTogRGVmaW5lLgoJKExJTktfQ09NTUFORF9TUEVDKTogRGVmaW5lLgoKV2VkIEphbiAgNiAwMjoyMzozNiAxOTk5ICAiQ2hhcmxlcyBNLiBIYW5udW0iICA8cm9vdEBpaGFjay5uZXQ+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBJZiB0aGUgbGhzIGlzIGEgbWVtb3J5IGxvY2F0aW9uIHBvaW50ZWQKCXRvIGJlIGEgcG9zdGluY3JlbWVudGVkIChvciBwb3N0ZGVjcmVtZW50ZWQpIHBvaW50ZXIsIGFsd2F5cwoJZm9yY2UgdGhlIHJocyB0byBiZSBldmFsdWF0ZWQgaW50byBhIHBzZXVkby4KCldlZCBKYW4gIDYgMDA6NTQ6MjEgMTk5OSAgR2VvZmYgS2VhdGluZyAgPGdlb2Zma0BvemVtYWlsLmNvbS5hdT4KCgkqIHJlYWwuYyAobXRoZXJyKTogUHJpbnQgbW9yZSByZWFzb25hYmxlIHdhcm5pbmcgbWVzc2FnZXMuCgpUdWUgSmFuICA1IDIxOjU3OjQyIDE5OTkgIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIE1ha2VmaWxlLmluIChnY2MubywgcHJlZml4Lm8sIGNjY3AubywgY3BwbGliLm8pOiBEZXBlbmQgb24gcHJlZml4LmguCgoJKiBjY2NwLmM6IEluY2x1ZGUgcHJlZml4LmgsIGRvbid0IHByb3RvdHlwZSBwcmVmaXguYyBmdW5jdGlvbnMuCgkobmV3X2luY2x1ZGVfcHJlZml4KTogQ29uc3RpZnkgY2hhciogcGFyYW1ldGVycy4KCgkqIGNwcGZpbGVzLmMgKHJlYWRfbmFtZV9tYXApOiBMaWtld2lzZS4KCShhcHBlbmRfaW5jbHVkZV9jaGFpbik6IExpa2V3aXNlLiAgQWxzbywgdXNlIGEgd3JpdGFibGUgY2hhciogY29weQoJb2YgcGFyYW1ldGVyIGBkaXInIHdoaWNoIHdlIHRoZW4gbW9kaWZ5LCByYXRoZXIgdGhhbiB1c2luZyB0aGUKCXBhcmFtZXRlciBpdHNlbGYgdG8gc3RvcmUgdGhlIG5ldyB3cml0YWJsZSBzdHJpbmcuCgkocmVtYXBfZmlsZW5hbWUpOiBDb25zdGlmeSBzb21lIHZhcmlhYmxlcy4gIEFsc28sIHVzZSBhIHdyaXRhYmxlCgljaGFyKiB0byBzdG9yZSBhbiBhbGxvY2F0ZWQgc3RyaW5nIHdoaWNoIHdlIHdpbGwgYmUgbW9kaWZ5aW5nLgoKCSogY3BwbGliLmM6IEluY2x1ZGUgcHJlZml4LmgsIGRvbid0IHByb3RvdHlwZSBwcmVmaXguYyBmdW5jdGlvbnMuCgkoY3BwX3N0YXJ0X3JlYWQpOiBDb25zdGlmeSB2YXJpYWJsZSBgc3RyJy4KCgkqIGNwcGxpYi5oIChhcHBlbmRfaW5jbHVkZV9jaGFpbik6IENvbnN0aWZ5IGEgY2hhciogcGFyYW1ldGVyLgoKCSogZ2NjLmMgSW5jbHVkZSBwcmVmaXguaCwgZG9uJ3QgcHJvdG90eXBlIHByZWZpeC5jIGZ1bmN0aW9ucy4KCShhZGRfcHJlZml4LCBzYXZlX3N0cmluZyk6IENvbnN0aWZ5IGNoYXIqIHBhcmFtZXRlcnMuCgkoZmF0YWwsIGVycm9yKTogQWRkIEFUVFJJQlVURV9QUklOVEZfMSB0byBwcm90b3R5cGVzLgoKCSogcHJlZml4LmM6IEluY2x1ZGUgcHJlZml4LmguCgkoZ2V0X2tleV92YWx1ZSwgdHJhbnNsYXRlX25hbWUsIHNhdmVfc3RyaW5nLCB1cGRhdGVfcGF0aCwKCXNldF9zdGRfcHJlZml4KTogQ29uc3RpZnkgdmFyaW91cyBjaGFyKiBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMuCgkoc2F2ZV9zdHJpbmcpOiBVc2UgeG1hbGxvYywgbm90IG1hbGxvYy4KCSh0cmFuc2xhdGVfbmFtZSk6IFVzZSBhIHdyaXRhYmxlIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBjcmVhdGUgYW5kCgltb2RpZnkgYSBzdHJpbmcgYmVmb3JlIHNldHRpbmcgaXQgdG8gYSBjb25zdCBjaGFyKi4KCgkqIHByZWZpeC5oOiBOZXcgZmlsZSB0byBwcm90b3R5cGUgZnVuY3Rpb25zIGV4cG9ydGVkIGZyb20gcHJlZml4LmMuCgpUdWUgSmFuICA1IDA4OjUyOjE4IDE5OTkgIEJydWNlIEtvcmIgIChrb3JiQGRhdGFkZXNpZ24uY29tKQoKCSogZml4aW5jL2ZpeGluY2wuYyAodmFyaW91cyk6IEFkZGVkIGRlYnVnIGNvZGUgc28KCU1hbmZyZWQgY2FuIHRyYWNlIHRoZSBwcm9jZXNzaW5nLgoKCSogZml4aW5jL2luY2xoYWNrLmRlZiAoc3lzL3V0c25hbWUuaCk6IFByb3ZpZGUgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZgoJc3RydWN0IHV0c25hbWUgb24gVWx0cml4IFY0LlszNV0uCgoJKiBmaXhpbmMve2ZpeGluY2wueHxmaXhpbmNsLnNofGluY2xoYWNrLnNofSA6IFJlZ2VuZXJhdGVkLgoKTW9uIEphbiAgNCAxNTozNzozMCAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKHNraXBfaWZfZ3JvdXApOiBTcGxpdCBvdXQgdGhlIGxvZ2ljIHRoYXQgaGFuZGxlcwoJZGlyZWN0aXZlIHJlY29nbml0aW9uIHRvIGl0cyBvd24gZnVuY3Rpb24uICBEb24ndCB1c2UKCXBhcnNlIG1hcmtlcnM7IHVzZSBhIGJhcmUgcG9pbnRlciBpbnRvIHRoZSBidWZmZXIuICBVc2UKCWNvcHkvc2tpcF9yZXN0X29mX2xpbmUgaW5zdGVhZCBvZiBkb2luZyBpdCBieSBoYW5kLiAgUmVtb3ZlCglgcmV0dXJuIG9uIGFueSBkaXJlY3RpdmUnIG1vZGUgd2hpY2ggd2FzIG5ldmVyIHVzZWQsIGFuZCB0YWtlCglvbmx5IG9uZSBhcmd1bWVudC4KCShjb25zaWRlcl9kaXJlY3RpdmVfd2hpbGVfc2tpcHBpbmcpOiBOZXcgZnVuY3Rpb24sIHN1YnJvdXRpbmUKCW9mIHNraXBfaWZfZ3JvdXAuICBMb2dpYyBzdHJlYW1saW5lZCBhIGJpdC4KCShjb25kaXRpb25hbF9za2lwLCBkb19lbGlmLCBkb19lbHNlKTogQ2FsbCBza2lwX2lmX2dyb3VwIHdpdGgKCW9ubHkgb25lIGFyZ3VtZW50LgoKTW9uIEphbiAgNCAxNToyNzozMCAxOTk5ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKGRvX3VuZGVmKTogRU9GIGltbWVkaWF0ZWx5IGFmdGVyICcjdW5kZWYgRk9PJyBpcyBub3QgYW4KCWVycm9yLgoKTW9uIEphbiAgNCAxMTo1NTo1MSAxOTk5ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBleHRlbmQudGV4aSAoQm91bmQgbWVtYmVyIGZ1bmN0aW9ucyk6IERvY3VtZW50LgoKTW9uIEphbiAgNCAxMTowMTo0OCAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBtaXBzLXRkdW1wLmMgKHN0X3RvX3N0cmluZywgc2NfdG9fc3RyaW5nLCBnbGV2ZWxfdG9fc3RyaW5nLAoJbGFuZ190b19zdHJpbmcsIHR5cGVfdG9fc3RyaW5nKTogTWFrZSByZXR1cm4gdHlwZSBjb25zdCBjaGFyKi4KCShwcmludF9zeW1ib2wpOiBBcHBseSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCShwcmludF9maWxlX2Rlc2MpOiBDYXN0IHN0cnVjdHVyZSBtZW1iZXIgYGNyZmQnIHRvIHVsb25nIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIG1pcHMtdGZpbGUuYyAocGZhdGFsX3dpdGhfbmFtZSk6IEFwcGx5IGBjb25zdCcga2V5d29yZCB0byBjaGFyKi4KCShmYXRhbCwgZXJyb3IpOiBBZGQgQVRUUklCVVRFX1BSSU5URl8xIHRvIHByb3RvdHlwZXMuCgkocHJvZ25hbWUsIGlucHV0X25hbWUpOiBBcHBseSBgY29uc3QnIGtleXdvcmQgdG8gYSBjaGFyKi4KCURvbid0IHJlZHVuZGFudGx5IGluY2x1ZGUgc3lzL3N0YXQuaC4KCShhbGxvY19pbmZvKTogQXBwbHkgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoc3RfdG9fc3RyaW5nLCBzY190b19zdHJpbmcpOiBMaWtld2lzZS4KCShoYXNoX3N0cmluZyk6IENhc3QgdmFyaWFibGUgYGhhc2hfc3RyaW5nJyB0byBhIHN5bWludF90IHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShhZGRfc3RyaW5nKTogQ2FzdCBQQUdFX1VTSVpFIHRvIFB0cmRpZmZfdCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCUxpa2V3aXNlIGNhc3QgaXQgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShhZGRfbG9jYWxfc3ltYm9sKTogQXBwbHkgYGNvbnN0JyBrZXl3b3JkIHRvIGEgY2hhciouCgkoYWRkX2V4dF9zeW1ib2wpOiBMaWtld2lzZS4KCShhZGRfdW5rbm93bl90YWcpOiBMaWtld2lzZS4KCShhZGRfcHJvY2VkdXJlKTogQ2FzdCBhIHByaW50Zi1zdHlsZSBmaWVsZCB3aWR0aCB0byBhbiBpbnQuCgkoYWRkX2ZpbGUpOiBDYXN0IFBBR0VfVVNJWkUgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShwYXJzZV9iZWdpbik6IENhc3QgYSBwcmludGYtc3R5bGUgZmllbGQgd2lkdGggdG8gYW4gaW50LgoJKHBhcnNlX2JlbmQpOiBMaWtld2lzZS4KCShwYXJzZV9kZWYpOiBMaWtld2lzZS4KCShwYXJzZV9lbmQpOiBMaWtld2lzZS4KCShtYXJrX3N0YWJzKTogTWFyayBwYXJhbWV0ZXIgYHN0YXJ0JyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgkocGFyc2Vfc3RhYnNfY29tbW9uKTogRml4IGZvcm1hdCBzcGVjaWZpZXIuCgkocGFyc2VfaW5wdXQpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgaScgdG8gU2l6ZV90LgoJKHdyaXRlX29iamVjdCk6IEZpeCBhcmd1bWVudHMgdG8gbWF0Y2ggZm9ybWF0IHNwZWNpZmllcnMuCglDYXN0IHZhcmlhYmxlIGBudW1fd3JpdGUnIHRvIGxvbmcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkocmVhZF9zZWVrKTogQ2FzdCB2YXJpYWJsZSBgc3lzX3JlYWQnIHRvIHN5bWludF90IHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4gIEZpeCBhcmd1bWVudHMgdG8gbWF0Y2ggZm9ybWF0IHNwZWNpZmllcnMuICBDYXN0Cgl2YXJpYWJsZSBgc2l6ZScgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShjb3B5X29iamVjdCk6IENhc3QgcmVzdWx0IG9mIGBzaXplb2YnIHRvIGludCB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuICBGaXggYXJndW1lbnRzIHRvIG1hdGNoIGZvcm1hdCBzcGVjaWZpZXJzLiAgQ2FzdAoJdmFyaWFibGUgYGlmZCcgdG8gbG9uZyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IGEgc2lnbmVkIHZhbHVlLgoJTGlrZXdpc2UsIGxpa2V3aXNlLgoKTW9uIEphbiAgNCAxMDozMDozMyAxOTk5ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBBbGxvdyBhcHBseWluZyBhdHRyaWJ1dGUgYHVudXNlZCcKCW9uIGEgTEFCRUxfREVDTC4KCgkqIGMtcGFyc2UuaW4gKGxhYmVsKTogUGFyc2UgYXR0cmlidXRlcyBhZnRlciBhIGxhYmVsLCBhbmQgY2FsbAoJYGRlY2xfYXR0cmlidXRlcycgdG8gaGFuZGxlIHRoZW0uCgoJKiBnYW5zaWRlY2wuaCAoQVRUUklCVVRFX1VOVVNFRF9MQUJFTCk6IERlZmluZS4KCgkqIGdlbnJlY29nLmMgKE9VVFBVVF9MQUJFTCwgd3JpdGVfdHJlZV8xLCB3cml0ZV90cmVlKTogV2hlbgoJZ2VuZXJhdGluZyBsYWJlbHMsIG1hcmsgdGhlbSB3aXRoIEFUVFJJQlVURV9VTlVTRURfTEFCRUwuCgoJKiBpbnZva2UudGV4aTogTm90ZSB0aGF0IGxhYmVscyBjYW4gYmUgbWFya2VkIGB1bnVzZWQnLgoKU3VuIEphbiAgMyAyMzozMjoxOCAxOTk5ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBKYW4gIDMgMjM6MDA6NDIgMTk5OSAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogb3B0YWJzLmMgKGVtaXRfY21wX2FuZF9qdW1wX2luc25zKTogVXNlIENPTlNUQU5UX1AgY2Fub25pY2FsaXppbmcKCVJUTCBmb3IgYSBjb21wYXJlL2p1bXAgc2VxdWVuY2UuCgpTdW4gSmFuICAzIDIyOjU4OjE1IDE5OTkgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIG9wdGFicy5jIChlbWl0X2NtcF9pbnNuKTogQWJvcnQgaWYgYXNrZWQgdG8gZW1pdCBub24tY2Fub25pY2FsIFJUTAoJZm9yIGEgdGFyZ2V0IHdpdGggSEFWRV9jYzAgZGVmaW5lZC4KCShlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IE5ldyBmdW5jdGlvbi4KCSogZXhwci5oIChlbWl0X2NtcF9hbmRfanVtcF9pbnNucyk6IFByb3RvdHlwZSBpdC4KCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBVc2UgaXQgdG8gcmVwbGFjZSBjYWxscwoJdG8gZW1pdF9jbXBfaW5zbiBhbmQgZW1pdF9qdW1wX2luc24gYW5kIHRvIGNhbm9uaWNhbGl6ZQoJdGhlIGNvbXBhcmlzb24gaWYgbmVjZXNzYXJ5LgoJKiB1bnJvbGwuYyAodW5yb2xsX2xvb3ApOiBMaWtld2lzZS4KClN1biBKYW4gIDMgMjE6MDE6MDQgMTk5OSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CgoJKiBmaXhpbmNsdWRlcyAoc3lzL3V0c25hbWUuaCk6IFByb3ZpZGUgZm9yd2FyZCBkZWNsYXJhdGlvbiBvZgoJc3RydWN0IHV0c25hbWUgb24gVWx0cml4IFY0LlszNV0uCgoJKiBtaXBzLm1kIChkaXZfdHJhcCk6IFVzZSBsb2NhbCBsYWJlbHMgaW5zdGVhZCBvZiBkb3QtcmVsYXRpdmUKCWJyYW5jaGVzLgoKU3VuIEphbiAgMyAyMDo0MDozNCAxOTk5ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5tZCAoYnJhbmNoLCBuZWdhdGVkIGJyYW5jaCk6IEhhbmRsZSAoY29uc3RfaW50IDApIGFzIGZpcnN0Cglzb3VyY2Ugb3BlcmFuZC4KCSogcGEuYyAob3V0cHV0X2NicmFuY2gpOiBMaWtld2lzZS4KClN1biBKYW4gIDMgMDM6MjA6MzggMTk5OSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogVW5kbyBzcHVyaW91cyBwYXJ0IG9mIGxhc3QKCWNoYW5nZS4KCjE5OTktMDEtMDEgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGV4dGVuZC50ZXhpIChfX2J1aWx0aW5fY29uc3RhbnRfcCk6IEFkZCBtaXNzaW5nIEBzbWFsbGV4YW1wbGUuCgpGcmkgSmFuICAxIDExOjQ4OjIwIDE5OTkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQgKGRvdWJsZXdvcmQgc2hpZnRzKTogRml4IGR1bWIgbWlzdGFrZXMgaW4gcHJldmlvdXMgY2hhbmdlLgoKV2VkIERlYyAzMCAyMzozODo1NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChhZGRkaV9kaWxzaHIzMik6IEFsbG93IGFsbCBvcGVyYW5kcyB0byBiZSByZWdpc3RlcnMgdG9vLgoJKGFkZGRpX2Rpc2hsMzIpOiBTaW1pbGFybHkuCgoJKiBjc2UuYyAoaW52YWxpZGF0ZV9za2lwcGVkX2Jsb2NrKTogQ2FsbCBpbnZhbGlkYXRlX2Zyb21fY2xvYmJlcnMKCWZvciBlYWNoIGluc24gaW4gdGhlIHNraXBwZWQgYmxvY2suCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBWZXJpZnkgdGhhdCB0aGUgaW5zbiBzYXRpc2ZpZXMgaXRzCgljb25zdHJhaW50cyBhZnRlciByZXBsYWNpbmcgYSByZWdpc3RlciBhZGRyZXNzIHdpdGggYW4gYXV0b2luY3JlbWVudAoJYWRkcmVzcyBmb3IgcmVsb2FkIGluaGVyaXRhbmNlIHB1cnBvc2VzLgoKCSogaTM4Ni5tZCAoZG91Ymxld29yZCBzaGlmdHMpOiBBdm9pZCBuYW1lc3BhY2UgcG9sbHV0aW9uLgoKV2VkIERlYyAzMCAyMzowMDoyOCAxOTk4ICBEYXZpZCBPJ0JyaWVuICA8b2JyaWVuQE5VWEkuY29tPgoKCSogY29uZmlndXJlLmluIChGcmVlQlNEIEVMRik6IE5lZWRzIHNwZWNpYWwgY3J0IGZpbGVzLgoKV2VkIERlYyAzMCAyMjo1MDoxMyAxOTk4ICBHZW9mZnJleSBOb2VyICA8bm9lckBjeWdudXMuY29tPgoKCSogaTM4Ni94bS1jeWd3aW4uaDogQ2hhbmdlIERJUl9TRVBBUkFUT1IgdG8gZm9yd2FyZCBzbGFzaC4KCjE5OTgtMTItMzAgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogV2hpbGUgcmV2ZXJzaW5nIHRoZSBsb29wLCBpZiB0aGUKCWNvbXBhcmlzb24gdmFsdWUgaGFzIGEgVk9JRCBtb2RlIHVzZSB0aGUgbW9kZSBvZiB0aGUgb3RoZXIgb3BlcmFuZAoJdG8gY29tcHV0ZSB0aGUgbWFzay4KCldlZCBEZWMgMzAgMjI6MjQ6MDAgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAubWQgKHtzYXZlLHJlc3RvcmV9X3N0YWNrX2Z1bmN0aW9uKTogVGFrZSAyIG9wZXJhbmRzIHRvCglhdm9pZCB3YXJuaW5ncyBpbiBjb21waWxpbmcgZXhwbG93LmMuCgoJKHBhdGNoIGZyb20gS2VuIFJhZWJ1cm4sIHJhZWJ1cm5AY3lnbnVzLmNvbSkKCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogRm9yY2UgOC1ieXRlIGFsaWdubWVudCBvZgoJZnBtZW1fb2Zmc2V0LiAgQ29tcHV0ZSB0b3RhbCBzaXplIGFmdGVyIHRoYXQsIGFuZCB0aGVuCglyczYwMDBfZnBtZW1fb2Zmc2V0IHVzaW5nIGJvdGggdmFsdWVzLgoKTW9uIERlYyAyOCAxOToyNjozMiAxOTk4ICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CgoJKiBnY2MudGV4aSAoTm9uLWJ1Z3MpOiBgYEVtcHR5JycgbG9vcHMgd2lsbCBiZSBvcHRpbWl6ZWQgYXdheSBpbgoJdGhlIGZ1dHVyZTsgaW5kZWVkIHRoYXQgYWxyZWFkeSBoYXBwZW5zIGluIHNvbWUgY2FzZXMuCgpUdWUgRGVjIDI5IDExOjU4OjUzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzcGFyYy5jIChpbnB1dF9vcGVyYW5kKTogUmVjb2duaXplIChjb25zdCAoY29uc3RhbnRfcF9ydHgpKS4KCShhcml0aF9vcGVyYW5kKTogUmVtb3ZlIGNvbnN0YW50X3BfcnR4IGhhbmRsaW5nLgoJKGNvbnN0NjRfb3BlcmFuZCwgY29uc3Q2NF9oaWdoX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcml0aDExX29wZXJhbmQsIGFyaXRoMTBfb3BlcmFuZCwgYXJpdGhfZG91YmxlX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcml0aDExX2RvdWJsZV9vcGVyYW5kLCBhcml0aDEwX2RvdWJsZV9vcGVyYW5kLCBzbWFsbF9pbnQpOiBMaWtld2lzZS4KCShzbWFsbF9pbnRfb3JfZG91YmxlLCB1bnNfc21hbGxfaW50LCB6ZXJvX29wZXJhbmQpOiBMaWtld2lzZS4KCSogc3BhcmMuaCAoUFJFRElDQVRFX0NPREVTKTogTGlrZXdpc2UuCgoJKiBydGwuaCAoQ09OU1RBTlRfUCk6IFJlbW92ZSBDT05TVEFOVF9QX1JUWC4KClR1ZSBEZWMgMjkgMTE6MzI6NTQgMTk5OCAgUmljaGFyZCBLZW5uZXIgIDxrZW5uZXJAdmxzaTEudWx0cmEubnl1LmVkdT4KCgkqIHJ0bC5kZWYgKENPTlNUQU5UX1BfUlRYKTogQ2xhcmlmeSBjb21tZW50YXJ5LgoJKiBleHByLmMgKGV4cGFuZF9idWlsdGluLCBjYXNlIEJVSUxUX0lOX0NPTlNUQU5UX1ApOiBSZXdvcmsgdG8KCWNvbnNpZGVyIGNvbnN0YW50IENPTlNUUlVDVE9SIGNvbnN0YW50IGFuZCB0byBkZWZlciBzb21lIGNhc2VzCgl0byBjc2UuCgkqIGNzZS5jIChmb2xkX3J0eCwgY2FzZSBDT05TVCk6IEFkZCBoYW5kbGluZyBmb3IgQ09OU1RBTlRfUF9SVFguCgkqIHJlZ2NsYXNzLmMgKHJlZ19zY2FuX21hcmtfcmVmcywgY2FzZSBDT05TVCk6IExpa2V3aXNlLgoKVHVlIERlYyAyOSAxMTozMDoxMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZXhwci5jIChpbml0X2V4cHJfb25jZSk6IEtpbGwgY2FuX2hhbmRsZV9jb25zdGFudF9wIHJlY29nbml0aW9uLgoJKiBjc2UuYyAoZm9sZF9ydHgsIGNhc2UgJ3gnKTogUmVtb3ZlIHN0YW5kYWxvbmUgQ09OU1RBTlRfUF9SVFggY29kZS4KCgkqIGFscGhhLmMgKHJlZ19vcl82Yml0X29wZXJhbmQpOiBSZW1vdmUgQ09OU1RBTlRfUF9SVFggaGFuZGxpbmcuCgkocmVnX29yXzhiaXRfb3BlcmFuZCwgY2ludDhfb3BlcmFuZCwgYWRkX29wZXJhbmQpOiBMaWtld2lzZS4KCShzZXh0X2FkZF9vcGVyYW5kLCBhbmRfb3BlcmFuZCwgb3Jfb3BlcmFuZCk6IExpa2V3aXNlLgoJKHJlZ19vcl9jaW50X29wZXJhbmQsIHNvbWVfb3BlcmFuZCwgaW5wdXRfb3BlcmFuZCk6IExpa2V3aXNlLgoJKiBhbHBoYS5oIChQUkVESUNBVEVfQ09ERVMpOiBMaWtld2lzZS4KClNhdCBEZWMgMjYgMjM6MjY6MjYgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgRGVjIDI2IDA5OjE3OjA0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdlbmdlbnJ0bC5jIChnZW5jb2RlKTogQWx3YXlzIHVzZSBiemVybyB0byBjbGVhciBtZW1vcnkgaW5zdGVhZAoJb2YgZGFuZ2Vyb3VzIGNhc3RzIGFuZCBzdG9yZXMuCgoJKiBNYWtlZmlsZS5pbiAoY29tcGFyZSwgZ251Y29tcGFyZSk6IEFkZCBtaXNzaW5nIGVsc2UgdHJ1ZSBjbGF1c2VzLgoKRnJpIERlYyAyNSAyMzowMDo1NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBhbHBoYS5tZCAoYnVpbHRpbl9sb25nam1wKTogQWRkIG1pc3NpbmcgIkRPTkUiLgoKVGh1IERlYyAyNCAxMDozOTo1NyAxOTk4ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChleGVjdXRlKTogRW5hYmxlIC1waXBlIHdpdGggd2luMzIuCgpXZWQgRGVjIDIzIDEwOjI3OjQ0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3QtYXJtLWVsZjogQWRkIG11bHRpcGxpYiBvcHRpb24gZm9yIGxlYWRpbmcKCXVuZGVyc2NvcmVzLgoKCSogY29uZmlnL2FybS90aHVtYi5oIChBU01fT1VUUFVUX0xBQkVMUkVGKTogVXNlIHZhcmlhYmxlCgkndXNlcl9sYWJlbF9wcmVmaXgnIHJhdGhlciB0aGFuIG1hY3JvIFVTRVJfTEFCRUxfUFJFRklYLgoKCSh0aHVtYl9zaGlmdGFibGVfY29uc3QpOiBVc2UgbWFjcm8gJ0JBU0VfUkVHX0NMQVNTJyByYXRoZXIKCXRoYW4gdmFyaWFibGUgJ3JlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzJy4gIFtOb3RlIHRoaXMKCWNoYW5nZSBpcyB1bnJlbGF0ZWQgdG8gdGhlIG90aGVycyBpbiB0aGlzIHBhdGNoXS4KCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoVVNFUl9MQUJFTF9QUkVGSVgpOiBEZWZhdWx0IHRvIG5vCglsZWFkaW5nIHVuZGVyc2NvcmUuCgpXZWQgRGVjIDIzIDA5OjUxOjMyIDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFsaWFzLmMgKHJlY29yZF9hbGlhc19zdWJzZXQpOiBSZW1vdmUgaWdub3JlZCBgJicuCgkoaW5pdF9hbGlhc19vbmNlKTogTGlrZXdpc2UuCgoJKiBjLWxleC5jIChVTkdFVEMpOiBDYXN0IGZpcnN0IGFyZ3VtZW50IG9mIGNvbW1hIGV4cHJlc3Npb24gdG8gdm9pZC4KCgkqIGNvbmZpZy9taXBzL21pcHMuYyAobWlwc19hc21fZmlsZV9lbmQpOiBDYXN0IHRoZSByZXN1bHQgb2YKCWZ3cml0ZSB0byBgaW50JyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGNvbmZpZy9taXBzL21pcHMuaCAoQ0FOX0VMSU1JTkFURSk6IEFkZCBwYXJlbnMgYXJvdW5kICYmIHdpdGhpbiB8fC4KCShJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IEFkZCBicmFjZXMgdG8gYXZvaWQgYW1iaWd1b3VzIGBlbHNlJy4KCgkqIGNzZS5jIChyZWhhc2hfdXNpbmdfcmVnKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGknIHRvCgl1bnNpZ25lZCBpbnQuCgoJKiBkd2FyZjJvdXQuYyAoaW5pdGlhbF9yZXR1cm5fc2F2ZSk6IENhc3QgLTEgdG8gdW5zaWduZWQgYmVmb3JlCglhc3NpZ25pbmcgaXQgdG8gb25lLgoKCSogZXhjZXB0LmMgKGR1cGxpY2F0ZV9laF9oYW5kbGVycyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYHRtcCcuCgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYGknLgoJKG91dHB1dF9hc21faW5zbik6IENhc3QgYSBjaGFyIHRvIHVuc2lnbmVkIGNoYXIgd2hlbiB1c2VkIGFzIGFuCglhcnJheSBpbmRleC4KCgkqIGdjc2UuYyAoY29tcHV0ZV9wcmVfcHBpbm91dCk6IENhc3QgLTEgdG8gU0JJVE1BUF9FTFRfVFlQRSB3aGVuCglhc3NpZ25pbmcgaXQgdG8gb25lLgoKCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBgY291bnQnIGFuZCBgdGVtcCcuCgoJKiByZWNvZy5jIChwcmVwcm9jZXNzX2NvbnN0cmFpbnRzKTogQ2FzdCBhIGNoYXIgdG8gdW5zaWduZWQgY2hhcgoJd2hlbiB1c2VkIGFzIGFuIGFycmF5IGluZGV4LgoKCSogcmVnbW92ZS5jIChmaW5kX21hdGNoZXMpOiBMaWtld2lzZS4KCgkqIHJlbG9hZDEuYyAoY2FsY3VsYXRlX25lZWRzKTogQWRkIGRlZmF1bHQgY2FzZSBpbiBzd2l0Y2guCgkoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IEluaXRpYWxpemUgdmFyaWFibGUgYG9mZnNldCcuCgkoc2V0X29mZnNldHNfZm9yX2xhYmVsKTogQ2hhbmdlIHR5cGUgb2YgdmFyaWFibGUgYGknIHRvIHVuc2lnbmVkLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBXcmFwIHZhcmlhYmxlIGBpJyBpbiBtYWNybyBjaGVjayBvbgoJQVVUT19JTkNfREVDIHx8IElOU05fQ0xPQkJFUlNfUkVHTk9fUC4KCgkqIHNjYW4tZGVjbHMuYyAoc2Nhbl9kZWNscyk6IE1hcmsgcGFyYW1ldGVycyBgYXJnYycgYW5kIGBhcmd2JwoJd2l0aCBBVFRSSUJVVEVfVU5VU0VELiAgQ2FzdCB2YXJpYWJsZSBgc3RhcnRfd3JpdHRlbicgdG8gc2l6ZV90Cgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIHN0b3ItbGF5b3V0LmMgKGxheW91dF9kZWNsKTogQ2FzdCBtYXhpbXVtX2ZpZWxkX2FsaWdubWVudCB0bwoJdW5zaWduZWQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBMaWtld2lzZSBmb3IKCUdFVF9NT0RFX0FMSUdOTUVOVCgpLgoJKGxheW91dF9yZWNvcmQpOiBDYXN0IHJlY29yZF9hbGlnbiB0byBpbnQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBhCglzaWduZWQgdmFsdWUuCgkobGF5b3V0X3R5cGUpOiBDYXN0IFRZUEVfQUxJR04oKSB0byBpbnQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBhCglzaWduZWQgdmFsdWUuCgoJKiB0cmVlLmMgKGdldF9pZGVudGlmaWVyKTogQ2FzdCB2YXJpYWJsZSBgbGVuJyB0byB1bnNpZ25lZCB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkobWF5YmVfZ2V0X2lkZW50aWZpZXIpOiBMaWtld2lzZQoKV2VkIERlYyAyMyAwMDoxMDowMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IERvIG5vdCBzZXQgcmVsb2FkX2NvbXBsZXRlZC4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBTZXQgcmVsb2FkX2NvbXBsZXRlZCBiZWZvcmUgY2FsbGluZwoJY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMuCgpUdWUgRGVjIDIyIDIzOjU4OjMxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKGVtaXRfcmVsb2FkX2luc25zKTogQ2hlY2sgYHNldCcgbm90IG51bGwgYmVmb3JlIHVzZS4KClR1ZSBEZWMgMjIgMTU6MTU6NDUgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJ0bGFuYWwuYyAobXVsdGlwbGVfc2V0cyk6IENoYW5nZSB0eXBlIG9mICdmb3VuZCcgZnJvbSAncnR4JyB0bwoJJ2ludCcuCgpUdWUgRGVjIDIyIDEzOjU1OjQ0IDE5OTggIFRoZW9kb3JlIFBhcGFkb3BvdWxvICA8VGhlb2RvcmUuUGFwYWRvcG91bG9Ac29waGlhLmlucmlhLmZyPgoKCSogaGFsZnBpYy5jIChoYWxmX3BpY19lbmNvZGUpOiBEZWxldGUgcmVkdW5kYW50IGNvZGUuCgpUdWUgRGVjIDIyIDEzOjAyOjIyIDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKG1haW4pOiBEZWxldGUgaGFuZGxpbmcgb2YgLWRNIGFzIGEgcHJlcHJvY2Vzc29yCglvcHRpb24uCgpNb24gRGVjIDIxIDE3OjM5OjM4IDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKG1haW4pOiBEb24ndCBlbWl0IGFueSB3YXJuaW5ncyB3aGVuIHVzaW5nIC1kRCwgLWRNLCBvcgoJLWRJLCB3aGljaCBhcmUgaGFuZGxlZCBieSB0aGUgcHJlcHJvY2Vzc29yLgoKU3VuIERlYyAyMCAxNjoxMzo0NCAxOTk4ICBKb2huIEYuIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIERpZ2l0YWwgVU5JWCA1LnggdGhlIHNhbWUgYXMgNC54LgoJKiBpMzg2L3NvbDIuaDogRGVmaW5lIExPQ0FMX0xBQkVMX1BSRUZJWCBhcyAiLiIuCgpTdW4gRGVjIDIwIDA3OjM5OjUyIDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU2F0IERlYyAxOSAyMjoyNDoyMiAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBEZWMgMTkgMjE6NDE6MzIgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTYXQgRGVjIDE5IDA5OjUyOjI3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdlbmF0dHIuYyAoZmF0YWwpOiBRdWFsaWZ5IGEgY2hhciogd2l0aCB0aGUgYGNvbnN0JyBrZXl3b3JkLgoKCSogZ2VuYXR0cnRhYi5jIChmYXRhbCwgYXR0cl9wcmludGYsIGF0dHJfc3RyaW5nLCB3cml0ZV9hdHRyX3NldCwKCXdyaXRlX3VuaXRfbmFtZSwgd3JpdGVfZWxpZ2libGVfZGVsYXksIGV4cGFuZF91bml0cywKCW1ha2VfbGVuZ3RoX2F0dHJzLCB3cml0ZV9hdHRyX2Nhc2UsIGZpbmRfYXR0ciwKCW1ha2VfaW50ZXJuYWxfYXR0cik6IExpa2V3aXNlLgoJKiBnZW5jaGVjay5jICh0cmVlX2NvZGVzKTogTGlrZXdpc2UuCgkqIGdlbmNvZGVzLmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbmNvbmZpZy5jIChmYXRhbCk6IExpa2V3aXNlLgoJKiBnZW5lbWl0LmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbmV4dHJhY3QuYyAoZmF0YWwsIHdhbGtfcnR4LCBjb3B5c3RyKTogTGlrZXdpc2UuCgkqIGdlbmZsYWdzLmMgKGZhdGFsKTogTGlrZXdpc2UuCgkqIGdlbm9waW5pdC5jIChmYXRhbCwgb3B0YWJzLCBnZW5faW5zbik6IExpa2V3aXNlLgoJKiBnZW5vdXRwdXQuYyAoZmF0YWwsIGVycm9yLCBwcmVkaWNhdGVzKTogTGlrZXdpc2UuCgkqIGdlbnBlZXAuYyAoZmF0YWwpOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYyAoZmF0YWwsIGRlY2lzaW9uLCBwcmVkX3RhYmxlLCBhZGRfdG9fc2VxdWVuY2UsCgl3cml0ZV90cmVlXzEsIHdyaXRlX3RyZWUsIGNoYW5nZV9zdGF0ZSwgY29weXN0ciwgaW5kZW50cyk6IExpa2V3aXNlLgoKVGh1IERlYyAxNyAxODoyMTo0OSAxOTk4ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KCgkqIGNvbmZpZ3VyZS5pbiAod2l0aC1mYXN0LWZpeGluY2x1ZGVzKTogRml4IHdoaXRlc3BhY2UuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCgkqIGZpeGluY2x1ZGVzIChjX2FzbS5oKTogV3JhcCBEaWdpdGFsIFVOSVggVjQuMEIgREVDIEMgc3BlY2lmaWMKCWFzbSgpIGV0Yy4gZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluIF9fREVDQy4KClRodSBEZWMgMTcgMTM6NTc6MjMgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZW1pdF9tb3ZlX2luc25fMSk6IE9ubHkgZW1pdCBhIGNsb2JiZXIgaWYgdGhlIHRhcmdldAoJaXMgYSBwc2V1ZG8gcmVnaXN0ZXIuCgpUaHUgRGVjIDE3IDEzOjUwOjI5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBnY3NlLmM6IEluY2x1ZGUgZXhwci5oIGluIG9yZGVyIHRvIGdldCB0aGUgcHJvdG90eXBlIGZvcgoJZ2V0X2NvbmRpdGlvbigpIHdoaWNoIGlzIHVzZWQgaW4gZGVsZXRlX251bGxfcG9pbnRlcl9jaGVja3MoKS4KClRodSBEZWMgMTcgMTU6NTg6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogaHdpbnQuaDogTmV3IGZpbGUgdG8gY29uc29saWRhdGUgSE9TVF9XSURFX0lOVCAoZXRjKSBtYWNyb3MuCgpUaHUgRGVjIDE3IDEyOjMxOjEyIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIE1ha2VmaWxlLmluIChJTlRFUk5BTF9DRkxBR1MpOiBBZGQgU0NIRURfQ0ZMQUdTLgoJKEFMTF9DRkxBR1MpOiBEZWxldGUgU0NIRURfQ0ZMQUdTLgoKMTk5OC0xMi0xNyAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjb25maWcvaTYwL2k5NjAubWQgKGV4dGVuZHFpaGkyKTogRml4IHR5cG8gKHVzYWdlICcsJyBpbnN0ZWFkIG9mCgknOycpLgoKMTk5OC0xMi0xNyAgTWljaGFlbCBUaWVtYW5uICA8dGllbWFubkBheG9uLmN5Z251cy5jb20+CgoJKiBpOTYwLm1kIChleHRlbmQqLCB6ZXJvX2V4dGVuZCopOiBEb24ndCBnZW5lcmF0ZSBydGwgdGhhdCBsb29rcwoJbGlrZSAoc3VicmVnOlNJIChyZWc6U0kgTikgMCksIGJlY2F1c2UgaXQncyB3cm9uZywgYW5kIGl0IGhpZGVzCglvcHRpbWl6YXRpb25zIGZyb20gdGhlIGNvbWJpbmVyLgoKVGh1IERlYyAxNyAwODoyNzowMyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChjb21iaW5lX2dpdnNfdXNlZF9ieV9vdGhlcik6IERvbid0IGRlcGVuZCBvbiBuX3RpbWVzX3NldC4KCldlZCBEZWMgMTYgMTc6MzA6MzUgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChtYWluKTogRGlzYWJsZSBvcHRpbWl6ZV9zaXplIGlmIGEgc3BlY2lmaWMKCW9wdGltaXphdGlvbiBsZXZlbCBpcyByZXF1ZXN0ZWQuICBBbHdheXMgc2V0IG9wdGltaXphdGlvbgoJbGV2ZWwgdG8gMiBpZiAtT3MgaXMgc3BlY2lmaWVkLgoKV2VkIERlYyAxNiAxNjozMzowNCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBvYmpjL2xhbmctc3BlY3MuaDogUGFzcyAtTUQsIC1NTUQgYW5kIC1NRyB0byBjYzFvYmogaWYgY29uZmlndXJlZCB3aXRoCgljcHBsaWIuCgkqIGNwcGxpYi5jIChjcHBfc3RhcnRfcmVhZCk6IElmIGluX2ZuYW1lIGlzIG5vdCBpbml0aWFsaXplZCwgdHJ5IHRvCglpbml0aWFsaXplIGl0IHVzaW5nIGZuYW1lLgoKMTk5OC0xMi0xNiAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChkb19pbmNsdWRlKTogVHJlYXQgI2luY2x1ZGVfbmV4dCBpbiB0aGUKCXByaW1hcnkgc291cmNlIGZpbGUgYXMgI2luY2x1ZGUgcGx1cyB3YXJuaW5nLiAgVHJlYXQKCSNpbmNsdWRlX25leHQgaW4gYSBmaWxlIGluY2x1ZGVkIGJ5IGFic29sdXRlIHBhdGggYXMgYW4KCWVycm9yLiAgZnAgPT0gQ1BQX05VTExfQlVGRkVSIGlzIGEgZmF0YWwgaW5jb25zaXN0ZW5jeS4KCldlZCBEZWMgMTYgMTI6Mjg6NTQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY2NjcC5jOiBEb24ndCBkZWZpbmUgTUlOL01BWCBhbnltb3JlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIG1hY2htb2RlLmg6IExpa2V3aXNlLgoJKiBzeXN0ZW0uaDogUHJvdmlkZSBkZWZpbml0aW9ucyBmb3IgTUlOL01BWC4KClR1ZSBEZWMgMTUgMjM6NDc6NDIgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGZpeC1oZWFkZXIuYzogRG9uJ3QgZGVmaW5lIHhzdHJkdXAgaGVyZS4KCldlZCBEZWMgMTYgMDU6MTE6MDQgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAoY29uc2VjX3NldHNfZ2l2KTogTmV3IGFyZ3VtZW50IGxhc3RfY29uc2VjX2luc24uCgkoc3RyZW5ndGhfcmVkdWNlKTogUHJvdmlkZSAvIHVzZSBpdC4KCldlZCBEZWMgMTYgMTc6MjQ6MDcgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5oIChsb29wX2luZm8pOiBOZXcgZmllbGQgJ3Z0b3AnLgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFVzZSBsb29wX2luZm8tPnZ0b3AgcmF0aGVyIHRoYW4KCXNjYW5uaW5nIGxvb3AgZm9yIHZ0b3AuCgkqIHVucm9sbC5jIChzdWJ0cmFjdF9yZWdfdGVybSwgZmluZF9jb21tb25fcmVnX3Rlcm0pOiBOZXcgZnVuY3Rpb25zLgoJKGxvb3BfaXRlcmF0aW9ucyk6IFVzZSB0aGVtIHRvIGRldGVybWluZSBpZiBsb29wIGhhcyBhIGNvbnN0YW50CgludW1iZXIgb2YgaXRlcmF0aW9ucy4gIFNldCBsb29wX2luZm8tPnZ0b3AuICBEb24ndCBzdWJ0cmFjdAoJY29tbW9uIHJlZyB0ZXJtIGZyb20gaW5pdGlhbF92YWx1ZSBhbmQgZmluYWxfdmFsdWUgaWYgaGF2ZSBhCglkby13aGlsZSBsb29wLgoKVHVlIERlYyAxNSAxMzo0OTo1NSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMjAwLm1kIChhZGRzaTMgZXhwYW5kZXIpOiBVc2UgIm5vbm1lbW9yeV9vcGVyYW5kIiBmb3Igb3BlcmFuZCAyLgoKCSogbW4xMDMwMC5tZCAoYnNldCwgYmNscik6IE9wZXJhbmQgMCBpcyBhIHJlYWQvd3JpdGUgb3BlcmFuZC4KCgkqIG1uMTAyMDAubWQgKGFic3NmMiwgbmVnc2YyKTogTmV3IGV4cGFuZGVycy4KCgkqIG1uMTAzMDAubWQgKGFic2RmMiwgYWJzc2YyLCBuZWdkZjIsIG5lZ3NmMik6IE5ldyBleHBhbmRlcnMuCgpUdWUgRGVjIDE1IDExOjU1OjMwIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBpbnRlZ3JhdGUuYyAoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBJZiBhIFNVQlJFRyBpcwoJcmVwbGFjZWQgYnkgYSBDT05DQVQgd2hvc2UgY29tcG9uZW50cyBkbyBub3QgaGF2ZSB0aGUgc2FtZQoJbW9kZSBhcyB0aGUgb3JpZ2luYWwgU1VCUkVHLCB1c2UgYSBuZXcgU1VCUkVHIHRvIHJlc3RvcmUgdGhlCgltb2RlLgoKCSogZW1pdC1ydGwuYyAoc3VicmVnX3JlYWxwYXJ0X3ApOiBDb3BlIHdpdGggc3VicmVncyBjb250YWluaW5nCgltdWx0aXdvcmQgY29tcGxleCB2YWx1ZXMuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwYWxsb2MuYzogQWRkIHhzdHJkdXAgaGVyZS4KCSogY3BwbGliLmg6IFJlbW92ZSBzYXZlc3RyaW5nIHByb3RvdHlwZS4KCSogY3BwbGliLmM6IFJlbW92ZSBzYXZlc3RyaW5nIGZ1bmN0aW9uLiBzL3NhdmVzdHJpbmcveHN0cmR1cC8KCSAgdGhyb3VnaG91dC4KCSogY3BwZmlsZXMuYzogcy9zYXZlc3RyaW5nL3hzdHJkdXAvIHRocm91Z2hvdXQuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmM6IE1ha2UgYWxsIGRpcmVjdGl2ZSBoYW5kbGVycyByZWFkIHRoZWlyIG93bgoJICBhcmd1bWVudHMuCgkgIChzdHJ1Y3QgZGlyZWN0aXZlKTogUmVtb3ZlIGxhc3QgdHdvIGFyZ3VtZW50cyBmcm9tIEZVTkMKCSAgbWVtYmVyIHByb3RvdHlwZS4gUmVtb3ZlIGBjb21tYW5kX3JlYWRzX2xpbmUnIG1lbWJlcgoJICBlbnRpcmVseS4KCSAgKGRpcmVjdGl2ZV90YWJsZSk6IFJlbW92ZSBpbml0aWFsaXphdGlvbnMgb2YKCSAgY29tbWFuZF9yZWFkc19saW5lIGZsYWcuICBQcmV0dHktcHJpbnQuCgkgIChldmFsX2lmX2V4cHJlc3Npb24sIGRvX2RlZmluZSwgZG9fbGluZSwgZG9faW5jbHVkZSwKCSAgZG9fdW5kZWYsIGRvX2Vycm9yLCBkb19wcmFnbWEsIGRvX2lkZW50LCBkb19pZiwgZG9feGlmZGVmLAoJICBkb19lbHNlLCBkb19lbGlmLCBkb19zY2NzLCBkb19hc3NlcnQsIGRvX3VuYXNzZXJ0LAoJICBkb193YXJuaW5nKTogVGFrZSBvbmx5IHR3byBhcmdzLgoKCSAgKGNwcF9kZWZpbmUpOiBDYWxsIGRvX2RlZmluZSB3aXRoIHR3byBhcmdzIGFuZCB0aGUgdGV4dCB0bwoJICBkZWZpbmUgc3R1ZmZlZCBpbnRvIGEgYnVmZmVyLgoJICAobWFrZV9hc3NlcnRpb24pOiBDYWxsIGRvX2Fzc2VydCB3aXRoIHR3byBhcmdzLgoJICAoaGFuZGxlX2RpcmVjdGl2ZSk6IENhbGwgZG9fbGluZSB3aXRoIHR3byBhcmdzLiBDYWxsCgkgIGt0LT5mdW5jIHdpdGggdHdvIGFyZ3MuICBSZW1vdmUgY29tbWFuZF9yZWFkc19saW5lCgkgIHByb2Nlc3NpbmcuCgkgIChkb19kZWZpbmUsIGRvX3VuZGVmLCBkb19lcnJvciwgZG9fd2FybmluZywgZG9fcHJhZ21hLAoJICBkb19zY2NzKTogUmVhZCB0aGUgcmVzdCBvZiB0aGUgbGluZSBoZXJlLgoJICAoZG9faWRlbnQpOiBHb2JibGUgcmVzdCBvZiBsaW5lLCBhcyBjY2NwIGRvZXMuCgkgIChjcHBfdW5kZWYpOiBOZXcgZnVuY3Rpb24uCgkgIChjcHBfc3RhcnRfcmVhZCk6IENhbGwgY3BwX3VuZGVmIGluc3RlYWQgb2YgZG9fdW5kZWYuCgoxOTk4LTEyLTE1ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwaGFzaC5oICh1bmlvbiBoYXNoX3ZhbHVlKTogUmVtb3ZlIGBrZXlkZWYnIG1lbWJlciwgYWRkIGEKCSAgYHN0cnVjdCBoYXNobm9kZSAqYXNjaGFpbicgbWVtYmVyIGZvciAjYXNzZXJ0LgoKCSogY3BwbGliLmMgKHN0cnVjdCB0b2tlbmxpc3RfbGlzdCwgc3RydWN0CgkgIGFzc2VydGlvbl9oYXNobm9kZSk6IERlbGV0ZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMuCgkgIChhc3NlcnRpb25faW5zdGFsbCwgYXNzZXJ0aW9uX2xvb2t1cCwgZGVsZXRlX2Fzc2VydGlvbiwKCSAgY2hlY2tfYXNzZXJ0aW9uLCBjb21wYXJlX3Rva2VuX2xpc3RzLCByZXZlcnNlX3Rva2VuX2xpc3QsCgkgIHJlYWRfdG9rZW5fbGlzdCwgZnJlZV90b2tlbl9saXN0KTogRGVsZXRlIGZ1bmN0aW9ucy4KCSAgKHBhcnNlX2Fzc2VydGlvbik6IE5ldyBmdW5jdGlvbi4KCSAgKGNwcF9jbGVhbnVwKTogRG9uJ3QgZGVzdHJveSB0aGUgYXNzZXJ0aW9uX2hhc2h0YWJsZS4KCgkgIChkb19hc3NlcnQpOiBHdXQgYW5kIHJld3JpdGUuICAjYXNzZXJ0IGZvbyAoYmFyKSBwbGFjZXMKCSAgZW50cmllcyBmb3IgYCNmb28nIGFuZCBgI2ZvbyhiYXIpJyBpbiB0aGUgbWFjcm8gaGFzaCB0YWJsZSwKCSAgdHlwZSBUX0FTU0VSVC4gIFRoZSB2YWx1ZSB1bmlvbidzIGBhc2NoYWluJyBtZW1iZXIgaXMgdXNlZAoJICB0byBjaGFpbiBhbGwgYW5zd2VycyBmb3IgYSBnaXZlbiBwcmVkaWNhdGUgdG9nZXRoZXIuCgkgIChkb191bmFzc2VydCk6IEFsc28gcmV3cml0dGVuLiAgVGFrZSBhbiB1bi1hc3NlcnRlZAoJICBhbnN3ZXIgb2ZmIHRoZSBjaGFpbiBmcm9tIGl0cyBwcmVkaWNhdGUgYW5kIGNhbGwKCSAgZGVsZXRlX21hY3JvIG9uIHRoZSBoYXNobm9kZSwgb3Igd2FsayBhIHByZWRpY2F0ZSBjaGFpbgoJICBjYWxsaW5nIGRlbGV0ZV9tYWNybyBvbiBhbGwgdGhlIGVudHJpZXMuCgkgIChjcHBfcmVhZF9jaGVja19hc3NlcnRpb24pOiBTaW1wbHkgY2FsbCBwYXJzZV9hc3NlcnRpb24gdG8KCSAgZ2V0IHRoZSBjYW5vbmljYWwgYXNzZXJ0aW9uIG5hbWUsIGFuZCBsb29rIHRoYXQgdXAgaW4gdGhlCgkgIGhhc2ggdGFibGUuCgoJKiBjcHBsaWIuaCAoQVNTRVJUSU9OX0hBU0hOT0RFLEFTU0VSVElPTl9IQVNIU0laRSxhc3NlcnRpb25faGFzaHRhYik6CglSZW1vdmVkLgoKCSogY3BwaGFzaC5jIChpbnN0YWxsKTogVXNlIGJjb3B5IGluc3RlYWQgb2YgYW4gZXhwbGljaXQgbG9vcAoJICB0byBjb3B5IHRoZSBtYWNybyBuYW1lLgoKCSogY3BwZXhwLmMgKGNwcF9sZXgpOiBDb252ZXJ0IHRoZSByZXN1bHQgb2YKCSAgY3BwX3JlYWRfY2hlY2tfYXNzZXJ0aW9uIHRvIGEgYHN0cnVjdCBvcGVyYXRpb24nIGRpcmVjdGx5OwoJICBkb24ndCBnbyB0aHJvdWdoIHBhcnNlX251bWJlci4KClR1ZSBEZWMgMTUgMTg6Mjc6MzkgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuaCAoc3RydWN0IGluZHVjdGlvbik6IERlbGV0ZSB0aW1lc191c2VkIG1lbWJlci4KCSogbG9vcC5jIChuX3RpbWVzX3NldCk6IFJlbmFtZSB0byBzZXRfaW5fbG9vcC4gIENoYW5nZWQgYWxsIHVzZXJzLgoJKG5fdGltZXNfdXNlZCk6IFJlbmFtZSB0byBuX3RpbWVzX3NldC4gIENoYW5nZWQgYWxsIHVzZXJzLgoJKHNjYW5fbG9vcCk6IEZyZWUgcmVnX3NpbmdsZV91c2FnZSBiZWZvcmUgc3RyZW5ndGggcmVkdWN0aW9uLgoJKHJlY29yZF9naXYsIGNvbWJpbmVfZ2l2cyk6IFJlbW92ZSBoYW5kbGluZyBvZiB0aW1lc191c2VkIG1lbWJlci4KCShjb21iaW5lX2dpdnNfdXNlZF9vbmNlKTogUmVuYW1lIHRvOgoJKGNvbWJpbmVfZ2l2c191c2VkX2J5X290aGVyKSAuICBDaGFuZ2VkIGFsbCBjYWxsZXJzLgoKVHVlIERlYyAxNSAwMTo0NToyNiAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoZ2VuX3N0cnVjdF9vcl91bmlvbl90eXBlX2RpZSk6IENoZWNrIEFHR1JFR0FURV9UWVBFX1AKCWluc3RlYWQgb2YgVFJFRV9DT0RFX0NMQVNTID09ICd0Jy4KCShnZW5fdHlwZV9kaWUpOiBMaWtld2lzZS4KCShzY29wZV9kaWVfZm9yKTogSWdub3JlIEZVTkNUSU9OX1RZUEUgInNjb3BlcyIuCgpNb24gRGVjIDE0IDE2OjIzOjI3IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHJlYWwuYyAoZW5kaWFuKTogRGlzYWJsZSBsYXN0IGNoYW5nZSB1bmxlc3MKCUhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgZ3JlYXRlciB0aGFuIDMyLgoKTW9uIERlYyAxNCAxNzoxMzozNiAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBvdXRwdXQuaCAoZm9yY2VfZGF0YV9zZWN0aW9uKTogTmV3IHByb3RvdHlwZS4KCSogdmFyYXNtLmMgKGZvcmNlX2RhdGFfc2VjdGlvbik6IE5ldyBmdW5jdGlvbiB0byBmb3JjZSB0aGUKCWRhdGEgc2VjdGlvbiwgcmVnYXJkbGVzcyBvZiB3aGF0IGluX3NlY3Rpb24gdGhpbmtzLgoJKiBkd2FyZjJvdXQuYyAob3V0cHV0X2NhbGxfZnJhbWVfaW5mbyk6IENhbGwgZm9yY2VfZGF0YV9zZWN0aW9uCglzaW5jZSB2YXJhc20gbWF5IG5vdCByZWFsaXplIHdlJ3ZlIGNoYW5nZXMgc2VjdGlvbnMuCgpNb24gRGVjIDE0IDE0OjA5OjM0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERlbGV0ZSBSRUdfUkVUVkFMIGFuZCBSRUdfTElCQ0FMTCBub3RlcwoJICBhZnRlciBjb21wbGV0aW5nIHJlbG9hZC4KCgkqIHJ0bC50ZXhpOiBEb2N1bWVudCB0aGF0IFJFR19SRVRWQUwgYW5kIFJFR19MSUJDQUxMIGFyZQoJICBkZWxldGVkIGFmdGVyIHJlbG9hZC4KCk1vbiBEZWMgMTQgMDE6Mzk6MjggMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcnRsLmggKG11bHRpcGxlX3NldHMpOiBGaXggcHJvdG90eXBlLgoJKiBydGxhbmFsLmMgKG11bHRpcGxlX3NldHMpOiBGaXggcmV0dXJuIHR5cGUuCgpTdW4gRGVjIDEzIDEyOjQzOjU4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIERlYyAxMyAwMTowNToyMiAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCjE5OTgtMTItMTMgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIHByb3RvaXplLmMgKGZwdXRzKTogV3JhcCBleHRlcm4gZGVjbGFyYXRpb24gaW4gI2lmbmRlZiBmcHV0cy4KClN1biBEZWMgMTMgMDA6MjQ6MTQgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJ0bC5oIChyZWNvbXB1dGVfcmVnX3VzYWdlKTogQWRkIHNlY29uZCBhcmd1bWVudC4KCSogZmxvdy5jIChyZWNvbXB1dGVfcmVnX3VzYWdlKTogTGlrZXdpc2UuCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU3VwcGx5IHNlY29uZCBhcmd1bWVudCB0bwoJcmVjb21wdXRlX3JlZ191c2FnZS4KCgkqIHJlbG9hZDEuYyAoY29tcHV0ZV91c2VfYnlfcHNldWRvcyk6IEFsbG93IHJlZ19yZW51bWJlcltyZWdub10gPCAwCglhZnRlciByZWxvYWQuCgpTYXQgRGVjIDEyIDIzOjM5OjEwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsvdC1tNjhrZWxmIChNVUxUSUxJQl9PUFRJT05TKTogQWRkIG1jcHUzMi4KCShNVUxUSUxJQl9NQVRDSEVTKTogLW02ODMzMiBub3cgdXNlcyBtY3B1MzIgbGlicmFyaWVzLCBub3QgbTY4MDAwLgoJKE1VTFRJTElCX0VYQ0VQVElPTlMpOiBEb24ndCBidWlsZCA2ODg4MSBsaWJyYXJpZXMgZm9yIG02ODAwMCwKCW1jcHUzMiBvciBtNTIwMC4KCgkqIGkzODYvbmV4dC5oIChBU01fT1VUUFVUX0FMSUdOKTogVXNlIDB4OTAgZm9yIGZpbGwgY2hhcmFjdGVyLgoKCSogcnRsYW5hbC5jIChtdWx0aXBsZV9zZXRzKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAobXVsdGlwbGVfc2V0cyk6IERlY2xhcmUgaXQuCgkqIGxvY2FsLWFsbG9jLmMgKHdpcGVfZGVhZF9yZWcpOiBVc2UgaXQuCgkqIGdsb2JhbC5jIChnbG9iYWxfY29uZmxpY3RzKTogTGlrZXdpc2UuCgpTYXQgRGVjIDEyIDIyOjEzOjAyIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBnbG9iYWwuYyAocmVjb3JkX2NvbmZsaWN0cyk6IERvbid0IHVzZSBhbiBhcnJheSBvZiBzaG9ydHMgdG8KCXN0b3JlIGFuIGFycmF5IG9mIGludHMuCgkoZ2xvYmFsX2NvbmZsaWN0cyk6IExpa2V3aXNlLgoKU2F0IERlYyAxMiAxNjo0OToyNCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfZXhwYW5kX2Jsb2NrX21vdmUpOiBtb2RlX2Zvcl9zaXplIGV4cGVjdHMKCWJpdHMsIG5vdCBieXRlcy4gIEluZmVyIGV4dHJhIGFsaWdubWVudCBmcm9tIGFkZHJlc3NvZi4KCjE5OTgtMTItMTEgIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwL3N5c3Y0LmggKEFTTV9PVVRQVVRfQUxJR05FRF9MT0NBTCk6IFB1dCBzbWFsbCBkYXRhIGluIHRoZQoJLnNic3Mgc2VjdGlvbiwgbm90IC5zZGF0YS4KCjE5OTgtMTItMTEgIE1hbmZyZWQgSG9sbHN0ZWluICA8bWFuZnJlZEBzLWRpcmVrdG5ldC5kZT4KCgkqIGNjY3AuYzogRG8gbm90ICNpbmNsdWRlIDxzeXMvc3RhdC5oPiBoZXJlOyB0aGlzIGlzIGFscmVhZHkgZG9uZQoJYnkgInN5c3RlbS5oIi4KCSogY29sbGVjdDIuYzogTGlrZXdpc2UuCgkqIGNwcGxpYi5oOiBMaWtld2lzZS4KCSogZ2NjLmM6IExpa2V3aXNlLgoJKiBnY292LmM6IExpa2V3aXNlLgoJKiBnZXRwd2QuYzogTGlrZXdpc2UuCgkqIHByb3RvaXplLmM6IExpa2V3aXNlLgoJKiB0b3BsZXYuYzogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaCAoSE9TVF9XSURFX0lOVCk6IEdldCBkZWZpbml0aW9uIGZyb20gIm1hY2htb2RlLmgiCglhbmQgZG9uJ3QgdHJ5IHRvIGRlZmluZSBpdCBoZXJlLgoJKiBNYWtlZmlsZS5pbiAoY3BwbWFpbi5vKTogRGVwZW5kIG9uIG1hY2htb2RlLmguCgkoY3BwbGliLm8pOiBMaWtld2lzZS4KCShjcHBlcnJvci5vKTogTGlrZXdpc2UuCgkoY3BwZXhwLm8pOiBMaWtld2lzZS4KCShjcHBmaWxlcy5vKTogTGlrZXdpc2UuCgkoY3BwaGFzaC5vKTogTGlrZXdpc2UuCgkoY3BwYWxsb2Mubyk6IExpa2V3aXNlLgoJKGZpeC1oZWFkZXIubyk6IExpa2V3aXNlLgoJKHNjYW4tZGVjbHMubyk6IExpa2V3aXNlLgoKRnJpIERlYyAxMSAxMTowMjo0OSAxOTk4ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIHNoLmMgKHByaW50X29wZXJhbmQpOiBMb29rdXAgaW50ZXJydXB0X2hhbmRsZXIgYXR0cmlidXRlIGluc3RlYWQKCW9mIHJlbHlpbmcgb24gc3RhdGljIHZhcmlhYmxlLgoJKiAoY2FsY19saXZlX3JlZ3MpOiBMaWtld2lzZS4KCSogKHNoX3ByYWdtYV9pbnNlcnRfYXR0cmlidXRlcyk6IENyZWF0ZSBpbnRlcnJ1cHRfaGFuZGxlcgoJYXR0cmlidXRlIGlmIGEgcHJhZ21hIHdhcyBzcGVjaWZpZWQuCgkqIChzaF92YWxpZF9tYWNoaW5lX2RlY2xfYXR0cmlidXRlKTogRG9uJ3Qgc2V0IHN0YXRpYyBmbGFnLgoJKiBzaC5oIChQUkFHTUFfSU5TRVJUX0FUVFJJQlVURVMpOiBOZXcuCgpGcmkgRGVjIDExIDEyOjU2OjA3IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lKTogVXNlIEJBU0lDX0JMT0NLX0xJVkVfQVRfU1RBUlQKCXRvIGRldGVybWluZSBpZiBhIHJlZ2lzdGVyIGlzIGxpdmUgYXQgYSBqdW1wIGRlc3RpbmF0aW9uLgoJRXZlcnl0aGluZyBpcyBkZWFkIGF0IGEgQkFSUklFUi4KClRodSBEZWMgMTAgMTY6MDI6MDYgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY3NlLmMgKHNpbXBsaWZ5X3VuYXJ5X29wZXJhdGlvbik6IFNpZ24tZXh0ZW5kIGNvbnN0YW50cyB3aGVuCgl0aGV5IGhhdmUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IHNldCBmb3IgdGhlIHRhcmdldC4KCSogcmVhbC5jIChlbmRpYW4pOiBTaWduLWV4dGVuZCAzMiBiaXQgb3V0cHV0IHZhbHVlcyBvbiBhIDY0IGJpdAoJaG9zdC4KCSogbTMyci9tMzJyLmMgKG0zMnJfZXhwYW5kX3Byb2xvZ3VlKTogU3RvcmUgcHJldGVuZF9zaXplIGluCglIT1NUX1dJREVfSU5UIHRlbXBvcmFyeSBiZWZvcmUgbmVnYXRpbmcgaXQuCgkqIG0zMnIvbTMyci5tZCAobW92c2lfaW5zbisxKTogVXNlIH4weGZmZmYgaW5zdGVhZCBvZiAweGZmZmYwMDAwLgoKVGh1IERlYyAxMCAxNTowNTo1OSAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBvYmpjL29iamMtYWN0LmMgKGxhbmdfaW5pdF9vcHRpb25zKTogRW5jbG9zZSBjcHBsaWIgcmVsYXRlZCBjb2RlIGluCgkjaWYgVVNFX0NQUExJQi4KClRodSBEZWMgMTAgMTM6Mzk6NDYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29sbGVjdDIuaDogTmV3IGhlYWRlciBmaWxlIGZvciBwcm90b3R5cGVzLgoKCSogTWFrZWZpbGUuaW4gKGNvbGxlY3QyLm8sIHRsaW5rLm8pOiBEZXBlbmQgb24gY29sbGVjdDIuaC4KCgkqIGNvbGxlY3QyLmM6IEluY2x1ZGUgY29sbGVjdDIuaC4KCSogdGxpbmsuYzogTGlrZXdpc2UuCgpXZWQgRGVjICA5IDIzOjU1OjExIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYzogVXBkYXRlIHNvbWUgY29tbWVudHMuCgpXZWQgRGVjICA5IDE1OjI5OjI2IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIG9iamMvb2JqYy1hY3QuYyAoY3BwX2luaXRpYWxpemVkKTogUmVtb3ZlZC4KCShsYW5nX2luaXRfb3B0aW9ucyk6IEluaXRpYWxpemUgY3BwbGliLgoJKGxhbmdfZGVjb2RlX29wdGlvbik6IE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgY3BwbGliIHRvCglsYW5nX2luaXRfb3B0aW9ucy4KCSogYy1sYW5nLmMgKHBhcnNlX29wdGlvbnMscGFyc2VfaW4pOiBBZGRlZC4KCShsYW5nX2luaXRfb3B0aW9ucyk6IEluaXRpYWxpemVkIGNwcGxpYiBoZXJlLgoJKiBjLWRlY2wuYyAocGFyc2Vfb3B0aW9ucyxjcHBfaW5pdGlhbGl6ZWQpOiBSZW1vdmVkLgoJKGNfZGVjb2RlX29wdGlvbik6IE1vdmUgaW5pdGlhbGl6YXRpb24gb2YgY3BwbGliIHRvCglsYW5nX2luaXRfb3B0aW9ucy4KCldlZCBEZWMgIDkgMTk6MzY6NTcgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX2NvbWJpbmUsIHJlbG9hZF9jb21iaW5lX25vdGVfc3RvcmUpOgoJTWFrZSBTVE9SRV9SVUlEIGFsd2F5cyB2YWxpZC4KCShyZWxvYWRfY29tYmluZSk6IENoZWNrIGlmIEJBU0UgaXMgY2xvYmJlcmVkIHRvbyBlYXJseS4KCldlZCBEZWMgIDkgMDk6NTM6NTggMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBEaXNwbGF5IHRoZSBpbnNuIHRoYXQgY2Fubm90IGJlCglyZWxvYWRlZC4KCldlZCBEZWMgIDkgMTI6MTU6MjYgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY2NjcC5jIChjcmVhdGVfZGVmaW5pdGlvbik6IEZpeCBlbmQgb2YgYnVmZmVyIGxvZ2ljLgoKV2VkIERlYyAgOSAxMDoxNTo0NSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBleGNlcHQuYyAoZHVwbGljYXRlX2VoX2hhbmRsZXJzLCByZXRocm93X3N5bWJvbF9tYXApOiBGdW5jdGlvbgoJcG9pbnRlciBwYXJhbWV0ZXJzIGNoYW5nZWQgdG8gdXNlIHRoZSBQQVJBTVMoKSBtYWNyby4KCldlZCBEZWMgIDkgMDk6MTI6NDAgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmggKHN0cnVjdCBoYW5kbGVyX2luZm8pOiBBZGQgaGFuZGxlcl9udW1iZXIgZmllbGQuCgkqIGV4Y2VwdC5jIChnZW5fZXhjZXB0aW9uX2xhYmVsKTogRUggbGFiZWxzIG5vIGxvbmdlciBuZWVkIHRvIGJlCglvbiB0aGUgcGVybWFuZW50IG9ic3RhY2suCgkoZ2V0X25ld19oYW5kbGVyKTogU2V0IHRoZSBsYWJlbCBudW1iZXIgZmllbGQuCgkob3V0cHV0X2V4Y2VwdGlvbl90YWJsZV9lbnRyeSk6IFJlZ2VuZXJhdGUgaGFuZGxlciBsYWJlbCByZWZlcmVuY2UKCWZyb20gdGhlIGxhYmVsIG51bWJlciBmaWVsZC4KCShpbml0X2VoKTogUmVtb3ZlIGEgYmxhbmsgbGluZS4KCSogaW50ZWdyYXRlLmMgKGdldF9sYWJlbF9mcm9tX21hcCk6IExhYmVscyBubyBsb25nZXIgbmVlZCB0byBiZQoJb24gdGhlIHBlcm1hbmVudCBvYnN0YWNrLgoKVHVlIERlYyAgOCAyMjowNDozMyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBpOTYwL2k5NjAuaCAoQ09OU1RfQ09TVFMsIGNhc2UgQ09OU1RfSU5UKTogQWNjZXB0IHBvd2VyMl9vcGVyYW5kCglvbmx5IHdoZW4gT1VURVJfQ09ERSBpcyBTRVQuCgpUdWUgRGVjICA4IDIyOjQ3OjE1IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IElmIHNjYW5fc3RhcnQgcG9pbnRzIHRvIHRoZSBsb29wIGV4aXQKCXRlc3QsIGJlIHdhcnkgb2Ygc3VidmVyc2l2ZSB1c2Ugb2YgZ290b3MgaW5zaWRlIGV4cHJlc3Npb24gc3RhdGVtZW50cy4KCURvbid0IHNldCBtYXliZV9tdWx0aXBsZSBmb3IgYSBiYWNrd2FyZCBqdW1wIHRoYXQgZG9lcyBub3QKCWluY2x1ZGUgdGhlIGxhYmVsIHVuZGVyIGNvbnNpZGVyYXRpb24gaW50byBpdHMgcmFuZ2UuCgkqIHVucm9sbC5jIChiaXZfdG90YWxfaW5jcmVtZW50KTogTWFrZSB1c2Ugb2YgbWF5YmVfbXVsdGlwbGUgZmllbGQuCgpUdWUgRGVjICA4IDIyOjMzOjE4IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBleHBsb3cuYyAocGx1c19jb25zdGFudF93aWRlKTogRG9uJ3QgaW1tZWRpYXRlbHkgcmV0dXJuIHdpdGgKCXJlc3VsdCBvZiByZWN1cnNpdmUgY2FsbC4KClR1ZSBEZWMgIDggMTU6MzI6NTYgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZWgtY29tbW9uLmggKHN0cnVjdCBlaF9jb250ZXh0KTogQWRkIHRhYmxlX2luZGV4IGZvciByZXRocm93cy4KCgkqIHJ0bC5oIChlbnVtIHJlZ19ub3RlKTogQWRkIFJFR19FSF9SRUdJT04gYW5kIFJFR19FSF9SRVRIUk9XIHJlZyBub3Rlcy4KCShTWU1CT0xfUkVGX05FRURfQURKVVNUKTogTmV3IGZsYWcgaW5kaWNhdGluZyBzeW1ib2wgbmVlZHMgdG8gYmUKCXByb2Nlc3NlZCB3aGVuIGlubGluZWQgb3IgdW5yb2xsZWQgKGllIGR1cGxpY2F0ZWQgaW4gc29tZSB3YXkpLgoKCSogcnRsLmMgKHJlZ19ub3RlX25hbWUpOiBBZGQgc3RyaW5ncyBmb3IgbmV3IHJlZ19ub3RlIGVudW1zLgoKCSogZXhwci5oIChyZXRocm93X2xpYmZ1bmMpOiBOZXcgbGlicmFyeSBkZWNsLgoKCSogb3B0YWJzLmMgKHJldGhyb3dfbGliZnVuYyk6IEluaXRpYWxpemUuCgoJKiBleGNlcHQuaCAoc3RydWN0IGVoX2VudHJ5KTogQWRkIG5ldyBmaWVsZCAncmV0aHJvd19sYWJlbCcuCgkobmV3X2VoX3JlZ2lvbl9lbnRyeSk6IE5vIGxvbmdlciBleHBvcnRlZCBmcm9tIGV4Y2VwdC5jLgoJKGR1cGxpY2F0ZV9oYW5kbGVycyk6IFJlbmFtZWQgdG8gZHVwbGljYXRlX2VoX2hhbmRsZXJzIGFuZAoJZGlmZmVyZW50IHByb3RvdHlwZS4KCShyZXRocm93X3N5bWJvbF9tYXAsIHJldGhyb3dfdXNlZCk6IE5ldyBleHBvcnRlZCBmdW5jdGlvbnMuCgkoZWhfcmVnaW9uX2Zyb21fc3ltYm9sKTogTmV3IGV4cG9ydGVkIGZ1bmN0aW9uLgoKCSogZXhjZXB0LmMgKGNyZWF0ZV9yZXRocm93X3JlZik6IE5ldyBmdW5jdGlvbiB0byBjcmVhdGUgYSBzaW5nbGUKCVNZTUJPTF9SRUYgZm9yIGEgcmV0aHJvdyByZWdpb24uCgkocHVzaF9laF9lbnRyeSk6IEluaXRpYWxpemUgYSByZXRocm93IHJlZi4KCShmdW5jX2VoX2VudHJ5KTogQWRkIGEgcmV0aHJvd19sYWJlbCBmaWVsZC4KCShuZXdfZWhfcmVnaW9uX2VudHJ5KTogTWFrZSBzdGF0aWMsIGFuZCBpbml0aWFsaXplIHRoZSByZXRocm93IGVudHJ5LgoJKGR1cGxpY2F0ZV9laF9oYW5kbGVycyk6IENyZWF0ZSBhIG5ldyByZWdpb24sIGFuZCByZW1hcCBsYWJlbHMvc3ltYm9scy4KCShlaF9yZWdpb25fZnJvbV9zeW1ib2wpOiBGaW5kIGFuIEVIIHJlZ2lvbiBiYXNlZCBvbiBpdHMgcmV0aHJvdyBzeW1ib2wuCgkocmV0aHJvd19zeW1ib2xfbWFwKTogR2l2ZW4gYSBsYWJlbCBtYXAsIG1hcHMgYSByZXRocm93IHN5bWJvbCBmb3IKCWEgcmVnaW9uIGludG8gYW4gYXBwcm9wcmlhdGUgbmV3IHN5bWJvbC4KCShyZXRocm93X3VzZWQpOiBJbmRpY2F0ZSB3aGV0aGVyIGEgcmV0aHJvdyBzeW1ib2wgaGFzIGJlZW4gcmVmZXJlbmNlZC4KCShleHBhbmRfZWhfcmVnaW9uX2VuZCk6IERvbid0IGlzc3VlIGp1bXAgYXJvdW5kIGNvZGUgZm9yIG5ldy1leGNlcHRpb25zLgoJKGVuZF9jYXRjaF9oYW5kbGVyKTogRW1pdCBhIGJhcnJpZXIgZm9yIG5ldy1leGNlcHRpb25zIHNpbmNlCgljb250cm9sIGNhbiBuZXZlciBkcm9wIHRocm91Z2ggdGhlIGVuZCBvZiBhIGNhdGNoIGJsb2NrLgoJKGV4cGFuZF9lbmRfYWxsX2NhdGNoKTogbmV3LWV4Y2VwdGlvbnMgbmV2ZXIgZmFsbCB0aHJvdWdoIGEgY2F0Y2gKCWJsb2NrLgoJKGV4cGFuZF9yZXRocm93KTogVXNlIF9fcmV0aHJvdyByb3V0aW5lIGZvciBuZXcgZXhjZXB0aW9ucy4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlX2VudHJ5KTogR2VuZXJhdGUgcmV0aHJvdyBsYWJlbHMsIGlmIG5lZWRlZC4KCShvdXRwdXRfZXhjZXB0aW9uX3RhYmxlKTogR2VuZXJhdGUgc3RhcnQgYW5kIGVuZCByZXRocm93IGxhYmVscy4KCShpbml0X2VoKTogQ3JlYXRlIHJldGhyb3cgc3ltYm9scyBmb3IgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGFibGUuCgkoc2Nhbl9yZWdpb24pOiBEb24ndCBlbGltaW5hdGUgRUggcmVnaW9ucyB3aGljaCBhcmUgdGhlIHRhcmdldHMgb2YKCXJldGhyb3dzLgoKCSogZmxvdy5jIChtYWtlX2VkZ2VzKTogQWRkIGRpZmZlcmVudCBlZGdlcyBmb3IgcmV0aHJvdyBjYWxscywKCWlkZW50aWZpZWQgYnkgaGF2aW5nIHRoZSBSRUdfRUhfUkVUSFJPVyByZWcgbGFiZWwuCgkoZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2Nrcyk6IERvbid0IGRlbGV0ZSByZWdpb25zIG1hcmtlcnMgd2hpY2ggYXJlCgl0aGUgdGFyZ2V0IG9mIGEgcmV0aHJvdy4KCgkqIGludGVncmF0ZS5jIChzYXZlX2Zvcl9pbmxpbmVfZWhfbGFiZWxtYXApOiBOZXcgY2FsbGJhY2sgcm91dGluZSB0bwoJYWxsb3cgc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcgdG8gY2FsbCBkdXBsaWNhdGVfZWhfaGFuZGxlcnMuCgkoc2F2ZV9mb3JfaW5saW5lX2NvcHlpbmcpOiBDYWxsIGR1cGxpY2F0ZV9laF9oYW5kbGVycyBpbnN0ZWFkIG9mCglleHBvc2luZyBpbnRlcm5hbCBkZXRhaWxzIG9mIGV4Y2VwdGlvbiByZWdpb25zLgoJKGNvcHlfZm9yX2lubGluZSk6IENoZWNrIGlmIFNZTUJPTF9SRUZzIG5lZWQgYWRqdXN0bWVudC4KCShleHBhbmRfaW5saW5lX2Z1bmN0aW9uX2VoX2xhYmVsbWFwKTogTmV3IGNhbGxiYWNrIHJvdXRpbmUgdG8KCWFsbG93IGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24gdG8gY2FsbCBkdXBsaWNhdGVfZWhfaGFuZGxlcnMuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IENhbGwgZHVwbGljYXRlX2VoX2hhbmRsZXJzIGluc3RlYWQgb2YKCWV4cG9zaW5nIGludGVybmFsIGRldGFpbHMgb2YgZXhjZXB0aW9uIHJlZ2lvbnMuCgkoY29weV9ydHhfYW5kX3N1YnN0aXR1dGUpOiBBZGp1c3QgU1lNQk9MX1JFRlMgaWYgU1lNQk9MX1JFRl9ORUVEX0FESlVTVAoJZmxhZyBpcyBzZXQuCgoJKiBsaWJnY2MyLmMgKGZpbmRfZXhjZXB0aW9uX2hhbmRsZXIpOiBHZW5lcmFsaXplIHRvIGVuYWJsZSBpdCB0bwoJcGljayB1cCBwcm9jZXNzaW5nIHdoZXJlIGl0IGxlZnQgb2ZmIGxhc3QgdGltZSBmb3IgYSByZXRocm93LgoJKF9fdW53aW5kaW5nX2NsZWFudXApOiBOZXcgZnVuY3Rpb24uIGRlYnVnIGhvb2sgd2hpY2ggaXMgY2FsbGVkIGJlZm9yZQoJdW53aW5kaW5nIHdoZW4gX190aHJvdyBmaW5kcyB0aGVyZSBpcyBub3RoaW5nIGJ1dCBjbGVhbnVwcyBsZWZ0LgoJKHRocm93X2hlbHBlcik6IENvbW1vbiBwYXJ0cyBvZiBfX3Rocm93IGV4dHJhY3RlZCBvdXQgZm9yIHJldXNlLgoJKF9fdGhyb3cpOiBDb21tb24gcGFydHMgbW92ZWQgdG8gdGhyb3dfaGVscGVyLgoJKF9fcmV0aHJvdyk6IE5ldyBmdW5jdGlvbiBmb3IgcGVyZm9ybWluZyByZXRocm93cy4KClR1ZSBEZWMgIDggMTM6MTE6MDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOiBUd2VhayBkZWNsYXJhdGlvbi4KClR1ZSBEZWMgIDggMTA6MjM6NTIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtZGVjbC5jIChmbGFnX2lzb2M5eCk6IERlZmF1bHQgb2ZmLgoJKGNfZGVjb2RlX29wdGlvbik6IEtpbGwgLXN0ZD1nbnUsIGFkZCAtc3RkPWdudTg5IGFuZCAtc3RkPWdudTl4LgoJKiBjY2NwLmMgKHByaW50X2hlbHAsIG1haW4pOiBMaWtld2lzZS4KCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogVXBkYXRlIGZvciAtc3RkPWdudSouCgpUdWUgRGVjICA4IDAxOjE0OjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIE1ha2VmaWxlLmluIChERU1BTkdMRV9IKTogQ2hhbmdlIGxvY2F0aW9uIHRvIHNoYXJlZCBkZW1hbmdsZS5oLgoJKiBkZW1hbmdsZS5oOiBEZWxldGVkLgoKCSogcmVsb2FkMS5jIChjdXJyZW50X2Z1bmN0aW9uX2RlY2wpOiBEZWNsYXJlLgoKVHVlIERlYyAgOCAxMTo1ODo1MSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcHBsaWIuYyAoY29udmVydF9zdHJpbmcpOiBVc2UgYDB4MDBmZicsIG5vdCBgMHgwMGZmVScuCgpUdWUgRGVjICA4IDA5OjI4OjM2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGRieG91dC5jOiBJZiBVU0cgaXMgZGVmaW5lZCB1c2UgZ3N0YWIuaCwgZXZlbiBpZiBIQVZFX1NUQUJfSCBpcyBzZXQuCgoxOTk4LTEyLTA4ICBVbHJpY2ggRHJlcHBlciAgPGRyZXBwZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogVGVzdCBmb3IgYXZhaWxhYmlsaXR5IG9mIHB1dGNfdW5sb2NrZWQsIGZwdXRjX3VubG9ja2VkLAoJYW5kIGZwdXRzX3VubG9ja2VkLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIHN5c3RlbS5oOiBJZiB0aGUgKl91bmxvY2tlZCBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZSB1c2UgdGhlbQoJaW5zdGVhZCBvZiB0aGUgbG9ja2VkIGNvdW50ZXJwYXJ0cyBieSBkZWZpbmluZyBtYWNyb3MuCgkqIGNvbmZpZy5pbjogUmVnZW5lcmF0ZWQuCgpUdWUgRGVjICA4IDAwOjM0OjA1IDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGkzODYvYnNkLmggKEFTTV9GSUxFX1NUQVJUKTogRG9uJ3QgdXNlIGR1bXBfYmFzZV9uYW1lLCBpdCBpcwoJd3JvbmcgYW5kIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGR1bXAgcmVsYXRlZCB0aGluZ3MsIG5vdAoJZGVidWdnaW5nIGluZm9ybWF0aW9uLCBpbnN0ZWFkIG1haW5faW5wdXRfZmlsZW5hbWUgc2hvdWxkIGJlIHVzZWQuCglBbHNvLCByZXVzZSBvdXRwdXRfZmlsZV9kaXJlY3RpdmUgaWYgcG9zc2libGUuCgkqIGkzODYvYWl4Mzg2bmcuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCSogaTM4Ni9pc2MuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCSogaTM4Ni93aW4tbnQuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCSogaTM4Ni9zdW4zODYuaCAoQVNNX0ZJTEVfU1RBUlQpOiBMaWtld2lzZS4KCk1vbiBEZWMgIDcgMjM6NTY6MjggMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlndXJlLmluIChtaXBzKi0qLWxpbnV4Kik6IEhhbmRsZSBiaWcgYW5kIGxpdHRsZSBlbmRpYW4KCXN5c3RlbXMuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCk1vbiBEZWMgIDcgMjM6MTQ6NTEgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogZW1pdC1ydGwuYzogRml4IHR5cG8uCgpNb24gRGVjICA3IDIzOjA3OjM4IDE5OTggIE5hdGhhbiBTaWR3ZWxsICA8bmF0aGFuQGFjbS5vcmc+CgoJKiByZWxvYWQxLmMgKGVsaW1pbmF0ZV9yZWdzKTogRG9uJ3QgZG8gYW55dGhpbmcsIGlmIHdlJ3JlIG5vdAoJZ2VuZXJhdGluZyBjb2RlLgoKTW9uIERlYyAgNyAxNToyNzowOSAxOTk4ICBESiBEZWxvcmllICA8ZGpAY3lnbnVzLmNvbT4KCgkqIG1pcHMvbWlwcy5oIChFTkNPREVfU0VDVElPTl9JTkZPKTogSGFuZGxlIFRBUkdFVF9FTUJFRERFRF9EQVRBLgoJQWRkIGNvbW1lbnQuCgkqIG1pcHMvbWlwcy5jIChtaXBzX3NlbGVjdF9zZWN0aW9uKTogQWRkIGNvbW1lbnQuCgpNb24gRGVjICA3IDE3OjU1OjA2IDE5OTggIE1pa2UgU3R1bXAgIDxtcnNAd3JzLmNvbT4KCgkqIGNjY3AuYyAoaWdub3JlX2VzY2FwZV9mbGFnKTogQWRkIHN1cHBvcnQgZm9yIFwgYXMgYG5hdHVyYWwnCgljaGFyYWN0ZXJzIGluIGZpbGUgbmFtZXMgaW4gI2xpbmUgdG8gYmUgY29uc2lzdGVudCB3aXRoICNpbmNsdWRlCgloYW5kbGluZy4gIFdlIHN1cHBvcnQgZXNjYXBlIHByb2Nlc3NpbmcgaW4gdGhlICMgMSAiLi4uIiB2ZXJzaW9uIG9mCgl0aGUgY29tbWFuZC4gIFNlZSBhbHNvIHN1cHBvcnQgaW4gY3AvbGV4LmMuCgkoaGFuZGxlX2RpcmVjdGl2ZSk6IExpa2V3aXNlLgoJKGRvX2xpbmUpOiBMaWtld2lzZS4KCjE5OTgtMTItMDcgIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjcHBsaWIuYyAoaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCk6IFVzZSBJU0FMUEhBIGFuZCBJU0FMTlVNCgkgIHNvIGl0J2xsIHdvcmsgb24gbm9uLUFTQ0lJIHBsYXRmb3Jtcy4gIEFsd2F5cyBjb25zaWRlciAkIGFuCgkgIGlkZW50aWZpZXIgY2hhcmFjdGVyLiAgVGFrZSBubyBhcmd1bWVudHMuCgkgIChjcHBfcmVhZGVyX2luaXQpOiBDYWxsIGluaXRpYWxpemVfY2hhcl9zeW50YXggd2l0aCBubwoJICBhcmd1bWVudHMuCgkgIChjcHBfc3RhcnRfcmVhZCk6IERvbid0IGNhbGwgaW5pdGlhbGl6ZV9jaGFyX3N5bnRheCBhZ2Fpbi4KCSAgQ2xlYXIgaXNfaWRjaGFyWyckJ10gYW5kIGlzX2lkc3RhcnRbJyQnXSBpZiBub3QKCSAgb3B0cy0+ZG9sbGFyc19pbl9pZGVudC4KCgkqIGNwcGxpYi5oIChzdHJ1Y3QgY3BwX3JlYWRlcik6IFJlcGxhY2Ugdm9pZCAqZGF0YSBlbGVtZW50IGJ5CgkgIGNwcF9vcHRpb25zICpvcHRzLiAgUmVhcnJhbmdlIGVsZW1lbnRzIHRvIG1ha2UgZ2RiIHByaW50b3V0CgkgIGxlc3MgYW5ub3lpbmcgKHB1dCBidWZmZXIgc3RhY2sgYXQgZW5kKS4KCSAgKENQUF9PUFRJT05TKTogR2V0IHJpZCBvZiBub3ctdW5uZWNlc3NhcnkgY2FzdC4KCgkqIGNwcG1haW4uYzogcy9kYXRhL29wdHMvIHdoZW4gaW5pdGlhbGl6aW5nIGNwcF9yZWFkZXIKCSAgc3RydWN0dXJlLgoJKiBjLWRlY2wuYzogTGlrZXdpc2UuCgkqIG9iamMvb2JqYy1hY3QuYzogTGlrZXdpc2UuCgkqIGZpeC1oZWFkZXIuYzogTGlrZXdpc2UuCgoxOTk4LTEyLTA3ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmggKHN0cnVjdCBjcHBfYnVmZmVyKTogUmVwbGFjZSBkaXIgYW5kIGRsZW4gbWVtYmVycwoJd2l0aCBhIHN0cnVjdCBmaWxlX25hbWVfbGlzdCBwb2ludGVyLgoJKHN0cnVjdCBjcHBfcmVhZGVyKTogQWRkIHBvaW50ZXIgdG8gY2hhaW4gb2YgYGFjdHVhbAoJZGlyZWN0b3J5JyBpbmNsdWRlIHNlYXJjaHBhdGggZW50cmllcy4KCShzdHJ1Y3QgZmlsZV9uYW1lX2xpc3QpOiBBZGQgKmFsbG9jIHBvaW50ZXIgZm9yIHRoZSBzYWtlIG9mCgl0aGUgYWN0dWFsLWRpcmVjdG9yeSBjaGFpbi4KCglNb3ZlIGRlZmluaXRpb24gb2YgSE9TVF9XSURFX0lOVCBoZXJlLgoJKGNwcF9wYXJzZV9lc2NhcGUpOiBDaGFuZ2UgcHJvdG90eXBlIHRvIG1hdGNoIGNoYW5nZXMgaW4KCWNwcGV4cC5jLgoKCSogY3BwZmlsZXMuYyAoYWN0dWFsX2RpcmVjdG9yeSk6IE5ldyBmdW5jdGlvbi4KCShmaW5jbHVkZSk6IFVzZSBpdCB0byBpbml0aWFsaXplIHRoZSBidWZmZXIncyBhY3R1YWxfZGlyCgllbnRyeS4KCShmaW5kX2luY2x1ZGVfZmlsZSk6IFdlIGRvbid0IG5lZWQgdG8gZml4IHVwIG1heF9pbmNsdWRlX2xlbgoJaGVyZS4KCgkqIGNwcGxpYi5jIChkb19pbmNsdWRlKTogRG9uJ3QgYWxsb2NhdGUgYSBmaWxlX25hbWVfbGlzdCBvbgoJdGhlIGZseSBmb3IgY3VycmVudCBkaXJlY3RvcnkgIiIgaW5jbHVkZXMsIHVzZSB0aGUgb25lIHRoYXQncwoJYmVlbiBwcmVhbGxvY2F0ZWQgaW4gcGZpbGUtPmJ1ZmZlci0+YWN0dWFsX2Rpci4gIEhvaXN0IG91dAoJZHVwbGljYXRlIGNvZGUgZnJvbSB0aGUgc2VhcmNoX3N0YXJ0IHNlbGVjdGlvbiBsb2dpYy4KCShjcHBfcmVhZGVyX2luaXQpOiBJbml0aWFsaXplIHBmaWxlLT5hY3R1YWxfZGlycy4KCglSZW1vdmUgZGVmaW5pdGlvbiBvZiBIT1NUX1dJREVfSU5ULiAgQ2hhbmdlIGNhbGxzCgl0byBjcHBfcGFyc2VfZXNjYXBlIHRvIG1hdGNoIGNoYW5nZXMgaW4gY3BwZXhwLmMgKG5vdGUKCWhhcmRjb2RlZCBNQVNLLCB3aGljaCBpcyBzYWZlIHNpbmNlIHRoaXMgaXMgdGhlIHNvdXJjZQoJY2hhcmFjdGVyIHNldCkuCgoJKiBjcHBleHAuYzogQnJpbmcgb3ZlciBjaGFuZ2VzIHRvIGNwcF9wYXJzZV9lc2NhcGUgZnJvbSBjY2NwLmMKCXRvIGhhbmRsZSB3aWRlIGNoYXJhY3RlciBjb25zdGFudHMgaW4gI2lmIGRpcmVjdGl2ZXMuICBUaGUKCWZ1bmN0aW9uIG5vdyByZXR1cm5zIGEgSE9TVF9XSURFX0lOVCwgYW5kIHRha2VzIGEgdGhpcmQKCWFyZ3VtZW50IHdoaWNoIGlzIGEgYmluYXJ5IG1hc2sgZm9yIGFsbCBsZWdhbCB2YWx1ZXMgKDB4MDBmZgoJZm9yIDgtYml0IGBjaGFyJywgMHhmZmZmIGZvciAxNi1iaXQgYHdjaGFyX3QnLCBldGMuKSAgRGVmaW5lCglNQVhfQ0hBUl9UWVBFX01BU0sgYW5kIE1BWF9XQ0hBUl9UWVBFX01BU0suICBDaGFuZ2UgY2FsbGVycyBvZgoJY3BwX3BhcnNlX2VzY2FwZSB0byBtYXRjaC4gIFtGaXhlcyBjLXRvcnR1cmUvZXhlY3V0ZS93aWRlY2hhci0xLmNdCgpNb24gRGVjICA3IDE1OjM4OjI1IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IEZpeCB0eXBvIGluIFVTRV9DUFBMSUIgc3BlYyBmb3IgY2MxLgoKTW9uIERlYyAgNyAxNTozODoyNSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWF1eC1pbmZvLmMgKGNvbmNhdCk6IFdyYXAgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiAhVVNFX0NQUExJQi4KCSogY3BwYWxsb2MuYzogTW92ZSBmdW5jdGlvbiBgeGNhbGxvYycgZnJvbSBjcHBsaWIuYyB0byBoZXJlLgoJKiBjcHBsaWIuYzogTW92ZSBmdW5jdGlvbiBgeGNhbGxvYycgZnJvbSBoZXJlIHRvIGNwcGFsbG9jLmMuCgpNb24gRGVjICA3IDExOjMwOjQ5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBmaW5hbC5jIChvdXRwdXRfYXNtX25hbWUpOiBVc2UgdGFicyB0byBzZXBhcmF0ZSBjb21tZW50cyBmcm9tCglhc3NlbWJseSB0ZXh0LgoKCUluY2x1ZGUgaW5zdHJ1Y3Rpb24gbGVuZ3RocyAoaWYgZGVmaW5lZCkgaW4gb3V0cHV0LgoKTW9uIERlYyAgNyAxMDo1MzozOCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IEZpeCBpbml0aWFsX3ZhbHVlIGFuZCBpbml0aWFsX2VxdWl2X3ZhbHVlCglpbiB0aGUgbG9vcF9pbmZvIHN0cnVjdHVyZS4KCk1vbiBEZWMgIDcgMTE6MDQ6NDAgMTk5OCAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW4gKGFybSotKi1lY29zLWVsZik6IE5ldyB0YXJnZXQuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCgkqIGNvbmZpZy9hcm0vZWxmLmggKEFTTV9XRUFLRU5fTEFCRUwpOiBEZWZpbmUuCgkqIGNvbmZpZy9hcm0vZWNvcy1lbGYuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoVEFSR0VUX1ZFUlNJT04pOiBDaGVjawoJZm9yIHJlZGVmaW5pdGlvbi4KCk1vbiBEZWMgIDcgMTY6MTU6NTEgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmMgKG91dHB1dF9mYXJfanVtcCk6IEVtaXQgYnJhZiBvbmx5IGZvciBUQVJHRVRfU0gyLgoKU3VuIERlYyAgNiAwNDoxOTo0NSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBEZWMgIDYgMDU6MTY6MTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBOZXcgYXJndW1lbnQgbG9vcF9pbmZvLiAgVXBkYXRlIGZpZWxkcwoJYXMgbmVlZGVkLgoKU3VuIERlYyAgNiAwMzo0MDoxMyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBEZWMgIDYgMDc6NDk6MjkgMTk5OCAgQWxleGFuZHJlIE9saXZhICA8b2xpdmFAZGNjLnVuaWNhbXAuYnI+CgoJKiBnY2MudGV4aSAoQnVnIFJlcG9ydGluZyk6IDQwS2IgaXMgYSBzb2Z0IGxpbWl0LCBsYXJnZXIKCWNvbXByZXNzZWQgcmVwb3J0cyBhcmUgb2sgYW5kIHByZWZlcnJlZCBvdmVyIFVSTHMuCgpTdW4gRGVjICA2IDA3OjQ1OjMzIDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogaW52b2tlLnRleGkgKFdhcm5pbmcgT3B0aW9ucyk6IFNvZnRlbiB0aGUgdG9uZSBvZiAtcGVkYW50aWMuCgpTdW4gRGVjICA2IDAwOjIwOjQ0IDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIHByaW50LXJ0bC5jIChwcmludF9ydHgpOiBBZGQgcHJvdG90eXBlLgoKCSogdW5yb2xsLmMgKGl0ZXJhdGlvbl9pbmZvKTogTWFrZSBpdCBzdGF0aWMuCgpTdW4gRGVjICA2IDAxOjE5OjQ2IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbGlhcy5jIChtZW1yZWZzX2NvbmZsaWN0X3ApOiBBIHNlY29uZCBBTkRlZCBhZGRyZXNzCglkaXNhYmxlcyB0aGUgYWxpZ25lZCBhZGRyZXNzIG9wdGltaXphdGlvbi4KClNhdCBEZWMgIDUgMTg6NDg6MjUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhX2VtaXRfc2V0X2NvbnN0XzEpOiBGaXggcGFyZW50aGVzaXMgZXJyb3IKCWluIC1jIDw8IG4gY2FzZS4KClNhdCBEZWMgIDUgMTU6MTQ6NTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogaTk2MC5oIChCT09MX1RZUEVfU0laRSk6IERlZmluZS4KClN1biBEZWMgIDYgMDA6Mjg6MTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAodmFsaWRfcGFyYWxsZWxfbG9hZF9zdG9yZSk6IEZsb2cgZnVuY3Rpb25hbGl0eQoJZnJvbSBvbGQgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNC4KCSh2YWxpZF9wYXJhbGxlbF9vcGVyYW5kc180KTogQ2hlY2sgdGhhdCBvcGVyYW5kcyBmb3IgNCBvcGVyYW5kCglwYXJhbGxlbCBpbnNucyBhcmUgdmFsaWQsIGV4Y2x1ZGluZyBsb2FkL3N0b3JlIGluc25zLgoJKiBjb25maWcvYzR4L2M0eC5oICh2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlKTogQWRkIHByb3RvdHlwZS4KCSogY29uZmlnL2M0eC9jNHgubWQgKCptb3ZxZl9wYXJhbGxlbCwgKm1vdnFpX3BhcmFsbGVsKTogVXNlCgl2YWxpZF9wYXJhbGxlbF9sb2FkX3N0b3JlIGluc3RlYWQgb2YgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNC4KCSgqYWJzcWYyX21vdnFmX2Nsb2JiZXIsICpmbG9hdHFpcWYyX21vdnFmX2Nsb2JiZXIsCgkqbmVncWYyX21vdnFmX2Nsb2JiZXIsICphYnNxaTJfbW92cWlfY2xvYmJlciwKCSpmaXhxZnFpMl9tb3ZxaV9jbG9iYmVyLCAqbmVncWkyX21vdnFpX2Nsb2JiZXIsCgkqbm90cWlfbW92cWlfY2xvYmJlcik6IFVzZSB2YWxpZF9wYXJhbGxlbF9vcGVyYW5kc180LgoJKCpzdWJxZjNfbW92cWZfY2xvYmJlciwgKmFzaGxxaTNfbW92cWlfY2xvYmJlciwKCSphc2hycWkzX21vdnFpX2Nsb2JiZXIsICpsc2hycWkzX21vdnFpX2Nsb2JiZXIsCgkqc3VicWkzX21vdnFpX2Nsb2JiZXIpOiBVc2UgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNS4KClNhdCBEZWMgIDUgMjM6NTI6MDEgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoaXRlcmF0aW9uX2luZm8pOiBEZWxldGUgZXh0ZXJuLgoKRnJpIERlYyAgNCAyMDoxNTo1NyAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiB0bS50ZXhpIChTTUFMTF9SRUdJU1RFUl9DTEFTU0VTKTogTWFrZSBkZXNjcmlwdGlvbiBtYXRjaCByZWFsaXR5LgoKCSogZmluYWwuYyAoY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMpOiBEZWxldGUgc29tZSB1bnVzZWQgY29kZS4KCgkqIHJlY29nLmggKE1BWF9SRUNPR19BTFRFUk5BVElWRVMpOiBOZXcgbWFjcm8uCgkoc3RydWN0IGluc25fYWx0ZXJuYXRpdmUpOiBOZXcgc3RydWN0dXJlIGRlZmluaXRpb24uCgkocmVjb2dfb3BfYWx0KTogRGVjbGFyZSB2YXJpYWJsZS4KCShwcmVwcm9jZXNzX2NvbnN0cmFpbnRzKTogRGVjbGFyZSBmdW5jdGlvbi4KCSogcmVjb2cuYyAocmVjb2dfb3BfYWx0KTogTmV3IHZhcmlhYmxlLgoJKGV4dHJhY3RfaW5zbik6IFZlcmlmeSBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIGluIHJhbmdlLgoJKHByZXByb2Nlc3NfY29uc3RyYWludHMpOiBOZXcgZnVuY3Rpb24uCgkqIHJlZy1zdGFjay5jOiBJbmNsdWRlIHJlY29nLmguCgkoY29uc3RyYWluX2FzbV9vcGVyYW5kcyk6IERlbGV0ZS4KCShnZXRfYXNtX29wZXJhbmRfbGVuZ3Rocyk6IERlbGV0ZS4KCShnZXRfYXNtX29wZXJhbmRfbl9pbnB1dHMpOiBOZXcgZnVuY3Rpb24uCgkocmVjb3JkX2FzbV9yZWdfbGlmZSk6IERlbGV0ZSBPUEVSQU5EUywgQ09OU1RSQUlOVFMsIE5fSU5QVVRTIGFuZAoJTl9PVVRQVVRTIGFyZ3MuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJQ29tcHV0ZSBudW1iZXIgb2YgaW5wdXRzIGFuZCBvdXRwdXRzIGhlcmUgYnkgY2FsbGluZwoJZ2V0X2FzbV9vcGVyYW5kX25faW5wdXRzLgoJSW5zdGVhZCBvZiBjb25zdHJhaW5fYXNtX29wZXJhbmRzLCBjYWxsIGV4dHJhY3RfaW5zbiwKCWNvbnN0cmFpbl9vcGVyYW5kcyBhbmQgcHJlcHJvY2Vzc19jb25zdHJhaW50cy4gIFVzZSBpbmZvcm1hdGlvbgoJY29tcHV0ZWQgYnkgdGhlc2UgZnVuY3Rpb25zIHRocm91Z2hvdXQuCgkocmVjb3JkX3JlZ19saWZlKTogRGVsZXRlIGNvZGUgdGhhdCBpcyB1bnVzZWQgZHVlIHRvIGNoYW5nZXMgaW4KCXJlY29yZF9hc21fcmVnX2xpZmUuCgkoc3Vic3RfYXNtX3N0YWNrX3JlZ3MpOiBEZWxldGUgT1BFUkFORFMsIE9QRVJBTkRfTE9DLCBDT05TVFJBSU5UUywKCU5fSU5QVVRTIGFuZCBOX09VVFBVVFMgYXJncy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglTaW1pbGFyIGNoYW5nZXMgYXMgaW4gcmVjb3JkX2FzbV9yZWdfbGlmZS4KCShzdWJzdF9zdGFja19yZWdzKTogTW92ZSBuX29wZXJhbmRzIGRlY2xhcmF0aW9uIGludG8gdGhlIGlmIHN0YXRlbWVudAoJd2hlcmUgaXQncyB1c2VkLgoJRGVsZXRlIGNvZGUgdGhhdCBpcyB1bnVzZWQgZHVlIHRvIGNoYW5nZXMgaW4gc3Vic3RfYXNtX3N0YWNrX3JlZ3MuCgkqIHN0bXQuYyAoZXhwYW5kX2FzbV9vcGVyYW5kcyk6IFZlcmlmeSBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzIGlzIGluCglyYW5nZS4KCSogTWFrZWZpbGUuaW4gKHJlZy1zdGFjay5vKTogRGVwZW5kIG9uIHJlY29nLmguCgpGcmkgRGVjICA0IDAyOjIzOjI0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4Y2VwdC5jIChzZXRfZXhjZXB0aW9uX3ZlcnNpb25fY29kZSk6IEFyZ3VtZW50IGlzIGFuICJpbnQiLgoKRnJpIERlYyAgNCAwMToyOToyOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKGhwcGEyKi0qLSopOiBIYW5kbGUgbGlrZSBocHBhMS4xLSotKiBmb3Igbm93LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgRGVjICA0IDAxOjI5OjI4IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAobWlwc2VsLSotbGludXgqKTogTmV3IHRhcmdldC4KCSogbWlwcy9saW51eC5oOiBOZXcgZmlsZSwgYmFzZWQgb24gb3RoZXIgTGludXggdGFyZ2V0cy4KClRodSBEZWMgIDMgMTE6MTk6NTAgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogZ3Roci12eHdvcmtzLmggKF9fZWhkdG9yKTogRml4IG1lbW9yeSBsZWFrLiAgVGhlIGRlbGV0ZSBob29rCglydW5zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBkZWxldGVyLCBub3QgdGhlIGRlbGV0ZWUsIHNvIHdlIG11c3QKCXVzZSB0YXNrVmFyR2V0IHRvIGZpbmQgdGhlIGNvcnJlY3QgbWVtb3J5IHRvIGZyZWUuCgkoX19ndGhyZWFkX2tleV9jcmVhdGUpOiBJbml0aWFsaXplIHRoZSB0YXNrCgl2YXJpYWJsZSBzdWJzeXN0ZW0gc28gdGhhdCB0aGUgdGFzayB2YXJpYWJsZSBpcyBzdGlsbCBhY3RpdmUgd2hlbgoJdGhlIGRlbGV0ZSBob29rIGlzIHJ1bi4KCjE5OTgtMTItMDMgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KCgkqIHBkcDExLmg6IFVzZSBvcHRpbWl6ZV9zaXplIGZvciBzcGFjZSBvcHRpbWl6YXRpb25zLgoJKiBwZHAxMS5jOiBMaWtld2lzZS4KCSogcGRwMTEubWQ6IExpa2V3aXNlLgoKCSogcGRwMTEuaCAoVEFSR0VUXzQwX1BMVVMpOiBGaXggdHlwby4KClRodSBEZWMgIDMgMTE6NDg6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9jYWwtYWxsb2MuYyAoYmxvY2tfYWxsb2MpOiBTbGlnaHRseSByZXR1bmUgaGV1cmlzdGljIHRvIHdpZGVuCglxdHkgbGlmZXRpbWVzLgoKVGh1IERlYyAgMyAyMjozMDoxOCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBhbGlhcy5jIChhZGRyX3NpZGVfZWZmZWN0X2V2YWwpOiBOZXcgZnVuY3Rpb24uCgkobWVtcmVmc19jb25mbGljdF9wKTogVXNlIGl0LgoJKiBydGwuaCAoYWRkcl9zaWRlX2VmZmVjdF9ldmFsKTogUHJvdG90eXBlIGl0LgoKMTk5OC0xMi0wMiAgSm9zZXBoIFMuIE15ZXJzICA8anNtMjhAY2FtLmFjLnVrPgoKCSogcGRwMTEubWQgKGV4dGVuZHNmZGYyKTogRml4IG1vZGUgbWlzbWF0Y2ggaW4gU0VULgoKV2VkIERlYyAgMiAxMToyMzowNyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogV2hlbiBmb3JjZSBjb25zdCB0byBtZW1vcnksIHB1dCByZXN1bHQKCWluIHN1YnN0ZWRfb3BlcmFuZCBub3QgKnJlY29nX29wZXJhbmRfbG9jLgoKMTk5OC0xMi0wMiAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgoJKiBjLWxleC5jOiBGaXggaW5kZW50YXRpb24gZnJvbSBsYXN0IHBhdGNoLgoJUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UuCgkqIHJlYWwuYzogTGlrZXdpc2UuCgpXZWQgRGVjICAyIDEwOjExOjEyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAoZGVsZXRlX2Jsb2NrKTogQ2FsbCBzZXRfbGFzdF9pbnNuIGFmdGVyIHdlIGhhdmUgcmVzZXQKCU5FWFRfSU5TTiAoa2VwdF90YWlsKS4KCldlZCBEZWMgIDIgMDA6NDc6MzEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbWlwcy5tZCAodHJhcF9pZik6IFVzZSAiJDAiIGZvciB0aGUgdmFsdWUgemVyby4KClR1ZSBEZWMgIDEgMjA6NDk6NDkgMTk5OCAgVWxyaWNoIERyZXBwZXIgIDxkcmVwcGVyQGN5Z251cy5jb20+CgkJCSAgU3RlcGhlbiBMIE1vc2hpZXIgIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CgkJCSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGMtY29tbW9uLmMgKGRlY2xhcmVfZnVuY3Rpb25fbmFtZSk6IERlY2xhcmUgcHJlZGVmaW5lZCB2YXJpYWJsZQoJYF9fZnVuY19fJy4KCgkqIGMtZGVjbC5jIChmbGFnX2lzb2M5eCk6IFNldCB0byAxIGJ5IGRlZmF1bHQuCgkoY19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1zdGQ9IG9wdGlvbi4gIFJlbW92ZSAtZmxhbmctaXNvYzl4LgoJKGdyb2tkZWNsYXJhdG9yKTogQWx3YXlzIGVtaXQgd2FybmluZyBhYm91dCBpbXBsaWNpdCBpbnQgZm9yIElTTyBDIDl4LgoKCSogYy1wYXJzZS5pbjogQWxsb3cgY29uc3RydWN0b3JzIGluIElTTyBDIDl4LgoJUmV3cml0ZSBkZXNpZ25hdG9yIGxpc3QgaGFuZGxpbmcuCglBbGxvdyBbKl0gcGFyYW1ldGVycy4KCURvbid0IHdhcm4gYWJvdXQgY29tbWEgYXQgZW5kIG9mIGVudW0gZGVmaW5pdGlvbiBmb3IgSVNPIEMgOXguCgoJKiBjY2NwLmMgKGM5eCk6IE5ldyB2YXJpYWJsZS4KCShyZXN0X2V4dGVuc2lvbik6IE5ldyB2YXJpYWJsZS4KCShwcmludF9oZWxwKTogRG9jdW1lbnQgbmV3IC1zdGQ9IG9wdGlvbi4KCShtYWluKTogUmVjb2duaXplIC1zdGQ9IG9wdGlvbi4gIFNldCBjOXggYXBwcm9wcmlhdGVseS4KCShjcmVhdGVfZGVmaW5pdGlvbik6IFJlY29nbml6ZSBJU08gQyA5eCB2YXJhcmcgbWFjcm9zLgoKCSogZ2NjLmMgKGRlZmF1bHRfY29tcGlsZXJzKTogQWRqdXN0IHNwZWNzIGZvciAtc3RkIG9wdGlvbnMuCgkob3B0aW9uX21hcCk6IEFkZCAtLXN0ZC4KCShkaXNwbGF5X2hlbHApOiBEb2N1bWVudCAtc3RkLgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogQWRkIC1zdGQgYW5kIHJlbW92ZQoJLWZsYW5nLWlzb2M5eC4KCgkqIGMtbGV4LmMgKHl5bGV4KTogUmVjb2duaXplIGhleCBGUCBjb25zdGFudHMgYW5kIGNhbGwgUkVBTF9WQUxVRV9BVE9GCglvciBSRUFMX1ZBTFVFX0hUT0YgYmFzZWQgb24gYmFzZSBvZiB0aGUgY29uc3RhbnRzLgoJKiBmb2xkLWNvbnN0LmMgKHJlYWxfaGV4X3RvX2YpOiBOZXcgZnVuY3Rpb24uICBSZXBsYWNlbWVudCBmdW5jdGlvbgoJZm9yIGhleCBGUCBjb252ZXJzaW9uIGlmIFJFQUxfQVJJVEhNRVRJQyBpcyBub3QgZGVmaW5lZC4KCSogcmVhbC5jIChhc2N0b2VnKTogQWRkIGhhbmRsaW5nIG9mIGhleCBGUCBjb25zdGFudHMuCgkqIHJlYWwuaDogRGVmaW5lIFJFQUxfVkFMVUVfSFRPRiBpZiBuZWNlc3NhcnkgdXNpbmcgZXJlYWxfYXRvZiBvcgoJcmVhbF9oZXhfdG9fZi4KClR1ZSBEZWMgIDEgMTY6NDU6NDkgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBtaXBzLm1kIChkaXZtb2RzaTQqLCBkaXZtb2RkaTQqLCB1ZGl2bW9kc2k0KiwgdWRpdm1vZGRpNCk6IEFkZAoJLW1jaGVjay1yYW5nZS1kaXZpc2lvbi8tbWNoZWNrLXplcm8tZGl2aXNpb24gY2hlY2tpbmcuICBBdm9pZCBhcyBtYWNybwoJZXhwYW5zaW9uLiAgVXNlIGhpL2xvIGFzIGRlc3RpbmF0aW9uIHJlZ2lzdGVyLgoJKGRpdl90cmFwKTogTmV3LgoJKGRpdnNpMyosIGRpdmRpMyosIG1vZHNpMyosIG1vZGRpMyosIHVkaXZzaTMqLCB1ZGl2ZGkzKiwgdW1vZHNpMyosCgl1bW9kZGkzKik6IEFkZCAtbWNoZWNrLXJhbmdlLWRpdmlzaW9uLy1tY2hlY2stemVyby1kaXZpc2lvbiBjaGVja2luZy4KCUF2b2lkIGFzIG1hY3JvIGV4cGFuc2lvbi4gIFVzZSBoaS9sbyBhcyBkZXN0aW5hdGlvbiByZWdpc3Rlci4KCgkqIG1pcHMuaCAoTUFTS19DSEVDS19SQU5HRV9ESVYpOiBOZXcuCgkoTUFTS19OT19DSEVDS19aRVJPX0RJVik6IE5ldy4KCShFTElNSU5BQkxFX1JFR1MpOiBBZGRlZCBHUF9SRUdfRklSU1QgKyAzMS4KCShDQU5fRUxJTUlOQVRFLCBJTklUSUFMX0VMSU1JTkFUSU9OX09GRlNFVCk6IEFsbG93IGZvciBnZXR0aW5nCglyZXR1cm4gYWRkcmVzcyBmb3IgbGVhZiBmdW5jdGlvbnMgb3V0IG9mIHIzMSB0byBzdXBwb3J0CglidWlsdGluX3JldHVybl9hZGRyZXNzLgoKVHVlIERlYyAgMSAxNTowMzozMCAxOTk4ICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IENhbGwgcmVnc19zZXRfYmV0d2Vlbl9wIHdpdGggUFJFVl9JTlNOKHgpLAoJTkVYVF9JTlNOKHgpIHRvIGNoZWNrIGluc24geC4KClR1ZSBEZWMgIDEgMTU6MjA6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChkZWxldGVfYmxvY2spOiBDYWxsIHNldF9sYXN0X2luc24gaWYgd2UgZW5kIHVwIGRlbGV0aW5nIHRoZQoJbGFzdCBpbnNuIGluIHRoZSBydGwgY2hhaW4uCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERvIG5vdCBzZXQgcmVsb2FkX2NvbXBsZXRlZCBvciBzcGxpdCBpbnNucwoJaGVyZS4gIEluc3RlYWQuLi4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTZXQgcmVsb2FkX2NvbXBsZXRlZCBhZnRlcgoJcmVsb2FkIHJldHVybnMuICBTcGxpdCBpbnNucyBhZnRlciByZWxvYWRfY3NlIGhhcyBydW4uCgpUdWUgRGVjICAxIDExOjU1OjA0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBBYm9ydCBpZiBibG9ja19kZXB0aCBmYWxscyBiZWxvdyAwLgoKVHVlIERlYyAgMSAxMDoyMzoxNiAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90LWFybS1lbGYgKExJQkdDQzJfQ0ZMQUdTKTogRGVmaW5lIGluaGliaXRfbGliYy4KClR1ZSBEZWMgIDEgMTA6MjI6MTggMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vdW5rbm93bi1lbGYuaCAoQVNNX09VVFBVVF9EV0FSRjJfQUREUl9DT05TVCk6IFJlbW92ZQoJdXNlIG9mIHVzZXItbGFiZWxfcHJlZml4LgoKVHVlIERlYyAgMSAxNzo1ODoyNiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChlbWl0X3JlbG9hZF9pbnNucyk6IENsZWFyIHNwaWxsX3JlZ19zdG9yZQoJd2hlbiBkb2luZyBhIG5ldyBub24taW5oZXJpdGVkIHJlbG9hZCBmcm9tIHRoZSBzYW1lIHBzZXVkby4KCgkqIGxvY2FsLWFsbG9jLmMgKGZ1bmN0aW9uX2ludmFyaWFudF9wKTogTmV3IGZ1bmN0aW9uLgoJKHVwZGF0ZV9lcXVpdl9yZWdzKTogVXNlIGZ1bmN0aW9uX2ludmFyaWFudF9wIGluc3RlYWQgb2YgQ09OU1RBTlRfUAoJdG8gZGVjaWRlIGlmIGFuIGVxdWl2YWxlbmNlIHNob3VsZCBiZSByZWNvcmRlZC4KCSogcmVsb2FkMS5jIChudW1fZWxpbWluYWJsZV9pbnZhcmlhbnRzKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShyZWxvYWQpOiBTZXQgaXQuICBVc2UgZnVuY3Rpb25faW52YXJpYW50X3AgaW5zdGVhZCBvZiBDT05TVEFOVF9QCgl0byBkZWNpZGUgaWYgYW4gZXF1aXZhbGVuY2Ugc2hvdWxkIGJlIHJlY29yZGVkLgoJVW5zaGFyZSBQTFVTLgoJKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBTa2lwIGluc25zIHRoYXQgb25seSBzZXQgYW4gZXF1aXZhbGVuY2UuCglUYWtlIG51bV9lbGltaW5hYmxlX2ludmFyaWFudHMgaW50byBhY2NvdW50IHdoZW4gZGVjaWRpbmcKCWlmIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIHNob3VsZCBiZSBkb25lLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBUYWtlIG51bV9lbGltaW5hYmxlX2ludmFyaWFudHMgaW50byBhY2NvdW50Cgl3aGVuIGRlY2lkaW5nIGlmIHJlZ2lzdGVyIGVsaW1pbmF0aW9uIHNob3VsZCBiZSBkb25lLgoJKGVsaW1pbmF0ZV9yZWdzKTogSGFuZGxlIG5vbi1jb25zdGFudCByZWdfZXF1aXZfY29uc3RhbnQuCgkqIHJ0bC5oIChmdW5jdGlvbl9pbnZhcmlhbnRfcCk6IERlY2xhcmUuCgpNb24gTm92IDMwIDAyOjAwOjA4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE5vdiAzMCAwMDo0Mjo1OSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBOb3YgMjkgMjI6NTk6NDAgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGFkZF9uZXdfaGFuZGxlcik6IENvbXBsYWluIGFib3V0IGFkZGl0aW9uYWwgaGFuZGxlcnMKCWFmdGVyIG9uZSB0aGF0IGNhdGNoZXMgZXZlcnl0aGluZy4KClNhdCBOb3YgMjggMTA6NTY6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChhbHBoYSotKi1uZXRic2QpOiBGaXggdHlwby4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKRnJpIE5vdiAyNyAxMjoyODo1NiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzeXN0ZW0uaDogSW5jbHVkZSBsaWJpYmVydHkuaC4KCgkqIGMtYXV4LWluZm8uYzogUmVtb3ZlIHByb3RvdHlwZXMgZm9yIGNvbmNhdC9jb25jYXQzLiAgQ2hhbmdlCglmdW5jdGlvbiBgY29uY2F0JyBmcm9tIGZpeGVkIHBhcmFtZXRlcnMgdG8gdmFyaWFibGUgcGFyYW1ldGVycywKCWFzIGlzIGRvbmUgaW4gbGliaWJlcnR5LiAgQWxsIGNhbGxlcnMgb2YgY29uY2F0L2NvbmNhdDMKCWNoYW5nZWQgdG8gdXNlIHRoZSBuZXcgYGNvbmNhdCcgd2l0aCB2YXJpYWJsZSBhcmdzLgoKCSogY2NjcC5jOiBSZW1vdmUgdGhpbmdzIG1hZGUgcmVkdW5kYW50IGJ5IGxpYmliZXJ0eS5oIGFuZC9vcgoJY29uZm9ybSB0byBsaWJpYmVydHkgc3RhbmRhcmRzLgoJKiBjZXhwLnk6IExpa2V3aXNlLgoJKiBjb2xsZWN0Mi5jOiBMaWtld2lzZS4KCSogY29uZmlnLzE3NTBhLzE3NTBhLmg6IExpa2V3aXNlLgoJKiBjcHBhbGxvYy5jOiBMaWtld2lzZS4KCSogY3BwZXhwLmM6IExpa2V3aXNlLgoJKiBjcHBmaWxlcy5jOiBMaWtld2lzZS4KCSogY3BwaGFzaC5jOiBMaWtld2lzZS4KCSogY3BwbGliLmM6IExpa2V3aXNlLgoJKiBkeW4tc3RyaW5nLmM6IExpa2V3aXNlLgoJKiBmaXgtaGVhZGVyLmM6IExpa2V3aXNlLgoJKiBnY2MuYzogTGlrZXdpc2UuCgkqIGdjb3YuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHIuYzogTGlrZXdpc2UuCgkqIGdlbmF0dHJ0YWIuYzogTGlrZXdpc2UuCgkqIGdlbmNoZWNrLmM6IExpa2V3aXNlLgoJKiBnZW5jb2Rlcy5jOiBMaWtld2lzZS4KCSogZ2VuY29uZmlnLmM6IExpa2V3aXNlLgoJKiBnZW5lbWl0LmM6IExpa2V3aXNlLgoJKiBnZW5leHRyYWN0LmM6IExpa2V3aXNlLgoJKiBnZW5mbGFncy5jOiBMaWtld2lzZS4KCSogZ2VuZ2VucnRsLmM6IExpa2V3aXNlLgoJKiBnZW5vcGluaXQuYzogTGlrZXdpc2UuCgkqIGdlbm91dHB1dC5jOiBMaWtld2lzZS4KCSogZ2VucGVlcC5jOiBMaWtld2lzZS4KCSogZ2VucmVjb2cuYzogTGlrZXdpc2UuCgkqIGdldHB3ZC5jOiBMaWtld2lzZS4KCSogaGFsZnBpYy5jOiBMaWtld2lzZS4KCSogaGFzaC5jOiBMaWtld2lzZS4KCSogbWlwcy10ZHVtcC5jOiBMaWtld2lzZS4gIFdyYXAgbWFsbG9jL3JlYWxsb2MvY2FsbG9jIHByb3RvdHlwZXMKCWluIE5FRURfREVDTEFSQVRJT05fKiBtYWNyb3MuCgoJKiBtaXBzLXRmaWxlLmM6IFJlbW92ZSB0aGluZ3MgbWFkZSByZWR1bmRhbnQgYnkgbGliaWJlcnR5LmggYW5kL29yCgljb25mb3JtIHRvIGxpYmliZXJ0eSBzdGFuZGFyZHMuCgkoZmF0YWwpOiBGaXggY29uc3QtaWZpY2F0aW9uIG9mIHZhcmlhYmxlIGBmb3JtYXQnIGluCgkhQU5TSV9QUk9UT1RZUEVTIGNhc2UuCgoJKiBwcmVmaXguYzogUmVtb3ZlIHRoaW5ncyBtYWRlIHJlZHVuZGFudCBieSBsaWJpYmVydHkuaCBhbmQvb3IKCWNvbmZvcm0gdG8gbGliaWJlcnR5IHN0YW5kYXJkcy4KCgkqIHByaW50LXJ0bC5jOiBSZW5hbWUgdmFyaWFibGUgYHNwYWNlcycgdG8gYHhzcGFjZXMnIHRvIGF2b2lkCgljb25mbGljdGluZyB3aXRoIGZ1bmN0aW9uIGBzcGFjZXMnIGZyb20gbGliaWJlcnR5LgoKCSogcHJvZmlsZS5jOiBSZW1vdmUgdGhpbmdzIG1hZGUgcmVkdW5kYW50IGJ5IGxpYmliZXJ0eS5oIGFuZC9vcgoJY29uZm9ybSB0byBsaWJpYmVydHkgc3RhbmRhcmRzLgoJKiBwcm90b2l6ZS5jOiBMaWtld2lzZS4KCSogcnRsLmg6IExpa2V3aXNlLgoJKiBzY2FuLmg6IExpa2V3aXNlLgoJKiB0bGluay5jOiBMaWtld2lzZS4KCSogdG9wbGV2LmM6IExpa2V3aXNlLgoJKiB0b3BsZXYuaDogTGlrZXdpc2UuCgkqIHRyZWUuaDogTGlrZXdpc2UuCgpUaHUgTm92IDI2IDA4OjM4OjA2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lKTogVW4tQU5TSS1meSBmdW5jdGlvbiBkZWZpbml0aW9uLgoKVGh1IE5vdiAyNiAyMzo0NTozNyAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBSRUFETUUuQzRYOiBVcGRhdGVkIFVSTHMuCgkqIGNvbmZpZy9jNHgvYzR4LmMgKGM0eF9hZGRyZXNzX2NvbmZsaWN0KTogRml4IHR5cG8uCgkodmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgpUaHUgTm92IDI2IDIzOjQwOjAzIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9ERUZBVUxUKTogRml4IHR5cG8uCgoxOTk4LTExLTI2ICBNYW5mcmVkIEhvbGxzdGVpbiAgPG1hbmZyZWRAcy1kaXJla3RuZXQuZGU+CgoJKiBNYWtlZmlsZS5pbiAoQ09ORklHX0xBTkdVQUdFUyk6IE5ldyBtYWNybyB0YWtpbmcgYWxsIGxhbmd1YWdlcwoJd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQuCgkoTEFOR1VBR0VTKTogVXNlICQoQ09ORklHX0xBTkdVQUdFUykgaW5zdGVhZCBvZiBAYWxsX2xhbmd1YWdlc0AKCShNYWtlZmlsZSk6IFBhc3MgYWN0dWFsIExBTkdVQUdFUyB0aHJvdWdoIHRoZSBlbnZpcm9ubWVudCB3aGVuCglyZS1jb25maWd1cmluZy4KCShjc3RhbXAtaCk6IExpa2V3aXNlLgoJKGNvbmZpZy5zdGF0dXMpOiBMaWtld2lzZS4KCgkqIGNvbmZpZ3VyZS5pbiAoZW5hYmxlX2xhbmd1YWdlcyk6IEFkZCBuZXcgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIKCSItLWVuYWJsZS1sYW5ndWFnZXM9bGFuZzEsbGFuZzIsLi4uIi4KCSgke3NyY2Rpcn0vKi9jb25maWctbGFuZy5pbik6IENoYW5nZSBoYW5kbGluZyB0byBjb25maWd1cmUgb25seQoJdGhvc2UgZGlyZWN0b3JpZXMsIHRoYXQgdGhlIHVzZXIgbWlnaHQgaGF2ZSBlbmFibGVkOyBkZWZhdWx0IHRvCgkiYWxsIiBleGlzdGluZyBsYW5ndWFnZXMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KClRodSBOb3YgMjYgMDA6MTk6MTkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJ0bGFuYWwuYyAocmVnc19zZXRfYmV0d2Vlbl9wKTogTmV3IGZ1bmN0aW9uLgoJKiBydGwuaCAocmVnc19zZXRfYmV0d2Vlbl9wKTogUHJvdG90eXBlIGl0LgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBVc2UgaXQgaW5zdGVhZCBvZiBtb2RpZmllZF9iZXR3ZWVuX3AKCWluIHRoZSBTZXAgMiBjaGFuZ2UuCgpXZWQgTm92IDI1IDIzOjMyOjAyIDE5OTggIElhbiBEYWxsICA8SWFuLkRhbGxAZHN0by5kZWZlbmNlLmdvdi5hdT4KCQkJICBNYXR0aGlhcyBQZmFsbGVyICA8bGVvQGRhY2hhdS5tYXJjby5kZT4KCgkqIGludm9rZS50ZXhpIChPcHRpb24gU3VtbWFyeSwgTlMzMksgT3B0aW9ucyk6IEFkZCBkZXNjcmlwdGlvbgoJb2YgTlMzMksgc3BlY2lmaWMgb3B0aW9ucy4KCgkqIG5zMzJrLm1kICh0c3RkZiwgY21wZGYsIG1vdmRmLCB0cnVuY2Rmc2YyLCBmaXhkZnFpMiwgZml4ZGZoaTIsCglmaXhkZnNpMiwgZml4dW5zZGZxaTIsIGZpeHVuc2RmaGkyLCBmaXh1bnNkZnNpMiwgZml4X3RydW5jZGZxaTIsCglmaXhfdHJ1bmNkZmhpMiwgZml4X3RydW5jZGZzaTIsIGFkZGRmMywgc3ViZGYzLCBtdWxkZjMsIGRpdmRmMywKCW5lZ2RmMiwgYWJzZGYyKTogVXNlIGwgaW5zdGVhZCBvZiBmIHNpbmNlIHRoZSBkb3VibGUgY2xhc3MgYW5kCglmbG9hdCBjbGFzcyBhcmUgbm8gbG9uZ2VyIHRoZSBzYW1lLgoJKGNtcHNpLCB0cnVuY3NpcWkyLCB0cnVuY3NpaGkyLCBhZGRzaTMsIHN1YnNpMywgbXVsc2kzLCB1bXVsc2lkaTMsCglkaXZzaTMsIG1vZHNpMywgYW5kc2kzLCBpb3JzaTMsIHhvcnNpMywgbmVnc2kyLCBvbmVfY21wbHNpMiwKCWFzaGxzaTMsIGFzaGxoaTMsIGFzaGxxaTMsIHJvdGxzaTMsIHJvdGxoaTMsIHJvdGxxaTMsIGFic3NpMiwuLi4pOgoJVXNlICJnIiBpbnN0ZWFkIG9mICJybW4iIHNpbmNlIExFR0lUSU1BVEVfUElDX09QRVJBTkQgaGFzIGJlZW4KCWZpeGVkLgoJKGNtcHNpLCBjbXBoaSwgY21wcWkpOiBVc2UgZ2VuZXJhbF9vcGVyYW5kIGluc3RlYWQgb2YKCW5vbl9pbW1lZGlhdGVfb3BlcmFuZC4gUmVtb3ZlcyBlcnJvbmVvdXMgYXNzdW1wdGlvbiB0aGF0IGNhbid0Cgljb21wYXJlIGNvbnN0YW50cy4KCShtb3ZzZiwgbW92c2ksIG1vdmhpLCBtb3ZxaSwuLi4pOiBOZXcgcmVnaXN0ZXIgbnVtYmVyaW5nIHNjaGVtZS4KCShtb3ZzaSwgYWRkc2kzKTogVXNlIE5TMzJLX0RJU1BMQUNFTUVOVF9QIGluc3RlYWQgb2YgaGFyZCBjb2RlZAoJY29uc3RhbnRzLgoJKG1vdnN0cnNpLCBtb3ZzdHJzaTEsIG1vdnN0cnNpMik6IENvbXBsZXRlbHkgbmV3IGJsb2NrIG1vdmUKCXNjaGVtZS4KCSguLi4pOiBQYXR0ZXJucyB0byBleHBsb2l0IG11bHRpcGx5LWFkZCBpbnN0cnVjdGlvbnMuCgkodWRpdm1vZHNpNCwgdWRpdm1vZHNpX2ludGVybmFsNCwgdWRpdm1vZGhpNCwKCXVkaXZtb2RkaWhpNF9pbnRlcm5hbCwgdWRpdm1vZHFpNCwgdWRpdm1vZGRpcWk0X2ludGVybmFsKTogTmV3CglwYXR0ZXJucyB0byBleHBsb2l0IGV4dGVuZGVkIGRpdmlkZSBpbnNucy4KCSh1ZGl2c2kzLCB1ZGl2aGkzLCB1ZGl2cWkzKTogUmVtb3ZlIHNpbmNlIHN1cGVyc2VkZWQgYnkgdWRpdm1vZHNpCglldGMgcGF0dGVybnMuCgoJKiBuczMyay5oIChGVU5DVElPTl9WQUxVRSwgTElCQ0FMTF9WQUxVRSk6IFVzZSBmMCBmb3IgY29tcGxleAoJZmxvYXQgcmV0dXJuIHZhbHVlcyBhcyB3ZWxsIGFzIHNpbXBsZSBzY2FsYXIgZmxvYXRzLgoJKFRBUkdFVF8zMjM4MSwgVEFSR0VUX01VTFRfQURELCBUQVJHRVRfU1dJVENIRVMpOgoJU3VwcG9ydCBuZXcgZmxhZyB0byBkZW5vdGUgMzIzODEgZnB1LgoJKE9WRVJSSURFX09QVElPTlMpOiAzMjM4MSBpcyBhIHN0cmljdCBzdXBlcnNldCBvZiAzMjA4MS4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IERpc2FibGUgZXh0cmEgMzIzODEgcmVnaXN0ZXJzIGlmIG5vdAoJY29tcGlsaW5nIGZvciAzMjM4MS4KCShGSVJTVF9QU0VVRE9fUkVHSVNURVIsIEZJWEVEX1JFR0lTVEVSUywgQ0FMTF9VU0VEX1JFR0lTVEVSUywKCVJFR0lTVEVSX05BTUVTLCBBRERJVElPTkFMX1JFR0lTVEVSX05BTUVTLCBPVVRQVVRfUkVHSVNURVJfTkFNRVMsCglSRUdfQUxMT0NfT1JERVIsIERCWF9SRUdJU1RFUl9OVU1CRVIsIFIwX1JFR05VTSwgRjBfUkVHTlVNLAoJTDFfUkVHTlVNLCBTVEFDS19QT0lOVEVSX1JFR05VTSwgRlJBTUVfUE9JTlRFUl9SRUdOVU0sCglMT05HX0ZQX1JFR1NfUCwgQVJHX1BPSU5URVJfUkVHTlVNLCByZWdfY2xhc3MsIFJFR19DTEFTU19OQU1FUywKCVJFR19DTEFTU19DT05URU5UUywgU1VCU0VUX1AsUkVHTk9fUkVHX0NMQVNTLAoJUkVHX0NMQVNTX0ZST01fTEVUVEVSLCBGVU5DVElPTl9QUk9MT0dVRSwgRlVOQ1RJT05fRVBJTE9HVUUsCglSRUdOT19PS19GT1JfSU5ERVhfUCwgRlBfUkVHX1AsIFJFR19PS19GT1JfSU5ERVhfUCwKCVJFR19PS19GT1JfQkFTRV9QLCBNRU1fUkVHKTogTmV3IHJlZ2lzdGVyIHNjaGVtZSB0byBpbmNsdWRlIDMyMzgxCglmcHUgcmVnaXN0ZXJzIGFuZCBzcGVjaWFsIHJlZ2lzdGVyIGNsYXNzZXMgZm9yIG5ldyAzMjM4MQoJaW5zdHJ1Y3Rpb25zIGRvdGYgYW5kIHBvbHlmLgoJKE1PREVTX1RJRUFCTEVfUCk6IEFsbG93IGFsbCBpbnRlZ2VyIG1vZGVzLCBub3RhYmx5IERJIGFuZCBTSSwgdG8KCWJlIHRpZWFibGUuCgkoSU5DT01JTkdfUkVUVVJOX0FERFJfUlRYLCBSRVRVUk5fQUREUl9SVFgsCglJTkNPTUlOR19GUkFNRV9TUF9PRkZTRVQpOiBOZXcgbWFjcm9zIGluIGNhc2UgRFdBUkYgc3VwcG9ydCBpcwoJcmVxdWlyZWQuCgkoU01BTExfUkVHSVNURVJfQ0xBU1NFUyk6IE1ha2UgZGVwZW5kZW50IG9uIC1tbXVsdC1hZGQgb3B0aW9uLgoJKE1PVkVfUkFUSU8pOiBTZXQgdG8gemVybyBiZWNhdXNlIG9mIHNtYXJ0IG1vdnN0cnNpIGltcGxlbWVudGF0aW9uLgoJKFJFR0lTVEVSX01PVkVfQ09TVCk6IE1vdmUgY29kZSB0byByZWdpc3Rlcl9tb3ZlX2Nvc3QgZnVuY3Rpb24gZm9yCgllYXNlIG9mIGNvZGluZyBhbmQgZGVidWdnaW5nLgoJKENMQVNTX0xJS0VMWV9TUElMTEVEX1ApOiBVbmRlciBuZXcgcmVnaXN0ZXIgc2NoZW1lIGNsYXNzCglMT05HX0ZMT0FUX1JFR08gaXMgbGlrZWx5IHNwaWxsZWQgYnV0IG5vdCBjYXVnaHQgYnkgZGVmYXVsdAoJZGVmaW5pdGlvbi4KCShDT05TVEFOVF9BRERSRVNTX1AsIENPTlNUQU5UX0FERFJFU1NfTk9fTEFCRUxfUCk6IFVzZSBtYWNybwoJaW5zdGVhZCBvZiBoYXJkIGNvZGVkIG51bWJlcnMgaW4gcmFuZ2UgY2hlY2suCgkoQVNNX09VVFBVVF9MQUJFTFJFRl9BU19JTlQpOiBEZWxldGUgc2luY2UgdW51c2VkLgoJKC4uLik6IEFkZCBwcm90b3R5cGVzIGZvciBmdW5jdGlvbnMgaW4gbnMzMmsuYyBidXQgZGlzYWJsZSBiZWNhdXNlCglvZiBwcm9ibGVtcyB3aGVuIG5zMzJrLmggaXMgaW5jbHVkZWQgaW4gbWFjaGluZSBpbmRlcGVuZGVudCBmaWxlcy4KCgkqIG5zMzJrLmM6IEluY2x1ZGUgInN5c3RlbS5oIiwgInRyZWUuaCIsICJleHByLmgiLCAiZmxhZ3MuaCIuCgkobnMzMmtfcmVnX2NsYXNzX2NvbnRlbnRzLCByZWdjYXNzX21hcCwgbnMzMmtfb3V0X3JlZ19uYW1lcywKCWhhcmRfcmVnbm9fbW9kZV9vaywgc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcywKCXByaW50X29wZXJhbmQsIHByaW50X29wZXJhbmRfYWRkcmVzcyk6IE5ldyByZWdpc3RlciBzY2hlbWUgdG8KCWluY2x1ZGUgMzIzODEgZnB1IHJlZ2lzdGVycyBhbmQgc3BlY2lhbCByZWdpc3RlciBjbGFzc2VzIGZvciBuZXcKCTMyMzgxIGluc3RydWN0aW9ucyBkb3RmIGFuZCBwb2x5Zi4KCShnZW5faW5kZXhlZF9leHByKTogTWFrZSBzdGF0aWMgdG8ga2VlcCBuYW1lc3BhY2UgY2xlYW4uCgkoY2hlY2tfcmVnKTogUmVtb3ZlIHNpbmNlIG5ldmVyIGNhbGxlZC4KCShtb3ZlX3RhaWwsIGV4cGFuZF9ibG9ja19tb3ZlKTogSGVscGVyIGZ1bmN0aW9ucyBmb3IgIm1vdnN0cnNpIgoJYmxvY2sgbW92ZSBpbnNuLgoJKHJlZ2lzdGVyX21vdmVfY29zdCk6IEhlbHBlciBmdW5jdGlvbiBmb3IgUkVHSVNURVJfTU9WRV9DT1NUIG1hY3JvLgoJSW5jcmVhc2UgY29zdCBvZiBtb3ZlcyB3aGljaCBnbyB2aWEgbWVtb3J5LgoJKiBuZXRic2QuaCAoVEFSR0VUX0RFRkFVTFQpOiBTZXQgKG5ldykgMzIzODEgZnB1IGZsYWcuCgkoQ1BQX1BSRURFRklORVMpOiBObyBsb25nZXIgcHJlZGVmaW5lICJ1bml4Ii4KCgkqIG5zMzJrLm1kIChtb3ZzaSwgbW92c2ksIGFkZGRpMywgc3ViZGkzLCBzdWJzaTMsIHN1YmhpMywgc3VicWkzLC4uLik6CglSZW1vdmUgZXJyb25lb3VzICUkLiBwcmludF9vcGVyYW5kKCkgY2FuIHdvcmsgb3V0IGZyb20gdGhlIHJ0eCBpcwoJYW4gaW1tZWRpYXRlIHByZWZpeCBpcyByZXF1aXJlZC4KCgkqIG5zMzJrLmggKFJFVFVSTl9QT1BTX0FSR1MsIFZBTElEX01BQ0hJTkVfREVDTF9BVFRSSUJVVEUsCglWQUxJRF9NQUNISU5FX1RZUEVfQVRUUklCVVRFLCBDT01QX1RZUEVfQVRUUklCVVRFUywKCVNFVF9ERUZBVUxUX1RZUEVfQVRUUklCVVRFUyk6IFN1cHBvcnQgZm9yIC1tcnRkIGNhbGxpbmcKCWNvbnZlbnRpb24uCgkoTEVHSVRJTUFURV9QSUNfT1BFUkFORF9QLCBTWU1CT0xJQ19DT05TVCk6IENvcnJlY3QgaGFuZGxpbmcgb2YKCXBpYyBvcGVyYW5kcy4KCgkqIG5zMzJrLmMgKHN5bWJvbGljX3JlZmVyZW5jZV9tZW50aW9uZWRfcCwgcHJpbnRfb3BlcmFuZCk6CglDb3JyZWN0IGhhbmRsaW5nIG9mIHBpYyBvcGVyYW5kcy4KCShuczMya192YWxpZF9kZWNsX2F0dHJpYnV0ZV9wLCBuczMya192YWxpZF90eXBlX2F0dHJpYnV0ZV9wLAoJbnMzMmtfY29tcF90eXBlX2F0dHJpYnV0ZXMsIG5zMzJrX3JldHVybl9wb3BzX2FyZ3MpOiBTdXBwb3J0IGZvcgoJLW1ydGQgY2FsbGluZyBjb252ZW50aW9uLgoKV2VkIE5vdiAyNSAyMzo0MjoyMCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBnY2MuYyAob3B0aW9uX21hcCk6IFJlY29nbml6ZSAtLW91dHB1dC1jbGFzcy1kaXJlY3RvcnkuCgpUaHUgTm92IDI2IDE4OjI2OjIxIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuaCAocHJlY29uZGl0aW9uX2xvb3BfcCk6IEFkZGVkIG5ldyBtb2RlIGFyZ3VtZW50LgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6IExpa2V3aXNlLgoJKGFwcHJveF9maW5hbF92YWx1ZSk6IEZ1bmN0aW9uIGRlbGV0ZWQgYW5kIHN1YnN1bWVkCglpbnRvIGxvb3BfaXRlcmF0aW9ucy4KCShsb29wX2ZpbmRfZXF1aXZfdmFsdWUpOiBOZXcgZnVuY3Rpb24uCgkobG9vcF9pdGVyYXRpb25zKTogVXNlIGxvb3BfZmluZF9lcXVpdl92YWx1ZSB0byBmaW5kIGluY3JlbWVudHMKCXRvbyBsYXJnZSB0byBiZSBpbW1lZGlhdGUgY29uc3RhbnRzLiAgQWxzbyB1c2UgaXQgdG8gZmluZCB0ZXJtcwoJY29tbW9uIHRvIGluaXRpYWwgYW5kIGZpbmFsIGl0ZXJhdGlvbiB2YWx1ZXMgdGhhdCBjYW4gYmUgcmVtb3ZlZC4KClRodSBOb3YgMjYgMTg6MDU6MDQgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogbG9vcC5oIChzdHJ1Y3QgbG9vcF9pbmZvKTogRGVmaW5lIG5ldyBzdHJ1Y3R1cmUuCgkocHJlY29uZGl0aW9uX2xvb3BfcCk6IEFkZGVkIHByb3RvdHlwZS4KCSh1bnJvbGxfbG9vcCk6IEFkZGVkIG5ldyBhcmd1bWVudCBsb29wX2luZm8gdG8gcHJvdG90eXBlLgoJKGZpbmFsX2Jpdl92YWx1ZSwgZmluYWxfZ2l2X3ZhbHVlKTogQWRkZWQgbmV3IGFyZ3VtZW50IG5faXRlcmF0aW9ucwoJdG8gcHJvdG90eXBlLgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IERlY2xhcmUgbmV3IHN0cnVjdHVyZSBsb29wX2l0ZXJhdGlvbl9pbmZvCglhbmQgbmV3IHBvaW50ZXIgbG9vcF9pbmZvLgoJKGxvb3Bfbl9pdGVyYXRpb25zKTogUmVwbGFjZSBnbG9iYWwgdmFyaWFibGUgYnkgZWxlbWVudCBpbgoJbG9vcF9pbmZvIHN0cnVjdHVyZS4KCShjaGVja19maW5hbF92YWx1ZSk6IE5ldyBhcmd1bWVudCBuX2l0ZXJhdGlvbnMuCgkoaW5zZXJ0X2JjdCk6IE5ldyBhcmd1bWVudCBsb29wX2luZm8uCgkobG9vcF91bnJvbGxfZmFjdG9yKTogUmVwbGFjZSBnbG9iYWwgYXJyYXkgYnkgZWxlbWVudCBpbgoJbG9vcF9pbmZvIHN0cnVjdHVyZS4KCShsb29wX29wdGltaXplKTogUmVtb3ZlIGNvZGUgdG8gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUKCWxvb3BfdW5yb2xsX2ZhY3Rvcl9hcnJheS4KCSogdW5yb2xsLmMgKHByZWNvbmRpdGlvbl9sb29wX3ApOiBObyBsb25nZXIgc3RhdGljIHNpbmNlCgl1c2VkIGJ5IGJyYW5jaCBvbiBjb3VudCBvcHRpbWl6YXRpb24uCgkocHJlY29uZGl0aW9uX2xvb3BfcCwgdW5yb2xsX2xvb3ApOiBOZXcgYXJndW1lbnQgbG9vcF9pbmZvLgoJKGZpbmFsX2Jpdl92YWx1ZSwgZmluYWxfZ2l2X3ZhbHVlLCBmaW5kX3NwbGl0dGFibGVfcmVncyk6IE5ldwoJYXJndW1lbnQgbl9pdGVyYXRpb25zLgoJKGxvb3BfaXRlcmF0aW9uX3ZhciwgbG9vcF9pbml0aWFsX3ZhbHVlLCBsb29wX2luY3JlbWVudCwKCWxvb3BfZmluYWxfdmFsdWUsIGxvb3BfY29tcGFyaXNvbl9jb2RlLCBsb29wX3Vucm9sbF9mYWN0b3IpOgoJUmVwbGFjZWQgZ2xvYmFsIHZhcmlhYmxlcyBieSBsb29wX2luZm8gc3RydWN0dXJlLgoJKGxvb3BfdW5yb2xsX2ZhY3Rvcik6IFJlcGxhY2UgZ2xvYmFsIGFycmF5IGJ5IGVsZW1lbnQgaW4KCWxvb3BfaW5mbyBzdHJ1Y3R1cmUuCgpUaHUgTm92IDI2IDE3OjQ5OjI5IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogVXBkYXRlIEpVTVBfTEFCRUwgZmllbGQgb2YganVtcCBpbnNuCgl3aGVuIGxvb3AgcmV2ZXJzZWQuCgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6IFJldHVybiBsb29wX2luaXRpYWxfdmFsdWUKCWZvciBpbml0aWFsX3ZhbHVlIGluc3RlYWQgb2YgbG9vcF9pdGVyYXRpb25fdmFyLgoKVGh1IE5vdiAyNiAxNzoxNTozOCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5tZDogRml4IG1pbm9yIGZvcm1hdHRpbmcgcHJvYmxlbXMuICBVcGRhdGUgZG9jcy4KCSgqYiwgKmJfcmV2LCAqYl9ub292LCAqYl9ub292X3JldiwgKmRiLAoJZGVjcmVtZW50X2FuZF9icmFuY2hfdW50aWxfemVybywgcnB0Yl9lbmQpOiBVc2UgYzR4X291dHB1dF9jYnJhbmNoCgl0byBvdXRwdXQgdGhlIGluc3RydWN0aW9uIHNlcXVlbmNlcy4KCShycHRzKTogRGVsZXRlLgoJKHJwdGJfdG9wKTogUHJvdmlkZSBhbHRlcm5hdGl2ZXMgdG8gdXNlIGFueSByZWdpc3RlciBvciBtZW1vcnkKCWZvciBsb29wIGNvdW50ZXIuCgkocnB0Yl9lbmQpOiBFbWl0IHVzZSBvZiBvcGVyYW5kcyByYXRoZXIgdGhhbiBhc3NpZ25pbmcgdGhlbQoJZXhwbGljaXRseSB0byB0aGUgUlMgYW5kIFJFIHJlZ2lzdGVycy4KClRodSBOb3YgMjYgMTY6Mzc6NTkgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X21vZGlmaWVkX2JldHdlZW5fcCwgYzR4X21lbV9zZXRfcCwKCWM0eF9tZW1fc2V0X3AsIGM0eF9tZW1fbW9kaWZpZWRfYmV0d2Vlbl9wLCBjNHhfaW5zbl9tb3ZlYWJsZV9wLAoJYzR4X3BhcmFsbGVsX3BhY2ssIGM0eF9wYXJhbGxlbF9maW5kLCBjNHhfdXBkYXRlX2luZm9fcmVnLAoJYzR4X3VwZGF0ZV9pbmZvX3JlZ3MsIGM0eF9jb3B5X2luc25fYWZ0ZXIsIGM0eF9jb3B5X2luc25zX2FmdGVyLAoJYzR4X21lcmdlX25vdGVzLCBjNHhfcGFyYWxsZWxfcHJvY2VzcywKCWM0eF9jb21iaW5lX3BhcmFsbGVsX2luZGVwZW5kZW50LCBjNHhfY29tYmluZV9wYXJhbGxlbF9kZXBlbmRlbnQsCgljNHhfY29tYmluZV9wYXJhbGxlbCk6IERlbGV0ZS4KClRodSBOb3YgMjYgMTU6MTY6MDUgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHguYyAoYzR4X292ZXJyaWRlX29wdGlvbnMpOiBGb3IgY29tcGF0aWJpbGl0eQoJd2l0aCBvbGQgdGFyZ2V0IG9wdGlvbnMgY2xlYXIgZmxhZ19icmFuY2hfb25fY291bnRfcmVnIGlmCgktbW5vLXJwdGIgc3BlY2lmaWVkIGFuZCBzZXQgZmxhZ19hcmd1bWVudF9hbGlhcyBpcyAtbW5vLWFsaWFzZXMKCXNwZWNpZmllZC4KCShjNHhfb3V0cHV0X2NicmFuY2gpOiBIYW5kbGUgYSBzZXF1ZW5jZSBvZiBpbnNucyByYXRoZXIgdGhhbiBhCglzaW5nbGUgaW5zbi4KCShjNHhfcnB0Yl9pbnNlcnQpOiBEbyBub3QgZW1pdCBhIFJQVEIgaW5zbiBpZiB0aGUgUkMgcmVnaXN0ZXIKCWhhcyBub3QgYmVlbiBhbGxvY2F0ZWQgYXMgdGhlIGxvb3AgY291bnRlci4KCShjNHhfYWRkcmVzc19jb25mbGljdCk6IERvIG5vdCBhbGxvdyB0d28gdm9sYXRpbGUgbWVtb3J5IHJlZmVyZW5jZXMuCgkodmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNCwgdmFsaWRfcGFyYWxsZWxfb3BlcmFuZHNfNSwKCXZhbGlkX3BhcmFsbGVsX29wZXJhbmRzXzYpOiBSZWplY3QgcGF0dGVybiBpZiB0aGUgcmVnaXN0ZXIgZGVzdGluYXRpb24KCW9mIHRoZSBmaXJzdCBzZXQgaXMgdXNlZCBhcyBwYXJ0IG9mIGFuIGFkZHJlc3MgaW4gdGhlIHNlY29uZCBzZXQuCgpUaHUgTm92IDI2IDE0OjU2OjMyIDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmggKFRBUkdFVF9ERUZBVUxUKTogQWRkIFBBUkFMRUxfTVBZX0ZMQUcuCgkoVEFSR0VUX1NNQUxMX1JFR19DTEFTUyk6IFNldCB0byAwIHNvIHRoYXQgU01BTExfUkVHSVNURVJfQ0xBU1NFUwoJaXMgbm8gbG9uZ2VyIGVuYWJsZWQgaWYgUEFSQUxMRUxfTVBZX0ZMQUcgc2V0LgoJKEhBUkRfUkVHTk9fQ0FMTF9DTE9CQkVSRUQpOiBBZGQgcGFyZW50aGVzZXMgdG8gcmVtb3ZlIGFtYmlndWl0eS4KCShSRUdfQ0xBU1NfQ09OVEVOVFMpOiBBZGQgYnJhY2VzIGFyb3VuZCBpbml0aWFsaXplcnMuCgkoSEFWRV9NVUxUSVBMRV9QQUNLKTogRGVmaW5lLgoJKEFTTV9PVVRQVVRfQllURV9GTE9BVCk6IFVzZSAlbGYgZm9ybWF0IHNwZWNpZmllciB3aXRoCglSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwuCgkoQVNNX09VVFBVVF9TSE9SVF9GTE9BVCk6IFVzZSAlbGYgZm9ybWF0IHNwZWNpZmllciB3aXRoCglSRUFMX1ZBTFVFX1RPX0RFQ0lNQUwuCgkoYXIwX3JlZ19vcGVyYW5kKTogQWRkIHByb3RvdHlwZS4KCShhcjBfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjJfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjJfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjNfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjNfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjRfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjRfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjVfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjVfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjZfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjZfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjdfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcjdfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjBfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjBfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShncm91cDFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShncm91cDFfbWVtX29wZXJhbmQpOiBMaWtld2lzZS4KCShpcjFfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShhcnhfcmVnX29wZXJhbmQpOiBMaWtld2lzZS4KCShub3RfcmNfcmVnKTogTGlrZXdpc2UuCgkobm90X21vZGlmeV9yZWcpOiBMaWtld2lzZS4KCShjNHhfZ3JvdXAxX3JlZ19vcGVyYW5kKTogUmVtb3ZlIHByb3RvdHlwZS4KCShjNHhfZ3JvdXAxX21lbV9vcGVyYW5kKTogTGlrZXdpc2UuCgkoYzR4X2FyeF9yZWdfb3BlcmFuZCk6IExpa2V3aXNlLgoKV2VkIE5vdiAyNSAxOTowMjo1NSAxOTk4ICAoU3RlcGhlbiBMIE1vc2hpZXIpICA8bW9zaGllckB3b3JsZC5zdGQuY29tPgoKCSogZW1pdC1ydGwuYyAoZ2VuX2xvd3BhcnRfY29tbW9uKTogUmVtb3ZlIGVhcmxpZXIgY2hhbmdlLgoJKiByZWFsLmMgKG1ha2VfbmFuKTogTWFrZSBTSUdOIGFyZyBhY3R1YWxseSBzcGVjaWZ5IHRoZSBzaWduIGJpdC4KClRodSBOb3YgMjYgMTQ6MTI6MDUgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKGFkZHFpMyk6IEVtaXQgYWRkcWkzX25vY2xvYmJlciBwYXR0ZXJuCglkdXJpbmcgcmVsb2FkLgoKV2VkIE5vdiAyNSAyMjowNToyOCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gKF9fX3VkaXZzaTNfaTQpOiBEb24ndCBzd2l0Y2ggdG8gc3ogPT0gMQoJdW5sZXNzIEZNT1ZEX1dPUktTIGlzIGRlZmluZWQuCgpXZWQgTm92IDI1IDIwOjExOjA0IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdjbGFzcy5jIChpbml0X3JlZ19zZXRzKTogTW92ZSBjb2RlIHRoYXQgY2FsY3VsYXRlcyB0YWJsZXMKCWRlcGVuZGVudCBvbiByZWdfY2xhc3NfY29udGVudHMgZnJvbSBoZXJlLi4uCgkoaW5pdF9yZWdfc2V0c18xKTogVG8gaGVyZS4KCldlZCBOb3YgMjUgMTQ6NTQ6NDYgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5oOiBEZWxldGUgc3RydWN0IGltcG9ydF9maWxlLiAgQWRkIGloYXNoIGVsZW1lbnQgdG8KCXN0cnVjdCBjcHBfYnVmZmVyLiAgRGVsZXRlIGRvbnRfcmVwZWF0X2ZpbGVzIGFuZAoJaW1wb3J0X2hhc2hfdGFibGUgZWxlbWVudHMgZnJvbSBjcHBfcmVhZGVyOyBjaGFuZ2UKCWFsbF9pbmNsdWRlX2ZpbGVzIHRvIGEgaGFzaCB0YWJsZS4gIERlbGV0ZSBhbGwgZm9vYmFyX2luY2x1ZGUKCS8gbGFzdF9mb29iYXJfaW5jbHVkZSBlbGVtZW50cyBmcm9tIHN0cnVjdCBjcHBfb3B0aW9uczsgcHV0CgliYWNrIGZvdXIgc3VjaDogcXVvdGVfaW5jbHVkZSwgYnJhY2tldF9pbmNsdWRlLAoJc3lzdGVtX2luY2x1ZGUsIGFmdGVyX2luY2x1ZGUuICBSZWRvIHN0cnVjdCBmaWxlX25hbWVfbGlzdAoJY29tcGxldGVseS4gIEFkZCBuZXcgc3RydWN0dXJlIHR5cGUgaW5jbHVkZV9oYXNoLiAgQWRkCglwcm90b3R5cGVzIGZvciBtZXJnZV9pbmNsdWRlX2NoYWlucyBhbmQgaW5jbHVkZV9oYXNoLiAgQ2hhbmdlCglwcm90b3R5cGVzIGZvciBmaW5jbHVkZSwgZmluZF9pbmNsdWRlX2ZpbGUsIGFuZAoJYXBwZW5kX2luY2x1ZGVfY2hhaW4gdG8gbWF0Y2ggY2hhbmdlcyBiZWxvdy4KCgkqIGNwcGZpbGVzLmMgKHNpbXBsaWZ5X3BhdGhuYW1lLCBpbmNsdWRlX2hhc2gsCglyZW1hcF9maWxlbmFtZSwgbWVyZ2VfaW5jbHVkZV9jaGFpbnMpOiBOZXcgZnVuY3Rpb25zLgoJKGFkZF9pbXBvcnQsIGxvb2t1cF9pbXBvcnQsIG9wZW5faW5jbHVkZV9maWxlKTogUmVtb3ZlZC4KCShJTk9fVF9FUSk6IERlZmluZSB0aGlzIChjb3BpZWQgZnJvbSBjY2NwLmMpLgoJKGhhY2tfdm1zX2luY2x1ZGVfc3BlY2lmaWNhdGlvbik6IFJlbW92ZSBhbGwgY2FsbHMgYW5kICNpZiAwCglvdXQgdGhlIGRlZmluaXRpb24uICBJdCB3YXMgYmVpbmcgY2FsbGVkIGluY29ycmVjdGx5IGFuZCBhdAoJdGhlIHdyb25nIHRpbWVzLiAgVW50aWwgYSBWTVNpZSBjYW4gbG9vayBhdCB0aGlzLCBpdCdzIGJldHRlcgoJdG8gbm90IHByZXRlbmQgdG8gc3VwcG9ydCBpdC4KCShhcHBlbmRfaW5jbHVkZV9jaGFpbik6IENoYW5nZSBjYWxsaW5nIGNvbnZlbnRpb247IG5vdyB0YWtlcwoJb25seSBvbmUgZGlyZWN0b3J5IGF0IGEgdGltZSwgYW5kIHNldHMgdXAgdGhlIGRhdGEgc3RydWN0dXJlCglpdHNlbGYuCgkocmVkdW5kYW50X2luY2x1ZGVfcCk6IFJld3JpdHRlbiAtIHRoaXMgaXMgbm93IHVzZWQgZm9yIGFsbAoJaW5jbHVkZSByZWR1bmRhbmN5LCB3aGV0aGVyIGJ5ICNpZm5kZWYsICNpbXBvcnQsIG9yICNwcmFnbWEKCW9uY2UuICBMb29rcyB1cCB0aGluZ3MgaW4gdGhlIGluY2x1ZGUgaGFzaCB0YWJsZS4KCShmaWxlX2NsZWFudXApOiBEZWNyZW1lbnQgcGZpbGUtPnN5c3RlbV9pbmNsdWRlX2RlcHRoIGhlcmUgaWYKCWl0J3MgPjAuCgkoZmluZF9pbmNsdWRlX2ZpbGUpOiBDYWxsaW5nIGNvbnZlbnRpb24gY2hhbmdlZDsgbm93IHBhc3NlcwoJYXJvdW5kIGEgc3RydWN0IGluY2x1ZGVfaGFzaCBpbnN0ZWFkIG9mIDMgc2VwYXJhdGUgcGFyYW1ldGVycy4KCUd1dHMgcmlwcGVkIG91dCBhbmQgcmVwbGFjZWQgd2l0aCBuZXcgaW5jbHVkZV9oYXNoIG1lY2hhbmlzbS4KCShmaW5jbHVkZSk6IENhbGxpbmcgY29udmVudGlvbiBjaGFuZ2VkIGFzIGZvcgoJZmluZF9pbmNsdWRlX2ZpbGUuICBFcnJvciBleGl0cyBwdWxsZWQgb3V0LW9mLWxpbmUuICBSZWZvcm1hdC4KCShzYWZlX3JlYWQpOiBSZXR1cm4gYSBsb25nLCBub3QgYW4gaW50LgoJKGRlcHNfb3V0cHV0KTogRG9uJ3QgcmVjdXJzZS4KCgkqIGNwcGxpYi5jIChpc19zeXN0ZW1faW5jbHVkZSk6IERlbGV0ZWQuCgkocGF0aF9pbmNsdWRlKTogRml4IHVwIGNhbGwgdG8gYXBwZW5kX2luY2x1ZGVfY2hhaW4uCgkoZG9faW5jbHVkZSk6IEZpeCB1cCBjYWxscyB0byBmaW5kX2luY2x1ZGVfZmlsZSBhbmQgZmluY2x1ZGUuCglDbGVhbiB1cCBkZXBlbmRlbmN5IG91dHB1dCBhIGJpdC4gIFNob3J0ZW4gb2Jub3hpb3VzbHkgbGVuZ3RoeQoJI2ltcG9ydCB3YXJuaW5nIG1lc3NhZ2UuICBEb24ndCBkZWNyZW1lbnQKCXBmaWxlLT5zeXN0ZW1faW5jbHVkZV9kZXB0aCBoZXJlLgoJKGRvX3ByYWdtYSk6IFVuZGVyc3RhbmQgdGhlIGluY2x1ZGVfaGFzaCBzdHJ1Y3R1cmUuICBSZWZvcm1hdC4KCShkb19lbmRpZik6IENvcnJlY3QgaGFuZGxpbmcgb2YgY29udHJvbCBtYWNyb3MuICBVbmRlcnN0YW5kCgl0aGUgaW5jbHVkZV9oYXNoLgoJKGNwcF9zdGFydF9yZWFkKTogRml4IHVwIGNhbGxzIHRvIGZpbmNsdWRlLiAgQ2FsbAoJbWVyZ2VfaW5jbHVkZV9jaGFpbnMuCgkoY3BwX2hhbmRsZV9vcHRpb24pOiBGaXggdXAgY2FsbHMgdG8gYXBwZW5kX2luY2x1ZGVfY2hhaW4uCglVbmRlcnN0YW5kIHRoZSBmb3VyIHBhcnRpYWwgaW5jbHVkZSBjaGFpbnMuCgkoY3BwX2ZpbmlzaCk6IEFkZCBkZWJ1Z2dpbmcgY29kZSAoI2lmIDAtZWQgb3V0KSBmb3IgdGhlCglpbmNsdWRlX2hhc2guCgkoY3BwX2NsZWFudXApOiBGcmVlIHRoZSBpbmNsdWRlX2hhc2gsIG5vdCB0aGUgaW1wb3J0IGhhc2ggYW5kCgl0aGUgYWxsX2luY2x1ZGUgYW5kIGRvbnRfcmVwZWF0IGxpc3RzIHdoaWNoIG5vIGxvbmdlciBleGlzdC4KCldlZCBOb3YgMjUgMTE6MjY6MTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdG9wbGV2LmMgKG5vX25ld19wc2V1ZG9zKTogRGVmaW5lLgoJKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTZXQgbm9fbmV3X3BzZXVkb3MgYXMgbmVlZGVkLgoJKiBlbWl0LXJ0bC5jIChnZW5fcmVnX3J0eCk6IEFib3J0IGlmIHdlIHRyeSB0byBjcmVhdGUgYSBuZXcgcHNldWRvCglpZiBub19uZXdfcHNldWRvcyBpcyBzZXQuCgkqIHJ0bC5oIChub19uZXdfcHNldWRvcyk6IERlY2xhcmUgaXQuCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogVXBkYXRlIGNvbW1lbnRzLgoJKiBtZC50ZXhpOiBDb3JyZXNwb25kaW5nIGNoYW5nZXMuCgpXZWQgTm92IDI1IDExOjI2OjE3IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAocmVnX3VzZWRfaW5faW5zbik6IFJlbmFtZWQgZnJvbSByZWdfdXNlZF9ieV9wc2V1ZG8uCgkoY2hvb3NlX3JlbG9hZF9yZWdzKTogUmVuYW1lIGl0IGhlcmUgYXMgd2VsbC4gIFdoZW4gY29tcHV0aW5nIGl0LAoJYWxzbyBtZXJnZSBpbiB1c2VkIGhhcmRyZWdzLgoKMTk5OC0xMS0yNSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGdjYy5jOiBTcGxpdCBvdXQgT2JqZWN0aXZlLUMgc3BlY3MgdG8uLi4KCSogb2JqYy9sYW5nLXNwZWNzLmg6IGhlcmUuIChOZXcgZmlsZS4pIE1ha2UgdGhlIHNwZWNzIGNwcGxpYgoJYXdhcmUuCgoJKiBjLWxleC5jIChpbml0X3BhcnNlKTogQWx3YXlzIGluaXRpYWxpemUgdGhlIGZpbGVuYW1lIGdsb2JhbC4KCSogb2JqYy9vYmpjLWFjdC5jIChsYW5nX2luaXQpOiBBbHdheXMgY2FsbCBjaGVja19uZXdsaW5lIGF0CgliZWdpbm5pbmcgb2YgZmlsZS4KCldlZCBOb3YgMjUgMDA6NDg6MjkgMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCgkocmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wKTogQWRkIG1pc3NpbmcgcGFyYW1ldGVyIGRlZmluaXRpb24uCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgoKV2VkIE5vdiAyNSAwMDowNzoxMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZ3JhcGgubyk6IERlcGVuZCBvbiAkKFJUTF9IKSwgbm90IHJ0bC5oLgoKCSogY3NlLmMgKGZvbGRfcnR4KTogTWFrZSBhdXRvaW5jcmVtZW50IGFkZHJlc3NpbmcgbW9kZSB0ZXN0cyBiZQoJcnVudGltZSBzZWxlY3RhYmxlLgoJKiBleHByLmMgKG1vdmVfYnlfcGllY2VzKTogU2ltaWxhcmx5LgoJKG1vdmVfYnlfcGllY2VzXzEsIGNsZWFyX2J5X3BpZWNlcywgY2xlYXJfYnlfcGllY2VzXzEpOiBTaW1pbGFybHkuCgkqIGZsb3cuYyAoZmluZF9hdXRvX2luYyk6IFNpbWlsYXJseS4KCSh0cnlfcHJlX2luY3JlbWVudCk6IFNpbWlsYXJseS4KCSogbG9vcC5jIChzdHJlbmd0aF9yZWR1Y2UpOiBTaW1pbGFybHkuCgkqIHJlZ2NsYXNzLmMgKGF1dG9faW5jX2RlY19yZWdfcCk6IFNpbWlsYXJseS4KCSogcmVnbW92ZS5jICh0cnlfYXV0b19pbmNyZW1lbnQpOiBTaW1pbGFybHkuCgkoZml4dXBfbWF0Y2hfMSk6IFNpbWlsYXJseS4KCSogcnRsLmggKEhBVkVfUFJFX0lOQ1JFTUVOVCk6IERlZmluZSBpZiBub3QgYWxyZWFkeSBkZWZpbmVkLgoJKEhBVkVfUFJFX0RFQ1JFTUVOVCk6IFNpbWlsYXJseS4KCShIQVZFX1BPU1RfSU5DUkVNRU5ULCBIQVZFX1BPU1RfREVDUkVNRU5UKTogU2ltaWxhcmx5LgoJKiBDb3JyZXNwb25kaW5nIGNoYW5nZXMgdG8gYWxsIHRhcmdldCBoZWFkZXIgZmlsZXMuCgkqIHRtLnRleGk6IFVwZGF0ZSBkb2NzIGZvciBhdXRvaW5jIGFkZHJlc3NpbmcgbW9kZXMuCgpUdWUgTm92IDI0IDIwOjI0OjU5IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAobTY4MDIwLSotZWxmKiwgbTY4ay0qLWVsZiopOiBOZXcgdGFyZ2V0cy4KCSogY29uZmlndXJlOiBSZWJ1aWxkLgoJKiBjb25maWcvZWxmb3MuaDogTmV3IGZpbGUuCgkqIGNvbmZpZy9tNjhrL202ODAyMC1lbGYuaCwgY29uZmlnL202OGsvbTY4a2VsZi5oLAoJY29uZmlnL202OGsvdC1tNjhrZWxmOiBOZXcgZmlsZS4KClR1ZSBOb3YgMjQgMTM6NDA6MDYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKEhPU1RfQVIpOiBEZWZpbmUuCgkoSE9TVF9BUl9GTEFHUywgSE9TVF9SQU5MSUIsIEhPU1RfUkFOTElCX1RFU1QpOiBTaW1pbGFybHkuCgkobGliY3BwLmEpOiBVc2UgdGhlIGhvc3QgdG9vbHMgZXhwbGljaXRseS4KCShTVEFHRVNUVUZGKTogQWRkIGxpYmNwcC5hLgoKVHVlIE5vdiAyNCAwOTozMzo0OSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL20zMnIvbTMyci5tZCAobW92c3Ryc2lfaW50ZXJuYWwpOiBEZXNjcmliZSBjaGFuZ2VzIG1hZGUKCXRvIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gcmVnaXN0ZXJzLgoKTW9uIE5vdiAyMyAyMDoyODowMiAxOTk4ICBNaWtlIFN0dW1wICA8bXJzQHdycy5jb20+CgoJKiBsaWJnY2MyLmMgKHRvcF9lbHQpOiBSZW1vdmUgdG9wX2VsdCwgaXQgaXNuJ3QgdGhyZWFkIHNhZmUuCglUaGUgc3RyYXRlZ3kgd2Ugbm93IHVzZSBpcyB0byBwcmUgYWxsb2NhdGUgdGhlIHRvcF9lbHQgYWxvbmcKCXdpdGggdGhlIEVIIGNvbnRleHQgc28gdGhhdCBlYWNoIHRocmVhZCBoYXMgaXRzIG93biB0b3BfZWx0LgoJVGhpcyBpcyBuZWNlc3NhcnkgYXMgdGhlIGR5bmFtaWMgY2xlYW51cCBjaGFpbiBpcyB1c2VkIG9uIHRoZQoJdG9wIGVsZW1lbnQgb2YgdGhlIHN0YWNrIGFuZCBlYWNoIHRocmVhZCBNVVNUIGhhdmUgaXRzIG93bi4KCShlaF9jb250ZXh0X3N0YXRpYyk6IExpa2V3aXNlLgoJKG5ld19laF9jb250ZXh0KTogTGlrZXdpc2UuCgkoX19zanRocm93KTogTGlrZXdpc2UuCgpNb24gTm92IDIzIDIwOjI1OjAzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGkzODYvbGludXguaCAoQVNNX09VVFBVVF9NQVhfU0tJUF9BTElHTik6IFdyYXAgaW4gZG8uLi53aGlsZS4KCSogaTM4Ni5tZCAocHJvbG9ndWVfZ2V0X3BjKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCk1vbiBOb3YgMjMgMTc6MDU6NDAgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGkzODYveG0tY3lnd2luLmg6IFJlbmFtZSBjeWd3aW5fIHBhdGggZnVuY3MgYmFjayB0byBjeWd3aW4zMl8uCgpNb24gTm92IDIzIDE2OjQwOjAwIDE5OTggIFVscmljaCBEcmVwcGVyICA8ZHJlcHBlckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgZ3JhcGguby4KCShncmFwaC5vKTogTmV3IGRlcGVuZGVuY3kgbGlzdC4KCSogZmxhZ3MuaDogRGVjbGFyZSBkdW1wX2Zvcl9ncmFwaCBhbmQgZGVmaW5lIGdyYXBoX2R1bXBfdHlwZXMgdHlwZS4KCSogcHJpbnQtcnRsLmMgKGR1bXBfZm9yX2dyYXBoKTogRGVmaW5lIG5ldyB2YXJpYWJsZS4KCShwcmludF9ydHgpOiBSZXdyaXRlIHRvIGFsbG93IHVzZSBpbiBncmFwaCBkdW1waW5nIGZ1bmN0aW9ucy4KCSogdG9wbGV2LmM6IERlY2xhcmUgcHJpbnRfcnRsX2dyYXBoX3dpdGhfYmIsIGNsZWFuX2dyYXBoX2R1bXBfZmlsZSwKCWZpbmlzaF9ncmFwaF9kdW1wX2ZpbGUuCglEZWZpbmUgZ3JhcGhfZHVtcF9mb3JtYXQuCgkoY29tcGlsZV9maWxlKTogSWYgZ3JhcGggZHVtcGluZyBpcyBlbmFibGVkIGFsc28gY2xlYXIgdGhlc2UgZmlsZXMuCglGaW5pc2ggZ3JhcGggZHVtcCBmaWxlcy4KCShyZXN0X29mX2NvbXBpbGF0aW9uKTogQWxzbyBkdW1wIGdyYXBoIGluZm9ybWF0aW9uIGlmIGVuYWJsZWQuCgkobWFpbik6IFJlY29nbml6ZSAtZHYgdG8gZW5hYmxlZCBWQ0cgYmFzZWQgZ3JhcGggZHVtcGluZy4KCSogZ3JhcGguYzogTmV3IGZpbGUuICBHcmFwaCBkdW1waW5nIGZ1bmN0aW9ucy4KCk1vbiBOb3YgMjMgMTY6Mzk6MDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogTG9vayBmb3IgPHN5cy9zdGF0Lmg+LgoJKiBzeXN0ZW0uaDogSW5jbHVkZSBpdCBiZWZvcmUgc3Vic3RpdHV0ZSBTX0lTUkVHIGRlZmluaXRpb25zLgoKTW9uIE5vdiAyMyAxNzo0MDozNyAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL2FiaS5oOiBVc2UgQUJJX082NCwgZHVwbGljYXRpbmcgQUJJXzMyIHVzYWdlLgoJKiBjb25maWcvbWlwcy9pcmlzNi5oOiBTYW1lLgoJKiBjb25maWcvbWlwcy9taXBzLm1kOiBTYW1lLgoJKiBjb25maWcvbWlwcy9taXBzLmM6IFNhbWU7IGFsc28gYWRkICItbWFiaT1vNjQiIG9wdGlvbi4KCSogY29uZmlnL21pcHMvbWlwcy5oOiBTYW1lOyBhbHNvIGRlZmluZSBBQklfTzY0LgoKTW9uIE5vdiAyMyAxNzowMjoyNyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiAgY29uZmlndXJlLmluOiBVc2UgQUNfUFJFUkVRKDIuMTIuMSkuCgpNb24gTm92IDIzIDEwOjE2OjM4IDE5OTggIE1lbGlzc2EgTydOZWlsbCAgPG9uZWlsbEBjcy5zZnUuY2E+CgoJKiBjY2NwLmMgKFNfSVNSRUcsIFNfSVNESVIpOiBEZWxldGUgZGVmaW5lcy4KCSogY3BwbGliLmMsIGdjYy5jOiBMaWtld2lzZS4KCSogc3lzdGVtLmggKFNfSVNSRUcsIFNfSVNESVIpOiBEZWZpbmUgaWYgbm90IGFscmVhZHkgZGVmaW5lZC4KCk1vbiBOb3YgMjMgMDk6NTM6NDQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGxvY2FsLWFsbG9jLmMgKGxvY2FsX2FsbG9jKTogVXNlIG1hbGxvYyBub3QgYWxsb2NhIGZvcgoJcmVnX3F0eSwgcmVnX29mZnNldCwgcmVmX25leHRfaW5fcXR5LgoKTW9uIE5vdiAyMyAxNjo0Njo0NiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY2FsbGVyLXNhdmUuYyAoaW5zZXJ0X29uZV9pbnNuKTogSW5pdGlhbGl6ZSB0aGUgbGl2ZV9iZWZvcmUgYW5kCglsaXZlX2FmdGVyIHJlZ2lzdGVyIHNldHMuCgoJQWRkIFNINCBzdXBwb3J0OgoKCSogY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gKF9fX21vdnN0cl9pNF9ldmVuLCBfX19tb3ZzdHJfaTRfb2RkKTogRGVmaW5lLgoJKF9fX21vdnN0clNJMTJfaTQsIF9fX3NkaXZzaTNfaTQsIF9fX3VkaXZzaTNfaTQpOiBEZWZpbmUuCgkqIHNoLmMgKHJlZ19jbGFzc19mcm9tX2xldHRlciwgcmVnbm9fcmVnX2NsYXNzKTogQWRkIERGX1JFR1MuCgkoZnBfcmVnX25hbWVzLCBhc3NlbWJsZXJfZGlhbGVjdCk6IE5ldyB2YXJpYWJsZXMuCgkocHJpbnRfb3BlcmFuZF9hZGRyZXNzKTogSGFuZGxlIFNVQlJFR3MuCgkocHJpbnRfb3BlcmFuZCk6IEFkZGVkICdvJyBjYXNlLgoJRG9uJ3QgdXNlIGFkal9vZmZzZXR0YWJsZV9vcGVyYW5kIG9uIFBSRV9ERUMgLyBQT1NUX0lOQy4KCU5hbWUgb2YgRlAgcmVnaXN0ZXJzIGRlcGVuZHMgb24gbW9kZS4KCShleHBhbmRfYmxvY2tfbW92ZSk6IEVtaXQgZGlmZmVyZW50IGNvZGUgZm9yIFNINCBoYXJkd2FyZS4KCShwcmVwYXJlX3NjY19vcGVyYW5kcyk6IFVzZSBlbWl0X3NmX2luc24gLyBlbWl0X2RmX2luc24gYXMgYXBwcm9wcmlhdGUuCgkoZnJvbV9jb21wYXJlKTogTGlrZXdpc2UuCgkoYWRkX2NvbnN0YW50KTogTmV3IGFyZ3VtZW50IGxhc3RfdmFsdWUuICBDaGFuZ2VkIGFsbCBjYWxsZXJzLgoJKGZpbmRfYmFycmllcik6IERvbid0IHRyeSBISW1vZGUgbG9hZCBmb3IgRlBVTF9SRUcuCgkobWFjaGluZV9kZXBlbmRlbnRfcmVvcmcpOiBMaWtld2lzZS4KCShzZnVuY191c2VzX3JlZyk6IEEgQ0xPQkJFUiBjYW5ub3QgYmUgdGhlIGFkZHJlc3MgcmVnaXN0ZXIgdXNlLgoJKGdlbl9mYXJfYnJhbmNoKTogRW1pdCBhIGJhcnJpZXIgYWZ0ZXIgdGhlIG5ldyBqdW1wLgoJKGJhcnJpZXJfYWxpZ24pOiBEb24ndCB0cnVzdCBpbnN0cnVjdGlvbiBsZW5ndGhzIGJlZm9yZQoJZml4aW5nIHVwIHBjbG9hZHMuCgkobWFjaGluZV9kZXBlbmRlbnRfcmVvcmcpOiBBZGQgc3VwcG9ydCBmb3IgRklSU1RfWERfUkVHIC4uIExBU1RfWERfUkVHLgoJVXNlIGF1dG8taW5jIGFkZHJlc3NpbmcgZm9yIGZwIHJlZ2lzdGVycyBpZiBkb3VibGVzIG5lZWQgdG8KCWJlIGxvYWRlZCBpbiB0d28gc3RlcHMuCglTZXQgc2hfZmxhZ19yZW1vdmVfZGVhZF9iZWZvcmVfY3NlLgoJKHB1c2gpOiBTdXBwb3J0IGZvciBUQVJHRVRfRk1PVkQuICBVc2UgZ2VuX3B1c2hfZnB1bCBmb3IgZnB1bC4KCShwb3ApOiBTdXBwb3J0IGZvciBUQVJHRVRfRk1PVkQuICBVc2UgZ2VuX3BvcF9mcHVsIGZvciBmcHVsLgoJKGNhbGNfbGl2ZV9yZWdzKTogU3VwcG9ydCBmb3IgVEFSR0VUX0ZNT1ZELiAgRG9uJ3Qgc2F2ZSBGUFNDUi4KCVN1cHBvcnQgZm9yIEZJUlNUX1hEX1JFRyAuLiBMQVNUX1hEX1JFRy4KCShzaF9leHBhbmRfcHJvbG9ndWUpOiBTdXBwb3J0IGZvciBGSVJTVF9YRF9SRUcgLi4gTEFTVF9YRF9SRUcuCgkoc2hfZXhwYW5kX2VwaWxvZ3VlKTogTGlrZXdpc2UuCgkoc2hfYnVpbHRpbl9zYXZlcmVncyk6IFVzZSBERm1vZGUgbW92ZXMgZm9yIGZwIHJlZ3Mgb24gU0g0LgoJKGluaXRpYWxfZWxpbWluYXRpb25fb2Zmc2V0KTogVGFrZSBUQVJHRVRfQUxJR05fRE9VQkxFIGludG8gYWNjb3VudC4KCShhcml0aF9yZWdfb3BlcmFuZCk6IEZQVUxfUkVHIGlzIE9LIGZvciBTSDQuCgkoZnBfYXJpdGhfcmVnX29wZXJhbmQsIGZwX2V4dGVuZGVkX29wZXJhbmQpOiBOZXcgZnVuY3Rpb25zLgoJKHRlcnRpYXJ5X3JlbG9hZF9vcGVyYW5kLCBmcHNjcl9vcGVyYW5kKTogTGlrZXdpc2UuCgkoY29tbXV0YXRpdmVfZmxvYXRfb3BlcmF0b3IsIG5vbmNvbW11dGF0aXZlX2Zsb2F0X29wZXJhdG9yKTogTGlrZXdpc2UuCgkoYmluYXJ5X2Zsb2F0X29wZXJhdG9yLCBnZXRfZnBzY3JfcnR4LCBlbWl0X3NmX2luc24pOiBMaWtld2lzZS4KCShlbWl0X2RmX2luc24sIGV4cGFuZF9zZl91bm9wLCBleHBhbmRfc2ZfYmlub3ApOiBMaWtld2lzZS4KCShleHBhbmRfZGZfdW5vcCwgZXhwYW5kX2RmX2Jpbm9wLCBleHBhbmRfZnBfYnJhbmNoKTogTGlrZXdpc2UuCgkoZW1pdF9mcHNjcl91c2UsIG1hcmtfdXNlLCByZW1vdmVfZGVhZF9iZWZvcmVfY3NlKTogTGlrZXdpc2UuCgkqIHNoLmggKENQUF9TUEVDKTogQWRkIHN1cHBvcnQgZm9yIC1tNCwgbTQtc2luZ2xlLCBtNC1zaW5nbGUtb25seS4KCShDT05ESVRJT05BTF9SRUdJU1RFUl9VU0FHRSk6IExpa2V3aXNlLgoJKEhBUkRfU0g0X0JJVCwgRlBVX1NJTkdMRV9CSVQsIFNINF9CSVQsIEZNT1ZEX0JJVCk6IERlZmluZS4KCShUQVJHRVRfQ0FDSEUzMiwgVEFSR0VUX1NVUEVSU0NBTEFSLCBUQVJHRVRfSEFSV0FSRCk6IERlZmluZS4KCShUQVJHRVRfSEFSRF9TSDQsIFRBUkdFVF9GUFVfU0lOR0xFLCBUQVJHRVRfU0g0LCBUQVJHRVRfRk1PVkQpOiBEZWZpbmUuCgkodGFyZ2V0X2ZsYWcpOiBBZGQgLW00LCBtNC1zaW5nbGUsIG00LXNpbmdsZS1vbmx5LCAtbWZtb3ZkLgoJKE9QVElNSVpBVElPTl9PUFRJT05TKTogSWYgb3B0aW1pemluZywgc2V0IGZsYWdfb21pdF9mcmFtZV9wb2ludGVyCgl0byAtMSBhbmQgc2hfZmxhZ19yZW1vdmVfZGVhZF9iZWZvcmVfY3NlIHRvIDEuCgkoQVNTRU1CTEVSX0RJQUxFQ1QpOiBEZWZpbmUgdG8gYXNzZW1ibGVyX2RpYWxlY3QuCgkoYXNzZW1ibGVyX2RpYWxlY3QsIGZwX3JlZ19uYW1lcyk6IERlY2xhcmUuCgkoT1ZFUlJJREVfT1BUSU9OUyk6IEFkZCBjb2RlIGZvciBUQVJHRVRfU0g0LgoJSGlkZSBuYW1lcyBvZiByZWdpc3RlcnMgdGhhdCBhcmUgbm90IGFjY2Vzc2libGUuCgkoQ0FDSEVfTE9HKTogVGFrZSBUQVJHRVRfQ0FDSEUzMiBpbnRvIGFjY291bnQuCgkoTE9PUF9BTElHTik6IFRha2UgVEFSR0VUX0hBUldBUkQgaW50byBhY2NvdW50LgoJKEZJUlNUX1hEX1JFRywgTEFTVF9YRF9SRUcsIEZQU0NSX1JFRyk6IERlZmluZS4KCShGSVJTVF9QU0VVRE9fUkVHSVNURVI6IE5vdyA0OS4KCShGSVhFRF9SRUdJU1RFUlMsIENBTExfVVNFRF9SRUdJU1RFUlMpOiBJbmNsdWRlIHZhbHVlcyBmb3IgcmVnaXN0ZXJzLgoJKEhBUkRfUkVHTk9fTlJFR1MpOiBTcGVjaWFsIHRyZWF0bWVudCBvZiBGSVJTVF9YRF9SRUcgLi4gTEFTVF9YRF9SRUcuCgkoSEFSRF9SRUdOT19NT0RFX09LKTogVXBkYXRlLgoJKGVudW0gcmVnX2NsYXNzKTogQWRkIERGX1JFR1MgYW5kIEZQU0NSX1JFR1MuCgkoUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMsIFJFR19BTExPQ19PUkRFUik6IExpa2V3aXNlLgoJKFNFQ09OREFSWV9PVVRQVVRfUkVMT0FEX0NMQVNTLCBTRUNPTkRBUllfSU5QVVRfUkVMT0FEX0NMQVNTKTogVXBkYXRlLgoJKENMQVNTX0NBTk5PVF9DSEFOR0VfU0laRSwgREVCVUdfUkVHSVNURVJfTkFNRVMpOiBEZWZpbmUuCgkoTlBBUk1fUkVHUyk6IEVpZ2h0IGZsb2F0aW5nIHBvaW50IHBhcmFtZXRlciByZWdpc3RlcnMgb24gU0g0LgoJKEJBU0VfUkVUVVJOX1ZBTFVFX1JFRyk6IFNINCBhbHNvIHBhc3NlcyBkb3VibGUgdmFsdWVzCglpbiBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCgkoR0VUX1NIX0FSR19DTEFTUyk6IExpa2V3aXNlLgoJQ29tcGxleCBmbG9hdCB0eXBlcyBhcmUgYWxzbyByZXR1cm5lZCBpbiBmbG9hdCByZWdpc3RlcnMuCgkoQkFTRV9BUkdfUkVHKTogQ29tcGxleCBmbG9hdCB0eXBlcyBhcmUgYWxzbyBwYXNzZXMgaW4gZmxvYXQgcmVnaXN0ZXJzLgoJKEZVTkNUSU9OX1ZBTFVFKTogQ2hhbmdlIG1vZGUgbGlrZSBQUk9NT1RFX01PREUgZG9lcy4KCShMSUJDQUxMX1ZBTFVFKTogUmVtb3ZlIHRyYWlsaW5nIHNlbWljb2xvbi4KCShST1VORF9SRUcpOiBSb3VuZCB3aGVuIGRvdWJsZSBwcmVjaXNpb24gdmFsdWUgaXMgcGFzc2VkIGluIGZsb2F0aW5nCglwb2ludCByZWdpc3RlcihzKS4KCShGVU5DVElPTl9BUkdfQURWQU5DRSk6IE5vIGNoYW5nZSB3YW50ZWQgZm9yIFNINCB3aGVuIHRoaW5ncyBhcmUKCXBhc3NlZCBvbiB0aGUgc3RhY2suCgkoRlVOQ1RJT05fQVJHKTogTGl0dGxlIGVuZGlhbiBhZGp1c3RtZW50IGZvciBTSDQgU0Ztb2RlLgoJKEZVTkNUSU9OX0FSR19QQVJUSUFMX05SRUdTKTogWmVybyBmb3IgU0g0LgoJKFRSQU1QT0xJTkVfQUxJR05NRU5UKTogVGFrZSBUQVJHRVRfSEFSV0FSRCBpbnRvIGFjY291bnQuCgkoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogRW1pdCBpY19pbnZhbGlkYXRlX2xpbmUgZm9yIFRBUkdFVF9IQVJXQVJELgoJKE1PREVfRElTUF9PS184KTogTm90IGZvciBTSDQgREZtb2RlLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IE5vIGJhc2UgcmVnICsgaW5kZXggcmVnIGZvciBTSDQgREZtb2RlLgoJQWxsb3cgaW5kZXhlZCBhZGRyZXNzaW5nIGZvciBQU0ltb2RlIGFmdGVyIHJlbG9hZC4KCShMRUdJVElNSVpFX0FERFJFU1MpOiBOb3QgZm9yIFNINCBERm1vZGUuCgkoTEVHSVRJTUlaRV9SRUxPQURfQUREUkVTUyk6IEhhbmRsZSBTSDNFIFNGbW9kZS4KCURvbid0IGNoYW5nZSBTSDQgREZtb2RlIG5vciBQU0ltb2RlIFJFTE9BRF9GT1JfSU5QVVRfQUREUkVTUy4KCShET1VCTEVfVFlQRV9TSVpFKTogNjQgZm9yIFNINC4KCShSVFhfQ09TVFMpOiBBZGQgUExVUyBjYXNlLgoJSW5jcmVhc2UgY29zdCBvZiBBU0hJRlQsIEFTSElGVFJULCBMU0hJRlRSVCBjYXNlLgoJKFJFR0lTVEVSX01PVkVfQ09TVCk6IEFkZCBoYW5kbGluZyBvZiBSMF9SRUdTLCBGUFVMX1JFR1MsIFRfUkVHUywKCU1BQ19SRUdTLCBQUl9SRUdTLCBERl9SRUdTLgoJKFJFR0lTVEVSX05BTUVTKTogVXNlIGZwX3JlZ19uYW1lcy4KCShlbnVtIHByb2Nlc3Nvcl90eXBlKTogQWRkIFBST0NFU1NPUl9TSDQuCgkoc2hfZmxhZ19yZW1vdmVfZGVhZF9iZWZvcmVfY3NlKTogRGVjbGFyZS4KCShydHhfZXF1YWxfZnVuY3Rpb25fdmFsdWVfbWF0dGVycywgZnBzY3JfcnR4LCBnZXRfZnBzY3JfcnR4KTogRGVjbGFyZS4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgYmluYXJ5X2Zsb2F0X29wZXJhdG9yLAoJY29tbXV0YXRpdmVfZmxvYXRfb3BlcmF0b3IsIGZwX2FyaXRoX3JlZ19vcGVyYW5kLCBmcF9leHRlbmRlZF9vcGVyYW5kLAoJZnBzY3Jfb3BlcmFuZCwgbm9uY29tbXV0YXRpdmVfZmxvYXRfb3BlcmF0b3IuCgkoQURKVVNUX0NPU1QpOiBVc2UgZGlmZmVyZW50IHNjYWxlIGZvciBUQVJHRVRfU1VQRVJTQ0FMQVIuCgkoU0hfRFlOQU1JQ19TSElGVF9DT1NUKTogQ2hlYXBlciBmb3IgU0g0LgoJKiBzaC5tZCAoYXR0cmlidXRlIGNwdSk6IEFkZCB2YWx1ZSBzaDQuCgkoYXR0cmJ1dGVzIGZtb3ZkLCBpc3N1ZXMpOiBEZWZpbmUuCgkoYXR0cmlidXRlIHR5cGUpOiBBZGQgdmFsdWVzIGRmcF9hcml0aCwgZGZwX2NtcCwgZGZwX2NvbnYsIGRmZGl2LgoJKGZ1bmN0aW9uIHVuaXRzIG1lbW9yeSwgaW50LCBtcHksIGZwKTogTWFrZSBkZXBlbmRlbnQgb24gaXNzdWUgcmF0ZS4KCShmdW5jdGlvbiB1bml0cyBpc3N1ZSwgc2luZ2xlX2lzc3VlLCBsb2FkX3NpLCBsb2FkKTogRGVmaW5lLgoJKGZ1bmN0aW9uIHVuaXRzIGxvYWRfc3RvcmUsIGZkaXYsIGdwX2ZwdWwpOiBEZWZpbmUuCgkoYXR0cmlidXRlIGhpdF9zdGFjayk6IFByb3ZpZGUgcHJvcGVyIGRlZmF1bHQuCgkodXNlX3NmdW5jX2FkZHIrMSwgdWRpdnNpMyk6IFByZWRpY2F0ZWQgb24gISBUQVJHRVRfU0g0LgoJKHVkaXZzaTNfaTQsIHVkaXZzaTNfaTRfc2luZ2xlLCBkaXZzaTNfaTQsIGRpdnNpM19pNF9zaW5nbGUpOiBOZXcgaW5zbnMuCgkodWRpdnNpMywgZGl2c2kzKTogRW1pdCBzcGVjaWFsIHBhdHRlcm5zIGZvciBTSDQgaGFyZHdhcmUsCgkobXVsc2kzX2NhbGwpOiBOb3cgdXNlcyBtYXRjaF9vcGVyYW5kIGZvciBmdW5jdGlvbiBhZGRyZXNzLgoJKG11bHNpMyk6IEFsc28gZW1pdCBjb2RlIGZvciBTSDEgY2FzZS4gIFdyYXAgcmVzdWx0IGluIFJFR19MSUJDQUxMIC8KCVJFR19SRVRWQUwgbm90ZXMuCgkocHVzaCwgcG9wLCBwdXNoX2UsIHBvcF9lKTogTm93IGRlZmluZV9leHBhbmRzLgoJKHB1c2hfZnB1bCwgcHVzaF80LCBwb3BfZnB1bCwgcG9wXzQsIGljX2ludmFsaWRhdGVfbGluZSk6IE5ldyBleHBhbmRlcnMuCgkobW92c2lfaWUpOiBBZGRlZCB5L2kgYWx0ZXJuYXRpdmUuCgkoaWNfaW52YWxpZGF0ZV9saW5lX2ksIG1vdmRmX2k0KTogTmV3IGluc25zLgoJKG1vdmRmX2k0K1sxMjNdLCByZWxvYWRfb3V0ZGYrWzEyMzQ1XSwgbW92c2lfeStbMTJdKTogTmV3IHNwbGl0dGVycy4KCShyZWxvYWRfaW5kZiwgcmVsb2FkX291dGRmLCByZWxvYWRfb3V0c2YsIHJlbG9hZF9pbnNpKTogTmV3IGV4cGFuZGVycy4KCShtb3ZkZik6IEFkZCBzcGVjaWFsIGNvZGUgZm9yIFNINC4KCShtb3ZzZl9pZSwgbW92c2ZfaWUrMSwgcmVsb2FkX2luc2YsIGNhbGxpKTogTWFrZSB1c2Ugb2YgZnBzY3IgdmlzaWJsZS4KCShjYWxsX3ZhbHVlaSwgY2FsbGksIGNhbGxfdmFsdWUpOiBMaWtld2lzZS4KCShtb3ZzZik6IEVtaXQgbm8tb3AgbW92ZS4KCShtb3Zfbm9wLCBtb3ZzaV95KTogTmV3IGluc25zLgoJKGJsdCwgc2dlKTogR2VuZXJhbGl6ZSB0byBoYW5kbGUgREZtb2RlLgoJKHJldHVybiBwcmVkaWNhdGUpOiBDYWxsIGVtaXRfZnBzY3JfdXNlIGFuZCByZW1vdmVfZGVhZF9iZWZvcmVfY3NlLgoJKGJsb2NrX21vdmVfcmVhbCwgYmxvY2tfbHVtcF9yZWFsKTogUHJlZGljYXRlIG9uICEgVEFSR0VUX0hBUkRfU0g0LgoJKGJsb2NrX21vdmVfcmVhbF9pNCwgYmxvY2tfbHVtcF9yZWFsX2k0LCBmcHVfc3dpdGNoKTogTmV3IGluc25zLgoJKGZwdV9zd2l0Y2gwLCBmcHVfc3dpdGNoMSwgbW92cHNpKTogTmV3IGV4cGFuZGVycy4KCShmcHVfc3dpdGNoK1sxMl0sIGZpeF90cnVuY3Nmc2kyX2k0XzIrMSk6IE5ldyBzcGxpdHRlcnMuCgkodG9nZ2xlX3N6KTogTmV3IGluc24uCgkoYWRkc2YzLCBzdWJzZjMsIG11bHNmMywgZGl2c2YzKTogTm93IGRlZmluZV9leHBhbmRzLgoJKGFkZHNmM19pLCBzdWJzZjNfaSwgbXVsc2YzX2k0LCBtdWxzZjNfaWUsIGRpdnNmM19pKTogTmV3IGluc25zLgoJKG1hY3NmMyk6IE1ha2UgdXNlIG9mIGZwc2NyIHZpc2libGUuICBEaXNhYmxlIGZvciBTSDQuCgkoZmxvYXRzaXNmMik6IE1ha2UgdXNlIG9mIGZwc2NyIHZpc2libGUuCgkoZmxvYXRzaXNmMl9pNCk6IE5ldyBpbnNuLgoJKGZsb2F0c2lzZjJfaWUsIGZpeHNmc2ksIGNtcGd0c2ZfdCwgY21wZXFzZl90KTogRGlzYWJsZSBmb3IgU0g0LgoJKGllZWVfY2NtcGVxc2ZfdCk6IExpa2V3aXNlLgoJKGZpeF90cnVuY3Nmc2kyKTogRW1pdCBkaWZmZXJlbnQgY29kZSBmb3IgU0g0LgoJKGZpeF90cnVuY3Nmc2kyX2k0LCBmaXhfdHJ1bmNzZnNpMl9pNF8yLCBjbXBndHNmX3RfaTQpOiBOZXcgaW5zbnMuCgkoY21wZXFzZl90X2k0LCBpZWVlX2NjbXBlcXNmX3RfNCk6IE5ldyBpbnNucy4KCShuZWdzZjIsIHNxcnRzZjIsIGFic3NmMik6IE5vdyBleHBhbmRlcnMuCgkoYWRkZGYzLCBzdWJkZjNpLCBtdWxkZjIsIGRpdmRmMywgZmxvYXRzaWRmMik6IE5ldyBleHBhbmRlcnMuCgkobmVnc2YyX2ksIHNxcnRzZjJfaSwgYWJzc2YyX2ksIGFkZGRmM19pLCBzdWJkZjNfaSk6IE5ldyBpbnNucy4KCShtdWxkZjNfaSwgZGl2ZGYzX2ksIGZsb2F0c2lkZjJfaSwgZml4X3RydW5jZGZzaTJfaSk6IE5ldyBpbnNucy4KCShmaXhfdHJ1bmNkZnNpMiwgY21wZGYsIG5lZ2RmMiwgc3FydGRmMiwgYWJzZGYyKTogTmV3IGV4cGFuZGVycy4KCShmaXhfdHJ1bmNkZnNpMl9pNCwgY21wZ3RkZl90LCBjbXBlcWRmX3QsIGllZWVfY2NtcGVxZGZfdCk6IE5ldyBpbnNucy4KCShmaXhfdHJ1bmNkZnNpMl9pNF8yKzEpOiBOZXcgc3BsaXR0ZXJzLgoJKG5lZ2RmMl9pLCBzcXJ0ZGYyX2ksIGFic2RmMl9pLCBleHRlbmRzZmRmMl9pNCk6IE5ldyBpbnNucy4KCShleHRlbmRzZmRmMiwgdHJ1bmNkZnNmMik6IE5ldyBleHBhbmRlcnMuCgkodHJ1bmNkZnNmMl9pNCk6IE5ldyBpbnNuLgoJKiB0LXNoIChMSUIxQVNNRlVOQ1MpOiBBZGQgX21vdnN0cl9pNCwgX3NkaXZzaTNfaTQsIF91ZGl2c2kzX2k0LgoJKE1VTFRJTElCX09QVElPTlMpOiBBZGQgbTQtc2luZ2xlLW9ubHkvbTQtc2luZ2xlL200LgoJKiBmbG9hdC1zaC5oOiBXaGVuIHRlc3RpbmcgZm9yIF9fU0gzRV9fLCBhbHNvIHRlc3QgZm9yCglfX1NINF9TSU5HTEVfT05MWV9fIC4KCSogdmEtc2guaCAoX192YV9mcmVnKTogRGVmaW5lIHRvIGZsb2F0LgoJKF9fdmFfZ3JlZywgX19mYV9mcmVnLCBfX2dudWNfdmFfbGlzdCwgdmFfc3RhcnQpOgoJRGVmaW5lIGZvciBfX1NINF9TSU5HTEVfT05MWV9fIGxpa2UgZm9yIF9fU0gzRV9fIC4KCShfX1BBU1NfQVNfRkxPQVQsIF9fVEFSR0VUX1NINF9QKTogTGlrZXdpc2UuCgkoX19QQVNTX0FTX0ZMT0FUKTogVXNlIGRpZmZlcmVudCBkZWZpbml0aW9uIGZvciBfX1NINF9fIGFuZAoJIF9fU0g0X1NJTkdMRV9fLgoJKFRBUkdFVF9TSDRfUCk6IERlZmluZS4KCSh2YV9hcmcpOiBVc2UgaXQuCgoJKiBzaC5tZCAobW92ZGZfaywgbW92c2ZfaSk6IFR3ZWFrIHRoZSBjb25kaXRpb24gc28gdGhhdAoJaW5pdF9leHByX29uY2UgaXMgc2F0aXNmaWVkIGFib3V0IHRoZSBleGlzdGVuY2Ugb2YgbG9hZCAvIHN0b3JlIGluc25zLgoKCSogc2gubWQgKG1vdnNpX2ksIG1vdnNpX2llLCBtb3ZzaV9pX2xvd3BhcnQsIG1vdnNmX2ksIG1vdnNmX2llKToKCUNoYW5nZSBtIGNvbnN0cmFpbnQgaW4gc291cmNlIG9wZXJhbmQgdG8gbXIgLyBtZi4KCgkqIHZhLXNoLmggKF9fdmFfYXJnX3NoMSk6IFVzZSBfX2FzbSBpbnN0ZWFkIG9mIGFzbS4KCgkqIChfX1ZBX1JFRUYpOiBEZWZpbmUuCgkoX192YV9hcmdfc2gxKTogVXNlIGl0LgoKCSogdmEtc2guaCAodmFfc3RhcnQsIHZhX2FyZywgdmFfY29weSk6IEFkZCBwYXJlbnRoZXNlcy4KClN1biBOb3YgMjIgMjE6MzQ6MDIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni9kZ3V4LmMgKHN0cnVjdCBvcHRpb24pOiBBZGQgbmV3ICJkZXNjcmlwdGlvbiBmaWVsZCIuCgkqIG04OGsvbTg4ay5jIChzdHJ1Y3Qgb3B0aW9uKTogTGlrZXdpc2UuCgpTdW4gTm92IDIyIDE2OjA3OjU3IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIE5vdiAyMiAxMzo0MDowMiAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWdtb3ZlLmMgKHJlZ21vdmVfcHJvZml0YWJsZV9wKTogVXNlIHJldHVybiB2YWx1ZSBvZiBmaW5kX21hdGNoZXMKCXByb3Blcmx5LgoKU3VuIE5vdiAyMiAwMjo0NzozNyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBOb3YgMjEgMjI6MTI6MDkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkMS5jIChlbGltaW5hdGVfcmVncyk6IERvIG5vdCBsb3NlIGlmIGVsaW1pbmF0ZV9yZWdzIGlzIGNhbGxlZAoJd2l0aG91dCByZWxvYWQgaGF2aW5nIGJlZW4gY2FsbGVkIGVhcmxpZXIuCgoJKiB2ODUwLmMgKGVwX21lbW9yeV9vcGVyYW5kKTogT2Zmc2V0cyA8IDAgYXJlIG5vdCB2YWxpZCBmb3IgRVAKCWFkZHJlc3NpbmcgbW9kZXMuCgkodjg1MF9yZW9yZyk6IFNpbWlsYXJseS4KCgkqIGxvb3AuYyAoY2hlY2tfZGJyYV9sb29wKTogQXZvaWQgdXNpbmcgZ2VuX2FkZDJfaW5zbi4KClNhdCBOb3YgMjEgMDI6MTg6MzggMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIGxvb3AuYyAobW92ZV9tb3ZhYmxlcyk6IFN0YXJ0IG9mIGxpYmNhbGwgbWlnaHQgYmUgbmV3IGxvb3Agc3RhcnQuCgpGcmkgTm92IDIwIDEyOjE0OjE2IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGhhc2guYyAoaGFzaF90YWJsZV9pbml0X24pOiBXcmFwIHByb3RvdHlwZSBhcmd1bWVudHMgaW4gUEFSQU1TKCkuCgpGcmkgTm92IDIwIDA4OjM0OjAwIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGZ1bmN0aW9uLmMgKG5vbmxvY2FsX2dvdG9faGFuZGxlcl9zbG90cyk6IFJlbmFtZWQgZnJvbQoJbm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3Q7IG5vdyBhbiBFWFBSX0xJU1QgY2hhaW4uCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvKTogQWRqdXN0IGZvciB0aGlzIGNoYW5nZS4KCShwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogTGlrZXdpc2UuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IExpa2V3aXNlLgoJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTGlrZXdpc2UuCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogTGlrZXdpc2UuCgkqIGV4cGxvdy5jIChhbGxvY2F0ZV9keW5hbWljX3N0YWNrX3NwYWNlKTogTGlrZXdpc2UuCgkqIGV4cHIuaCAobm9ubG9jYWxfZ290b19oYW5kbGVyX3Nsb3RzKTogUmVuYW1lIGl0cyBkZWNsYXJhdGlvbi4KCSogc3RtdC5jIChkZWNsYXJlX25vbmxvY2FsX2xhYmVsKTogTWFrZSBhIG5ldyBoYW5kbGVyIHNsb3QgZm9yIGVhY2gKCWxhYmVsLgoJKGV4cGFuZF9nb3RvKTogV2hlbiBkb2luZyBhIG5vbmxvY2FsIGdvdG8sIGZpbmQgY29ycmVzcG9uZGluZyBoYW5kbGVyCglzbG90IGZvciBpdC4gIERvbid0IHB1dCB0aGUgbGFiZWwgYWRkcmVzcyBpbiB0aGUgc3RhdGljIGNoYWluIHJlZ2lzdGVyLgoJKGV4cGFuZF9lbmRfYmluZGluZ3MpOiBCcmVhayBvdXQgbm9ubG9jYWwgZ290byBoYW5kbGluZyBjb2RlIGludG8KCXRocmVlIG5ldyBmdW5jdGlvbnMuCgkoZXhwYW5kX25sX2hhbmRsZXJfbGFiZWwsIGV4cGFuZF9ubF9nb3RvX3JlY2VpdmVyLAoJZXhwYW5kX25sX2dvdG9fcmVjZWl2ZXJzKTogTmV3IHN0YXRpYyBmdW5jdGlvbnMsIGJyb2tlbiBvdXQgb2YKCWV4cGFuZF9lbmRfYmluZGluZ3MgYW5kIGFkYXB0ZWQgdG8gY3JlYXRlIG9uZSBoYW5kbGVyIHBlciBub25sb2NhbAoJbGFiZWwuCgkqIGZ1bmN0aW9uLmMgKGRlbGV0ZV9oYW5kbGVycyk6IERlbGV0ZSBpbnNuIGlmIGl0IHJlZmVyZW5jZXMgYW55IG9mCgl0aGUgbm9ubG9jYWwgZ290byBoYW5kbGVyIHNsb3RzLgoJKiBpOTYwLm1kIChub25sb2NhbF9nb3RvKTogQ29tbWVudCBvdXQgY29kZSB0aGF0IG1vZGlmaWVzCglzdGF0aWNfY2hhaW5fcnR4LgoJKiBzcGFyYy5tZCAobm9ubG9jYWxfZ290byk6IExpa2V3aXNlLgoJKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OSk6IENvbW1lbnQgb3V0LgoJKGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OV9zcDY0KTogQ29tbWVudCBvdXQuCgpUaHUgTm92IDE5IDIzOjQ0OjM4IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGV4cHIuYyAoU1RBQ0tfQllURVMpOiBEZWxldGUgdW51c2VkIG1hY3JvLgoJKiBjYWxscy5jOiBQcm92aWRlIGRlZmF1bHQgZm9yIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWS4KCShTVEFDS19CWVRFUyk6IFVzZSBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlksIG5vdCBTVEFDS19CT1VOREFSWS4KCShleHBhbmRfY2FsbCk6IExpa2V3aXNlLgoJKGVtaXRfbGlicmFyeV9jYWxsKTogTGlrZXdpc2UuCgkoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYzogUHJvdmlkZSBkZWZhdWx0IGZvciBQUkVGRVJSRURfU1RBQ0tfQk9VTkRBUlkuCgkoU1RBQ0tfQllURVMpOiBVc2UgUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZLCBub3QgU1RBQ0tfQk9VTkRBUlkuCgkqIGV4cGxvdy5jOiBQcm92aWRlIGRlZmF1bHQgZm9yIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWS4KCShyb3VuZF9wdXNoKTogVXNlIFBSRUZFUlJFRF9TVEFDS19CT1VOREFSWSwgbm90IFNUQUNLX0JPVU5EQVJZLgoJKGFsbG9jYXRlX2R5bmFtaWNfc3RhY2tfc3BhY2UpOiBMaWtld2lzZS4KCSogdG0udGV4aSAoUFJFRkVSUkVEX1NUQUNLX0JPVU5EQVJZKTogRG9jdW1lbnQgbmV3IG1hY3JvLgoJKFNUQUNLX0JPVU5EQVJZKTogVXBkYXRlIGRlc2NyaXB0aW9uIHRvIHJlZmxlY3QgdGhlIG5ldyBzaXR1YXRpb24uCgpUaHUgTm92IDE5IDIyOjIwOjUxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlb3JnLmMgKHJlbGF4X2RlbGF5X3Nsb3RzKTogV2hlbiBvcHRpbWl6aW5nIGZvciBjb2RlIHNpemUsIGlmIGEKCXJldHVybiB3aXRoIGEgZmlsbGVkIGRlbGF5IHNsb3QgaXMgZm9sbG93ZWQgYnkgYSByZXR1cm4gd2l0aCBhbgoJdW5maWxsZWQgZGVsYXkgc2xvdCwgZGVsZXRlIHRoZSBmaXJzdCByZXR1cm4gYW5kIHJlZW1pdCB0aGUgaW5zbgoJdGhhdCB3YXMgcHJldmlvdXNseSBpbiBpdHMgZGVsYXkgc2xvdC4KCgkqIGk4NjAuYyAoc2luZ2xlX2luc25fc3JjX3ApOiBBZGQgbWlzc2luZyBwYXJlbnMuCgkqIGdpbmNsdWRlL21hdGgtMzMwMC5oOiBMaWtld2lzZS4KClRodSBOb3YgMTkgMjA6NTU6NTkgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogcmVnY2xhc3MuYyAoaW5pdF9yZWdfc2V0c18xKTogQWRkIHByb3RvdHlwZS4KCShpbml0X3JlZ19tb2Rlcyk6IExpa2V3aXNlLgoKMTk5OC0xMS0xOSAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGMtY29tbW9uLmM6IENoYW5nZSB3YXJuaW5nIG1lc3NhZ2VzIHRvIHNheSBgY29tcGFyaXNvbiBpcwoJYWx3YXlzIHRydWUnIG9yIGBjb21wYXJpc29uIGlzIGFsd2F5cyBmYWxzZScgaW5zdGVhZCBvZiB0aGUKCWNvbmZ1c2luZyBgaXMgYWx3YXlzIDAnLCBgaXMgYWx3YXlzIDEnLgoKVGh1IE5vdiAxOSAxOTowNTo0OSAxOTk4ICBQZXIgQm90aG5lciAgPGJvdGhuZXJAY3lnbnVzLmNvbT4KCgkqIHByaW50LXRyZWUuYyAocHJpbnRfbm9kZSk6IEFmdGVyIHByaW50aW5nIEJMT0NLIG9yIEJJTkRfRVhQUiwKCWJyZWFrIGluc3RlYWQgb2YgcmV0dXJuICh3aGljaCBsb3NlcyBjbG9zaW5nICc+JykuCgpUaHUgTm92IDE5IDE5OjM0OjEzIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYuaCAoTEVHSVRJTUFURV9DT05TVEFOVF9QKTogUmVqZWN0IENPTlNUX0RPVUJMRXMgdGhhdCBhcmUgbm90CglzdGFuZGFyZCAzODcgY29uc3RhbnRzLgoKCSogaTM4Ni5tZCAoanVtcCk6IEV4cGxpY2l0bHkgc2V0ICJtZW1vcnkiIGF0dHJpYnV0ZS4KCShpbmRpcmVjdF9qdW1wLCBwcm9sb2d1ZV9zZXRfc3RhY2tfcHRyKTogTGlrZXdpc2UuCgkocHJvbG9ndWVfZ2V0X3BjX2FuZF9zZXRfZ290LCBwb3ApOiBMaWtld2lzZS4KCShhbGxvY2F0ZV9zdGFja193b3JkZXIsIGJsb2NrYWdlLCByZXR1cm5faW50ZXJuYWwpOiBMaWtld2lzZS4KCShyZXR1cm5fcG9wX2ludGVybmFsLCBub3ApOiBMaWtld2lzZS4KCShlcGlsb2d1ZV9zZXRfc3RhY2tfcHRyLCBsZWF2ZSk6IExpa2V3aXNlLgoKVGh1IE5vdiAxOSAxNTo0Mjo1NCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS9jb2ZmLmg6IFNldCBVU0VSX0xBQkVMX1BSRUZJWCB0byAiXyIuCgpUaHUgTm92IDE5IDIzOjIwOjU5IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9mb3JfdmFsdWVfcCk6CglFYXJseSBhdXRvX2luYyByZWxvYWRzIGRvbid0IGNvbmZsaWN0IHdpdGggb3V0cHV0cy4KClRodSBOb3YgMTkgMTI6NTg6NTUgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlndXJlLmluOiBEb24ndCBkbyBBQ19DSEVDS19IRUFERVJTKHdhaXQuaCBzeXMvd2FpdC5oKS4KCUluc3RlYWQgY2FsbCBBQ19IRUFERVJfU1lTX1dBSVQuCgoJKiBjb2xsZWN0Mi5jOiBEb24ndCBwcm92aWRlIGRlZmF1bHRzIGZvciBzeXMvd2FpdC5oIG1hY3Jvcy4KCSogZ2NjLmM6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jOiBMaWtld2lzZS4gIEFsc28sIGRvbid0IGluY2x1ZGUgc3lzL3dhaXQuaC4KCgkqIHN5c3RlbS5oOiBJbmNsdWRlIHN5cy93YWl0LmggYW5kIHByb3ZpZGUgbWFjcm8gZGVmYXVsdHMuCgoxOTk4LTExLTE5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBNYWtlZmlsZS5pbiAobWFuZGlyKTogU2V0IHRvIEBtYW5kaXJALgoJKG1hbjFkaXIpOiBOZXcgdmFyaWFibGUgdG8gaG9sZCB0aGUgZm9ybWVyIHZhbHVlIG9mICQobWFuZGlyKS4KCVJlcGxhY2UgYWxsIHVzZXMgb2YgJChtYW5kaXIpIGJ5ICQobWFuMWRpcikuCgpXZWQgTm92IDE4IDE2OjMxOjI4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzc19wYXJ0KTogSWYgaGF2ZSBhIENPTlNUX0lOVCwgY3JlYXRlCglhIG5ldyBvbmUgYmVmb3JlIHBhc3NpbmcgaXQgdG8gZm9yY2VfY29uc3RfbWVtLgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkc190b3BsZXYpOiBQYXNzICZ4IGluc3RlYWQgb2YgTlVMTF9QVFIgaW4KCWZpbmRfcmVsb2Fkc19hZGRyZXNzIGNhbGwuCgpXZWQgTm92IDE4IDIyOjEzOjAwIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBEb24ndCBnZW5lcmF0ZSBsb2FkLXN0b3JlIHBhaXIKCWlmIFRFTVAgaXMgaWRlbnRpY2FsIChhY2NvcmRpbmcgdG8gPT0pIHdpdGggVEFSR0VULgoKVHVlIE5vdiAxNyAyMjoyNToxNiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChyZWxvYWRfcmVnX2ZyZWVfZm9yX3ZhbHVlX3ApOiBXaGVuIGNvbnNpZGVyZWQgcmVsb2FkCgloYXMgYW4gb3V0cHV0LCBtYXRjaGluZyBpbnB1dHMgYXJlIG5vdCBzdWZmaWNpZW50IHRvIGF2b2lkIGNvbmZsaWN0LgoKVHVlIE5vdiAxNyAxMTo1MToxNiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaGFzaC5oIChoYXNoX3RhYmxlX2tleSk6IE5ldyB0eXBlLgoJKGhhc2hfZW50cnkpOiBDaGFuZ2UgYHN0cmluZycgZmllbGQgdG8gZ2VuZXJpYyBga2V5Jy4KCShoYXNoX3RhYmxlKTogQWRkIGBjb21wJyBhbmQgYGhhc2gnIGZ1bmN0aW9ucy4KCShoYXNoX3RhYmxlX2luaXQpOiBUYWtlIHRoZW0gYXMgaW5wdXQuCgkoaGFzaF90YWJsZV9pbml0X24pOiBMaWtld2lzZS4KCShoYXNoX2xvb2t1cCk6IE1vZGlmeSBmb3IgZ2VuZXJpYyBrZXlzLgoJKGhhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoJKGhhc2hfdHJhdmVyc2UpOiBMaWtld2lzZS4KCShzdHJpbmdfaGFzaCk6IE5ldyBmdW5jdGlvbi4KCShzdHJpbmdfY29tcGFyZSk6IExpa2V3aXNlLgoJKHN0cmluZ19jb3B5KTogTGlrZXdpc2UuCgkqIGhhc2guYyAoaGFzaF90YWJsZV9pbml0X24pOiBNb2RpZnkgZm9yIGdlbmVyaWMga2V5cy4KCShoYXNoX3RhYmxlX2luaXQpOiBMaWtld2lzZS4KCShoYXNoX2xvb2t1cCk6IExpa2V3aXNlLgoJKGhhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoJKGhhc2hfdHJhdmVyc2UpOiBMaWtld2lzZS4KCShzdHJpbmdfaGFzaCk6IFNwbGl0IG91dCBmcm9tIGhhc2hfbG9va3VwLgoJKHN0cmluZ19jb21wYXJlKTogTmV3IGZ1bmN0aW9uLgoJKHN0cmluZ19jb3B5KTogU3BsaXQgb3V0IGZyb20gaGFzaF9sb29rdXAuCgkqIHRsaW5rLmMgKHN5bWJvbF9oYXNoX25ld2Z1bmMpOiBNb2RpZnkgZm9yIG5ldyBpbnRlcmZhY2VzIHRvIGhhc2gKCXRhYmxlcy4KCShzeW1ib2xfaGFzaF9sb29rdXApOiBMaWtld2lzZS4KCShmaWxlX2hhc2hfbmV3ZnVuYyk6IExpa2V3aXNlLgoJKGZpbGVfaGFzaF9sb29rdXApOiBMaWtld2lzZS4KCShkZW1hbmdsZWRfaGFzaF9uZXdmdW5jKTogTGlrZXdpc2UuCgkoZGVtYW5nbGVkX2hhc2hfbG9va3VwKTogTGlrZXdpc2UuCgkodGxpbmtfaW50KTogTGlrZXdpc2UuCgkocmVhZF9yZXBvX2ZpbGUpOiBMaWtld2lzZS4KCShyZWNvbXBpbGVfZmlsZXMpOiBMaWtld2lzZS4KCShkZW1hbmdsZV9uZXdfc3ltYm9scyk6IExpa2V3aXNlLgoJKHNjYW5fbGlua2VyX291dHB1dCk6IExpa2V3aXNlLgoKVHVlIE5vdiAxNyAxNzoxMzo1MyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZmxvdy5jIChpbnNuX2RlYWRfcCk6IE5ldyBhcmd1bWVudCBOT1RFUy4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCgpNb24gTm92IDE2IDE3OjU2OjA3IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChvdXRwdXRfbWlfdGh1bmspOiBJbXByb3ZlIHRlc3QgZm9yIGxvY2FsIGJyYW5jaC4KCk1vbiBOb3YgMTYgMTc6NTY6MDcgMTk5OCAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgoKCSogcnM2MDAwLmMgKG91dHB1dF9taV90aHVuayk6IENvcnJlY3QgdGVzdCBmb3IgYWdncmVnYXRlIHZhbHVlcy4KCk1vbiBOb3YgMTYgMjE6MDI6NTIgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZDEuYyAocmVsb2FkX3JlZ19mcmVlX2JlZm9yZV9wKTogRGVsZXRlLgoJQ2hhbmdlZCBhbGwgY2FsbGVycyB0byB1c2UgcmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wIGluc3RlYWQuCgkocmVsb2FkX3JlZ19mcmVlX2Zvcl92YWx1ZV9wKTogSGFuZGxlIG1vcmUgcmVsb2FkIHR5cGVzLgoJQSBSRUxPQURfRk9SX0lOUFVUIGRvZXNuJ3QgY29uZmxpY3Qgd2l0aCBpdHMKCVJFTE9BRF9GT1JfSU5QVVRfQUREUkVTUyAvIFJFTE9BRF9GT1JfSU5QQUREUl9BRERSRVNTLgoJQWRkIHNwZWNpYWwgY2FzZSBmb3IgT1VUID09IGNvbnN0MF9ydHguCglBZGRlZCBpZ25vcmVfYWRkcmVzc19yZWxvYWRzIGFyZ3VtZW50LiAgQ2hhbmdlZCBhbGwgY2FsbGVycy4KCk1vbiBOb3YgMTYgMDI6MjI6MjkgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IERvbid0IHBlZHdhcm4gYWJvdXQgdW5kZWZpbmVkIHN0YXRpYwoJZnVuY3Rpb25zIGp1c3QgYmVjYXVzZSB3ZSBwYXNzZWQgLVd1bnVzZWQuCgpNb24gTm92IDE2IDA0OjQxOjQxIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IFVuc2hhcmUgcnRsIGNyZWF0ZWQgYnkKCXN0b3JlX2JpdF9maWVsZC4KCk1vbiBOb3YgMTYgMDQ6MjM6MDYgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IERvbid0IGRvIGFueXRoaW5nIGJ1dAoJb3B0aW1pemVfcmVnX2NvcHlbMTIzXSB3aGVuIGZsYWdfcmVnbW92ZSBpcyBub3Qgc2V0LgoKU2F0IE5vdiAxNCAxNTowNTowNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGFkZHNpMywgc3Vic2kzKTogUmV2aXNlIDUgTm92IGNoYW5nZSB0byBzdG9yZSBESW1vZGUKCXZhbHVlIGluIHBhcmFkb3hpY2FsIFNJbW9kZSByZXN1bHQsIHJhdGhlciB0aGFuIHRydW5jYXRpbmcgbWlkcG9pbnQuCgpGcmkgTm92IDEzIDIyOjE5OjIzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChyZWdfbm90X2VsaW1fb3BlcmFuZCk6IE5ldy4KCSogYWxwaGEuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIGl0LgoJKiBhbHBoYS5tZCAoczQ4YWRkcSwgczQ4c3VicSBwYXR0ZXJucyk6IFVzZSBpdCBhcyB0aGUgcHJlZGljYXRlCglmb3IgdGhlIG11bHRpcGxpY2FuZC4KCkZyaSBOb3YgMTMgMjI6NTA6MzcgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLm1kIChtb3ZzZik6IFJlbW92ZSBleHBsaWNpdCBzZWNvbmRhcnktcmVsb2FkLWxpa2UKCWZ1bmN0aW9uYWxpdHkuICBPbmx5IHRydW5jYXRlIFNGbW9kZSBzdG9yZSBpZiBpbiBGUFIuCgkobW92c2Ygc3BsaXR0ZXJzKTogQ29tYmluZSBjb25zdF9kb3VibGUgc3BsaXR0ZXJzLgoJKG1vdnNmX2hhcmRmbG9hdCk6IEFkZCBHUFIgc3VwcG9ydC4KCkZyaSBOb3YgMTMgMTE6MDI6MTEgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBzcGxldC5oIChTVUJUQVJHRVRfT1ZFUlJJREVfT1BUSU9OUyk6IE5ldyB0bwoJZGVwcmVjYXRlIC1tbGl2ZS1nMCBhbmQgLW1icm9rZW4tc2F2ZXJlc3RvcmUuCgkqIHQtc3BsZXQgKE1VTFRJTElCX09QVElPTlMpOiBMaWtld2lzZS4KCgkqIHNwYXJjLmMgKHNwYXJjX2ZsYXRfY29tcHV0ZV9mcmFtZV9zaXplKTogQ29ycmVjdGx5IGNhbGMgYXJnc19zaXplCglpbiBhIGxlYWYgZnVuY3Rpb24uICBDbGFyaWZ5IHRvdGFsX3NpemUvZXh0cmFfc2l6ZSByZWxhdGlvbnNoaXAuCgpUaHUgTm92IDEyIDE5OjIwOjU3IDE5OTggIEdlb2ZmcmV5IE5vZXIgIDxub2VyQGN5Z251cy5jb20+CgoJKiBpMzg2L2N5Z3dpbjMyLmFzbTogRGVsZXRlLgoJKiBpMzg2L2N5Z3dpbi5hc206IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gY3lnd2luMzIuYXNtLgoJKiBpMzg2L2N5Z3dpbjMyLmg6IERlbGV0ZS4KCSogaTM4Ni9jeWd3aW4uaDogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSBjeWd3aW4zMi5oLgoJKiBpMzg2L3QtY3lnd2luMzI6IERlbGV0ZS4KCSogaTM4Ni90LWN5Z3dpbjogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSB0LWN5Z3dpbjMyLiAgSW5jbHVkZQoJY3lnd2luLmFzbSBpbnN0ZWFkIG9mIGN5Z3dpbjMyLmFzbS4gIFJlbW92ZSAiMzIiIGZyb20gY29tbWVudC4KCSogaTM4Ni94LWN5Z3dpbjMyOiBEZWxldGUuCgkqIGkzODYveC1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geC1jeWd3aW4zMi4KCSogaTM4Ni94bS1jeWd3aW4zMjogRGVsZXRlLgoJKiBpMzg2L3htLWN5Z3dpbjogTmV3IGZpbGUsIHJlbmFtZWQgZnJvbSB4bS1jeWd3aW4zMi4gIFVzZSBuZXdseQoJcmVuYW1lZCBjeWd3aW5fIGZ1bmNzIGZvciBwYXRoIHRyYW5zbGF0aW9ucy4KCSogaTM4Ni93aW4zMi5oOiBEZWZpbmUgX19DWUdXSU5fXyB3aGVuIC1tY3lnd2luIGdpdmVuLgoJKiBpMzg2L3dpbm50LmM6IFJlbW92ZSAiMzIiIGZyb20gY29tbWVudCBhYm91dCBjeWd3aW4uCgkqIGkzODYvbWluZ3czMi5oOiBGaXggcmVmZXJlbmNlcyB0byBjeWd3aW4zMi5oIGluIGxpZ2h0IG9mIGFib3ZlLgoJKiByczYwMDAvY3lnd2luMzIuaDogRGVsZXRlLgoJKiByczYwMDAvY3lnd2luLmg6IE5ldyBmaWxlLCByZW5hbWVkIGZyb20gY3lnd2luMzIuaC4gIEFkZAoJLURfX0NZR1dJTl9fIHRvIENQUF9QUkVERUZJTkVTLgoJKiByczYwMDAveC1jeWd3aW4zMjogRGVsZXRlLgoJKiByczYwMDAveC1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geC1jeWd3aW4zMi4KCSogcnM2MDAwL3htLWN5Z3dpbjMyOiBEZWxldGUuCgkqIHJzNjAwMC94bS1jeWd3aW46IE5ldyBmaWxlLCByZW5hbWVkIGZyb20geG0tY3lnd2luMzIuCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBjeWd3aW4qIGluc3RlYWQgb2YgY3lnd2luMzIuICBBY2NvdW50Cglmb3IgdGhlIHJlbmFtZSBvZiBjeWd3aW4tcmVsYXRlZCBjb25maWcgZmlsZXMgdG8gbG9zZSB0aGUgIjMyInMuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KCgkqIGNjY3AuYywgY29sbGVjdDIuYywgZ2NjLmMsIGdldHB3ZC5jLCBsaWJnY2MyLmMsIHByb3RvaXplLmMsCgl0b3BsZXYuYzogQ2hhbmdlIGFsbCByZWZzIHRvIF9fQ1lHV0lOMzJfXyB0byBfX0NZR1dJTl9fLgoKV2VkIE5vdiAxMSAxMjoyNToxOSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoSkFWQUdDKTogTmV3IG1hY3JvLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIC0tZW5hYmxlLWphdmEtZ2MgYXJndW1lbnQuICBTdWJzdAoJYEpBVkFHQycgdmFyaWFibGUuCgpUaHUgTm92IDEyIDAzOjMyOjE2IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJSGFuZGxlIGVxdWl2YWxlbmNlcyB0aGF0IGhhdmUgYmVlbiBvYnNjdXJlZCBieSBnY3NlOgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBIYW5kbGUgZXF1aXZhbGVuY2VzIHNldCB1cCBpbiBtdWx0aXBsZSBwbGFjZXMuCgkqIGxvY2FsLWFsbG9jLmMgKHJlZ19lcXVpdl9pbml0X2luc25zKTogTmV3IHZhcmlhYmxlLgoJKG5vX2VxdWl2KTogTmV3IGZ1bmN0aW9uLgoJKHVwZGF0ZV9lcXVpdl9yZWdzKTogSGFuZGxlIGVxdWl2YWxlbmNlcyBzZXQgdXAgaW4gbXVsdGlwbGUgcGxhY2VzLgoJRG9uJ3QgaWdub3JlIGFuIGluc24ganVzdCBiZWNhdXNlIGl0cyBkZXN0aW5hdGlvbiBpcyBsaWtlbHkgdG8gYmUKCXNwaWxsZWQuCgpXZWQgTm92IDExIDEzOjQ2OjEzIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGV4Y2VwdC5jIChleHBhbmRfZWhfcmV0dXJuKTogUmVhZGQgZm9yY2Vfb3BlcmFuZCBjYWxsIGxvc3QgaW4KCVNlcHQgMTUgY2hhbmdlLgoKVHVlIE5vdiAxMCAxNzowNDoxMSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogQWRkIG1pc3NpbmcgZ290byBvbiBsYXN0IGNhc2UuCgoxOTk4LTExLTA5ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBkYnhvdXQuYzogQ2hlY2sgSEFWRV9TVEFCX0ggaW5zdGVhZCBvZiBIQVZFX1NUQUJTX0guCgpNb24gTm92ICA5IDIwOjE1OjE5IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IEZpeCBlcnJvciBpbiBsYXN0IGNoYW5nZS4KCk1vbiBOb3YgIDkgMTY6Mzc6NTIgMTk5OCAgQW5kcmV3IENhZ25leSAgPGNhZ25leUBiMS5jeWdudXMuY29tPgoKCSogbWlwcy5jIChmdW5jdGlvbl9wcm9sb2d1ZSk6IFdoZW4gVEFSR0VUX01JUFMxNiwgYWRqdXN0IHRoZSByZWdpc3RlcgoJb2Zmc2V0IGluIHRoZSAubWFzayBwc2V1ZG8gdG8gY29tcGVuc2F0ZSBmb3IgZnJhbWUgcG9pbnRlciBhZGp1c3RtZW50cy4KCShtaXBzMTZfZnBfYXJncywgYnVpbGRfbWlwczE2X2NhbGxfc3R1Yik6IEZvciBsaXR0bGUgZW5kaWFuLCBkbyBub3QKCXdvcmQgc3dhcCBhcmd1bWVudHMgbW92ZWQgdG8vZnJvbSBGUCByZWdpc3RlcnMuCgkqIG1pcHMxNi5TIChERlJFVkNNUCk6IFJldmVyc2UgYXJndW1lbnRzIHRvIE9QQ09ERS4KCk1vbiBOb3YgIDkgMDk6NDc6MDYgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gTm92ICA5IDAyOjE0OjE0IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE5vdiAgOSAwMzowNjoyNCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKGRlbGV0ZV9vdXRwdXRfcmVsb2FkX2luc24pOiBJZiBhIHBzZXVkbyBpcyBzZXQgbXVsdGlwbGUKCXRpbWVzLCB0aGVuIGl0IGNhbiBub3QgYmUgY29tcGxldGVseSByZXBsYWNlZC4KCk1vbiBOb3YgIDkgMDA6Mzk6MDIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChjYWxsLCBjYWxsX3ZhbHVlKSBbT1NGXTogQ29ycmVjdCBhbHQgMyBpbnNuIGxlbmd0aC4KClN1biBOb3YgIDggMTc6NTA6MzAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2Fuc2lkZWNsLmg6IFByZXBlbmQgYSAiRyIgdG8gdGhlIG1hY3JvIHdyYXBwaW5nIHRoaXMgZmlsZQoJKHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlIG1hY3JvIHdyYXBwaW5nIGFuc2lkZWNsLmguKQoJSW5jbHVkZSBsaWJpYmVydHkncyBhbnNpZGVjbC5oLiAgUmVtb3ZlIGFsbCByZWR1bmRhbnQgZGVmaW5pdGlvbnMuCglEZWZpbmUgdGhlIFBST1RPKCkgc3R5bGUgbWFjcm9zIGluIHRlcm1zIG9mIHRoZSBQQVJBTVMoKSBvbmVzLgoKCgkqIGNhbGxzLmMgKGVtaXRfbGlicmFyeV9jYWxsKTogU3dpdGNoIG9uIEFOU0lfUFJPVE9UWVBFUywgbm90CglfX1NURENfXywgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSBBTlNJIHZhcmlhYmxlIGFyZ3MuCgkoZW1pdF9saWJyYXJ5X2NhbGxfdmFsdWUpOiBMaWtld2lzZS4KCgkqIGNjY3AuYyAoZXJyb3IpOiBMaWtld2lzZS4KCSh3YXJuaW5nKTogTGlrZXdpc2UuCgkoZXJyb3Jfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkod2FybmluZ193aXRoX2xpbmUpOiBMaWtld2lzZS4KCShwZWR3YXJuKTogTGlrZXdpc2UuCgkocGVkd2Fybl93aXRoX2xpbmUpOiBMaWtld2lzZS4KCShwZWR3YXJuX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBjZXhwLnkgKGVycm9yKTogTGlrZXdpc2UuCgkocGVkd2Fybik6IExpa2V3aXNlLgoJKHdhcm5pbmcpOiBMaWtld2lzZS4KCgkqIGNvbGxlY3QyLmMgKGZhdGFsX3BlcnJvcik6IExpa2V3aXNlLgoJKGZhdGFsKTogTGlrZXdpc2UuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIGNvbWJpbmUuYyAoZ2VuX3J0eF9jb21iaW5lKTogTGlrZXdpc2UuCgoJKiBjcHBlcnJvci5jIChjcHBfbWVzc2FnZSk6IExpa2V3aXNlLgoJKGNwcF9mYXRhbCk6IExpa2V3aXNlLgoKCSogY3BwbGliLmMgKGNwcF9lcnJvcik6IExpa2V3aXNlLgoJKGNwcF93YXJuaW5nKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm4pOiBMaWtld2lzZS4KCShjcHBfZXJyb3Jfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3dhcm5pbmdfd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm5fd2l0aF9saW5lKTogTGlrZXdpc2UuCgkoY3BwX3BlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgoJKiBjcHBsaWIuaDogRG9uJ3QgZGVmaW5lIFBBUkFNUygpIG1hY3JvLgoKCSogZGVtYW5nbGUuaDogTGlrZXdpc2UuCgoJKiBkb3ByaW50LmMgKGNoZWNraXQpOiBTd2l0Y2ggb24gQU5TSV9QUk9UT1RZUEVTLCBub3QgX19TVERDX18sCgl3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gdXNlIEFOU0kgdmFyaWFibGUgYXJncy4KCgkqIGVtaXQtcnRsLmMgKGdlbl9ydHgpOiBMaWtld2lzZS4KCShnZW5fcnR2ZWMpOiBMaWtld2lzZS4KCgkqIGZpbmFsLmMgKGFzbV9mcHJpbnRmKTogTGlrZXdpc2UuCgoJKiBmaXgtaGVhZGVyLmMgKGNwcF9tZXNzYWdlKTogTGlrZXdpc2UuCgkoZmF0YWwpOiBMaWtld2lzZS4KCShjcHBfZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdjYy5jIChjb25jYXQpOiBMaWtld2lzZS4KCShmYXRhbCk6IExpa2V3aXNlLgoJKGVycm9yKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRyLmMgKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRydGFiLmMgKGF0dHJfcnR4KTogTGlrZXdpc2UuCgkoYXR0cl9wcmludGYpOiBMaWtld2lzZS4KCShmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuY29kZXMuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbmNvbmZpZy5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuZW1pdC5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuZXh0cmFjdC5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2VuZmxhZ3MuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbm9waW5pdC5jIChmYXRhbCk6IExpa2V3aXNlLgoKCSogZ2Vub3V0cHV0LmMgKGZhdGFsKTogTGlrZXdpc2UuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIGdlbnBlZXAuYyAoZmF0YWwpOiBMaWtld2lzZS4KCgkqIGdlbnJlY29nLmMgKGZhdGFsKTogTGlrZXdpc2UuCgoJKiBoYWxmcGljLmg6IFN3aXRjaCBvbiBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywgd2hlbgoJZGVjaWRpbmcgd2hldGhlciB0byBkZWNsYXJlIGB0cmVlX25vZGUnIGFuZCBgcnR4X2RlZicuCgoJKiBoYXNoLmg6IERvbid0IGRlZmluZSBzdHVmZiB3ZSBnZXQgZnJvbSBnYW5zaWRlY2wuaC4KCgkqIG1pcHMtdGZpbGUuYzogTGlrZXdpc2UuICBEZWZpbmUgX19wcm90bygpIGluIHRlcm1zIG9mIFBBUkFNUygpLgoJKGZhdGFsKTogU3dpdGNoIG9uIEFOU0lfUFJPVE9UWVBFUywgbm90IF9fU1REQ19fLCB3aGVuIGRlY2lkaW5nCgl3aGV0aGVyIHRvIHVzZSBBTlNJIHZhcmlhYmxlIGFyZ3MuCgkoZXJyb3IpOiBMaWtld2lzZS4KCgkqIHByZWZpeC5jIChjb25jYXQpOiBMaWtld2lzZS4KCgkqIHNjYW4uaDogTGlrZXdpc2UuCgoJKiBzeXN0ZW0uaDogTGlrZXdpc2UuCgoJKiB0b3BsZXYuYyAoZXJyb3Jfd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgkoZXJyb3Jfd2l0aF9kZWNsKTogTGlrZXdpc2UuCgkoZXJyb3JfZm9yX2FzbSk6IExpa2V3aXNlLgoJKGVycm9yKTogTGlrZXdpc2UuCgkoZmF0YWwpOiBMaWtld2lzZS4KCSh3YXJuaW5nX3dpdGhfZmlsZV9hbmRfbGluZSk6IExpa2V3aXNlLgoJKHdhcm5pbmdfd2l0aF9kZWNsKTogTGlrZXdpc2UuCgkod2FybmluZ19mb3JfYXNtKTogTGlrZXdpc2UuCgkod2FybmluZyk6IExpa2V3aXNlLgoJKHBlZHdhcm4pOiBMaWtld2lzZS4KCShwZWR3YXJuX3dpdGhfZGVjbCk6IExpa2V3aXNlLgoJKHBlZHdhcm5fd2l0aF9maWxlX2FuZF9saW5lKTogTGlrZXdpc2UuCgkoc29ycnkpOiBMaWtld2lzZS4KCShyZWFsbHlfc29ycnkpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5oOiBTd2l0Y2ggb24gQU5TSV9QUk9UT1RZUEVTLCBub3QgX19TVERDX18sIHdoZW4gZGVjaWRpbmcKCXdoZXRoZXIgdG8gZGVjbGFyZSBgdHJlZV9ub2RlJyBhbmQgYHJ0eF9kZWYnLgoKCSogdHJlZS5jIChidWlsZCk6IFN3aXRjaCBvbiBBTlNJX1BST1RPVFlQRVMsIG5vdCBfX1NURENfXywgd2hlbgoJZGVjaWRpbmcgd2hldGhlciB0byB1c2UgQU5TSSB2YXJpYWJsZSBhcmdzLgoJKGJ1aWxkX250KTogTGlrZXdpc2UuCgkoYnVpbGRfcGFyc2Vfbm9kZSk6IExpa2V3aXNlLgoKU3VuIE5vdiAgOCAxMzoxMDo1NSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClNhdCBOb3YgIDcgMjM6MzQ6MDEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGxpYmNwcC5hKTogQ2hlY2sgUkFOTElCX1RFU1QgYmVmb3JlIHJ1bmluZyBSQU5MSUIuCgpTYXQgTm92ICA3IDIyOjI2OjE5IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGNvbGxlY3QyLmMgKG1haW4sIGNhc2UgJ2InKTogVXNlIGVsc2UgaWYuCgpTYXQgTm92ICA3IDE1OjM1OjI1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbiAoaG9zdF94bV9maWxlLCBidWlsZF94bV9maWxlLCB4bV9maWxlLCB0bV9maWxlKToKCUFycmFuZ2UgdG8gaW5jbHVkZSBnYW5zaWRlY2wuaCBpbiB7aHR9Y29uZmlnLmggJiB0bS5oIGp1c3QKCWJlZm9yZSB0aGUgY29uZmlnLyBkaXJlY3RvcnkgaGVhZGVycy4KCSh0bV9maWxlX2xpc3QsIGhvc3RfeG1fZmlsZV9saXN0LCBidWlsZF94bV9maWxlX2xpc3QpOiBIYW5kbGUKCWdhbnNpZGVjbC5oIGluIHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KCgkqIE1ha2VmaWxlLmluIChSVExfQkFTRV9IKTogRG9uJ3QgZGVwZW5kIG9uIGdhbnNpZGVjbC5oLgoJKFRSRUVfSCwgREVNQU5HTEVfSCwgUkVDT0dfSCwgUkVHU19ILCBsaWJnY2MyLmEsIHN0bXAtbXVsdGlsaWIsCgltYmNoYXIubywgY29sbGVjdDIubywgcGV4ZWN1dGUubywgdmZwcmludGYubywgc3BsYXktdHJlZS5vLCBnY2MubywKCWdlbmNoZWNrLm8sIGNob29zZS10ZW1wLm8sIG1rc3RlbXAubywgbWtzdGVtcC5vLCBwcmVmaXgubywKCWR5bi1zdHJpbmcubywgY2V4cC5vLCBjY2NwLm8sIGNwcG1haW4ubywgY3BwbGliLm8sIGNwcGVycm9yLm8sCgljcHBleHAubywgY3BwZmlsZXMubywgY3BwaGFzaC5vLCBjcHBhbGxvYy5vLCBzY2FuLWRlY2xzLm8pOgoJTGlrZXdpc2UuCgoJKiBjY2NwLmM6IERvbid0IGluY2x1ZGUgZ2Fuc2lkZWNsLmguCgkqIGNleHAueTogTGlrZXdpc2UuCgkqIGNvbGxlY3QyLmM6IExpa2V3aXNlLgoJKiBjb25maWcvYzR4L2M0eC5jOiBMaWtld2lzZS4KCSogY29uZmlnL3Y4NTAvdjg1MC5oOiBMaWtld2lzZS4KCSogY3BwYWxsb2MuYzogTGlrZXdpc2UuCgkqIGNwcGVycm9yLmM6IExpa2V3aXNlLgoJKiBjcHBleHAuYzogTGlrZXdpc2UuCgkqIGNwcGZpbGVzLmM6IExpa2V3aXNlLgoJKiBjcHBoYXNoLmM6IExpa2V3aXNlLgoJKiBjcHBsaWIuYzogTGlrZXdpc2UuCgkqIGNwcG1haW4uYzogTGlrZXdpc2UuCgkqIGNwcHVscC5jOiBMaWtld2lzZS4KCSogZGVtYW5nbGUuaDogTGlrZXdpc2UuCgkqIGRvcHJpbnQuYzogTGlrZXdpc2UuCgkqIGR5bi1zdHJpbmcuYzogTGlrZXdpc2UuCgkqIGVoLWNvbW1vbi5oOiBMaWtld2lzZS4KCSogZml4LWhlYWRlci5jOiBMaWtld2lzZS4KCSogZnJhbWUuYzogTGlrZXdpc2UuCgkqIGdjYy5jOiBMaWtld2lzZS4KCSogZ2Nvdi5jOiBMaWtld2lzZS4KCSogZ2VuLXByb3Rvcy5jOiBMaWtld2lzZS4KCSogZ2VuY2hlY2suYzogTGlrZXdpc2UuCgkqIGhhbGZwaWMuaDogTGlrZXdpc2UuCgkqIGhhc2guYzogTGlrZXdpc2UuCgkqIG1hY2htb2RlLmg6IExpa2V3aXNlLgoJKiBtYmNoYXIuYzogTGlrZXdpc2UuCgkqIHByZWZpeC5jOiBMaWtld2lzZS4KCSogcHJvdG9pemUuYzogTGlrZXdpc2UuCgkqIHJlY29nLmg6IExpa2V3aXNlLgoJKiBydGwuaDogTGlrZXdpc2UuCgkqIHNjYW4tZGVjbHMuYzogTGlrZXdpc2UuCgkqIHRyZWUuaDogTGlrZXdpc2UuCgkqIHZhcnJheS5oOiBMaWtld2lzZS4KClNhdCBOb3YgIDcgMTE6Mzc6NTMgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGkzODYubWQgKGNhbGxfdmFsdWVfcG9wKTogSWYgd2UncmUgbm90IHBvcHBpbmcgYW55dGhpbmcsCglkZWZlciB0byBjYWxsX3ZhbHVlLgoJKGNhbGxfcG9wKTogTGlrZXdpc2UgZGVmZXIgdG8gY2FsbC4KClNhdCBOb3YgIDcgMDI6NDk6NTYgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZik6IENsZWFyIHB1cmdlX2FkZHJlc3NvZl9yZXBsYWNlbWVudHMKCW9ubHkgYWZ0ZXIgcHJvY2Vzc2luZyB0aGUgd2hvbGUgZnVuY3Rpb24uCgpTYXQgTm92ICA3IDAwOjU0OjU1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogSWYgd2UgY2FuIG5vdCBwZXJmb3JtIGEgcGFydGljdWxhciBlbGltaW5hdGlvbgoJd2hlbiB3ZSB0aG91Z2h0IHdlIGNvdWxkIGVhcmxpZXIsIHRoZW4gd2UgbXVzdCBhbHdheXMgaXRlcmF0ZSB0aHJvdWdoCgl0aGUgbG9vcCBhdCBsZWFzdCBvbmUgbW9yZSB0aW1lLgoKRnJpIE5vdiAgNiAxOTozNzozMyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWRkX29wZXJhbmQpOiBTaW1wbGlmeSB0aGUgQ09OU1RfSU5UIG1hdGNoLgoJKHNleHRfYWRkX29wZXJhbmQpOiBDb3JyZWN0IHR5cG8gaW4gY29tcGFyaXNvbiBieSB1c2luZwoJQ09OU1RfT0tfRk9SX0xFVFRFUl9QLgoJKiBhbHBoYS5tZCAocz9hZGRxKTogVXNlIHNleHRfYWRkX29wZXJhbmQgdG8gYWxsb3cgdGhlIG5lZ2F0aXZlCgljb25zdGFudCBhbHRlcm5hdGl2ZXMgdG8gYmUgZ2VuZXJhdGVkLgoJKG11bHNpMywgbXVsZGkzLCB1bXVsZGkzX2hpZ2hwYXJ0KTogTG9vc2VuIGNvbnN0cmFpbnRzIHRvIGFsbG93CglzbWFsbCBjb25zdGFudHMsIHNpbmNlIHRoZSBodyBpbnN0cnVjdGlvbnMgZG8uCgpGcmkgTm92ICA2IDIwOjE1OjE5IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBXaGVuIHJld3JpdGluZyB0aGUgU0VUX0RFU1Qgb2YgYQoJcHJldmlvdXMgaW5zbiB0byBzdG9yZSBkaXJlY3RseSBpbnRvIG91ciByZWxvYWQgcmVnaXN0ZXIsIG1ha2Ugc3VyZQoJdGhhdCBpZiB0aGUgc291cmNlIG9mIHRoZSBwcmV2aW91cyBpbnNuIGlzIGEgcmVsb2FkIHJlZ2lzdGVyLCBpdHMKCXNwaWxsX3JlZ19zdG9yZSBhbmQgc3BpbGxfcmVnX3N0b3JlZF90byB2YWx1ZXMgYXJlIGNsZWFyZWQuCgpGcmkgTm92ICA2IDE2OjM1OjEwIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAoZmxvYXR1bnNzaWRmMl9pbnRlcm5hbCBzcGxpdHRlcik6IFVzZSBiYXNlIHJlZ2lzdGVyCglvcGVyYW5kLCBub3QgaGFyZC1jb2RlZCBTUC4KCkZyaSBOb3YgIDYgMDQ6MDc6NTMgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBqdW1wLmMgKGNhbGN1bGF0ZV9jYW5fcmVhY2hfZW5kKTogRml4IHRoaW5rby4KCkZyaSBOb3YgIDYgMDA6MTY6MDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBGaXggdHlwby4KCgkqIHJvbXAuaCAoTEVHSVRJTUlaRV9BRERSRVNTKTogRml4IHR5cG8uCgpGcmkgTm92ICA2IDAwOjEwOjAwIDE5OTggIEphbiBIdWJpY2thICAoaHViaWNrYUBmcmVlc29mdC5jeikKCgkqIGkzODYubWQgKGV4dGVuZHNpZGkyKTogVXNlICMgaW4gdGhlIG91dHB1dCB0ZW1wbGF0ZS4KCShleHRlbmRzaWRpIHNwbGl0dGVycyk6IE5ldyBzcGxpdHRlcnMuCgpUaHUgTm92ICA1IDExOjEzOjI3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IFVzZSB1bmtub3duLWVsZi5oIGFzIHRtX2ZpbGUgZm9yIGFybS1lbGYKCWNvbmZpZ3VyYXRpb25zLgoJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCgpUaHUgTm92ICA1IDA3OjU5OjA1IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSoganVtcC5jIChpbml0X2xhYmVsX2luZm8sIGRlbGV0ZV9iYXJyaWVyX3N1Y2Nlc3NvcnMsCgltYXJrX2FsbF9sYWJlbHMsIGRlbGV0ZV91bnJlZmVyZW5jZWRfbGFiZWxzLAoJZGVsZXRlX25vb3BfbW92ZXMsIGNhbGN1bGF0ZV9jYW5fcmVhY2hfZW5kKTogTmV3IGZ1bmN0aW9ucyBicm9rZW4KCW91dCBvZiBqdW1wX29wdGltaXplLgoJKGp1bXBfb3B0aW1pemUpOiBVc2UgdGhlbS4KClRodSBOb3YgIDUgMDc6NTc6NDUgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGV4cGFuZF9maXh1cF9yZWdpb25fZW5kKTogTWFrZSBzdXJlIG91dGVyIGNvbnRleHQgbGFiZWxzCglhcmUgbm90IGlzc3VlZCBpbiBhbiBpbm5lciBjb250ZXh0IGR1cmluZyBjbGVhbnVwcy4KClRodSBOb3YgIDUgMDQ6MDM6MDYgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLm1kIChhZGRzaTMsIHN1YnNpMyk6IE5vIG5ldyB0ZW1wb3JhcmllcyBvbmNlIGNzZSBpcwoJbm8gbG9uZ2VyIGV4cGVjdGVkLgoKVGh1IE5vdiAgNSAwMzoyOToxOSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGFkZHNpMywgc3Vic2kzKTogRXhwYW5kIHRvIGEgREltb2RlIHRlbXBvcmFyeSBzbyBhcwoJdG8gZXhwb3NlIHRoaXMgbWlkcG9pbnQgdG8gQ1NFLgoKVGh1IE5vdiAgNSAwMzo0Mjo1NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92ZGZfY29uc3RfaW50cmVnX3NwNjQpOiBFbmFibGUgYWdhaW4uCgpUaHUgTm92ICA1IDEwOjUzOjAxIDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogQnJpbmcgb3ZlciBnY2MyIGNoYW5nZSBvZiBOb3YgMTkgMTk5Ny4KCldlZCBOb3YgIDQgMjM6NDM6MDggMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiB0b3BsZXYuYyAob3V0cHV0X2xhbmdfaWRlbnRpZnkpOiBNYWtlIGRlZmluaXRpb24gZGVwZW5kZW50IG9uCglBU01fSURFTlRJRllfTEFOR1VBR0UuCgoJKiBwcmludC1ydGwuYyAoc3BhY2VzKTogTWFrZSBzdGF0aWMuCgpXZWQgTm92ICA0IDIyOjE2OjM2IDE5OTggIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuc2U+CgoJKiBleHRlbmQudGV4aTogQ2xhcmlmeSBwcm9wZXIgdXNlcyBmb3IgcmVnaXN0ZXIgY2xvYmJlcnMgaW4gYXNtcy4KCldlZCBOb3YgIDQgMjI6MTY6MzYgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVjb2cuaCAoZW51bSBvcF90eXBlKTogRGVmaW5lLgoJKGNvbnN0cmFpbl9vcGVyYW5kcyk6IEFkanVzdCBwcm90b3R5cGUuCgkocmVjb2dfb3BfdHlwZSk6IERlY2xhcmUgbmV3IHZhcmlhYmxlLgoJKiByZWNvZy5jIChyZWNvZ19vcF90eXBlKTogTmV3IHZhcmlhYmxlLgoJKGluc25faW52YWxpZF9wKTogQWxsb3cgbW9kaWZ5aW5nIGFuIGFzbSBzdGF0ZW1lbnQgYWZ0ZXIgcmVsb2FkLgoJKGV4dHJhY3RfaW5zbik6IFNldCB1cCByZWNvZ19vcF90eXBlLgoJKGNvbnN0cmFpbl9vcGVyYW5kcyk6IExvc2UgSU5TTl9DT0RFX05VTSBhcmcuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJRG9uJ3QgY29tcHV0ZSBvcGVyYW5kIHR5cGVzLCB1c2UgcmVjb2dfb3BfdHlwZS4KCVVzZSB0aGUgaW5mb3JtYXRpb24gY29tcHV0ZWQgYnkgZXh0cmFjdF9pbnNuIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzCgltZXRob2Qgb2YgZmluZGluZyBpdCBieSBpbnNuIGNvZGUgbnVtYmVyLgoJKiBjYWxsZXItc2F2ZS5jIChpbml0X2NhbGxlcl9zYXZlKTogVXNlIGV4dHJhY3RfaW5zbiwgbm90IGluc25fZXh0cmFjdC4KCSogcmVvcmcuYyAoZmlsbF9zbG90c19mcm9tX3RocmVhZCk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBMaWtld2lzZS4KCShnZW5fcmVsb2FkKTogTGlrZXdpc2UuCgkoaW5jX2Zvcl9yZWxvYWQpOiBMaWtld2lzZS4KCShyZWxvYWRfY3NlX3NpbXBsaWZ5X29wZXJhbmRzKTogTGlrZXdpc2UuCglVc2UgdGhlIGluZm9ybWF0aW9uIGNvbXB1dGVkIGJ5IGV4dHJhY3RfaW5zbiBpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cwoJbWV0aG9kIG9mIGZpbmRpbmcgaXQgYnkgaW5zbiBjb2RlIG51bWJlci4KCSogZ2VuYXR0cnRhYi5jICh3cml0ZV9hdHRyX2Nhc2UpOiBHZW5lcmF0ZSBjYWxsIHRvIGV4dHJhY3RfaW5zbiwgbm90CglpbnNuX2V4dHJhY3QuCgkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IFVzZSBleHRyYWN0X2luc24sIG5vdCBpbnNuX2V4dHJhY3QuCgkoY2xlYW51cF9vcGVyYW5kX3N1YnJlZ3MpOiBVc2UgZXh0cmFjdF9pbnNuLCBub3QgaW5zbl9leHRyYWN0LgoJVXNlIHRoZSBpbmZvcm1hdGlvbiBjb21wdXRlZCBieSBleHRyYWN0X2luc24gaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMKCW1ldGhvZCBvZiBmaW5kaW5nIGl0IGJ5IGluc24gY29kZSBudW1iZXIuCgkqIHJlZ21vdmUuYyAoZmluZF9tYXRjaGVzKTogTGlrZXdpc2UuICBDaGFuZ2UgbWVhbmluZyBvZiB0aGUgcmV0dXJuCgl2YWx1ZSB0byBiZSBub256ZXJvIGlmIHRoZSBvcHRpbWl6YXRpb24gY2FuIGJlIHBlcmZvcm1lZCwgemVybyBpZgoJbm90LiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVNob3J0ZW4gc29tZSB2YXJpYWJsZSBuYW1lcyB0byBmaXggZm9ybWF0dGluZyBwcm9ibGVtcy4KCShyZWdtb3ZlX29wdGltaXplKTogU2hvcnRlbiBzb21lIHZhcmlhYmxlIG5hbWVzIHRvIGZpeCBmb3JtYXR0aW5nCglwcm9ibGVtcy4KCVVzZSB0aGUgaW5mb3JtYXRpb24gY29tcHV0ZWQgYnkgZXh0cmFjdF9pbnNuIGluc3RlYWQgb2YgdGhlIHByZXZpb3VzCgltZXRob2Qgb2YgZmluZGluZyBpdCBieSBpbnNuIGNvZGUgbnVtYmVyLgoJKiByZWdjbGFzcy5jIChzY2FuX29uZV9pbnNuKTogTGlrZXdpc2UuCgkocmVjb3JkX3JlZ19jbGFzc2VzKTogRG9uJ3QgY29tcHV0ZSBvcGVyYW5kIHR5cGVzLCB1c2UgcmVjb2dfb3BfdHlwZS4KCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IExvc2UgQ09OU1RSQUlOVFMxIHZhcmlhYmxlOyB1c2UKCXJlY29nX2NvbnN0cmFpbnRzIGluc3RlYWQuCgpXZWQgTm92ICA0IDIxOjM3OjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJ0bC5oIChmbG93Ml9jb21wbGV0ZWQpOiBEZWNsYXJlLgoJKiBmbG93LmMgKGZsb3cyX2NvbXBsZXRlZCk6IERlZmluaXRpb24uCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogU2V0IGFuZCBjbGVhciBmbG93Ml9jb21wbGV0ZWQKCWFzIG5lY2Vzc2FyeS4KCldlZCBOb3YgIDQgMTk6MTU6MzcgMTk5OCAgTWVsaXNzYSBPJ05laWxsICA8b25laWxsQGNzLnNmdS5jYT4KCgkqIE1ha2VmaWxlLmluIChsaWJjcHAuYSk6IFJhbmxpYiBsaWJjcHAuYS4KCgkqIGNwcHVscC5jICh1c2VyX2xhYmVsX3ByZWZpeCk6IEluaXRpYWxpemUuCgpXZWQgTm92ICA0IDE5OjA3OjA4IDE5OTggIEpvaG4gV2VobGUgIChqb2huQGZlaXRoLmNvbSkKCgkqIGZsb3cuYyAobWFya19yZWdzX2xpdmVfYXRfZW5kKTogTWFyayB0aGUgc3RhY2sgcG9pbnRlciBhcyBsaXZlCglhdCBhIFJFVFVSTiBpZiBjdXJyZW50X2Z1bmN0aW9uX3NwX2lzX3VuY2hhbmdpbmcgaXMgc2V0LgoKV2VkIE5vdiAgNCAxODoxNjoyOSAxOTk4ICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIGVtaXQtcnRsLmMgKHRyeV9zcGxpdCk6IEZpeGVkIGVycm9yIGluIE9jdCAxMCBwYXRjaC4KCldlZCBOb3YgIDQgMTU6MTE6MTUgMTk5OCAgR2VvZmZyZXkgTm9lciAgPG5vZXJAY3lnbnVzLmNvbT4KCgkqIGkzODYvY3lnd2luMzIuaCAoTUFTS19XSU4zMiwgTUFTS19DWUdXSU4sIE1BU0tfV0lORE9XUywgTUFTS19ETEwsCglUQVJHRVRfV0lOMzIsIFRBUkdFVF9DWUdXSU4sIFRBUkdFVF9XSU5ET1dTLCBUQVJHRVRfRExMKTogTmV3LgoJKFNVQlRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtbW5vLWN5Z3dpbiwgLW1jeWd3aW4sIGFuZCAtbWRsbCBvcHRpb25zLgoJKENQUF9QUkVERUZJTkVTKTogRG9uJ3QgZGVmaW5lIF9fQ1lHV0lOMzJfXyBoZXJlLgoJKFNUQVJURklMRV9TUEVDKTogSGFuZGxlIC1tZGxsLCAtbW5vLWN5Z3dpbiBvcHRpb25zLgoJKENQUF9TUEVDKTogSGFuZGxlIC1tbm8tY3lnd2luIG9wdGlvbi4gIERlZmluZSBfX0NZV0lOX18gaW4gYWRkaXRpb24KCXRvIF9fQ1lHV0lOMzJfXy4KCShMSUJfU1BFQyk6IEhhbmRsZSAtbW5vLWN5Z3dpbiBvcHRpb24uCgkoTElOS19TUEVDKTogSGFuZGxlIC1tZGxsLgoKV2VkIE5vdiAgNCAyMjo1NjoxNCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IEZpeCB0ZXN0IGZvciB1c2FnZSBieSBvdGhlciByZWxvYWQKCXRvIGhhbmRsZSBzZWNvbmRhcnkgcmVsb2FkcyBwcm9wZXJseS4KCldlZCBOb3YgIDQgMTc6MjU6MTAgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogcmVsb2FkMS5jIChFTElNSU5BQkxFX1JFR1MsIE5VTV9FTElNSU5BQkxFX1JFR1MpOiBJbnRyb2R1Y2UgYW4KCWludGVybWVkaWF0ZSBzdHJ1Y3R1cmUgd2hpY2ggaGFzIGV4YWN0bHkgdGhlIG1lbWJlcnMgcHJvdmlkZWQgYnkKCUVMSU1JTkFCTEVfUkVHUy4gIERlZmluZSBOVU1fRUxJTUlOQUJMRV9SRUdTIGluIHRlcm1zIG9mIHRoZQoJc3RhdGljIGludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCgoJKGluaXRfZWxpbV90YWJsZSk6IFhtYWxsb2MoKSBgcmVnX2VsaW1pbmF0ZScsIGFuZCBpbml0aWFsaXplIGl0Cglmcm9tIHRoZSBpbnRlcm1lZGlhdGUgc3RydWN0dXJlLiAgRG8gdGhlIHNhbWUgYW5hbG9nb3VzIGZpeCBpbgoJdGhlIGNhc2Ugd2hlcmUgRUxJTUlOQUJMRV9SRUdTIGlzIG5vdCBkZWZpbmVkLgoKVHVlIE5vdiAgMyAyMDo1MDowMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBwYS5oIChTRUxFQ1RfU0VDVElPTik6IEZpeCB0aGlua28uCgpUdWUgTm92ICAzIDE3OjUxOjM2IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogQ29tbWVudHMgb24gbGFzdCBjaGFuZ2UuCgpUdWUgTm92ICAzIDA3OjUxOjQzIDE5OTggIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmMgKGFkZF9jb25zdGFudCk6IFdoZW4gdGFraW5nIHRoZSBhZGRyZXNzIG9mIGFuIGl0ZW0gaW4gdGhlCglwb29sLCBnZXQgdGhlIG1vZGUgb2YgdGhlIGl0ZW0gYWRkcmVzc2VkLgoKCSogYXJtLmMgKGZpbmFsX3ByZXNjYW5faW5zbiBjYXNlIElOU04pOiBJZiBhbiBpbnNuIGRvZXNuJ3QKCWNvbnRhaW4gYSBTRVQgb3IgYSBQQVJBTExFTCwgZG9uJ3QgY29uc2lkZXIgaXQgZm9yIGNvbmRpdGlvbmFsCglleGVjdXRpb24uCgoJUmVzdG9yZSBBQkkgY29tcGF0aWJpbGl0eSBmb3IgTmV0QlNELgoJKiBhcm0vbmV0YnNkLmggKERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4pOiBPdmVycmlkZSBzZXR0aW5nIGluCglhcm0uaC4KCShSRVRVUk5fSU5fTUVNT1JZKTogTGlrZXdpc2UuCgpNb24gTm92ICAyIDExOjQ2OjE3IDE5OTggIERvdWcgRXZhbnMgIDxkZXZhbnNAY2FudWNrLmN5Z251cy5jb20+CgoJKiBtMzJyL20zMnIuYyAobTMycl9leHBhbmRfYmxvY2tfbW92ZSk6IEZpeCBieXRlIGNvdW50IGNvbXB1dGF0aW9ucy4KCShtMzJyX291dHB1dF9ibG9ja19tb3ZlKTogUmV3cml0ZSBieXRlcyA8IDQgaGFuZGxpbmcuCgpNb24gTm92ICAyIDEwOjEwOjM1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBBQ19GVU5DX1ZGT1JLLgoKCSogY29sbGVjdDIuYzogRGVmaW5lIFZGT1JLX1NUUklORyBhcyBhIHByaW50YWJsZSBzdHJpbmcgZm9yCgllcnJvciBtZXNzYWdlcyAoZWl0aGVyICJ2Zm9yayIgb3IgImZvcmsiLikgIElmIEhBVkVfVkZPUktfSCBpcwoJZGVmaW5lZCwgaW5jbHVkZSB2Zm9yay5oLiAgSWYgVk1TIGlzIGRlZmluZWQsIGRlZmluZSB2Zm9yaygpCglhcHByb3ByaWF0ZWx5LiAgUmVtb3ZlIHZmb3JrIGNoZWNrIG9uIFVTRywgd2UncmUgdXNpbmcgYXV0b2NvbmYuCgkoY29sbGVjdF9leGVjdXRlKTogUGFzcyBWRk9SS19TVFJJTkcgdG8gZmF0YWxfcGVycm9yIGluc3RlYWQgb2YKCWNoZWNraW5nIGxvY2FsbHkgd2hhdCBzdHJpbmcgdG8gcGFzcy4KCShzY2FuX3Byb2dfZmlsZSk6IExpa2V3aXNlLgoJKHNjYW5fbGlicmFyaWVzKTogTGlrZXdpc2UuCgoJKiBnY2MuYzogUmVtb3ZlIHZmb3JrIGNoZWNrIG9uIFVTRywgd2UncmUgdXNpbmcgYXV0b2NvbmYuCglCZXNpZGVzLCBubyBjYWxscyB0byB2Zm9yay9mb3JrIG9jY3VyIGluIHRoaXMgZmlsZS4KCgkqIHByb3RvaXplLmM6IExpa2V3aXNlLgoKTW9uIE5vdiAgMiAwNzo1MjoyOCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNvbmZpZ3VyZS5pbiAoREVGQVVMVF9MSU5LRVIpOiBSZW5hbWVkIGZyb20gTEQuCgkoREVGQVVMVF9BU1NFTUJMRVIpOiBSZW5hbWVkIGZyb20gQVM7IHJldmVydGVkIFNjaHdhYidzIHBhdGNoLgoJKGdjY19jdl9hcyk6IFRyeSAkREVGQVVMVF9BU1NFTUJMRVIgYmVmb3JlICRBUy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIE5vdiAgMiAwMTo0ODoxMCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIEJVR1M6IEZpeCB0aGUgcmVnZXhwIGZvciBgbW9yZScgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgbm9kZS4KCVJlcG9ydGVkIGJ5IEpvZXJnIFBpZXRzY2htYW5uICA8am9lcmdfcGlldHNjaG1hbm5AemtiLmNoPgoKCSogQlVHUzogQWRkZWQgbGluayB0byB0aGUgV1dXIEZBUS4KClN1biBOb3YgIDEgMTg6Mjc6MTUgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gTm92ICAxIDExOjA0OjMyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIEZyb20gQ2hyaXN0aWFuIEdhZnRvbjoKCSogaTM4Ni9saW51eC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9faTM4Nl9fLgoJKiBzcGFyYy9saW51eC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9fc3BhcmNfXy4KCSogc3BhcmMvbGludXg2NC5oIChDUFBfUFJFREVGSU5FUyk6IEFkZCAtRF9fc3BhcmNfXy4KClNhdCBPY3QgMzEgMjE6NDI6MzkgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGMtY29tbW9uLmMgKGNfZ2V0X2FsaWFzX3NldCk6IEFsbG93IGFsbCB0eXBlLXB1bm5pbmcgdGhyb3VnaAoJdW5pb25zLiAgRG9uJ3QgZ2V0IGNvbmZ1c2VkIGFib3V0IHRoZSB0eXBlIG9mIGEgYml0LWZpZWxkLCBkZXNwaXRlCgl0aGUgYW50aWNzIG9mIGJ1aWxkX21vZGlmeV9leHByLgoKU2F0IE9jdCAzMSAyMjozNToyOSAxOTk4ICBKZWFuLVBpZXJyZSBSYWRsZXkgIDxqcHJAanByLmNvbT4KCgkqIGZpeGluYy5zY286IFBhcmFtZXRlcml6ZSAjaW5jbHVkZV9uZXh0IHZhbHVlcy4KCSogZml4aW5jL2ZpeGluYy5zY286IExpa2V3aXNlLgoKU2F0IE9jdCAzMSAyMDozOTozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAocmVzdF9vZl9jb21waWxhdGlvbik6IE5vIGxvbmdlciBzZXQgcmVsb2FkX2NvbXBsZXRlZC4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBTZXQgaXQgaGVyZS4gIFBlcmZvcm0gaW5zdHJ1Y3Rpb24gc3BsaXR0aW5nCglhZnRlciByZWxvYWQgaGFzIGNvbXBsZXRlZCBpZiB3ZSB3aWxsIGJlIHJ1bm5pbmcgdGhlIHNjaGVkdWxlcgoJYWdhaW4uCgpTYXQgT2N0IDMxIDEyOjMwOjAyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IEluaXRpYWxpemUgbWFwcGluZ3MgZnJvbSBJTlNOX1VJRCB0bwoJRUggcmVnaW9uIGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQgYW5kIHdlJ3JlIHBlcmZvcm1pbmcgY3Jvc3MKCWp1bXAgb3B0aW1pemF0aW9ucy4KCShmaW5kX2Nyb3NzX2p1bXApOiBFeGl0IGxvb3AgaWYgdGhlIGluc25zIGFyZSBpbiBkaWZmZXJlbnQgRUggcmVnaW9ucy4KClNhdCBPY3QgMzEgMTA6MDI6NDggMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGR3YXJmMm91dC5jIChvdXRwdXRfY2FsbF9mcmFtZV9pbmZvKTogVXNlCglBU01fT1VUUFVUX0RXQVJGX0RFTFRBNCBmb3IgdGhlIENJRSBvZmZzZXQgdG8gbWF0Y2ggZnJhbWUuYy4KClNhdCBPY3QgMzEgMTA6MjM6MTQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCVJlaW5zdGFsbCBBcHIgMjR0aCBmaXgsIGxvc3QgZHVyaW5nIE1heSA2dGggZ2NjMiBtZXJnZToKCSogYy1jb21tb24uYyAoY2hlY2tfZm9ybWF0X2luZm8pOiBEb24ndCBjaGVjayBmb3IgdGhlICd4JwoJZm9ybWF0IGNoYXJhY3RlciB0d2ljZSwgaW5zdGVhZCBjaGVjayBmb3IgJ3gnIGFuZCAnWCcKCkZyaSBPY3QgMzAgMTQ6NTA6MjUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogY29uZmlndXJlLmluIChhc3NlbWJsZXIgZmVhdHVyZXMpOiBBbHNvIG1ha2UgZ2FzIGlzIGNvbmZpZ3VyZWQgaWYKCXdlIGZpbmQgaXQgaW4gdGhlIHNvdXJjZSB0cmVlLgoKRnJpIE9jdCAzMCAxMzoyMzoyMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5jIChpMzg2X2NvbXBfdHlwZV9hdHRyaWJ1dGVzKTogQ29tcGFyZSB3aGV0aGVyIHRoZQoJYXR0cmlidXRlcyBhcmUgZGVmaW5lZCwgbm90IHRoZWlyIHRyZWUgbm9kZXMuCgpGcmkgT2N0IDMwIDExOjM5OjQ3IDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogY29uZmlndXJlLmluIChneHhfaW5jbHVkZV9kaXIpOiBCaXR0ZW4gYnkgYXV0b2NvbmYgcXVvdGluZwoJY2hhcmFjdGVycy4gIDotKAoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpGcmkgT2N0IDMwIDEwOjQzOjI5IDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGNvbmZpZ3VyZS5pbjogSWdub3JlIG5vbi1hYnNvbHV0ZSB2YWx1ZSBpbiAkQVMuCgpGcmkgT2N0IDMwIDAwOjU0OjI1IDE5OTggIFBldGVyIEpha3ViZWsgIDxwamFrQHNuYWZ1LmRlPgoKCSogbTY4ay5oIChJTkRJUkVDVEFCTEVfMV9BRERSRVNTX1ApOiBGaXggdGhpbmtvLgoKRnJpIE9jdCAzMCAwMDo0MjozNCAxOTk4ICBNYXJrIEVsYnJlY2h0ICA8c25vd2JhbGwzQHVzYS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gKG1zZG9zZGpncHApOiBTZXQgZXhlZXh0IGFuZCB0YXJnZXRfYWxpYXMuCgpUaHUgT2N0IDI5IDIzOjU1OjQzIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGZsb3cuYyAoWE5NQUxMT0MpOiBOZXcgbWFjcm8uCgkoZmxvd19pbnRfbGlzdF9ibG9ja3MsIGJhc2ljX2Jsb2NrX3N1Y2MsIGJhc2ljX2Jsb2NrX3ByZWQpOiBOZXcKCXN0YXRpYyB2YXJpYWJsZXMuCgkoYWRkX2VkZ2UsIGFkZF9lZGdlX3RvX2xhYmVsKTogTmV3IHN0YXRpYyBmdW5jdGlvbnMuCgkoZnJlZV9iYl9tZW1vcnkpOiBOZXcgZnVuY3Rpb24uCgkoZmxvd19kZWxldGVfaW5zbik6IERlbGV0ZSBmdW5jdGlvbi4KCShiYXNpY19ibG9ja19kcm9wc19pbik6IERlbGV0ZSB2YXJpYWJsZS4KCShmaW5kX2Jhc2ljX2Jsb2Nrcyk6IEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGJhc2ljX2Jsb2NrX2hlYWQsCgliYXNpY19ibG9ja19zdWNjLiAgRG9uJ3QgYWxsb2NhdGUgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCglDYWxsIGZyZWVfYmJfbWVtb3J5IGF0IHRoZSBiZWdpbm5pbmcuCgkoZmluZF9iYXNpY19ibG9ja3NfMSk6IERvbid0IGRvIG11bHRpcGxlIHBhc3Nlcy4KCURlbGV0ZSBjb2RlIHRvIGNvbXB1dGUgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCglBZnRlciBjYWxsaW5nIG1ha2VfZWRnZXMsIG1hcmsgYmxvY2tzIHJlYWNoZWQgYnkgY3VycmVudCBibG9jayBsaXZlLgoJVXBkYXRlIHRlc3QgZm9yIHVucmVhY2hhYmxlIGxpdmUgYmxvY2tzLgoJKG1hcmtfbGFiZWxfcmVmKTogRGVsZXRlIGFyZ3MgWCwgQ0hFQ0tEVVAuICBBZGQgUFJFRCBhcmcuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCVNpbXBsaWZ5IHRvIGNhbGwgYWRkX2VkZ2VfdG9fbGFiZWwgd2hlbiBhIExBQkVMX1JFRiBpcyBmb3VuZC4KCShtYWtlX2VkZ2VzKTogU2ltcGxpZnkgdG8gY2FsbCBhZGRfZWRnZV90b19sYWJlbCBpbnN0ZWFkIG9mCgltYXJrX2xhYmVsX3JlZiBtb3N0IG9mIHRoZSB0aW1lLgoJQ29tcHV0ZSBoZXJlIHdoZXRoZXIgY29udHJvbCBkcm9wcyBpbnRvIHRoZSBuZXh0IGJsb2NrLgoJKGRlbGV0ZV91bnJlYWNoYWJsZV9ibG9ja3MpOiBSZXR1cm4gdm9pZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglEZWxldGUgdW5yZWFjaGFibGUgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIuCglBZnRlciBkZWxldGluZyBhbGwgdW5yZWFjaGFibGUgYmxvY2tzLCByZW51bWJlciB0aGUgcmVtYWluaW5nIG9uZXMKCWFuZCB1cGRhdGUgbl9iYXNpY19ibG9ja3MuCgkoZGVsZXRlX2Jsb2NrKTogU3BlZWQgdXAgZGVsZXRpb24gYSBiaXQuCglEb24ndCBzZXQgYmFzaWNfYmxvY2tfZHJvcHNfaW4gZm9yIGRlbGV0ZWQgYmxvY2tzLgoJKGZyZWVfYmFzaWNfYmxvY2tfdmFycyk6IERvbid0IGZyZWUgYmFzaWNfYmxvY2tfZHJvcHNfaW4uCgkobGlmZV9hbmFseXNpc18xKTogVXBkYXRlIHRvIHVzZSBuZXcgZWRnZSByZXByZXNlbnRhdGlvbi4KCShkdW1wX2Zsb3dfaW5mbyk6IERlbGV0ZSBjb2RlIHRvIHByaW50IGJhc2ljIGJsb2NrIGluZm87IGNhbGwKCWR1bXBfYmJfZGF0YSBpbnN0ZWFkLgoJKGNvbXB1dGVfcHJlZHNfc3VjY3MpOiBEZWxldGUgY29kZSB0byByZWNvbXB1dGUgYmFzaWNfYmxvY2tfZHJvcHNfaW4KCWFuZCB1aWRfYmxvY2tfbnVtYmVyLgoJU2ltcGx5IGNvcHkgdGhlIHByZXZpb3VzbHkgY29tcHV0ZWQgY2ZnLgoJKGR1bXBfYmJfZGF0YSk6IE5ldyBhcmcgTElWRV9JTkZPLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVByaW50IHJlZ2lzdGVyIGxpZmV0aW1lIGluZm9ybWF0aW9uIGlmIExJVkVfSU5GTyBpcyBub256ZXJvLgoJKiBiYXNpYy1ibG9jay5oIChkdW1wX2JiX2RhdGEpOiBBZGp1c3QgcHJvdG90eXBlLgoJKiBnY3NlLmMgKGdjc2VfbWFpbik6IFVwZGF0ZSBjYWxsIHRvIGR1bXBfYmJfZGF0YS4KCSogcnRsLmggKGZyZWVfYmJfbWVtb3J5KTogRGVjbGFyZS4KCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBDYWxsIGZyZWVfYmJfbWVtb3J5LgoKCSogcmVsb2FkMS5jIChzdHJ1Y3QgZWxpbV90YWJsZSk6IERlbGV0ZSBNQVhfT0ZGU0VUIG1lbWJlci4KCSh1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzKTogRG9uJ3QgY29tcHV0ZSBpdC4KCShzZXRfaW5pdGlhbF9lbGltX29mZnNldHMpOiBEb24ndCBpbml0aWFsaXplIGl0LgoJQnJlYWsgb3V0IHNvbWUgY29kZSBpbnRvIHNldF9pbml0aWFsX2xhYmVsX29mZnNldHMgc28gdGhlIHJlc3Qgb2YKCXRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIHJlbG9hZF9hc19uZWVkZWQuCglBc3N1bWUgdGhhdCBJTklUSUFMX0ZSQU1FX1BPSU5URVJfT0ZGU0VUIGlzIGRlZmluZWQgd2hlbgoJRUxJTUlOQUJMRV9SRUdTIGlzbid0LgoJKHNldF9pbml0aWFsX2xhYmVsX29mZnNldHMpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YKCXNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cy4KCShzZXRfb2Zmc2V0c19mb3JfbGFiZWwpOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2Ygc2V0X2xhYmVsX29mZnNldHMKCWFuZCByZWxvYWRfYXNfbmVlZGVkLgoJKHJlbG9hZCk6IENhbGwgdGhlIHR3byBuZXcgZnVuY3Rpb25zLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBDYWxsIHNldF9pbml0aWFsX2VsaW1fb2Zmc2V0cyBpbnN0ZWFkIG9mCglkdXBsaWNhdGluZyB0aGUgY29kZS4gIExpa2V3aXNlIGZvciBzZXRfb2Zmc2V0c19mb3JfbGFiZWwuCgoJKiByZWxvYWQxLmMgKGNob29zZV9yZWxvYWRfcmVncyk6IEZpeCB0eXBvIGluIE9jdCAxNyBjaGFuZ2UuCgkoZW1pdF9yZWxvYWRfaW5zbnMpOiBFbnN1cmUgdGhhdCB3aGVuIHdlIHNldCByZWdfcmVsb2FkZWRfdmFsaWQgZm9yCglhbnkgaGFyZCByZWcsIHJlZ19yZWxvYWRlZF9kZWFkIGNvbnRhaW5zIHZhbGlkIGRhdGEuCgpUaHUgT2N0IDI5IDIyOjMwOjU0IDE5OTggIE1hcmN1cyBNZWlzc25lciAgPE1hcmN1cy5NZWlzc25lckBpbmZvcm1hdGlrLnVuaS1lcmxhbmdlbi5kZT4KCgkqIGkzODYuYyAoaTM4Nl9jb21wX3R5cGVfYXR0cmlidXRlcyk6IFJldHVybiBub256ZXJvIGZvciBtaXNtYXRjaGVkCgkic3RkY2FsbCIgYW5kICJjZGVjbCIgYXR0cmlidXRlcy4KClRodSBPY3QgMjkgMTk6MDU6MTcgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogc2NoZWQuYyAodXBkYXRlX2Zsb3dfaW5mbyk6IEFkZCBjb2RlIHRvICEgZm91bmRfb3JpZ19kZXN0IGNhc2UgdG8KCWhhbmRsZSBkZWxldGVkIG5vLW9wIG1vdmVzIG9mIGhhcmQgcmVnaXN0ZXJzLgoJKiBoYWlmYS1zY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogTGlrZXdpc2UuCgpUaHUgT2N0IDI5IDE4OjA3OjQ3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1pcHMubWQgKHJlbG9hZF97aW4sb3V0fXtzaSxkaX0pOiBFbWl0IGEgVVNFIG9mIEhJTE8gYXQgdGhlIGVuZAoJb2YgdGhlIHNlcXVlbmNlcyB0byByZWxvYWQgdGhlIEhJTE8gcmVnaXN0ZXIgd2hpY2ggZG8gbm90IGFjdHVhbGx5CglyZWZlcmVuY2UgSElMTy4KClRodSBPY3QgMjkgMTI6Mzk6MzUgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogYy1jb21tb24uYyAoY19nZXRfYWxpYXNfc2V0KTogSGFuZGxlIEFSUkFZX1JFRiBvZiB1bmlvbiBmaWVsZC4KClRodSBPY3QgMjkgMTQ6MTA6MjIgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmMgKGVtaXRfZWhfY29udGV4dCk6IE1ha2UgdGhlIEVIIGNvbnRleHQgcmVnaXN0ZXIgc3RheSBhbGl2ZQoJYXQgLU8wIHNvIHN0dXBpZC5jIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkLgoKMTk5OC0xMC0yOSAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiBlbWl0LXJ0bC5jICh0cnlfc3BsaXQpOiBEbyBub3QgdHJ5IHRvIHNwbGl0IGEgQkFSUklFUi4KClRodSBPY3QgMjkgMDE6MzM6NTQgMTk5OCAgSmFuIEh1Ymlja2EgIDxodWJpY2thQGZyZWVzb2Z0LmN6PgoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYubWQ6IENoYW5nZSBpeDg2X2NwdSA9PSBQUk9DRVNTT1JfUEVOVElVTSB0byBUQVJHRVRfUEVOVElVTS4KCSh6ZXJvX2V4dGVuZHNpZGkyKTogVXNlICMgaW4gb3V0cHV0IHRlbXBsYXRlIGFuZCBoYW5kbGUgY29tcGxldGVseSBieQoJc3BsaXRzLgoJKHplcm9fZXh0ZW5kIHNwbGl0dGVycyk6IE5ldyBkZWZpbmVfc3BsaXRzLgoJKGFzaGlmdHJ0XzMyKTogTmV3IHBhdHRlcm4uCgpXZWQgT2N0IDI4IDIyOjU4OjM1IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAoYXBwZW5kX3JhbmRvbV9jaGFycyk6IE5ldyBmbi4KCShnZXRfZmlsZV9mdW5jdGlvbl9uYW1lX2xvbmcpOiBVc2UgaXQuCgpXZWQgT2N0IDI4IDIyOjI3OjA1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY2MxKTogUHV0IENfT0JKUywgYW5kIHRoZW5jZSBAZXh0cmFfY19vYmpzQCBsYXN0LgoJKExJQkNQUF9PQkpTKTogTmV3LiAgQWRkIGNwcHVscC5vLgoJKGNwcG1haW4sIGZpeC1oZWFkZXIpOiBEZXBlbmQgb24gYW5kIHVzZSBsaWJjcHAuYS4KCSogY29uZmlndXJlLmluIChleHRyYV9jX29ianMsIGV4dHJhX2N4eF9vYmpzKTogVXNlIGxpYmNwcC5hIGluc3RlYWQKCW9mIHRoZSBpbmRpdmlkdWFsIG9iamVjdCBmaWxlcy4KCSogb2JqYy9NYWtlLWxhbmcuaW4gKGNjMW9iaik6IFB1dCBPQkpDX09CSlMsIGFuZCB0aGVuY2UgQGV4dHJhX2Nfb2Jqc0AsCglsYXN0LgoKCSogY2NjcC5jICh1c2VyX2xhYmVsX3ByZWZpeCk6IE5ldy4KCShtYWluKTogU2V0IGl0IG9mZiAtZipsZWFkaW5nLXVuZGVyc2NvcmUuCgkoc3BlY2lhbF9zeW1ib2wpOiBVc2UgaXQuCgkqIGNwcGxpYi5jIChzcGVjaWFsX3N5bWJvbCk6IExpa2V3aXNlLgoJKGNwcF9oYW5kbGVfb3B0aW9uKTogSGFuZGxlIC1mKmxlYWRpbmctdW5kZXJzY29yZS4KCSogY3BwdWxwLmM6IE5ldyBmaWxlLgoKCSogb3V0cHV0LmggKHVzZXJfbGFiZWxfcHJlZml4KTogRGVjbGFyZSBpdC4KCSogZHdhcmYyb3V0LmMgKEFTTV9OQU1FX1RPX1NUUklORyk6IFByZXBlbmQgdXNlcl9sYWJlbF9wcmVmaXguCgkqIHRvcGxldi5jIChmX29wdGlvbnMsIG1haW4pOiBIYW5kbGUgLWYqbGVhZGluZy11bmRlcnNjb3JlLgoKCSogZGVmYXVsdHMuaCAoQVNNX09VVFBVVF9MQUJFTFJFRik6IFVzZSBhc21fZnByaW50ZiBpbnN0ZWFkIG9mCglyZWZlcmVuY2luZyBVU0VSX0xBQkVMX1BSRUZJWCBkaXJlY3RseS4KCSogY29uZmlnL25leHRzdGVwLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBMaWtld2lzZS4KCSogbTMyci9tMzJyLmggKEFTTV9PVVRQVVRfTEFCRUxSRUYpOiBMaWtld2lzZS4KCSogZmluYWwuYyAoYXNtX2ZwcmludGYpOiBVc2UgdXNlcl9sYWJlbF9wcmVmaXggaW5zdGVhZC4KCSogYXJtL3RodW1iLmMgKHRodW1iX3ByaW50X29wZXJhbmQpOiBMaWtld2lzZS4KCgkqIGdjYy5jIChkZWZhdWx0X2NvbXBpbGVycyk6IFBhc3MgLWYqbGVhZGluZy11bmRlcnNjb3JlIG9uIHRvCgljcHAgd2hlcmV2ZXIgYXBwcm9wcmlhdGUuCgpXZWQgT2N0IDI4IDIzOjA5OjI1IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIHNjbzUuaCAoU1VCVEFSR0VUX1NXSVRDSEVTKTogQWRkIGRvY3VtZW50YXRpb24gZm9yIE9wZW5TZXJ2ZXItCglzcGVjaWZpYyBjb21waWxlciBzd2l0Y2hlcy4KCldlZCBPY3QgMjggMjE6MDU6NTMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKGMtY29tbW9uLm8pOiBEZXBlbmQgb24gYy1wcmFnbWEuaC4gIFVzZSAkKFJUTF9IKSBpbnN0ZWFkCglvZiBydGwuaC4KCldlZCBPY3QgMjggMjA6NTI6NDcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogZ2NjLmMgKEVYVFJBX1NQRUNTLCBleHRyYV9zcGVjcyk6IEludHJvZHVjZSBhbiBpbnRlcm1lZGlhdGUKCXN0cnVjdHVyZSB3aGljaCBoYXMgZXhhY3RseSB0aGUgbWVtYmVycyBwcm92aWRlZCBieSBFWFRSQV9TUEVDUy4KCVhtYWxsb2MoKSB0aGUgcmVhbCBgZXh0cmFfc3BlY3MnLCBhbmQgaW5pdGlhbGl6ZSBpdCBmcm9tIHRoaXMKCWludGVybWVkaWF0ZSBzdHJ1Y3R1cmUuCgoJKiBhbHBoYS5oIChFWFRSQV9TUEVDUyk6IFJldmVydCBjaGFuZ2UgZm9yIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoKCSogbWlwcy5oICAoRVhUUkFfU1BFQ1MpOiBMaWtld2lzZS4KCgkqIHNwYXJjLmggKEVYVFJBX1NQRUNTKTogTGlrZXdpc2UuCgpXZWQgT2N0IDI4IDE2OjQ2OjA3IDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogSW5zdGVhZCBvZiBhYm9ydGluZyB3aGVuIGEKCWJpdGZpZWxkIGluc2VydGlvbiBhcyBhIHJlcGxhY2VtZW50IGZvciAoTUVNIChBRERSRVNTT0YpKSBkb2VzIG5vdAoJd29yayBqdXN0IHB1dCB0aGUgQUREUkVTU09GIG9uIHN0YWNrLiAgT3RoZXJ3aXNlIHJlbWVtYmVyIGFsbCBzdWNoCglzdWNjZXNzZnVsIHJlcGxhY2VtZW50cywgc28gdGhhdCBleGFjdGx5IHRoZSBzYW1lIHJlcGxhY2VtZW50cwoJY2FuIGJlIG1hZGUgb24gdGhlIFJFR19OT1RFcy4gIFJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlIGZvciBDQUxMCglpbnNucyBhZ2Fpbi4KCShwdXJnZV9hZGRyZXNzb2ZfcmVwbGFjZW1lbnRzKTogTmV3IHZhcmlhYmxlLgoJKHB1cmdlX2FkZHJlc3NvZik6IENsZWFyIGl0IGF0IGVuZC4KCjE5OTgtMTAtMjggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjLWxhbmcuYzogRGVjbGFyZSBleHRlcm4gY2hhciAqeXlfY3VyIGlmIFVTRV9DUFBMSUIuCgkgIChsYW5nX2luaXQpOiBDYWxsIGNoZWNrX25ld2xpbmUgYWx3YXlzLgoJKiBjLWxleC5jIChpbml0X3BhcnNlKSBbVVNFX0NQUExJQj0xXTogQWZ0ZXIgY2FsbGluZwoJICBjcHBfc3RhcnRfcmVhZCwgc2V0IHl5X2N1ciBhbmQgeXlfbGltIHRvIHJlYWQgZnJvbQoJICBwYXJzZV9pbi50b2tlbl9idWZmZXIsIHNvIHRoYXQgd2UnbGwgc2VlIHRoZSBmaXJzdCAjbGluZQoJICBkaXJlY3RpdmUuCgkqIGNwcGxpYi5jIChjcHBfc3RhcnRfcmVhZCk6IGZpbmNsdWRlIHRoZSBtYWluIGlucHV0IGZpbGUKCSAgYmVmb3JlIHByb2Nlc3NpbmcgLWluY2x1ZGUvLWltYWNyb3MuCSBQcm9jZXNzIC1pbWFjcm9zIGFuZAoJICAtaW5jbHVkZSBzZXBhcmF0ZWx5LCBhbmQgaGFuZGxlIC1pbmNsdWRlIGJ5IHN0YWNraW5nIGEKCSAgYnVmZmVyIGZvciB0aGUgZmlsZSBpbiBxdWVzdGlvbiBhcyBpZiBpdCdkIGJlZW4gI2luY2x1ZGVkLgoJKiB0b3BsZXYuYyAoZG9jdW1lbnRlZF9sYW5nX29wdGlvbnMpOiBSZWNvZ25pemUgLUggd2hlbgoJICBVU0VfQ1BQTElCIGlzIG9uLgoKMTk5OC0xMC0yOCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jOiBNZXJnZSBkb19vbmNlIGludG8gZG9fcHJhZ21hLiAgQnJlYWsgZmlsZSBoYW5kbGluZwoJICBjb2RlIG91dCBvZiBkb19pbmNsdWRlLgoJICBNb3ZlIGFwcGVuZF9pbmNsdWRlX2NoYWluLCBkZXBzX291dHB1dCwKCSAgZmlsZV9jbGVhbnVwLCByZWR1bmRhbnRfaW5jbHVkZV9wLCBpbXBvcnRfaGFzaCwKCSAgbG9va3VwX2ltcG9ydCwgYWRkX2ltcG9ydCwgcmVhZF9maWxlbmFtZV9zdHJpbmcsIHJlYWRfbmFtZV9tYXAsCgkgIG9wZW5faW5jbHVkZV9maWxlLCBmaW5jbHVkZSwgc2FmZV9yZWFkIHRvIGNwcGZpbGVzLmMuCgkgIE1vdmUgcHJvdG90eXBlcyBmb3IgZGVwc19vdXRwdXQsIGFwcGVuZF9pbmNsdWRlX2NoYWluLAoJICBmaW5jbHVkZSB0byBjcHBsaWIuaC4gIE1vdmUgZGVmaW5pdGlvbiBvZiBzdHJ1Y3QKCSAgZmlsZV9uYW1lX2xpc3QgdGhlcmUgYWxzby4KCgkqIGNwcGZpbGVzLmM6IE5ldyBmaWxlLiAgQ29udGFpbnMgYWxsIHRoZSBhYm92ZSBmdW5jdGlvbnMKCSAgYnJva2VuIG91dCBvZiBjcHBsaWIuYzsgYWxzbyBoYWNrX3Ztc19pbmNsdWRlX3NwZWNpZmljYXRpb24KCSAgZnJvbSBjY2NwLmMgYW5kIGZpbmRfaW5jbHVkZV9maWxlLCBhIG5ldyBmdW5jdGlvbiBicm9rZW4gb3V0IG9mCgkgIGRvX2luY2x1ZGUuCgoJKiBNYWtlZmlsZS5pbiAoY3BwbWFpbik6IERlcGVuZCBvbiBjcHBmaWxlcy5vLgoJICAoZml4LWhlYWRlcik6IExpa2V3aXNlLgoJICAoY3BwZmlsZXMubyk6IE5ldyB0YXJnZXQuCgkqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtYy1jcHBsaWIpOiBBZGQgY3BwZmlsZXMubyB0bwoJICBleHRyYV9jX29ianMuICBBZGQgLi4vY3BwZmlsZXMubyB0byBleHRyYV9jeHhfb2Jqcy4KCldlZCBPY3QgMjggMTQ6MDY6NDkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZHdhcmZvdXQuYyAoZHdhcmZvdXRfZmlsZV9zY29wZV9kZWNsKTogSWYgREVDTF9DT05URVhULCBkb24ndCBhYm9ydAoJaWYgcGVuZGluZ190eXBlcyBpcyBub24temVyby4KCShkd2FyZm91dF9maW5pc2gpOiBWZXJpZnkgcGVuZGluZ190eXBlcyBpcyB6ZXJvIGJlZm9yZSBmaW5pc2hpbmcuCgpXZWQgT2N0IDI4IDEwOjI5OjA5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBleHByLmMgKGNvbnZlcnRfbW92ZSk6IFVzZSBzaGlmdHMgdG8gcGVyZm9ybSB0aGUgbW92ZSBpZiBhCglzdWl0YWJsZSBleHRlbmQgcGF0dGVybiBjYW5ub3QgYmUgZm91bmQuICBDb2RlIHdyaXR0ZW4gYnkKCVJpY2hhcmQgSGVuZGVyc29uIDxydGhAY3lnbnVzLmNvbT4uCgpXZWQgT2N0IDI4IDAzOjU5OjI5IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlZ2NsYXNzLmMgKHJlbnVtYmVyLCByZWdub19hbGxvY2F0ZWQpOiBOZXcgc3RhdGljIHZhcmlhYmxlcywgbW92ZWQKCW91dCBvZiBhbGxvY2F0ZV9yZWdfaW5mby4KCShhbGxvY2F0ZV9yZWdfaW5mbyk6IE1vdmUgdGhlc2UgdHdvIHZhcmlhYmxlcyBvdXRzaWRlIHRoZSBmdW5jdGlvbi4KCU1vdmUgY29kZSB0byBmcmVlIG1lbW9yeSBpbnRvIG5ldyBmdW5jdGlvbiBmcmVlX3JlZ19pbmZvLgoJKGZyZWVfcmVnX2luZm8pOiBOZXcgZnVuY3Rpb24sIGJyb2tlbiBvdXQgb2YgYWxsb2NhdGVfcmVnX2luZm8uCgkqIHRvcGxldi5jIChjb21waWxlX2ZpbGUpOiBDYWxsIGZyZWVfcmVnX2luZm8sIG5vdCBhbGxvY2F0ZV9yZWdfaW5mby4KCSogcnRsLmggKGFsbG9jYXRlX3JlZ19pbmZvKTogRG9uJ3QgZGVjbGFyZS4KCShmcmVlX3JlZ19pbmZvKTogRGVjbGFyZS4KCgkqIGZpbmFsLmMgKGNsZWFudXBfc3VicmVnX29wZXJhbmRzKTogQVNNX0lOUFVUcyBuZWVkIG5vIHRyZWF0bWVudC4KCldlZCBPY3QgMjggMDI6Mzg6MTIgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGNvbXBpbGVfZmlsZSk6IFRlbXBvcmFyaWx5IHJldmVydCBsYXN0IGNoYW5nZS4KCldlZCBPY3QgMjggMDA6MDA6MzUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogYy10eXBlY2suYyAoY29udmVydF9mb3JfYXNzaWdubWVudCk6IFBhcmVudGhlc2l6ZS4KCjE5OTgtMTAtMjggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIHJlbG9hZDEuYyAoZGVsZXRlX291dHB1dF9yZWxvYWQpOiBBdm9pZCBhbWJpZ291cyBlbHNlLgoKV2VkIE9jdCAyOCAwMDoxMDozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAoY29tcGlsZV9maWxlKTogQ2FsbCBhbGxvY2F0ZV9yZWdfaW5mbyB0byBmcmVlIHJlZ2lzdGVyCgl0YWJsZSBtZW1vcnkuCgkqIHJ0bC5oIChhbGxvY2F0ZV9yZWdfaW5mbyk6IERlY2xhcmUuCgoJKiBQUk9KRUNUUzogUmVtb3ZlIGVudHJ5IGZvciBsb2NhbCBzcGlsbGluZy4KCgkqIGZpbmFsLmMgKGNsZWFudXBfc3VicmVnX29wZXJhbmRzKTogTmV3IGZ1bmN0aW9uLgoJKGZpbmFsX3NjYW5faW5zbik6IFVzZSBpdC4KCShhbHRlcl9zdWJyZWcpOiBDbGVhciB0aGUgInVzZWQiIGZpZWxkIHdoZW4gd2UgdHVybiBhIFNVQlJFRyBpbnRvCglhIFJFRy4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBEZWxldGUgQ0xPQkJFUiBpbnNucyBhbmQgYWxzbyBjbGVhbnVwIFNVQlJFRwoJb3BlcmFuZHMgd2hlbiByZWxvYWQgaGFzIGZpbmlzaGVkLgoJKiByZWxvYWQuaCAoY2xlYW51cF9zdWJyZWdfb3BlcmFuZHMpOiBEZWNsYXJlLi4KCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBObyBsb25nZXIgZGVsZXRlIENMT0JCRVIgaW5zbnMgYWZ0ZXIKCXJlbG9hZC4gIEhhbmRsZWQgaW4gcmVsb2FkIGl0c2VsZi4KClR1ZSBPY3QgMjcgMjM6MzI6MzQgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVsb2FkMS5jICh2ZXJpZnlfaW5pdGlhbF9vZmZzZXRzKTogTmV3IGZ1bmN0aW9uLgoJKHJlbG9hZCk6IENhbGwgaXQgYWZ0ZXIgcmVsb2FkX2FzX25lZWRlZC4gIEFsc28gdmVyaWZ5IHRoYXQgdGhlIGZyYW1lCglzaXplIHN0YXlzIGNvbnN0YW50IGR1cmluZyByZWxvYWRfYXNfbmVlZGVkLgoJKiBpMzg2LmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBVbmRvIEp1bCAyNiBjaGFuZ2UuCgoJKiByZWxvYWQuaCAoc3RydWN0IGluc25fY2hhaW4pOiBBZGQgbmVlZF9vcGVyYW5kX2NoYW5nZSBlbGVtZW50LgoJKiByZWxvYWQxLmMgKG5ld19pbnNuX2NoYWluKTogQ2xlYXIgaXQuCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucyk6IFNldCBpdDsgZG9uJ3Qgb3ZlcmxvYWQgbmVlZF9yZWxvYWQuCgkocmVsb2FkX2FzX25lZWRlZCk6IFVzZSBpdC4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IFVzZSBCQVNFX1JFR19DTEFTUyBpbnN0ZWFkIG9mCglyZWxvYWRfYWRkcmVzc19iYXNlX3JlZ19jbGFzcyB0aHJvdWdob3V0LiAgU2ltaWxhciBmb3IgSU5ERVhfUkVHX0NMQVNTCglhbmQgcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzLgoJKGZpbmRfcmVsb2Fkc19hZGRyZXNzXzEpOiBMaWtld2lzZS4KCSogcmVsb2FkLmggKHJlbG9hZF9hZGRyZXNzX2Jhc2VfcmVnX2NsYXNzLAoJcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzKTogRG9uJ3QgZGVjbGFyZS4KCSogcmVsb2FkMS5jIChyZWdfb2xkX3JlbnVtYmVyLCBwc2V1ZG9fcHJldmlvdXNfcmVncywKCXBzZXVkb19mb3JiaWRkZW5fcmVncywgYmFkX3NwaWxsX3JlZ3NfZ2xvYmFsKTogTmV3IHN0YXRpYyB2YXJpYWJsZXMuCgkodXNlZF9zcGlsbF9yZWdzKTogTm93IHN0YXRpYy4KCShyZWxvYWRfYWRkcmVzc19iYXNlX3JlZ19jbGFzcywgcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzLAoJcmVnc19leHBsaWNpdGx5X3VzZWQsIGNvdW50ZWRfZm9yX2dyb3VwcywgY291bnRlZF9mb3Jfbm9uZ3JvdXBzLAoJYmFzaWNfYmxvY2tfbmVlZHMsIG1heF9uZWVkcywgZ3JvdXBfc2l6ZSwgZ3JvdXBfbW9kZSwgbWF4X2dyb3VwcywKCW1heF9ub25ncm91cHMsIG1heF9uZWVkc19pbnNuLCBtYXhfZ3JvdXBzX2luc24sIG1heF9ub25ncm91cHNfaW5zbiwKCWZvcmJpZGRlbl9yZWdzKToKCURlbGV0ZWQgdmFyaWFibGVzLgoJKGluaXRfcmVsb2FkKTogRGVsZXRlIGNvZGUgdG8gY29tcHV0ZSBiYXNlL2luZGV4IHJlZyBjbGFzc2VzLgoJKHJlbG9hZCk6IERlbGV0ZSB2YXJpYWJsZSBKLgoJRGVsZXRlIGNvZGUgdG8gbWFuYWdlIGJhc2ljX2Jsb2NrX25lZWRzLgoJRG9uJ3QgY29tcHV0ZSByZWdzX2V4cGxpY2l0bHlfdXNlZC4KCUFsbG9jYXRlLCBpbml0aWFsaXplIGFuZCBmcmVlIHJlZ19vbGRfcmVudW1iZXIsIHBzZXVkb19mb3JiaWRkZW5fcmVncywKCXBzZXVkb19wcmV2aW91c19yZWdzLgoJSW5pdGlhbGl6ZSBiYWRfc3BpbGxfcmVnc19nbG9iYWwuCglEb24ndCBjYWxsIG9yZGVyX3JlZ3NfZm9yX3JlbG9hZCBoZXJlLgoJRG9uJ3QgaW5pdGlhbGl6ZSBzcGlsbF9yZWdfb3JkZXIgYW5kIG5fc3BpbGxzLgoJRG9uJ3QgZm9yYmlkIGV4cGxpY2l0bHkgdXNlZCByZWdzIHRvIGJlIHVzZWQgZm9yIHNwaWxsIHJlZ3MuCglDaGFuZ2UgbWFpbiBsb29wIHRvIGluZmluaXRlIGxvb3AsIHdpdGggZXhwbGljaXQgYnJlYWsgc3RhdGVtZW50cy4KCU1ha2UgU09NRVRISU5HX0NIQU5HRUQgdmFyaWFibGUgbG9jYWwgdG8gdGhhdCBsb29wLgoJRG9uJ3QgaW5pdGlhbGl6ZSBtYXhfbmVlZHMsIG1heF9ncm91cHMsIG1heF9ub25ncm91cHMsIG1heF9uZWVkc19pbnNuLAoJbWF4X2dyb3Vwc19pbnNuLCBtYXhfbm9uZ3JvdXBzX2luc24sIGdyb3VwX3NpemUsIGdyb3VwX21vZGUuCglNYWtlIHN1cmUgc3BpbGxlZF9wc2V1ZG9zIGlzIGNsZWFyZWQgYmVmb3JlIGNhbGxpbmcgc3BpbGxfaGFyZF9yZWcgb3IKCW5ld19zcGlsbF9yZWcuCglEb24ndCBjYWxsIGR1bXBfbmVlZHMuCglEZWxldGUgY29kZSB0byByZXNldCBwb3RlbnRpYWxfcmVsb2FkX3JlZ3MuCglEZWxldGUgY29kZSB0byB0ZXJtaW5hdGUgbG9vcCBjb25kaXRpb25hbCBvbiB0aGUgZ2xvYmFsIG5lZWRzIHZhcmlhYmxlcwoJc2hvd2luZyBubyBmdXJ0aGVyIG5lZWRzLgoJKGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMpOiBSZXR1cm4gdm9pZC4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglJbml0aWFsaXplIHNvbWV0aGluZ19uZWVkc19lbGltaW5hdGlvbiBoZXJlLCBub3QgaW4gcmVsb2FkLgoJRGVsZXRlIGF2b2lkX3JldHVybl9yZWcga2x1ZGdlLgoJKGNhbGN1bGF0ZV9uZWVkcyk6IExvc2UgQVZPSURfUkVUVVJOX1JFRyBhbmQgR0xPQkFMIGFyZ3MsIHJldHVybiB2b2lkLgoJQWxsIGNhbGxlcnMgY2hhbmdlZC4KCUluaXRpYWxpemUgdGhlIGdyb3VwX21vZGUgYW5kIGdyb3VwX3NpemUgZWxlbWVudHMgb2YgdGhlIGFyZyBDSEFJTi4KCURlbGV0ZSBjb2RlIHRvIG1hbmFnZSBiYXNpY19ibG9ja19uZWVkcy4KCU9wZXJhdGUgb24gZWxlbWVudHMgb2YgQ0hBSU4gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoJRGVsZXRlIGF2b2lkX3JldHVybl9yZWcga2x1ZGdlLgoJKGZpbmRfdHdvcmVnX2dyb3VwKTogTG9zZSBHTE9CQUwgYXJnLCB0YWtlIENIQUlOIGFyZywgcmV0dXJuIHZvaWQuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCglEZWxldGUgc3BlY2lhbCBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTIGNvZGUuCglEZWxldGUgc3BpbGxfZmFpbHVyZSBjb2RlOyBub3cgaW4gbmV3X3NwaWxsX3JlZy4KCShmaW5kX2dyb3VwKTogTG9zZSBHTE9CQUwgYXJnLCB0YWtlIENIQUlOIGFyZywgcmV0dXJuIHZvaWQuCglBbGwgY2FsbGVycyBjaGFuZ2VkLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCgkobWF5YmVfbWFya19wc2V1ZG9fc3BpbGxlZCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZmluZF9yZWxvYWRfcmVncyk6IExvc2UgR0xPQkFMIGFyZywgdGFrZSBDSEFJTiBhcmcsIHJldHVybiB2b2lkLgoJQWxsIGNhbGxlcnMgY2hhbmdlZC4KCU9wZXJhdGUgb24gZWxlbWVudHMgb2YgQ0hBSU4gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoJQ2FsbCBvcmRlcl9yZWdzX2Zvcl9yZWxvYWQgaGVyZSwgbm90IGluIHJlbG9hZC4KCUluaXRpYWxpemUgc3BpbGxfcmVnX29yZGVyIGFuZCBuX3NwaWxscy4KCVNpbXBsaWZ5IHRlc3Qgd2hldGhlciBhbiBhc20gaW5zbiBpcyBpbnZvbHZlZC4KCURlbGV0ZSBzcGlsbF9mYWlsdXJlIGNvZGU7IG5vdyBpbiBuZXdfc3BpbGxfcmVnLgoJQ2FsbCBtYXliZV9tYXJrX3BzZXVkb19zcGlsbGVkIGZvciBldmVyeXRoaW5nIG1hcmtlZCBhcyBsaXZlIGluCglDSEFJTi4gIE1lcmdlIENIQUlOJ3MgdXNlZF9zcGlsbF9yZWdzIGludG8gdGhlIGdsb2JhbCB2YXJpYWJsZQoJdXNlZF9zcGlsbF9yZWdzLgoJKGR1bXBfbmVlZHMpOiBUYWtlIENIQUlOIGFyZy4gIE5vIGxvbmdlciBzdGF0aWMsIHRvIHByZXZlbnQgdGhlCgljb21waWxlciBmcm9tIG9wdGltaXppbmcgdGhpcyBmdW5jdGlvbiAobm93IHVudXNlZCkgYXdheS4KCU9wZXJhdGUgb24gZWxlbWVudHMgb2YgQ0hBSU4gaW5zdGVhZCBvZiBnbG9iYWwgdmFyaWFibGVzLgoJKHBvc3NpYmxlX2dyb3VwX3ApOiBMb3NlIE1BWF9HUk9VUFMgYXJnLCB0YWtlIENIQUlOIGFyZy4gIEFsbCBjYWxsZXJzCgljaGFuZ2VkLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCgkoY291bnRfcG9zc2libGVfZ3JvdXBzKTogTG9zZSBHUk9VUF9TSVpFLCBHUk9VUF9NT0RFLCBNQVhfR1JPVVBTIGFyZ3MsCgl0YWtlIENIQUlOIGFyZy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglPcGVyYXRlIG9uIGVsZW1lbnRzIG9mIENIQUlOIGluc3RlYWQgb2YgZ2xvYmFsIHZhcmlhYmxlcy4KCShuZXdfc3BpbGxfcmVnKTogTG9zZSBNQVhfTkVFRFMsIE1BWF9OT05HUk9VUFMsIEdMT0JBTCBhcmdzLCB0YWtlCglDSEFJTiwgTk9OR1JPVVAgYXJncy4gIFJldHVybiB2b2lkLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVZlcmlmeSBjYWxsZXIgaXNuJ3QgdHJ5aW5nIHRvIHNwaWxsIGEgcHNldWRvLgoJU2ltcGxpZnkgdGVzdCBmb3IgaWxsZWdhbCByZWcsIGp1c3QgdXNlIGJhZF9zcGlsbF9yZWdzLgoJR2VuZXJhdGUgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCglNYXJrIHNwaWxsZWQgcmVnaXN0ZXIgaW4gQ0hBSU4ncyB1c2VkX3NwaWxsX3JlZ3MgZWxlbWVudC4KCURvbid0IGNhbGwgc3BpbGxfaGFyZF9yZWcuCgkoc3BpbGxfaGFyZF9yZWcpOiBMb3NlIEdMT0JBTCBhcmcsIHJldHVybiB2b2lkLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCU1hcmsgc3BpbGxlZCBoYXJkIHJlZ3MgaW4gYmFkX3NwaWxsX3JlZ3NfZ2xvYmFsLgoJTWFyayBhZmZlY3RlZCBwc2V1ZG9zIGluIHNwaWxsZWRfcHNldWRvcywgYnV0IGRvbid0IHNwaWxsIHRoZW0uCgkoaW9yX2hhcmRfcmVnX3NldCk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkoZmluaXNoX3NwaWxscyk6IFJldHVybiBpbnQuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJQ29tcHV0ZSBzcGlsbF9yZWdfb3JkZXIsIG5fc3BpbGxzIGFuZCBzcGlsbF9yZWdzIGhlcmUuICBBbHNvIHVwZGF0ZQoJcmVnc19ldmVyX2xpdmUgZm9yIHJlZ3MgdXNlZCBhcyBzcGlsbHMuCglGb3IgZXZlcnkgcHNldWRvIGluIHNwaWxsZWRfcHNldWRvcywgc3BpbGwgaXQgYW5kIG1hcmsgdGhlIHByZXZpb3VzCgloYXJkIHJlZyBpdCBoYWQgaW4gcHNldWRvX3ByZXZpb3VzX3JlZ3MuICBDb21wdXRlIHdoaWNoIGhhcmQgcmVncwoJYXJlIHVzZWQgYXMgc3BpbGxzIGluIGluc25zIGR1cmluZyB3aGljaCBpdCBpcyBsaXZlLCBhbmQgcmV0cnkgZ2xvYmFsCglyZWdpc3RlciBhbGxvY2F0aW9uLiAgVXBkYXRlIGFsbCBsaWZlIGluZm9ybWF0aW9uIGluIHRoZQoJcmVsb2FkX2luc25fY2hhaW4gbm90IHRvIGluY2x1ZGUgcHNldWRvcyB3aXRob3V0IGhhcmQgcmVncy4KCUNhbGwgYWx0ZXJfcmVnIGZvciBhbGwgYWZmZWN0ZWQgc3BldWRvcy4KCgkoc2Nhbl9wYXJhZG94aWNhbF9zdWJyZWdzKTogRGlzYWJsZSBTTUFMTF9SRUdJU1RFUl9DTEFTU0VTIHNwZWNpYWwKCWNhc2UsIGl0J3Mgbm90IGNsZWFyIHdoYXQgaXQncyBzdXBwb3NlZCB0byBkby4KCgkoaGFyZF9yZWdfdXNlX2NvbXBhcmUpOiBUYWtlIGJhZF9zcGlsbF9yZWdzIGludG8gYWNjb3VudC4KCShwc2V1ZG9zX2NvdW50ZWQpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgoJKGNvdW50X3BzZXVkbyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogVGFrZSBDSEFJTiBhcmcuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJSW5pdGlhbGl6ZSBiYWRfc3BpbGxfcmVncyBmcm9tIGJhZF9zcGlsbF9yZWdzX2dsb2JhbCwgdGhlbiBtZXJnZSBhbnkKCWhhcmQgcmVnaXN0ZXJzIGV4cGxpY2l0bHkgdXNlZCBhY3Jvc3MgdGhlIGN1cnJlbnQgaW5zbiBpbnRvIHRoZSBzZXQuCglDb21wdXRlIGhhcmRfcmVnX25fdXNlcyB0YWtpbmcgb25seSBwc2V1ZG9zIGxpdmUgYWNyb3NzIHRoaXMgaW5zbgoJaW50byBhY2NvdW50LgoJVHdlYWsgc29ydGluZyBvZiBwb3RlbnRpYWxfcmVsb2FkX3JlZ3MuCgkoY29tcGFyZV9zcGlsbF9yZWdzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKHJlbG9hZF9hc19uZWVkZWQpOiBEb24ndCBzb3J0IHRoZSBzcGlsbF9yZWdzIGFycmF5LCBpdCdzIGNvbXB1dGVkCglpbiBwcm9wZXIgb3JkZXIgaW4gZmluaXNoX3NwaWxscy4KCURlbGV0ZSBhdm9pZF9yZXR1cm5fcmVnIGtsdWRnZS4KCURlbGV0ZSBjb2RlIHRvIG1hbmFnZSBiYXNpY19ibG9ja19uZWVkcy4KCShhbGxvY2F0ZV9yZWxvYWRfcmVnKTogTWlub3Igc3BlZWQvcmVhZGFiaWxpdHkgdHdlYWtzLgoJT3BlcmF0ZSBvbiBlbGVtZW50cyBvZiBDSEFJTiBpbnN0ZWFkIG9mIGdsb2JhbCB2YXJpYWJsZXMuCgkoY2hvb3NlX3JlbG9hZF9yZWdzKTogTG9zZSBBVk9JRF9SRVRVUk5fUkVHIGFyZy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglEZWxldGUgYXZvaWRfcmV0dXJuX3JlZyBrbHVkZ2UuCglJbml0aWFsaXplIHJlbG9hZF9yZWdfdXNlZCBmcm9tIENIQUlOJ3MgdXNlZF9zcGlsbF9yZWdzIGVsZW1lbnQuCglEZWxldGUgdW51c2VkIGxhYmVsIEZBSUwuCgkocmVsb2FkX2NvbWJpbmUpOiBSZXBsYWNlIHJlbG9hZF9hZGRyZXNzX2luZGV4X3JlZ19jbGFzcyB3aXRoCglJTkRFWF9SRUdTLgoJRG9uJ3QgdXNlIHVzZWRfc3BpbGxfcmVncyB0byBkZXRlcm1pbmUgaW5mb3JtYXRpb24gYWJvdXQgbGlmZXRpbWUgb2YKCWhhcmQgcmVncy4KClR1ZSBPY3QgMjcgMTM6MTU6MDIgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIHRvcGxldi5jIChkaXNwbGF5X2hlbHApOiBJZ25vcmUgZW1wdHkgdGFyZ2V0IHNwZWNpZmljCglvcHRpb25zLCBhbmQgaWYgLVcgaXMgYWxzbyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB0aGVuCglkaXNwbGF5IHVuZG9jdW1lbnRlZCBvcHRpb25zLgoKCSogY29uZmlnL2FybS9hcm0uYzogVXBkYXRlZCB3aXRoIGNoYW5nZXMgaW4gZGV2byBzb3VyY2VzLgoJKiBjb25maWcvYXJtL2FybS5oOiBVcGRhdGVkIHdpdGggY2hhbmdlcyBpbiBkZXZvIHNvdXJjZXMuCgkqIGNvbmZpZy9hcm0vbGliMWZ1bmNzLmFzbTogVXBkYXRlZCB3aXRoIGNoYW5nZXMgaW4gZGV2byBzb3VyY2VzLgoJKiBjb25maWcvYXJtL2xpYjF0aHVtYi5hc206IEFkZCBFTEYgc3VwcG9ydC4KClR1ZSBPY3QgMjcgMTY6MTE6NDMgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogY29sbGVjdDIuYyAoYWl4NjRfZmxhZyk6IE5ldyB2YXJpYWJsZS4KCShtYWluLCBjYXNlICdiJyk6IFBhcnNlIGl0LgoJKEdDQ19DSEVDS19IRFIpOiBPYmplY3QgbWFnaWMgbnVtYmVyIG11c3QgbWF0Y2ggbW9kZS4KCShzY2FuX3Byb2dfZmlsZSk6IE9ubHkgY2hlY2sgZm9yIHNoYXJlZCBvYmplY3QgaWYgdmFsaWQgaGVhZGVyLgoJUHJpbnQgZGVidWdnaW5nIGlmIGhlYWRlci9tb2RlIG1pc21hdGNoLgoKVHVlIE9jdCAyNyAxMDoxNTowMiAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCUFkZGVkIHN1cHBvcnQgZm9yIGFybS1lbGYtbGludXggY29uZmlndXJhdGlvbiwgc3VibWl0dGVkIGJ5IFBoaWxpcAoJQmx1bmRlbGwgPHBiQG5leHVzLmNvLnVrPiwgYW5kIGludGVncmF0ZWQgdGhpcyB3aXRoIHRoZSBhcm0tZWxmCgljb2RlIGRldmVsb3BlZCBieSBDYXRoZXJpbmUgTW9vcmUgPGNsbUBjeWdudXMuY29tPi4gIFRoZSBmb2xsb3dpbmcKCWZpbGVzIGFyZSBhZmZlY3RlZDoKCgkqIGNvbmZpZ3VyZS5pbjogQWRkIGFybS0qLWxpbnV4LWdudSwgYXJtdjItKi1saW51eCBhbmQgYXJtLSotZWxmCgl0YXJnZXRzLgoKCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KCgkqIGNvbmZpZy9hcm0vYW91dC5oOiBBZGQgZGVmYXVsdCBkZWZpbml0aW9ucyBvZiBSRUdJU1RFUl9QUkVGSVgsCglVU0VSX0xBQkVMX1BSRUZJWCBhbmQgTE9DQUxfTEFCRUxfUFJFRklYLiAgTWFrZSBvdGhlciBtYWNybwoJZGVmaW5pdGlvbnMgY29uZGl0aW9uYWwgb24gdGhlaXIgbm90IGhhdmluZyBiZWVuIGFscmVhZHkgZGVmaW5lZC4KCgkqIGNvbmZpZy9hcm0vbGluMWZ1bmNzLmFzbTogQWRkIEVMRiBvbmx5IG1hY3JvcyB0byBnZW5lcmF0ZSAuc2l6ZQoJYW5kIC50eXBlIGRpcmVjdGl2ZXMsIGFuZCBhZGQgIihQTFQpIiBxdWFsaWZpY2F0aW9uIHRvIGZ1bmN0aW9uCgljYWxscy4KCgkqIGNvbmZpZy9hcm0vbGludXguaDogRGVsZXRlZC4gIFRoaXMgZmlsZSBpcyBub3cgc3VwZXJzZWRlZCBieQoJZWl0aGVyIGxpbnV4LWVsZi5oIG9yIGxpbnV4LWFvdXQuaC4KCgkqIGNvbmZpZy9hcm0vbGludXgtZ2FzLmg6IERlZmluZSBgaW5oaWJpdF9saWJjJyBpZiBjcm9zcy1jb21waWxpbmcuCgkoQ0xFQVJfSU5TTl9DQUNIRSk6IE5ldyBtYWNybywgY3VycmVudGx5IGRpc2FibGVkIChhd2FpdGluZyBrZXJuZWwKCXN1cHBvcnQpLgoJTW92ZSBkZWZpbml0aW9ucyBmcm9tIG9sZCBsaW51eC5oIGZpbGUgaGVyZS4KCgkqIGNvbmZpZy9hcm0vZWxmLmg6IE5ldyBmaWxlLiAgR2VuZXJpYyBBUk0vRUxGIHN1cHBvcnQuCgoJKiBjb25maWcvYXJtL2xpbnV4LWFvdXQuaDogTmV3IGZpbGUuICBTdXBwb3J0IGZvciBMaW51eCB3aXRoIGEub3V0LgoKCSogY29uZmlnL2FybS9saW51eC1lbGYuaDogTmV3IGZpbGUuICBTdXBwb3J0IGZvciBMaW51eCB3aXRoIEVMRi4KCgkqIGNvbmZpZy9hcm0vbGludXgtZWxmMjYuaDogTmV3IGZpbGUuICBTdXBwb3J0IGZvciBMaW51eCB3aXRoIEVMRgoJdXNpbmcgdGhlIDI2Yml0IEFQQ1MuCgoJKiBjb25maWcvYXJtL3Vua25vd24tZWxmLmg6IE5ldyBmaWxlLiAgU3VwcG9ydCBmb3IgT1MnZXMgb3RoZXIKCXRoYW4gTGludXggd2l0aCBFTEYuCgoJKiBjb25maWcvYXJtL3QtYXJtLWVsZjogTmV3IGZpbGUuICBtYWtlZmlsZSBmcmFnbWVudCBmb3IgYXJtLWVsZgoJYnVpbGRzLgoKCSogY29uZmlnL2FybS9jb2ZmLmg6IEluY2x1ZGUgYW91dC5oIGZvciBiYXNpYyBhc3NlbWJsZXIgbWFjcm9zLgoJQWRkIHN1cHBvcnQgZm9yIC1tc3RydWN0dXJlX3NpemVfYm91bmRhcnk9PG4+IGNvbW1hbmQgbGluZSBvcHRpb24uCgoJKiBjb25maWcvYXJtL2FybS5oOiBBZGQgc3VwcG9ydCBmb3IgLW1zdHJ1Y3R1cmVfc2l6ZV9ib3VuZGFyeT08bj4KCWNvbW1hbmQgbGluZSBvcHRpb24uICBNYWtlIG1hY3JvIGRlZmluaXRpb25zIGNvbmRpdGlvbmFsIG9uIHRoZWlyCglub3QgaGF2aW5nIGJlZW4gYWxyZWFkeSBkZWZpbmVkLgoKCSogY29uZmlnL2FybS9hcm0uYzogQWRkIHN1cHBvcnQgZm9yIC1tc3RydWN0dXJlX3NpemVfYm91bmRhcnk9PG4+Cgljb21tYW5kIGxpbmUgb3B0aW9uLgoKClR1ZSBPY3QgMjcgMDg6NTY6NDYgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZHdhcmZvdXQuYyAoQVNNX09VVFBVVF9EV0FSRl9TVFJJTkdfTkVXTElORSk6IEFTTV9PVVRQVVRfRFdBUkZfU1RSSU5HCgloYXMgYmVlbiBjaGFuZ2VkIHRvIG5vdCBpbmNsdWRlIGEgbmV3bGluZS4gVXNlIHRoaXMgbWFjcm8gaW5zdGVhZC4KCShvdXRwdXRfZW51bWVyYWxfbGlzdCwgY29uc3RfdmFsdWVfYXR0cmlidXRlLCBuYW1lX2F0dHJpYnV0ZSwKCWNvbXBfZGlyX2F0dHJpYnV0ZSwgcHJvdG90eXBlZF9hdHRyaWJ1dGUsIHByb2R1Y2VyX2F0dHJpYnV0ZSwKCWlubGluZV9hdHRyaWJ1dGUsIHB1cmVfb3JfdmlydHVhbF9hdHRyaWJ1dGUsIG91dHB1dF9pbmhlcml0YW5jZV9kaWUsCglkd2FyZm91dF9maWxlX3Njb3BlX2RlY2wsIGdlbmVyYXRlX25ld19zZm5hbWVfZW50cnksCglnZW5lcmF0ZV9tYWNpbmZvX2VudHJ5LCBkd2FyZm91dF9pbml0LCBkd2FyZm91dF9maW5pc2gpOiBVc2UKCUFTTV9PVVRQVVRfRFdBUkZfU1RSSU5HX05FV0xJTkUgbWFjcm8uCgpNb24gT2N0IDI2IDEzOjM1OjAyIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb21iaW5lLmMgKHN1YnN0KTogUHJvY2VzcyB0aGUgaW5wdXRzIHRvIGEgcGFyYWxsZWwgYXNtX29wZXJhbmRzCglvbmx5IG9uY2UuCgpNb24gT2N0IDI2IDEzOjMyOjMxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBzdG10LmMgKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBBY2NlcHQgYD0nIG9yIGArJyBhdCBhbnkgcG9zaXRpb24uCgpNb24gT2N0IDI2IDEyOjUzOjE0IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHRtLnRleGkgKEFTTV9PVVRQVVRfTUFYX1NLSVBfQUxJR04pOiBEb2N1bWVudC4KCk1vbiBPY3QgMjYgMDA6MzY6NTggMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpTdW4gT2N0IDI1IDIzOjM2OjUyIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHN0bXQuYyAoZXhwYW5kX2ZpeHVwKTogU2V0IGZpeHVwLT5iZWZvcmVfanVtcCB0byBhCglOT1RFX0lOU05fREVMRVRFRCBpbnN0ZWFkIG9mIGEgTk9URV9JTlNOX0JMT0NLX0JFRy4KClN1biBPY3QgMjUgMTU6NDk6NTcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHJlY29nLm8pOiBEZXBlbmQgb24gdG9wbGV2LmguCgkoaW5zbi1lbWl0Lm8pOiBEZXBlbmQgb24gcmVjb2cuaC4KCShpbnNuLXBlZXAubyk6IERlcGVuZCBvbiByZWNvZy5oIGFuZCBpbnNuLWNvbmZpZy5oLgoKCSogY29tYmluZS5jIChzaW1wbGlmeV9zZXQpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBzY3JhdGNoZXMnLgoKCSogZmluYWwuYyAoZmluYWxfc2Nhbl9pbnNuKTogV3JhcCBkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZXMgYHZsZW4nCglhbmQgYGlkeCcgaW4gbWFjcm8gY29uZGl0aW9uYWwgY29udHJvbGxpbmcgdGhlaXIgdXNlLgoKCSogZ2VuZW1pdC5jIChtYWluKTogTWFrZSB0aGUgZ2VuZXJhdGVkIG91dHB1dCBmaWxlIGluY2x1ZGUKCXJlY29nLmguICBEb24ndCBoYXZlIGl0IGRlY2xhcmUgYGluc25fb3BlcmFuZF9jb25zdHJhaW50Jywgc2luY2UKCXdlIGdldCBpdCBmcm9tIHJlY29nLmguCgoJKiBnZW5wZWVwLmMgKG1haW4pOiBNYWtlIHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGZpbGUgaW5jbHVkZQoJaW5zbi1jb25maWcuaCBhbmQgcmVjb2cuaC4KCgkqIHJlY29nLmM6IEluY2x1ZGUgdG9wbGV2LmguCgkoZXh0cmFjdF9pbnNuKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgcCcuCgoJKiByZWdjbGFzcy5jIChmaXhfcmVnaXN0ZXIpOiBBZGQgbWlzc2luZyBicmFjZXMgYXJvdW5kIGluaXRpYWxpemVyCglmb3IgYHdoYXRfb3B0aW9uJy4KCShhbGxvY2F0ZV9yZWdfaW5mbyk6IE1vdmUgdmFyaWFibGUgYGknIGludG8gdGhlIHNjb3BlIHdoZXJlIGl0IGlzCgl1c2VkLiAgQ2hhbmdlIGl0cyB0eXBlIHRvIGBzaXplX3QnLgoKU3VuIE9jdCAyNSAxMzoxMDoxNSAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiByZWxvYWQuYyAocHVzaF9yZWxvYWQpOiBXaGVuIG1lcmdpbmcgcmVsb2FkcywgbWFrZSBzdXJlCgl0aGF0IHJlbG9hZF9pbl9yZWcgYW5kIHJlbG9hZF9pbiBhcmUgZnJvbSB0aGUgc2FtZSByZWxvYWQgaW4KCWFsbCBjYXNlcy4KClN1biBPY3QgMjUgMTI6MDc6MDAgMTk5OCAgTXVtaXQgS2hhbiAgPGtoYW5AeHJheWxpdGgud2lzYy5lZHU+CgoJKiBpMzg2L2NydGRsbC5oIChDUFBfUFJFREVGSU5FUyk6IEZpeCB0eXBvLgoJKiBpMzg2L21pbmd3MzIuaCAoQ1BQX1BSRURFRklORVMpOiBMaWtld2lzZS4KCkZyaSBPY3QgMjMgMjM6NDI6MDMgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogbG9vcC5jIChsb29wX2hhc190YWJsZWp1bXApOiBOZXcgdmFyaWFibGUuCgkocHJlc2Nhbl9sb29wKTogU2NhbiBmb3IgaXQuCgkoaW5zZXJ0X2JjdCk6IFJlcGxhY2UgZXhwbGljaXQgc2NhbiB3aXRoIHVzZSBvZiBpdC4KCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBSZXN0b3JlIGxvb3AgdmFyaWFibGUgai4KCShyZWNvcmRfcmVnX2NsYXNzZXMpOiBEZXRlcmluZSBvcF90eXBlcyBtb2RpZmllcnMgYW5kIGluaXRpYWxpemUKCWNsYXNzZXNbaV0gYmVmb3JlIG1hdGNoaW5nIGNvbnN0cmFpbnRzLiAgSGFuZGxlIG1hdGNoaW5nCgljb25zdHJhaW50cyA1LTkuCgpGcmkgT2N0IDIzIDEzOjU1OjQ4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIG0zMnIvbTMyci5jIChnZW5fc3BsaXRfbW92ZV9kb3VibGUpOiBDYWxsIGFsdGVyX3N1YnJlZy4gIERlbGV0ZQoJc3VicmVnIHN1cHBvcnQuCgpGcmkgT2N0IDIzIDE2OjE5OjI0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIG1pcHMuaCAoRVhUUkFfU1BFQ1MpOiBBZGQgbWlzc2luZyBpbml0aWFsaXplcnMuCgpGcmkgT2N0IDIzIDE2OjA4OjM5IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHNwYXJjLmggKEVYVFJBX1NQRUNTKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoJKHNwYXJjX2RlZmVyX2Nhc2VfdmVjdG9yKTogUHJvdmlkZSBhIHByb3RvdHlwZS4KCgkqIHN2cjQuaCAoQVNNX09VVFBVVF9BU0NJSSk6IENhc3QgU1RSSU5HX0xJTUlUIHRvIChsb25nKSB3aGVuCgljb21wYXJpbmcgaXQgdG8gdGhlIHJlc3VsdCBvZiBhIHBvaW50ZXIgc3VidHJhY3Rpb24uCgpGcmkgT2N0IDIzIDE1OjM0OjE0IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFscGhhLmMgKG92ZXJyaWRlX29wdGlvbnMpOiBVc2UgSVNESUdJVCgpLCBub3QgaXNkaWdpdCgpLiAgQ2FzdAoJdGhlIGFyZ3VtZW50IHRvICh1bnNpZ25lZCBjaGFyKS4KCgkqIGFscGhhLmggKEVYVFJBX1NQRUNTKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoJKEFTTV9HRU5FUkFURV9JTlRFUk5BTF9MQUJFTCk6IEVuc3VyZSB0aGUgYXJndW1lbnQgbWF0Y2hlcyB0aGUKCWZvcm1hdCBzcGVjaWZpZXIuCgpGcmkgT2N0IDIzIDEzOjEyOjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpc18xKTogRW5hYmxlICJyZXNjYW4iIGNvZGUgYWZ0ZXIgcmVsb2FkLgoJKHByb3BhZ2F0ZV9ibG9jayk6IERlbGV0ZSBkZWFkIGNvZGUgYWZ0ZXIgcmVsb2FkLgoKCSogc2NoZWQuYyAodXBkYXRlX2Zsb3dfaW5mbyk6IFJldmVydCBPY3QgMTksIDE5OTggY2hhbmdlLiAgQnJpbmdzCgliYWNrIE9jdCAxNSwgMTk5OCBjaGFuZ2UuCgkqIGhhaWZhLXNjaGVkLmMgKHVwZGF0ZV9mbG93X2luZm8pOiBMaWtld2lzZS4KCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBEZWxldGUgQ0xPQkJFUiBpbnNucyBhZnRlciByZWxvYWQuCgoJKiBtbjEwMjAwLm1kICh0cnVuY2F0ZWQgc2hpZnQpOiBBY2NlcHQgY29uc3RhbnQgaW5wdXRzIHRvby4KCkZyaSBPY3QgMjMgMDQ6MDY6NTcgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBtYWNobW9kZS5oIChtb2RlX21hc2tfYXJyYXkpOiBObyBsb25nZXIgY29uc3QuCgkqIHJ0bC5jIChpbml0X3J0bCk6IEZ1bGx5IGluaXRpYWxpemUgaXQgaWYgRVhUUkFfQ0NfTU9ERVMgZGVmaW5lZC4KCkZyaSBPY3QgMjMgMTE6MTk6MDYgMTk5OCAgTWFydGluIHYuIEz2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZnJhbWUuYzogU29tZXdoYXQgZXhwbGFpbiBgRkRFJy4KCVN1Z2dlc3RlZCBieSBCcmVuZGFuIEtlaG9lCgpGcmkgT2N0IDIzIDAwOjU2OjExIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAocGVuZGluZ19jaGFpbik6IE1vdmUgdXAuCgkoc2F2ZV9leHByX3N0YXR1cyk6IERvIHNhdmUgcGVuZGluZ19jaGFpbi4KCShyZXN0b3JlX2V4cHJfc3RhdHVzKTogQW5kIHJlc3RvcmUgaXQuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IEFkZCBwZW5kaW5nX2NoYWluLgoKMTk5OC0xMC0yMyAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiByZW9yZy5jIChyZWxheF9kZWxheV9zbG90cyk6IEZpeGVkIHRlc3QgZm9yIG1vc3RseV90cnVlX2p1bXAuIFRoZQoJZGlkIG5vdCBtYXRjaCB0aGUgY29kZS4KCkZyaSBPY3QgMjMgMDA6MDc6MDEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVnY2xhc3MuYyAocmVnY2xhc3MpOiBCcmVhayBvdXQgc29tZSBjb2RlIGludG8gbmV3IGZ1bmN0aW9uCglzY2FuX29uZV9pbnNuLCBhbmQgaW50byByZWdjbGFzc19pbml0LgoJKGluaXRfY29zdCk6IE5ldyBzdGF0aWMgdmFyaWFibGUsIG1vdmVkIG91dCBvZiByZWdjbGFzcy4KCShyZWdjbGFzc19pbml0KTogSW5pdGlhbGl6ZSBpdCBoZXJlLCBub3QgaW4gLgoJKHNjYW5fb25lX2luc24pOiBOZXcgc3RhdGljIGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHJlZ2NsYXNzLgoJKiByZWNvZy5jIChhcHBseV9jaGFuZ2VfZ3JvdXApOiBCcmVhayBvdXQgc29tZSBjb2RlIGludG8gbmV3CglmdW5jdGlvbiBpbnNuX2ludmFsaWRfcC4KCShpbnNuX2ludmFsaWRfcCk6IE5ldyBzdGF0aWMgZm4sIGJyb2tlbiBvdXQgb2YgYXBwbHlfY2hhbmdlX2dyb3VwLgoKVGh1IE9jdCAyMiAyMjozNDo0MiAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBXaGVuIHJld3JpdGUgUE9TVF9JTkMsIHZlcmlmeQoJcmVnX3JlbG9hZGVkX2NvbnRlbnRzIG1hdGNoZXMgaW5jcmVtZW50ZWQgcHNldWRvLgoKCSogdjg1MC92ODUwLmMgKHY4NTBfcmVvcmcpOiBDYWxsIGFsdGVyX3N1YnJlZy4gIERlbGV0ZSBzdWJyZWcgc3VwcG9ydC4KCkZyaSBPY3QgMjMgMTE6MTE6NTYgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogcnRsLmRlZiAoUE9TVF9NT0RJRlksIFBSRV9NT0RJRlkpOiBOZXcgZ2VuZXJhbGl6ZWQgb3BlcmF0b3JzIGZvcgoJYWRkcmVzc2luZyBtb2RlcyB3aXRoIHNpZGUgZWZmZWN0cy4gIFRoZXNlIGFyZSBjdXJyZW50bHkKCXBsYWNlaG9sZGVycyBmb3IgdGhlIEM0eCB0YXJnZXQuCgpUaHUgT2N0IDIyIDE2OjQ2OjM1IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGxvb3AuYyAoZXhwcmVzc19mcm9tKTogTWFrZSBzdXJlIHRoYXQgd2hlbiBnZW5lcmF0aW5nIGEgUExVUyBvZgoJYSBQTFVTLCBhbnkgY29uc3RhbnQgZXhwcmVzc2lvbiBhcHBlYXJzIG9uIHRoZSBvdXRlcm1vc3QgUExVUy4KClRodSBPY3QgMjIgMTU6NDY6MjMgMTk5OCAgUGVyIEJvdGhuZXIgIChib3RobmVyQGN5Z251cy5jb20pCgoJKiBNYWtlZmlsZS5pbiAoZGlzdGRpci1jdnMsIGRpc3RkaXItc3RhcnQpOiBDbGVhbiB1cCBzbyBpdAoJd29ya3MgaWYgIiQoc3JjZGlyKSIgIT0gIi4iLgoKV2VkIE9jdCAyMSAxOToyMzo1OSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBleHBtZWQuYyAoc3RvcmVfYml0X2ZpZWxkKTogSWYgbmVlZCB0byBhZGQgYSBTVUJSRUcsIHRoZW4gcmVtb3ZlCglleGlzdGluZyBTVUJSRUcgaWYgd2UgY2FuLCBvdGhlcndpc2UgYWJvcnQuCgpXZWQgT2N0IDIxIDA5OjU4OjUxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjLWNvbW1vbi5jIChjX2FwcGx5X3R5cGVfcXVhbHNfdG9fZGVjbCk6IERvbid0IGNyYXNoIHdoZW4KCWByZXN0cmljdCcgaXMgYXBwbGllZCB0byBhIG5vbi1wb2ludGVyIHZhcmlhYmxlLgoKV2VkIE9jdCAyMSAwOToxODo1OCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogaW52b2tlLnRleGk6IERvY3VtZW50IC1mbGFuZy1pc29jOXguCgoJKiBNYWtlZmlsZS5pbiAoT0JKUyk6IEFkZCBzcGxheS10cmVlLm8uCgkoYy1jb21tb24ubyk6IERlcGVuZCBvbiBydGwuaC4KCShzcGxheS10cmVlLm8pOiBMaXN0IGRlcGVuZGVuY2llcyBhbmQgcHJvdmlkZSBidWlsZCBydWxlLgoKCSogcnRsLmggKHJlY29yZF9hbGlhc19zdWJzZXQpOiBOZXcgZnVuY3Rpb24uCgkqIGFsaWFzLmM6IEluY2x1ZGUgc3BsYXktdHJlZS5oLgoJKGFsaWFzX3NldF9lbnRyeSk6IE5ldyB0eXBlLgoJKENIRUNLX0FMSUFTX1NFVFNfRk9SX0NPTlNJU1RFTkNZKTogUmVtb3ZlLgoJKERJRkZFUkVOVF9BTElBU19TRVRTX1ApOiBVc2UgbWVtX2luX2Rpc2pvaW50X2FsaWFzX3NldHNfcC4KCShtZW1zX2luX2Rpc2pvaW5fYWxpYXNfc2V0c19wKTogTmV3IGZ1bmN0aW9uLgoJKGFsaWFzX3NldF9jb21wYXJlKTogTGlrZXdpc2UuCgkoaW5zZXJ0X3N1YnNldF9jaGlsZHJlbik6IExpa2V3aXNlLgoJKGdldF9hbGlhc19zZXRfZW50cnkpOiBMaWtld2lzZS4KCgkqIHRyZWUuaCAoVFlQRV9SRVNUUklDVCk6IE5ldyBtYWNyby4KCShUWVBFX1VOUVVBTElGSUVEKTogTmV3IG1hbmlmZXN0IGNvbnN0YW50LgoJKFRZUEVfUVVBTF9DT05TVCk6IExpa2V3aXNlLgoJKFRZUEVfUVVBTF9WT0xBVElMRSk6IExpa2V3aXNlLgoJKFRZUEVfUVVBTF9SRVNUUklDVCk6IExpa2V3aXNlLgoJKHRyZWVfdHlwZSk6IEFkZCByZXN0cmljdF9mbGFnLiAgUmVkdWNlIGNvdW50IG9mIGZyZWUgYml0cy4KCShERUNMX1BPSU5URVJfQUxJQVNfU0VUKTogTmV3IG1hY3JvLgoJKERFQ0xfUE9JTlRFUl9BTElBU19TRVRfS05PV05fUCk6IExpa2V3aXNlLgoJKHRyZWVfZGVjbCk6IEFkZCBwb2ludGVyX2FsaWFzX3NldC4KCShidWlsZF9xdWFsaWZpZWRfdHlwZSk6IE5ldyBmdW5jdGlvbi4KCShidWlsZF90eXBlX3ZhcmlhbnQpOiBEZWZpbmUgaW4gdGVybXMgb2YgYnVpbGRfcXVhbGlmaWVkX3R5cGUuCgkqIHRyZWUuYyAoc2V0X3R5cGVfcXVhbHMpOiBOZXcgZnVuY3Rpb24uCgkobWFrZV9ub2RlKTogSW5pdGlhbGl6ZSBERUNMX1BPSU5URVJfQUxJQVNfU0VULgoJKGJ1aWxkX3R5cGVfYXR0cmlidXRlX3ZhcmlhbnQpOiBVc2UgYnVpbGRfcXVhbGlmaWVkX3R5cGUgYW5kCglzZXRfdHlwZV9xdWFscy4KCShidWlsZF90eXBlX3ZhcmlhbnQpOiBSZW5hbWUsIGFuZCBtb2RpZnksIHRvIGJlY29tZS4uLgoJKGJ1aWxkX3F1YWxpZmllZF90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGJ1aWxkX2NvbXBsZXhfdHlwZSk6IFVzZSBzZXRfdHlwZV9xdWFscy4KCgkqIGMtdHJlZS5oIChDX1RZUEVfT0JKRUNUX1ApOiBOZXcgbWFjcm8uCgkoQ19UWVBFX0ZVTkNUSU9OX1ApOiBMaWtld2lzZS4KCShDX1RZUEVfSU5DT01QTEVURV9QKTogTGlrZXdpc2UuCgkoQ19UWVBFX09CSkVDVF9PUl9JTkNPTVBMRVRFX1ApOiBMaWtld2lzZS4KCShjX2FwcGx5X3R5cGVfcXVhbHNfdG9fZGVjbCk6IE5ldyBmdW5jdGlvbi4KCShjX2J1aWxkX3F1YWxpZmllZF90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGNfYnVpbGRfdHlwZV92YXJpYW50KTogRGVmaW5lIGluIHRlcm1zIG9mIGNfYnVpbGRfcXVhbGlmaWVkX3R5cGUuCgkoZmxhZ19pc29jOXgpOiBEZWNsYXJlLgoJKiBjLXR5cGVjay5jIChxdWFsaWZ5X3R5cGUpOiBVc2UgY19idWlsZF9xdWFsaWZpZWRfdHlwZS4KCShjb21tb25fdHlwZSk6IENoYW5nZSB0byB1c2UgVFlQRV9RVUFMUy4KCShjb21wdHlwZXMpOiBMaWtld2lzZS4KCShjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KTogTGlrZXdpc2UuCgkqIGMtYXV4LWluZm8uYyAoZ2VuX3R5cGUpOiBMaWtld2lzZS4gIERlYWwgd2l0aCBgcmVzdHJpY3QnLgoJKiBjLWRlY2wuYyAoZmxhZ19pc29jOXgpOiBEZWZpbmUuCgkoY19kZWNvZGVfb3B0aW9uKTogSGFuZGxlIC1mbGFuZy1pc29jOXguCgkoZ3Jva2RlY2xhcmF0b3IpOiBVcGRhdGUgdG8gaGFuZGxlIHJlc3RyaWN0LiAgVXNlIFRZUEVfUVVBTFMsCgljX2J1aWxkX3F1YWxpZmllZF90eXBlLCBldGMuICBVc2UgY19hcHBseV90eXBlX3F1YWxzX3RvX2RlY2wuCgkqIGMtbGV4LmMgKGluaXRfbGV4KTogRGVhbCB3aXRoIHJlc3RyaWN0LgoJKGluaXRfbGV4KTogRG9uJ3QgdHJlYXQgcmVzdHJpY3QgYXMgYSByZXNlcnZlZCB3b3JkIGluCgktdHJhZGl0aW9uYWwgbW9kZSwgb3Igd2l0aG91dCAtZmxhbmctaXNvYzl4LgoJKiBjLWxleC5oIChyaWQpOiBBZGQgUklEX1JFU1RSSUNULgoJKiBjLXBhcnNlLmdwZXJmIChyZXN0cmljdCwgX19yZXN0cmljdCwgX19yZXN0cmljdF9fKTogTWFrZQoJZXF1aXZhbGVudCB0byBSSURfUkVTVFJJQ1QuCgkqIGMtcGFyc2UuaW4gKFRZUEVfUVVBTCk6IFVwZGF0ZSBjb21tZW50LgoJKiBjLWNvbW1vbi5jOiBJbmNsdWRlIHJ0bC5oLgoJKGNfZmluZF9iYXNlX2RlY2wpOiBOZXcgZnVuY3Rpb24uCgkoY19idWlsZF90eXBlX3ZhcmlhbnQpOiBSZW5hbWUsIGFuZCBtb2RpZnksIHRvIGJlY29tZSAuLi4KCShjX2J1aWxkX3F1YWxpZmllZF90eXBlKTogTmV3IGZ1bmN0aW9uLgoJKGNfYXBwbHlfdHlwZV9xdWFsc190b19kZWNsKTogTGlrZXdpc2UuCgkoY19nZXRfYWxpYXNfc2V0KTogRm9yIElORElSRUNUX1JFRnMsIGNoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZmluZAoJYSBwYXJ0aWN1bGFyIGFsaWFzIHNldCBmb3IgdGhlIHJlZmVyZW5jZS4KCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogQWRkIC1mbGFuZy1pc29jOXguCgpXZWQgT2N0IDIxIDA5OjE1OjA2IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5oIChUQVJHRVRfU1dJVENIRVMpOiBEb2N1bWVudCBhcm0gc3BlY2lmaWMKCWNvbW1hbmQgbGluZSBzd2l0Y2hlcy4KClR1ZSBPY3QgMjAgMTA6MDQ6NTEgMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiByZWxvYWQuYyAobG9jX21lbnRpb25lZF9pbl9wKTogQWRkIG1pc3NpbmcgYnJhY2VzIHRvIGJpbmQKCWVsc2UgdG8gY29ycmVjdCBpZi4KCk1vbiBPY3QgMTkgMTY6MzQ6MDUgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ2NjLmMgKG9wdGlvbl9tYXApOiBBZGRlZCAtLWNsYXNzcGF0aCBhbmQgLS1DTEFTU1BBVEguCgpUdWUgT2N0IDIwIDEwOjU5OjAyIDE5OTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogcmVnY2xhc3MuYyAoZml4X3JlZ2lzdGVyKTogQWRkIGVycm9yIG1lc3NhZ2UuCgkqIGludm9rZS50ZXhpICgtZmNhbGwtdXNlZC1SRUcsLWZjYWxsLXNhdmVkLVJFRyk6IE5vdGUgdGhlCgkgIG5ldyBlcnJvciBtZXNzYWdlLgoKVHVlIE9jdCAyMCAxMDoxMjoxNyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjLWRlY2wuYyAod2Fybl9taXNzaW5nX25vcmV0dXJuKTogTmV3IGdsb2JhbCB2YXJpYWJsZS4KCShjX2RlY29kZV9vcHRpb24pOiBDaGVjayBmb3IgbmV3IGZsYWdzIC1Xe25vLX1taXNzaW5nLW5vcmV0dXJuLgoJKGZpbmlzaF9mdW5jdGlvbik6IEltcGxlbWVudCBtaXNzaW5nIG5vcmV0dXJuIHdhcm5pbmcuCgoJKiBjLXRyZWUuaCAod2Fybl9taXNzaW5nX25vcmV0dXJuKTogRGVjbGFyZSBleHRlcm4uCgoJKiBpbnZva2UudGV4aTogRG9jdW1lbnQgbmV3IGZsYWdzLgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogQWRkIGRlc2NyaXB0aW9uLgoKVHVlIE9jdCAyMCAyMjoxNjoxMSAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jIChjNHhfcGFyYWxsZWxfcHJvY2Vzcyk6IERpc2FibGUgdW50aWwgQkNUCglsb29wIG9wdGltaXphdGlvbiBzdGFibGUgZm9yIHRoZSBDNHguCgkoYzR4X3JwdGJfaW5mb190LCBjNHhfZHVtcCwgYzR4X3JwdGJfaW5fcmFuZ2UsIGM0eF9ycHRiX3VuanVtcGVkX2xvb3AsCgljNHhfcnB0Yl9maW5kX2NvbXBfYW5kX2p1bXAsIGM0eF9ycHRiX2xvb3BfaW5mb19nZXQsCgljNHhfcnB0Yl9lbWl0X2luaXQsIGM0eF9ycHRiX3Byb2Nlc3MpOiBEZWxldGVkIChzdXBlcnNlZGVkIGJ5IEJDVAoJbG9vcCBvcHRpbWl6YXRpb24pLgoJKGM0eF9hZGRyZXNzX2NvbmZsaWN0KTogQmUgbW9yZSBwYXJhbm9pZCB3aGVuIHBhY2tpbmcgYSB2b2xhdGlsZQoJbWVtcmVmIGluIGEgcGFyYWxsZWwgbG9hZC9zdG9yZS4KClR1ZSBPY3QgMjAgMjE6NTY6MDUgMTk5OCAgTWljaGFlbCBIYXllcyAgPG0uaGF5ZXNAZWxlYy5jYW50ZXJidXJ5LmFjLm56PgoKCSogY29uZmlnL2M0eC9jNHgubWQgKHJlcGVhdF9ibG9ja190b3AsIHJlcGVhdF9ibG9ja19lbmQsCglyZXBlYXRfYmxvY2tfZmlsbGVyKTogRGVsZXRlZC4KCSgqYXNobHFpM19zZXQsICphc2hycWkzX2NvbnN0X3NldCwgKmFzaHJxaTNfbm9uY29uc3RfY2xvYmJlcik6CglDb25kaXRpb24gY29kZSBub3Qgc2V0IGlmIGRlc3RpbmF0aW9uIHJlZ2lzdGVyIGZyb20gJ2MnIGNsYXNzLgoJKCpzdWJicWkzX2NhcnJ5X2Nsb2JiZXIpOiBGaXggdHlwby4KCjE5OTgtMTAtMTggIEhlcm1hbiBBLkouIHRlbiBCcnVnZ2UgIDxIYWouVGVuLkJydWdnZUBuZXQuSENDLm5sPgoKCSogcmVvcmcuYyAoc3RlYWxfZGVsYXlfbGlzdF9mcm9tX3RhcmdldCk6IENoZWNrIGZvciBpbnNucyB0aGF0Cgltb2RpZnkgdGhlIGNvbmRpdGlvbiBjb2RlcyBhbmQgZWZmZWN0IHRoZSBkaXJlY3Rpb24gb2YgdGhlIGp1bXAKCWluIHRoZSBzZXF1ZW5jZS4KClNhdCBPY3QgMTcgMTM6MDk6MDkgMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IFJlcGxhY2UgY2FsbCB0bwoJZW1pdF9pbnNuc19iZWZvcmUoKSB3aXRoIGVtaXRfaW5zbl9iZWZvcmUoKS4KCk1vbiBPY3QgMTkgMTk6MzQ6MDMgMTk5OCAgTWlrZSBTdHVtcCAgPG1yc0B3cnMuY29tPgoKCSogbGliZ2NjMi5jIChfX3B1cmVfdmlydHVhbCk6IENhbGwgX190ZXJtaW5hdGUgaW5zdGVhZCBvZiBfZXhpdC4KCk1vbiBPY3QgMTkgMTM6MjY6MjQgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSoganVtcC5jIChzZXRzX2NjMF9wKTogQ29tcGlsZSBvbmx5IGlmIEhBVkVfY2MwLgoKTW9uIE9jdCAxOSAxMTo0MDo1NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBnY3NlLmMgKGNvbXB1dGVfaGFzaF90YWJsZSk6IENvcnJlY3RseSBpZGVudGlmeSBoYXJkIHJlZ3Mgd2hpY2ggYXJlCgljbG9iYmVyZWQgYWNyb3NzIGNhbGxzLgoKCSogbG9vcC5jIChzY2FuX2xvb3ApOiBCZSBtb3JlIHNlbGVjdGl2ZSBhYm91dCB3aGF0IGludmFyaWFudHMgYXJlCgltb3ZlZCBvdXQgb2YgYSBsb29wLgoKTW9uIE9jdCAxOSAxMDo0Njo1OCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBPY3QgMTkgMTE6NDA6NTYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbGliZ2NjMi5jIChlaF9jb250ZXh0X3N0YXRpYyk6IERvIG5vdCBjYWxsIG1hbGxvYyB0byBhbGxvY2F0ZSB0aGUKCXN0YXRpYyBlaF9jb250ZXh0IHN0cnVjdHVyZS4KCk1vbiBPY3QgMTkgMTA6NDU6NDAgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogY29tYmluZS5jIChyZWNvZ19mb3JfY29tYmluZSk6IExvc2UgUEFEREVEX1NDUkFUQ0hFUyBhcmcuICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCSh0cnlfY29tYmluZSk6IERvbid0IHVwZGF0ZSBtYXhfc2NyYXRjaC4KCSogZmxvdy5jIChtYXhfc2NyYXRjaCwgbnVtX3NjcmF0Y2gpOiBEZWxldGUgdmFyaWFibGVzLgoJKGxpZmVfYW5hbHlzaXNfMSk6IERvbid0IGluaXRpYWxpemUgbWF4X3NjcmF0Y2guCgkocHJvcGFnYXRlX2Jsb2NrKTogRG9uJ3QgdXBkYXRlIG1heF9zY3JhdGNoLgoJKG1hcmtfc2V0XzEpOiBEb24ndCBpbmNyZW1lbnQgbnVtX3NjcmF0Y2guCgkqIHJlZ3MuaCAobWF4X3NjcmF0Y2gpOiBEZWxldGUgZGVjbGFyYXRpb24uCgpNb24gT2N0IDE5IDEwOjI4OjE1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJlbG9hZDEuYyAocmVsb2FkX3JlZ19mcmVlX2JlZm9yZV9wKTogSGFjay4gIFJldHVybiAwIGlmIEVRVUlWCglpcyBub256ZXJvLiAgVGhpcyBpcyB0ZW1wb3JhcnkhCgoJKiBzY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogSGFuZGxlIGRlYXRoIG5vdGVzIG1hZGUgaW52YWxpZCBieQoJaW5zdHJ1Y3Rpb24gc3BsaXR0aW5nLiAgUGFydGlhbGx5IHJldmVydHMgT2N0IDE1LCAxOTk4IHBhdGNoLgoJKiBoYWlmYS1zY2hlZC5jICh1cGRhdGVfZmxvd19pbmZvKTogTGlrZXdpc2UuCgpTdW4gT2N0IDE4IDE3OjMxOjI2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZ1bmN0aW9uLmMgKHVuaW5pdGlhbGl6ZWRfdmFyc193YXJuaW5nKTogRG8gbm90IHdhcm4gZm9yIGEgVkFSX0RFQ0wKCWlmIGl0IGhhcyBhIG5vbnplcm8gREVDTF9JTklUSUFMLgoKU2F0IE9jdCAxNyAyMzoxODowOCAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoZmxvdy5vKTogRGVwZW5kIG9uIHJlY29nLmguCgoJKiBjcHBsaWIuaCAoZGlyZWN0aXZlX3RhYmxlKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6aWVycy4KCShmaW5jbHVkZSk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBic2l6ZScgdG8gc2l6ZV90LgoKCSogY3NlLmMgKHJ0eF9jb3N0KTogTWFyayBwYXJhbWV0ZXIgYG91dGVyX2NvZGUnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGR3YXJmb3V0LmggKGR3YXJmb3V0X2xhYmVsKTogV3JhcCBwcm90b3R5cGUgaW4gbWFjcm8gUlRYX0NPREUuCgoJKiBmaXgtaGVhZGVyLmMgKGxvb2t1cF9zdGRfcHJvdG8pOiBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8KCWBpbnQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGNwcF9maWxlX2xpbmVfZm9yX21lc3NhZ2UpOiBNYXJrIHBhcmFtZXRlciBgcGZpbGUnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgkoY3BwX2ZhdGFsKTogTWFyayBwYXJhbWV0ZXIgYHBmaWxlJyB3aXRoIEFUVFJJQlVURV9VTlVTRUQuCgoJKiBmbG93LmM6IEluY2x1ZGUgcmVjb2cuaC4KCShzYml0bWFwX2NvcHkpOiBDYXN0IGFyZ3VtZW50cyAxICYgMiBvZiBgYmNvcHknIHRvIChQVFIpLgoKCSogZnVuY3Rpb24uYyAodGhyZWFkX3Byb2xvZ3VlX2FuZF9lcGlsb2d1ZV9pbnNucyk6IE1hcmsgcGFyYW1ldGVyCglgZicgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKHJlcG9zaXRpb25fcHJvbG9ndWVfYW5kX2VwaWxvZ3VlX25vdGVzKTogTGlrZXdpc2UuCgoJKiBnZW5vcGluaXQuYyAoZ2VuX2luc24pOiBDYXN0IGFyZ3VtZW50IG9mIGN0eXBlIGZ1bmN0aW9ucyB0bwoJYHVuc2lnbmVkIGNoYXInLgoKCSogaGFpZmEtc2NoZWQuYzogSW5jbHVkZSByZWNvZy5oLgoJKGJsb2NrYWdlX3JhbmdlKTogQ2FzdCByZXN1bHQgb2YgVU5JVF9CTE9DS0VEIG1hY3JvIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGxpYmdjYzIuYSAoX190aHJvdyk6IFJldmVydCBBVFRSSUJVVEVfVU5VU0VEIGNoYW5nZSBmb3Igbm93LgoKCSogbWlwcy10ZmlsZS5jIChwYXJzZV9lbmQpOiBDYXN0IHRoZSBhcmd1bWVudCBvZiBjdHlwZSBmdW5jdGlvbiB0bwoJYHVuc2lnbmVkIGNoYXInLgoJKHBhcnNlX2VudCk6IExpa2V3aXNlLgoJKHBhcnNlX2lucHV0KTogTGlrZXdpc2UuCgoJKiBvcHRhYnMuYyAoaW5pdF9saWJmdW5jcyk6IExpa2V3aXNlLgoKCSogcHJvdG9pemUuYyAoZmluZF9yaWdodG1vc3RfZm9ybWFsc19saXN0KTogTGlrZXdpc2UuCgoJKiByZWNvZy5oIChjb25zdF9kb3VibGVfb3BlcmFuZCk6IEZpeCB0eXBvIGluIHByb3RvdHlwZS4KCgkqIHRsaW5rLmMgKHNjYW5fbGlua2VyX291dHB1dCk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGN0eXBlCglmdW5jdGlvbiB0byBgdW5zaWduZWQgY2hhcicuCgoJKiB0b3BsZXYuYyAoY2hlY2tfbGFuZ19vcHRpb24pOiBDYXN0IHRoZSByZXN1bHQgb2YgYHN0cmxlbicgdG8KCWBpbnQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKU2F0IE9jdCAxNyAxMzowOTowOSAxOTk4ICBHcmFoYW0gIDxncmFoYW1zQHJjcC5jby51az4KCgkqIGdjc2UuYyAoZHVtcF9jdWlkX3RhYmxlKTogQ29ycmVjdCB0eXBvLgoKU2F0IE9jdCAxNyAxMTowMjo0NyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKGRpc3BsYXlfaGVscCk6IFByZXBlbmQgJy1tJyB0byB0YXJnZXQgc3BlY2lmaWMKCW9wdGlvbnMuCgkoY2hlY2tfbGFuZ19vcHRpb24pOiBJZ25vcmUgdGV4dCBhZnRlciBlbmQgb2YgZmlyc3Qgd29yZCBvZiBhCglsYW5ndWFnZSBzcGVjaWZpYyBvcHRpb24uCgpTYXQgT2N0IDE3IDAyOjI2OjAzIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIHJlbG9hZDEuYyAocmVnX3VzZWRfYnlfcHNldWRvKTogTmV3IHN0YXRpYyB2YXJpYWJsZS4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBJbml0aWFsaXplIGl0LgoJVXNlIGl0IGluc3RlYWQgb2YgdGVzdGluZyBzcGlsbF9yZWdfb3JkZXIgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYQoJcHNldWRvIGlzIGxpdmUgaW4gYSBoYXJkIHJlZ2lzdGVyIGFjcm9zcyB0aGUgY3VycmVudCBpbnNuLgoJRml4IGEgdHlwbyBpbiBhIHJlZmVyZW5jZSB0byByZWxvYWRfcmVnX3J0eC4KCgkqIGZsb3cuYyAocHJvcGFnYXRlX2Jsb2NrKTogUmVwbGFjZSBjb2RlIHRoYXQgY29tcHV0ZXMgYW5kIHVzZXMKCXJlZ3Nfc29tZXRpbWVzX2xpdmUgd2l0aCBzaW1wbGVyIGNvZGUgdGhhdCBqdXN0IHdhbGtzIHRoZSBzZXQgb2YKCWN1cnJlbnRseSBsaXZlIHJlZ2lzdGVycy4KCgkqIE1ha2VmaWxlLmluIChpbnNuLWV4dHJhY3Qubyk6IEZpeCBkZXBlbmRlbmNpZXMuCgkqIGdlbmV4dHJhY3QuYyAobWFpbik6IEdlbmVyYXRlIGluY2x1ZGVzIGZvciBpbnNuLWNvbmZpZy5oIGFuZAoJcmVjb2cuaC4KCURlbGV0ZSBnZW5lcmF0aW9uIG9mIGRlY2xhcmF0aW9ucyB3aGljaCBhcmUgbm93IGluIHJlY29nLmguCgkqIGdlbnJlY29nLmMgKG1haW4pOiBEZWxldGUgZ2VuZXJhdGlvbiBvZiBkZWZpbml0aW9ucyB3aGljaCBhcmUKCW5vdyBpbiByZWNvZy5jLgoJKiBsb2NhbC1hbGxvYy5jIChibG9ja19hbGxvYyk6IFVzZSBleHRyYWN0X2luc24gYW5kIHRoZSB2YXJpYWJsZXMKCWl0IHNldHMgdXAgaW5zdGVhZCBvZiBsb29raW5nIHVwIHZhbHVlcyBieSBpbnNuX2NvZGUuCgkqIHJlY29nLmMgKHJlY29nX29wZXJhbmQsIHJlY29nX29wZXJhbmRfbG9jLCByZWNvZ19kdXBfbG9jLAoJcmVjb2dfZHVwX251bSk6IERlZmluZSBoZXJlIGluc3RlYWQgb2YgZ2VuZXJhdGluZyB0aGUgZGVmaW5pdGlvbiBpbgoJZ2VucmVjb2cuYy4KCShyZWNvZ19uX29wZXJhbmRzLCByZWNvZ19uX2R1cHMsIHJlY29nX25fYWx0ZXJuYXRpdmVzLAoJcmVjb2dfb3BlcmFuZF9tb2RlLCByZWNvZ19jb25zdHJhaW50cywgcmVjb2dfb3BlcmFuZF9hZGRyZXNzX3ApOgoJTmV3IHZhcmlhYmxlcy4KCShleHRyYWN0X2luc24pOiBOZXcgZnVuY3Rpb24uCgkqIHJlY29nLmggKGV4dHJhY3RfaW5zbik6IERlY2xhcmUgZnVuY3Rpb24uCgkod2hpY2hfYWx0ZXJuYXRpdmUsIHJlY29nX25fb3BlcmFuZHMsIHJlY29nX25fZHVwcywKCXJlY29nX25fYWx0ZXJuYXRpdmVzLCByZWNvZ19vcGVyYW5kX21vZGUsIHJlY29nX2NvbnN0cmFpbnRzLAoJcmVjb2dfb3BlcmFuZF9hZGRyZXNzX3ApOiBEZWNsYXJlIHZhcmlhYmxlcy4KCSogcmVnY2xhc3MuYyAobl9vY2N1cnJlbmNlcyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkqIHJlbG9hZC5jIChuX29jY3VycmVuY2VzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKGZpbmRfcmVsb2Fkcyk6IFVzZSBleHRyYWN0X2luc24uCgkqIHJlbG9hZC5oIChuX29jY3VycmVuY2VzKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoKU2F0IE9jdCAxNyAwMToxNzo1MSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9hc19uZWVkZWQpOiBGaXggdGVzdCBmb3Igd2hlbiB0byBjYWxsCgl1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzLgoKRnJpIE9jdCAxNiAyMDo0MDo1MCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCUZpeCBjb25zaXN0ZW5jeSBwcm9ibGVtcyB3aXRoIHJlZ19lcXVpdl97bWVtLGFkZHJlc3N9OwoJSW1wcm92ZSByZWxvYWQgaW5oZXJpdGFuY2U7CgoJKiByZWxvYWQuYyAocmVsb2FkX291dF9yZWcpOiBOZXcgdmFyaWFibGUuCgkobG9jX21lbnRpb25lZF9pbl9wLCByZW1vdmVfYWRkcmVzc19yZXBsYWNlbWVudHMpOiBOZXcgZnVuY3Rpb25zLgoJKHJlbW92ZV9yZXBsYWNlbWVudHMpOiBEZWxldGVkLgoJKHB1c2hfcmVsb2FkKTogU2V0IHJlbG9hZF9vdXRfcmVnW2ldLgoJV2hlbiBtZXJnaW5nLCBhbHNvIHNldCByZWxvYWRfe2luLG91dH1fcmVnW2ldLCBhbmQgcmVtb3ZlCglkdXBsaWNhdGUgYWRkcmVzcyByZWxvYWRzLgoJKGNvbWJpbmVfcmVsb2Fkcyk6IENvcHkgcmVsb2FkX291dF9yZWdbaV0uCgkoZmluZF9yZWxvYWRzKTogRG8gbWFrZV9tZW1sb2Mgc3Vic3RpdHV0aW9uIGFsc28gd2hlbgoJcmVnX2VxdWl2X21lbW9yeV9sb2NbcmVnbm9dIGFuZCBudW1fbm90X2F0X2luaXRpYWxfb2Zmc2V0CglhcmUgYm90aCBub256ZXJvLgoJSW5jbHVkZSAqcmVjb2dfb3BlcmFuZF9sb2MgaW4gY29tbXV0YXRpdml0eSBvcGVyYW5kIGNoYW5nZXMuCglHZW5lcmF0ZSBvcHRpb25hbCBvdXRwdXQgcmVsb2Fkcy4KCURlbGV0ZSByZWZlcmVuY2UgdG8gbl9tZW1sb2NzLiAgRG9uJ3Qgc2V0ICpyZWNvZ19vcGVyYW5kX2xvYyBiZWZvcmUKCXByb2Nlc3Npbmcgb3BlcmFuZHMuICBDYWxsIG1ha2VfbWVtbG9jIGluIHJlZ19lcXVpdl9hZGRyZXNzIGNvZGUuCglTZXQgKnJlY29nX29wZXJhbmRfbG9jIG9ubHkgYWZ0ZXIgcHJvY2Vzc2luZyBvcGVyYW5kcywgYW5kIG9ubHkKCWlmIHJlcGxhY2UgaXMgdHJ1ZS4gIFJldHVybiBhIHZhbHVlLgoJV2hlbiBjaGFuZ2luZyBhZGRyZXNzIHJlbG9hZCB0eXBlcyBmb3Igb3BlcmFuZHMgdGhhdCBkaWRuJ3QgZ2V0CglyZWxvYWRlZCwgdXNlIFJFTE9BRF9GT1JfT1BBRERSX0FERFJFU1MgZm9yCglSRUxPQURfRk9SX0lOUEFERFJfQUREUkVTUyAvIFJFTE9BRF9GT1JfT1VUQUREUl9BRERSRVNTIHJlbG9hZHMuCglEb24ndCBlbWl0IFVTRXMgZm9yIHBzZXVkbyBTVUJSRUdzIHdoZW4gbm90IHJlcGxhY2luZy4KCShmaW5kX3JlbG9hZHNfYWRkcmVzcyk6IERvIG1ha2VfbWVtbG9jIHN1YnN0aXR1dGlvbiBhbHNvIHdoZW4KCXJlZ19lcXVpdl9tZW1vcnlfbG9jW3JlZ25vXSBhbmQgbnVtX25vdF9hdF9pbml0aWFsX29mZnNldAoJYXJlIGJvdGggbm9uemVyby4KCShmaW5kX3JlbG9hZHNfdG9wbGV2KTogTGlrZXdpc2UuCglDYWxsIG1ha2VfbWVtbG9jIGluIHJlZ19lcXVpdl9hZGRyZXNzIGNvZGUuCgkoZGVidWdfcmVsb2FkX3RvX3N0cmVhbSk6IEFkZCBjb2RlIHRvIG91dHB1dCByZWxvYWRfb3V0X3JlZy4KCShtYWtlX21lbWxvYyk6IERlbGV0ZSBsb2NhbCB2YXJpYWJsZSBpLCBpZmRlZmVkIG91dCBjb2RlLCBhbmQKCXJlZmVyZW5jZXMgdG8gbWVtbG9jcyBhbmQgbl9tZW1sb2NzLgoJKG1lbWxvY3MsIG5fbWVtbG9jcyk6IERlbGV0ZS4KCShwdXNoX3NlY29uZGFyeV9yZWxvYWQpOiBDbGVhciByZWxvYWRfb3V0X3JlZy4KCShmaW5kX3JlbG9hZHNfYWRkcmVzc18xKTogUHJvdmlkZSBtZW1yZWZsb2MgYXJndW1lbnQgdG8gYWxsIGNhbGxzCgl0byBmaW5kX3JlbG9hZHNfYWRkcmVzcy4KCUluIEFVVE9fSU5DIGNvZGUsIGhhbmRsZSBub24tZGlyZWN0bHkgYWRkcmVzc2FibGUgZXF1aXZhbGVuY2VzIHByb3Blcmx5LgoJKiByZWxvYWQuaCAocmVsb2FkX291dF9yZWcsIG51bV9ub3RfYXRfaW5pdGlhbF9vZmZzZXQpOiBEZWNsYXJlLgoJKGZpbmRfcmVsb2Fkcyk6IEFkZCByZXR1cm4gdHlwZS4KCShyZW1vdmVfYWRkcmVzc19yZXBsYWNlbWVudHMsIGRlYWxsb2NhdGVfcmVsb2FkX3JlZyk6IERlY2xhcmUuCgkqIHJlbG9hZDEuYyAobnVtX25vdF9hdF9pbml0aWFsX29mZnNldCk6IE5vIGxvbmdlciBzdGF0aWMuCgkoZGVsZXRlX2FkZHJlc3NfcmVsb2FkcywgZGVsZXRlX2FkZHJlc3NfcmVsb2Fkc18xKTogTGlrZXdpc2UuCgkoZGVhbGxvY2F0ZV9yZWxvYWRfcmVnKTogTmV3IGZ1bmN0aW9uLgoJKHNwaWxsX3JlZ19zdG9yZWRfdG8pOiBOZXcgYXJyYXkuCgkoZWxpbWluYXRlX3JlZ3MpOiBEb24ndCBzdWJzdGl0dXRlIGZyb20gcmVnX2VxdWl2X21lbW9yeV9sb2MuCgkoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IE1vdmUgYXNzaWdubWVudHMgb2YgcHJldmlvdXNfb2Zmc2V0IGFuZAoJbWF4X29mZnNldCBmaWVsZHMsIGFuZCByZWNhbGN1bGF0aW9uIG9mIG51bV9ub3RfYXRfaW5pdGlhbF9vZmZzZXQKCWludG8gbmV3IHN0YXRpYyBmdW5jdGlvbjoKCSh1cGRhdGVfZWxpbWluYWJsZV9vZmZzZXRzKSAuCgkocmVsb2FkX2FzX25lZWRlZCk6IENhbGwgdXBkYXRlX2VsaW1pbmFibGVfb2Zmc2V0cyBhZnRlciBjYWxsaW5nCglmaW5kX3JlbG9hZHMuCglDYWxsIGZvcmdldF9vbGRfcmVsb2Fkc18xIHdpdGggY29udGVudHMgb2YgcmVsb2FkZWQgYXV0b19pbmMKCWV4cHJlc3Npb25zIGlmIHRoZSBhY3R1YWwgYWRkcmVzc2luZyBjYW4ndCBiZSBjaGFuZ2VkIHRvIG1hdGNoIHRoZQoJYXV0b19pbmMuCgkoY2hvb3NlX3JlbG9hZF9yZWdzKTogRm9yIGluaGVyaXRhbmNlLCByZXBsYWNlCglyZWxvYWRfcmVnX2ZyZWVfYmVmb3JlX3AgdGVzdCB3aXRoIHJlbG9hZF9yZWdfdXNlZF9hdF9hbGwgdGVzdCwgYW5kCglyZW1vdmUgc3RhbmQtYWxvbmUgcmVsb2FkX3JlZ191c2VkX2F0X2FsbCB0ZXN0LgoJVXNlIHJlbG9hZF9vdXRfcmVnIHRvIGRldGVybWluZSB3aGljaCByZWxvYWQgcmVncyBoYXZlIG91dHB1dCByZWxvYWRzLgoJVHJlYXQgcmVsb2FkX292ZXJyaWRlX2luIG1vcmUgc2ltaWxhciB0byBpbmhlcml0ZWQgcmVsb2Fkcy4KCUhhbmRsZSAoc3VicmVnIChyZWcuLi4gZm9yIGluaGVyaXRhbmNlLgoJRm9yIGZsYWdfZXhwZW5zaXZlX29wdGltaXphdGlvbnMsIGFkZCBhbiBleHRyYSBwYXNzIHRvIHJlbW92ZQoJdW5uZWNlc3NhcnkgcmVsb2FkcyBmcm9tIGtub3duIHdvcmtpbmcgaW5oZXJpdGFuY2UuCglEZWxldGUgb2Jzb2xldGUgY29kZSBmb3IgcHNldWRvcyByZXBsYWNlZCB3aXRoIE1FTXMuCglIYW5kbGUgaW5oZXJpdGFuY2UgZnJvbSBhdXRvX2luYyBleHByZXNzaW9ucy4KCShlbWl0X3JlbG9hZF9pbnNucyk6IElmIHJlbG9hZF9pbiBpcyBhIE1FTSwgc2V0IE9MRCB0bwoJcmVsb2FkX2luX3JlZ1tqXS4KCURvbid0IHJlbG9hZCBkaXJlY3RseSBmcm9tIG9sZGVxdWl2OyBpZiBpdCdzIGEgcHNldWRvIHdpdGggYQoJc3RhY2sgc2xvdCwgdXNlIHJlbG9hZF9pbltqXS4KCUNoZWNrIHRoYXQgcmVsb2FkX2luX3JlZ1tqXSBpcyBhIE1FTSBiZWZvcmUgcmVwbGFjaW5nIHJlbG9hZF9pbgoJZnJvbSByZWdfcmVsb2FkZWRfY29udGVudHMuCglJbmNsdWRlIG5vbi1zcGlsbCByZWdpc3RlcnMgaW4gcmVsb2FkIGluaGVyaXRhbmNlIHByb2Nlc3NpbmcuCglBbHNvIHRyeSB0byB1c2UgcmVsb2FkX291dF9yZWcgdG8gc2V0IHNwaWxsX3JlZ19zdG9yZSAvCglyZWdfbGFzdF9yZWxvYWRfcmVnLgoJSW4gY29kZSB0byBzZXQgbmV3X3NwaWxsX3JlZ19zdG9yZSwgdXNlIHNpbmdsZV9zZXQgdG8gZmluZCBvdXQgaWYKCXRoZXJlIGlzIGEgc2luZ2xlIHNldC4KCUFkZCBjb2RlIHRoYXQgYWxsb3dzIHRvIGRlbGV0ZSBvcHRpb25hbCBvdXRwdXQgcmVsb2Fkcy4KCUFkZCBjb2RlIHRvIGFsbG93IGRlbGV0aW9uIG9mIG91dHB1dCByZWxvYWRzIHRoYXQgdXNlIG5vIHNwaWxsIHJlZy4KCUF0IHRoZSBlbmQsIHNldCByZWxvYWRfb3ZlcnJpZGVfaW4gdG8gb2xkZXF1aXYuCglBbHNvIGNhbGwgZGVsZXRlX291dHB1dF9yZWxvYWQgaWYgcmVsb2FkX291dF9yZWcgaXMgZXF1YWwgdG8gb2xkCglpbiBvbGRlcXVpdiBjb2RlLgoJQWRkIGNvZGUgdG8gY2FsbCBkZWxldGVfb3V0cHV0X3JlbG9hZCBmb3Igc3RvcmVzIHdpdGggbm8gbWF0Y2hpbmcgbG9hZC4KCVNldCAvIHVzZSBzcGlsbF9yZWdfc3RvcmVkX3RvLgoJSGFuZGxlIGNhc2Ugd2hlcmUgc2Vjb25kYXJ5IG91dHB1dCByZWxvYWQgdXNlcyBhIHRlbXBvcmFyeSwgYnV0CglhY3R1YWwgc3RvcmUgaXNuJ3QgZm91bmQuCglXaGVuIGxvb2tpbmcgZm9yIGEgc3RvcmUgb2YgYSB2YWx1ZSBub3QgbG9hZGVkIGluIG9yZGVyIHRvIGNhbGwKCWRlbGV0ZV9vdXRwdXRfcmVsb2FkLCBjb3VudF9vY2N1cnJlbmNlcyBzaG91bGQgcmV0dXJuIDAgZm9yIG5vCglsb2FkczsgYnV0IGRpc2NvdW50IGluaGVyaXRlZCBpbnB1dCByZWxvYWRpbGxfcmVnX3N0b3JlZF90by4KCURvIGNoZWNrcyBmb3IgZXh0cmEgdXNlcyBvZiBSRUcuICBDaGFuZ2VkIGFsbAoJY2FsbGVycy4KCVVzZSBkZWxldGVfYWRkcmVzc19yZWxvYWRzLgoJKHJlbG9hZCk6IFRha2UgcmV0dXJuIHZhbHVlIG9mIGZpbmRfcmVsb2FkcyBpbnRvIGFjY291bnQuCglJZiBhIG5vLW9wIHNldCBuZWVkcyBtb3JlIHRoYW4gb25lIHJlbG9hZCwgZGVsZXRlIGl0LgoJKHJlbG9hZF9yZWdfZnJlZV9iZWZvcmVfcCk6IFJFTE9BRF9GT1JfSU5QVVQKCWNhbiBpZ25vcmUgUkVMT0FEX0ZPUl9JTlBVVF9BRERSRVNTIC8gUkVMT0FEX0ZPUl9JTlBBRERSX0FERFJFU1MKCWZvciB0aGUgc2FtZSBvcGVyYW5kLgoJKGNsZWFyX3JlbG9hZF9yZWdfaW5fdXNlKTogQ2hlY2sgZm9yIG90aGVyIHJlbG9hZHMgdGhhdCBrZWVwIGEKCXJlZ2lzdGVyIGluIHVzZS4KCShyZWxvYWRfcmVnX2ZyZWVfZm9yX3ZhbHVlX3ApOiBIYW5kbGUgUkVMT0FEX0ZPUl9PUEVSQU5EX0FERFJFU1MgLwoJUkVMT0FEX0ZPUl9PUEFERFJfQUREUi4KCVRha2UgaW50byBhY2NvdW50IHdoZW4gYW4gYWRkcmVzcyBhZGRyZXNzIHJlbG9hZCBpcyBvbmx5IG5lZWRlZAoJZm9yIHRoZSBhZGRyZXNzIHJlbG9hZCB3ZSBhcmUgY29uc2lkZXJpbmcuCgkoY291bnRfb2NjdXJyZW5jZXMpOiBVc2UgcnR4X2VxdWFsX3AgZm9yIE1FTXMuCgkoaW5jX2Zvcl9yZWxvYWQpOiBSZXR1cm4gaW5zdHJ1Y3Rpb24gdGhhdCBzdG9yZXMgaW50byBSRUxPQURSRUcuCglOZXcgYXJndW1lbnQgdHdvLCBJTiwgYW5kIHJ0eC4gIENoYW5nZWQgYWxsIGNhbGxlcnMuCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucywgcmVsb2FkX2FzX25lZWRlZCk6CglEb24ndCBjbGVhciBhZnRlcl9jYWxsIGZvciBhIENMT0JCRVIuCglLZWVwIHRyYWNrIG9mIGhvdyBtYW55IGhhcmQgcmVnaXN0ZXJzIG5lZWQgdG8gYmUgY29waWVkIGZyb20KCWFmdGVyX2NhbGwsIGFuZCBkb24ndCBjbGVhciBhZnRlcl9jYWxsIGJlZm9yZSB3ZSBoYXZlIHNlZW4KCXRoYXQgbXVjaCBjb3BpZXMsIG9yIHdlIHNlZSBhIGRpZmZlcmVudCBpbnN0cnVjdGlvbi4KCkZyaSBPY3QgMTYgMTA6NTg6MjMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG8gbm90IGRlbGV0ZSB1bnJlYWNoYWJsZSBibG9ja3MKCWFmdGVyIHJlbG9hZCBoYXMgY29tcGxldGVkLgoKRnJpIE9jdCAxNiAxNzoyNjoxMCAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBjcHBsaWIuYyAoY3BwX2dldF90b2tlbik6IFJlcGxhY2Ugd2hpdGVzcGFjZSB0aGF0IG9jY3VycyBiZXR3ZWVuCglhIG1hY3JvIG5hbWUgYW5kIHRoZSBuZXh0IHRva2VuIHdpdGggYSBzaW5nbGUgYmxhbmsgaWYgdGhhdCB3aGl0ZXNwYWNlCglpcyBpbiBhIG1hY3JvIGJ1ZmZlciBhbmQgdGhlIG5leHQgdG9rZW4gaXMgbm90ICcoJy4KCkZyaSBPY3QgMTYgMTU6NDQ6MDIgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogY2NjcC5jIChyZXNjYW4pOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgZW5kaW5nIGluIGJhY2tzbGFzaC4KCShyZXNjYW4pOiBMaWtld2lzZS4KCShza2lwX2lmX2dyb3VwKTogTGlrZXdpc2UuCgkoc2tpcF90b19lbmRfb2ZfY29tbWVudCk6IExpa2V3aXNlLgoJKG1hY2FyZzEpOiBMaWtld2lzZS4KCShkaXNjYXJkX2NvbW1lbnRzKTogTGlrZXdpc2UuCgkoY2hhbmdlX25ld2xpbmVzKTogTGlrZXdpc2UuCgpGcmkgT2N0IDE2IDE1OjI2OjI0IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogRml4IHVuYWxpZ25lZCBhY2Nlc3Mgb2Ygd2NoYXJfdC4KCkZyaSBPY3QgMTYgMTA6NDc6NTMgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLmggKFRBUkdFVF9TV0lUQ0hFUyk6IEFkZCAtLWhlbHAgZG9jdW1lbnRhdGlvbi4KCShUQVJHRVRfT1BUSU9OUyk6IEFkZCAtLWhlbHAgZG9jdW1lbnRhdGlvbi4KCkZyaSBPY3QgMTYgMTE6NDk6MDEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogcnRsLmggKHNldHNfY2MwX3ApOiBSZXZlcnQgT2N0IDE0IEFUVFJJQlVURV9OT1JFVFVSTiBjaGFuZ2UuCgpGcmkgT2N0IDE2IDA3OjA4OjQ2IDE5OTggIEJydWNlIEtvcmIgIDxrb3JiQGRhdGFkZXNpZ24uY29tPgoKCSogZml4aW5jLyogTW92ZWQgaW4gZnJvbSAuLi9jb250cmliIGRpcmVjdG9yeSBpbiBwcmVwYXJhdGlvbgoJZm9yIGludGVncmF0aW5nIGl0IGludG8gdGhlIG5vcm1hbCBidWlsZCBwcm9jZXNzLiAgSW4gcGFydGljdWxhciwKCWZpeGluYy9NYWtlZmlsZS5pbiBtdXN0IGJlIGNvbmZpZy1lZCBpbnRvIHRoZSBidWlsZCBkaXJlY3RvcnkKCWFzIGZpeGluYy9NYWtlZmlsZS4gIFByb3Bvc2VkIHBhdGNoZXMgdG8gLi9NYWtlZmlsZS5pbiBhbmQKCS4vY29uZmlndXJlLmluIHdpbGwgYmUgImluIHRoZSBtYWlsIiBtb21lbnRhcmlseS4KCkZyaSBPY3QgMTYgMDg6MTM6NDYgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRuZXQuY29tPgoKCSogY3NlLmMgKGNzZV9iYXNpY19ibG9jayk6IEZpeHVwIGhhc2ggZmx1c2hpbmcgbG9vcCBzbyB3ZSBkbyBub3QKCWFjY2lkZW50bHkgd2FsayBpbnRvIHRoZSBmcmVlIGxpc3QuICBDb21tZW50IGhvdyB0aGF0IGNhbiBoYXBwZW4uCgkoaW52YWxpZGF0ZSk6IEZpeCBpbmRlbnRhdGlvbi4KClRodSBPY3QgMTUgMjM6NTM6MjkgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoJCQkgIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpc18xKTogRG8gbm90IGNsb2JiZXIgcmVnc19ldmVyX2xpdmUgYWZ0ZXIKCXJlbG9hZC4gIE5ldmVyIHBlcmZvcm0gcmVzY2FucyBvZiB0aGUgaW5zbiBjaGFpbiBhZnRlciByZWxvYWQuCgkocHJvcGFnYXRlX2Jsb2NrKTogRG8gbm90IGRlbGV0ZSBpbnNuIG9yIGNyZWF0ZSBuZXcgYXV0b2luYyBhZGRyZXNzaW5nCgltb2RlcyBhZnRlciByZWxvYWQuCgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBVbmNvbmRpdGlvbmFsbHkgdXNlIHRoZSBjb2RlIHRoYXQgd2FzCglwcmV2aW91c2x5IGNvbmRpdGlvbmFsIG9uIFBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUC4KCSogcmVsb2FkMS5jIChyZWxvYWQpOiBXaGVuIHJlbG9hZGluZyBpcyBmaW5pc2hlZCwgZGVsZXRlIGFsbAoJUkVHX0RFQUQgYW5kIFJFR19VTlVTRUQgbm90ZXMuCgkoZW1pdF9yZWxvYWRfaW5zbnMpOiBEZWxldGUgYWxsIGNvZGUgdGhhdCB3YXMgY29uZGl0aW9uYWwgb24KCVBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUC4KCShub19sb25nZXJfZGVhZF9yZWdzKTogRGVsZXRlIHZhcmlhYmxlLgoJKHJlbG9hZF9jc2VfZGVsZXRlX2RlYXRoX25vdGVzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKHJlbG9hZF9jc2Vfbm9fbG9uZ2VyX2RlYWQpOiBEZWxldGUgZnVuY3Rpb24uCgkocmVsb2FkX2NzZV9yZWdzXzEpOiBEZWxldGUgYWxsIGNvZGUgdG8gaGFuZGxlIGRlbGV0aW9uIG9mIGRlYXRoCglub3Rlcy4KCShyZWxvYWRfY3NlX25vb3Bfc2V0X3ApOiBMaWtld2lzZS4KCShyZWxvYWRfY3NlX3NpbXBsaWZ5X3NldCk6IExpa2V3aXNlLgoJKHJlbG9hZF9jc2Vfc2ltcGxpZnlfb3BlcmFuZHMpOiBMaWtld2lzZS4KCShyZWxvYWRfY3NlX21vdmUyYWRkKTogTGlrZXdpc2UuCgkqIHJlb3JnLmMgKHVzZWRfc3BpbGxfcmVncyk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShtYXhfbGFiZWxfbnVtX2FmdGVyX3JlbG9hZCk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShmaW5kX2RlYWRfb3Jfc2V0X3JlZ2lzdGVycyk6IERvbid0IGFzc3VtZSB0aGF0IHNwaWxsIHJlZ3MgYXJlCglkZWFkIGF0IGEgQ09ERV9MQUJFTC4KCSogcnRsYW5hbC5jIChkZWFkX29yX3NldF9yZWdub19wKTogRGVhdGggbm90ZXMgYXJlIGFsd2F5cyBhY2N1cmF0ZSwKCWV2ZW4gYWZ0ZXIgcmVsb2FkLgoJKiBzY2hlZC5jIChzY2hlZF9hbmFseXplX2luc24pOiBMaWtld2lzZS4KCSh1cGRhdGVfZmxvd19pbmZvKTogTGlrZXdpc2UuCgkqIGhhaWZhLXNjaGVkLmMgKHNjaGVkX2FuYWx5emVfaW5zbik6IExpa2V3aXNlLgoJKHVwZGF0ZV9mbG93X2luZm8pOiBMaWtld2lzZS4KCSogdG0udGV4aSAoUFJFU0VSVkVfREVBVEhfSU5GT19SRUdOT19QKTogRGVsZXRlIGRvY3VtZW50YXRpb24uCgkqIHRvcGxldi5jIChtYXhfbGFiZWxfbnVtX2FmdGVyX3JlbG9hZCk6IERlbGV0ZSB2YXJpYWJsZS4KCShyZXN0X29mX2NvbXBpbGF0aW9uKTogRG9uJ3Qgc2V0IG1heF9sYWJlbF9udW1fYWZ0ZXJfcmVsb2FkLgoJQ2FsbCBsaWZlX2FuYWx5c2lzIGFmdGVyIHJlbG9hZF9jc2VfcmVncyBpZiBvcHRpbWl6aW5nLgoJKiBjb25maWcvZ21pY3JvL2dtaWNyby5oOiBEZWxldGUgY29tbWVudCByZWZlcnJpbmcgdG8KCVBSRVNFUlZFX0RFQVRIX0lORk9fUkVHTk9fUC4KCSogY29uZmlnL2kzODYvaTM4Ni5oOiBMaWtld2lzZS4KCSogY29uZmlnL204OGsvbTg4ay5oOiBMaWtld2lzZS4KCSogY29uZmlnL20zMnIvbTMyci5oIChQUkVTRVJWRV9ERUFUSF9JTkZPX1JFR05PX1ApOiBEZWxldGUgZGVmaW5pdGlvbi4KCSogY29uZmlnL3NoL3NoLmg6IExpa2V3aXNlLgoKVGh1IE9jdCAxNSAxOTo0ODo0MSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFJlc3RvcmUgbWFya2luZyBiY3RfcCBhcwoJQVRUUklCVVRFX1VOVVNFRC4KCSogcnM2MDAwLmMgKG9wdGltaXphdGlvbl9vcHRpb25zKTogQ2hhbmdlICNpZmRlZiBIQUlGQSB0bwoJSEFWRV9kZWNyZW1lbnRfYW5kX2JyYW5jaF9vbl9jb3VudC4KCShzbWFsbF9kYXRhX29wZXJhbmQpOiBSZW1vdmUgVEFSR0VUX0VMRiBjb25kaXRpb24gZm9yIG1hcmtpbmcKCXBhcmFtZXRlcnMgQVRUUklCVVRFX1VOVVNFRC4KClRodSBPY3QgMTUgMTE6NDU6NTEgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlnL2kzODYvc2NvNS5oIChNQVhfT0ZJTEVfQUxJR05NRU5UKTogRGVmaW5lLgoJKFNFTEVDVF9TRUNUSU9OKTogUmVzeW5jIHdpdGggc3ZyNC5oLgoKVGh1IE9jdCAxNSAxMjo0MjoxMyAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IFVuZG8gT2N0IDE0IGNoYW5nZSBtYXJraW5nIGJjdF9wCglBVFRSSUJVVEVfVU5VU0VELgoKVGh1IE9jdCAxNSAwMDo1Nzo1NSAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjLXByYWdtYS5jIChoYW5kbGVfcHJhZ21hX3Rva2VuKTogVGVzdCBmb3IgbnVsbCB0cmVlIGJlZm9yZQoJZGVyZWZlcmVuY2luZyBUUkVFX0NPREUuCgpUaHUgT2N0IDE1IDE3OjM2OjQ4IDE5OTggIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZy9jNHgvYzR4LmM6IENvbnZlcnQgdG8gdXNlIEdFTl9JTlQuCgkoYzR4X3BhcmFsbGVsX3Byb2Nlc3MpOiBSZXdvcmsgdG8gaGFuZGxlIG5ldyByZXBlYXQgbG9vcCBzdHJ1Y3R1cmUuCgoJKiBjb25maWcvYzR4L2M0eC5tZDogQ29udmVydCB0byB1c2UgR0VOX0lOVC4KCShycHRiX2VuZCk6IENvbnZlcnQgdG8gdXNlIEdFIHRlc3QuICBSZXBsYWNlIHVzZXMgd2l0aCBjbG9iYmVycy4KCShkZWNyZW1lbnRfYW5kX2JyYW5jaF9vbl9jb3VudCk6IExpa2V3aXNlLgoKCSogY29uZmlnL2M0eC9jNHguaCAoUkVQRUFUX0JMT0NLX1BST0NFU1MpOiBEZWxldGVkIGhvb2sgbm93IHRoYXQKCWxvb3AuYyBoYXMgdGhlIGRlc2lyZWQgZnVuY3Rpb25hbGl0eS4KCShyY19yZWdfb3BlcmFuZCk6IE5ldyBwcm90b3R5cGUuCgoJKiBjb25maWcvYzR4L3QtYzR4OiBDYW4gbm93IGJ1aWxkIGFsbCBmcm9udCBlbmRzLgoKV2VkIE9jdCAxNCAyMzoyNzowOCAxOTk4ICBEaWRpZXIgRk9SVCAgKGRpZGllci5mb3J0QGZlZGV4LmNvbSkKCgkqIGZpeGluY2x1ZGVzOiBGaXggdXAgcnBjL3tjbG50LHN2cix4ZHJ9LmggZm9yIFN1bk9TLgoKV2VkIE9jdCAxNCAyMjoxMzoyOCAxOTk4ICBKb2VsIFNoZXJyaWxsICAoam9lbEBPQVJjb3JwLmNvbSkKCgkqIE1ha2VmaWxlLmluIChzdG1wLWZpeGluYyk6IERvIG5vdCBpbnN0YWxsIGFzc2VydC5oIGlmIG5vdCBkZXNpcmVkLgoJKiBjb25maWcvdC1ydGVtczogRG8gbm90IGluc3RhbGwgYXNzZXJ0LmggLS0gdXNlIG5ld2xpYidzLgoKV2VkIE9jdCAxNCAyMTo1NzowOCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY29tYmluZS5jIChjb21iaW5lX2luc3RydWN0aW9ucyk6IFdoZW4gZmluaXNoZWQsIGNhbGwgaW5pdF9yZWNvZy4KCSogcmVnbW92ZS5jIChvcHRpbWl6ZV9yZWdfY29weV8zKTogUmVqZWN0IHZvbGF0aWxlIE1FTXMuCgpXZWQgT2N0IDE0IDE2OjEwOjIyIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogdG9wbGV2LmM6IElmIGZsYWdfc3ludGF4X29ubHksIGRvbid0IG9wZW4gb3Igd3JpdGUgYXNzZW1ibGVyIGZpbGUuCgpXZWQgT2N0IDE0IDEzOjI2OjA1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNwcGFsbG9jLmMgKG1lbW9yeV9mdWxsKTogTWFyayBmdW5jdGlvbiBwcm90b3R5cGUgd2l0aAoJQVRUUklCVVRFX05PUkVUVVJOLgoKCSogZGVtYW5nbGUuaCAoY29sbGVjdF9leGl0KTogTGlrZXdpc2UuCgoJKiBmaXgtaGVhZGVyLmMgKHZfZmF0YWwsIGZhdGFsKTogTGlrZXdpc2UuCgoJKiBnY2MuYyAocGZhdGFsX3dpdGhfbmFtZSwgcGZhdGFsX3BleGVjdXRlLCBmYXRhbCwgZmFuY3lfYWJvcnQpOgoJTGlrZXdpc2UuCgoJKiBnY292LmMgKHByaW50X3VzYWdlKTogTGlrZXdpc2UuCgoJKiBnZW5hdHRyLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuYXR0cnRhYi5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbmNvZGVzLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuY29uZmlnLmMgKGZhdGFsLCBmYW5jeV9hYm9ydCk6IExpa2V3aXNlLgoKCSogZ2VuZW1pdC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbmV4dHJhY3QuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5mbGFncy5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbm9waW5pdC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbm91dHB1dC5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGdlbnBlZXAuYyAoZmF0YWwsIGZhbmN5X2Fib3J0KTogTGlrZXdpc2UuCgoJKiBnZW5yZWNvZy5jIChmYXRhbCwgZmFuY3lfYWJvcnQpOiBMaWtld2lzZS4KCgkqIGxpYmdjYzIuYyAoX19lcHJpbnRmLCBfX2RlZmF1bHRfdGVybWluYXRlLCBfX3NqdGhyb3csCglfX3NqcG9wbnRocm93LCBfX3Rocm93KTogTGlrZXdpc2UuCgoJKiBvYmpjL29iamMtYWN0LmMgKG9iamNfZmF0YWwpOiBMaWtld2lzZS4KCgkqIHByb3RvaXplLmMgKHVzYWdlLCBhdXhfaW5mb19jb3JydXB0ZWQsCglkZWNsYXJlX3NvdXJjZV9jb25mdXNpbmcpOiBMaWtld2lzZS4KCgkqIHJ0bC5jIChkdW1wX2FuZF9hYm9ydCk6IExpa2V3aXNlLgoKCSogcnRsLmggKHNldHNfY2MwX3ApOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChmbG9hdF9zaWduYWwsIHBpcGVfY2xvc2VkKTogTGlrZXdpc2UuCgoxOTk4LTEwLTE0ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBpc3Nhbi5jcy51bmktZG9ydG11bmQuZGU+CgoJKiBkd2FyZjJvdXQuYyAoZXhwYW5kX2J1aWx0aW5fZHdhcmZfcmVnX3NpemUpOiBMb29rIGF0IGFsbCByYW5nZXMKCXdoZW4gZ2VuZXJhdGluZyB0aGUgZGVjaXNpb24gdHJlZSBmb3IgdGhlIGdlbmVyYWwgY2FzZS4KCgkqIGNvbmZpZy9tNjhrL202OGsuaCAoSEFSRF9SRUdOT19NT0RFX09LKTogRG9uJ3QgYWNjZXB0IG1vZGVzCgl3aWRlciB0aGF0IDEyIGJ5dGVzIGluIGZwdSByZWdzIG9yIHdpZGVyIHRoYW4gOCBieXRlIGluIGZwYSByZWdzLgoKV2VkIE9jdCAxNCAxMToxNDowMiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBNYWtlZmlsZS5pbiAoc2NoZWQubyk6IERlcGVuZCBvbiByZWNvZy5oLgoKCSogYWxpYXMuYyAoUkVHX0JBU0VfVkFMVUUpOiBDYXN0IHRoZSByZXN1bHQgb2YgUkVHTk8oKSBtYWNybyB0bwoJKHVuc2lnbmVkKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShmaW5kX2Jhc2VfdmFsdWUpOiBMaWtld2lzZS4KCShyZWNvcmRfYmFzZV92YWx1ZSk6IENhc3QgdmFyaWFibGUgYHJlZ25vJyB0byAodW5zaWduZWQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIENhc3QgdGhlIHJlc3VsdCBvZiBSRUdOTygpIG1hY3JvIHRvCgkodW5zaWduZWQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKG1lbXJlZnNfY29uZmxpY3RfcCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlcyBgcl94JyBhbmQgYHJfeScgIHRvCgl1bnNpZ25lZC4KCShpbml0X2FsaWFzX2FuYWx5c2lzKTogQWRkIHVuc2lnbmVkIHZhcmlhYmxlIGB1aScuICBVc2UgaXQgYXMgbG9vcAoJdmFyaWFibGUgd2hlcmUgYW4gdW5zaWduZWQgaW5kZXggaXMgbmVlZGVkLgoKCSogY2FsbGVyLXNhdmUuYyAoaW5pdF9jYWxsZXJfc2F2ZSk6IENhc3QgYC0xJyB0byAoZW51bSBpbnNuX2NvZGUpCgliZWZvcmUgY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogY29sbGVjdDIuYzogQWRkIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBgZXJyb3InLCBgZmF0YWwnIGFuZAoJYGZhdGFsX3BlcnJvcicuICBNYWtlIHRoZXNlIGZ1bmN0aW9ucyB0YWtlIHZhcmlhYmxlIGFyZ3VtZW50cwoJaW5zdGVhZCBvZiBmYWtpbmcgaXQgd2l0aCBhIGZpeGVkIG51bWJlciBvZiBhcmdzLgoJKHdyaXRlX2NfZmlsZV9zdGF0KTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gKHVuc2lnbmVkCgljaGFyKS4KCgkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCk6IE1hcmsgcGFyYW1ldGVyIGBwcmVkJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGZpbmRfc3BsaXRfcG9pbnQpOiBDYXN0IHZhcmlhYmxlIGBzcmMnIHRvICh1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoc2ltcGxpZnlfcnR4KTogQ2FzdCAxIHRvICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSBpbiBzaGlmdC4KCShzaW1wbGlmeV9sb2dpY2FsKTogTGlrZXdpc2UuCgkoZm9yY2VfdG9fbW9kZSk6IENhc3QgcmVzdWx0IG9mIElOVFZBTCgpIG1hY3JvIHRvICh1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBDYXN0IDEgdG8gKHVuc2lnbmVkCglIT1NUX1dJREVfSU5UKSBpbiBzaGlmdC4KCShzaW1wbGlmeV9hbmRfY29uc3RfaW50KTogQ2FzdCByZXN1bHQgb2YgSU5UVkFMKCkgbWFjcm8gdG8KCWB1bnNpZ25lZCBIT1NUX1dJREVfSU5UJyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShtZXJnZV9vdXRlcl9vcHMpOiBDYXN0IHZhcmlhYmxlIGNvbnN0MCB0byBgdW5zaWduZWQKCUhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3QgdGhlIHJlc3VsdCBvZgoJR0VUX01PREVfTUFTSygpIG1hY3JvLgoJKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBMaWtld2lzZSBmb3IgdmFyaWFibGUgYGMwJy4gIENhc3QgdmFyaWFibGUKCWBjb25zdF9vcCcgdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3QKCW9uZS4gIENhc3QgYDEnIHRvIGB1bnNpZ25lZCBIT1NUX1dJREVfSU5UJyBpbiBzaGlmdC4gIENhc3QgdGhlCglyZXN1bHQgb2YgYEdFVF9NT0RFX01BU0soKS8yJyB0byBgSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcKCWFnYWluc3Qgb25lLiAgQ2FzdCBgMScgdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIGluIHNoaWZ0LiAgQ2FzdAoJcmVzdWx0IG9mIElOVFZBTCgpIG1hY3JvIHRvIGB1bnNpZ25lZCBIT1NUX1dJREVfSU5UJyB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZGlzdHJpYnV0ZV9ub3Rlcyk6IFdyYXAgdmFyaWFibGUgYGNjMF9zZXR0ZXInIGluIG1hY3JvIGBIQVZFX2NjMCcuCgoJY29uZmlnL21pcHMvbWlwcy5jIChnZW5faW50X3JlbGF0aW9uYWwpOiBDYXN0IHJlc3VsdCBvZiBJTlRWQUwoKQoJbWFjcm8gdG8gYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKG91dHB1dF9ibG9ja19tb3ZlKTogQ2FzdCBgc2l6ZW9mJyBleHByZXNzaW9uIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShmdW5jdGlvbl9hcmcpOiBDYXN0IEJJVFNfUEVSX1dPUkQgdG8gYHVuc2lnbmVkJyB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuCgkoc2F2ZV9yZXN0b3JlX2luc25zKTogQ2FzdCBgYmFzZV9vZmZzZXQnIHRvIGBsb25nJyB0byBtYXRjaCBmb3JtYXQKCXNwZWNpZmllciBpbiBmcHJpbnRmLgoKCSogY29uZmlnL21pcHMvbWlwcy5oIChQbW9kZSk6IENhc3QgdGhlIHJlc3VsdCBvZiBgUG1vZGUnIG1hY3JvCgl0byBgZW51bSBtYWNoaW5lX21vZGUnLgoKCSogZmxvdy5jIChsaWZlX2FuYWx5c2lzXzEpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBpbnNuJy4KCgkqIGdjYy5jICh0cmFuc2xhdGVfb3B0aW9ucyk6IE1vdmUgdmFyaWFibGVzIGBqJyBhbmQgYGsnIGludG8gdGhlCglzY29wZSBpbiB3aGljaCB0aGV5IGFyZSB1c2VkLiAgQ2hhbmdlIHRoZWlyIHR5cGVzIHRvIGBzaXplX3QnLgoJKHNldF9zcGVjKTogQ2FzdCB0aGUgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYHVuc2lnbmVkIGNoYXInLgoJKHJlYWRfc3BlY3MpOiBMaWtld2lzZS4KCShwcm9jZXNzX2NvbW1hbmQpOiBDYXN0IGBzaXplb2YnIHRvIChpbnQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGRvX3NwZWNfMSk6IENhc3QgdGhlIGFyZ3VtZW50IG9mIGN0eXBlIG1hY3JvIHRvIGB1bnNpZ25lZCBjaGFyJy4KCShoYW5kbGVfYnJhY2VzKTogQ2FzdCBib3RoIHNpZGVzIG9mIGA9PScgZXhwcmVzc2lvbiB0byBgbG9uZycgdG8KCWVuc3VyZSBzaWduIG1hdGNoaW5nLgoJKG1haW4pOiBDYXN0IHZhcmlhYmxlIGBpJyB0byBgaW50JyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIGdjb3YtaW8uaCAoX19mZXRjaF9sb25nKTogQ2hhbmdlIHR5cGUgb2YgcGFyYW1ldGVyIGBieXRlcycgZnJvbQoJaW50IHRvIHNpemVfdC4gIENhc3QgdmFyaWFibGUgYGknIHRvIHNpemVfdCB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0CglvbmUuCgoJKiBnZW5hdHRydGFiLmMgKGNvbnZlcnRfc2V0X2F0dHJfYWx0ZXJuYXRpdmUpOiBSZW1vdmUgdW51c2VkCglwYXJhbWV0ZXIgYGluc25fY29kZScuICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKGNvbnZlcnRfc2V0X2F0dHIpOiBMaWtld2lzZS4KCgkqIGdlbnJlY29nLmMgKGFkZF90b19zZXF1ZW5jZSk6IENhc3QgcmVzdWx0IG9mIFhWRUNMRU4oKSBtYWNybyB0bwoJc2l6ZV90IHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLiAgTGlrZXdpc2UgZm9yIHZhcmlhYmxlIGBsZW4nLgoKCSogZ2xvYmFsLmMgKGdsb2JhbF9hbGxvYyk6IENhc3QgdmFyaWFibGUgYG1heF9yZWdubycgdG8gc2l6ZV90Cgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4gIExpa2V3aXNlIGZvciB2YXJpYWJsZSBgbWF4X2FsbG9jbm8nLgoKCSoganVtcC5jIChzZXRzX2NjMF9wKTogTWFyayBwYXJhbWV0ZXIgYHgnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCgkqIGxvY2FsLWFsbG9jLmMgKHZhbGlkYXRlX2VxdWl2X21lbV9mcm9tX3N0b3JlKTogTWFyayBwYXJhbWV0ZXIKCWBzZXQnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShmaW5kX2ZyZWVfcmVnKTogQ2FzdCBgc2l6ZW9mJyBleHByZXNzaW9uIHRvIChpbnQpIHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4KCgkqIGxvb3AuYyAoY291bnRfbG9vcF9yZWdzX3NldCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYGRlc3QnLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IE1hcmsgcGFyYW1ldGVyIGBiY3RfcCcgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKGdldF9jb25kaXRpb24pOiBDYXN0IHZhcmlhYmxlIGBjb25zdF92YWwnIHRvIGB1bnNpZ25lZAoJSE9TVF9XSURFX0lOVCcgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBDYXN0IHVuc2lnbmVkCglleHByZXNzaW9uIHRvIEhPU1RfV0lERV9JTlQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoaW5zZXJ0X2xvb3BfbWVtKTogTWFyayBwYXJhbWV0ZXIgYGRhdGEnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShsb2FkX21lbXNfYW5kX3JlY291bnRfbG9vcF9yZWdzX3NldCk6IENhc3QgdmFyaWFibGUgYG5yZWdzJyB0bwoJYHVuc2lnbmVkJyB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCgkqIHByb3RvaXplLmMgKGlzX2lkX2NoYXIpOiBDaGFuZ2UgdHlwZSBvZiBwYXJhbWV0ZXIgYGNoJyB0bwoJdW5zaWduZWQgY2hhci4KCShtdW5nZV9jb21waWxlX3BhcmFtcyk6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gKGNvbnN0Cgl1bnNpZ25lZCBjaGFyKS4KCShwcm9jZXNzX2F1eF9pbmZvX2ZpbGUpOiBDYXN0IHZhcmlhYmxlIGBhdXhfaW5mb19zaXplJyB0byBpbnQgd2hlbgoJY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGZvcndhcmRfdG9fbmV4dF90b2tlbl9jaGFyKTogQ2FzdCBhcmd1bWVudCBvZiBjdHlwZSBtYWNybyB0bwoJYGNvbnN0IHVuc2lnbmVkIGNoYXInLgoJKGVkaXRfZm9ybWFsc19saXN0cyk6IExpa2V3aXNlLgoJKGZpbmRfcmlnaHRtb3N0X2Zvcm1hbHNfbGlzdCk6IExpa2V3aXNlLgoJKGFkZF9sb2NhbF9kZWNsKTogTGlrZXdpc2UuCgkoYWRkX2dsb2JhbF9kZWNscyk6IExpa2V3aXNlLgoJKGVkaXRfZm5fZGVmaW5pdGlvbik6IExpa2V3aXNlLgoJKGRvX2NsZWFuaW5nKTogTGlrZXdpc2UuCgkoc2Nhbl9mb3JfbWlzc2VkX2l0ZW1zKTogTGlrZXdpc2UuCgkoZWRpdF9maWxlKTogQ2FzdCB2YXJpYWJsZSBgb3JpZ19zaXplJyB0byAoaW50KSB3aGVuIGNvbXBhcmluZwoJYWdhaW5zdCBvbmUuCgkobWFpbik6IENhc3QgYXJndW1lbnQgb2YgY3R5cGUgbWFjcm8gdG8gYGNvbnN0IHVuc2lnbmVkIGNoYXInLgoKCSogcmVjb2cuYyAoY29uc3RfaW50X29wZXJhbmQpOiBNYXJrIHBhcmFtZXRlciBgbW9kZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIHJlZ2NsYXNzLmMgKHJlY29yZF9yZWdfY2xhc3Nlcyk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBjJyB0bwoJYHVuc2lnbmVkIGNoYXInLiAgQ2FzdCBgY2hhcicgYXJyYXkgaW5kZXggdG8gYHVuc2lnbmVkIGNoYXInLgoKCSogcmVsb2FkLmMgKHB1c2hfc2Vjb25kYXJ5X3JlbG9hZCk6IENhc3QgYXJndW1lbnQgdG8KCVJFR19DTEFTU19GUk9NX0xFVFRFUigpIG1hY3JvIHRvIGB1bnNpZ25lZCBjaGFyJy4KCgkqIHJlbG9hZDEuYyAoY2FsY3VsYXRlX25lZWRzKTogQ2FzdCBgY2hhcicgYXJyYXkgaW5kZXggdG8KCWB1bnNpZ25lZCBjaGFyJy4KCShzZXRfbGFiZWxfb2Zmc2V0cyk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBpJyB0byB1bnNpZ25lZCBpbnQuCglDYXN0IHJlc3VsdCBvZiBYVkVDTEVOKCkgbWFjcm8gdG8gdW5zaWduZWQgd2hlbiBjb21wYXJpbmcgYWdhaW5zdAoJb25lLgoJKG1hcmtfbm90X2VsaW1pbmFibGUpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgaScgdG8gdW5zaWduZWQuCgkob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogTGlrZXdpc2UuICBDYXN0IGBtYXhfcmVnbm8nIHRvIHVuc2lnbmVkCgl3aGVuIGNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShyZWxvYWRfYXNfbmVlZGVkKTogQ2FzdCBtYWNybyBOVU1fRUxJTUlOQUJMRV9SRUdTIHRvIChpbnQpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IG9uZS4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBIaWRlIHVudXNlZCBsYWJlbCBgZmFpbCcuCgkocmVsb2FkX2NzZV9zaW1wbGlmeV9vcGVyYW5kcyk6IENhc3QgYGNoYXInIGFycmF5IGluZGV4IHRvCglgdW5zaWduZWQgY2hhcicuCgkocmVsb2FkX2NvbWJpbmVfbm90ZV9zdG9yZSk6IE1hcmsgcGFyYW1ldGVyIGBzZXQnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuICBDYXN0IFVOSVRTX1BFUl9XT1JEIHRvIHVuc2lnbmVkIHdoZW4gY29tcGFyaW5nCglhZ2FpbnN0IG9uZS4KCShyZWxvYWRfY3NlX21vdmUyYWRkKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgc3JjMicuCgoJKiBzY2hlZC5jOiBJbmNsdWRlIHJlY29nLmguCgkoc2NoZWRfbm90ZV9zZXQpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgYicuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCShzcGxpdF9oYXJkX3JlZ19ub3Rlcyk6IExpa2V3aXNlIGZvciBwYXJhbWV0ZXIgYG9yaWdfaW5zbicuCgkoYmxvY2thZ2VfcmFuZ2UpOiBDYXN0IHJlc3VsdCBvZiBVTklUX0JMT0NLRUQoKSBtYWNybyB0byAoaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBzdHVwaWQuYyAoc3R1cGlkX2ZpbmRfcmVnKTogTWFyayBwYXJhbWV0ZXIgYGNoYW5nZXNfc2l6ZScgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4gIENhc3QgYHNpemVvZicgZXhwcmVzc2lvbiB0byAoaW50KSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiB1bnJvbGwuYyAocHJlY29uZGl0aW9uX2xvb3BfcCk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyCglgbG9vcF9lbmQnLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KClR1ZSBPY3QgMTMgMjI6MTI6MTEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogcmVsb2FkMS5jIChtYXliZV9maXhfc3RhY2tfYXNtcyk6IE5ldyBzdGF0aWMgZnVuY3Rpb24uCgkocmVsb2FkKTogQ2FsbCBpdC4KCgkqIHJlbG9hZC5oIChjb21wdXRlX3VzZV9ieV9wc2V1ZG9zKTogRGVjbGFyZS4KCgkqIHJlbG9hZDEuYyAoc3BpbGxlZF9wc2V1ZG9zLCBpbnNuc19uZWVkX3JlbG9hZCk6IE5ldyB2YXJpYWJsZXMuCgkoc29tZXRoaW5nX25lZWRzX3JlbG9hZHMpOiBEZWxldGUgdmFyaWFibGUuCgkoZmluaXNoX3NwaWxscyk6IE5ldyBmdW5jdGlvbi4KCShjb21wdXRlX3VzZV9ieV9wc2V1ZG9zKTogTmV3IGZ1bmN0aW9uLgoKCShkZWxldGVfY2FsbGVyX3NhdmVfaW5zbnMpOiBMb3NlIGFyZ3VtZW50IEZJUlNULiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVVzZSB0aGUgcmVsb2FkX2luc25fY2hhaW4gaW5zdGVhZCBvZiB3YWxraW5nIHRoZSBydGwgZGlyZWN0bHkuCgoJKHJlbG9hZCk6IEFsbG9jYXRlIGFuZCBmcmVlIHNwaWxsZWRfcHNldWRvcy4KCUVuc3VyZSB0aGF0IGFsbCBjYWxscyBvZiBzcGlsbF9oYXJkX3JlZyBhcmUgZm9sbG93ZWQgYnkgYSBjYWxsIHRvCglmaW5pc2hfc3BpbGxzLgoJVXNlIHRoZSBpbnNuc19uZWVkX3JlbG9hZCBsaXN0IGluc3RlYWQgb2Ygc29tZXRoaW5nX25lZWRzX3JlbG9hZHMKCXRvIGZpbmQgb3V0IGlmIHJlbG9hZF9hc19uZWVkZWQgbXVzdCBiZSBjYWxsZWQuCglDbGVhciB1bnVzZWRfaW5zbl9jaGFpbnMgYXQgdGhlIGVuZC4KCgkoY2FsY3VsYXRlX25lZWRzX2FsbF9pbnNucyk6IExvc2UgRklSU1QgcGFyYW1ldGVyLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCglEZWxldGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIGN1cnJlbnQgYmFzaWMgYmxvY2suCglXYWxrIHJlbG9hZF9pbnNuX2NoYWluIGluc3RlYWQgb2YgdGhlIHJ0bCBzdHJ1Y3R1cmUuICBCdWlsZCB0aGUKCWluc25zX25lZWRfcmVsb2FkIGNoYWluLgoJUmVtZW1iZXIgd2hpY2ggaW5zbnMgbmVlZCByZWxvYWRpbmcvZWxpbWluYXRpb24gYnkgc2V0dGluZyB0aGUKCWFwcHJvcHJpYXRlIGZpZWxkcyBpbiBzdHJ1Y3QgaW5zbl9jaGFpbiwgbm90IGJ5IHB1dHRpbmcgbW9kZXMgb24gdGhlCglpbnNuLgoKCShjYWxjdWxhdGVfbmVlZHMpOiBMb3NlIFRISVNfQkxPQ0sgYXJnLiAgQWNjZXB0IGFyZyBDSEFJTiBpbnN0ZWFkIG9mCglhcmcgSU5TTi4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglEZWxldGUgZGVjbGFyYXRpb24gb2Ygc3RydWN0IG5lZWRzLgoJRG9uJ3Qgc2V0IHNvbWV0aGluZ19uZWVkc19yZWxvYWRzLgoJUmVjb3JkIGluc24gbmVlZHMgaW4gdGhlIENIQUlOIGFyZ3VtZW50LgoKCShzcGlsbF9oYXJkX3JlZyk6IFJlY29yZCB0aGUgYWZmZWN0ZWQgcHNldWRvcyBpbiBzcGlsbGVkX3BzZXVkb3MuCgoJKHJlbG9hZF9hc19uZWVkZWQpOiBMb3NlIEZJUlNUIGFyZy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglXYWxrIHRoZSByZWxvYWRfaW5zbl9jaGFpbiBpbnN0ZWFkIG9mIHRoZSBydHggc3RydWN0dXJlLgoJRGVsZXRlIGNvZGUgdG8ga2VlcCB0cmFjayBvZiBjdXJyZW50IGJhc2ljIGJsb2NrLgoJUmVuYW1lIG9uZSBvZiB0aGUgTkVYVCB2YXJpYWJsZXMgdG8gT0xEX05FWFQuCgoJKGFsbG9jYXRlX3JlbG9hZF9yZWcpOiBBY2NlcHQgYXJnIENIQUlOIGluc3RlYWQgb2YgYXJnIElOU04uICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCShjaG9vc2VfcmVsb2FkX3JlZ3MpOiBMaWtld2lzZS4KCgkoZW1pdF9yZWxvYWRfaW5zbnMpOiBSZXBsYWNlIElOU04gYW5kIEJCIGFyZ3Mgd2l0aCBhcmcgQ0hBSU4uICBBbGwKCWNhbGxlcnMgY2hhbmdlZC4KCgkqIGNhbGxlci1zYXZlLmMgKE1PVkVfTUFYX1dPUkRTKTogTmV3IG1hY3JvLiAgVXNlIGl0IHRocm91Z2hvdXQKCWluc3RlYWQgb2YgKE1PVkVfTUFYIC8gVU5JVFNfUEVSX1dPUkQpIGNvbXB1dGF0aW9uLgoJKGhhcmRfcmVnc19saXZlLCBoYXJkX3JlZ3NfbmVlZF9yZXN0b3JlKTogRGVsZXRlIHZhcmlhYmxlcy4KCShuX3JlZ3Nfc2F2ZWQpOiBOb3cgc3RhdGljLgoJKHJlZmVyZW5jZWRfcmVncywgdGhpc19pbnNuX3NldHMpOiBOZXcgdmFyaWFibGVzLgoKCShzZXR1cF9zYXZlX2FyZWFzKTogUmVzdHJ1Y3R1cmUgdGhlIGNvZGUgYSBiaXQuCgoJKHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzKTogRGVsZXRlIGZ1bmN0aW9uLgoJKG1hcmtfcmVmZXJlbmNlZF9yZWdzKTogTmV3IGZ1bmN0aW9uLCBzaW1pbGFyIHRvIHRoZSBvbGQKCXJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzLCBidXQgbWFyayByZWdpc3RlcnMgaW4gcmVmZXJlbmNlZF9yZWdzLgoKCShjbGVhcl9yZWdfbGl2ZSk6IERlbGV0ZSBmdW5jdGlvbi4KCShtYXJrX3NldF9yZWdzKTogUmVuYW1lZCBmcm9tIHNldF9yZWdfbGl2ZS4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCglPbmx5IG1hcmsgcmVnaXN0ZXJzIGluIHRoaXNfaW5zbl9zZXRzLgoKCShzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MpOiBSZXdvcmsgdGhpcyBmdW5jdGlvbiB0byB3YWxrIHRoZQoJcmVsb2FkX2luc25fY2hhaW4gaW5zdGVhZCBvZiB1c2luZyB0aGUgbGlzdCBvZiBpbnN0cnVjdGlvbnMgZGlyZWN0bHkuCglEZWxldGUgY29kZSB0byBrZWVwIHRyYWNrIG9mIHJlZ2lzdGVyIGxpdmVzLCBjb21wdXRlIGxpdmUgcmVncyBvbiB0aGUKCWZseSBmcm9tIGluZm9ybWF0aW9uIGluIHRoZSBjaGFpbi4KCUluc3RlYWQgb2YgY2FsbGluZyByZXN0b3JlX3JlZmVyZW5jZWRfcmVncywgdXNlIG1hcmtfcmVmZXJlbmNlZF9yZWdzLAoJdGhlbiB3YWxrIHRoZSBzZXQgaXQgY29tcHV0ZXMgYW5kIGNhbGwgaW5zZXJ0X3Jlc3RvcmUgYXMgYXBwcm9wcmlhdGUuCgoJKGluc2VydF9yZXN0b3JlKTogTG9zZSBJTlNOIGFuZCBCTE9DSyBhcmdzLiAgQWRkIENIQUlOIGFyZy4gIEFsbAoJY2FsbGVycyBjaGFuZ2VkLgoJUmVzdHJ1Y3R1cmUgdGhlIGNvZGUgYSBiaXQuICBUZXN0IGhhcmRfcmVnc19zYXZlZCBpbnN0ZWFkIG9mCgloYXJkX3JlZ3NfbmVlZF9yZXN0b3JlLgoJKGluc2VydF9zYXZlKTogTG9zZSBJTlNOIGFuZCBCTE9DSyBhcmdzLiAgQWRkIENIQUlOIGFuZCBUT19TQVZFCglhcmdzLiAgQWxsIGNhbGxlcnMgY2hhbmdlZC4KCVJlc3RydWN0dXJlIHRoZSBjb2RlIGEgYml0LiAgVXNlIFRPX1NBVkUgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlZ3MgdG8KCXNhdmUgaW5zdGVhZCBvZiBtb3JlIGNvbXBsaWNhdGVkIHRlc3QuCgkoaW5zZXJ0X29uZV9hcmcpOiBMb3NlIElOU04gYW5kIEJMT0NLIGFyZ3MuICBBZGQgQ0hBSU4gYXJnLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCglDcmVhdGUgYSBuZXcgaW5zbl9jaGFpbiBzdHJ1Y3R1cmUgZm9yIHRoZSBuZXcgaW5zbiBhbmQgcGxhY2UgaXQKCWludG8gdGhlIGNoYWluLgoKCSogcnRsLnRleGk6IFVwZGF0ZSBkb2N1bWVudGF0aW9uIHRvIHJlZmxlY3QgdGhhdCByZWxvYWQgbm8gbG9uZ2VyCglwdXRzIG1vZGVzIG9uIHRoZSBpbnNucy4KCjE5OTgtMTAtMTQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmNzLnVuaS1kb3J0bXVuZC5kZT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogRm9yY2UgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGEKCUNBTEwgaW5zbiB0byBtZW1vcnkuCgpXZWQgT2N0IDE0IDAwOjM4OjQwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHJ0bC5oOiBEZWxldGUgZHVwbGljYXRlIHByb3RvdHlwZXMuICBBZGQgc29tZSBtaXNzaW5nCglwcm90b3R5cGVzLgoJKiBydGxhbmFsLmMgKGZvcl9lYWNoX3J0eCk6IEZvcm1hdHRpbmcgdHdlYWsuCgoxOTk4LTEwLTEzICBIZXJtYW4gQS5KLiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIHJlYWwuYyAoZW1kbm9ybSBhbmQgZXRvYXNjKTogRGlzYWJsZSByb3VuZCB0byBldmVuIGZvciBjNHggdGFyZ2V0Cgl0byBiZSBjb21wYXRpYmxlIHdpdGggVEkgY29tcGlsZXIuCgoJKiBNYWtlZmlsZS5pbiAoVVNFUl9IKTogQWRkIHZhLWM0eC5oIHRvIGRlZmluaXRpb24uCgpUdWUgT2N0IDEzIDIzOjAzOjM3IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IEZpeCB0eXBvIGluIGluZXF1YWxpdHk6IGRvCgliaXRmaWVsZCBvcHRpbWl6YXRpb24gZm9yIGVxdWFsIG1vZGUgc2l6ZXMuCgkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBEb24ndCB0YWtlIHN1YnJlZ3Mgb2Ygc3VicmVncyBpbgoJdGhlIG1vdnN0cmljdCBjYXNlLiAgVGlkeSBhIHBvdGVudGlhbCBwcm9ibGVtIGluIHRoZSBtdWx0aS13b3JkIGNhc2UuCgkoZXh0cmFjdF9iaXRfZmllbGQpOiBMaWtld2lzZS4KClR1ZSBPY3QgMTMgMjI6MTI6MTEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IEVtaXQgTk9QcyBhZnRlciBub3JtYWwgY2FsbHMgaW4gdGhpcwoJZnVuY3Rpb24uCglDb21wdXRlIG1heF91aWRfZm9yX2Zsb3cgYnkgY2FsbGluZyBnZXRfbWF4X3VpZCBhZnRlciB0aGUgc2Nhbi4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogRG9uJ3QgZW1pdCBOT1BzIGhlcmUuCgpUdWUgT2N0IDEzIDIyOjA1OjQ5IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbGlhcy5jIChiYXNlX2FsaWFzX2NoZWNrKTogQWNjZXB0IG5ldyBhcmdzIGZvciB0aGUgbW9kZXMgb2YgdGhlCgl0d28gcmVmZXJlbmNlcy4gIFVzZSB0aGVtIHRvIGRldGVybWluZSBpZiBhbiBBTkQgY2FuIG92ZXJsYXAuICBVcGRhdGUKCWFsbCBjYWxsZXJzLgoJKG1lbXJlZnNfY29uZmxpY3RfcCk6IEFzc3VtZSBzaXplcyBhcmUgYWxpZ25lZCwgYW5kIHVzZXMgdGhlbQoJdG8gZGV0ZXJtaW5lIGlmIGFuIEFORCBjYW4gb3ZlcmxhcC4KClR1ZSBPY3QgMTMgMTc6NTE6MDQgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogY29uZmlnL202OGsvbTY4ay5oIChIQVJEX1JFR05PX01PREVfT0spOiBGb3IgRlAgcmVncywgYWRkIFJFR05PID49IDE2CgljaGVjay4gIEFkZCBjb21tZW50IHRvIGRvY3VtZW50IHByb2JsZW1zIHdpdGggVEFSR0VUX1NVTl9GUEEgdmVyc2lvbgoJb2YgdGhpcyBtYWNyby4KCSogY29uZmlnL202OGsvbTY4ay5tZCAobW92eGYrMSk6IFN1cHBvcnQgJ3InLydyJyBtb3Zlcy4KClR1ZSBPY3QgMTMgMTc6NDY6MTggMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGdlbmNoZWNrLm8pOiBEZXBlbmQgb24gZ2Fuc2lkZWNsLmguCgoJKiBjLWNvbW1vbi5jIChwcmludF9jaGFyX3RhYmxlKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoJKHNjYW5fY2hhcl90YWJsZSk6IExpa2V3aXNlLgoJKHRpbWVfY2hhcl90YWJsZSk6IExpa2V3aXNlLgoKCSogYy1kZWNsLmMgKGNfZGVjb2RlX29wdGlvbik6IE1hcmsgcGFyYW1ldGVyIGBhcmdjJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGRlY2xhcmVfcGFybV9sZXZlbCk6IE1hcmsgcGFyYW1ldGVyIGBkZWZpbml0aW9uX2ZsYWcnIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgoJKiBjLWxleC5jIChyZWFkZXNjYXBlKTogVXNlIGAodW5zaWduZWQpMScgaW4gc2hpZnQuCgkoeXlsZXgpOiBMaWtld2lzZS4gIENhc3QgYHNpemVvZicgdG8gYW4gKGludCkgd2hlbiBjb21wYXJpbmcKCWFnYWluc3Qgb25lLgoKCSogY2FsbHMuYyAoc3RvcmVfb25lX2FyZyk6IFJlbW92ZSB1bnVzZWQgcGFyYW1ldGVyIGBmbmRlY2wnLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkoZW1pdF9jYWxsXzEpOiBNYXJrIHBhcmFtZXRlcnMgYGZuZGVjbCcgYW5kIGBmdW50eXBlJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGV4cGFuZF9jYWxsKTogQ2FzdCByZXN1bHQgb2YgTUlOKCkgdG8gKHVuc2lnbmVkIGludCkgd2hlbgoJY29tcGFyaW5nIGFnYWluc3QgYW4gdW5zaWduZWQgdmFsdWUuCgoJKiBjY2NwLmMgKHBjZmluY2x1ZGUpOiBSZW1vdmUgdW51c2VkIHBhcmFtZXRlciBgbGltaXQnLiAgQWxsCgljYWxsZXJzIGNoYW5nZWQuCgkobWFrZV9kZWZpbml0aW9uKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYG9wJy4gIEFsbCBjYWxsZXJzCgljaGFuZ2VkLgoJKGNyZWF0ZV9kZWZpbml0aW9uKTogQ2FzdCBSRVNUX0VYVEVOU0lPTl9MRU5HVEggdG8gKGxvbmcpIHdoZW4KCWNvbXBhcmluZyBhZ2FpbnN0IHRoZSByZXN1bHQgb2YgcG9pbnRlciBhcml0aG1ldGljLgoKCSogY29uZmlnL21pcHMvbWlwcy5oIChGVU5DVElPTl9BUkdfQk9VTkRBUlkpOiBDYXN0IHRvICh1bnNpZ25lZCkKCXdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9mcmFtZV9kZWJ1Zyk6IENhc3QgUkVHTk8oKSBhbmQKCUhBUkRfRlJBTUVfUE9JTlRFUl9SRUdOVU0gdG8gKHVuc2lnbmVkKSB3aGVuIGNvbXBhcmluZyBhZ2FpbnN0CglvbmUuCgkob3V0cHV0X2RpZSk6IE1vdmUgdmFyaWFibGUgYGknIGludG8gdGhlIHNjb3BlIGluIHdoaWNoIGl0IGlzCgl1c2VkLiAgQ2hhbmdlIGl0cyB0eXBlIHRvIGB1bnNpZ25lZCcuCgkob3V0cHV0X2RpZSk6IENhc3QgdGhlIHJlc3VsdCBvZiBgc3RybGVuJyB0byAoaW50KSB3aGVuIHBhc3NpbmcgaXQKCXRvIEFTTV9PVVRQVVRfQVNDSUkoKS4KCShvdXRwdXRfcHVibmFtZXMpOiBMaWtld2lzZS4KCShvdXRwdXRfbGluZV9pbmZvKTogTGlrZXdpc2UuCgoJKiBlbWl0LXJ0bC5jIChnbG9iYWxfcnRsKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXJzLgoKCSogZXhwbG93LmMgKHByb21vdGVfbW9kZSk6IE1hcmsgcGFyYW1ldGVyIGBmb3JfY2FsbCcgd2l0aAoJQVRUUklCVVRFX1VOVVNFRC4KCgkqIGV4cG1lZC5jIChleHBhbmRfc2hpZnQpOiBDYXN0IHRoZSByZXN1bHQgb2YgR0VUX01PREVfQklUU0laRSB0bwoJYHVuc2lnbmVkIEhPU1RfV0lERV9JTlQnIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKHN5bnRoX211bHQpOiBDaGFuZ2UgdHlwZSBvZiB2YXJpYWJsZSBgY29zdCcgdG8gaW50LgoJKGVtaXRfc3RvcmVfZmxhZyk6IFVzZSBgKHVuc2lnbmVkIEhPU1RfV0lERV9JTlQpIDEnIGluIHNoaWZ0LgoKCSogZXhwci5jIChjb3B5X2Jsa21vZGVfZnJvbV9yZWcpOiBDYXN0IEJJVFNfUEVSX1dPUkQgdG8gKHVuc2lnbmVkKQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZ2V0X2lubmVyX3JlZmVyZW5jZSk6IENoYW5nZSB2YXJpYWJsZSBgYWxpZ25tZW50JyB0byB1bnNpZ25lZC4KCShleHBhbmRfZXhwcik6IENhc3QgdGhlIHJlc3VsdCBvZiBHRVRfTU9ERV9BTElHTk1FTlQgdG8gKHVuc2lnbmVkCglpbnQpIHdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoJKGV4cGFuZF9idWlsdGluX3NldGptcCk6IENoYW5nZSB0eXBlIG9mIHZhcmlhYmxlIGBpJyB0byBzaXplX3QuCgoJKiBmb2xkLWNvbnN0LmMgKGRpdl9hbmRfcm91bmRfZG91YmxlKTogQ2FzdCBCQVNFIHRvCgkoSE9TVF9XSURFX0lOVCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgoJKiBnZW5jaGVjay5jOiBJbmNsdWRlIGdhbnNpZGVjbC5oLgoJKG1haW4pOiBNYXJrIHBhcmFtZXRlciBgYXJndicgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogb3B0YWJzLmMgKGdlbl9jb25kX3RyYXApOiBNYXJrIHBhcmFtZXRlcnMgYGNvZGUnLCBgb3AyJyBhbmQKCWB0Y29kZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogcmVhbC5jIChlZGl2bSk6IENhc3QgY29uc3RhbnQgdmFsdWUgdG8gKHVuc2lnbmVkIGxvbmcpIGluCglleHByZXNzaW9uIGNvbXBhcmVkIGFnYWluc3QgYW4gdW5zaWduZWQgdmFsdWUuCgoJKiBzdG10LmMgKGV4cGFuZF9yZXR1cm4pOiBDYXN0IEJJVFNfUEVSX1dPUkQgdG8gKHVuc2lnbmVkKSB3aGVuCgljb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoZXhwYW5kX2VuZF9jYXNlKTogQ2FzdCBDQVNFX1ZBTFVFU19USFJFU0hPTEQgdG8gKHVuc2lnbmVkIGludCkKCXdoZW4gY29tcGFyaW5nIGFnYWluc3Qgb25lLgoKCSogc3Rvci1sYXlvdXQuYyAobW9kZV9mb3Jfc2l6ZSk6IENhc3QgTUFYX0ZJWEVEX01PREVfU0laRSB0bwoJKHVuc2lnbmVkIGludCkgd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuICBMaWtld2lzZSBmb3IKCUdFVF9NT0RFX0JJVFNJWkUuCgkoc21hbGxlc3RfbW9kZV9mb3Jfc2l6ZSk6IExpa2V3aXNlLgoJKHNhdmVfc3RvcmFnZV9zdGF0dXMpOiBNYXJrIHBhcmFtZXRlciBgcCcgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoJKHJlc3RvcmVfc3RvcmFnZV9zdGF0dXMpOiBMaWtld2lzZS4KCgkqIHRvcGxldi5jIChkZWJ1Z19hcmdzKTogQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXIuCgkoZl9vcHRpb25zKTogU3BlbGxpbmcgY29ycmVjdGlvbi4gIEFkZCBtaXNzaW5nIGluaXRpYWxpemVycy4KCShkb2N1bWVudGVkX2xhbmdfb3B0aW9ucyk6IExpa2V3aXNlLgoJKGRlYnVnX2VuZF9zb3VyY2VfZmlsZSk6IE1hcmsgcGFyYW1ldGVyIGBsaW5lbm8nIHdpdGgKCUFUVFJJQlVURV9VTlVTRUQuCgoJKiB0cmVlLmMgKHZhbGlkX21hY2hpbmVfYXR0cmlidXRlKTogTWFyayBwYXJhbWV0ZXJzIGBhdHRyX2FyZ3MnLAoJYGRlY2wnIGFuZCBgdHlwZScgd2l0aCBBVFRSSUJVVEVfVU5VU0VELgoKCSogdmFyYXNtLmMgKGRlY29kZV9yZWdfbmFtZSk6IENhc3QgYHNpemVvZicgZXhwcmVzc2lvbiB0byAoaW50KQoJd2hlbiBjb21wYXJpbmcgYWdhaW5zdCBvbmUuCgkoYXNzZW1ibGVfdmFyaWFibGUpOiBNYXJrIHBhcmFtZXRlciBgdG9wX2xldmVsJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKGFzc2VtYmxlX2V4dGVybmFsX2xpYmNhbGwpOiBNYXJrIHBhcmFtZXRlciBgZnVuJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoJKG91dHB1dF9jb25zdGFudF9wb29sKTogTWFyayBwYXJhbWV0ZXJzIGBmbm5hbWUnIGFuZCBgZm5kZWNsJyB3aXRoCglBVFRSSUJVVEVfVU5VU0VELgoKVHVlIE9jdCAxMyAxMjo1MTowNCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL3Y4NTAvbGliMWZ1bmNzLmFzbSAoX3VkaXZzaTMpOiBBZGQgLnR5cGUgZGVjbGFyYXRpb24uCglSZXBsYWNlIHVzZSBvZiByNSB3aXRoIHVzZSBvZiByMTkuCgoJKiBjb25maWcvdjg1MC92ODUwLmggKExJTktfUE9JTlRFUl9SRUdOVU0pOiBEZWZpbmUuCgoJKiBjb25maWcvdjg1MC92ODUwLmMgKGNvbXB1dGVfcmVnaXN0ZXJfc2F2ZV9zaXplKTogQWxsb3cgZm9yIHRoZQoJZmFjdCB0aGF0IGhlbHBlciBmdW5jdGlvbnMgc2F2ZSBhbGwgcmVnaXN0ZXJzLCBub3QganVzdCB0aG9zZSB1c2VkCglieSB0aGUgZnVuY3Rpb24uCgoJUmVwbGFjZSBjb25zdGFudCAzMSB3aXRoIG1hY3JvIExJTktfUE9JTlRFUl9SRUdOVU0uCgoJKiBjb25maWcvdjg1MC92ODUwLm1kOiBVc2UgJ2luZGlyZWN0X29wZXJhbmQnIHJhdGhlciB0aGFuCgknbWVtb3J5X29wZXJhbmQnIGZvciBiaXQgdGVzdC9zZXQvY2xlYXIgcGF0dGVybnMuCgpUdWUgT2N0IDEzIDExOjQ5OjE0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIG1pcHMvaXJpczYuaCAoQVNNX09VVFBVVF9XRUFLX0FMSUFTKTogQ2FsbCBBU01fR0xPQkFMSVpFX0xBQkVMLgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfc3RhcnRfZnVuY3Rpb24gZXQgYWwpOiBEb24ndCBjYWxsCglBU01fR0xPQkFMSVpFX0xBQkVMIGZvciB3ZWFrIHN5bWJvbHMuCgpUdWUgT2N0IDEzIDExOjM3OjQ1IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjc2UuYyAoZXF1aXZfY29uc3RhbnQpOiBDaGVjayBmb3IgTlVMTCByZXR1cm4gZnJvbQoJZ2VuX2xvd3BhcnRfaWZfcG9zc2libGUoKS4KClR1ZSBPY3QgMTMgMTE6MjQ6NTEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDIwMC5tZCAoYWRkc2kzLCBzdWJzaTMsIG5lZ3NpMik6IE9ubHkgYWxsb3cgcmVnaXN0ZXIgb3BlcmFuZHMuCgoJKiBjb2xsZWN0Mi5jIChtYWluKTogUGFzcyAtRUwvLUVCIHRocm91Z2ggdG8gdGhlIGNvbXBpbGVyLgoKMTk5OC0xMC0xMiAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiBleHByLmMgKHB1c2hfYmxvY2spOiBIYW5kbGUgdGFyZ2V0cyB3aGVyZSB0aGUgc3RhY2sgZ3Jvd3MKCXRvIGhpZ2hlciBhZGRyZXNzZXMsIGJ1dCBhcmdzIGdyb3cgdG8gbG93ZXIgYWRkcmVzc2VzIGFuZAoJQUNDVU1VTEFURV9PVVRHT0lOR19BUkdTIGlzIG5vdCBkZWZpbmVkLgoKVHVlIE9jdCAxMyAwODowMDo1MiAxOTk4ICBDYXRoZXJpbmUgTW9vcmUgIDxjbG1AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy92ODUwL3Y4NTAuYyAocHJpbnRfb3BlcmFuZCk6IEV4dGVuZCBtZWFuaW5nCglvZiAnYycgb3BlcmFuZHMgdG8gc3VwcG9ydCAudnRpbmhlcml0LgoKVHVlIE9jdCAxMyAyMTozODozNSAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBjb25maWcvYzR4L2M0eC5jOiBDb252ZXJ0IHRvIGdlbl9ydHhfRk9PLgoJQWRkZWQgQVRUUklCVVRFX1VOVVNFRCB0byB1bnVzZWQgZnVuY3Rpb24gYXJndW1lbnRzLgoJKHJjX3JlZ19vcGVyYW5kKTogTmV3IHByZWRpY2F0ZS4KCShjNHhfcnB0Yl9pbnNlcnQpOiBOZXcgZnVuY3Rpb24uCgkoYzR4X3JwdGJfbm9wX3ApOiBSZWNvZ25pemUgbW9kaWZpZWQgcnB0Yl90b3AgcGF0dGVybi4KCShjNHhfb3B0aW1pemF0aW9uX29wdGlvbnMpOiBOZXcgZnVuY3Rpb24uCgoJKiBjb25maWcvYzR4L2M0eC5tZDogQ29udmVydCB0byBnZW5fcnR4X0ZPTy4KCSAoZGVjcmVtZW50X2FuZF9icmFuY2hfb25fY291bnQpOiBOZXcgcGF0dGVybi4KCSAocnB0Yl90b3ApOiBNb2RpZmllZCBwYXR0ZXJuIHRvIHdvcmsgd2l0aCBCQ1Qgb3B0aW1pemF0aW9uLgoKCSogY29uZmlnL2M0eC9jNHguaCAoUkNfUkVHKTogTmV3IHJlZ2lzdGVyIGNsYXNzLgoJKHJjX3JlZ19vcGVyYW5kKTogRGVmaW5lIHByb3RvdHlwZS4KCShJU19SQ19SRUcpOiBOZXcgbWFjcm8uCgkoSVNfUkNfT1JfUFNFVURPX1JFRyk6IE5ldyBtYWNyby4KCShJU19SQ19PUl9QU0VVRE9fUkVHTk8pOiBOZXcgbWFjcm8uCgkoT1BUSU1JWkFUSU9OX09QVElPTlMpOiBEZWZpbmUuCgpNb24gT2N0IDEyIDE5OjU3OjM0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbGxlY3QyLmMgKGV4dHJhY3RfaW5pdF9wcmlvcml0eSk6IE5vIHByaW9yaXR5IGlzIDY1NTM1LgoKTW9uIE9jdCAxMiAxMjoxMDozNyAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIE1ha2VmaWxlLmluIChidWlsZF90b29sZGlyKTogTmV3IHZhcmlhYmxlLCBzYW1lIGFzIG9sZAoJJCh0b29sZGlyKSwgYnV0IHdpdGhvdXQgZGVwZW5kaW5nIG9uICQobGliZGlyKS8kKHVubGlic3ViZGlyKS4KCShHQ0NfRk9SX1RBUkdFVCk6IEFkZCAtQiQoYnVpbGRfdG9vbGRpcikvYmluLy4KCShib290c3RyYXAsIGJvb3RzdHJhcDIsIGJvb3RzdHJhcDMsIGJvb3RzdHJhcDQpOiBMaWtld2lzZS4KCgkqIGNvbmZpZ3VyZS5pbiAoZ3h4X2luY2x1ZGVfZGlyKTogU2V0IGRlZmF1bHQgYmFzZWQgb24gdW5saWJzdWJkaXIuCgkqIE1ha2VmaWxlLmluICh0b29sZGlyKTogTGlrZXdpc2UuCgkoY2NjcC5vLCBjcHBsaWIubyk6IFVzZSB1bmxpYnN1YmRpciBpbXBsaWNpdGx5IHRocm91Z2gKCWd4eF9pbmNsdWRlX2RpciwgaW5jbHVkZWRpciBhbmQgdG9vbGRpci4KCShwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8pOiBMaWtld2lzZS4KCk1vbiBPY3QgMTIgMTA6NTA6NDQgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kOiBSZXBsYWNlIChyZWcgMjQpIHdpdGggKHJlZzpDQyAyNCkuCgoJKiBjb25maWcvYXJtL3RodW1iLmMgKHRodW1iX292ZXJyaWRlX29wdGlvbnMpOiBBZGQgd2FybmluZyBhYm91dAoJUElDIGNvZGUgbm90IGJlaW5nIHN1cHBvcnRlZCBqdXN0IHlldC4KClN1biBPY3QgMTEgMTY6NDk6MTUgMTk5OCAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogZmxvdy5jOiBVcGRhdGUgY29tbWVudC4KCShub3RpY2Vfc3RhY2tfcG9pbnRlcl9tb2RpZmljYXRpb24pOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKHJlY29yZF92b2xhdGlsZV9pbnNucyk6IFVzZSBpdC4KCShtYXJrX3JlZ3NfbGl2ZV9hdF9lbmQpOiBNYXJrIHRoZSBzdGFjayBwb2ludGVyIGFzIGFsaXZlCglhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiBpZiBjdXJyZW50X2Z1bmN0aW9uX3NwX2lzX3VuY2hhbmdpbmcKCWlzIHNldC4KCShsaWZlX2FuYWx5c2lzXzEpOiBTZXQgY3VycmVudF9mdW5jdGlvbl9zcF9pc191bmNoYW5naW5nLgoJKiBmdW5jdGlvbi5jOiBEZWZpbmUgaXQuCgkoaW5pdF9mdW5jdGlvbl9zdGFydCk6IEluaXRpYWxpemUgaXQuCgkqIG91dHB1dC5oOiBEZWNsYXJlIGl0LgoJKiByZW9yZy5jIChmaWxsX3NpbXBsZV9kZWxheV9zbG90cywgZGJyX3NjaGVkdWxlKTogTWFyawoJdGhlIHN0YWNrIHBvaW50ZXIgYXMgYWxpdmUgYXQgdGhlIGVuZCBvZiB0aGUgZnVuY3Rpb24gaWYKCWN1cnJlbnRfZnVuY3Rpb25fc3BfaXNfdW5jaGFuZ2luZyBpcyBzZXQuCgkqIGkzODYuYyAoaXg4Nl9lcGlsb2d1ZSk6IE9wdGltaXplIHRoZSByZXN0b3JpbmcKCW9mIHRoZSBzdGFjayBwb2ludGVyLgoKTW9uIE9jdCAxMiAwMToyMjo1MyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBPY3QgMTEgMjM6MDQ6MzAgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogYy1wcmFnbWEuYyAoaGFuZGxlX3ByYWdtYV90b2tlbik6IElmIHBhc3NlZCBhIHRva2VuIGluc3RlYWQKCW9mIGEgdHJlZSwgdXNlIHRoYXQgYXMgdGhlIHBhY2sgdmFsdWUuCgpTdW4gT2N0IDExIDE0OjIxOjE0IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBGaXggcHJvdG90eXBlLgoKU3VuIE9jdCAxMSAwNTowMzo0MSAxOTk4ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCgkqIHRyZWUuaCAoREVDTF9OT19DSEVDS19NRU1PUllfVVNBR0UpOiBOZXcgbWFjcm9zLgoJKHN0cnVjdCB0cmVlX2RlY2wpOiBOZXcgZmllbGRzIG5vX2NoZWNrX21lbW9yeV91c2FnZS4KCSogYy1jb21tb24uYyAoZW51bSBhdHRycyk6IEFkZCBBX05PX0NIRUNLX01FTU9SWV9VU0FHRS4KCShpbml0X2F0dHJpYnV0ZXMpOiBSZWdpc3RlciBpdCBhcyBhIG5ldyBhdHRyaWJ1dGUuCgkoZGVjbF9hdHRyaWJ1dGVzKTogU2V0IGZsYWdzIG9uIGZ1bmN0aW9ucyBnaXZlbiB0aGF0IGF0dHJpYnV0ZS4KCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1lcmdlIG5ldyBhdHRyaWJ1dGUuCgkqIGV4cHIuaCAoY3VycmVudF9mdW5jdGlvbl9jaGVja19tZW1vcnlfdXNhZ2UpOiBEZWNsYXJlIG5ldyB2YXIuCgkqIGNhbGxzLmMsIGV4cHIuYywgZnVuY3Rpb24uYywgc3RtdC5jLCBhbHBoYS5jLCBjbGlwcGVyLmMsIG04OGsuYywKCXBhLmMsIHNwYXJjLmM6IFJlcGxhY2UgdXNlcyBvZiBmbGFnX2NoZWNrX21lbW9yeV91c2FnZSB3aXRoCgljdXJyZW50X2Z1bmN0aW9uX2NoZWNrX21lbW9yeV91c2FnZS4KCSogZnVuY3Rpb24uaDogQWRkIGZpZWxkIHRvIHN0cnVjdCBmdW5jdGlvbi4KCSogZnVuY3Rpb24uYyAoY3VycmVudF9mdW5jdGlvbl9jaGVja19tZW1vcnlfdXNhZ2UpOiBEZWZpbmUgaXQuCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvLCBwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogU2F2ZSBhbmQKCXJlc3RvcmUgaXQuCgkoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogU2V0IGl0LCBiYXNlZCBvbiBnbG9iYWwgZmxhZyBhbmQgZnVuY3Rpb24KCWF0dHJpYnV0ZS4KCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIsIGNhc2UgVkFSX0RFQ0wpOiBJbiBtZW1vcnktY2hlY2tpbmcgY29kZSwgZG8KCWNoZWNrIG5vbi1hdXRvbWF0aWMgdmFyaWFibGVzLCB0byBwZXJtaXQgZGV0ZWN0aW9uIG9mIHdyaXRlcyB0bwoJcmVhZC1vbmx5IGxvY2F0aW9ucyBpbiBlbWJlZGRlZCBzeXN0ZW1zIHdpdGhvdXQgbWVtb3J5IG1hbmFnZW1lbnQuCgkqIGNhbGxzLmMgKHN0b3JlX29uZV9hcmcpOiBVc2UgQVJHU19TSVpFX1JUWCB0byBnZXQgc2l6ZSBvZiBhcmd1bWVudAoJd2hlbiBlbWl0dGluZyBjaGtyX3NldF9yaWdodF9saWJmdW5jIGNhbGwsIGV2ZW4gaWYgdGhlIGFyZ3VtZW50IGlzCglCTEttb2RlIG9yIHZhcmlhYmxlLXNpemVkOyBkb24ndCBhYm9ydC4KCgkqIG9wdGFicy5jIChpbml0X29wdGFicyk6IENyZWF0ZSBDaGVja2VyIGFuZCBfX2N5Z19wcm9maWxlXyoKCXN5bWJvbHMgaW4gUG1vZGUsIG5vdCBWT0lEbW9kZS4KClN1biBPY3QgMTEgMDE6MDM6MDUgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGV4cC5jOiBXaGVuIGZvcmNpbmcgdW5zaWduZWQgY29tcGFyaXNvbnMsIGNhc3QgYm90aCBzaWRlcwoJb2YgdGhlIG9wZXJhdGlvbi4KCgkqIGNwcGhhc2guaDogTW92ZSBzdGF0aWMgZGVjbGFyYXRpb24gb2YgaGFzaHRhYltdLi4uCgkqIGNwcGhhc2guYzogLi4uaGVyZS4KCgkqIGNwcGxpYi5jOiBDYXN0IGRpZmZlcmVuY2Ugb2YgdHdvIHBvaW50ZXJzIHRvIHNpemVfdCBiZWZvcmUKCWNvbXBhcmluZyBpdCB0byBzaXplX3QuICBDYXN0IHNpZ25lZCB0byB1bnNpZ25lZAoJYmVmb3JlIGNvbXBhcmluZyB0byBzaXplX3QuIChGSVhNRTogc3RydWN0IGFyZ2RhdGEgc2hvdWxkIHVzZQoJdW5zaWduZWQgYnVmZmVyIHNpemVzLikKCSogY3BwbGliLmggKHN0cnVjdCBjcHBfcmVhZGVyKTogRGVjbGFyZSB0b2tlbl9idWZmZXJfc2l6ZSBhcwoJdW5zaWduZWQgaW50LiAoQ1BQX1dSSVRURU4pOiBDYXN0IHJldHVybiB2YWx1ZSB0byBzaXplX3QuCgkoQ1BQX1JFU0VSVkUpOiBQYXJlbnRoZXNpemUgTiBmb3IgZXZhbHVhdGlvbiBvcmRlciwgY2FzdCB0bwoJc2l6ZV90IGJlZm9yZSBjb21wYXJpc29uLgoKU3VuIE9jdCAxMSAwMDoxNToyOSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBmbG93LmMgKGZpbmRfYmFzaWNfYmxvY2tzKTogRGVsZXRlICJsaXZlX3JlYWNoYWJsZV9wIiBhcmd1bWVudC4KCShmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogU2ltaWxhcmx5LgoJKiBvdXRwdXQuaCAoZmluZF9iYXNpY19ibG9ja3MpOiBGaXggcHJvdG90eXBlLgoJKiBnY3NlLmMsIHRvcGxldi5jOiBEb24ndCBwYXNzICJsaXZlX3JlYWNoYWJsZV9wIiBhcmd1bWVudCB0bwoJZmluZF9iYXNpY19ibG9ja3MgYW55bW9yZS4KClNhdCBPY3QgMTAgMjI6MDA6MzQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGJhc2ljLWJsb2NrLmggKEVYRUNVVEVfSUZfU0VUX0lOX1NCSVRNQVApOiBOZXcgbWFjcm8uCgkoc2JpdG1hcF9mcmVlLCBzYml0bWFwX3ZlY3Rvcl9mcmVlKTogTmV3IG1hY3Jvcy4KCSogb3V0cHV0LmggKHJ0bF9kdW1wX2ZpbGUpOiBEZWNsYXJlLgoKU2F0IE9jdCAxMCAxNzowMTo0MiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWdtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzMpOiBIb25vciBUUlVMWV9OT09QX1RSVU5DQVRJT04uCgpGcmkgT2N0ICA5IDIyOjA4OjA1IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGZwLWJpdC5jIChTRnR5cGUpOiBEb24ndCBpbXBsaWNpdGx5IHVzZSBpbnQgaW4gZGVjbGFyYXRpb24uCgkoREZ0eXBlKTogTGlrZXdpc2UuCgkoX2ZwZGl2X3BhcnRzKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYHRtcCcsIGFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoZGl2aWRlKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBgdG1wJy4KCShzaV90b19mbG9hdCk6IENhc3QgbnVtZXJpYyBjb25zdGFudCB0byAoU0l0eXBlKSBiZWZvcmUgY29tcGFyaW5nCglpdCBhZ2FpbnN0IG9uZS4KCkZyaSBPY3QgIDkgMTY6MDM6MTkgMTk5OCAgR3JhaGFtICA8Z3JhaGFtc0ByY3AuY28udWs+CgoJKiBmbG93LmMgKHByaW50X3J0bF93aXRoX2JiKTogQ2hhbmdlZCB0eXBlIG9mIGluX2JiX3AgdG8gbWF0Y2ggdXNlLgoJKiBnY2MuYyAoYWRkX3ByZXByb2Nlc3Nvcl9vcHRpb24pOiBDb3JyZWN0IHR5cG8gd2hlbiBhbGxvY2F0aW5nCgltZW1vcnksIHNpemVvZigpIGFyZ3VtZW50IGhhZCBvbmUgdG9vIG1hbnkgYConLgoJKGFkZF9hc3NlbWJsZXJfb3B0aW9uKTogTGlrZXdpc2UuCgkoYWRkX2xpbmtlcl9vcHRpb24pOiBMaWtld2lzZS4KCSogZ2Nvdi5jIChvdXRwdXRfZGF0YSk6IExpa2V3aXNlLgoJKiBsb2NhbC1hbGxvYy5jIChtZW1yZWZfdXNlZF9iZXR3ZWVuX3ApOiBMaWtld2lzZS4KCSh1cGRhdGVfZXF1aXZfcmVncyk6IExpa2V3aXNlLgoJKiBsb29wLmMgKHN0cmVuZ3RoX3JlZHVjZSk6IExpa2V3aXNlLgoJKiByZWctc3RhY2suYyAocmVjb3JkX2FzbV9yZWdfbGlmZSk6IExpa2V3aXNlLgoJKHN1YnN0X2FzbV9zdGFja19yZWcpOiBMaWtld2lzZS4KCSogcmVvcmcuYyAoZGJyX3NjaGVkdWxlKTogTGlrZXdpc2UuCgpGcmkgT2N0ICA5IDE1OjU3OjUxIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIGZsb3cuYyAobGlmZV9hbmFseXNpc18xKTogQnJlYWsgb3V0IHNvbWUgZnVuY3Rpb25zLgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBMaWtld2lzZS4gIEFsc28gbW92ZSBzb21lIHZhcmlhYmxlcyBvdXQgYW5kCgltYWtlIHRoZW0gc3RhdGljLgoJUmVuYW1lIE5PTkxPQ0FMX0xBQkVMX0xJU1QgYXJnIHRvIE5PTkxPQ0FMX0xBQkVMUyBhbmQgaW5pdGlhbGl6ZQoJbmV3IHN0YXRpYyB2YXIgbm9ubG9jYWxfbGFiZWxfbGlzdCB3aXRoIGl0LgoJKGFjdGl2ZV9laF9yZWdpb24sIG5lc3RlZF9laF9yZWdpb24sIGxhYmVsX3ZhbHVlX2xpc3QsCglub25sb2NhbF9sYWJlbF9saXN0KTogTmV3IHN0YXRpYyB2YXJpYWJsZXMuCgkobWFrZV9lZGdlcywgZGVsZXRlX3VucmVhY2hhYmxlX2Jsb2NrcywgZGVsZXRlX2Jsb2NrKTogTmV3IHN0YXRpYwoJZnVuY3Rpb25zLCBicm9rZW4gb3V0IG9mIGZpbmRfYmFzaWNfYmxvY2tzXzEuCgkocmVjb3JkX3ZvbGF0aWxlX2luc25zLCBtYXJrX3JlZ3NfbGl2ZV9hdF9lbmQsIHNldF9ub29wX3AsCglub29wX21vdmVfcCk6IE5ldyBzdGF0aWMgZnVuY3Rpb25zLCBicm9rZW4gb3V0IG9mIGxpZmVfYW5hbHlzaXNfMS4KCkZyaSBPY3QgIDkgMTU6NDk6MjkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBQdW4gbm9uLWludGVncmFsIHN0cl9ydHggbW9kZXMuCglUYWtlIGV4dHJhIGNhcmUgZm9yIG9wMCBub3cgcG9zc2libHkgYmVpbmcgYSBzdWJyZWcuCgkoZXh0cmFjdF9iaXRfZmllbGQpOiBMaWtld2lzZS4KCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBSZXZlcnQgT2N0IDQgY2hhbmdlLiAgRHJvcAoJdGhlIHJlZyB0byBtZW1vcnkgaWYgdGhlcmUgaXMgbm8gZXF1YWwgc2l6ZWQgaW50ZWdyYWwgbW9kZS4KCSogc3Rvci1sYXlvdXQuYyAoaW50X21vZGVfZm9yX21vZGUpOiBOZXcgZnVuY3Rpb24uCgkqIG1hY2htb2RlLmg6IFByb3RvdHlwZSBpdC4KCkZyaSBPY3QgIDkgMTQ6MjY6NDQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZ2xvYmFsLmMgKGJ1aWxkX2luc25fY2hhaW4pOiBWZXJpZnkgbm8gcmVhbCBpbnNucyBleGlzdCBwYXN0IHRoZQoJZW5kIG9mIHRoZSBsYXN0IGJhc2ljIGJsb2NrLCB0aGVuIGV4aXQgdGhlIGxvb3AuCgpGcmkgT2N0ICA5IDExOjQ0OjQ3IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIGxvb3AuYyAoaW5zZXJ0X2JjdCk6IEVuc3VyZSBsb29wX2l0ZXJhdGlvbl92YXIgbm9uLXplcm8gYmVmb3JlIHVzZS4KClRodSBPY3QgIDggMjE6NTk6NDcgMTk5OCAgRGF2ZSBCcm9sbGV5ICA8YnJvbGxleUBjeWdudXMuY29tPgoKCSogZW1pdC1ydGwuYyAoaW5pdF9lbWl0X29uY2UpOiBDYWxsIElOSVRfRVhQQU5ERVJTLgoKVGh1IE9jdCAgOCAyMjowMzo0NSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoUlRYX0NPU1RTKTogQWRkIFBST0NFU1NPUl9QUEM2MDRlIGNhc2VzLgoKVGh1IE9jdCAgOCAxNzowMDoxOCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IENvcnJlY3RseSBkZXRlcm1pbmUgd2hlbiBhIGNhbGwKCWlzIHdpdGhpbiBhbiBleGNlcHRpb24gcmVnaW9uLgoKVGh1IE9jdCAgOCAxNzoxNTowNCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB0b3BsZXYuYyAob3V0cHV0X2ZpbGVfZGlyZWN0aXZlKTogVXNlIERJUl9TRVBBUkFUT1IsIG5vdCAnLycuCgoJKiBjcHBsaWIuaDogUHJvdGVjdCBmcm9tIG11bHRpcGxlIGluY2x1c2lvbnMuCgkqIGNwcGxpYi5jOiBGaXggbWlub3IgZm9ybWF0dGluZyBwcm9ibGVtcy4KCgkqIGkzODYveG0tY3lnd2luMzIuaDogT25seSBkZWZpbmUgUE9TSVggaWYgaXQgaXMgbm90IGFscmVhZHkgZGVmaW5lZC4KCgkqIGp1bXAuYyAoanVtcF9vcHRpbWl6ZSk6IFJldmVydCBhY2NpZGVudGFsIHBhdGNoLgoKCSogTWFrZWZpbGUuaW4gKGNwcGxpYi5vKTogVXNlIHVubGlic3ViZGlyLgoKVGh1IE9jdCAgOCAxMjo1MDo0NyAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGdldF9jb25kaXRpb24pOiBBbGxvdyBjb21iaW5lIHdoZW4gZWl0aGVyIGNvbXBhcmUgaXMKCVZPSURtb2RlLgoKVGh1IE9jdCAgOCAxMTozMTowMSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClRodSBPY3QgIDggMTI6MjE6MTQgMTk5OCAgUmljaGFyZCBGcml0aC1NYWNkb25hbGQgIDxyaWNoYXJkQGJyYWluc3Rvcm0uY28udWs+CgoJKiBjLWxleC5jIChyZW1lbWJlcl9wcm90b2NvbF9xdWFsaWZpZXJzKTogSGFuZGxlIFJJRF9CWVJFRi4KCShpbml0X2xleCk6IEluaXRpYWxpemUgcmlkcG9pbnRlcnNbUklEX0JZUkVGXS4KCSogYy1sZXguaCAoZW51bSByaWQpOiBBZGQgUklEX0JZUkVGLgoJKiBjLXBhcnNlLmdwZXJmOiBBZGQgUklEX0JZUkVGIGFzIGEgdHlwZSBxdWFsaWZpZXIuCgkqIG9iamMvb2JqYy1hY3QuYyAoaXNfb2JqY190eXBlX3F1YWxpZmllcnMpOiBIYW5kbGUgUklEX0JZUkVGLgoJKGVuY29kZV90eXBlX3F1YWxpZmllcnMpOiBTaW1pbGFybHkuCgkqIGMtZ3BlcmYuaDogUmVidWlsdC4KClRodSBPY3QgIDggMDU6NTY6MDAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogYy1jb21tb24uYyAodHlwZV9mb3JfbW9kZSk6IE9ubHkgcmV0dXJuIFRJdHlwZSBub2RlcyB3aGVuCglIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzID49IDY0IGJpdHMuCgkqIGMtZGVjbC5jIChpbnRUSV90eXBlX25vZGUsIHVuc2lnbmVkX2ludFRJX3R5cGVfbm9kZSk6IE9ubHkgZGVjbGFyZQoJd2hlbiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzID49IDY0IGJpdHMuCgkoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBPbmx5IGNyZWF0ZSBUSXR5cGUgbm9kZXMgd2hlbgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoJKiBjLXRyZWUuaCAoaW50VElfdHlwZV9ub2RlLCB1bnNpZ25lZF9pbnRUSV90eXBlX25vZGUpOiBPbmx5IGRlY2xhcmUKCXdoZW4gSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyA+PSA2NCBiaXRzLgoKVGh1IE9jdCAgOCAwNTowNTozNCAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CgoJKiBzdG10LmMgKG5fb2NjdXJyZW5jZXMpOiBOZXcgc3RhdGljIGZ1bmN0aW9uLgoJKGV4cGFuZF9hc21fb3BlcmFuZHMpOiBWZXJpZnkgdGhhdCBhbGwgY29uc3RyYWlucyBtYXRjaCBpbiB0aGUKCW51bWJlciBvZiBhbHRlcm5hdGl2ZXMuCglWZXJpZnkgdGhhdCAnKycgb3IgJz0nIGFyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGFuIG91dHB1dCBjb25zdHJhaW50LgoJRG9uJ3QgYWxsb3cgJyYnIGZvciBpbnB1dCBvcGVyYW5kcy4KCVZlcmlmeSB0aGF0ICclJyBpc24ndCB3cml0dGVuIGZvciB0aGUgbGFzdCBvcGVyYW5kLgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogQWJvcnQgaWYgYW4gYXNtIGlzIGZvdW5kIHdpdGggaW52YWxpZAoJY29uc3RyYWludHM7IGFsbCBwb3NzaWJsZSBwcm9ibGVtcyBvdWdodCB0byBiZSBjaGVja2VkIGZvciBlYXJsaWVyLgoKVGh1IE9jdCAgOCAwNDoyNjoyMCAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBmbGFncy5oIChmbGFnX2JyYW5jaF9vbl9jb3VudF9yZWcpOiBBbHdheXMgZGVjbGFyZS4KCSogdG9wbGV2LmMgKGZsYWdfYnJhbmNoX29uX2NvdW50X3JlZyk6IExpa2V3aXNlLgoJKiB0b3BsZXYuYzogRml4IHR5cG9zLgoKCSogcmVhbC5jIChjNHh0b2UpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4gIEFkZCBzb21lIG1pc3NpbmcgcGFyZW5zLgoJKHRvYzR4KTogU2ltaWxhcmx5LgoKVGh1IE9jdCAgOCAwMToyNToyMiAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrcyk6IENhbGMgdXBwZXIgYm91bmQgZm9yIGV4dHJhIG5vcHMgaW4KCW1heF91aWRzX2Zvcl9mbG93LgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBBZGQgYSBub3AgdG8gdGhlIGVuZCBvZiBhIGJhc2ljIGJsb2NrIHdoZW4KCWEgdHJhaWxpbmcgY2FsbCBpbnNuIGRvZXMgbm90IGhhdmUgYWJub3JtYWwgY29udHJvbCBmbG93LgoJKiBnY3NlLmMgKHByZV90cmFuc3BvdXQpOiBOZXcgdmFyaWFibGUuCgkoYWxsb2NfcHJlX21lbSwgZnJlZV9wcmVfbWVtLCBkdW1wX3ByZV9kYXRhKTogQm9va2tlZXBpbmcgZm9yIGl0LgoJKGNvbXB1dGVfcHJlX3RyYW5zcG91dCk6IENhbGN1bGF0ZSBpdC4KCShjb21wdXRlX3ByZV9wcGlub3V0KTogVXNlIGl0IHRvIGVsaW1pbmF0ZSBpbXBvc3NpYmxlIHBsYWNlbWVudHMKCWR1ZSB0byBhYm5vcm1hbCBjb250cm9sIGZsb3cgdGhyb3VnaCBjYWxscy4KCShjb21wdXRlX3ByZV9kYXRhKTogQ2FsbCBjb21wdXRlX3ByZV90cmFuc3BvdXQuCgpXZWQgT2N0ICA3IDIxOjQwOjI0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKEFTTV9DUFVfU1BFQyk6IEZpeCB0eXBvLgoKV2VkIE9jdCAgNyAyMToxOTo0NiAxOTk4ICBLZW4gUmFlYnVybiAgPHJhZWJ1cm5AY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9taXBzL21pcHMubWQgKHRhYmxlanVtcF9pbnRlcm5hbDMsIHRhYmxlanVtcF9pbnRlcm5hbDQKCWFuZCBtYXRjaGluZyBkZWZpbmVfaW5zbnMpOiBUYWNrIG9uIGEgYHVzZScgb2YgdGhlIHRhYmxlIGxhYmVsLCBzbwoJZmxvdyBhbmFseXNpcyB3aWxsIHJlY29nbml6ZSBhIHRhYmxlanVtcC4KCldlZCBPY3QgIDcgMTc6MzM6MzkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGdjc2UuYyAocHJlX2luc2VydF9pbnNuKTogVHdlZWsgdG8gbm90aWNlIHRoYXQgY2FsbHMgZG8gbm90CglhbHdheXMgZW5kIGJhc2ljIGJsb2NrcyBmb3IgYWJub3JtYWwgZWRnZSByZWFzb25zLgoKV2VkIE9jdCAgNyAxNDo0MDo0MyAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2kzODYvaTM4Ni5oOiBSZW1vdmUgZGVmaW5pdGlvbiBvZgoJSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoKCSogY29uZmlnL2kzODYvZ28zMi5oOiBBZGQgZGVmaW5pdGlvbiBvZgoJSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoKCSogY29uZmlnL2kzODYvd2luMzIuaDogQWRkIGRlZmluaXRpb24gb2YKCUhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUC4KCgkqIGNvbmZpZy9pMzg2L2N5Z3dpbjMyLmg6IEFkZCBkZWZpbml0aW9uIG9mCglIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AuCgoJKiBjLXByYWdtYS5jIChpbnNlcnRfcGFja19hdHRyaWJ1dGVzKTogRG8gbm90IGluc2VydAoJYXR0cmlidXRlcyB1bmxlc3MgI3ByYWdtYSBwYWNrKHB1c2gsPG4+KSBpcyBpbiBlZmZlY3QuCgpXZWQgT2N0ICA3IDEyOjEwOjQ2IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGV4cHIuYyAoZW1pdF9ncm91cF9zdG9yZSk6IEhhbmRsZSBhIFBBUkFMTEVMIGRlc3RpbmF0aW9uLgoKV2VkIE9jdCAgNyAxMDowNzoyOSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2NzZS5jIChwcmVfaW5zZXJ0X2luc24pOiBXaGVuIGEgY2FsbCBlbmRzIGEgYmIsIGluc2VydAoJdGhlIG5ldyBpbnNucyBiZWZvcmUgdGhlIGFyZ3VtZW50IHJlZ3MgYXJlIGxvYWRlZC4KCldlZCBPY3QgIDcgMTI6NTU6MjYgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKGMtZ3BlcmYuaCk6IEFkZCAtTCBLUi1DIC1GICcsIDAsIDAnIGZsYWdzIHRvIGdwZXJmLgoJKGMtcGFyc2UuZ3BlcmYpOiBVcGRhdGUgY29tbWVudHMgZGVzY3JpYmluZyBpbnZvY2F0aW9uIGZsYWdzLgoJKGMtZ3BlcmYuaCk6IFJlZ2VuZXJhdGUgdXNpbmcgZ3BlcmYgMi43LjEgKDE5OTgxMDA2IGVnY3MpLgoKMTk5OC0xMC0wNyAgTWFuZnJlZCBIb2xsc3RlaW4gIDxtYW5mcmVkQHMtZGlyZWt0bmV0LmRlPgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBDYWxsIGZyZWUgYmVmb3JlIGNsb2JiZXJpbmcgdGhlIG1lbW9yeQoJbG9jYXRpb25zIG9yIGNvbnN0YW50cyBwb2ludGVycy4KCldlZCBPY3QgIDcgMDI6MDU6MjAgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc29sMi1zbGQtNjQuaCAoVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FKTogUmV3b3JrCglmb3IgZWZmaWNpZW5jeSBieSBjaGVja2luZyB3aGV0aGVyIHdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBjdXJyZW50CglzdGFjayBwZXJtaXNzaW9uIGF0IGFsbC4KCShBU01fT1VUUFVUX0NPTlNUUlVDVE9SLCBBU01fT1VUUFVUX0RFU1RSVUNUT1IpOiBEZWZpbmUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBFbWl0CglfX2VuYWJsZV9leGVjdXRlX3N0YWNrIGxpYmNhbGwgaGVyZSB0b28gaWYKCVRSQU5TRkVSX0ZST01fVFJBTVBPTElORSBpcyBkZWZpbmVkLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaDogU2V0IFRBUkdFVF9BUkNIMzIgdG8gYSBjb25zdGFudCBpZgoJSU5fTElCR0NDMi4KCldlZCBPY3QgIDcgMDI6Mjc6NTIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogTWFrZWZpbGUuaW4gKERSSVZFUl9ERUZJTkVTKTogUmVtb3ZlIGxhc3QgY2hhbmdlLgoKV2VkIE9jdCAgNyAwMTowODo0MyAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBQb29sLkluZm9ybWF0aWsuUldUSC1BYWNoZW4uREU+CgoJKiBqdW1wLmMgKGR1cGxpY2F0ZV9sb29wX2V4aXRfdGVzdCk6IFN0cmlwIFJFR19XQVNfMCBub3RlcyBvZmYgYWxsCglpbnNucyB3ZSdyZSBnb2luZyB0byBjb3B5LgoJKiByZWdjbGFzcy5jIChyZWdfc2Nhbl9tYXJrX3JlZnMpOiBEb24ndCB0ZXN0IFggZm9yIE5VTExfUlRYLgoKCSogbG9vcC5jIChjb3VudF9vbmVfc2V0KTogQWRkIHByb3RvdHlwZS4KCgkqIGNhbGxlci1zYXZlLmMgKHJlc3RvcmVfcmVmZXJlbmNlZF9yZWdzKTogTG9zZSBtb2RlIGFyZ3VtZW50LgoJKGluc2VydF9zYXZlKTogTG9zZSBtb2RlIGFyZ3VtZW50LgoJKGluc2VydF9yZXN0b3JlKTogTG9zZSBtb2RlIGFyZ3VtZW50LgoJKGluc2VydF9vbmVfaW5zbik6IExvc2UgbW9kZSBhcmd1bWVudC4KCShzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MpOiBMb3NlIG1vZGUgYXJndW1lbnQuCgkoc2V0dXBfc2F2ZV9hcmVhcyk6IFRha2Ugbm8gYXJndW1lbnQgYW5kIHJldHVybiB2b2lkLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCglEb24ndCB2ZXJpZnkgdmFsaWRpdHkgb2YgbWVtb3J5IGFkZHJlc3Nlcy4KCSogcmVsb2FkLmggKHNldHVwX3NhdmVfYXJlcyk6IEFkanVzdCBwcm90b3R5cGUuCgkoc2F2ZV9jYWxsX2Nsb2JiZXJlZF9yZWdzKTogTGlrZXdpc2UuCgkqIHJlbG9hZDEuYyAoZGVsZXRlX2NhbGxlcl9zYXZlX2luc25zKTogTmV3IGZ1bmN0aW9uLgoJKGNhbGxlcl9zYXZlX3NwaWxsX2NsYXNzKTogRGVsZXRlIHZhcmlhYmxlLgoJKGNhbGxlcl9zYXZlX2dyb3VwX3NpemUpOiBEZWxldGUgdmFyaWFibGUuCgkocmVsb2FkKTogQ2FsbCBzZXR1cF9zYXZlX2FyZWFzIGFuZCBzYXZlX2NhbGxfY2xvYmJlcmVkX3JlZ3MKCWluIHRoZSBtYWluIGxvb3AsIGJlZm9yZSBjYWxsaW5nIGNhbGN1bGF0ZV9uZWVkc19hbGxfaW5zbnMuCglEb24ndCBjYWxsIHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyBhZnRlciB0aGUgbG9vcC4KCUNhbGwgZGVsZXRlX2NhbGxlcl9zYXZlX2luc25zIGF0IHRoZSBlbmQgb2YgYW4gaXRlcmF0aW9uIGlmCglzb21ldGhpbmcgY2hhbmdlZC4KCURlbGV0ZSBjb2RlIHRvIG1hbmFnZSBjYWxsZXJfc2F2ZV9zcGlsbF9jbGFzcy4KCUVtaXQgdGhlIGZpbmFsIG5vdGUgYmVmb3JlIHNldHRpbmcgcmVsb2FkX2ZpcnN0X3VpZC4KCVNpbXBsaWZ5IHRlc3QgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgcmVsb2FkX2FzX25lZWRlZCBnZXRzIHJ1bi4KCShjYWxjdWxhdGVfbmVlZHMpOiBEZWxldGUgY29kZSB0byBtYW5hZ2UgY2FsbGVyX3NhdmVfc3BpbGxfY2xhc3MuCgpUdWUgT2N0ICA2IDE1OjQyOjI3IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb2xsZWN0Mi5jIChtYWluKTogSW5pdGlhbGl6ZSBsZF9maWxlX25hbWUuCgpUdWUgT2N0ICA2IDE1OjQ1OjE1IDE5OTggIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogY29uZmlnL3NwYXJjL3N5c3Y0LmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRG9uJ3QKCWNoZWNrIGZvciBmbGFnX2Z1bmN0aW9uX3NlY3Rpb25zLgoKVHVlIE9jdCAgNiAyMDowMjozMSAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogY3NlLmMgKGluc2VydF9yZWdzKTogRml4IGJ1ZyBpbiBTZXAgMjQgY2hhbmdlLgoKVHVlIE9jdCAgNiAxNzowMDo0MiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogZmxhZ3MuaCAoZmxhZ19kdW1wX3VubnVtYmVyZWQpOiBEZWNsYXJlLgoJKiB0b3BsZXYuYyAoZmxhZ19kdW1wX3VubnVtYmVyZWQpOiBEb24ndCBkZWNsYXJlLgoJKiBwcmludC1ydGwuYyAoZmxhZ3MuaCk6IEluY2x1ZGUuCgkocHJpbnRfcnRsX3NpbmdsZSk6IEFkZCByZXR1cm4gdmFsdWUuCgkqIHJ0bC5oIChwcmludF9ydGxfc2luZ2xlKTogVXBkYXRlIGRlY2xhcmF0aW9uLgoJKiBmbG93LmMgKGZsYWdfZHVtcF91bm51bWJlcmVkKTogRG9uJ3QgZGVjbGFyZS4KCShwcmludF9ydGxfd2l0aF9iYik6IFVzZSByZXR1cm4gdmFsdWUgb2YgcHJpbnRfcnRsX3NpbmdsZS4KClR1ZSBPY3QgIDYgMDE6MzY6MDAgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPgoKCSogbG9vcC5jIChjb3VudF9vbmVfc2V0KTogTmV3IHN0YXRpYyBmdW5jdGlvbiwgYnJva2VuIG91dCBvZgoJY291bnRfbG9vcF9yZWdzX3NldC4KCShjb3VudF9sb29wX3JlZ3Nfc2V0KTogQ2FsbCBpdC4KCSogZ2xvYmFsLmMgKG1hcmtfcmVnX3N0b3JlKTogSGFuZGxlIGNsb2JiZXJzIGhlcmUgYnkgbm90IGNhbGxpbmcKCXNldF9wcmVmZXJlbmNlLgoJKG1hcmtfcmVnX2Nsb2JiZXIpOiBKdXN0IGNhbGwgbWFya19yZWdfc3RvcmUgYWZ0ZXIgZW5zdXJpbmcgU0VUVEVSCglpcyBpbiBmYWN0IGEgY2xvYmJlci4KCSogaW50ZWdyYXRlLmMgKHByb2Nlc3NfcmVnX3BhcmFtKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mCglleHBhbmRfaW5saW5lX2Z1bmN0aW9uLgoJKGV4cGFuZF9pbmxpbmVfZnVuY3Rpb24pOiBDYWxsIGl0LgoKCSogaTM4Ni5tZCAoYWRkc2lkaTNfMSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgdGVtcC4KCShhZGRzaWRpM18yKTogTGlrZXdpc2UuCgkoY2xzdHJzdHJzaSk6IERlbGV0ZSB1bnVzZWQgdmFyaWFibGUgYWRkcjEuCgoJKiBydGwuaDogRG9uJ3QgZGVjbGFyZSBhbnkgZnVuY3Rpb25zIGFsc28gZGVjbGFyZWQgaW4gcmVjb2cuaC4KCgkqIE1ha2VmaWxlLmluIChzdHVwaWQubyk6IFVwZGF0ZSBkZXBlbmRlbmNpZXMuCgkoZ2xvYmFsLm8pOiBMaWtld2lzZS4KCgkqIGdsb2JhbC5jOiBJbmNsdWRlIHJlbG9hZC5oLgoJKHJlZ19iZWNvbWVzX2xpdmUpOiBOZXcgZnVuY3Rpb24uCgkocmVnX2RpZXMpOiBOZXcgZnVuY3Rpb24uCgkoYnVpbGRfaW5zbl9jaGFpbik6IE5ldyBmdW5jdGlvbi4KCShnbG9iYWxfYWxsb2MpOiBDYWxsIGJ1aWxkX2luc25fY2hhaW4gYmVmb3JlIGNhbGxpbmcgcmVsb2FkLgoKCSogcmVsb2FkLmggKHN0cnVjdCBuZWVkcyk6IE5ldyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbi4KCShzdHJ1Y3QgaW5zbl9jaGFpbik6IExpa2V3aXNlLgoJKHJlbG9hZF9pbnNuX2NoYWluKTogRGVjbGFyZSB2YXJpYWJsZS4KCShuZXdfaW5zbl9jaGFpbik6IERlY2xhcmUgZnVuY3Rpb24uCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9zdGFydG9iaik6IE5ldyB2YXJpYWJsZS4KCShyZWxvYWRfaW5zbl9jaGFpbik6IE5ldyB2YXJpYWJsZS4KCSh1bnVzZWRfaW5zbl9jaGFpbnMpOiBOZXcgdmFyaWFibGUuCgkobmV3X2luc25fY2hhaW4pOiBOZXcgZnVuY3Rpb24uCgkoaW5pdF9yZWxvYWQpOiBJbml0aWFsaXplIHJlbG9hZF9zdGFydG9iaiwgbm90IHJlbG9hZF9maXJzdG9iai4KCShyZWxvYWQpOiBJbml0aWFsaXplIHJlbG9hZF9maXJzdG9iai4KCUJlZm9yZSByZXR1cm5pbmcsIGZyZWUgZXZlcnl0aGluZyBvbiB0aGUgcmVsb2FkX29ic3RhY2suCgoJKiBzdHVwaWQuYzogSW5jbHVkZSBpbnNuLWNvbmZpZy5oLCByZWxvYWQuaCBhbmQgYmFzaWMtYmxvY2suaC4KCShyZWdfd2hlcmVfZGVhZF9jaGFpbiwgcmVnX3doZXJlX2Jvcm5fZXhhY3QsIHJlZ193aGVyZV9ib3JuX2Nsb2JiZXIsCgljdXJyZW50X2NoYWluKTogTmV3IHZhcmlhYmxlcy4KCShyZWdfd2hlcmVfYm9ybik6IERlbGV0ZSB2YXJpYWJsZS4KCShSRUdfV0hFUkVfQk9STik6IE5ldyBtYWNyby4KCShmaW5kX2Nsb2JiZXJlZF9yZWdzKTogTmV3IGZ1bmN0aW9uLgoJKHN0dXBpZF9saWZlX2FuYWx5c2lzKTogRG9uJ3QgYWxsb2NhdGUvZnJlZSByZWdfd2hlcmVfYm9ybi4KCUFsbG9jYXRlIGFuZCBmcmVlIHJlZ193aGVyZV9ib3JuX2V4YWN0LCByZWdfd2hlcmVfYm9ybl9jbG9iYmVyLAoJcmVnX3doZXJlX2RlYWRfY2hhaW4uCglVc2UgUkVHX1dIRVJFX0JPUk4gaW5zdGVhZCBvZiByZWdfd2hlcmVfYm9ybi4KCVdoaWxlIHByb2Nlc3NpbmcgdGhlIGluc25zLCBidWlsZCB0aGUgcmVsb2FkX2luc25fY2hhaW4gd2l0aAoJaW5mb3JtYXRpb24gYWJvdXQgcmVnaXN0ZXIgbGlmZXRpbWVzLgoJKHN0dXBpZF9yZWdfY29tcGFyZSk6IFVzZSBSRUdfV0hFUkVfQk9STiBpbnN0ZWFkIG9mIHJlZ193aGVyZV9ib3JuLgoJKHN0dXBpZF9tYXJrX3JlZnMpOiBSZXBsYWNlIGFyZyBJTlNOIHdpdGggYXJnIENIQUlOLiAgQWxsIGNhbGxlcnMKCWNoYW5nZWQuCglDb21wdXRlIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBiaXJ0aCBhbmQgZGVhdGggb2YgcHNldWRvIHJlZ2lzdGVycyBpbgoJcmVnX3doZXJlX2RlYWRfY2hhaW4sIHJlZ193aGVyZV9ib3JuX2V4YWN0IGFuZCByZWdfd2hlcmVfYm9ybl9jbG9iYmVyLgoJRGVsZXRlIGNvZGUgdG8gc2V0IGVsZW1lbnRzIG9mIHJlZ193aGVyZV9ib3JuLgoKTW9uIE9jdCAgNSAyMjozNDozMCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmIChHT1RPX0VYUFIpOiBNb2RpZmllZCBkb2N1bWVudGF0aW9uLgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogRXhwYW5kIEdPVE9fRVhQUiBpbnRvIGEgZ290byBvciBhIGNvbXB1dGVkCglnb3RvLgoKTW9uIE9jdCAgNSAyMjo0MzozNiAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiB1bnJvbGwuYyAobG9vcF9pdGVyYXRpb25fdmFyLCBsb29wX2luaXRpYWxfdmFsdWUsIGxvb3BfaW5jcmVtZW50Cglsb29wX2ZpbmFsX3ZhbHVlLCBsb29wX2NvbXBhcmlzb25fY29kZSk6IE5vIGxvbmdlciBzdGF0aWMuCgkodW5yb2xsX2xvb3ApOiBEZWxldGUgbG9vcF9zdGFydF92YWx1ZSB1cGRhdGUuCgkqIGxvb3AuaCAobG9vcF9pdGVyYXRpb25fdmFyLCBsb29wX2luaXRpYWxfdmFsdWUsIGxvb3BfaW5jcmVtZW50LAoJbG9vcF9maW5hbF92YWx1ZSwgbG9vcF9jb21wYXJpc29uX2NvZGUpOiBFeHRlcm4uCgkobG9vcF9zdGFydF92YWx1ZSk6IERlbGV0ZSBleHRlcm4uCgkqIGxvb3AuYyAobG9vcF9jYW5faW5zZXJ0X2JjdCwgbG9vcF9pbmNyZW1lbnQsIGxvb3Bfc3RhcnRfdmFsdWUsCglsb29wX2NvbXBhcmlzb25fdmFsdWUsIGxvb3BfY29tcGFyaXNvbl9jb2RlKTogRGVsZXRlLgoJKGxvb3Bfb3B0aW1pemUpOiBSZW1vdmUgaW5pdGlhbGl6YXRpb24gZm9yIGRlbGV0ZWQgdmFyaWFibGVzLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IERlbGV0ZSBhbmFseXplX2xvb3BfaXRlcmF0aW9ucyBjYWxsLiAgT25seSBjYWxsCglpbnNlcnRfYmN0IGlmIGZsYWdfYnJhbmNoX2NvdW50X29uX3JlZyBzZXQuCgkoYW5hbHl6ZV9sb29wX2l0ZXJhdGlvbnMpOiBEZWxldGUuCgkoaW5zZXJ0X2JjdCk6IFJlbW92ZSBpdGVyYXRpb24gY291bnQgY2FsY3VsYXRpb24uICBNb3ZlIGNoZWNrcyBmb3IKCXZpYWJsZSBCQ1Qgb3B0aW1pemF0aW9uIHRvIGhlcmUuICBPYnRhaW4gaXRlcmF0aW9uIGNvdW50IGZyb20KCWxvb3BfaXRlcmF0aW9ucyBhbmQgY29ycmVjdCBmb3IgdW5yb2xsaW5nLiAgQ2hlY2sgZm9yIGVub3VnaAoJaXRlcmF0aW9uIHRvIGJlIGJlbmVmaWNpYWwuICBDb21tZW50IG91dCBydW50aW1lIGl0ZXJhdGlvbiBjb3VudAoJY2FzZS4KCShpbnNlcnRfYmN0KTogUHJpbnQgaXRlcmF0aW9uIGNvdW50IGluIGR1bXAgZmlsZS4gIFJlbW92ZQoJbG9vcF92YXJfbW9kZSBhbmQgdXNlIHdvcmRfbW9kZSBkaXJlY3RseS4KCgkqIHJzNjAwMC5oIChwcm9jZXNzb3JfdHlwZSk6IEFkZCBQUk9DRVNTT1JfUFBDNjA0ZS4KCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogVXNlIGl0LgoJKG9wdGltaXphdGlvbl9vcHRpb25zKTogRW5hYmxlIHVzZSBvZiBmbGFnX2JyYW5jaF9vbl9jb3VudF9yZWcuCgkqIHJzNjAwMC5tZCAoZGVmaW5lX2Z1bmN0aW9uX3VuaXQpOiBEZXNjcmliZSA2MDRlLgoKMTk5OC0xMC0wNSAgSGVybWFuIEEuSi4gdGVuIEJydWdnZSAgPEhhai5UZW4uQnJ1Z2dlQG5ldC5IQ0Mubmw+CgoJKiBsb29wLmMgKG1vdmVfbW92YWJsZXMpOiBDb3JyZWN0ZWQgdGhyZXNob2xkIGNhbGN1bGF0aW9uIGZvcgoJbW92ZWRfb25jZSByZWdpc3RlcnMuCgpNb24gT2N0ICA1IDIxOjE4OjQ1IDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIGxvb3AuYyAoY29tYmluZV9naXZzX3ApOiBGaXggdGVzdCBmb3IgaWRlbnRpY2FsIGdpdnMuCgpNb24gT2N0ICA1IDEwOjExOjI4IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBkd2FyZjJvdXQuYyAoZ2VuX3N1YnByb2dyYW1fZGllKTogSWYgZXJyb3Jjb3VudCBub256ZXJvLCBkb24ndAoJY2FsbCBhYm9ydCBpZiB0aGUgZnVuY3Rpb24gaXMgYWxyZWFkeSBkZWZpbmVkLgoKTW9uIE9jdCAgNSAxMDowMjozNiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb21iaW5lLmMgKHNpbXBsaWZ5X3J0eCk6IERvIG5vdCByZXBsYWNlIFRSVU5DQVRFIHdpdGggYSBTVUJSRUcgaWYKCXRydW5jYXRpb24gaXMgbm90IGEgbm8tb3AuCgpNb24gT2N0ICA1IDA5OjAyOjA0IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIE9jdCAgNSAwODoxOTo1NSAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBPY3QgIDUgMDE6MDc6MjMgMTk5OCAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQG1hdGVtYXRpay5zdS5zZT4KCgkqIGV4cG1lZC5jIChleHBhbmRfZGl2bW9kKTogRG9uJ3Qgd2lkZW4gZm9yIGNvbXB1dGluZyByZW1haW5kZXIKCWlmIHdlIHNlZW0gdG8gaGF2ZSBhIGRpdm1vZCBwYXR0ZXJuIGZvciBuZWVkZWQgbW9kZS4KCk1vbiBPY3QgIDUgMDE6MDE6NDIgMTk5OCAgWmFjayBXZWluYmVyZyAgPHphY2tAcmFiaS5waHlzLmNvbHVtYmlhLmVkdT4KCgkqIGNwcGxpYi5jIChtYWNyb2V4cGFuZCk6IENvcnJlY3Qgb2ZmLWJ5LW9uZSBlcnJvciBpbiBoYW5kbGluZwoJb2YgZXNjYXBlcy4KClN1biBPY3QgIDQgMjM6NTg6MzAgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGNvbWJpbmUuYyAoZXhwYW5kX2ZpZWxkX2Fzc2lnbm1lbnQpOiBEb24ndCBkbyBiaXR3aXNlIG9wZXJhdGlvbnMKCW9uIE1PREVfRkxPQVQ7IHB1biB0byBNT0RFX0lOVCBpZiBwb3NzaWJsZS4KClN1biBPY3QgIDQgMTg6MzM6MjQgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoJCQkgIHNjb3R0IHNueWRlciAgPHNueWRlckBkMHNnaWYuZm5hbC5nb3Y+CgoJKiB0bGluay5jIChzY2FuX2xpbmtlcl9vdXRwdXQpOiBSZWNvZ25pemUgZXJyb3JzIGZyb20gaXJpeCA2LjIKCWxpbmtlci4gIFJlY29nbml6ZSBtYW5nbGVkIG5hbWVzIGluIHF1b3Rlcy4KClN1biBPY3QgIDQgMDI6NTg6MjAgMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGFzaGxkaTMrMSk6IE5hbWUgaXQgYXNobGRpM19zcDY0LgoJKGFzaGxzaTNfY29uc3QxLCBhc2hsZGkzX2NvbnN0MSk6IE5ldyBjb21iaW5lciBwYXR0ZXJucy4KCShhc2hyc2kzX2V4dGVuZCwgYXNocnNpM19leHRlbmQyKTogTmV3IGNvbWJpbmVyIHBhdHRlcm5zLgoJKGxzaHJzaTNfZXh0ZW5kLCBsc2hyc2kzX2V4dGVuZDIpOiBMaWtld2lzZS4KClN1biBPY3QgIDQgMDA6MjM6MDAgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBmdW5jdGlvbi5jIChwdXJnZV9hZGRyZXNzb2ZfMSk6IElmIHRyeWluZyB0byB0YWtlIGEgc3ViLXdvcmQKCWludGVncmFsIHBpZWNlIG9mIGEgZmxvYXRpbmcgcG9pbnQgbW9kZSwgcHV0IGl0IG9uIHRoZSBzdGFjay4KClNhdCBPY3QgIDMgMTk6MDE6MDMgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhL2xpbnV4LmggKENQUF9QUkVERUZJTkVTKTogRGVmaW5lIF9fYWxwaGFfXyBmb3IgaW1ha2UuCgpTYXQgT2N0ICAzIDE0OjQyOjE5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIFBST0pFQ1RTOiBSZW1vdmUgdGVtcGxhdGUgZnJpZW5kcy4KCgkqIGNvbGxlY3QyLmMgKHNvcnRfaWRzKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZS4KCgkqIHRtLnRleGkgKE1BVEhfTElCUkFSWSk6IERvY3VtZW50LgoJKE5FRURfTUFUSF9MSUJSQVJZKTogUmVtb3ZlLgoKCSogdmFyYXNtLmMgKGFzc2VtYmxlX3N0YXJ0X2Z1bmN0aW9uLCBhc3NlbWJsZV92YXJpYWJsZSwgd2Vha19maW5pc2gsCglhc3NlbWJsZV9hbGlhcyk6IERvIEFTTV9HTE9CQUxJWkVfTEFCRUwgZm9yIHdlYWsgc3ltYm9scywgdG9vLgoKU2F0IE9jdCAgMyAxNjoxNDo0NCAxOTk4ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGR3YXJmMm91dC5jIChleHBhbmRfYnVpbHRpbl9kd2FyZl9yZWdfc2l6ZSk6IEluaXRpYWxpemUKCWxhc3RfZW5kIHRvIDB4N2ZmZmZmZmYuCgpGcmkgT2N0ICAyIDE5OjE0OjIwIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogZnVuY3Rpb24uYyAocHVyZ2VfYWRkcmVzc29mXzEpOiBEbyBub3QgcGVyZm9ybSBlbmRpYW5uZXNzCgljb3JyZWN0aW9ucyBvbiBiaXRwb3MsIHdobyB3ZSBjYWxsIHdpbGwgZG8gaXQgZm9yIHVzLgoKRnJpIE9jdCAgMiAxMTo1MjozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoODMwMC5jIChXT1JEX1JFR19VU0VEKTogRml4IHR5cG8uCgkoaW5pdGlhbF9vZmZzZXQpOiBVc2UgV09SRF9SRUdfVVNFRC4KCgkqIGg4MzAwLmMgKGhhbmRsZV9wcmFnbWEpOiBGaXggdHlwby4KCkZyaSBPY3QgIDIgMTA6NTE6MzUgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAUG9vbC5JbmZvcm1hdGlrLlJXVEgtQWFjaGVuLkRFPgoKCSogY2FsbGVyLXNhdmUuYyAoaW5zZXJ0X3NhdmVfcmVzdG9yZSk6IEJyZWFrIHRoaXMgZnVuY3Rpb24gdXAKCWludG8gbmV3IGZ1bmN0aW9ucyBpbnNlcnRfcmVzdG9yZSwgaW5zZXJ0X3NhdmUgYW5kIGluc2VydF9vbmVfaW5zbi4KCUFsbCBjYWxsZXJzIGNoYW5nZWQuCgkoaW5zZXJ0X3Jlc3RvcmUpOiBOZXcgZnVuY3Rpb24sIG1vc3RseSBicm9rZW4gb3V0IG9mCglpbnNlcnRfc2F2ZV9yZXN0b3JlLgoJKGluc2VydF9zYXZlKTogTGlrZXdpc2UuCgkoaW5zZXJ0X29uZV9pbnNuKTogTGlrZXdpc2UuCgkocmVzdG9yZV9yZWZlcmVuY2VkX3JlZ3MpOiBOZXcgYXJndW1lbnQgQkxPQ0suICBBbGwgY2FsbGVycyBjaGFuZ2VkLgoJKHNhdmVfY2FsbF9jbG9iYmVyZWRfcmVncyk6IERvbid0IGtlZXAgdHJhY2sgb2YgYmFzaWMgYmxvY2sgYm91bmRhcmllcwoJaW4gdGhpcyBmdW5jdGlvbiwgZG8gaXQgaW4gaW5zZXJ0X29uZV9pbnNuIGluc3RlYWQuCgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IEJyZWFrIG91dCBzb21lIG1vcmUgcGllY2VzIGludG8gc2VwYXJhdGUKCWZ1bmN0aW9ucy4KCShkdW1wX25lZWRzKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHJlbG9hZC4KCShzZXRfaW5pdGlhbF9lbGltX29mZnNldHMpOiBMaWtld2lzZS4KCShpbml0X2VsaW1fdGFibGUpOiBMaWtld2lzZS4KCSh1cGRhdGVfZWxpbWluYWJsZXMpOiBMaWtld2lzZS4KCgkqIGdsb2JhbC5jIChnbG9iYWxfYWxsb2MpOiBEZWxldGUgY29kZSB0byBtYW5hZ2UgdGhlIHNjcmF0Y2hfbGlzdC4KCSogbG9jYWwtYWxsb2MuYyAocXR5X3NjcmF0Y2hfcnR4KTogRGVsZXRlLgoJKHNjcmF0Y2hfYmxvY2spOiBEZWxldGUuCgkoc2NyYXRjaF9saXN0KTogRGVsZXRlLgoJKHNjcmF0Y2hfbGlzdF9sZW5ndGgpOiBEZWxldGUuCgkoc2NyYXRjaF9pbmRleCk6IERlbGV0ZS4KCShhbGxvY19xdHlfZm9yX3NjcmF0Y2gpOiBEZWxldGUuCgkobG9jYWwtYWxsb2MpOiBVcGRhdGUgaW5pdGlhbGl6YXRpb24gb2YgbWF4X3F0eS4KCURlbGV0ZSBjb2RlIHRvIG1hbmFnZSB0aGUgc2NyYXRjaCBsaXN0LgoJRGVsZXRlIGNvZGUgdG8gYWxsb2NhdGUvaW5pdGlhbGl6ZSBxdHlfc2NyYXRjaF9ydHguCgkoYmxvY2tfYWxsb2MpOiBEb24ndCBhbGxvY2F0ZSBxdWFudGl0aWVzIGZvciBzY3JhdGNoZXMuCglEZWxldGUgY29kZSB0byBtYW5hZ2UgdGhlIHNjcmF0Y2ggbGlzdC4KCSogcmVncy5oIChzY3JhdGNoX2xpc3QpOiBEZWxldGUgZGVjbGFyYXRpb24uCgkoc2NyYXRjaF9ibG9jayk6IERlbGV0ZSBkZWNsYXJhdGlvbi4KCShzY3JhdGNoX2xpc3RfbGVuZ3RoKTogRGVsZXRlIGRlY2xhcmF0aW9uLgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IERlbGV0ZSBjb2RlIHRvIG1hbmFnZSB0aGUgc2NyYXRjaCBsaXN0LgoJKHNwaWxsX2hhcmRfcmVnKTogTGlrZXdpc2UuCgkobWFya19zY3JhdGNoX2xpdmUpOiBEZWxldGUuCgoJKiByZWNvZy5jIChhbHRlcl9zdWJyZWcpOiBEZWxldGUgZGVjbGFyYXRpb24uCgoxOTk4LTEwLTAyICBBbmRyZWFzIEphZWdlciAgPGFqQGFydGh1ci5yaGVpbi1uZWNrYXIuZGU+CgoJKiBNYWtlZmlsZS5pbiAoY2NjcC5vKTogRml4IHR5cG8gaW4gbGFzdCBwYXRjaC4KCkZyaSBPY3QgIDIgMTY6MTM6MTIgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHQtc2ggKExJQjFBU01GVU5DUyk6IEFkZCBfc2V0X2Zwc2NyIC4KCSogY29uZmlnL3NoL2xpYjFmdW5jcy5hc20gKF9fX3NldF9mcHNjcik6IEFkZC4KCkZyaSBPY3QgIDIgMDI6MDE6NTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVnY2xhc3MuYyAocmVnX3NjYW5fbWFya19yZWZzKTogUmV0dXJuIGltbWVkaWF0ZWx5IGlmIHBhc3NlZCBhCglOVUxMX1JUWCBhcyBhbiBhcmd1bWVudC4KCgkqIE1ha2VmaWxlLmluICh1bmxpYnN1YmRpcik6IERlZmluZS4KCShEUklWRVJfREVGSU5FUyk6IFVzZSB1bmxpYnN1YmRpci4KCShjY2NwLm8sIGNwcGxpYi5vLCBwcm90b2l6ZS5vLCB1bnByb3RvaXplLm8pOiBTaW1pbGFybHkuCgkoc3RtcC1maXhpbmMpOiBTaW1pbGFybHkuCgpUaHUgT2N0ICAxIDE5OjU4OjMwIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QFBvb2wuSW5mb3JtYXRpay5SV1RILUFhY2hlbi5ERT4KCgkqIHJlZ21vdmUuYyAocmVnbW92ZV9vcHRpbWl6ZSk6IEFkZCB2YXJpYWJsZSBvbGRfbWF4X3VpZC4KCUF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLCB1cGRhdGUgYmFzaWNfYmxvY2tfZW5kLgoKVGh1IE9jdCAgMSAxNzo1ODoyNSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGR3YXJmMm91dC5jIChleHBhbmRfYnVpbHRpbl9kd2FyZl9yZWdfc2l6ZSk6IFVzZQoJRklSU1RfUFNFVURPX1JFR0lTVEVSIGFzIHVwcGVyIGJvdW5kIGZvciBsYXN0X2VuZCwgbm90IGFuCglhcmJpdHJhcnkgY29uc3RhbnQuCgpUaHUgT2N0ICAxIDE3OjU3OjE0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL2FybS5jOiBJbXByb3ZlIGludGVyd29ya2luZyBzdXBwb3J0LgoKVGh1IE9jdCAgMSAxODo0MzozNSAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBGaXggdGVzdCBpZiByZWxvYWRfcmVnX3J0eFtyXSB3YXMKCWNvcGllZCBmcm9tIHJlbG9hZF9vdXRbcl0gLgoKVGh1IE9jdCAgMSAxOToyMDowOSAxOTk4ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGR3YXJmMm91dC5jIChleHBhbmRfYnVpbHRpbl9kd2FyZl9yZWdfc2l6ZSk6IEZpeCB0byB3b3JrCgl3aXRoIG1vcmUgdGhhbiB0aHJlZSBzaXplIHJhbmdlcy4KCgkqIGZsb3cuYyAoc2JpdG1hcF9jb3B5KTogVXNlIGJjb3B5IHRvIGNvcHkgYml0bWFwLgoKCSogcnRsLmMgKG1vZGVfbmFtZSk6IEFkZCBhIG51bGwgc3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIGFycmF5LgoJKG1vZGVfd2lkZXJfbW9kZSk6IENoYW5nZSB0eXBlIHRvIHVuc2lnbmVkIGNoYXIuCgkobW9kZV9tYXNrX2FycmF5KTogTmV3IHZhcmlhYmxlLgoJKGluaXRfcnRsKTogVXBkYXRlIGZvciBtb2RlX3dpZGVyX21vZGUgdHlwZSBjaGFuZ2UuCgoJKiBydGwuaCAobW9kZV93aWRlcl9tb2RlKTogQ2hhbmdlIHR5cGUgdG8gdW5zaWduZWQgY2hhci4KCShtb2RlX21hc2tfYXJyYXkpOiBEZWNsYXJlLgoJKEdFVF9NT0RFX01BU0spOiBVc2UgbW9kZV9tYXNrX2FycmF5LgoKVGh1IE9jdCAgMSAxNTo1NjowMSAxOTk4ICBHYXZpbiBSb21pZy1Lb2NoICA8Z2F2aW5AY3lnbnVzLmNvbT4KCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKSA6IEVuY2Fwc3VsYXRlIGNvZGUgaW50bwoJY29weV9ibGttb2RlX2Zyb21fcmVnLgoJKiBleHByLmMgKGNvcHlfYmxrbW9kZV9mcm9tX3JlZyk6IE5ldyBmdW5jdGlvbi4KCSogZXhwci5oIChjb3B5X2Jsa21vZGVfZnJvbV9yZWcpOiBOZXcgZnVuY3Rpb24uCgkqIGludGVncmF0ZS5jIChmdW5jdGlvbl9jYW5ub3RfaW5saW5lX3ApOiBXZSBjYW4gaW5saW5lCgl0aGVzZSBub3cuCgkoZXhwYW5kX2lubGluZV9mdW5jdGlvbik6IFVzZSBjb3B5X2Jsa21vZGVfZnJvbV9yZWcKCWlmIG5lZWRlZC4gIEF2b2lkIGNyZWF0aW5nIEJMS21vZGUgUkVHcy4KCShjb3B5X3J0eF9hbmRfc3Vic3RpdHV0ZSk6IERvbid0IHRyeSB0byBTVUJSRUcgYSBCTEttb2RlCglvYmplY3QuCgpUaHUgT2N0ICAxIDEwOjQyOjI3IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvdjg1MC92ODUwLmM6IEFkZCBmdW5jdGlvbiBwcm90b3R5cGVzLgoJQWRkIHN1cHBvcnQgZm9yIHY4NTAgc3BlY2lhbCBkYXRhIGFyZWFzLgoKCSogY29uZmlnL3Y4NTAvdjg1MC5oOiBBZGQgc3VwcG9ydCBmb3Igdjg1MCBzcGVjaWFsIGRhdGEgYXJlYXMuCgoJKiBjLXByYWdtYS5jOiBBZGQgc3VwcG9ydCBmb3IgSEFORExFX1BSQUdNQV9QQUNLIGFuZAoJSEFORExFX1BSQUdNQV9QQUNLX1BVU0hfUE9QLgoJKHB1c2hfYWxpZ25tZW50KTogTmV3IGZ1bmN0aW9uOiBDYWNoZSBhbiBhbGlnbm1lbnQgcmVxdWVzdGVkCglieSBhICNwcmFnbWEgcGFjayhwdXNoLDxuPikuCgkocG9wX2FsaWdubWVudCk6IE5ldyBmdW5jdGlvbjogUG9wIGFuIGFsaWdubWVudCBmcm9tIHRoZQoJYWxpZ25tZW50IHN0YWNrLgoJKGluc2VydF9wYWNrX2F0dHJpYnV0ZXMpOiBOZXcgZnVuY3Rpb246IEdlbmVyYXRlIF9fcGFja2VkX18KCWFuZCBfX2FsaWduZWRfXyBhdHRyaWJ1dGVzIGZvciBuZXcgZGVjbHMgd2hpbHN0IGEgI3ByYWdtYSBwYWNrCglpcyBpbiBlZmZlY3QuCgkoYWRkX3dlYWspOiBOZXcgZnVuY3Rpb246IENhY2hlIGEgI3ByYWdtYSB3ZWFrIGRpcmVjdGl2ZS4KCShoYW5kbGVfcHJhZ21hX3Rva2VuKTogRG9jdW1lbnQgY2FsbGluZyBjb252ZW50aW9ucy4gIEFkZAoJc3VwcG9ydCBmb3IgI3ByYWdtYSBwYWNrKHB1c2gsPG4+KSBhbmQgI3ByYWdtYSBwYWNrIChwb3ApLgoKCSogYy1wcmFnbWEuaDogSWYgSEFORExFX1NZU1ZfUFJBR01BIG9yIEhBTkRMRV9QUkFHTUFfUEFDS19QVVNIX1BPUAoJYXJlIGRlZmluZWQgZW5hYmxlIEhBTkRMRV9QUkFHTUFfUEFDSy4KCU1vdmUgJ3N0cnVjdCB3ZWFrX3N5bXMnIGhlcmUgKGZyb20gdmFyYXNtLmMpLgoJQWRkIHByYWdtYSBzdGF0ZXMgZm9yIHB1c2ggYW5kIHBvcCBwcmFnbWFzLgoKCSogYy1jb21tb24uYyAoZGVjbF9hdHRyaWJ1dGVzKTogQ2FsbCBQUkFHTUFfSU5TRVJUX0FUVFJJQlVURVMKCWlmIGl0IGlzIGRlZmluZWQuCgoJKiBjLWxleC5jOiBSZXBsYWNlIG9jY3VyYW5jZXMgb2YgSEFORExFX1NZU1ZfUFJBR01BIHdpdGgKCUhBTkRMRV9HRU5FUklDX1BSQUdNQVMuCgoJKiB2YXJhc20uYzogTW92ZSBkZWZpbml0aW9uIG9mICdzdHJ1Y3Qgd2Vha19zeW1zJyBpbnRvCgljLXByYWdtYS5oLgoJKGhhbmRsZV9wcmFnbWFfd2Vhayk6IERlbGV0ZWQuCgoJKiBjb25maWcvaTM4Ni9pMzg2Lmg6IERlZmluZSBIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AuCgoJKiBjb25maWcvd2lubnQvd2luLW50Lmg6IERlZmluZSBIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1AuCgoJKiBjLWRlY2wuYyAoc3RhcnRfZnVuY3Rpb24pOiBBZGQgaW52b2NhdGlvbiBvZgoJU0VUX0RFRkFVTFRfREVDTF9BVFRSSUJVVEVTLCBpZiBkZWZpbmVkLgoKCSogdG0udGV4aTogUmVtb3ZlIGRlc2NyaXB0aW9uIG9mIG5vbi1leGlzdGVudCBtYWNybwoJU0VUX0RFRkFVTFRfU0VDVElPTl9OQU1FLgoKCShIQU5ETEVfU1lTVl9QUkFHTUEpOiBEb2N1bWVudC4KCShIQU5ETEVfUFJBR01BX1BBQ0tfUFVTSF9QT1ApOiBEb2N1bWVudC4KCldlZCBTZXAgMzAgMjI6Mjc6NTMgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogY29uZmlnLnN1YjogUmVjb2duaXplIGlbMzQ1NjddODYtcGMtdWRrIGFzIG5ldyB0YXJnZXQuCgkqIGNvbmZpZ3VyZS5pbjogTGlrZXdpc2UuCgkqIGNvbmZpZy9pMzg2L3QtdWRrOiBOZXcgZmlsZS4KCSogY29uZmlnL2kzODYvdWRrLmg6IE5ldyBmaWxlLgoKV2VkIFNlcCAzMCAxOTozMzowNyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZW9yZy5jIChjaGVja19hbm51bF9saXN0X3RydWVfZmFsc2UpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KCShzdGVhbF9kZWxheV9saXN0X2Zyb21fdGFyZ2V0KTogQWRkIG1pc3NpbmcgInVzZWRfYW5udWwiIHZhcmlhYmxlLgoJKHRyeV9tZXJnZV9kZWxheV9pbnNucyk6IENsb3NlIG91dCBoYWxmIGZvcm1lZCBjb21tZW50LgoKV2VkIFNlcCAzMCAxOToxMzoyMCAxOTk4ICBaYWNrIFdlaW5iZXJnICA8emFja0ByYWJpLnBoeXMuY29sdW1iaWEuZWR1PgoKCSogY3BwbGliLmMgKG1hY3JvZXhwYW5kKTogSWYgYXJnLT5yYXdfYmVmb3JlIG9yCglhcmctPnJhd19hZnRlciwgcmVtb3ZlIGFueSBuby1yZWV4cGFuc2lvbiBlc2NhcGUgYXQgdGhlCgliZWdpbm5pbmcgb2YgdGhlIHBhc3RlZCB0b2tlbi4gIENvcnJlY3QgaGFuZGxpbmcgb2Ygd2hpdGVzcGFjZQoJbWFya2VycyBhbmQgbm8tcmVleHBhbmQgbWFya2VycyBhdCB0aGUgZW5kIGlmIGFyZy0+cmF3X2FmdGVyLgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogUmVjb2duaXplIC1pbmNsdWRlLAoJLWltYWNyb3MsIC1pd2l0aHByZWZpeCwgLWl3aXRocHJlZml4YmVmb3JlLgoJKiBjcHBsaWIuYyAoY3BwX3N0YXJ0X3JlYWQpOiBQcm9jZXNzIC1pbWFjcm9zIGFuZCAtaW5jbHVkZQoJc3dpdGNoZXMgYXQgdGhlIHNhbWUgdGltZSBhbmQgaW4gY29tbWFuZC1saW5lIG9yZGVyLCBhZnRlcgoJaW5pdGlhbGl6aW5nIHRoZSBkZXBlbmRlbmN5LW91dHB1dCBjb2RlLiAgRW1pdCBwcm9wZXJseSBuZXN0ZWQKCSNsaW5lIGRpcmVjdGl2ZXMgZm9yIHRoZW0uICBFbWl0IGEgI2xpbmUgZm9yIHRoZSBtYWluIGZpbGUKCWJlZm9yZSBwcm9jZXNzaW5nIHRoZXNlIHN3aXRjaGVzLCBhbmQgZG9uJ3QgZG8gaXQgYWdhaW4KCWFmdGVyd2FyZC4KCldlZCBTZXAgMzAgMTg6MDM6MjIgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKHB1cmdlX2FkZHJlc3NvZl8xKTogVXNlIGJpdGZpZWxkIG1hbmlwdWxhdGlvbgoJcm91dGluZXMgdG8gaGFuZGxlIG1lbSBtb2RlIDwgcmVnIG1vZGUuCgpXZWQgU2VwIDMwIDE4OjQzOjMyIDE5OTggIEhlcm1hbiB0ZW4gQnJ1Z2dlICA8SGFqLlRlbi5CcnVnZ2VAbmV0LkhDQy5ubD4KCgkqIHJlb3JnLmMgKHRyeV9tZXJnZV9kZWxheV9pbnNucyk6IEFjY291bnQgZm9yIHJlc291cmNlcyByZWZlcmVuY2VkCglpbiBlYWNoIGluc3RydWN0aW9uIGluIElOU04ncyBkZWxheSBsaXN0IGJlZm9yZSB0cnlpbmcgdG8gZWxpbWluYXRlCgl1c2VsZXNzIGluc3RydWN0aW9ucy4gIFNpbWlsYXJseSB3aGVuIGxvb2tpbmcgYXQgYSB0cmlhbCBpbnNuJ3MgZGVsYXkKCXNsb3RzLgoKCSogcmVvcmcuYyAoY2hlY2tfYW5udWxfbGlzdF90cnVlX2ZhbHNlKTogTmV3IGZ1bmN0aW9uLgoJKHN0ZWFsX2RlbGF5X2xpc3RfZnJvbV97dGFyZ2V0LGZhbGx0aHJvdWdofSk6IENhbGwgaXQgYW5kIGFsc28KCXJlZmluZSB0ZXN0cyBmb3Igd2hlbiB3ZSBtYXkgYW5udWwgaWYgYWxyZWFkeSBmaWxsZWQgYSBzbG90LgoJKGZpbGxfc2xvdHNfZnJvbV90aHJlYWQpOiBMaWtld2lzZS4KCShkZWxldGVfZnJvbV9kZWxheV9zbG90KTogUmV0dXJuIG5ld2x5LWNyZWF0ZWQgdGhyZWFkLgoJKHRyeV9tZXJnZV9kZWxheV9pc25zKTogVXNlIGl0cyBuZXcgcmV0dXJuIHZhbHVlLgoKV2VkIFNlcCAzMCAxODoyOToyNiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFVzZSBhIHZhbmlsbGEgbG9vcCByZXZlcnNhbCBpZiB0aGUgYml2IGlzCgl1c2VkIHRvIGNvbXB1dGUgYSBnaXYgb3IgYXMgc29tZSBvdGhlciBub24tY291bnRpbmcgdXNlLgoKV2VkIFNlcCAzMCAxODoxOToyNyAxOTk4ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiByZWdzLmggKEhBUkRfUkVHTk9fQ0FMTF9QQVJUX0NMT0JCRVJFRCk6IE5ldyBtYWNyby4KCSogbG9jYWwtYWxsb2MuYyAoZmluZF9mcmVlX3JlZyk6IFVzZSBpdC4KCSogZ2xvYmFsLmMgKGZpbmRfcmVnKTogTGlrZXdpc2UuCgkqIHRtLnRleGk6IERvY3VtZW50IEhBUkRfUkVHTk9fQ0FMTF9QQVJUX0NMT0JCRVJFRC4KCgkqIHJlZ3MuaCAoSEFSRF9SRUdOT19DQUxMRVJfU0FWRV9NT0RFKTogTmV3IG1hY3JvLgoJKiBjYWxsZXItc2F2ZS5jIChpbml0X2NhbGxlcl9zYXZlKTogVXNlIGl0LgoJKiB0bS50ZXhpOiBEb2N1bWVudCBIQVJEX1JFR05PX0NBTExFUl9TQVZFX01PREUuCgpXZWQgU2VwIDMwIDEyOjU3OjMwIDE5OTggIFphY2sgV2VpbmJlcmcgIDx6YWNrQHJhYmkucGh5cy5jb2x1bWJpYS5lZHU+CgoJKiBjb25maWd1cmUuaW46IEFkZCAtLWVuYWJsZS1jcHBsaWIgb3B0aW9uIHdoaWNoIHVzZXMgY3BwbGliCglmb3IgY3BwLCBidXQgZG9lc24ndCBsaW5rIGNwcGxpYiBpbnRvIGNjMS4gIE1ha2UgaGVscCB0ZXh0CgljYXBpdGFsaXphdGlvbiBjb25zaXN0ZW50LgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpXZWQgU2VwIDMwIDEwOjA5OjM5IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBmdW5jdGlvbi5jIChnZW5fbWVtX2FkZHJlc3NvZik6IElmIHRoZSBhZGRyZXNzIFJFRyBpcwoJUkVHX1VTRVJWQVJfUCBtYWtlIHRoZSBuZXcgUkVHIGJlIHNvIGFsc28uCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogQXBwbHkgRGVNb3JnYW4ncyBsYXdzIGFuZCBhZGQgZG9jdW1lbnRhdGlvbgoJaW4gYW4gYXR0ZW1wdCB0byBjbGFyaWZ5IHNsaWdodGx5LgoKV2VkIFNlcCAzMCAwOTo1Nzo0MCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogSGFuZGxlIENPTVBPTkVOVF9SRUYsIEJJVF9GSUVMRF9SRUYgQVJSQVlfUkVGCglhbmQgSU5ESVJFQ1RfUkVGIGluIGNvZGUgdG8gY2hlY2sgTUFYX0lOVEVHRVJfQ09NUFVUQVRJT05fTU9ERS4KCldlZCBTZXAgMzAgMTA6MTM6MzkgMTk5OCAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYzogRml4IGxhc3QgcGF0Y2guCgpUdWUgU2VwIDI5IDIwOjAzOjE4IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGxvb3AuYyAoZ2V0X2NvbmRpdGlvbik6IEZpeCB0eXBvIGluIE1heSA5IGNoYW5nZS4KClR1ZSBTZXAgMjkgMTE6MTE6MzggMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogaW52b2tlLnRleGkgKC1mZXhjZXB0aW9ucyk6IE1lcmdlIDIgZGlmZmVyZW50IGRlc2NyaXB0aW9ucy4KCk1vbiBTZXAgMjggMjI6MDg6NTIgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogdG9wbGV2LmMgKGRvY3VtZW50ZWRfbGFuZ19vcHRpb25zKTogU3BlbGxpbmcgY29ycmVjdGlvbnMuCgpNb24gU2VwIDI4IDE5OjQxOjI0IDE5OTggIEFsZXhhbmRyZSBPbGl2YSAgPG9saXZhQGRjYy51bmljYW1wLmJyPgoKCSogY29uZmlndXJlLmluOiBOZXcgZmxhZ3MgLS13aXRoLWxkIGFuZCAtLXdpdGgtYXMsIGVxdWl2YWxlbnQKCXRvIHNldHRpbmcgTEQgYW5kIEFTIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRlc3Qgd2hldGhlcgoJc3BlY2lmaWVkIGFyZ3VtZW50cyBhcmUgR05VIGNvbW1hbmRzLCBhbmQgcmVwb3J0IHRoZW0gd2l0aAoJY2hlY2tpbmcgbWVzc2FnZXMuICBVc2UgdGhlIHNwZWNpZmllZCBBUyBmb3IgY29uZmlndXJlCgl0ZXN0cyB0b28uCgkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCgkqIGFjY29uZmlnLmg6IEFkZCBERUZBVUxUX0FTU0VNQkxFUiBhbmQgREVGQVVMVF9MSU5LRVIuCgkqIGNvbmZpZy5pbjogTGlrZXdpc2UuCgkqIGdjYy5jIChmaW5kX2FfZmlsZSk6IFdoZW4gbG9va2luZyBmb3IgYGFzJyBhbmQgYGxkJywgcmV0dXJuCgl0aGUgREVGQVVMVCBwcm9ncmFtIGlmIGl0IGV4aXN0cy4KCSogY29sbGVjdDIuYyAobWFpbik6IFVzZSBERUZBVUxUX0xJTktFUiBpZiBpdCBleGlzdHMuCgoJKiBnY2MuYyAoZmluZF9hX2ZpbGUpOiBUaGUgdGVzdCBmb3IgZXhpc3RlbmNlIG9mIGEgZnVsbAoJcGF0aG5hbWUgd2FzIHJldmVyc2VkLgoKTW9uIFNlcCAyOCAxNzozNDozNSAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5oIChBU01fT1VUUFVUX01JX1RIVU5LKTogT25seSBkZWZpbmUgb24gRUxGIHN5c3RlbXMuCgkqIHJzNjAwMC5jIChvdXRwdXRfbWlfdGh1bmspOiBBbHdheXMgdXNlIGEgcmF3IGp1bXAgZm9yIG5vdy4KCk1vbiBTZXAgMjggMTQ6MjQ6MDMgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHRyZWUuaCAoVFlQRV9CSU5GTyk6IERvY3VtZW50LgoKTW9uIFNlcCAyOCAxMjo1NTo0OSAxOTk4ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIGkzODYtY29mZi5oIChkYnhjb2ZmLmgpOiBBZGRlZC4KCk1vbiBTZXAgMjggMTI6NTE6MDAgMTk5OCAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiB0b3BsZXYuYzogRml4IGJhZCBwYXRjaCBhcm91bmQgZmxhZ19kYXRhX3NlY3Rpb25zLgoKTW9uIFNlcCAyOCAxMDozMjoyOCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogcmVsb2FkMS5jIChyZWxvYWQpOiBVc2UgcmVsb2FkX2FkZHJlc3NfaW5kZXhfcmVnX2NsYXNzIGFuZAoJcmVsb2FkX2FkZHJlc3NfYmFzZV9yZWdfY2xhc3Mgd2hlbiBzZXR0aW5nCgljYWxsZXJfc2F2ZV9zcGlsbF9jbGFzcy4gIChQYXRjaCBnZW5lcmF0ZWQgYnkgSmltIFdpbHNvbjoKCXdpbHNvbkBjeWdudXMuY29tKS4KCk1vbiBTZXAgMjggMDc6NDM6MzQgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIGMtY29tbW9uLmMgKGNfZ2V0X2FsaWFzX3NldCk6IFRpZ2h0ZW4gc2xpZ2h0bHkgZm9yIEZVTkNUSU9OX1RZUEVzCglhbmQgQVJSQVlfVFlQRXMuICBUaWR5IHVwLiAgSW1wcm92ZSBzdXBwb3J0IGZvciB0eXBlLXB1bm5pbmcuCgkqIGV4cHIuYyAoc3RvcmVfZmllbGQpOiBBZGQgYWxpYXNfc2V0IHBhcmFtZXRlci4gIFNldCB0aGUKCU1FTV9BTElBU19TRVQgYWNjb3JkaW5nbHksIGlmIHRoZSB0YXJnZXQgaXMgYSBNRU0uCgkoZXhwYW5kX2Fzc2lnbm1lbnQpOiBVc2UgaXQuCgkoc3RvcmVfY29uc3RydWN0b3JfZmllbGQpOiBQYXNzIDAuCgkoZXhwYW5kX2V4cHIpOiBMaWtld2lzZS4KCk1vbiBTZXAgMjggMDc6NTQ6MDMgMTk5OCAgQ2F0aGVyaW5lIE1vb3JlICA8Y2xtQGN5Z251cy5jb20+CgoJKiBmbGFncy5oOiBBZGQgZmxhZ19kYXRhX3NlY3Rpb25zLgoJKiB0b3BsZXYuYzogQWRkIG9wdGlvbiAtZmRhdGEtc2VjdGlvbnMuICBBZGQgZmxhZ19kYXRhX3NlY3Rpb25zLgoJKGNvbXBpbGVfZmlsZSk6IEVycm9yIGlmIGZsYWdfZGF0YV9zZWN0aW9ucyBub3Qgc3VwcG9ydGVkLgoJKiB2YXJhc20uYyAoYXNzZW1ibGVfdmFyaWFibGUpOiBIYW5kbGUgZmxhZ19kYXRhX3NlY3Rpb25zLgoJKiBjb25maWcvc3ZyNC5oOiBNb2RpZnkgcHJlZml4ZXMgZm9yIFVOSVFVRV9TRUNUSU9OX05BTUUuCgkqIGNvbmZpZy9taXBzL2VsZi5oOiBMaWtld2lzZS4KCSogY29uZmlnL21pcHMvZWxmNjQuaDogTGlrZXdpc2UuCgkqIGludm9rZS50ZXhpOiBEZXNjcmliZSAtZmRhdGEtc2VjdGlvbnMuCgpNb24gU2VwIDI4IDA0OjE1OjQ0IDE5OTggIENyYWlnIEJ1cmxleSAgPGJ1cmxleUBtZWxhbmdlLmdudS5vcmc+CgoJKiBpbnZva2UudGV4aSAoLWZmbG9hdC1zdG9yZSk6IENsYXJpZnkgdGhhdCB0aGlzIG9wdGlvbgoJZG9lcyBub3QgYWZmZWN0IGludGVybWVkaWF0ZSByZXN1bHRzIC0tIG9ubHkgdmFyaWFibGVzLgoKTW9uIFNlcCAyOCAwNDoxMTozNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjcHAudGV4aTogVXBkYXRlIGZvciBGb3J0cmFuIHVzYWdlIGZyb20gQ3JhaWcuCgpGcmkgU2VwIDI1IDIyOjA5OjQ3IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChmdW5jdGlvbl9hcmdfYm91bmRhcnkpOiBSZXZlcnQgYWNjaWRlbnRhbCBjaGFuZ2Ugb24KCVNlcHRlbWJlciAxOC4KCkZyaSBTZXAgMjUgMjA6MzA6MDAgMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiByczYwMDAuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IERlY2xhcmUsIGNhbGwgb3V0cHV0X21pX3RodW5rLgoJKG91dHB1dF9taV90aHVuayk6IERlY2xhcmUuCgoJKiByczYwMDAuYyAob3V0cHV0X21pX3RodW5rKTogRnVuY3Rpb24gdG8gY3JlYXRlIHRodW5rcyBmb3IgTUkuCgkob3V0cHV0X2Z1bmN0aW9uX3Byb2ZpbGVyKTogVXNlIHIxMiBmb3IgdGVtcCwgaW5zdGVhZCBvZiByMTEgc28KCXRoYXQgd2UgcHJlc2VydmUgdGhlIHN0YXRpYyBjaGFpbiByZWdpc3Rlci4KCkZyaSBTZXAgMjUgMTQ6MTg6MzMgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogc2Rib3V0LmMgKHNkYm91dF9vbmVfdHlwZSk6IERvbid0IGxvb2sgYXQgVFlQRV9CSU5GTyBmaWVsZCBvZiBlbnVtcy4KCkZyaSBTZXAgMjUgMTk6MzA6MTkgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHNoLmMgKGdlbl9zaGxfc2V4dCk6IEZpeCBjYXNlIDUuCgpGcmkgU2VwIDI1IDE3OjM1OjIzIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lKTogUmUtYWRkIGxpbmUgdGhhdCBnb3QgYWNjaWRlbnRhbGx5IGxvc3QuCgpGcmkgU2VwIDI1IDEwOjQzOjQ3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGNjY3AuYyAocGVkd2Fybl93aXRoX2ZpbGVfYW5kX2xpbmUpOiBGb3IgIV9fU1REQ19fIGNhc2UsIGF2b2lkCglhY2Nlc3NpbmcgdmFyaWFibGVzIHVudGlsIHRoZXkgYXJlIGluaXRpYWxpemVkIHZpYSB2YV9hcmcoKS4KClRodSBTZXAgMjQgMjI6MTI6MTYgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jb21iaW5lKTogSW5pdGlhbGl6ZSBzZXQgYmVmb3JlIHVzaW5nLgoKVGh1IFNlcCAyNCAxODo1MzoyMCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiBzZGJvdXQuYyAoc2Rib3V0X2ZpZWxkX3R5cGVzKTogRG9uJ3QgZW1pdCB0aGUgdHlwZXMgb2YgZmllbGRzIHdlCgl3b24ndCBiZSBlbWl0dGluZy4KClRodSBTZXAgMjQgMTc6MDU6MzAgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9hcm0vYXJtLm1kIChpbnN2KTogQWRkIGNvbW1lbnQuICBJbiBDT05TVF9JTlQgY2FzZSwgYW5kCglvcGVyYW5kMyB3aXRoIG1hc2sgYmVmb3JlIHVzaW5nIGl0LiAgUGF0Y2ggcHJvdmlkZWQgYnkgSmltIFdpbHNvbi4KClRodSBTZXAgMjQgMTU6MDg6MDggMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoZnVuY3Rpb25fdmFsdWUpOiBQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mCglQUk9NT1RFX01PREUgZm9yIEFSQ0g2NC4KCShlbGlnaWJsZV9mb3JfZXBpbG9ndWVfZGVsYXkpOiBBbGxvdyBESW1vZGUgb3BlcmF0aW9ucyBpbiBkZWxheQoJc2xvdCBvZiBhIHJldHVybiBmb3IgQVJDSDY0LgoKVGh1IFNlcCAyNCAyMjoxNzo1NCAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2gubWQgKHNxcnRzZjIpOiBGaXggbW9kZSBvZiBzcXJ0LgoKVGh1IFNlcCAyNCAyMTo0ODo1MSAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogcmVsb2FkMS5jIChjaG9vc2VfcmVsb2FkX3JlZ3MpOiBBbHNvIHRyeSBpbmhlcml0YW5jZSB3aGVuCglyZWxvYWRfaW4gaXMgYSBzdGFjayBzbG90IG9mIGEgcHNldWRvLCBldmVuIGlmIHdlIGFscmVhZHkgZ290IGEKCXJlbG9hZCByZWcuCgpUaHUgU2VwIDI0IDIxOjIyOjM5IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jc2VfcmVnc18xKTogUmVuYW1lZCBmcm9tIHJlbG9hZF9jc2VfcmVncy4KCShyZWxvYWRfY3NlX3JlZ3MpOiBOZXcgZnVuY3Rpb24gYm9keTogY2FsbCByZWxvYWRfY3NlX3JlZ3NfMSwKCXJlbG9hZF9jb21iaW5lLCByZWxvYWRfY3NlX21vdmUyYWRkLgoJV2hlbiBkb2luZyBleHBlbnNpdmVfb3B0aW1pemF0aW9ucywgY2FsbCByZWxvYWRfY3NlX3JlZ3NfMSBhCglzZWNvbmQgdGltZSBhZnRlciByZWxvYWRfY3NlX21vdmUyYWRkLgoJKHJlbG9hZF9jb21iaW5lLCByZWxvYWRfY29tYmluZV9ub3RlX3N0b3JlKTogTmV3IGZ1bmN0aW9ucy4KCShyZWxvYWRfY29tYmluZV9ub3RlX3VzZSk6IE5ldyBmdW5jdGlvbi4KCShyZWxvYWRfY3NlX21vdmUyYWRkLCBtb3ZlMmFkZF9ub3RlX3N0b3JlKTogTmV3IGZ1bmN0aW9ucy4KClRodSBTZXAgMjQgMTg6NDg6NDMgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlbG9hZC5jIChmaW5kX3JlbG9hZHMpOiBJbiBjb2RlIHRvIHByb21vdGUgUkVMT0FEX0ZPUl9YX0FERFJfQUREUgoJcmVsb2FkcyB0byBSRUxPQURfRk9SX1hfQUREUkVTUyByZWxvYWRzLCB0ZXN0IGZvciByZWxvYWQgc2hhcmluZy4KCglQcm9wZXJseSBrZWVwIHRyYWNrIG9mIGZpcnN0IFJFTE9BRF9GT1JfWF9BRERSRVNTIGFsc28gZm9yCgltb3JlIHRoYW4gMyBzdWNoIHJlbG9hZHMuCgoJSWYgdGhlcmUgaXMgbm90IG1vcmUgdGhhbiBvbmUgUkVMT0FEX0ZPUl9YX0FERFJFU1MsIGRvbid0IGNoYW5nZQoJUkVMT0FEX0ZPUl9YX0FERFJfQUREUiByZWxvYWQuCgpUaHUgU2VwIDI0IDE3OjQ1OjU1IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBleHByLmMgKHN0b3JlX2NvbnN0cnVjdG9yKTogV2hlbiBpbml0aWFsaXppbmcgYSBmaWVsZCB0aGF0IGlzIHNtYWxsZXIKCXRoYW4gYSB3b3JkLCBhdCB0aGUgc3RhcnQgb2YgYSB3b3JkLCB0cnkgdG8gd2lkZW4gaXQgdG8gYSBmdWxsIHdvcmQuCgoJKiBjc2UuYyAoY3NlX2luc24pOiBXaGVuIHdlIGFyZSBhYm91dCB0byBjaGFuZ2UgYSByZWdpc3RlciwKCXJlbW92ZSBhbnkgaW52YWxpZCByZWZlcmVuY2VzIHRvIGl0LgoKCShyZW1vdmVfaW52YWxpZF9zdWJyZWdfcmVmcyk6IE5ldyBmdW5jdGlvbi4KCShtZW50aW9uX3JlZ3MpOiBTcGVjaWFsIHRyZWF0bWVudCBmb3IgU1VCUkVHcy4KCShpbnNlcnRfcmVncyk6IERvbid0IHN0cmlwIFNVQlJFRyBmb3IgY2FsbCB0byBtZW50aW9uX3JlZ3MuCglDaGVjayBpZiByZWdfdGljayBuZWVkcyB0byBiZSBidW1wZWQgdXAgYmVmb3JlIHRoYXQgY2FsbC4KCShsb29rdXBfYXNfZnVuY3Rpb24pOiBUcnkgdG8gbWF0Y2gga25vd24gd29yZF9tb2RlIGNvbnN0YW50cyB3aGVuCglsb29raW5nIGZvciBhIG5vcnJvd2VyIGNvbnN0YW50LgoJKGNhbm9uX2hhc2gpOiBTcGVjaWFsIHRyZWF0bWVudCBmb3IgU1VCUkVHcy4KClRodSBTZXAgMjQgMDE6MzU6MzQgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc29sMi1zbGQtNjQuaCAoVFJBTlNGRVJfRlJPTV9UUkFNUE9MSU5FKTogRGVmaW5lLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmM2NF9pbml0aWFsaXplX3RyYW1wb2xpbmUpOiBJZiB0aGF0IGlzCglkZWZpbmVkLCBlbWl0IGxpYmNhbGwgdG8gX19lbmFibGVfZXhlY3V0ZV9zdGFjay4gIEFsc28gZml4IG9wY29kZXMKCWFuZCBvZmZzZXRzIGluIGFjdHVhbCBzdGFjayB0cmFtcG9saW5lIGNvZGUgc28gdGhleSBtYXRjaCB0aGUKCWNvbW1lbnRhcnkgYW5kIGFjdHVhbGx5IHdvcmsuCgpUaHUgU2VwIDI0IDAxOjE5OjAyIDE5OTggIEpha3ViIEplbGluZWsgIDxqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6PgoKCSogY29uZmlndXJlLmluIChzcGFyY3Y5LSotc29sYXJpcyk6IFVzZSB0LXNvbDIgYW5kIHQtc29sMi02NCBmb3IKCXRtYWtlX2ZpbGUuCgkoc3BhcmM2NC0qLWxpbnV4KTogVXNlIHQtbGludXggYW5kIHNwYXJjL3QtbGludXg2NCBmb3IKCXRtYWtlX2ZpbGUuICBTZXQgZXh0cmFfcGFydHMgdG8gbmVlZGVkIGNydCBvYmplY3RzLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZy9zcGFyYy9saW51eDY0LmggKFNQQVJDX0JJX0FSQ0gpOiBEZWZpbmUuCgkoVEFSR0VUX0RFRkFVTFQpOiBTZXQgaWYgZGVmYXVsdCBpcyB2OSBvciB1bHRyYS4KCShTVEFSVEZJTEVfU1BFQzMyLCBTVEFSVEZJTEVfU1BFQzY0KTogTmV3IG1hY3Jvcy4KCShTVEFSVEZJTEVfU1BFQyk6IFNldCB0byB0aG9zZSB1cG9uIFNQQVJDX0JJX0FSQ0guCgkoRU5ERklMRV9TUEVDMzIsIEVOREZJTEVfU1BFQzY0LCBFTkRGSUxFX1NQRUMpOiBMaWtld2lzZS4KCShTVUJUQVJHRVRfRVhUUkFfU1BFQ1MsIExJTktfQVJDSDMyX1NQRUMsIExJTktfQVJDSDY0X1NQRUMsCglMSU5LX1NQRUMsIExJTktfQVJDSF9TUEVDKTogTGlrZXdpc2UuCgkoVEFSR0VUX1ZFUlNJT04pOiBEZWZpbmUuCgkoTVVMVElMSUJfREVGQVVMVCk6IERlZmluZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKENQUF9DUFVfREVGQVVMVF9TUEVDKTogUmVhcnJhbmdlIHNvIHRoYXQKCW1peGVkIDMyLzY0IGJpdCBjb21waWxlcnMgYmFzZWQgdXBvbiBTUEFSQ19CSV9BUkNIIHdvcmsuCgkoQ1BQX0NQVTY0X0RFRkFVTFRfU1BFQywgQ1BQX0NQVTMyX0RFRkFVTFRfU0VDKTogRGVmaW5lCglhcHByb3ByaWF0ZWx5LgoJKFRBUkdFVF9TV0lUQ0hFUyk6IEFsbG93IHB0cjMyL3B0cjY0IG9wdGlvbnMgb25jZSBtb3JlLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfb3ZlcnJpZGVfb3B0aW9ucyk6IElmIGFyY2ggYW5kCglwb2ludGVyIHNpemUgZGlzYWdyZWUsIGVtaXQgZGlhZ25vc3RpYyBhbmQgZml4IGl0IHVwLiAgSWYKCVNQQVJDX0JJX0FSQ0ggYW5kIFRBUkdFVF9BUkNIMzIsIHNldCBjbW9kZWwgdG8gQ01fMzIuICBUdXJuIG9mZgoJVjhQTFVTIGluIDY0LWJpdCBtb2RlLgoJKiBjb25maWcvc3BhcmMvdC1saW51eDY0OiBOZXcgZmlsZS4KCSogY29uZmlnL3NwYXJjL3Qtc29sMi02NDogTmV3IGZpbGUuCgkqIGNvbmZpZy9zcGFyYy90LXNvbDI6IEFkanVzdCBidWlsZCBydWxlcyB0byB1c2UgTVVMVElMSUJfQ0ZMQUdTLgoJKiBjb25maWcvc3BhcmMvc29sMi1zbGQtNjQuaCAoU1BBUkNfQklfQVJDSCk6IERlZmluZS4KCShBU01fQ1BVMzJfREVGQVVMVF9TUEVDLCBBU01fQ1BVNjRfREVGQVVMVF9TUEVDLAoJQ1BQX0NQVTMyX0RFRkFVTFRfU1BFQywgQ1BQX0NQVTY0X0RFRkFVTFRfU1BFQyk6IERlZmluZS4KCShBU01fU1BFQywgQ1BQX0NQVV9TUEVDKTogU2V0IGFwcHJvcHJpYXRlbHkgYmFzZWQgdXBvbiB0aG9zZS4KCShTVEFSVEZJTEVfU1BFQzMyLCBTVEFSVEZJTEVfU1BFQzMyLCBTVEFSVEZJTEVfQVJDSF9TUEVDKToKCURlZmluZS4KCShTVEFSVEZJTEVfU1BFQyk6IFNldCBhcHByb3ByaWF0ZWx5IGJhc2VkIHVwb24gdGhvc2UuCgkoQ1BQX0NQVV9ERUZBVUxUX1NQRUMsIEFTTV9DUFVfREVGQVVMVF9TUEVDKTogU2V0IGJhc2VkIHVwb24KCWRpc3Bvc2l0aW9uIG9mIERFRkFVTFRfQVJDSDMyX1AuCgkoTElOS19BUkNIMzJfU1BFQywgTElOS19BUkNINjRfU1BFQyk6IERlZmluZS4KCShMSU5LX0FSQ0hfU1BFQywgTElOS19BUkNIX0RFRkFVTFRfU1BFQyk6IFNldCBiYXNlZCB1cG9uIHRob3NlLgoJKENDMV9TUEVDLCBNVUxUSUxJQl9ERUZBVUxUUyk6IFNldCBiYXNlZCB1cG9uIERFRkFVTFRfQVJDSDMyX1AuCgkoTURfU1RBUlRGSUxFX1BSRUZJWCk6IFNldCBjb3JyZWN0bHkgYmFzZWQgdXBvbiBTUEFSQ19CSV9BUkNILgoJKiBjb25maWcvc3BhcmMveG0tc3lzdjQtNjQuaCAoSE9TVF9CSVRTX1BFUl9MT05HKTogT25seSBzZXQgb24KCWFyY2g2NC92OS4KCSogY29uZmlnL3NwYXJjL3htLXNwNjQuaCAoSE9TVF9CSVRTX1BFUl9MT05HKTogTGlrZXdpc2UuCgpXZWQgU2VwIDIzIDIyOjMyOjMxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBydGwuaCAoaW5pdF92aXJ0dWFsX3JlZ3MpOiBOZXcgZnVuY3Rpb24uCgkqIGVtaXQtcnRsLmMgKGluaXRfdmlydHVhbF9yZWdzKTogRGVmaW5lLgoJKGluc25fZW1pdCk6IFVzZSBpdC4KCSogaW50ZWdyYXRlLmMgKHNhdmVfZm9yX2lubGluZV9jb3B5aW5nKTogTGlrZXdpc2UuCgpXZWQgU2VwIDIzIDE2OjIyOjAxIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3RodW1iLmg6IFRoZSBmb2xsb3dpbmcgcGF0Y2hlcyB3ZXJlIG1hZGUgYnkgSmltIFdpbHNvbjoKCShlbnVtIHJlZ19jbGFzcyk6IEFkZCBOT05BUkdfTE9fUkVHUyBzdXBwb3J0LgoJKFJFR19DTEFTU19OQU1FUywgUkVHX0NMQVNTX0NPTlRFTlRTLCBSRUdOT19SRUdfQ0xBU1MsCglQUkVGRVJSRURfUkVMT0FEX0NMQVNTLCBTRUNPTkRBUllfUkVMT0FEX0NMQVNTKTogTGlrZXdpc2UuCgkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogRGlzYWJsZSBSRUcrUkVHIGFkZHJlc3NlcyBiZWZvcmUgcmVsb2FkCgljb21wbGV0ZXMuICBSZS1lbmFibGUgSEltb2RlIFJFRytPRkZTRVQgYWRkcmVzc2VzLgoJKExFR0lUSU1JWkVfUkVMT0FEX0FERFJFU1MpOiBEZWZpbmUuCgoJKiBleHBtZWQuYyAoZXh0cmFjdF9iaXRfZmllbGQpOiBBZGQgY29tbWVudCBmcm9tIEppbSBXaWxzb24uCgpXZWQgU2VwIDIzIDEzOjI2OjAyIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChnZXRfYWxpZ25lZF9tZW0pOiBSZXZlcnQgU2VwIDIwIGNoYW5nZS4KCShhbHBoYV9zZXRfbWVtZmxhZ3MsIGFscGhhX3NldF9tZW1mbGFnc18xKTogTGlrZXdpc2UuCgkoYWxwaGFfYWxpZ25faW5zbnMpOiBQcm9wZXJseSBjYWxjdWxhdGUgaW5pdGlhbCBvZmZzZXQgd3J0IG1heF9hbGlnbi4KCldlZCBTZXAgMjMgMTA6NDU6NDQgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uYyAoZmluZF9iYXJyaWVyKTogUmV2ZXJ0IGNoYW5nZSBvZiBBcHIgMjMuICBIYW5kbGUgdGFibGUKCWp1bXBzIGFzIGEgc2luZ2xlIGVudGl0eSwgdGFraW5nIGludG8gYWNjb3VudCB0aGUgc2l6ZSBvZiB0aGUKCXRhYmxlLgoKVHVlIFNlcCAyMiAxNToxMzozNCAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmIChTV0lUQ0hfRVhQUik6IE5ldyB0cmVlIG5vZGUgZGVmaW5pdGlvbi4KCk1vbiBTZXAgMjEgMjM6NDA6MzggMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gU2VwIDIxIDIyOjMxOjE0IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIFNlcCAyMSAyMjo0ODowOSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSBpWzM0NTY3XTg2LSotb3BlbmJzZCogYW5kIGhhbmRsZSBpdCBsaWtlCglOZXRCU0QuCgpNb24gU2VwIDIxIDIyOjA1OjI4IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIFJldmVydCB0aGlzIHBhdGNoLgoJKiByZWxvYWQuYyAoZmluZF9yZWxvYWRzKTogRG8gbm90IHJlcGxhY2UgYSBwc2V1ZG8gd2l0aAoJKE1FTSAocmVnX2VxdWl2X2FkZHIpKSBpbiB0aGUgaW5pdGlhbGl6aW5nIGluc24gZm9yIHRoZQoJcHNldWRvLgoKTW9uIFNlcCAyMSAyMDoxOTo0MSAxOTk4ICBKb2huIENhcnIgIDxqZmNAbWl0LmVkdT4KCgkqIGZpbmFsLmMgKGZpbmFsX3NjYW5faW5zbik6IERpc2FibGUgdHJhY2tpbmcgQ0MgYWNyb3NzIGJyYW5jaGVzLgoKTW9uIFNlcCAyMSAxNzoxNToyNiAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleHByLmggKGVoX3J0aW1lX21hdGNoX2xpYmZ1bmMpOiBOZXcgZXh0ZXJuIGRlY2xhcmF0aW9uLgoJKiBvcHRhYnMuYyAoaW5pdF9vcHRhYnMpOiBTZXQgZWhfcnRpbWVfbWF0Y2hfbGliZnVuYy4KCSogZXhjZXB0LmMgKHN0YXJ0X2NhdGNoX2hhbmRsZXIpOiBVc2UgZWhfcnRpbWVfbWF0Y2hfbGliZnVuYy4KCSogbGliZ2NjMi5jIChfX2VoX3J0aW1lX21hdGNoKTogQWx3YXlzIHJldHVybiAwIGlmIHRoZSBtYXRjaGVyIGlzCglOVUxMLiBPbmx5IGluY2x1ZGUgPHN0ZGlvLmg+IGlmIGluaGliaXRfbGliYyBpcyBub3QgZGVmaW5lZC4KCk1vbiBTZXAgMjEgMTQ6MTA6NTEgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTa2lwIGNvbXBpbGluZyBhbnl0aGluZyB3aXRoCglERUNMX0VYVEVSTkFMIHNldCwgbm90IGp1c3QgaWYgaXQgaGFzIERFQ0xfSU5MSU5FIGFzIHdlbGwuCgpNb24gU2VwIDIxIDEzOjUxOjA1IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3MpOiBEZWxldGUgY2hlY2sgZm9yIGluX2xpYmNhbGxfYmxvY2sgd2hlbgoJcHJldl9jb2RlIGlzIGEgQ0FMTF9JTlNOLiAgQ2hhbmdlIGNoZWNrIGZvciBSRUdfUkVUVkFMIG5vdGUgdG8KCXVzZSBpbl9saWJjYWxsX2Jsb2NrLgoJKGZpbmRfYmFzaWNfYmxvY2tzXzEpOiBEZWxldGUgY2hlY2sgZm9yIGluX2xpYmNhbGxfYmxvY2sgd2hlbiBwcmV2X2NvZGUKCWlzIGEgQ0FMTF9JTlNOLiAgSWYgQ0FMTF9JTlNOIGFuZCBpbl9saWJjYWxsX2Jsb2NrLCB0aGVuIGNoYW5nZSBjb2RlCgl0byBJTlNOLgoKTW9uIFNlcCAyMSAxNDowMjoyMyAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBpMzg2LmggKFRBUkdFVF9TV0lUQ0hFUyk6IEltcHJvdmUgZG9jIGZvciBhbGlnbi1kb3VibGUuICBGaXgKCXR5cG8gaW4gbm8tZmFuY3ktbWF0aC0zODcgZGVzY3JpcHRpb24uCgpNb24gU2VwIDIxIDA5OjI3OjE4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKTW9uIFNlcCAyMSAwOToyNDo0OSAxOTk4ICBTdGFuIENveCAgPHNjb3hAY3lnbnVzLmNvbT4KCgkqIGkzODYtY29mZi5oIChEQlhfREVCVUdHSU5HX0lORk8pOiBBZGRlZC4KCk1vbiBTZXAgMjEgMDk6MTQ6NDkgMTk5OCAgUm9iZXJ0IExpcGUgIDxyb2JlcnRsQGRnaWkuY29tPgoKCSogaTM4Ni5oIChUQVJHRVRfU1dJVENIRVMpOiBBZGQgZGVzY3JpcHRpb24gZmllbGRzIGZvciBmbGFncwoJZG9jdW1lbnRlZCBpbiBpbnN0YWxsLnRleGkuCgkoVEFSR0VUX09QVElPTlMpOiBMaWtld2lzZS4KCk1vbiBTZXAgMjEgMDE6Mzk6MDMgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gU2VwIDIxIDAxOjUzOjA1IDE5OTggIEZlbGl4IExlZSAgPGZsZWVAY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKGluaXRfbGV4KTogVXNlIGdldGVudiAoIkxBTkciKSwgbm90IEdFVF9FTlZJUk9OTUVOVCAoKS4KCSogY2NjcC5jIChtYWluKTogTGlrZXdpc2UuCgoJKiBjY2NwLmMsIGNvbGxlY3QyLmMsIGNwcGxpYi5jLCBnY2MuYywgY29uZmlnL2kzODYveG0tY3lnd2luMzIuaDoKCVJlbmFtZSBHRVRfRU5WSVJPTk1FTlQgdG8gR0VUX0VOVl9QQVRIX0xJU1QsIGFuZCBmaXggc29tZQoJbWFjcm8tdXNlIGJ1Z3MuCgpNb24gU2VwIDIxIDAwOjUyOjEyIDE5OTggIFBlciBCb3RobmVyICA8Ym90aG5lckBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuaW4gKExJQlMpOiBMaW5rIGluIGxpYmliZXJ0eS5hLgoJKiBjLWNvbW1vbi5jLCBnY2MuYywgdG9wbGV2LmM6IFJlcGxhY2UgKHNvbWUpIGJjb3B5IGNhbGxzIGJ5IG1lbWNweS4KClN1biBTZXAgMjAgMjM6Mjg6MTEgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHJlbG9hZDEuYyAoZW1pdF9yZWxvYWRfaW5zbnMpOiBBY2NlcHQgYSBuZXcgYXJnIGZvciB0aGUgYmIuICBVc2UKCWl0IHRvIHVwZGF0ZSBiYiBib3VuZGFyaWVzLiAgVXBkYXRlIGNhbGxlci4KCSogZnVuY3Rpb24uYyAocmVwb3NpdGlvbl9wcm9sb2d1ZV9hbmRfZXBpbG9ndWVfbm90ZXMpOiBVcGRhdGUKCWJiIGJvdW5kYXJpZXMgd3J0IHRoZSBtb3ZlZCBub3RlLgoKU3VuIFNlcCAyMCAyMDo1NzowMiAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWd1cmUuaW4gKGkqODYtKi1zeXN2NSopOiBVc2UgZml4aW5jLnN2cjQgdG8gcGF0Y2ggYnl0ZW9yZGVyCglwcm9ibGVtcy4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKU3VuIFNlcCAyMCAxOTowMTo1MSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfc3JfYWxpYXNfc2V0KTogTmV3IHZhcmlhYmxlLgoJKG92ZXJyaWRlX29wdGlvbnMpOiBTZXQgaXQuCgkoYWxwaGFfZXhwYW5kX3Byb2xvZ3VlLCBhbHBoYV9leHBhbmRfZXBpbG9ndWUpOiBVc2UgaXQuCgkobW9kZV9tYXNrX29wZXJhbmQpOiBGaXggc2lnbmVkLXVuc2lnbmVkIGNvbXBhcmlzb24gd2FybmluZy4KCShhbHBoYV9leHBhbmRfYmxvY2tfbW92ZSk6IExpa2V3aXNlLgoJKHByaW50X29wZXJhbmQpOiBMaWtld2lzZS4KCShnZXRfYWxpZ25lZF9tZW0pOiBVc2UgY2hhbmdlX2FkZHJlc3MuCgkoYWxwaGFfc2V0X21lbWZsYWdzLCBhbHBoYV9zZXRfbWVtZmxhZ3NfMSk6IFNldCB0aGUgYWxpYXMgc2V0LgoJKGFscGhhZXY0X2luc25fcGlwZSwgYWxwaGFldjRfbmV4dF9ncm91cCk6IE5ldyBmdW5jdGlvbnMuCgkoYWxwaGFldjRfbmV4dF9ub3AsIGFscGhhZXY1X25leHRfbm9wKTogTmV3IGZ1bmN0aW9ucy4KCShhbHBoYV9hbGlnbl9pbnNucyk6IFJlbWFkZSBmcm9tIG9sZCBhbHBoYWV2NV9hbGlnbl9pbnNucwoJdG8gaGFuZGxlIG11bHRpcGxlIHByb2Nlc3NvcnMuCgkoYWxwaGFfcmVvcmcpOiBDYWxsIGFscGhhX2FsaWduX2luc25zIGZvciBib3RoIGV2NCBhbmQgZXY1LgoJKiBvdXRwdXQuaCAobGFiZWxfdG9fYWxpZ25tZW50KTogUHJvdG90eXBlLgoKCSogdHJlZS5jIChuZXdfYWxpYXNfc2V0KTogTmV3IGZ1bmN0aW9uLgoJKiB0cmVlLmggKG5ld19hbGlhc19zZXQpOiBEZWNsYXJlIGl0LgoJKiBjLWNvbW1vbi5jIChjX2dldF9hbGlhc19zZXQpOiBVc2UgaXQuCgpTdW4gU2VwIDIwIDEyOjM1OjU1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBmb2xkLWNvbnN0LmMgKGZvbGQpOiBZZXQgYW5vdGhlciBDT05EX0VYUFIgYnVnOiB3aGVuIGZvbGRpbmcKCXRvIGFuIEFCUyBleHByLCBjb252ZXJ0IGFuIHVuc2lnbmVkIGlucHV0IHRvIHNpZ25lZC4KClN1biBTZXAgMjAgMTI6MTQ6NDUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogRml4IGFub3RoZXIgdHlwZSBpbiBDT05EX0VYUFIgaGFuZGxpbmcgY29kZS4KCjE5OTgtMDktMjAgIE1pY2hhZWwgSGF5ZXMgIDxtLmhheWVzQGVsZWMuY2FudGVyYnVyeS5hYy5uej4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkIHN1cHBvcnQgZm9yIGM0eCB0YXJnZXRzLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpTdW4gU2VwIDIwIDAwOjAwOjUxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjb21iaW5lLmMgKGRpc3RyaWJ1dGVfbm90ZXMpOiBJZiBhbiBpbnNuIGlzIGEgY2MwIHVzZXIsIG9ubHkKCWRlbGV0ZSBpdCBpZiB3ZSBjYW4gYWxzbyBkZWxldGUgdGhlIGNjMCBzZXR0ZXIuCgpTdW4gU2VwIDIwIDAwOjIyOjIzIDE5OTggIE1pY2hhZWwgVGllbWFubiAgPG1pY2hhZWxAaW1wYWN0LnRpZW1hbm4ub3JnPgoKCSogZm9sZC1jb25zdC5jIChmb2xkKTogRml4IHR5cG8gaW4gQ09ORF9FWFBSIGhhbmRsaW5nIGNvZGUuCgkoaW52ZXJ0X3RydXRodmFsdWUpOiBFbmFibGUgdHJ1dGh2YWx1ZSBpbnZlcnNpb24gZm9yCglmbG9hdGluZy1wb2ludCBvcGVyYW5kcyBpZiAtZmZhc3QtbWF0aC4KClNhdCBTZXAgMTkgMjM6NTg6MDcgMTk5OCAgTWVsaXNzYSBPJ05laWxsICA8b25laWxsQGNzLnNmdS5jYT4KCgkqIGNvbmZpZ3VyZS5pbjogRGlzYWJsZSBjb2xsZWN0MiBmb3IgbmV4dHN0ZXAuICBJbnN0ZWFkIHVzZQoJY3J0YmVnaW4vY3J0ZW5kLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZy9uZXh0c3RlcC5oIChTVEFSVEZJTEVfU1BFQyk6IEFkZCBjcnRiZWdpbi4KCShFTkRGSUxFX1NQRUMpOiBEZWZpbmUuCgkoT0JKRUNUX0ZPUk1BVF9NQUNITyk6IERlZmluZS4KCShFSF9GUkFNRV9TRUNUSU9OX0FTTV9PUCk6IERlZmluZS4KCSogY3J0c3R1ZmYuYzogSGFuZGxlIE1BQ0hPLgoKU3VuIFNlcCAyMCAwMDoyNDoyNCAxOTk4ICBSb2JlcnQgTGlwZSAgPHJvYmVydGxAZGdpaS5jb20+CgoJKiBjb25maWcvaTM4Ni9zY281LmggKFRBUkdFVF9NRU1fRlVOQ1RJT05TKTogRGVmaW5lLgoKMTk5OC0wOS0xOSAgVG9yYmpvcm4gR3Jhbmx1bmQgIDx0ZWdlQG1hdGVtYXRpay5zdS5zZT4KCgkqIGZwLWJpdC5jIChwYWNrX2QpOiBEbyBub3QgY2xlYXIgU0lHTiB3aGVuIGZyYWN0aW9uIGlzIDAuCgkoX2ZwYWRkX3BhcnRzKTogR2V0IHNpZ24gcmlnaHQgZm9yIDAuCgoxOTk4LTA5LTE5ICBNaWNoYWVsIEhheWVzICA8bS5oYXllc0BlbGVjLmNhbnRlcmJ1cnkuYWMubno+CgoJKiBnaW5jbHVkZS92YXJhcmdzLmg6IEFkZCBzdXBwb3J0IGZvciBDNHggdGFyZ2V0LgoJKiBnaW5jbHVkZS9zdGRhcmdzLmg6IExpa2V3aXNlLgoKU2F0IFNlcCAxOSAxMjowNTowOSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEuYyAoYWxwaGFfcmV0dXJuX2FkZHIpOiBTRVQgc2hvdWxkIGJlIFZPSURtb2RlLgoJKGFscGhhX2VtaXRfc2V0X2xvbmdfY29uc3QpOiBSZXdyaXRlIHRvIGJlIGNhbGxhYmxlIGZyb20gcmVsb2FkCglhbmQgMzItYml0IGhvc3RzLgoJKGFscGhhX2V4cGFuZF9lcGlsb2d1ZSk6IFVwZGF0ZSBmb3IgYWxwaGFfZW1pdF9zZXRfbG9uZ19jb25zdC4KCSogYWxwaGEubWQgKG1vdmRpKTogTGlrZXdpc2UuCgpTYXQgU2VwIDE5IDA3OjMzOjM2IDE5OTggIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtLmMgKGFkZF9jb25zdGFudCk6IE5ldyBwYXJhbWV0ZXIgYWRkcmVzc19vbmx5LCBjaGFuZ2UgY2FsbGVyLgoJU2V0IGl0IG5vbi16ZXJvIGlmIHRha2luZyB0aGUgYWRkcmVzcyBvZiBhbiBpdGVtIGluIHRoZSBwb29sLgoJKGFybV9yZW9yZyk6IEhhbmRsZSBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRoZSBhZGRyZXNzIG9mIGFuIGl0ZW0gaW4KCXRoZSBwb29sLgoKCSogYXJtLmMgKGJhZF9zaWduZWRfYnl0ZV9vcGVyYW5kKTogQ2hlY2sgYm90aCBhcm1zIG9mIGEgc3VtIGluCglhIG1lbW9yeSBhZGRyZXNzLgoJKiBhcm0ubWQgKHNwbGl0cyBmb3IgKmV4dGVuZHFpaGlfaW5zbiBhbmQgKmV4dGVuZHFpc2lfaW5zbik6IEhhbmRsZQoJbWVtb3J5IGFkZHJlc3NlcyB0aGF0IGFyZSBub3QgaW4gc3RhbmRhcmQgY2Fub25pY2FsIGZvcm0uCgpTYXQgU2VwIDE5IDAxOjAwOjMyIDE5OTggIE1pY2hhZWwgSGF5ZXMgIChtcGhAZWxlYy5jYW50ZXJidXJ5LmFjLm56KQoKCSogUkVBRE1FLkM0WDogTmV3IGZpbGUgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYzR4IHBvcnRzLgoJKiBnaW5jbHVkZS92YS1jNHguaDogTmV3IGZpbGUgZm9yIGM0eCB2YXJhcmdzIHN1cHBvcnQuCgkqIGNvbmZpZy9jNHg6IE5ldyBkaXJlY3Rvcnkgd2l0aCBjNHggcG9ydCBmaWxlcy4KCkZyaSBTZXAgMTggMjI6NTI6MDUgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVsb2FkLmMgKGZpbmRfcmVsb2Fkcyk6IERvIG5vdCByZXBsYWNlIGEgcHNldWRvIHdpdGgKCShNRU0gKHJlZ19lcXVpdl9hZGRyKSkgaW4gdGhlIGluaXRpYWxpemluZyBpbnNuIGZvciB0aGUKCXBzZXVkby4KCkZyaSBTZXAgMTggMjM6NTA6NTYgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogdG9wbGV2LmMgKHJlc3Rfb2ZfY29tcGlsYXRpb24pOiBTZXQgYmN0X3Agb24gc2Vjb25kIGNhbGwgdG8KCWxvb3Bfb3B0aW1pemUuCgkqIGxvb3AuYyAobG9vcF9vcHRpbWl6ZSwgc2Nhbl9sb29wLCBzdHJlbmd0aF9yZWR1Y2UpOiBOZXcgYXJndW1lbnQKCWJjdF9wLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IE9ubHkgY2FsbCBhbmFseXplX2xvb3BfaXRlcmF0aW9ucyBhbmQKCWluc2VydF9iY3QgaWYgYmN0X3Agc2V0LgoJKGNoZWNrX2RicmFfbG9vcCk6IEZpeCB0eXBvLgoJKGluc2VydF9iY3QpOiBVc2Ugd29yZF9tb2RlIGluc3RlYWQgb2YgU0ltb2RlLgoJKGluc3RydW1lbnRfbG9vcF9iY3QpOiBMaWtld2lzZS4gIERvIG5vdCBkZWxldGUgaXRlcmF0aW9uIGNvdW50Cgljb25kaXRpb24gY29kZSBnZW5lcmF0aW9uIGluc24uICBJbml0aWFsaXplIGl0ZXJhdGlvbiBjb3VudCBiZWZvcmUKCWxvb3Agc3RhcnQuCgkqIHJ0bC5oIChsb29wX29wdGltaXplKTogVXBkYXRlIHByb3RvdHlwZS4KCgkqIGdpbmNsdWRlL3ZhLXBwYy5oICh2YV9hcmcpOiBsb25nbG9uZyB0eXBlcyBpbiBvdmVyZmxvdyBhcmVhIGFyZQoJbm90IGRvdWJsZXdvcmQgYWxpZ25lZC4KCgkqIHJzNjAwMC5jIChvcHRpbWl6YXRpb25fb3B0aW9ucyk6IE5ldyBmdW5jdGlvbi4KCShzZWNvbmRhcnlfcmVsb2FkX2NsYXNzKTogT25seSBjYWxsIHRydWVfcmVnbnVtIGZvciBQU0VVRE9fUkVHcy4KCSogcnM2MDAwLmggKE9QVElNSVpBVElPTl9PUFRJT05TKTogRGVmaW5lLgoJKFJFR19BTExPQ19PUkRFUik6IEFsbG9jYXRlIGhpZ2hlc3QgbnVtYmVyZWQgY29uZGl0aW9uIHJlZ3NpdGVycwoJZmlyc3Q7IGNyMSBjYW4gYmUgdXNlZCBmb3IgRlAgcmVjb3JkIGNvbmRpdGlvbiBpbnNucy4KCkZyaSBTZXAgMTggMDk6NDQ6NTUgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tMzJyL20zMnIuaCAobTMycl9ibG9ja19pbW1lZGlhdGVfb3BlcmFuZCk6IEFkZCB0bwoJUFJFRElDQVRFX0NPREVTLgoKCSogY29uZmlnL20zMnIvbTMyci5tZDogQWRkICJtb3ZzdHJzaSIgYW5kICJtb3ZzdHJzaV9pbnRlcm5hbCIKCXBhdHRlcm5zLgoKCSogY29uZmlnL20zMnIvbTMyci5jIChtMzJyX3ByaW50X29wZXJhbmQpOiBBZGQgJ3MnIGFuZCAncCcKCW9wZXJhdG9ycy4KCShibG9ja19tb3ZlX2NhbGwpOiBOZXcgZnVuY3Rpb246IENhbGwgYSBsaWJyYXJ5IHJvdXRpbmUgdG8gY29weSBhCglibG9jayBvZiBtZW1vcnkuCgkobTMycl9leHBhbmRfYmxvY2tfbW92ZSk6IE5ldyBmdW5jdGlvbjogRXhwYW5kIGEgIm1vdnN0cnNpIgoJcGF0dGVybiBpbnRvIGEgc2VxdWVuY2Ugb2YgaW5zbnMuCgkobTMycl9vdXRwdXRfYmxvY2tfbW92ZSk6IE5ldyBmdW5jdGlvbjogRXhwYW5kIGEKCSJtb3ZzdHJzaV9pbnRlcm5hbCIgcGF0dGVybiBpbnRvIGEgc2VxdWVuY2Ugb2YgYXNzZW1ibGVyIG9wY29kZXMuCgkobTMycl9ibG9ja19pbW1lZGlhdGVfb3BlcmFuZCk6IE5ldyBmdW5jdGlvbjogUmV0dXJuIHRydWUgaWYgdGhlCglSVEwgaXMgYW4gaW50ZWdlciBjb25zdGFudCwgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIE1BWF9NT1ZFX0JZVEVTLgoKVGh1IFNlcCAxNyAxNjo0MjoxNiAxOTk4ICBBbmRyZXcgTWFjTGVvZCAgPGFtYWNsZW9kQGN5Z251cy5jb20+CgoJKiBleGNlcHQuYyAoc3RhcnRfY2F0Y2hfaGFuZGxlcik6IElzc3VlICdmYXRhbCcgaW5zdGVhZCBvZiAnZXJyb3InIGFuZAoJcmUtYWxpZ24gc29tZSBjb2RlLgoJKiBsaWJnY2MyLmMgKF9fZWhfcnRpbWVfbWF0Y2gpOiBmcHJpbnRmIGEgcnVudGltZSBlcnJvci4gVXNlIDxzdGRpby5oPi4KClRodSBTZXAgMTcgMTI6MjQ6MzMgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlZ21vdmUuYyAoY29weV9zcmNfdG9fZGVzdCk6IENoZWNrIHRoYXQgbW9kZXMgbWF0Y2guCgpXZWQgU2VwIDE2IDIyOjEwOjQyIDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZy9pMzg2L3NjbzUuaCAoU1VQUE9SVFNfV0VBSyk6IFRydWUgb25seSBpZiB0YXJnZXRpbmcgRUxGLgoKV2VkIFNlcCAxNiAxNToyNDo1NCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5oIChQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogUmVzcGVjdCBhbiBleGlzdGluZyBjbGFzcwoJbmFycm93ZXIgdGhhbiBGTE9BVF9SRUdTLgoKV2VkIFNlcCAxNiAxNzo1MTowMCAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNwcGxpYi5jOiBSZW1vdmVkIE9MRF9HUExVU1BMVVNfSU5DTFVERV9ESVIuCgkqIGNjY3AuYzogTGlrZXdpc2UuCgkqIE1ha2VmaWxlLmluIChvbGRfZ3h4X2luY2x1ZGVfZGlyKTogUmVtb3ZlZC4KCldlZCBTZXAgMTYgMTI6Mjk6MjIgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9zaC9zaC5oOiBVcGRhdGUgZGVmaW5pdGlvbiBvZiBIQU5ETEVfUFJBR01BIHRvIG1hdGNoCgluZXcgc3BlY2lmaWNhdGlvbi4KCgkqIGNvbmZpZy9zaC9zaC5jIChoYW5kbGVfcHJhZ21hKTogUmVuYW1lIHRvIHNoX2hhbmRsZV9wcmFnbWEoKS4KCShzaF9oYW5kbGVfcHJhZ21hKTogQ2hhbmdlIGZ1bmN0aW9uIGFyZ3VtZW50cyB0byBtYXRjaCBuZXcKCXNwZWNpZmljYXRpb24gZm9yIEhBTkRMRV9QUkFHTUEuCgpXZWQgU2VwIDE2IDEyOjQzOjE5IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGdlbi1wcm90b3MuYyAocGFyc2VfZm5fcHJvdG8pOiBDYXN0IGFyZ3VtZW50IG9mIElTQUxOVU0gdG8KCWB1bnNpZ25lZCBjaGFyJy4KCShtYWluKTogTWFyayBwYXJhbWV0ZXIgYGFyZ2MnIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCVdoZW4gZ2VuZXJhdGluZyBvdXRwdXQsIGluaXRpYWxpemUgbWlzc2luZyBzdHJ1Y3QgbWVtYmVyIHRvIHplcm8uCgpXZWQgU2VwIDE2IDE0OjQ3OjQzIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWdtb3ZlLmMgKGNvcHlfc3JjX3RvX2Rlc3QpOiBEb24ndCBjb3B5IGlmIHRoYXQgcmVxdWlyZXMKCShhKSBuZXcgcmVnaXN0ZXIocykuCgpXZWQgU2VwIDE2IDAxOjI5OjEyIDE5OTggIEJlcm5kIFNjaG1pZHQgIDxjcnV4QHBvb2wuaW5mb3JtYXRpay5yd3RoLWFhY2hlbi5kZT4KCgkqIGdsb2JhbC5jIChyZWdfYWxsb2Nubyk6IE5vdyBzdGF0aWMuCgkqIHJlbG9hZDEuYyAocmVnX2FsbG9jbm8pOiBEZWxldGUgZGVjbGFyYXRpb24uCgkob3JkZXJfcmVnc19mb3JfcmVsb2FkKTogVGFrZSBubyBhcmd1bWVudHMuICBEb24ndCB0cmVhdCByZWdzCglhbGxvY2F0ZWQgYnkgZ2xvYmFsIGRpZmZlcmVudGx5IHRoYW4gdGhvc2UgYWxsb2NhdGVkIGJ5IGxvY2FsLWFsbG9jLgoKV2VkIFNlcCAxNiAwMTowOTowMSAxOTk4ICBLYW1pbCBJc2tyYSAgPGlza3JhQHN0dWRlbnQudWNpLmFnaC5lZHUucGw+CgoJKiBtNjhrL202OGsuYyAob3V0cHV0X2Z1bmN0aW9uX3Byb2xvZ3VlKTogUmV2ZXJzZSBOT19BRERTVUJfUQoJY29uZGl0aW9uLCBmaXggZm9ybWF0IHN0cmluZ3MuCgkob3V0cHV0X2Z1bmN0aW9uX2VwaWxvZ3VlKTogTGlrZXdpc2UuCgoJKiBtNjhrL202OGsuYzogRG9uJ3QgaW5jbHVkZSA8c3RkbGliLmg+IGRpcmVjdGx5LgoKV2VkIFNlcCAxNiAwMDozMDo1NiAxOTk4ICBHZW9mZiBLZWF0aW5nICA8Z2VvZmZrQG96ZW1haWwuY29tLmF1PgoKCSogZ2NzZS5jOiBOZXcgZGVmaW5pdGlvbiBORVZFUl9TRVQgZm9yIHJlZ19maXJzdF9zZXQsIHJlZ19sYXN0X3NldCwKCW1lbV9maXJzdF9zZXQsIG1lbV9sYXN0X3NldDsgYmVjYXVzZSAwIGNhbiBiZSBhIENVSUQuCgkob3Byc191bmNoYW5nZWRfcCk6IFVzZSBuZXcgZGVmaW5pdGlvbi4KCShyZWNvcmRfbGFzdF9yZWdfc2V0X2luZm8pOiBMaWtld2lzZS4KCShyZWNvcmRfbGFzdF9tZW1fc2V0X2luZm8pOiBMaWtld2lzZS4KCShjb21wdXRlX2hhc2hfdGFibGUpOiBMaWtld2lzZS4KClR1ZSBTZXAgMTUgMjI6NTk6NTIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcnM2MDAwLmMgKG91dHB1dF9lcGlsb2d1ZSk6IEhhbmRsZSBDaGlsbC4KCgkqIG1uMTAyMDAuaCAoQVNNX09VVFBVVF9EV0FSRjJfQUREUl9DT05TVCk6IERlZmluZS4KCSogbW4xMDMwMC5oIChBU01fT1VUUFVUX0RXQVJGMl9BRERSX0NPTlNUKTogRGVmaW5lLgoKCSogY29tYmluZS5jIChtYWtlX2V4dHJhY3Rpb24pOiBJZiBubyBtb2RlIGlzIHNwZWNpZmllZCBmb3IKCWFuIG9wZXJhbmQgb2YgaW5zdiwgZXh0diwgb3IgZXh0enYsIGRlZmF1bHQgaXQgdG8gd29yZF9tb2RlLgoJKHNpbXBsaWZ5X2NvbXBhcmlzb24pOiBTaW1pbGFybHkuCgkqIGV4cG1lZC5jIChzdG9yZV9iaXRfZmllbGQpOiBTaW1pbGFybHkuCgkoZXh0cmFjdF9iaXRfZmllbGQpOiBTaW1pbGFybHkuCgkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWdzXzEpOiBTaW1pbGFybHkuCgkqIHJlY29nLmMgKHZhbGlkYXRlX3JlcGxhY2VfcnR4XzEpOiBTaW1pbGFybHkuCgkqIG1pcHMubWQgKGV4dHYsIGV4dHp2LCBpbnN2IGV4cGFuZGVycyk6IERlZmF1bHQgbW9kZXMgZm9yIG1vc3QKCW9wZXJhbmRzLiAgSGFuZGxlIFRBUkdFVF82NEJJVC4KCShtb3ZkaV91bGQsIG1vdmRpX3VzZCk6IE5ldyBwYXR0ZXJucy4KCgkqIHBhLmMgKGVtaXRfbW92ZV9zZXF1ZW5jZSk6IERvIG5vdCByZXBsYWNlIGEgcHNldWRvIHdpdGggaXRzCgllcXVpdmFsZW50IG1lbW9yeSBsb2NhdGlvbiB1bmxlc3Mgd2UgaGF2ZSBiZWVuIHByb3ZpZGVkIGEgc2NyYXRjaAoJcmVnaXN0ZXIuICBTaW1pbGFybHkgZG8gbm90IGNhbGwgZmluZF9yZXBsYWNlbWVudCB1bmxlc3MgYQoJc2NyYXRjaCByZWdpc3RlciBoYXMgYmVlbiBwcm92aWRlZC4KClR1ZSBTZXAgMTUgMTk6MjM6MDEgMTk5OCAgQmVybmQgU2NobWlkdCAgPGNydXhAcG9vbC5pbmZvcm1hdGlrLnJ3dGgtYWFjaGVuLmRlPgoKCSogaTM4Ni5oIChQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogRm9yIHN0YW5kYXJkIDM4NyBjb25zdGFudHMsCglyZXR1cm4gRkxPQVRfUkVHUy4KClR1ZSBTZXAgMTUgMTk6MDk6MDYgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIHRyZWUuaCAoQlVJTFRfSU5fQ0FMTEVSX1JFVFVSTl9BRERSRVNTKTogVW51c2VkLiAgS2lsbC4KCShCVUlMVF9JTl9GUCwgQlVJTFRfSU5fU1AsIEJVSUxUX0lOX1NFVF9SRVRVUk5fQUREUl9SRUcpOiBLaWxsLgoJKEJVSUxUX0lOX0VIX1NUVUJfT0xELCBCVUlMVF9JTl9FSF9TVFVCLCBCVUlMVF9JTl9TRVRfRUhfUkVHUyk6IEtpbGwuCgkoQlVJTFRfSU5fRUhfUkVUVVJOLCBCVUlMVF9JTl9EV0FSRl9DRkEpOiBOZXcuCgkqIGMtZGVjbC5jIChpbml0X2RlY2xfcHJvY2Vzc2luZyk6IFVwZGF0ZSBhY2NvcmRpbmdseS4KCSogZXhwci5jIChleHBhbmRfYnVpbHRpbik6IExpa2V3aXNlLgoKCSogcnRsLmggKGdsb2JhbF9ydGwpOiBBZGQgY2ZhIGVudHJ5LgoJKHZpcnR1YWxfY2ZhX3J0eCwgVklSVFVBTF9DRkFfUkVHTlVNKTogTmV3LgoJKExBU1RfVklSVFVBTF9SRUdJU1RFUik6IFVwZGF0ZS4KCSogZW1pdC1ydGwuYyAoZ2xvYmFsX3J0bCk6IEFkZCBjZmEgZW50cnkuCgkoaW5pdF9lbWl0KTogSW5pdGlhbGl6ZSBpdC4KCSogZnVuY3Rpb24uYyAoY2ZhX29mZnNldCk6IE5ldy4KCShpbnN0YW50aWF0ZV92aXJ0dWFsX3JlZ3MpOiBJbml0aWFsaXplIGl0LgoJKGluc3RhbnRpYXRlX3ZpcnR1YWxfcmVnc18xKTogSW5zdGFudGlhdGUgdmlydHVhbF9jZmFfcnR4LgoJKGV4cGFuZF9mdW5jdGlvbl9lbmQpOiBDYWxsIGV4cGFuZF9laF9yZXR1cm4uCgkqIHRtLnRleGkgKEFSR19QT0lOVEVSX0NGQV9PRkZTRVQpOiBOZXcuCgoJKiBleGNlcHQuYyAoY3VycmVudF9mdW5jdGlvbl9laF9zdHViX2xhYmVsKTogS2lsbC4KCShjdXJyZW50X2Z1bmN0aW9uX2VoX29sZF9zdHViX2xhYmVsKTogTGlrd2lzZTsgdXBkYXRlIGFsbCByZWZlcmVuY2VzLgoJKGV4cGFuZF9idWlsdGluX3NldF9yZXR1cm5fYWRkcl9yZWcpOiBLaWxsLgoJKGV4cGFuZF9idWlsdGluX2VoX3N0dWJfb2xkLCBleHBhbmRfYnVpbHRpbl9laF9zdHViKTogS2lsbC4KCShleHBhbmRfYnVpbHRpbl9zZXRfZWhfcmVncyk6IEtpbGwuCgkoZWhfcmVncyk6IFByb2R1Y2UgYSB0aGlyZCByZWcgZm9yIHRoZSBhY3R1YWwgaGFuZGxlciBhZGRyZXNzLgoJKGVoX3JldHVybl9jb250ZXh0LCBlaF9yZXR1cm5fc3RhY2tfYWRqdXN0KTogTmV3LgoJKGVoX3JldHVybl9oYW5kbGVyLCBlaF9yZXR1cm5fc3R1Yl9sYWJlbCk6IE5ldy4KCShpbml0X2VoX2Zvcl9mdW5jdGlvbik6IEluaXRpYWxpemUgdGhlbS4KCShleHBhbmRfYnVpbHRpbl9laF9yZXR1cm4sIGV4cGFuZF9laF9yZXR1cm4pOiBOZXcuCgkqIGV4Y2VwdC5oOiBVcGRhdGUgcHJvdG90eXBlcy4KCSogZmxvdy5jIChmaW5kX2Jhc2ljX2Jsb2Nrc18xKTogVXBkYXRlIHJlZmVyZW5jZXMgdG8gdGhlIHN0dWIgbGFiZWwuCgkqIGZ1bmN0aW9uLmggKHN0cnVjdCBmdW5jdGlvbik6IEtpbGwgc3R1YiBsYWJlbCBlbGVtZW50cy4KCgkqIGxpYmdjYzIuYyAoaW5fcmVnX3dpbmRvdyk6IEZvciBSRUdfU0FWRURfUkVHLCBjaGVjayB0aGF0IHRoZQoJcmVnaXN0ZXIgbnVtYmVyIGlzIG9uZSB0aGF0IHdvdWxkIGJlIGluIHRoZSBwcmV2aW91cyB3aW5kb3cuCglQcm92aWRlIGEgZHVtbXkgZGVmaW5pdGlvbiBmb3Igbm9uLXdpbmRvd2VkIHRhcmdldHMuCgkoZ2V0X3JlZ19hZGRyKTogTmV3IGZ1bmN0aW9uLgoJKGdldF9yZWcsIHB1dF9yZWcsIGNvcHlfcmVnKTogVXNlIGl0LgoJKF9fdGhyb3cpOiBSZWx5IG9uIGluX3JlZ193aW5kb3csIG5vdCBJTkNPTUlOR19SRUdOTy4gIEtpbGwgc3R1YgoJZ2VuZXJhdGluZyBjb2RlIGFuZCB1c2UgX19idWlsdGluX2VoX3JldHVybi4gIFVzZSBfX2J1aWx0aW5fZHdhcmZfY2ZhLgoKCSogYWxwaGEuYyAoYWxwaGFfZWhfZXBpbG9ndWVfc3Bfb2ZzKTogTmV3LgoJKGFscGhhX2luaXRfZXhwYW5kZXJzKTogSW5pdGlhbGl6ZSBpdC4KCShhbHBoYV9leHBhbmRfZXBpbG9ndWUpOiBVc2UgaXQuCgkqIGFscGhhLmg6IERlY2xhcmUgaXQuCgkqIGFscGhhLm1kIChlaF9lcGlsb2d1ZSk6IE5ldy4KCgkqIG02OGguaCAoQVJHX1BPSU5URVJfQ0ZBX09GRlNFVCk6IE5ldy4KCSogc3BhcmMuaCAoQVJHX1BPSU5URVJfQ0ZBX09GRlNFVCk6IE5ldy4KClR1ZSBTZXAgMTUgMTk6MzE6NTggMTk5OCAgTWljaGFlbCBNZWlzc25lciAgPG1laXNzbmVyQGN5Z251cy5jb20+CgoJKiBpOTYwLmggKENPTlNUX0NPU1RTKTogRml4IHRoaW5rby4gIFRlc3QgZmxhZywgbm90IHRoZSBjb25zdGFudAoJZmxhZyBiaXQgbWFzay4KClR1ZSBTZXAgMTUgMTQ6MTA6NTQgMTk5OCAgQW5kcmV3IE1hY0xlb2QgIDxhbWFjbGVvZEBjeWdudXMuY29tPgoKCSogZXhjZXB0LmggKHN0cnVjdCBlaF9lbnRyeSk6IEFkZCBmYWxzZV9sYWJlbCBmaWVsZC4KCShlbmRfY2F0Y2hfaGFuZGxlcik6IEFkZCBwcm90b3R5cGUuCgkqIGV4Y2VwdC5jIChwdXNoX2VoX2VudHJ5KTogU2V0IGZhbHNlX2xhYmVsIGZpZWxkIHRvIE5VTExfUlRYLgoJKHN0YXJ0X2NhdGNoX2hhbmRsZXIpOiBXaGVuIHVzaW5nIG9sZCBzdHlsZSBleGNlcHRpb25zLCBpc3N1ZQoJcnVudGltZSB0eXBlbWF0Y2ggY29kZSBiZWZvcmUgY29udGludWluZyB3aXRoIHRoZSBoYW5kbGVyLgoJKGVuZF9jYXRjaF9oYW5kbGVyKTogTmV3IGZ1bmN0aW9uLCBnZW5lcmF0ZXMgbGFiZWwgYWZ0ZXIgaGFuZGxlcgoJaWYgbmVlZGVkIGJ5IG9sZGVyIHN0eWxlIGV4Y2VwdGlvbnMuCgkoZXhwYW5kX3N0YXJ0X2FsbF9jYXRjaCk6IE5vIG5lZWQgdG8gY2hlY2sgZm9yIG5ldyBzdHlsZSBleGNlcHRpb25zLgoJKG91dHB1dF9leGNlcHRpb25fdGFibGVfZW50cnkpOiBPbmx5IG91dHB1dCB0aGUgZmlyc3QgaGFuZGxlciBsYWJlbAoJZm9yIG9sZCBzdHlsZSBleGNlcHRpb25zLgoJKiBsaWJnY2MyLmMgKF9fZWhfcnRpbWVfbWF0Y2gpOiBOZXcgcm91dGluZSB0byBsdW1wIHJ1bnRpbWUgbWF0Y2hpbmcKCW1lY2hhbmlzbSBpbnRvIG9uZSBmdW5jdGlvbiwgaWYgYSBydW50aW1lIG1hdGNoZXIgaXMgcHJvdmlkZWQuCgpUdWUgU2VwIDE1IDEzOjUzOjU5IDE5OTggIEFuZHJldyBNYWNMZW9kICA8YW1hY2xlb2RAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pOTYwL2k5NjAuaCAoU0xPV19CWVRFX0FDQ0VTUyk6IENoYW5nZSBkZWZpbml0aW9uIHRvIDEuCgpUdWUgU2VwIDE1IDA5OjU5OjAxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBpbnRlZ3JhdGUuYyAoY29weV9kZWNsX2xpc3QpOiBGaXggdHlwby4KClR1ZSBTZXAgMTUgMDQ6MTg6NTIgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdmRmX2NvbnN0X2ludHJlZ19zcDMyKTogRml4IGxlbmd0aAoJYXR0cmlidXRlLgoKTW9uIFNlcCAxNCAxNDowMjo1MyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCk1vbiBTZXAgMTQgMTA6MzM6NTYgMTk5OCAgSmVmZiBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHZlcnNpb24uYzogQnVtcCBmb3Igc25hcHNob3QuCgpNb24gU2VwIDE0IDA5OjUxOjA1IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIFNlcCAxMyAyMjoxMDoxOCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGludm9rZS50ZXhpIChDIERpYWxlY3QgT3B0aW9ucyk6IFB1dCBiYWNrIG1pc3NpbmcgQGVuZCBpdGVtaXplLgoKTW9uIFNlcCAxNCAwMjozMzo0NiAxOTk4ICBBbGV4YW5kcmUgT2xpdmEgIDxvbGl2YUBkY2MudW5pY2FtcC5icj4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIHVzYWdlIG9mIGAhJyB0byBuZWdhdGUgdGhlIHJlc3VsdCBvZiBhCgljb21tYW5kOyBzb21lIGNvbW1vbiBzaGVsbHMgZG8gbm90IHN1cHBvcnQgaXQuCgpTdW4gU2VwIDEzIDE5OjE3OjM1IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlndXJlLmluOiBJbiBzcGFyYzktc29sMiBjb25maWcsIHVzZSAnaWYgdGVzdCcgbm90CglicmFja2V0cy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKCSogY29uZmlnL3NwYXJjL3NvbDItc2xkLTY0LmggKFNQQVJDX0RFRkFVTFRfQ01PREVMKTogQ2hhbmdlIHRvCglDTV9NRURBTlkuCgkoQ1BQX0NQVV9TUEVDKTogRG8gbm90IGRlZmluZSBfTFA2NCwgaGVhZGVyIGZpbGVzIGRvIHRoaXMuCgkoQ1BQX0NQVV9ERUZBVUxUX1NQRUMpOiBMaWtld2lzZS4KCSogY29uZmlnL3NwYXJjL3NvbDIuaCAoSU5JVF9TVUJUQVJHRVRfT1BUQUJTKTogR2V0IHRoZSBuYW1lcyByaWdodAoJZm9yIGFyY2g2NCBsaWJmdW5jcy4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoZ290b19oYW5kbGVyX2FuZF9yZXN0b3JlKTogQWxsb3cgYW55IG1vZGUKCWZvciBvcGVyYW5kIHplcm8uCgpTdW4gU2VwIDEzIDA5OjExOjU5IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIGFjY29uZmlnLmggKE5FRURfREVDTEFSQVRJT05fU1RSU0lHTkFMKTogUHJvdmlkZSBhIHN0dWIuCgoJKiBjb2xsZWN0Mi5jOiBEb24ndCBkZWNsYXJlIGBzeXNfc2lnbGlzdCcgaGVyZS4KCShteV9zdHJzaWduYWwpOiBQcm90b3R5cGUgYW5kIGRlZmluZSBuZXcgZnVuY3Rpb24uICBVc2UgaXQgaW4KCXBsYWNlIG9mIGBzeXNfc2lnbGlzdCcgaGFja3MuCgoJKiBtaXBzX3RmaWxlLmM6IExpa2V3aXNlLgoKCSogY29uZmlndXJlLmluIChBQ19DSEVDS19GVU5DUyk6IENoZWNrIGZvciBzdHJzaWduYWwuCgkoR0NDX05FRURfREVDTEFSQVRJT05TKTogTGlrZXdpc2UuCgoJKiBzeXN0ZW0uaCAoc3Ryc2lnbmFsKTogUHJvdG90eXBlIGl0LCBpZiBuZWNlc3NhcnkuCgkoc3lzX3NpZ2xpc3QpOiBEZWNsYXJlIGl0LCBpZiBuZWNlc3NhcnkuCgpTdW4gU2VwIDEzIDA0OjM3OjI4IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogbG9vcC5jIChtb3ZlX21vdmFibGVzKTogV2hpbGUgcmVtb3ZpbmcgaW5zbiBzZXF1ZW5jZXMsIHByZXNlcnZlCgl0aGUgbmV4dCBwb2ludGVyIG9mIHRoZSBtb3N0IHJlY2VudGx5IGRlbGV0ZWQgaW5zbiB3aGVuIHdlIHNraXAKCW92ZXIgYSBOT1RFLgoKU3VuIFNlcCAxMyAwODoxMzozOSAxOTk4ICBCZW4gRWxsaXN0b24gIDxiamVAY3lnbnVzLmNvbT4KCgkqIG9iamMvY29uZmlnLWxhbmcuaW46IERvIG5vdCBvdXRwdXQgdGhlIG5hbWUgb2YgdGhlIHNlbGVjdGVkCgl0aHJlYWQgZmlsZSB3aGVuIGJ1aWxkaW5nIHRoZSBmcm9udC1lbmQuICBUaGUgTWFrZWZpbGUgZm9yIHRoZQoJcnVudGltZSBsaWJyYXJ5IHdpbGwgZG8gdGhpcy4KCgkqIG9iamMvTWFrZS1sYW5nLmluOiBEbyBub3QgYnVpbGQgdGhlIHJ1bnRpbWUgbGlicmFyeSBvciBpbnN0YWxsCgl0aGUgT2JqZWN0aXZlIEMgaGVhZGVyIGZpbGVzLiAgVGhlIE1ha2VmaWxlIGZvciB0aGUgcnVudGltZQoJbGlicmFyeSB3aWxsIGRvIHRoaXMuCgoJKiBvYmpjL01ha2VmaWxlLmluIChhbGwuaW5kaXJlY3QpOiBPbmx5IGJ1aWxkIHRoZSBmcm9udC1lbmQuCgkoY29tcGlsZXIpOiBSZW5hbWUgdG8gYGZyb250ZW5kJy4KCShvYmotcnVudGltZSk6IFJlbW92ZSB0YXJnZXQuCgkoY29weS1oZWFkZXJzKTogTGlrZXdpc2UuCgkoY2xlYW4pOiBObyBuZWVkIHRvIHJlbW92ZSBgbGlib2JqYy5hJyBhbnkgbG9uZ2VyLgoKU2F0IFNlcCAxMiAxMTozNzoxOSAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5oICh7QVNNLENQUH1fQ1BVX1NQRUMpOiBBZGQgc3VwcG9ydCBmb3IgYWxsIG1hY2hpbmVzCglzdXBwb3J0ZWQgd2l0aCAtbWNwdT14eHguCgpGcmkgU2VwIDExIDIzOjU1OjU0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogZmxvdy5jIChtYXJrX3NldF8xKTogUmVjb2duaXplIG11bHRpLXJlZ2lzdGVyIHN0cnVjdHVyZSByZXR1cm4KCXZhbHVlcyBpbiBDQUxMIGluc25zLgoJKG1hcmtfdXNlZF9yZWdzKTogTGlrZXdpc2UuCgkoY291bnRfcmVnX3NldHNfMSk6IExpa2V3aXNlLgoJKGNvdW50X3JlZ19yZWZlcmVuY2VzKToJTGlrZXdpc2UuCgkqIHJ0bGFuYWwuYyAobm90ZV9zdG9yZXMpOiBMaWtld2lzZS4KCShyZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCk6IExpa2V3aXNlLgoJKiBoYWlmYS1zY2hlZC5jIChjaGVja19saXZlXzEpOiBMaWtld2lzZS4KCSh1cGRhdGVfbGl2ZV8xKTogTGlrZXdpc2UuCgkoc2NoZWRfYW5hbHl6ZV8xKTogTGlrZXdpc2UuCgkoc2NoZWRfbm90ZV9zZXQpOiBMaWtld2lzZS4KCShiaXJ0aGluZ19pbnNuX3ApOiBMaWtld2lzZS4KCShhdHRhY2hfZGVhdGhzKTogTGlrZXdpc2UuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdmRmX2NvbnN0X2ludHJlZ19zcDY0KTogRGlzYWJsZS4KCkZyaSBTZXAgMTEgMjI6NTc6NTUgMTk5OCAgRXJpYyBEdW1hemV0ICA8ZHVtYXpldEBjb3Ntb3NiYXkuY29tPgoKCSogY29uZmlnL2kzODYvc2NvNS5oIChBU01fV0VBS0VOX0xBQkVMKTogRGVmaW5lZCBhcyBpbiBzdnI0LmguCgpUaHUgU2VwIDEwIDIyOjAyOjA0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogZ2xpbWl0cy5oIChfX0xPTkdfTUFYX18pOiBSZWNvZ25pemUgX19zcGFyY3Y5IHRvby4KClRodSBTZXAgMTAgMjE6MTk6MTAgMTk5OCAgSmFrdWIgSmVsaW5layAgPGpqQHN1bnNpdGUubXMubWZmLmN1bmkuY3o+CgoJKiBjb25maWd1cmUuaW46IEFkZCBjaGVjayBmb3IgR0FTIHN1YnNlY3Rpb24gLTEgc3VwcG9ydC4KCSogYWNjb25maWcuaCAoSEFWRV9HQVNfU1VCU0VDVElPTl9PUkRFUklORyk6IEFkZC4KCSogY29uZmlndXJlIGNvbmZpZy5pbjogUmVidWlsdC4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKENBU0VfVkVDVE9SX01PREUpOiBGb3IgVjkgZmxhZ19waWMsIHVzZQoJU0ltb2RlIGlzIHN1YnNlY3Rpb24gLTEgd29ya3MsIGVsc2UgdXNlIERJbW9kZS4KCShBU01fT1VUUFVUX0FERFJfVkVDX1NUQVJULCBBU01fT1VUUFVUX0FERFJfVkVDX0VORCk6IERlZmluZSBpZgoJc3Vic2VjdGlvbiAtMSB3b3Jrcy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX291dHB1dF9hZGRyX3ZlYywKCXNwYXJjX291dHB1dF9hZGRyX2RpZmZfdmVjKTogVXNlIHRoZW0gaWYgZGVmaW5lZC4KClRodSBTZXAgMTAgMTA6NDY6MDEgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHRyZWUuaCAoREVDTF9PUklHSU4pOiBOZXcgbWFjcm8uCgkqIGludGVncmF0ZS5jIChjb3B5X2FuZF9zZXRfZGVjbF9hYnN0cmFjdF9vcmlnaW4pOiBOZXcgZnVuY3Rpb24uCgkoY29weV9kZWNsX2xpc3QpOiBVc2UgaXQuCgkoaW50ZWdyYXRlX3Bhcm1fZGVjbHMpOiBMaWtld2lzZS4KCShpbnRlZ3JhdGVfZGVjbF90cmVlKTogTGlrZXdpc2UuCgkqIGR3YXJmMm91dC5jIChkZWNsX3VsdGltYXRlX29yaWdpbik6IFNpbXBsaWZ5LgoJKiBkd2FyZm91dC5jIChkZWNsX3VsdGltYXRlX29yaWdpbik6IExpa2V3aXNlLgoJKiBjLWRlY2wuYyAoZHVwbGljYXRlX2RlY2xzKTogVXNlIERFQ0xfT1JJR0lOLgoJKHB1c2hkZWNsKTogTGlrZXdpc2UuCgpUaHUgU2VwIDEwIDA4OjAxOjMxIDE5OTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgoKCSogY29uZmlnL3JzNjAwMC9yczYwMDAuYyAob3V0cHV0X2VwaWxvZyk6IEFkZCBKYXZhIHN1cHBvcnQuCgpUaHUgU2VwIDEwIDE0OjQ4OjU5IDE5OTggIE1hcnRpbiB2b24gTPZ3aXMgIDxsb2V3aXNAaW5mb3JtYXRpay5odS1iZXJsaW4uZGU+CgoJKiBpbnZva2UudGV4aSAoQysrIERpYWxlY3QgT3B0aW9ucyk6IERvY3VtZW50IC1maG9ub3Itc3RkLgoKVGh1IFNlcCAxMCAwMTozODowNSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiByZWctc3RhY2suYyAoc3RyYWlnaHRlbl9zdGFjayk6IERvIG5vdGhpbmcgaWYgdGhlIHZpcnR1YWwgc3RhY2sgaXMKCWVtcHR5IG9yIGhhcyBhIHNpbmdsZSBlbnRyeS4KCgkqIHRvcGxldi5jIChyZXN0X29mX2NvbXBpbGF0aW9uKTogT3BlbiB1cCB0aGUgZHVtcCBmaWxlIGZvciByZWctc3RhY2sKCWJlZm9yZSBjYWxsaW5nIHJlZ190b19zdGFjay4KClRodSBTZXAgMTAgMDA6MDM6MzQgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhLmMgKGFscGhhZXY1X2luc25fcGlwZSk6IEFib3J0IG9uIGRlZmF1bHQgY2FzZS4KCShhbHBoYWV2NV9uZXh0X2dyb3VwKTogU3dhbGxvdyBDTE9CQkVScyBhbmQgVVNFcy4KCgkqIGMtdHJlZS5oICh3YXJuX2xvbmdfbG9uZyk6IERlY2xhcmUgaXQuCgpXZWQgU2VwICA5IDIzOjMxOjM2IDE5OTggIChTdGVwaGVuIEwgTW9zaGllcikgIDxtb3NoaWVyQHdvcmxkLnN0ZC5jb20+CgoJKiBlbWl0LXJ0bC5jIChnZW5fbG93cGFydF9jb21tb24pOiBEaXNhYmxlIG9wdGltaXphdGlvbiBvZgoJaW5pdGlhbGl6ZWQgZmxvYXQtaW50IHVuaW9uIGlmIHRoZSB2YWx1ZSBpcyBhIE5hTi4KCldlZCBTZXAgIDkgMjM6MDA6NDggMTk5OCAgTmF0aGFuIFNpZHdlbGwgIDxuYXRoYW5AYWNtLm9yZz4KCgkqIGMtbGV4LmMgKHJlYWxfeXlsZXgpOiBEb24ndCB3YXJuIGFib3V0IGxvbmcgbG9uZyBjb25zdGFudHMgaWYKCXdlJ3JlIGFsbG93aW5nIGxvbmcgbG9uZwoKV2VkIFNlcCAgOSAyMTo1ODo0MSAxOTk4ICBCZXJuZCBTY2htaWR0ICA8Y3J1eEBwb29sLmluZm9ybWF0aWsucnd0aC1hYWNoZW4uZGU+CgoJKiBleGNlcHQuaCAoY3VycmVudF9mdW5jdGlvbl9laF9zdHViX2xhYmVsKTogRGVjbGFyZS4KCShjdXJyZW50X2Z1bmN0aW9uX2VoX29sZF9zdHViX2xhYmVsKTogRGVjbGFyZS4KCSogZnVuY3Rpb24uaCAoc3RydWN0IGZ1bmN0aW9uKTogTmV3IG1lbWJlcnMgZWhfc3R1Yl9sYWJlbCBhbmQKCWVoX29sZF9zdHViX2xhYmVsLgoJKiBleGNlcHQuYyAoY3VycmVudF9mdW5jdGlvbl9laF9zdHViX2xhYmVsKTogTmV3IHZhcmlhYmxlLgoJKGN1cnJlbnRfZnVuY3Rpb25fZWhfb2xkX3N0dWJfbGFiZWwpOiBOZXcgdmFyaWFibGUuCgkoaW5pdF9laF9mb3JfZnVuY3Rpb24pOiBDbGVhciB0aGVtLgoJKHNhdmVfZWhfc3RhdHVzKTogU2F2ZSB0aGVtLgoJKHJlc3RvcmVfZWhfc3RhdHVzKTogUmVzdG9yZSB0aGVtLgoJKGV4cGFuZF9idWlsdGluX2VoX3N0dWIpOiBTZXQgY3VycmVudF9mdW5jdGlvbl9laF9zdHViX2xhYmVsLgoJKGV4cGFuZF9idWlsdGluX2VoX3N0dWJfb2xkKTogU2V0IGN1cnJlbnRfZnVuY3Rpb25fZWhfb2xkX3N0dWJfbGFiZWwuCgkqIGZsb3cuYyAoZmluZF9iYXNpY19ibG9ja3NfMSk6IFdoZW4gaGFuZGxpbmcgYSBSRUdfTEFCRUwgbm90ZSwgZG9uJ3QKCW1ha2UgYW4gZWRnZSBmcm9tIHRoZSBibG9jayB0aGF0IGNvbnRhaW5zIGl0IHRvIHRoZSBibG9jayBzdGFydGluZwoJd2l0aCB0aGUgbGFiZWwgaWYgdGhpcyBsYWJlbCBpcyBvbmUgb2YgdGhlIGVoIHN0dWIgbGFiZWxzLgoJSWYgZWggc3R1YiBsYWJlbHMgZXhpc3QsIHNob3cgdGhleSBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIGxhc3QgYmxvY2sKCWluIHRoZSBmdW5jdGlvbi4KCgkqIHJlbG9hZDEuYyAocmVsb2FkKTogQnJlYWsgb3V0IHNldmVyYWwgc3Vicm91dGluZXMgYW5kIG1ha2Ugc29tZQoJdmFyaWFibGVzIGdsb2JhbC4KCShjYWxjdWxhdGVfbmVlZHNfYWxsX2luc25zKTogTmV3IGZ1bmN0aW9uLCBicm9rZW4gb3V0IG9mIHJlbG9hZC4KCShjYWxjdWxhdGVfbmVlZHMpOiBMaWtld2lzZS4KCShmaW5kX3JlbG9hZF9yZWdzKTogTGlrZXdpc2UuCgkoZmluZF9ncm91cCk6IExpa2V3aXNlLgoJKGZpbmRfdHdvcmVnX2dyb3VwKTogTGlrZXdpc2UuCgkoc29tZXRoaW5nX25lZWRzX3JlbG9hZHMpOiBOZXcgZ2xvYmFsIHZhcmlhYmxlLCBmb3JtZXJseSBpbiByZWxvYWQuCgkoc29tZXRoaW5nX25lZWRzX2VsaW1pbmF0aW9uKTogTGlrZXdpc2UuCgkoY2FsbGVyX3NhdmVfc3BpbGxfY2xhc3MpOiBMaWtld2lzZS4KCShjYWxsZXJfc2F2ZV9ncm91cF9zaXplKTogTGlrZXdpc2UuCgkobWF4X25lZWRzKTogTGlrZXdpc2UuCgkoZ3JvdXBfc2l6ZSk6IExpa2V3aXNlLgoJKG1heF9ncm91cHMpOiBMaWtld2lzZS4KCShtYXhfbm9uZ3JvdXBzKTogTGlrZXdpc2UuCgkoZ3JvdXBfbW9kZSk6IExpa2V3aXNlLgoJKG1heF9uZWVkc19pbnNuKTogTGlrZXdpc2UuCgkobWF4X2dyb3Vwc19pbnNuKTogTGlrZXdpc2UuCgkobWF4X25vbmdyb3Vwc19pbnNuKTogTGlrZXdpc2UuCgkoZmFpbHVyZSk6IExpa2V3aXNlLgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IEZvciBNRU1zLCBwcmludCBNRU1fQUxJQVNfU0VULgoKV2VkIFNlcCAgOSAxMzoxNDo0MSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5jIChsb2FkX21lbXMpOiBDb3B5IHJ0eCBmb3Igb3V0cHV0IG1lbS4KCldlZCBTZXAgIDkgMTU6MTY6NTggMTk5OCAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBtaXBzL2FiaTY0LmggKExPTkdfTUFYX1NQRUMpOiBEb24ndCBzZXQgTE9OR19NQVggZm9yCgltaXBzMSBvciBtaXBzMiBlaXRoZXIuCgpXZWQgU2VwICA5IDEyOjMxOjM1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHBhLmMgKHBhX3Jlb3JnKTogTmV3IG1hcmtpbmcgc2NoZW1lIGZvciBqdW1wcyBpbnNpZGUgc3dpdGNoCgl0YWJsZXMuCgkocGFfYWRqdXN0X2luc25fbGVuZ3RoKTogVXBkYXRlIHRvIHdvcmsgd2l0aCBuZXcgbWFya2luZyBzY2hlbWUKCWZvciBqdW1wcyBpbnNpZGUgc3dpdGNoIHRhYmxlcy4KCSogcGEubWQgKHN3aXRjaF9qdW1wKTogUmVtb3ZlIHBhdHRlcm4uCgkoanVtcCk6IEhhbmRsZSBqdW1wcyBpbnNpZGUganVtcCB0YWJsZXMuCgoJKiBNYWtlZmlsZS5pbiAocHJvZmlsZS5vKTogRGVwZW5kIG9uIGluc24tY29uZmlnLmgKCldlZCBTZXAgIDkgMDk6MzY6NTEgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogaXJpczYuaCAoRFdBUkYyX1VOV0lORF9JTkZPKTogVW5kZWYuCgpXZWQgU2VwICA5IDAxOjMyOjAxIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCUFkZCBwcmVsaW1pbmFyeSBuYXRpdmUgc3BhcmN2OSBTb2xhcmlzIHN1cHBvcnQuCgkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIHNwYXJ2OS0qLXNvbGFyaXMyKgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgkqIGNvbmZpZy5zdWI6IFJlY29nbml6ZSBzcGFyY3Y5IGp1c3QgbGlrZSBzcGFyYzY0LgoJKiBjb25maWcvc3BhcmMvc29sMi1jMS5hc20gY29uZmlnL3NwYXJjL3NvbDItY2kuYXNtCgljb25maWcvc3BhcmMvc29sMi1jbi5hc206IE1hY3JvaXplIHNvIGl0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbgoJMzItYml0IGFuZCA2NC1iaXQgU29sYXJpcyBzeXN0ZW1zLgoJKiBjb25maWcvc3BhcmMvdC1zb2wyOiBBc3NlbWJsZSB0aG9zZSB3aXRoIGNwcC4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKFRBUkdFVF9DUFVfc3BhcmN2OSk6IE5ldyBhbGlhcyBmb3IgdjkuCgkoKlRGKl9MSUJDQUxMKTogSWYgQVJDSDY0IHVzZSBWOSBuYW1lcy4KCSogY29uZmlnL3NwYXJjL3t4bS1zeXN2NC02NCxzb2wyLXNsZC02NH0uaDogTmV3CWZpbGVzLgoKV2VkIFNlcCAgOSAwMTowNzozMCAxOTk4ICBKYWt1YiBKZWxpbmVrICA8ampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jej4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChUQVJHRVRfQ01fTUVETUlEKTogRml4IGRvY3VtZW50YXRpb24uCgkoQ0FTRV9WRUNUT1JfTU9ERSk6IFNldCB0byBTSW1vZGUgZXZlbiBpZiBQVFI2NCwgd2hlbiBNRURMT1cgYW5kCglub3QgZG9pbmcgcGljLgoJKEFTTV9PVVRQVVRfQUREUl97VkVDLERJRkZ9X0VMVCk6IENoZWNrIENBU0VfVkVDVE9SX01PREUgbm90CglQbW9kZS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kICh0YWJsZWp1bXApOiBMaWtld2lzZSwgYW5kIHNpZ24gZXh0ZW5kIG9wMAoJdG8gUG1vZGUgaWYgQ0FTRV9WRUNUT1JfTU9ERSBpcyBzb21ldGhpbmcgZWxzZS4KCldlZCBTZXAgIDkgMDA6MTA6MzEgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcHJlZml4LmMgKHVwZGF0ZV9wYXRoKTogQ29ycmVjdGx5IGhhbmRsZSBjYXNlcyB3aGVyZSBQQVRIIGlzCglhIHN1YnN0cmluZyBvZiB0aGUgYnVpbHRpbiBwcmVmaXgsIGJ1dCBzcGVjaWZpZXMgYSBkaWZmZXJlbnQKCWRpcmVjdG9yeSBsb2NhdGlvbi4KClR1ZSBTZXAgIDggMjM6NDY6MDQgMTk5OCAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5zZT4KCgkqIGV4cHIuYzogQ29ycmVjdGVkIGNvbW1lbnQgYWJvdXQgd2hhdCBNT1ZFX1JBVElPIGRvZXMuCgkqIGNvbmZpZy9hbHBoYS9hbHBoYS5oOiBMaWtld2lzZS4KCSogY29uZmlnLzE3NTBhLzE3NTBhLmg6IExpa2V3aXNlLgoJKiBjb25maWcvY2xpcHBlci9jbGlwcGVyLmg6IExpa2V3aXNlLgoJKiBjb25maWcvaTM4Ni9pMzg2Lmg6IExpa2V3aXNlLgoKVHVlIFNlcCAgOCAyMjo1NjoxMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW4gKG02OGstbmV4dC1uZXh0c3RlcDMqKTogVXNlIGNvbGxlY3QyLgoJU2ltaWxhcmx5IGZvciB4ODYgTmVYVCBjb25maWd1cmF0aW9ucy4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKVHVlIFNlcCAgOCAwMTozODo1NyAxOTk4ICBOYXRoYW4gU2lkd2VsbCAgPG5hdGhhbkBhY20ub3JnPgoKCSogY29uZmlndXJlLmluOiBEb24ndCBhc3N1bWUgc3JjZGlyIGlzIC4uLi9nY2MuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KClNhdCBTZXAgIDUgMTY6MzQ6MzQgMTk5OCAgSm9obiBXZWhsZSAgKGpvaG5AZmVpdGguY29tKQoKCSogZ2xvYmFsLmM6IFVwZGF0ZSBjb21tZW50cy4KCShnbG9iYWxfYWxsb2MpOiBBc3NpZ24gYWxsb2NhdGlvbi1udW1iZXJzCglldmVuIGZvciByZWdpc3RlcnMgYWxsb2NhdGVkIGJ5IGxvY2FsX2FsbG9jIGluIGNhc2UKCXRoZXkgYXJlIGxhdGVyIHNwaWxsZWQgYW5kIHJldHJ5X2dsb2JhbF9hbGxvYyBpcyBjYWxsZWQuCgkobWFya19yZWdfc3RvcmUsIG1hcmtfcmVnX2Nsb2JiZXIsCgltYXJrX3JlZ19jb25mbGljdHMsIG1hcmtfcmVnX2RlYXRoKTogQWx3YXlzIHJlY29yZCBhCgljb25mbGljdCB3aXRoIGEgcHNldWRvIHJlZ2lzdGVyIGV2ZW4gaWYgaXQgaGFzIGJlZW4KCWFzc2lnbmVkIHRvIGEgaGFyZCByZWdpc3Rlci4KCShkdW1wX2NvbmZsaWN0cyk6IERvbid0IGxpc3QgcHNldWRvIHJlZ2lzdGVycyBhbHJlYWR5IGFzc2lnbmVkIHRvCglhIGhhcmQgcmVnaXN0ZXIgYXMgbmVlZGluZyB0byBiZSBhbGxvY2F0ZWQsIGJ1dCBkbyBsaXN0IHRoZWlyCgljb25mbGljdHMuCgkqIGxvY2FsLWFsbG9jLmM6IFVwZGF0ZSBjb21tZW50LgoKTW9uIFNlcCAgNyAyMzozODowMSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IENoZWNrIGZvciBib2d1cyBHQ0NfRVhFQ19QUkVGSVggYW5kIExJQlJBUllfUEFUSC4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKTW9uIFNlcCAgNyAyMjo0MTo0NiAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IEZpeCBuYW1lIGZvciBlYzYwM2UsIHRvIGFkZAoJbWlzc2luZyAnYycuCgkqIHQtcHBjY29tbSAoTVVMVElMSUJfTUFUQ0hFU19GTE9BVCk6IEFkZCBzdXBwb3J0IGZvciAtbWNwdT14eHgKCWZvciBhbGwgdGFyZ2V0cyB0aGF0IHNldCAtbXNvZnQtZmxvYXQuCgpNb24gU2VwICA3IDIzOjMwOjA3IDE5OTggIEthdmVoIFIuIEdoYXppICA8Z2hhemlAY2FpcC5ydXRnZXJzLmVkdT4KCgkqIHRvcGxldi5jIChwcmludF9zd2l0Y2hfdmFsdWVzKTogTWFrZSBzdGF0aWMgdG8gbWF0Y2ggcHJvdG90eXBlLgoKTW9uIFNlcCAgNyAxOToxMzo1OSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb25maWd1cmUuaW46IElmIHdlIGFyZSB1bmFibGUgdG8gZmluZCB0aGUgImduYXRiaW5kIiBwcm9ncmFtLAoJdGhlbiBkbyBub3QgY29uZmlndXJlIHRoZSBhZGEgc3ViZGlyLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgpTdW4gU2VwICA2IDE0OjAzOjU4IDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKU3VuIFNlcCAgNiAxMzoyODowNyAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KClN1biBTZXAgIDYgMDg6NTQ6MTQgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogTWFrZWZpbGUuaW4gKHRvcGxldi5vKTogRGVwZW5kIG9uICQoRVhQUl9IKS4KCShpbnNuLWV4dHJhY3QubywgaW5zbi1hdHRydGFiLm8pOiBEZXBlbmQgb24gdG9wbGV2LmguCgoJKiBnYW5zaWRlY2wuaDogRGVmaW5lIEFUVFJJQlVURV9OT1JFVFVSTi4KCgkqIGdlbmF0dHJ0YWIuYzogSGF2ZSBpbnNuLWF0dHJ0YWIuYyBpbmNsdWRlIHRvcGxldi5oLgoKCSogZ2VuZXh0cmFjdC5jOiBIYXZlIGluc24tZXh0cmFjdC5jIGluY2x1ZGUgdG9wbGV2LmguCgoJKiBydGwuaDogRG9uJ3QgcHJvdG90eXBlIGBmYXRhbF9pbnNuX25vdF9mb3VuZCcgYW5kIGBmYXRhbF9pbnNuJy4KCgkqIHRvcGxldi5jOiBJbmNsdWRlIGV4cHIuaC4KCShyZWFsbHlfc29ycnksIGZhbmN5X2Fib3J0KTogUmVtb3ZlIHByb3RvdHlwZXMuCgkoc2V0X3RhcmdldF9zd2l0Y2gpOiBBZGQgYXJndW1lbnQgaW4gcHJvdG90eXBlLgoJKHZmYXRhbCk6IE1hcmsgcHJvdG90eXBlIHdpdGggQVRUUklCVVRFX05PUkVUVVJOLgoJKHZfcmVhbGx5X3NvcnJ5KTogTGlrZXdpc2UuCgkocHJpbnRfdmVyc2lvbiwgcHJpbnRfc2luZ2xlX3N3aXRjaCwgcHJpbnRfc3dpdGNoX3ZhbHVlcyk6IE1ha2UKCXN0YXRpYyBhbmQgYWRkIHByb3RvdHlwZSBhcmd1bWVudHMuCgkoZGVjbF9wcmludGFibGVfbmFtZSk6IEFkZCBwcm90b3R5cGUgYXJndW1lbnRzLgoJKGxhbmdfZXhwYW5kX2V4cHJfdCk6IE5ldyB0eXBlZGVmLgoJKGxhbmdfZXhwYW5kX2V4cHIpOiBEZWNsYXJlIGFzIGEgbGFuZ19leHBhbmRfZXhwcl90LgoJKGluY29tcGxldGVfZGVjbF9maW5hbGl6ZV9ob29rKTogQWRkIHByb3RvdHlwZSBhcmd1bWVudC4KCShkZWNsX25hbWUpOiBNYXJrIHZhcmlhYmxlIGB2ZXJib3NpdHknIHdpdGggQVRUUklCVVRFX1VOVVNFRC4KCShib3RjaCk6IExpa2V3aXNlIGZvciB2YXJpYWJsZSBgcycuCgkocmVzdF9vZl90eXBlX2NvbXBpbGF0aW9uKTogTWFyayB2YXJpYWJsZXMgYHR5cGUnIGFuZCBgdG9wbGV2JwoJd2l0aCBBVFRSSUJVVEVfVU5VU0VEIGlmIG5vbmUgb2YgREJYX0RFQlVHR0lOR19JTkZPLAoJWENPRkZfREVCVUdHSU5HX0lORk8gb3IgU0RCX0RFQlVHR0lOR19JTkZPIGFyZSBkZWZpbmVkLgoJKGRpc3BsYXlfaGVscCk6IE1ha2UgdmFyaWFibGUgYGknIGFuIGB1bnNpZ25lZCBsb25nJy4KCShtYWluKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgYGVudnAnLgoJQ2FzdCBhc3NpZ25tZW50IHRvIGBsYW5nX2V4cGFuZF9leHByJyB0byBhIGBsYW5nX2V4cGFuZF9leHByX3QnLgoJQ2FzdCAtMSB3aGVuIGNvbXBhcmluZyBpdCB3aXRoIGEgYHNpemVfdCcuCgoJKiB0b3BsZXYuaCAoZmF0YWwsIGZhdGFsX2lvX2Vycm9yLCBwZmF0YWxfd2l0aF9uYW1lKTogTWFyawoJcHJvdG90eXBlIHdpdGggQVRUUklCVVRFX05PUkVUVVJOLgoJKGZhdGFsX2luc25fbm90X2ZvdW5kLCBmYXRhbF9pbnNuLCByZWFsbHlfc29ycnksCglwdXNoX2Zsb2F0X2hhbmRsZXIsIHBvcF9mbG9hdF9oYW5kbGVyKTogQWRkIHByb3RvdHlwZXMuCgkoZmFuY3lfYWJvcnQpOiBNYXJrIHByb3RvdHlwZSB3aXRoIEFUVFJJQlVURV9OT1JFVFVSTi4KCShkb19hYm9ydCwgYm90Y2gpOiBBZGQgcHJvdG90eXBlcy4KClNhdCBTZXAgIDYgMTI6MDU6MTggMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBmaW5hbC5jIChmaW5hbCk6IElmIGEgbGFiZWwgaXMgcmVhY2hlZCBvbmx5IGZyb20gYSBzaW5nbGUganVtcCwKCWNhbGwgTk9USUNFX1VQREFURV9DQyBvbiB0aGUganVtcCBhbmQgaXRzIHByZWRlY2Vzc29yIGJlZm9yZQoJZW1pdHRpbmcgdGhlIGluc24gYWZ0ZXIgdGhlIGxhYmVsLgoKCSogaTM4Ni5oOiBBZGQgQU1EIEs2IHN1cHBvcnQuCglDaGFuZ2UgVEFSR0VUXyogbWFjcm9zIHRvIHVzZSB0YWJsZSBsb29rdXAuCgkoSU5JVElBTElaRV9UUkFNUE9MSU5FKTogSW1wcm92ZSB0cmFtcG9saW5lIGNvZGUuCgkoQURKVVNUX0NPU1QpOiBDaGFuZ2UgZGVmaW5pdGlvbiB0byBjYWxsIGZ1bmN0aW9uIGluIGkzODYuYy4KCShJU1NVRV9SQVRFKTogRGVmaW5lIGFzIDIgZm9yIGFueXRoaW5nIG5ld2VyIHRoYW4gYW4gODA0ODYuCgkqIGkzODYuYzogQWRkIEFNRCBLNiBzdXBwb3J0LgoJQWRkIGNvbnN0YW50cyBmb3IgZmVhdHVyZSB0ZXN0cyB1c2VkIGJ5IFRBUkdFVF8qIG1hY3Jvcy4KCShzcGxpdF9kaSk6IElmIGJlZm9yZSByZWxvYWQsIGNhbGwgZ2VuX2xvd3BhcnQgYW5kIGdlbl9oaWdocGFydC4KCSh4ODZfYWRqdXN0X2Nvc3QpOiBOZXcgZnVuY3Rpb24uCgkocHV0X2p1bXBfY29kZSk6IE5ldyBmdW5jdGlvbi4KCShwcmludF9vcGVyYW5kKTogTmV3IGNvZGVzICdEJyBhbmQgJ2QnLgoJKiBpMzg2Lm1kOiBOZXcgaW5zbiB0eXBlcy4gIE5ldyBpbnNuIGF0dHJpYnV0ZSAibWVtb3J5Ii4KCVJlZGVmaW5lIHNjaGVkdWxpbmcgcGFyYW1ldGVycyB0byB1c2UgbmV3IHR5cGVzIGFuZCBhZGQgQU1EIEs2CglzdXBwb3J0LiAgRXhwbGljaXRseSBzZXQgdHlwZSBvZiBtb3N0IGluc25zLgoJKG1vdmUgaW5zbnMpOiBLNiBwcmVmZXJzIG1vdmwgJDAscmVnIHRvIHhvcmwgcmVnLHJlZy4gIFBlbnRpdW0KCVBybyBhbmQgSzYgcHJlZmVyIG1vdmwgJDEscmVnIHRvIGluY2wgcmVnLgoJKGFkZGRpMywgc3ViZGkzKTogU2V0IGNjX3N0YXR1cy4KCShESW1vZGUgc2hpZnQgcGF0dGVybnMpOiBDaGFuZ2UgbGFiZWwgY291bnRlcnMgZnJvbSBIT1NUX1dJREVfSU5UCgl0byBpbnQ7IHg4NiBjYW4ndCBoYXZlIG1vcmUgdGhhbiAyXjMxIERJbW9kZSBzaGlmdHMgcGVyCWZpbGUuCgkoc2V0Y2MpOiBDb21iaW5lIGFsbCBzZXRjYyBwYXR0ZXJucy4gIEFsbG93IHdyaXRpbmcgbWVtb3J5LgoJQ29tYmluZSBhbGwganVtcCBwYXR0ZXJucyB1c2luZyBtYXRjaF9vcGVyYXRvci4KCSgqYnplcm8pOiBOYW1lIHBhdHRlcm4uICBFbWl0IG11bHRpcGxlIHN0b3MgaW5zdHJ1Y3Rpb25zIHdoZW4gdGhhdAoJaXMgZmFzdGVyIHRoYW4gcmVwIHN0b3MuCgkoeG9yZGkzLCBhbmRkaTMsIGlvcmRpMyk6IFNpbXBsaWZ5IERJbW9kZSBsb2dpY2FsIHBhdHRlcm5zIGFuZAoJYWRkIGRlZmluZV9zcGxpdC4KClN1biBTZXAgIDYgMTE6MTc6MjAgMTk5OCAgRGF2ZSBMb3ZlICA8ZC5sb3ZlQGRsLmFjLnVrPgoKCSogY29uZmlnL202OGsveC1uZXh0IChCT09UX0xERkxBR1MpOiBEZWZpbmUgc3VpdGFibHkgZm9yIGY3NzEKCWxpbmtpbmcuCgpTYXQgU2VwICA1IDIyOjA1OjI1IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5jIChhbHBoYV9yYV9ldmVyX2tpbGxlZCk6IEluc3BlY3QgdGhlIHRvcG1vc3Qgc2VxdWVuY2UsCglub3Qgd2hhdGV2ZXIgd2UncmUgZ2VuZXJhdGluZyBub3cuCgoJKiBhbHBoYS5jIChzZXRfZnJhbWVfcmVsYXRlZF9wLCBGUlApOiBOZXcuCgkoYWxwaGFfZXhwYW5kX3Byb2xvZ3VlKTogTWFyayBmcmFtZSByZWxhdGVkIGluc25zLgoJKGFscGhhX2V4cGFuZF9lcGlsb2d1ZSk6IExpa2V3aXNlLCBidXQgd2l0aCBhIG51bGwgRlJQLgoJKiBhbHBoYS5oIChJTkNPTUlOR19SRVRVUk5fQUREUl9SVFgpOiBOZXcuCgkqIGFscGhhLm1kIChleGNlcHRpb25fcmVjZWl2ZXIpOiBOZXcuCgkqIGFscGhhL2NydGJlZ2luLmFzbSAoLmVoX2ZyYW1lKTogTmV3IGJlZ2lubmluZy4KCShfX2RvX2ZyYW1lX3NldHVwLCBfX2RvX2ZyYW1lX3Rha2Vkb3duKTogTmV3LgoJKiBhbHBoYS9jcnRlbmQuYXNtICguZWhfZnJhbWUpOiBOZXcgZW5kaW5nLgoJKiBhbHBoYS9lbGYuaCAoRFdBUkYyX0RFQlVHR0lOR19JTkZPKTogRGVmaW5lLgoJKEFTTV9TUEVDKTogRG9uJ3QgZW1pdCBib3RoIGR3YXJmMiBhbmQgbWRlYnVnLgoJKEFTTV9GSUxFX1NUQVJUKTogRG9uJ3QgZW1pdCAuZmlsZSBmb3IgZHdhcmYyLgoKCSogcnRsLmggKGVudW0gcmVnX25vdGUpOiBBZGQgUkVHX0ZSQU1FX1JFTEFURURfRVhQUi4KCSogcnRsLmMgKHJlZ19ub3RlX25hbWUpOiBMaWtld2lzZS4KCSogcnRsLnRleGkgKFJFR19OT1RFUyk6IExpa2V3aXNlLgoJKiBkd2FyZjJvdXQuYyAoZHdhcmYyb3V0X2ZyYW1lX2RlYnVnKTogVXNlIGl0LiAgUmVjb2duaXplIGEgc3RvcmUKCXdpdGhvdXQgYW4gb2Zmc2V0LgoKU2F0IFNlcCAgNSAxNDo0NzoxNyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5oIChQUkVGRVJSRURfUkVMT0FEX0NMQVNTKTogU3RhbmRhcmQgZnAgY29uc3RhbnRzIGxvYWQgdG8gVE9TLgoJKiBpMzg2Lm1kIChtb3ZzZiwgbW92ZGYsIG1vdnhmKTogVmFsaWRhdGUgbWVtb3J5IGFkZHJlc3MgcmV0dXJuZWQKCWZyb20gZm9yY2VfY29uc3RfbWVtLiAgS2lsbCB1c2VsZXNzIFJFR19FUVVBTCBzZXR0aW5nIGNvZGUuCgpTYXQgU2VwICA1IDE0OjIzOjMxIDE5OTggIFRvcmJqb3JuIEdyYW5sdW5kICA8dGVnZUBtYXRlbWF0aWsuc3Uuc2U+CgoJKiBtNjhrLm1kICh6ZXJvX2V4dGVuZHNpZGkyKTogRml4IHR5cG8uCgpTYXQgU2VwICA1IDEzOjQwOjI0IDE5OTggIEtyaXN0ZXIgV2FsZnJpZHNzb24gIDxjYXRvQGRmLmx0aC5zZT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlZCByZWZlcmVuY2VzIHRvIHRoZSByZW1vdmVkIGZpbGUuCgkqIGNvbmZpZy94bS1uZXRic2QuaDogVXNlICR7Y3B1X3R5cGV9L3htLW5ldGJzZC5oIGZvcgoJYXJtKi0qLW5ldGJzZCogYW5kIG5zMzJrLSotbmV0YnNkKi4KCSogY29uZmlnL2kzODYveG0tbmV0YnNkLmg6IFJlbW92ZWQgdW5uZWNlc3NhcnkgZmlsZS4KCSogY29uZmlnL202OGsveG0tbmV0YnNkLmg6IExpa2V3aXNlLgoJKiBjb25maWcvc3BhcmMveG0tbmV0YnNkLmg6IExpa2V3aXNlLgoJKiBjb25maWcvbWlwcy94bS1uZXRic2QuaDogTGlrZXdpc2UuCgpTYXQgQXVnIDI5IDEzOjMyOjU4IDE5OTggIE11bWl0IEtoYW4gIDxraGFuQHhyYXlsaXRoLndpc2MuZWR1PgoKCSogaTM4Ni9jeWd3aW4zMi5oIChCSUdHRVNUX0FMSUdOTUVOVCk6IERlZmluZS4KCShQQ0NfQklURklFTERfVFlQRV9NQVRURVJTKTogRGVmaW5lIHRvIGJlIDAuCgoJKiBpMzg2L2N5Z3dpbjMyLmggKEFTTV9PVVRQVVRfU0VDVElPTl9OQU1FKTogRG9uJ3QgY2hlY2sgZm9yCglmb3IgZXhhY3Qgc2VjdGlvbiBhdHRyaWJ1dGlvbnMuCgoJKiBpMzg2L21pbmd3MzIuaCAoQ1BQX1BSRURFRklORVMpOiBBZGQgX19NU1ZDUlRfXyBmb3IgbXN2YwoJcnVudGltZS4KCSogaTM4Ni9jcnRkbGwuaCAoQ1BQX1BSRURFRklORVMpOiBEZWZpbmUuCgpTYXQgU2VwICA1IDAzOjIzOjA1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG02OGsubWQgKDUyMDAgbW92cWkpOiBEbyBub3QgYWxsb3cgYnl0ZSBzaXplZCBtZW1vcnkgcmVmZXJlbmNlcwoJdXNpbmcgYWRkcmVzcyByZWdzLgoJKiBtNjhrLmMgKG91dHB1dF9tb3ZlX3FpbW9kZSk6IERvIG5vdCB1c2UgYnl0ZSBzaXplZCBvcGVyYXRpb25zIG9uCglhZGRyZXNzIHJlZ2lzdGVycy4KCgkqIE1ha2VmaWxlLmluIChwZXhlY3V0ZS5vKTogVXNlIHBleGVjdXRlLmMgZnJvbSBsaWJpYmVydHkuICBQcm92aWRlCglleHBsaWNpdCBydWxlcyBmb3IgYnVpbGRpbmcuICBTaW1pbGFybHkgZm9yIGFsbG9jYSwgdmZwcmludGYsCgljaG9vc2UtdGVtcCBhbmQgbWtzdGVtcCwgZ2V0b3B0LCBnZXRvcHQxLCBhbmQgb2JzdGFjay4KCShJTkNMVURFUyk6IEFkZCAkKHNyY2RpcikvLi4vaW5jbHVkZS4KCSogcGV4ZWN1dGUuYywgYWxsb2NhLmMsIHZmcHJpbnRmLmMsIGNob29zZS10ZW1wLmMsIG1rc3RlbXAuYzogRGVsZXRlLgoJKiBnZXRvcHQuaCwgZ2V0b3B0LmMgZ2V0b3B0MS5jLCBvYnN0YWNrLmMsIG9ic3RhY2suaDogTGlrZXdpc2UuCgpGcmkgU2VwICA0IDExOjU3OjUwIDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChkb19zcGVjXzEpOiBbY2FzZSAnbyddIEFjY291bnQgZm9yCglsYW5nX3NwZWNpZmljX2V4dHJhX291dGZpbGVzLgoJKG1haW4pOiBDb3JyZWN0bHkgY2xlYXIgYWxsIHNsb3RzIGluIG91dGZpbGVzIGZvcgoJbGFuZ19zcGVjaWZpY19leHRyYV9vdXRmaWxlcy4gIFNldCBpbnB1dF9maWxlX251bWJlciBiZWZvcmUKCWNhbGxpbmcgbGFuZ19zcGVjaWZpY19wcmVfbGluay4KCkZyaSBTZXAgIDQgMTA6Mzc6MDcgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogbG9vcC5jIChsb2FkX21lbXMpOiBGaXggSlVNUF9MQUJFTCBmaWVsZCBhZnRlciBmb3JfZWFjaF9ydHggY2FsbC4KCkZyaSBTZXAgIDQgMDI6MDE6MDUgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAob3V0cHV0X2RvdWJsZV9pbnQpOiBJbiBhbGwgVjkgc3ltYm9saWMKCWNhc2VzLCB1c2UgeHdvcmQuCgkoc3BhcmNfb3V0cHV0X2RlZmVycmVkX2Nhc2VfdmVjdG9ycyk6IElmIG5vIHdvcmsgdG8gZG8sIHJldHVybi4KCUZpeCB0aGlua28gaW4gU2VwdCAxIGNoYW5nZS4KCjE5OTgtMDktMDMgIFNMIEJhdXIgIDxzdGV2ZUBhbHRhaXIueGVtYWNzLm9yZz4KCgkqIE1ha2VmaWxlLmluOiBBZGQgc2VtaWNvbG9uIGluIEJJU09OIGRlZmluaXRpb24gZm9yIHBvcnRhYmlsaXR5LgoKVGh1IFNlcCAgMyAxMzozNDo0MSAxOTk4ICBUb29uIE1vZW5lICA8dG9vbkBtb2VuZS5pbmRpdi5ubHV1Zy5ubD4KCgkqIGNvbmZpZy9uZXh0c3RlcC5jIChoYW5kbGVfcHJhZ21hKTogQ29ycmVjdCBuYW1lIG9mIHRoaXJkCglhcmd1bWVudC4KClR1ZSBTZXAgIDEgMTE6MzA6MzMgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9tMzJyL20zMnIubWQ6IENoYW5nZSAocmVnOkNDIDE3KSB0byAocmVnOlNJIDE3KS4KCSogY29uZmlnL20zMnIvbTMyci5oOiBNYWtlIHJlZ2lzdGVyIDE3IGJlIGZpeGVkLgoJKiBjb25maWcvbTMyci9tMzJyLmM6IFVzZSBTSW1vZGUgZm9yIGNjIG9wZXJhdGlvbnMuCgpUaHUgU2VwICAzIDE4OjE3OjM0IDE5OTggIEJlbmphbWluIEtvc25payAgPGJrb3pAY3lnbnVzLmNvbT4KCgkqIGludm9rZS50ZXhpIChXYXJuaW5nIE9wdGlvbnMpOiBBZGQgLVdub24tdGVtcGxhdGUtZnJpZW5kCglkb2N1bWVudGF0aW9uLgoKVGh1IFNlcCAgMyAxODoxNjoxNiAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIHJzNjAwMC5jIChyczYwMDBfb3ZlcnJpZGVfb3B0aW9ucyk6IEFkZCAtbWNwdT17NDAxLGU2MDNlfS4KClRodSBTZXAgIDMgMTg6MDU6MTYgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLm1kIChtb3ZzZik6IERpc2FibGUgZXhwbGljaXQgc2Vjb25kYXJ5LXJlbG9hZC1saWtlCglmdW5jdGlvbmFsaXR5IGlmIFRBUkdFVF9QT1dFUlBDNjQuCgkobW92ZGYpOiBSZW1vdmUgVEFSR0VUX1BPV0VSUEM2NCBleHBsaWNpdCBzZWNvbmRhcnktcmVsb2FkLWxpa2UKCWZ1bmN0aW9uYWxpdHkuCgpUaHUgU2VwICAzIDExOjQxOjQwIDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGZpeGluYy5zY286IEJvcnJvdyBjb2RlIHRvIHdyYXAgJ2Jvb2wnIHR5cGVkZWZzIGZyb20gdGluZm8uaAoJYW5kIHRlcm0uaCBmcm9tIGZpeGluYy53cmFwLgoKVGh1IFNlcCAgMyAwOTo0NzozMSAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBhY2xvY2FsLm00IChHQ0NfSEVBREVSX1NUUklORyk6IE5ldyBtYWNybyB0byBkZXRlY3QgaWYgaXQgaXMKCXNhZmUgdG8gaW5jbHVkZSBib3RoIHN0cmluZy5oIGFuZCBzdHJpbmdzLmggdG9nZXRoZXIuCgkoR0NDX05FRURfREVDTEFSQVRJT04pOiBUZXN0IFNUUklOR19XSVRIX1NUUklOR1Mgd2hlbiBkZWNpZGluZwoJd2hpY2ggaGVhZGVycyB0byBzZWFyY2ggZm9yIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucy4gIENvbnRpbnVlIHRvCglwcmVmZXIgc3RyaW5nLmggb3ZlciBzdHJpbmdzLmggd2hlbiBib3RoIGFyZSBub3QgYWNjZXB0YWJsZS4KCgkqIGFjY29uZmlnLmggKFNUUklOR19XSVRIX1NUUklOR1MpOiBBZGQgc3R1Yi4KCgkqIGNvbmZpZ3VyZS5pbjogQ2FsbCBHQ0NfSEVBREVSX1NUUklORy4KCgkqIHN5c3RlbS5oOiBUZXN0IFNUUklOR19XSVRIX1NUUklOR1Mgd2hlbiBkZWNpZGluZyB3aGljaCBoZWFkZXJzCgl0byBpbmNsdWRlLiAgQ29udGludWUgdG8gcHJlZmVyIHN0cmluZy5oIG92ZXIgc3RyaW5ncy5oIHdoZW4gYm90aAoJYXJlIG5vdCBhY2NlcHRhYmxlLgoKV2VkIFNlcCAgMiAyMzo1NjoyOSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChvdXRwdXRfZG91YmxlX2ludCk6IElmIFY5IGFuZCBNRURMT1csIGRvCglub3QgYXNzdW1lIHRvcCAzMi1iaXRzIG9mIHN5bWJvbGljIGFkZHJlc3NlcyBhcmUgemVybyBpZgoJZmxhZ19waWMuCgpUaHUgU2VwICAzIDAwOjIzOjIxIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBnaW5jbHVkZS92YS1hbHBoYS5oOiBQcm90ZWN0IGVudGlyZSBzZWNvbmQgcG9ydGlvbiBvZiB0aGUKCWZpbGUgYWdhaW5zdCBkb3VibGUgaW5jbHVzaW9uLgoKVGh1IFNlcCAgMyAwMDozNzo1NSAxOTk4ICBPdmlkaXUgUHJlZGVzY3UgIDxvdmlkaXVAYXJhY25ldC5jb20+CgoJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIEJvZWhtJ3MgZ2FyYmFnZSBjb2xsZWN0b3IuCgkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIC0tZW5hYmxlLW9iamMtZ2MuCgkqIGNvbmZpZ3VyZTogUmVidWlsdC4KCSogTWFrZWZpbGUuaW4gKENIRUNLX1RBUkdFVFMpOiBBZGQgY2hlY2stb2JqYy4KCShjaGVjay1vYmpjKTogTmV3IHJ1bGUuCgkqIG9iamMvTWFrZS1sYW5nLmluOiBCdWlsZCBhIGRpZmZlcmVudCBPYmplY3RpdmUtQyBsaWJyYXJ5IHRoYXQKCXJ1bnMgd2l0aCB0aGUgQm9laG0ncyBjb2xsZWN0b3IuCgkqIG9iamMvZW5jb2RpbmcuYyAob2JqY19yb3VuZF9hY2Nfc2l6ZV9mb3JfdHlwZXMpOiBOZXcgZnVuY3Rpb24uCgkqIG9iamMvZW5jb2RpbmcuYzogQ29ycmVjdGx5IGNvbXB1dGUgdGhlIHNpemUgb2YgY29tcG91bmQgdHlwZXMgaW4KCXRoZSBwcmVzZW5jZSBvZiBiaXRmaWVsZHMuIFNraXAgdGhlIHZhcmlhYmxlIG5hbWUgb2YgdGhlIHR5cGUgaWYKCWFueS4gQWRkZWQgc3VwcG9ydCBmb3IgbG9uZyBsb25nLgoJKiBvYmpjL2VuY29kaW5nLmggKF9DX0dDSU5WSVNJQkxFKTogTmV3IHNwZWNpZmllci4KCShfRl9HQ0lOVklTSUJMRSk6IE5ldyBtYXNrLgoJKiBvYmpjL2djLmM6IE5ldyBmaWxlLiBDb21wdXRlIHRoZSB0eXBlIG1lbW9yeSBtYXNrIGFzc29jaWF0ZWQgd2l0aAoJYSBjbGFzcyBiYXNlZCBvbiB0aGUgcnVudGltZSBpbmZvcm1hdGlvbi4KCSogb2JqYy9taXNjLmM6IEFkZGVkIHRoZSBob29rcyB0aGF0IHVzZSB0aGUgQm9laG0ncyBjb2xsZWN0b3IKCWFsbG9jYXRpb24gZnVuY3Rpb25zLgoJKiBvYmpjL29iamMtYWN0LmMgKGJ1aWxkX2NsYXNzX3RlbXBsYXRlKTogR2VuZXJhdGUgYSBuZXcgY2xhc3MKCW1lbWJlciAoZ2Nfb2JqZWN0X3R5cGUpIHRvIGhvbGQgdGhlIGNsYXNzJyB0eXBlIG1lbW9yeSBtYXNrLgoJKGJ1aWxkX3NoYXJlZF9zdHJ1Y3R1cmVfaW5pdGlhbGl6ZXIpOiBJbml0aWFsaXplIHRoZSBuZXcgbWVtYmVyIHRvCglOVUxMLgoJKGVuY29kZV9jb21wbGV0ZV9iaXRmaWVsZCk6IE5ldyBmdW5jdGlvbi4gR2VuZXJhdGUgdGhlIG5ldwoJZW5jb2RpbmcuCgkoZW5jb2RlX2ZpZWxkX2RlY2wpOiBHZW5lcmF0ZSB0aGUgbmV3IGVuY29kaW5nIG9ubHkgZm9yIHRoZSBHTlUKCXJ1bnRpbWUuCgkqIG9iamMvb2JqYy1hcGkuaCAoX0NfTE5HX0xORywgX0NfVUxOR19MTkcpOiBOZXcgc3BlY2lmaWVycyBmb3IgdGhlCglsb25nIGxvbmcgdHlwZXMuCgkoY2xhc3NfZ2V0X2djX29iamVjdF90eXBlKTogTmV3IGZ1bmN0aW9uIHRvIG1hcmsgYSBwb2ludGVyIGluc3RhbmNlCgl2YXJpYWJsZSBhcyBhIHdlYWsgcG9pbnRlci4KCSogb2JqYy9vYmpjLWZlYXR1cmVzLnRleGk6IE5ldyBmaWxlLgoJKiBvYmpjL29iamMuaCAoZ2Nfb2JqZWN0X3R5cGUpOiBOZXcgY2xhc3MgbWVtYmVyLgoJKiBvYmpjL29iamVjdHMuYyAoY2xhc3NfY3JlYXRlX2luc3RhbmNlKTogQ3JlYXRlIGEgdHlwZWQgbWVtb3J5CglvYmplY3Qgd2hlbiBjb21waWxlZCB3aXRoIEJvZWhtJ3MgY29sbGVjdG9yIHN1cHBvcnQuCgkqIG9iamMvc2VuZG1zZy5jIChfX29iamNfaW5pdF9pbnN0YWxsX2R0YWJsZSk6IENhbGwKCV9fb2JqY19zZW5kX2luaXRpYWxpemUgaW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBpbml0aWFsaXplIGZsYWcuCgkoX19vYmpjX3NlbmRfaW5pdGlhbGl6ZSk6IENhbGwgX19vYmpjX2dlbmVyYXRlX2djX3R5cGVfZGVzY3JpcHRpb24KCXRvIGdlbmVyYXRlIHRoZSBjbGFzcyB0eXBlIG1lbW9yeSBtYXNrLiBSZXdyaXRlIHRoZSBjb2RlIHRoYXQKCXNlbmRzIHRoZSAraW5pdGlhbGl6ZSBzbyB0aGF0IGl0IGlzIGNhbGxlZCBvbmx5IG9uY2UgKGJ1ZyByZXBvcnQKCWFuZCBmaXggZnJvbSBSb25hbGQgUGlqbmFja2VyIDxSb25hbGQuUGlqbmFja2VyQGJlc3QubXMucGhpbGlwcy5jb20+KS4KCSogdGVzdHN1aXRlL29iamM6IE5ldyB0ZXN0c3VpdGUgZm9yIE9iamVjdGl2ZS1DIHR5cGUgZW5jb2RpbmcuCgkqIHRlc3RzdWl0ZS9saWIvb2JqYy10b3J0dXJlLmV4cDogTmV3IGZpbGUuCgkqIHRlc3RzdWl0ZS9saWIvb2JqYy5leHA6IE5ldyBmaWxlLgoKV2VkIFNlcCAgMiAxNDo0NzozNiAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBJbiBpZi90aGVuL2Vsc2UgdHJhbnNmb3JtYXRpb25zLCBhZGQKCWFub3RoZXIgY2FsbCB0byBtb2RpZmllZF9iZXR3ZWVuX3AgZm9yIHRoZSBqdW1wIGluc24uCgpXZWQgU2VwICAyIDE0OjE2OjQ5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGZpeC1oZWFkZXIuYyAoc3ltbGluayk6IFRyZWF0IGxpa2UgcmVhZGxpbmsuCgpXZWQgU2VwICAyIDE5OjMwOjA2IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBkd2FyZm91dC5jIChmdW5kYW1lbnRhbF90eXBlX2NvZGUpOiBFbmNvZGUgMzIgYml0IGZsb2F0cy9kb3VibGVzCglhcyBGVF9mbG9hdC4KCldlZCBTZXAgIDIgMTA6MDY6MDcgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9uZXh0c3RlcC5oOiAgICBVcGRhdGUgSEFORExFX1BSQUdNQSBtYWNyby4KCSogY29uZmlnL2g4MzAwL2g4MzAwLmg6IFVwZGF0ZSBIQU5ETEVfUFJBR01BIG1hY3JvLgoJKiBjb25maWcvaTk2MC9pOTYwLmg6ICAgVXBkYXRlIEhBTkRMRV9QUkFHTUEgbWFjcm8uCgoJKiBjb25maWcvbmV4dHN0ZXAuYyAoaGFuZGxlX3ByYWdtYSk6IFRha2UgdGhyZWUgYXJndW1lbnRzLCBhcyBwZXIKCXRoZSBuZXcgSEFORExFX1BSQUdNQSBtYWNybyBzcGVjaWZpY2F0aW9uLgoJKiBjb25maWcvaDgzMDAvaDgzMDAuYyAoaGFuZGxlX3ByYWdtYSk6IFRha2UgdGhyZWUgYXJndW1lbnRzLCBhcwoJcGVyIHRoZSBuZXcgSEFORExFX1BSQUdNQSBtYWNybyBzcGVjaWZpY2F0aW9uLgoJKiBjb25maWcvaTk2MC9pOTYwLmMgKHByb2Nlc3NfcHJhZ21hKTogVGFrZSB0aHJlZSBhcmd1bWVudHMsIGFzCglwZXIgdGhlIG5ldyBIQU5ETEVfUFJBR01BIG1hY3JvIHNwZWNpZmljYXRpb24uCgpXZWQgU2VwICAyIDA5OjI1OjI5IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjLWxleC5jIChjaGVja19uZXdsaW5lKTogQ2FsbCBIQU5ETEVfUFJBR01BIGJlZm9yZQoJSEFORExFX1NZU1ZfUFJBR01BIGlmIGJvdGggYXJlIGRlZmluZWQuICBHZW5lcmF0ZSB3YXJuaW5nIG1lc3NhZ2VzCglpZiB1bmtub3duIHByYWdtYXMgYXJlIGVuY291bnRlcmVkLgoJKGhhbmRsZV9zeXN2X3ByYWdtYSk6IEludGVycHJldCByZXR1cm4gY29kZSBmcm9tCgloYW5kbGVfcHJhZ21hX3Rva2VuICgpLiAgUmV0dXJuIHN1Y2Nlc3MvZmFpbHVyZSBpbmRpY2F0aW9uIHJhdGhlcgoJdGhhbiBuZXh0IHVucHJvY2Vzc2VkIGNoYXJhY3Rlci4KCShwcmFnbWFfZ2V0Yyk6IE5ldyBmdW5jdGlvbjogcmV0cmlldmVzIGNoYXJhY3RlcnMgZnJvbSB0aGUKCWlucHV0IHN0cmVhbS4gIERlZmluZWQgd2hlbiBIQU5ETEVfUFJBR01BIGlzIGVuYWJsZWQuCgkocHJhZ21hX3VuZ2V0Yyk6IE5ldyBmdW5jdGlvbjogcmVwbGFjZXMgY2hhcmFjdGVycyBiYWNrIGludG8gdGhlCglpbnB1dCBzdHJlYW0uICBEZWZpbmVkIHdoZW4gSEFORExFX1BSQUdNQSBpcyBlbmFibGVkLgoKCSogYy1wcmFnbWEuYyAoaGFuZGxlX3ByYWdtYV90b2tlbik6IFJldHVybiBzdWNjZXNzL2ZhaWx1cmUgc3RhdHVzCglvZiB0aGUgcGFyc2UuCgoJKiBjLXByYWdtYS5oOiBDaGFuZ2UgcHJvdG90eXBlIG9mIGhhbmRsZV9wcmFnbWFfdG9rZW4oKS4KCgkqIHZhcmFzbS5jIChoYW5kbGVfcHJhZ21hX3dlYWspOiBPbmx5IGNyZWF0ZSB0aGlzIGZ1bmN0aW9uIGlmCglIQU5ETEVfUFJBR01BX1dFQUsgaXMgZGVmaW5lZC4KCgkqIGMtY29tbW9uLGMgKGRlY2xfYXR0cmlidXRlcyk6IElmIGRlZmluZWQgY2FsbCB0aGUgZXhwcmVzc2lvbgoJY29udGFpbmVkIHdpdGhpbiB0aGUgSU5TRVJUX0FUVFJJQlVURVMgbWFjcm8gYmVmb3JlIGFkZGluZwoJYXR0cmlidXRlcyB0byBhIGRlY2wuCgoJKiB0bS50ZXhpIChIQU5ETEVfUFJBR01BKTogRG9jdW1lbnQgdGhlIG5ldyB2ZXJzaW9uIG9mCglIQU5ETEVfUFJBR01BLCB3aGljaCB0YWtlcyB0aHJlZSBhcmd1bWVudHMuCgkoSU5TRVJUX0FUVFJJQlVURVMpOiBEb2N1bWVudCB0aGlzIG5ldyBtYWNyby4KCgkqIExBTkdVQUdFUzogRG9jdW1lbnQgdGhlIG5ldyB2ZXJzaW9uIG9mIEhBTkRMRV9QUkFHTUEgYW5kIHRoZQoJbmV3IElOU0VSVF9BVFRSSUJVVEVTIG1hY3JvLgoKV2VkIFNlcCAgMiAwMjowMzoyMyAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92ZGYpOiBPbmx5IGdlbmVyYXRlIHNwZWNpYWwgUlRMIGZvcgoJTEFCRUxfUkVGcyB3aGVuIFBJQy4KCShtb3ZlX2xhYmVsX2RpKTogUmVtb3ZlLgoJKG1vdmRpX3BpY19sYWJlbF9yZWYsIG1vdmRpX2hpZ2hfcGljX2xhYmVsX3JlZiwKCW1vdmRpX2xvX3N1bV9waWNfbGFiZWxfcmVmKTogTmV3IHBhdHRlcm5zIGZvciA2NC1iaXQgbGFiZWwKCXJlZmVyZW5jZXMgd2hlbiBQSUMuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChBU01fT1VUUFVUX0FERFJfVkVDX0VMVCwKCUFTTV9PVVRQVVRfQUREUl9ESUZGX0VMVCk6IERvbid0IGRvIGFueXRoaW5nIHNwZWNpYWwgZm9yIE1FRExPVywKCW91dHB1dCBhbiAueHdvcmQgZm9yIGFsbCA2NC1iaXQgY2FzZXMuCgpUdWUgU2VwICAxIDE1OjU1OjE3IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGZpbmFsaXplX3BpYyk6IERvbid0IG91dHB1dCBhcmJpdHJhcnkKCWFsaWdubWVudCwgdXNlIEZVTkNUSU9OX0JPVU5EQVJZIGluc3RlYWQuCgkoc3BhcmNfb3V0cHV0X2RlZmVycmVkX2Nhc2VfdmVjdG9ycyk6IExpa2V3aXNlLgoKTW9uIEF1ZyAzMSAxNzoyNTo0MSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92c2ZfY29uc3RfaW50cmVnKTogS2lsbCB3YXJuaW5nLgoJKG1vdnRmX2luc25fc3A2NCwgbW92dGZfbm9fZV9pbnNuX3NwNjQpOiBSZW9yZGVyIGFsdGVybmF0aXZlcy4KCk1vbiBBdWcgMzEgMTM6NTc6NTUgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGFscGhhL3ZhX2xpc3QuaDogTmV3IGZpbGUuCgkqIGFscGhhL3gtYWxwaGEgKEVYVFJBX0hFQURFUlMpOiBOZXcuICBBZGQgdmFfbGlzdC5oLgoKTW9uIEF1ZyAzMSAxNDo1NTowMiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBORVdTOiBBZGQgU0NPIE9wZW5zZXJ2ZXIgYW5kIFVuaXh3YXJlIDcgbm90ZXMuCgoJKiBORVdTOiBGaXggdHlwb3MuCgpNb24gQXVnIDMxIDE1OjQyOjE4IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIHZhcmFzbS5jIChjb21wYXJlX2NvbnN0YW50XzEpOiBIYW5kbGUgUkFOR0VfRVhQUi4KCShyZWNvcmRfY29uc3RhbnRfMSk6IEhhbmRsZSBSQU5HRV9FWFBSLgoKTW9uIEF1ZyAzMSAxMDo1NDowMyAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcHJpbnQtcnRsLmMgKHByaW50X3J0eCk6IE5PVEVfSU5TTl9MSVZFIGhhcyBhbiBydHggbm90IGEgYml0bWFwLgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplKTogSGFuZGxlIE5PVEVfSU5TTl9SQU5HRV9TVEFSVAoJYW5kIE5PVEVfSU5TTl9SQU5HRV9FTkQgc3BlY2lhbGx5LgoJKHJlZW1pdF9ub3Rlcyk6IExpa2V3aXNlLgoKTW9uIEF1ZyAzMSAxMDoxODo1MiAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBzcGFyYy5jIChUTUFTSywgVU1BU0spOiBVc2UgYCh1bnNpZ25lZCkxJyBub3QgYDFVJy4KCSh1bHRyYXNwYXJjX3NjaGVkX2luaXQpOiBSZW1vdmUgdW5uZWVkZWQgJi4KCk1vbiBBdWcgMzEgMTA6NDc6MTYgMTk5OCAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAaXNzYW4uaW5mb3JtYXRpay51bmktZG9ydG11bmQuZGU+CgoJKiBjb25maWcvbTY4ay9tNjhrLmggKFRBUkdFVF9TV0lUQ0hFUyk6IERvbid0IHJlbW92ZSBNQVNLXzY4MDQwCglmb3IgbTY4MDIwLTYwLCB0byBwcmV2ZW50IHRoZSB1c2Ugb2YgZmludHJ6LgoKU3VuIEF1ZyAzMCAyMjoxNzoyMCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogY29uZmlndXJlLmluOiBJZiB0aGUgbmF0aXZlIGNvbXBpbGVyIGlzIEdDQyB1c2UgJChXQVJOX0NGTEFHUykKCWV2ZW4gaW4gc3RhZ2UxLgoJKiBNYWtlZmlsZS5pbjogTGlrZXdpc2UuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCgpTdW4gQXVnIDMwIDIyOjE1OjQxIDE5OTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKCgkqIGNvbmZpZ3VyZS5pbiAoZ3h4X2luY2x1ZGVfZGlyKTogQ2hhbmdlZCB0bwoJJyR7cHJlZml4fS9pbmNsdWRlL2crKyctJHtsaWJzdGRjeHhfaW50ZXJmYWNlfS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIEF1ZyAzMCAyMDoxOTo0MyAxOTk4ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLnNlPgoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IENoYW5nZSAiPiIgdG8gIj49IiBtYWtpbmcgTU9WRV9SQVRJTyB1c2UKCWNvbnNpc3RlbnQuCgkqIHRtLnRleGkgKENvc3RzKTogU2F5IE1PVkVfUkFUSU8gaXMgbnVtYmVyIG9mIG1lbS1tZW0gbW92ZQoJKnNlcXVlbmNlcyogKmJlbG93KiB3aGljaCBzY2FsYXIgbW92ZXMgd2lsbCBiZSB1c2VkLgoKU3VuIEF1ZyAzMCAxNzoxODo0MyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBjb2xsZWN0Mi5jIChta3RlbXApOiBEZWxldGUgdW51c2VkIGRlY2xhcmF0aW9uLgoKCSogY29uZmlnL3htLW5ldGJzZC5oOiBSZW1vdmUgdW5uZWNlc3NhcnkgZmlsZS4KCSogY29uZmlnLyoveG0tbmV0YnNkLmg6IERvIG5vdCBpbmNsdWRlIHRoZSBnZW5lcmljIHhtLW5ldGJzZC5oCglmaWxlIGFueW1vcmUsIGl0IGlzIG5vdCBuZWVkZWQuCgpTdW4gQXVnIDMwIDE2OjA1OjQ1IDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBjb252ZXJ0LmMgKGNvbnZlcnRfdG9faW50ZWdlcik6IElzc3VlIGFuIGVycm9yIG9uIGNvbnZlcnNpb25zIHRvCglpbmNvbXBsZXRlIHR5cGVzLgoKU3VuIEF1ZyAzMCAxNjo0NzoyMCAxOTk4ICBNYXJ0aW4gdm9uIEx2d2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogTWFrZWZpbGUuaW46IEFkZCBsYW5nX3RyZWVfZmlsZXMgYW5kIGdlbmNoZWNrLmguCgkqIGNvbmZpZ3VyZS5pbjogR2VuZXJhdGUgdGhlbS4KCSogZ2VuY2hlY2suYzogSW5jbHVkZSBnZW5jaGVjay5oLgoKU2F0IEF1ZyAyOSAyMTozODoyNCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAocGljX2xvX3N1bV9kaSwgcGljX3NldGhpX2RpKTogUmVuYW1lIHRvCgltb3ZkaV9sb19zdW1fcGljIGFuZCBtb3ZkaV9oaWdoX3BpYyBhbmQgbWFrZSB2aXNpYmxlLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAobGVnaXRpbWl6ZV9waWNfYWRkcmVzcyk6IEZvciAtZlBJQywKCWVtaXQgdGhlc2Ugd2hlbiBQbW9kZSBpcyBub3QgU0ltb2RlLgoJKiBjb25maWcvc3BhcmMvbGludXg2NC5oIChTUEFSQ19ERUZBVUxUX0NNT0RFTCk6IE1ha2UgQ01fTUVETE9XLgoKU2F0IEF1ZyAyOSAxNDo1OTozMiAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3lnd2luMzIuaCAoQVNNX09VVFBVVF9TRUNUSU9OX05BTUUpOiBEb24ndCBlbWl0CgkubGlua29uY2UgZGlyZWN0aXZlIGFmdGVyIHRoZSBmaXJzdCB0aW1lLgoKU2F0IEF1ZyAyOSAxMjozOTo1NiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtNjhrLm1kIChiZXEwX2RpKTogR2VuZXJhdGUgY29ycmVjdCAoYW5kIG1vcmUgZWZmaWNpZW50KSBjb2RlIHdoZW4KCXRoZSBjbG9iYmVyZWQgb3BlcmFuZCBvdmVybGFwcyB3aXRoIGFuIGlucHV0LgoJKGJuZTBfZGkpOiBTaW1pbGFybHkuCgoJKiBNYWtlZmlsZS5pbiAoSU5TVEFMTCk6IFJlbW92ZSAiLS1uby1oZWFkZXIiIGFyZ3VtZW50LgoKCSogTkVXUzogVmFyaW91cyB1cGRhdGVzLgoKRnJpIEF1ZyAyOCAxOTowMDo0NCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChhcml0aF9vcGVyYW5kLCBjb25zdDY0X29wZXJhbmQsCgljb25zdDY0X2hpZ2hfb3BlcmFuZCwgYXJpdGhfZG91YmxlXzQwOTZfb3BlcmFuZCk6IE1hcmsgbW9kZSBhcwoJdW51c2VkLgoJKGNyZWF0ZV9zaW1wbGVfZm9jdXNfYml0cyk6IFJlbW92ZSB1bnVzZWQgYXJnIGhpZ2hlc3RfYml0X3NldCwgYWxsCgljYWxsZXJzIGNoYW5nZWQuCgkoc3BhcmNfZW1pdF9zZXRfY29uc3Q2NCk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaS4KCShzcGFyY19zcGxpdGRpX2xlZ2l0aW1hdGUpOiBMaWtld2lzZSBmb3IgYWRkcl9wYXJ0LgoJKHVsdHJhX2NvZGVfZnJvbV9tYXNrKTogTGlrZXdpc2UgZm9yIG1hc2suCgkodWx0cmFfY21vdmVfcmVzdWx0c19yZWFkeV9wKTogRml4dXAgZW50cnkgbW9kdWxvIGNhbGMuIGFuZAoJcmV2ZXJzZSByZXR1cm4gdmFsdWVzIHNvIGl0IG1hdGNoZXMgdXNhZ2UgYW5kIGNvbW1lbnRzLgoJKHVsdHJhX2ZsdXNoX3BpcGVsaW5lKTogTGlrZXdpc2UuCgkodWx0cmFfZnBtb2RlX2NvbmZsaWN0X2V4aXN0cyk6IExpa2V3aXNlLCByZW1vdmUgdW51c2VkIHZhcmlhYmxlCgl0aGlzX3R5cGUsIGFuZCBhbGxvdyBsb2FkcyBhbmQgc3RvcmVzIG9mIGRpZmZlcmluZyBGUCBtb2RlcyBhcwoJdGhleSBkbyBub3QgY3JlYXRlIGEgY29uZmxpY3QuCgkodWx0cmFfZmluZF90eXBlKTogSW5pdGlhbGl6ZSBmcG1vZGUgdG8gU0Ztb2RlLCBmaXgKCXBhcmVudGhlc2l6YXRpb24gdGhpbmtvcyBpbiBsYXJnZSBjb25kaXRpb25hbC4KCSh1bHRyYXNwYXJjX3NjaGVkX2luaXQpOiBNYXJrIGR1bXAgYW5kIHNjaGVkX3ZlcmJvc2UgYXMgdW51c2VkLgoJSW5pdCBmcmVlX3Nsb3RfbWFzayBhZnRlciB1bHRyYV9jdXJfaGlzdCBpcyByZXNldCwgbm90IGJlZm9yZS4KCSh1bHRyYXNwYXJjX3Jlc2Nhbl9waXBlbGluZV9zdGF0ZSk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgdWNvZGUuCgkodWx0cmFzcGFyY19zY2hlZF9yZW9yZGVyKTogRG9uJ3QgYnplcm8gY3VycmVudCBwaXBlbGluZSBzdGF0ZSwKCXVzZSB1bHRyYV9mbHVzaF9waXBlbGluZSBpbnN0ZWFkLCB0aGVuIHJlLWluaXQgZ3JvdXAgcG9pbnRlci4KCUZpeCBzdGF0ZW1lbnQgd2l0aCBubyBlZmZlY3QuICBJZiBubyBwcm9ncmVzcyBtYWRlIGluLCBhbmQgbm8KCWluc3RydWN0aW9ucyBzY2hlZHVsZWQgYXQgYWxsLCBhZHZhbmNlIHRvIG5ldyBwaXBlbGluZSBjeWNsZSBlbHNlCgl3ZSBnZXQgaW50byBhbiBlbmRsZXNzIGxvb3AuCgkodWx0cmFzcGFyY19hZGp1c3RfY29zdCk6IFJlbW92ZSBwcmV2aW91cyBhcmcuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oIChBREpVU1RfQ09TVCk6IFVwZGF0ZSB0byByZWZsZWN0IHRoYXQuCgpGcmkgQXVnIDI4IDEzOjUyOjM1IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHNwYXJjLm1kIChESW1vZGUsIERGbW9kZSwgVEZtb2RlIHNwbGl0cyk6IERlbGV0ZSBzZWxmX3JlZmVyZW5jZQoJY29kZS4gIFVzZSByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCB0byBkZXRlY3Qgd2hlbiBzb3VyY2UgYW5kCglkZXN0aW5hdGlvbiBvdmVybGFwLgoJKG5lZ3RmMl9ub3R2OSsxKTogVXNlIERGbW9kZSBpbnN0ZWFkIG9mIFNGbW9kZSBpbiBsYXN0IHR3byBvcGVyYW5kcy4KCjE5OTgtMDgtMjggIEJyZW5kYW4gS2Vob2UgIDxicmVuZGFuQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IFBhc3MgQ09NUEFSSVNPTl9WQUxVRSwgbm90CglDT01QQVJJU09OX1ZBTCwgaW50byBpbnZhcmlhbnRfcC4KCkZyaSBBdWcgMjggMTU6MTM6MjUgMTk5OCAgSiJvcm4gUmVubmVja2UgIDxhbXlsYWFyQGN5Z251cy5jby51az4KCgkqIHJlZ21vdmUuYyAocmVnY2xhc3NfY29tcGF0aWJsZV9wKTogTmV3IGZ1bmN0aW9uLgoJKHJlZ21vdmVfb3B0aW1pemUpOiBVc2UgaXQuCgoJVXNlIE5SRUdTIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNhbGxpbmcgbWF4X3JlZ19udW0uCgoJKGZpeHVwX21hdGNoXzEpOiBEb24ndCB1c2UgY29kZSA9IE1JTlVTIHdoZW4gbGF0ZXIgdGllaW5nIHdpdGgKCWEgaGFyZCByZWdpc3RlciBpcyBsaWtlbHkuCgpGcmkgQXVnIDI4IDE0OjU0OjA3IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBsb29wLmMgKGNoZWNrX2RicmFfbG9vcCk6IEZpeCBjYWxjdWxhdGlvbiBvZiBGSU5BTF9WQUxVRSB3aGVuCglDT01QQVJJU09OX1ZBTCB3YXMgbm9ybWFsaXplZC4KClRodSBBdWcgMjcgMjA6MTA6NDYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBUaGUgbG9vcCBlbmRpbmcgY29tcGFyaXNvbiB2YWx1ZQoJbXVzdCBiZSBhbiBpbnZhcmlhbnQgb3Igd2UgY2FuIG5vdCByZXZlcnNlIHRoZSBsb29wLgoKCSogbG9vcC5jIChzY2FuX2xvb3ApOiBDb3VudCBkb3duIGZyb20gbWF4X3JlZ19udW0gLSAxIHRvCglGSVJTVF9QU0VVRE9fUkVHSVNURVIgdG8gYXZvaWQgY2FsbGluZyBtYXhfcmVnX251bSBlYWNoIGl0ZXJhdGlvbgoJb2YgdGhlIGxvb3AuCgkobG9hZF9tZW1zX2FuZF9yZWNvdW50X2xvb3BfcmVnc19zZXQpOiBMaWtld2lzZS4KCgkqIGkzODYuYyAocHJpbnRfb3BlcmFuZCk6IFJlbW92ZSBvYnNvbGV0ZSAnYycgZG9jcy4KCldlZCBBdWcgMjYgMTc6MTM6MzcgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogZ3Roci5oOiBEb2N1bWVudCBfX0dUSFJFQURfTVVURVhfSU5JVF9GVU5DVElPTi4KCSogZnJhbWUuYyAoaW5pdF9vYmplY3RfbXV0ZXgpOiBOZXcgZnVuY3Rpb24uCgkoaW5pdF9vYmplY3RfbXV0ZXhfb25jZSk6IExpa2V3aXNlLgoJKGZpbmRfZmRlKTogQ2FsbCBpdC4KCShfX3JlZ2lzdGVyX2ZyYW1lX2luZm8pOiBMaWtld2lzZS4KCShfX3JlZ2lzdGVyX2ZyYW1lX2luZm9fdGFibGUpOiBMaWtld2lzZS4KCShfX2RlcmVnaXN0ZXJfZnJhbWVfaW5mbyk6IExpa2V3aXNlLgoKVGh1IEF1ZyAyNyAxNToxNDoxOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoYWlmYS1zY2hlZC5jIChzY2hlZF9hbmFseXplX2luc24pOiBGaXggdGhpbmtvIGluIGxhc3QgY2hhbmdlLgoKVGh1IEF1ZyAyNyAxNjozNDo1MSAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBFbmFibGUgY29kZSBmb3IgcmV2ZXJzYWwKCW9mIHNvbWUgbG9vcHMgd2l0aG91dCBhIGtub3duIGNvbnN0YW50IGxvb3AgZW5kLgoKV2VkIEF1ZyAyNiAxODozODoxNSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaGFpZmEtc2NoZWQuYyAobGFzdF9jbG9ja192YXIpOiBOZXcuCgkoc2NoZWR1bGVfYmxvY2spOiBJbml0aWFsaXplIGl0LgoJKHNjaGVkdWxlX2luc24pOiBVc2UgaXQgdG8gZmlsbCBpbnNuIG1vZGVzIHdpdGggaXNzdWUgaW5mb3JtYXRpb24uCgoJKiBhbHBoYS5jIChhbHBoYV9oYW5kbGVfdHJhcF9zaGFkb3dzKTogUmVtb3ZlIGRvLW5vdGhpbmcgZXhpdC4KCVRhZyB0cmFwYiBhbmQgbmV4dCBpbnNuIHdpdGggVEltb2RlLgoJKGFscGhhZXY1X2luc25fcGlwZSwgYWxwaGFldjVfbmV4dF9ncm91cCwgYWxwaGFldjVfYWxpZ25faW5zbnMpOiBOZXcuCgkoYWxwaGFfcmVvcmcpOiBBZGQgY29uZGl0aW9uYWwgZm9yIGFscGhhX2hhbmRsZV90cmFwX3NoYWRvd3MuCglJbnZva2UgYWxwaGFldjVfYWxpZ25faW5zbnMgYXMgYXBwcm9wcmlhdGUuCgkqIGFscGhhLmggKExBQkVMX0FMSUdOX0FGVEVSX0JBUlJJRVIpOiBXYXMgQUxJR05fTEFCRUxfQUZURVJfQkFSUklFUi4KCShNRF9TQ0hFRF9WQVJJQUJMRV9JU1NVRSk6IE5ldy4KCSogYWxwaGEubWQgKGF0dHIgdHlwZSk6IEFkZCBtdWx0aS4KCShkZWZpbmVfYXNtX2F0dHJpYnV0ZXMpOiBOZXcuCgkocHJvbG9ndWVfc3RhY2tfcHJvYmVfbG9vcCwgYnVpbHRpbl9zZXRqbXBfcmVjZWl2ZXIpOiBTZXQgdHlwZSBtdWx0aS4KCShhcmdfaG9tZSk6IExpa2V3aXNlLgoJKGZub3AsIHVub3AsIHJlYWxpZ24pOiBOZXcuCgpXZWQgQXVnIDI2IDE1OjU1OjQxIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGlyaXM1LmggKFBSRUZFUlJFRF9ERUJVR0dJTkdfVFlQRSk6IFVuZGVmLgoJKiBpcmlzNWdhcy5oIChQUkVGRVJSRURfREVCVUdHSU5HX1RZUEUpOiBEZWZpbmUuCgoJKiBjb25maWd1cmUuaW4gKHBvd2VycGMtaWJtLWFpeDQuWzEyXSopOiBDaGFuZ2UgZnJvbSA0LlsxMl0uKi4KCShyczYwMDAtaWJtLWFpeDQuWzEyXSopOiBMaWtld2lzZS4KCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgoKV2VkIEF1ZyAyNiAwOTozMDo1OSAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90aHVtYi5jICh0aHVtYl9leGl0KTogRG8gbm90IG1vdmUgYTQgaW50byBsciBpZiBpdAoJYWxyZWFkeSBjb250YWlucyB0aGUgcmV0dXJuIGFkZHJlc3MuCgpXZWQgQXVnIDI2IDEyOjU3OjA5IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNhbGxzLmMgKGV4cGFuZF9jYWxsKTogVXNlIGJpdGZpZWxkIGluc3RydWN0aW9ucyB0byBleHRyYWN0L2RlcG9zaXQKCXdvcmQgc2l6ZWQgaHVua3Mgd2hlbiBsb2FkaW5nIHVuYWxpZ25lZCBhcmdzIGludG8gcmVnaXN0ZXJzLgoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZV9pbnNuKTogT25seSBjcmVhdGUgc2NoZWR1bGluZwoJYmFycmllcnMgZm9yIExPT1AsIEVIIGFuZCBTRVRKTVAgbm90ZXMgb24gdGhlIGxvb3Bfbm90ZXMgbGlzdC4KCgkqIG1uMTAzMDAuaCAoUlRYX0NPU1RTKTogSGFuZGxlIFVESVYgYW5kIFVNT0QgdG9vLgoKV2VkIEF1ZyAyNiAxNjozNTozNyAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogbG9vcC5jIChjaGVja19kYnJhX2xvb3ApOiBBZGQgc29tZSBjb2RlIHRoYXQgd291bGQgYWxsb3cgcmV2ZXJzYWwKCW9mIHNvbWUgbG9vcHMgd2l0aG91dCBhIGtub3duIGNvbnN0YW50IGxvb3AgZW5kIGlmIGl0IHdlcmUgZW5hYmxlZC4KCldlZCBBdWcgMjYgMTE6MDg6NDQgMTk5OCAgR2F2aW4gUm9taWctS29jaCAgPGdhdmluQGN5Z251cy5jb20+CgoJKiBtaXBzLm1kIChsc2hyc2kzX2ludGVybmFsMisyKTogRml4IHR5cGUtby4KCldlZCBBdWcgMjYgMTA6NTM6MDMgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogc3lzdGVtLmg6IEluY2x1ZGUgc3RkYXJnLmgvdmFyYXJncy5oLCBtYWtlIHN1cmUgdGhleSBhcmUgb3JkZXJlZAoJY29ycmVjdGx5IHdpdGggcmVnYXJkcyB0byBzdGRpby5oLgoKCSogY2FsbHMuYzogUmVtb3ZlIHN0ZGFyZy5oL3ZhcmFyZ3MuaC4KCSogY2NjcC5jOiBMaWtld2lzZS4KCSogY2V4cC55OiBMaWtld2lzZS4KCSogY29tYmluZS5jOiBMaWtld2lzZS4KCSogY3BwZXJyb3IuYzogTGlrZXdpc2UuCgkqIGNwcGxpYi5jOiBMaWtld2lzZS4KCSogY3BwbGliLmg6IExpa2V3aXNlLgoJKiBkb3ByaW50LmM6IExpa2V3aXNlLgoJKiBlbWl0LXJ0bC5jOiBMaWtld2lzZS4KCSogZmluYWwuYzogTGlrZXdpc2UuCgkqIGZpeC1oZWFkZXIuYzogTGlrZXdpc2UuCgkqIGdjYy5jOiBMaWtld2lzZS4KCSogZ2VuYXR0ci5jOiBMaWtld2lzZS4KCSogZ2VuYXR0cnRhYi5jOiBMaWtld2lzZS4KCSogZ2VuY29kZXMuYzogTGlrZXdpc2UuCgkqIGdlbmNvbmZpZy5jOiBMaWtld2lzZS4KCSogZ2VuZW1pdC5jOiBMaWtld2lzZS4KCSogZ2VuZXh0cmFjdC5jOiBMaWtld2lzZS4KCSogZ2VuZmxhZ3MuYzogTGlrZXdpc2UuCgkqIGdlbm9waW5pdC5jOiBMaWtld2lzZS4KCSogZ2Vub3V0cHV0LmM6IExpa2V3aXNlLgoJKiBnZW5wZWVwLmM6IExpa2V3aXNlLgoJKiBnZW5yZWNvZy5jOiBMaWtld2lzZS4KCSogbWlwcy10ZmlsZS5jOiBMaWtld2lzZS4KCSogcHJlZml4LmM6IExpa2V3aXNlLgoJKiBwcm90b2l6ZS5jOiBMaWtld2lzZS4KCSogcmVnbW92ZS5jOiBMaWtld2lzZS4KCSogdG9wbGV2LmM6IExpa2V3aXNlLgoJKiB0cmVlLmM6IExpa2V3aXNlLgoKV2VkIEF1ZyAyNiAwNTowOToyNyAxOTk4ICBKYWt1YiBKZWxpbmVrICA8ampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jej4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19vdmVycmlkZV9vcHRpb25zKTogSWYgbm90CglUQVJHRVRfRlBVLCB0dXJuIG9mZiBUQVJHRVRfVklTLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoVEFSR0VUX1NXSVRDSEVTKTogQWRkIG5vLXZpcy4KCShMRUdJVElNQVRFX0NPTlNUQU5UX1ApOiBBbGxvdyBTRi9ERiBtb2RlIHplcm8gd2hlbiBUQVJHRVRfVklTLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG1vdnNpX2luc24pOiBVc2UgZnplcm9zIG5vdCBmemVyby4KCShtb3ZkaV9pbnNuX3NwNjQpOiBBZGQgVklTIGZ6ZXJvIGFsdGVybmF0aXZlLgoJKGNsZWFyX3NmLCBjbGVhcl9kZik6IE5ldyBWSVMgcGF0dGVybnMuCgkobW92c2YsIG1vdmRmIGV4cGFuZGVycyk6IEFsbG93IGZwX3plcm9fb3BlcmFuZCBmbGF0IG91dCB3aGVuCglUQVJHRVRfVklTLgoJKG9uZV9jbXBsZGkyX3NwNjQpOiBQcm92aWRlIG5ldyBmbm90MSBWSVMgYWx0ZXJuYXRpdmUuCgpUdWUgQXVnIDI1IDEwOjU3OjQxIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBsb29wLmMgKG5fdGltZXNfc2V0LCBuX3RpbWVzX3VzZWQsIG1heV9ub3Rfb3B0aW1pemUsCglyZWdfc2luZ2xlX3VzYWdlKTogQ29udmVydCB0byB2YXJyYXlzLiAgQWxsIHVzZXMgY2hhbmdlZC4KCShpbnNlcnRfbG9vcF9tZW0pOiBSZXR1cm4gYSB2YWx1ZS4KCShzY2FuX2xvb3ApOiBUd2VhayBBVk9JRF9DQ19NT0RFX0NPUElFUyBjb2RlLgoJKGxvYWRfbWVtc19hbmRfcmVjb3VudF9sb29wX3JlZ3Nfc2V0KTogTGlrZXdpc2UuICBHcm93IHRoZSBhcnJheXMsIGlmCgluZWNlc3NhcnkuCgpUdWUgQXVnIDI1IDIzOjU3OjEyIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIEZyb20gQWxleGFuZHJlOgoJKiBjb25maWd1cmUuaW46IERvIG5vdCBzZXQgdGhyZWFkX2ZpbGUgdG8gImlyaXgiIHNpbmNlIG5vIHN1Y2gKCXN1cHBvcnQgZXhpc3RzIHlldC4KCgkqIHNwYXJjLm1kIChmbG9hdCBhYnMvbmVnIHNwbGl0cyk6IENoZWNrIHJlbG9hZF9jb21wbGV0ZWQgYmVmb3JlCgljYWxsaW5nIGFsdGVyX3N1YnJlZy4KClR1ZSBBdWcgMjUgMTk6MTc6NTkgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfYWJzbmVnZmxvYXRfc3BsaXRfbGVnaXRpbWF0ZSk6IE5ldwoJZnVuY3Rpb24uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5oOiBEZWNsYXJlIGl0LgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGZsb2F0IGFicy9uZWcgc3BsaXRzKTogVXNlIGl0LgoJKGFsbCBvdGhlciBzcGxpdHMpOiBIYW5kbGUgU1VCUkVHcyBwcm9wZXJseSB3aGVyZSBuZWNlc3NhcnkuCgkodW5uYW1lZCAoMTw8eCktMSBWOFBMVVMgcGF0dGVybik6IERpc2FibGUgZm9yIG5vdy4KClR1ZSBBdWcgMjUgMTk6NDg6NDYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVvcmcuYyAoZmlsbF9zaW1wbGVfZGVsYXlfc2xvdHMpOiBEbyBub3QgYWJvcnQgaWYgd2UgZW5jb3VudGVyCglhbiBpbnNuIG9uIHRoZSB1bmZpbGxlZF9zbG90c19saXN0IHRoYXQgaGFzIG5vIGRlbGF5IHNsb3RzLgoJKGZpbGxfZWFnZXJfZGVsYXlfc2xvdHMpOiBTaW1pbGFybHkuCgpUdWUgQXVnIDI1IDEzOjM1OjIwIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvdjg1MC92ODUwLmMgKG1vdnNpX3NvdXJjZV9vcGVyYW5kKTogVHJlYXQgQ09OU1RBTlRfUF9SVFgKCWFzIGFuIG9yZGluYXJ5IG9wZXJhbmQuCgpUdWUgQXVnIDI1IDEyOjU0OjU3IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuYyAodmFsaWRfbWFjaGluZV9hdHRyaWJ1dGUpOiBEb24ndCBhcHBseSBhdHRyaWJ1dGVzIHRvIGJvdGgKCWRlY2wgYW5kIHR5cGUuCgpUdWUgQXVnIDI1IDEyOjIzOjIwIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiByZWxvYWQuYyAob3BlcmFuZHNfbWF0Y2hfcCk6IEhhbmRsZSBydHZlY3MuCgoJKiBpMzg2LmMgKGxlZ2l0aW1hdGVfcGljX2FkZHJlc3NfZGlzcF9wKTogTmV3LgoJKGxlZ2l0aW1hdGVfYWRkcmVzc19wKTogVXNlIGl0LgoJKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBVc2UgdW5zcGVjcyB0byByZXByZXNlbnQgQEdPVCBhbmQgQEdPVE9GRi4KCUhhbmRsZSBjb25zdGFudCBwb29sIHN5bWJvbHMganVzdCBsaWtlIHN0YXRpY3MuCgkoZW1pdF9waWNfbW92ZSk6IFVzZSBQbW9kZSBub3QgU0ltb2RlIGZvciBjbGFyaXR5LgoJKG91dHB1dF9waWNfYWRkcl9jb25zdCkgW1NZTUJPTF9SRUZdOiBSZW1vdmUgQEdPVCBhbmQgQEdPVE9GRiBoYWNrcy4KCVtVTlNQRUNdOiBOZXcsIGhhbmRsaW5nIHdoYXQgd2Uga2lsbGVkIGFib3ZlLgoJW1BMVVNdOiBEZXRlY3QgYW5kIGFib3J0IG9uIGludmFsaWQgc3ltYm9sIGFyaXRobWV0aWMuCgkqIGkzODYuaCAoQ09OU1RBTlRfQUREUkVTU19QKTogUmVtb3ZlIEhJR0guCgpUdWUgQXVnIDI1IDEyOjAyOjIzIDE5OTggIE1hcmsgTWl0Y2hlbGwgIDxtYXJrQG1hcmttaXRjaGVsbC5jb20+CgoJKiBhbGlhcy5jOiBJbmNsdWRlIG91dHB1dC5oLgoJKERJRkZFUkVOVF9BTElBU19TRVRTX1ApOiBEb24ndCB0cmVhdCBhbGlhcyBzZXRzIGFzCglkaWZmZXJlbnQgaWYgd2UncmUgaW4gYSB2YXJhcmdzIGZ1bmN0aW9uLgoJKiBNYWtlZmlsZS5pbiAoYWxpYXMubyk6IERlcGVuZCBvbiBvdXRwdXQuaAoKVHVlIEF1ZyAyNSAxOToyMDoxMiAxOTk4ICBKIm9ybiBSZW5uZWNrZSAgPGFteWxhYXJAY3lnbnVzLmNvLnVrPgoKCSogc2guaCAoR0lWX1NPUlRfQ1JJVEVSSU9OKTogRGVsZXRlLgoKVHVlIEF1ZyAyNSAxMzoxOTo0NiAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiByZWdjbGFzcy5jIChyZWdjbGFzcyk6IFVzZSB4bWFsbG9jL2ZyZWUgaW5zdGVhZCBvZiBhbGxvY2EuCgkqIHN0dXBpZC5jIChzdHVwaWRfbGlmZV9hbmFseXNpcyk6IExpa2V3aXNlLgoJKiByZWxvYWQxLmMgKHJlbG9hZCk6IExpa2V3aXNlLgoKVHVlIEF1ZyAyNSAwNTo0ODoxOCAxOTk4ICBKYWt1YiBKZWxpbmVrICA8ampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jej4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChhcml0aF80MDk2X29wZXJhbmQsIGFyaXRoX2FkZF9vcGVyYW5kLAoJYXJpdGhfZG91YmxlXzQwOTZfb3BlcmFuZCwgYXJpdGhfZG91YmxlX2FkZF9vcGVyYW5kKTogTmV3CglwcmVkaWNhdGVzLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoUFJFRElDQVRFX0NPREVTKTogQWRkIHRoZW0sIGRlY2xhcmUgdGhlbS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChhZGRkaTMsIGFkZHNpMywgc3ViZGkzLCBzdWJzaTMpOiBVc2UKCXRoZW0gdG8gdHJhbnNmb3JtIGFkZC9zdWIgNDA5NiBpbnRvIGFkZC9zdWIgLTQwOTYuCgpNb24gQXVnIDI0IDIzOjMxOjAzIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogbG9vcC5jIChzY2FuX2xvb3ApOiBBbGxvY2F0ZSBzb21lIHNsb3AgdG8gaGFuZGxlIHBzZXVkb3MKCWdlbmVyYXRlZCBieSBtb3ZlX21vdmFibGVzLgoJKGxvYWRfbWVtc19hbmRfcmVjb3VudF9sb29wX3JlZ3Nfc2V0KTogSG9ub3IgQVZPSURfQ0NfTU9ERV9DT1BJRVMKCWhlcmUgdG9vLgoKTW9uIEF1ZyAyNCAxOTo0NTo0MCAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiB0cmVlLmRlZiAoREVDTF9SRVNVTFQpOiBDb3JyZWN0IGRvY3VtZW50YXRpb24uCgpUdWUgQXVnIDI1IDAxOjE1OjI3IDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiByZWxvYWQxLmMgKHJlbG9hZF9yZWdfZnJlZV9iZWZvcmVfcCk6IE5ldyBhcmd1bWVudCBFUVVJVjsgIENoYW5nZWQKCWFsbCBjYWxsZXJzLiAgQWJvcnQgZm9yIFJFTE9BRF9GT1JfSU5TTi4gIFJFTE9BRF9GT1JfT1VUQUREUl9BRERSOgoJY29uZmxpY3RzIHdpbGwgYWxsIFJFTE9BRF9GT1JfT1VUUFVUIHJlbG9hZHMuCgoJKiByZWxvYWQxLmMgKHJlbG9hZF9jc2VfcmVnc18xKTogV2hlbiBkZWxldGluZyBhIG5vLW9wIG1vdmUgdGhhdAoJbG9hZHMgdGhlIGZ1bmN0aW9uIHJlc3VsdCwgc3Vic3RpdHV0ZSB3aXRoIGEgVVNFLgoKTW9uIEF1ZyAyNCAxNToyMDoxOSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAuaCAoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogVXNlIFRBUkdFVF9QT1dFUlBDNjQKCXdoZW4gdGVzdGluZyBMRUdJVElNQVRFX0lOREVYRURfQUREUkVTU19QIERGbW9kZSBhbmQgREltb2RlLgoJKExFR0lUSU1JWkVfQUREUkVTUyk6IFVzZSBUQVJHRVRfUE9XRVJQQzY0IGZvciBJTkRFWEVEIGZpeHVwLgoJKiByczYwMDAuYyAocHJpbnRfb3BlcmFuZCwgY2FzZSAnTCcpOiBBZGQgVU5JVFNfUEVSX1dPUkQsIG5vdCA0LgoJKHByaW50X29wZXJhbmQsIGNhc2VzICdPJyBhbmQgJ1QnKTogRml4IHR5cG9zIGluIGxvc3NhZ2Ugc3RyaW5ncy4KCSogcnM2MDAwLm1kIChmaXhfdHJ1bmNkZnNpMl9zdG9yZSk6IFJlbW92ZSAldyBmcm9tIG5vbi1DT05TVF9JTlQKCW9wZXJhbmQuCgkobW92ZGZfc29mdGZsb2F0MzIsIG1vdmRmX2hhcmRmbG9hdDY0LCBtb3ZkZl9zb2Z0ZmxvYXQ2NCk6IENoYW5nZQoJJ28nIHRvICdtJyBmb3IgR1BSIHZhcmlhbnQgY29uc3RyYWludHMuCgpNb24gQXVnIDI0IDEwOjI1OjQ2IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGxvb3AuYyAoc2Nhbl9sb29wKTogSG9ub3IgQVZPSURfQ0NfTU9ERV9DT1BJRVMuCgoJKiBoODMwMC5oIChTVFJJUF9OQU1FX0VOQ09ESU5HKTogRml4IHR5cG8uCgoJKiBzcGFyYy5tZCAoVEZtb2RlIHNwbGl0cyk6IFVzZSByZWdfb3ZlcmxhcF9tZW50aW9uZWRfcCB0byBkZXRlY3QKCXdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gb3ZlcmxhcC4KCgkqIHN0bXQuYyAoZW1pdF9jYXNlX25vZGVzKTogQ2hhbmdlIHJ0eF9mdW5jdGlvbiB0byBydHhfZm4gdG8gYXZvaWQKCWNsYXNoIHdpdGggZ2xvYmFsIHR5cGUuCgpNb24gQXVnIDI0IDAwOjUzOjUzIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGZpeGluYy5pcml4OiBBZGQgY3Vyc2VzLmggaGFuZGxpbmcgZnJvbSBmaXhpbmMud3JhcC4KCgkqIGMtY29tbW9uLmMgKGNvbWJpbmVfc3RyaW5ncyk6IEFsc28gc2V0IFRSRUVfUkVBRE9OTFkuCglDaGFuZ2Ugd2Fybl93cml0ZV9zdHJpbmdzIHRvIGZsYWdfY29uc3Rfc3RyaW5ncy4KCSogYy1kZWNsLmMsIGMtdHJlZS5oOiBMaWtld2lzZS4KClN1biBBdWcgMjMgMTg6Mzk6MTEgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfZW1pdF9zZXRfY29uc3QzMik6IElmIG91dHB1dHRpbmcgYQoJQ09OU1RfSU5ULCBub3QgYSBzeW1ib2xpYyByZWZlcmVuY2UsIGRvbid0IHVzZSBhIEhJR0gvTE9fU1VNCglzZXF1ZW5jZSwgdXNlIFNFVC9JT1IgaW5zdGVhZCBzbyBDU0UgY2FuIHNlZSBpdC4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZoaV9jb25zdDY0X3NwZWNpYWwsCgltb3ZzaV9jb25zdDY0X3NwZWNpYWwpOiBOZXcgcGF0dGVybnMgbmVjZXNzaXRhdGVkIGJ5IHRoYXQgY2hhbmdlLgoJKG1vdmhpX2hpZ2gpOiBSZW1vdmUuCgkobW92aGlfbG9fc3VtKTogQ2hhbmdlIHRvIG1hdGNoIGFuIElPUi4KCShtb3ZkZl9pbnNuX3NwMzIpOiBUZXN0IFRBUkdFVF9WOSBub3QgVEFSR0VUX0FSQ0g2NC4KCShtb3ZkZl9pbnNuX3Y5b25seSk6IE5ldyBwYXR0ZXJuIGZvciB3aGVuIFY5IGJ1dCBub3QgQVJDSDY0LgoJKG1vdmRmX2luc25fc3A2NCk6IFRlc3QgYm90aCBUQVJHRVRfVjkgYW5kIFRBUkdFVF9BUkNINjQuCgkobW92ZGYgc3BsaXRzKTogQWxsb3cgd2hlbiBub3QgVjkgb3Igd2hlbiBub3QgQVJDSDY0IGFuZCBpbnRlZ2VyCglyZWdpc3RlcnMgYXJlIGludm9sdmVkLgoJKHNuZXNpX3plcm9fZXh0ZW5kIHNwbGl0KTogUmVtb3ZlIHJlbG9hZF9jb21wbGV0ZWQgdGVzdC4KCSh1bm5hbWVkIHBsdXMgYW5kIG1pbnVzIHplcm9fZXh0ZW5kIHNpZGkgc3BsaXRzKTogQWRkIGl0LgoKU3VuIEF1ZyAyMyAxMTo1NjowOCAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZXh0ZW5kLnRleGk6IFJlbW92ZSBkZXNjcmlwdGlvbiBvZiBleHRlbnNpb24gdG8gZXhwbGljaXQKCWluc3RhbnRpYXRpb24gdGhhdCBpcyBub3cgZW5kb3JzZWQgYnkgc3RhbmRhcmQgQysrLgoKU3VuIEF1ZyAyMyAwOTozOTowOSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9hcmMvYXJjLmMgKGFyY19pbml0aWFsaXplX3BpYyk6IFJlbW92ZS4KCSogY29uZmlnL2FyYy9hcmMuaCAoSU5JVElBTElaRV9QSUMpOiBTaW1pbGFybHksIHRoaXMgcm91dGluZSBkb2VzCglub3RoaW5nIG9uIGFueSBwbGF0Zm9ybSBhbmQgaXMgaW52b2tlZCBieSBuby1vbmUsIGl0IGRvZXMgbm90IGV2ZW4KCWFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKElOSVRJQUxJWkVfUElDKTogTGlrZXdpc2UuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChpbml0aWFsaXplX3BpYyk6IExpa2V3aXNlLgoJKGZpbmRfYWRkcl9yZWcpOiBSZW1vdmUgdGhpcyBhcyB3ZWxsLCBubyBsb25nZXIgcmVmZXJlbmNlZCBhZnRlcgoJbXkgcmV3cml0ZS4KClN1biBBdWcgMjMgMDA6MTc6MTQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVjb2cuYyAodmFsaWRhdGVfcmVwbGFjZV9ydHhfZ3JvdXApOiBOZXcgZnVuY3Rpb24uCgkqIHJlY29nLmggKHZhbGlkYXRlX3JlcGxhY2VfcnR4X2dyb3VwKTogRGVjbGFyZSBpdC4KCSogcmVnbW92ZS5jIChvcHRpbWl6ZV9yZWdfY29weV8zKTogSWYgYW55IHN1YnN0aXR1dGlvbiBmYWlscywgdGhlbiB1bmRvCgl0aGUgZW50aXJlIGdyb3VwIG9mIHN1YnN0aXR1dGlvbnMuCgpTYXQgQXVnIDIyIDIzOjMxOjAwIDE5OTggIEtsYXVzLUdlb3JnIEFkYW1zICAoS2xhdXMtR2VvcmcuQWRhbXNAY2hlbWllLnVuaS1rYXJsc3J1aGUuZGUpCgoJKiBsb29wLmMgKGxvYWRfbWVtcyk6IEZpeCBpbml0aWFsaXplcnMuCgpGcmkgQXVnIDIxIDIzOjA3OjQ2IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChURm1vZGUgc3BsaXRzKTogSGFuZGxlIGRlc3RpbmF0aW9uCglyZWdpc3RlcnMgYmVpbmcgcmVmZXJlbmNlZCBpbiB0aGUgYWRkcmVzcyBjb3JyZWN0bHkuCgoJKiBleHBtZWQuYyAobWFrZV90cmVlKSBbQ09OU1RfSU5UXTogU2lnbiBleHRlbmQgZXZlbiBpZgoJVFJFRV9VTlNJR05FRCwgd2hlbiBiaXRzaXplIG9mIHR5cGUncyBtb2RlIGlzIGxhcmdlciB0aGFuCglIT1NUX0JJVFNfUEVSX1dJREVfSU5ULgoKRnJpIEF1ZyAyMSAxOTozMTozMSAxOTk4ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KCgkqIHRyZWUuZGVmIChMQUJFTEVEX0JMT0NLX0VYUFIsIEVYSVRfQkxPQ0tfRVhQUik6IE5ldyB0cmVlIG5vZGVzLgoJKiB0cmVlLmggKExBQkVMRURfQkxPQ0tfTEFCRUwsIExBQkVMRURfQkxPQ0tfQk9EWSwKCUVYSVRfQkxPQ0tfTEFCRUxFRF9CTE9DSywgRVhJVF9CTE9DS19SRVRVUk4sIExPT1BfRVhQUl9CT0RZKTogTmV3CgltYWNyb3MuCgkqIGV4cHIuYyAoZXhwYW5kX2V4cHIpOiBIYW5kbGUgTEFCRUxFRF9CTE9DS19FWFBSIGFuZAoJRVhJVF9CTE9DS19FWFBSLgoKVGh1IEF1ZyAyMCAxOTo0Mzo0NCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBoODMwMC5jIChoODMwMF9lbmNvZGVfbGFiZWwpOiBVc2UgJyYnIGZvciB0aW55IGRhdGEgaXRlbXMuCgkqIGg4MzAwLmggKFRJTllfREFUQV9OQU1FX1ApOiBMaWtld2lzZS4KCShTVFJJUF9OQU1FX0VOQ09ESU5HKTogSGFuZGxlICcmJy4KCgkqIG1uMTAyMDAuaCAoUkVHX09LX0ZPUl9JTkRFWF9QKTogRG8gbm90IGNoZWNrIHRoZSBtb2RlIG9mIHRoZQoJcmVnaXN0ZXIgKGl0IGNvdWxkIGJlIGFjY2Vzc2VkIHZpYSBhbiBvdXRlciBTVUJSRUcpLgoJKFJFR19PS19GT1JfQkFTRV9QKTogTGlrZXdpc2UuCgkoR09fSUZfTEVHSVRJTUFURV9BRERSRVNTKTogQ29uc2lzdGVudGx5IHVzZSBSRUdOT19PS19GT1JfQkFTRV9QLgoKCSogcmVtb3ZlLmMgKG9wdGltaXplX3JlZ19jb3B5XzMpOiBBYm9ydCBpbnN0ZWFkIG9mIHNpbGVudGx5IGdlbmVyYXRpbmcKCWJvZ3VzIHJ0bC4KCgkqIGp1bXAuYyAocnR4X3JlbnVtYmVyZWRfZXF1YWxfcCk6IERvIG5vdCBjb25zaWRlciBQTFVTIGNvbW11dGF0aXZlLgoKVGh1IEF1ZyAyMCAxNzozNToyMCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92dGZfaW5zbl9zcDMyKTogQWxsIG1lbW9yeSBvcGVyYW5kcwoJbXVzdCBiZSBvZmZzZXR0YWJsZSBzbyB0aGUgc3BsaXRzIGNhbiBiZSBtYWRlLgoKVGh1IEF1ZyAyMCAxMzo1Njo1MyAxOTk4ICBNaWNoYWVsIE1laXNzbmVyICA8bWVpc3NuZXJAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZy9pMzg2L3dpbm50LmM6IEluY2x1ZGUgc3lzdGVtLmgsIG5vdCBzdGRpby5oIHRvIGdldAoJc3lzL3BhcmFtLmggcHVsbGVkIGluIGJlZm9yZSBydGwuaCBpbiBjYXNlIHRoZSBzeXN0ZW0gZGVmaW5lcyBNSU4KCWFuZCBNQVguCgpUaHUgQXVnIDIwIDEzOjQ0OjIwIDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5tZCAobW92cWksIG1vdmhpKTogQWRkIENPTlNUQU5UX1BfUlRYLgoKVGh1IEF1ZyAyMCAxMzoxNToxMSAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IENvbXB1dGUgVFlQRV9TSVpFX1VOSVQgY29ycmVjdGx5IGZvcgoJYXJyYXlzIG9mIGJpdHMuCgkqIGNwcGxpYi5jIChjcHBfZGVmaW5lKTogSGFuZGxlIG1hY3JvcyB3aXRoIHBhcmFtZXRlcnMuCgpXZWQgQXVnIDE5IDIxOjMzOjE5IDE5OTggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KCgkqIHJzNjAwMC5jIChyczYwMDBfb3V0cHV0X2xvYWRfdG9jX3RhYmxlKTogVXNlIGxkIGZvciA2NC1iaXQuCgkob3V0cHV0X3RvYyk6IFVzZSBzaW5nbGUgVE9DIHNsb3Qgb3IgbGxvbmcgbWluaW1hbC10b2MgZm9yIERGbW9kZQoJYW5kIERJbW9kZSA2NC1iaXQuICBVc2UgbGxvbmcgZm9yIG1pbmltYWwtdG9jIFNGbW9kZSBhbmQKCVNZTUJPTF9SRUYgLyBMQUJFTF9SRUYgNjQtYml0LgoJKG91dHB1dF9mdW5jdGlvbl9wcm9maWxlcik6IFVzZSBsbG9uZyBmb3IgcHJvZmlsZXIgbGFiZWwgYW5kIGxkIHRvCglsb2FkIDY0LWJpdCBsYWJlbCBhZGRyZXNzLgoKV2VkIEF1ZyAxOSAxNzo1MjoyNyAxOTk4ICBOaWNrIENsaWZ0b24gIChuaWNrY0BjeWdudXMuY29tKQoKCSogY29uZmlnL2FybS90aHVtYi5tZCAoZXh0ZW5kcWlzaTJfaW5zbik6IENvcGUgd2l0aCBSRUcgKwoJT0ZGU0VUIGFkZHJlc3NpbmcuCgpXZWQgQXVnIDE5IDE0OjEzOjMxIDE5OTggIEplZmYgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgZm9yIHNuYXBzaG90LgoKV2VkIEF1ZyAxOSAxMzoxMDozMCAxOTk4ICBKZWZmIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogdmVyc2lvbi5jOiBCdW1wIGZvciBzbmFwc2hvdC4KCldlZCBBdWcgMTkgMTM6MDY6NDcgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogY29sbGVjdDIuYyAoZXh0cmFjdF9pbml0X3ByaW9yaXR5KTogVXNlIGF0b2kgaW5zdGVhZCBvZiBzdHJ0b3VsLgoKV2VkIEF1ZyAxOSAxMzo1MTozNSAxOTk4ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLnNlPgoKCSogdG0udGV4aSAoTWlzYyk6IEZpeCB0eXBvICJ0ZWgiLgoKCSogdG0udGV4aSAoUElDKTogRml4IHR5cG8gIlBQSUMiLgoKCSogdG0udGV4aSAoQ2FsbGVyIFNhdmVzKTogU2F5IHRoYXQgREVGQVVMVF9DQUxMRVJfU0FWRVMgaGFzIG5vCgllZmZlY3Qgd2hlbiAtTzIgYW5kIGhpZ2hlci4KCSogaW52b2tlLnRleGkgKE9wdGltaXplIE9wdGlvbnMpOiBMaWtld2lzZSBmb3IgLWZjYWxsZXItc2F2ZXMuCgoxOTk4LTA4LTE5ICBNaWNoYWVsIEhheWVzICA8bWljaGFlbGhAb25nYW9uZ2EuY2hjaC5jcmkubno+CgoJKiByZWdjbGFzcy5jOiBDaGFuZ2VkIHJlZ2lzdGVyIHNldCBkb2N1bWVudGF0aW9uIHRvIGJlIGNvbnNpc3RlbnQKCXdpdGggR0NDIGJlaGF2aW9yLgoKCSogZmluYWwuYyAoZmluYWxfc3RhcnRfZnVuY3Rpb24pOiBSZW1vdmVkIHJlZHVuZGFudCB0ZXN0IGZvcgoJY2FsbF9maXhlZF9yZWdzLgoKV2VkIEF1ZyAxOSAxMzoyODo0MSAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogcnRsLmggKHJ0eF9mdW5jdGlvbik6IE5ldyB0eXBlLgoJKGZvcl9lYWNoX3J0eCk6IE5ldyBmdW5jdGlvbi4KCSogcnRsYW5hbC5jIChmb3JfZWFjaF9ydHgpOiBEZWZpbmUgaXQuCgoJKiByZWNvZy5jIChjaGFuZ2VfdCk6IE5ldyB0eXBlLgoJKGNoYW5nZV9vYmplY3RzLCBjaGFuZ2Vfb2xkX2NvZGVzLCBjaGFuZ2VfbG9jcywgY2hhbmdlX29sZHMpOgoJUmVwbGFjZSB3aXRoIC4uLgoJKGNoYW5nZXMpOiBOZXcgdmFyaWFibGUuCgkodmFsaWRhdGVfY2hhbmdlKTogRHluYW1pY2FsbHkgYWxsb2NhdGUgcm9vbSBmb3IgbW9yZSBjaGFuZ2VzLCBpZgoJbmVjZXNzYXJ5LiAgVXNlcyBjaGFuZ2VzIGFycmF5IGluc3RlYWQgb2YgY2hhbmdlX29iamVjdHMsIGV0Yy4KCShhcHBseV9jaGFuZ2VfZ3JvdXApOiBVc2UgY2hhbmdlcyBhcnJheSBpbnN0ZWFkIG9mCgljaGFuZ2Vfb2JqZWN0cywgZXRjLgoKCSogbG9vcC5jIChsb29wX21lbV9pbmZvKTogTmV3IHR5cGUuCgkobG9vcF9tZW1zKTogTmV3IHZhcmlhYmxlLgoJKGxvb3BfbWVtc19pZHgpOiBMaWtld2lzZS4KCShsb29vcF9tZW1zX2FsbG9jYXRlZCk6IExpa2V3aXNlLgoJKHNjYW5fbG9vcCk6IFJlbW92ZSBucmVncyBwYXJhbWV0ZXIuCgkobmV4dF9pbnNuX2luX2xvb3ApOiBOZXcgZnVuY3Rpb24uCgkobG9hZF9tZW1zX2FuZF9yZWNvdW50X2xvb3BfcmVnc19zZXQpOiBMaWtld2lzZS4KCShsb2FkX21lbXMpOiBMaWtld2lzZS4KCShpbnNlcnRfbG9vcF9tZW0pOiBMaWtld2lzZS4KCShyZXBsYWNlX2xvb3BfbWVtKTogTGlrZXdpc2UuCgkocmVwbGFjZV9sYWJlbCk6IExpa2V3aXNlLgoJKElOU05fSU5fUkFOR0VfUCk6IE5ldyBtYWNyby4KCShsb29wX29wdGltaXplKTogRG9uJ3QgcGFzcyBtYXhfcmVnX251bSgpIHRvIHNjYW5fbG9vcC4KCShzY2FuX2xvb3ApOiBSZW1vdmUgbnJlZ3MgcGFyYW1ldGVyLCBjb21wdXRlIGl0IGFmdGVyIGFueSBuZXcKCXJlZ2lzdGVycyBhcmUgY3JlYXRlZCBieSBsb2FkX21lbXMuICBVc2UgSU5TTl9JTl9SQU5HRV9QIGFuZAoJbmV4dF9pbnNuX2luX2xvb3AgcmF0aGVyIHRoYW4gZXhwYW5kaW5nIHRoZW0gaW5saW5lLiAgQ2FsbAoJbG9hZF9tZW1zIHRvIGxvYWQgbWVtb3J5IGludG8gcHNldWRvcywgaWYgYXBwcm9wcmlhdGUuCgkocHJlc2Nhbl9sb29wKTogRmlndXJlIG91dCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUganVtcHMgZnJvbSB0aGUKCWxvb3AgdG8gdGFyZ2V0cyBvdGhlciB0aGFuIHRoZSBsYWJlbCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlCglsb29wLiAgQ2FsbCBpbnNlcnRfbG9vcF9tZW0gdG8gbm90aWNlIGFsbCB0aGUgTUVNcyB1c2VkIGluIHRoZQoJbG9vcCwgaWYgaXQgY291bGQgYmUgc2FmZSB0byBwdWxsIE1FTXMgaW50byBSRUdzIGZvciB0aGUgZHVyYXRpb24KCW9mIHRoZSBsb29wLgoJKHN0cmVuZ3RoX3JlZHVjZSk6IFVzZSBuZXh0X2luc25faW5fbG9vcC4gIFR3ZWFrIGNvbW1lbnRzLgoKV2VkIEF1ZyAxOSAwODoyOTo0NCAxOTk4ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS5jIChhcm1fb3ZlcnJpZGVfb3B0aW9ucyk6IFJlbW92ZSBsaWUgYWJvdXQgaWdub3JpbmcgUElDIGZsYWcuCgpXZWQgQXVnIDE5IDA3OjA4OjE1IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGZpbmFsaXplX3BpYyk6IENoZWNrIGZvciB0aGUgY29ycmVjdAoJbm9ubG9jYWxfZ290b19yZWNlaXZlciBVTlNQRUMgbnVtYmVyLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKG5vbmxvY2FsX2dvdG9fcmVjZWl2ZXIpOiBBZGQgY29tbWVudAoJbWFraW5nIG5vdGUgb2YgdGhpcyBkZXBlbmRlbmN5IGV4aXN0aW5nIGluIHNwYXJjLmMuCgkobmVndGYyX25vdHY5IHNwbGl0KTogR2l2ZSBORUcgU0Ztb2RlLgoJKG5lZ3NmMik6IEZpeCBpbnNuIG91dHB1dCBzdHJpbmcuCgpUdWUgQXVnIDE4IDEyOjQwOjI3IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBjLWNvbW1vbi5jIChkZWNsX2F0dHJpYnV0ZXMpOiBJc3N1ZSBhbiBlcnJvciBpZiB0aGUgYXJndW1lbnQKCXRvIGFsaWFzIGlzIG5vdCBhIHN0cmluZy4KClR1ZSBBdWcgMTggMTA6MzM6MzAgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaGFpZmEtc2NoZWQuYyAoc2NoZWRfYW5hbHl6ZSk6IFB1dCBhbGwgSlVNUF9JTlNOcyBvbiB0aGUgbGFzdAoJcGVuZGluZyBtZW1vcnkgZmx1c2ggbGlzdC4KCgkqIGNvbWJpbmUuYyAoY2FuX2NvbWJpbmVfcCk6IEFsbG93IGNvbWJpbmluZyBpbnNucyB3aXRoIFJFR19SRVRWQUwKCW5vdGVzLgoJKHRyeV9jb21iaW5lKTogQWxsb3cgY29tYmluaW5nIGluc25zIHdpdGggUkVHX0xJQkNBTEwgbm90ZXMuCgoJKiBleHByLmMgKGVtaXRfYmxvY2tfbW92ZSk6IERvIG5vdCBjYWxsIG1lbWNweSBhcyBhIGxpYmNhbGwKCWluc3RlYWQgYnVpbGQgdXAgYSBDQUxMX0VYUFIgYW5kIGNhbGwgaXQgbGlrZSBhbnkgb3RoZXIKCWZ1bmN0aW9uLgoJKGNsZWFyX3N0b3JhZ2UpOiBTaW1pbGFybHkgZm9yIG1lbXNldC4KCgkqIHJlZ21vdmUuYyAoZml4dXBfbWF0Y2hfMik6IERvIG5vdCBjYWxsIHJlZ19vdmVybGFwX21lbnRpb25lZF9wCglvbiBub3Rlcy4KCgkqIE1ha2VmaWxlLmluIChjcGx1cy1kZW0ubyk6IFByb3ZpZGUgZXhwbGljaXQgcnVsZXMgZm9yIGJ1aWxkaW5nCgljcGx1cy1kZW0uby4KCgkqIHJlZ21vdmUuYyAob3B0aW1pemVfcmVnX2NvcHlfMSk6IFVwZGF0ZSBSRUdfTl9DQUxMU19DUk9TU0VECglhbmQgUkVHX0xJVkVfTEVOR1RIIGFzIHN1Y2Nlc3NmdWwgc3Vic3RpdHV0aW9ucyBhcmUgbWFkZS4KClR1ZSBBdWcgMTggMDc6MTU6MjcgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHVsdHJhX2ZpbmRfdHlwZSk6IEFkZCBlbXB0eSBzZW1pY29sb24KCXN0YXRlbWVudCBhZnRlciBlbmQgb2YgbG9vcCBsYWJlbC4KClR1ZSBBdWcgMTggMDc6MTM6MjcgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAodWx0cmFfdHlwZXNfYXZhaWwpOiBOZXcgdmFyaWFibGUuCgkodWx0cmFfYnVpbGRfdHlwZXNfYXZhaWwpOiBOZXcgZnVuY3Rpb24gdG8gcmVjb3JkIG1hc2sgb2YgaW5zbgoJdHlwZXMgaW4gcmVhZHkgbGlzdCBhdCB0aGlzIGN5Y2xlLgoJKHVsdHJhc3BhcmNfc2NoZWRfcmVvcmRlcik6IENhbGwgaXQuCgkodWx0cmFfZmluZF90eXBlKTogVXNlIGl0IHRvIHF1aWNrZW4gdGhlIHNlYXJjaC4gIEFsc28gc2ltcGxpZgoJZGVwZW5kZW5jeSBjaGVjaywgZG9uJ3QgdXNlIHJ0eF9lcXVhbF9wIGJlY2F1c2Ugd2Uga25vdyBleGFjdGx5Cgl3aGF0IHdlIGFyZSBsb29raW5nIGZvci4KClR1ZSBBdWcgMTggMDM6MjA6NTMgMTk5OCAgUmljaGFyZCBFYXJuc2hhdyAgKHJlYXJuc2hhQGFybS5jb20pCgoJKiBhcm0uaCAoU0VDT05EQVJZX0lOUFVUX1JFTE9BRF9DTEFTUyk6IFJldHVybiBOT19SRUdTIGlmIGNvbXBpbGluZwoJZm9yIGFyY2hpdGVjdHVyZSB2NC4KCk1vbiBBdWcgMTcgMjE6MjY6MzggMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKHNsdHUsIHNnZXUpOiBEb24ndCBGQUlMLCBjYWxsCglnZW5fY29tcGFyZV9yZWcuCgkobW92c2ZfY29uc3RfaW50cmVnLCBtb3ZzZl9jb25zdF9oaWdoLCBtb3ZzZl9jb25zdF9sbywKCW1vdmRmX2NvbnN0X2ludHJlZyBhbmQgaGVscGVyIHNwbGl0cyk6IE5ldyBwYXR0ZXJucyB0byBtb3ZlIGZsb2F0Cgljb25zdGFudHMgaW50byBpbnRlZ2VyIHJlZ2lzdGVycy4KCShuZWd0ZjIsIG5lZ2RmMiwgYWJzdGYyLCBhYnNkZjIpOiBSZXdvcmsgdXNpbmcgbmV3IHBhdHRlcm5zIGFuZAoJc3BsaXRzLgoKTW9uIEF1ZyAxNyAxMTo0NjoxOSAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBGcm9tIEdyYWhhbQoJKiB0cmVlLmMgKGJ1aWxkX2luZGV4X3R5cGUpOiBDb3B5IFRZUEVfU0laRV9VTklUIGZyb20gc2l6ZXR5cGUKCXRvIGl0eXBlLgoJKiBjLWRlY2wuYyAoZmluaXNoX2VudW0pOiBDb3B5IFRZUEVfU0laX1VOSVQgZnJvbSBlbnVtdHlwZSB0byB0ZW0uCgoJKiByczYwMDAuYyAoc2Vjb25kYXJ5X3JlbG9hZF9jbGFzcyk6IEZvciBUQVJHRVRfRUxGLCBpbmRpY2F0ZSB0aGF0CglhIEJBU0VfUkVHUyByZWdpc3RlciBpcyBuZWVkZWQgYXMgYW4gaW50ZXJtZWRpYXRlIHdoZW4gY29weWluZwoJYSBzeW1ib2xpYyB2YWx1ZSBpbnRvIGFueSByZWdpc3RlciBjbGFzcyBvdGhlciB0aGFuIEJBU0VfUkVHUy4KCgkqIGV4cHIuYyAobW92ZV9ieV9waWVjZXMpOiBObyBsb25nZXIgc3RhdGljLiAgUmVtb3ZlIHByb3RvdHlwZS4KCSogcnRsLmggKG1vdmVfYnlfcGllY2VzKTogQWRkIGV4dGVybiBwcm90b3R5cGUuCgkqIG1pcHMuYyAoZXhwYW5kX2Jsb2NrX21vdmUpOiBIYW5kbGUgYWxpZ25lZCBzdHJhaWdodCBsaW5lIGNvcHkgYnkKCWNhbGxpbmcgbW92ZV9ieV9waWVjZXMuCgoJKiBleHByLmMgKGV4cGFuZF9leHByKTogQWxsb3cgYXNzaWdubWVudHMgZnJvbSBUSW1vZGUgUEFSTV9ERUNMcwoJYW5kIFZBUl9ERUNMcy4KCk1vbiBBdWcgMTcgMTA6Mjg6NTIgMTk5OCAgTWFyayBNaXRjaGVsbCAgPG1hcmtAbWFya21pdGNoZWxsLmNvbT4KCgkqIHN0bXQuYyAoZXhwYW5kX2VuZF9sb29wKTogVGlkeS4gIEFsbG93IHVuY29uZGl0aW9uYWwKCWp1bXBzIG91dCBvZiB0aGUgbG9vcCB0byBiZSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIGV4aXQgdGVzdC4KCk1vbiBBdWcgMTcgMTA6MDY6MTEgMTk5OCAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgoJCQkgIEplZmYgTGF3ICA8bGF3QGN5Z251cy5jb20+CgoJKiBNYWtlZmlsZS5pbiAoY3BsdXMtZGVwLm8pOiBVc2UgY3BsdXMtZGVtLmMgZnJvbSBsaWJpYmVydHkuCgkqIGNwbHVzLWRlbS5jOiBEZWxldGUuCgoJKiBNYWtlZmlsZS5pbiAoZm9sZC1jb25zdC5vKTogRGVwZW5kIG9uICQoUlRMX0gpLgoKCSogZm9sZC1jb25zdC5jOiBJbmNsdWRlIHJ0bC5oIHRvIGdldCB0aGUgcHJvdG90eXBlIGZvcgoJYHNldF9pZGVudGlmaWVyX2xvY2FsX3ZhbHVlJy4KCgkqIGxvb3AuYyAoZXhwcmVzc19mcm9tXzEpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGB0bXAnLgoJKGNvbWJpbmVfZ2l2cyk6IENhc3QgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGJ6ZXJvIHRvIGNoYXIgKi4KCgkqIHRvcGxldi5jIChkaXNwbGF5X2hlbHApOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGBsb29raW5nX2Zvcl9zdGFydCcuCgoJKiBjLWRlY2wuYyAoaW5pdF9kZWNsX3Byb2Nlc3NpbmcpOiBSZW1vdmUgdW5uZWVkZWQgJi4KCgkqIGFscGhhLmggKGFscGhhX2luaXRpYWxpemVfdHJhbXBvbGluZSk6IFByb3ZpZGUgcHJvdG90eXBlLgoKCSogZXhjZXB0LmMgKHNldF9leGNlcHRpb25fbGFuZ19jb2RlLCBzZXRfZXhjZXB0aW9uX3ZlcnNpb25fY29kZSk6CglDaGFuZ2UgcGFyYW1ldGVyIGZyb20gYHNob3J0JyB0byBgaW50JyB0byBhdm9pZCB1c2luZyBhIGdjYwoJZXh0ZW5zaW9uLgoKCSogZXhjZXB0LmggKHNldF9leGNlcHRpb25fbGFuZ19jb2RlLCBzZXRfZXhjZXB0aW9uX3ZlcnNpb25fY29kZSk6CglMaWtld2lzZSBmb3IgcHJvdG90eXBlcy4KCgkqIGZsb3cuYyAoY291bnRfcmVnX3JlZmVyZW5jZXMpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcyBgcmVnbm8nCglhbmQgYGknLgoKCSogZ2NzZS5jIChoYXNoX3NjYW5faW5zbik6IERlY2xhcmUgcGFyYW1ldGVyIGBpbl9saWJjYWxsX2Jsb2NrJy4KCgkqIHByZWZpeC5jICh0cmFuc2xhdGVfbmFtZSk6IENhc3QgdGhlIHJlc3VsdCBvZiBgYWxsb2NhJy4KCgkqIHZhcnJheS5oIChWQVJSQVlfRlJFRSk6IFJlaW1wbGVtZW50IGFzIGEgYGRvLXdoaWxlKDApJyBzdGF0ZW1lbnQuCgpNb24gQXVnIDE3IDA5OjIzOjQyIDE5OTggIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGlzc2FuLmluZm9ybWF0aWsudW5pLWRvcnRtdW5kLmRlPgoKCSogY29uZmlnL202OGsvbTY4ay5jOiBJbmNsdWRlICJzeXN0ZW0uaCIgaW5zdGVhZCBvZiA8c3RkaW8uaD4uCglJbmNsdWRlICJ0b3BsZXYuaCIuCgkodmFsaWRfZGJjY19jb21wYXJpc29uX3ApOiBNYXJrIG1vZGUgYXJndW1lbnQgYXMgdW51c2VkLgoJKHN5bWJvbGljX29wZXJhbmQpOiBMaWtld2lzZS4KCShsZWdpdGltaXplX3BpY19hZGRyZXNzKTogTGlrZXdpc2UuCgkoY29uc3RfdWludDMyX29wZXJhbmQpOiBMaWtld2lzZS4KCShjb25zdF9zaW50MzJfb3BlcmFuZCk6IExpa2V3aXNlLgoJKiBzY2hlZC5jIFshSU5TTl9TQ0hFRFVMSU5HXTogRGVmaW5lIG9ubHkgZHVtbXkgZnVuY3Rpb24KCXNjaGVkdWxlX2luc25zIGFuZCBjb21tZW50IG91dCByZXN0IG9mIGZpbGUuCgoJKiBtNjhrLmMgKG91dHB1dF9tb3ZlX3NpbW9kZV9jb25zdCk6IFVzZSBzdWJsIHRvIG1vdmUgYSB6ZXJvIGludG8gYW4KCWFkZHJlc3MgcmVnaXN0ZXIuCgkob3V0cHV0X21vdmVfW2hxXWltb2RlKTogTGlrZXdpc2UuCgpNb24gQXVnIDE3IDA5OjE1OjQ3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHRvcGxldi5jIChtYWluKTogRW5hYmxlIC1mc3RyaWN0LWFsaWFzaW5nIGZvciAtTzIgYW5kIGFib3ZlLgoJKiBpbnZva2UudGV4aTogQ29ycmVzcG9uZGluZyBjaGFuZ2VzLgoKTW9uIEF1ZyAxNyAwMjowMzo1NSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVnY2xhc3MuYyAoYWxsb2NhdGVfcmVnX2luZm8pOiBSZXNwZWN0IE1JTiB3aGVuIGNsZWFyaW5nIGRhdGEuCgpTdW4gQXVnIDE2IDE3OjM3OjA2IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHVsdHJhX2NvZGVfZnJvbV9tYXNrLAoJdWx0cmFfY21vdmVfcmVzdWx0c19yZWFkeV9wLCB1bHRyYV9mcG1vZGVfY29uZmxpY3RfZXhpc3RzLAoJdWx0cmFfZmluZF90eXBlLCB1bHRyYV9zY2hlZHVsZV9pbnNuLCB1bHRyYV9mbHVzaF9waXBlbGluZSwKCXVsdHJhc3BhcmNfc2NoZWRfaW5pdCwgdWx0cmFzcGFyY192YXJpYWJsZV9pc3N1ZSwKCXVsdHJhX3Jlc2Nhbl9waXBlbGluZV9zdGF0ZSwgdWx0cmFzcGFyY19zY2hlZF9yZW9yZGVyKTogTmV3CglmdW5jdGlvbnMgdG8gZGVzY3JpYmUgVWx0cmFTUEFSQyBwaXBlbGluZSBleGFjdGx5IHRvIEhhaWZhLgoJKHVsdHJhc3BhcmNfYWRqdXN0X2Nvc3QpOiBJbmRpY2F0ZSBJTVVMIHR5cGUgaW5zbnMgaGF2ZSB6ZXJvIGNvc3QsCglhcyB0aGVyZSBpcyBub3RoaW5nIHRoZSBzY2hlZHVsZXIgY2FuIGRvIGFib3V0IGl0LiAgSW5kaWNhdGUgdGhhdAoJUkVHX0RFUF9PVVRQVVQncyBjb2xsaWRlLiAgRml4dXAgZm9ybWF0dGluZy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKFJUWF9DT1NUUyk6IEZpeHVwIGludGVnZXIgbXVsdGlwbHkgYW5kCglkaXZpZGUgY29zdHMgb24gVWx0cmEgZm9yIERJbW9kZS4KCShNRF9TQ0hFRF9JTklULCBNRF9TQ0hFRF9SRU9SREVSLCBNRF9TQ0hFRF9WQVJJQUJMRV9JU1NVRSk6CglEZWZpbmUuCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoaWV1X3VubmFtZWQgZnVuY3Rpb24gdW5pdCk6IFJlbmFtZSB0bwoJaWV1TiBhbmQgYWRkIGNhbGxfbm9fZGVsYXlfc2xvdCB0byB0eXBlIGxpc3QuCgkoY3RpIGZ1bmN0aW9uIHVuaXQpOiBOZXcgdW5pdCBmb3IgYnJhbmNoZXMgb24gVWx0cmFTUEFSQy4KCShzdWJ4L2FkZHggaW5zbnMpOiBTZXQgdHlwZSB0byBtaXNjLgoJKHNpZGkgemVyby9zaWduIGV4dGVuc2lvbiBpbnNucyBvbiBhcmNoNjQpOiBTZXQgdHlwZSB0byBzaGlmdC4KCShzaWduX2V4dGVuZGhpZGkyX2luc24pOiBTZXQgdHlwZSB0byBzbG9hZC4KClN1biBBdWcgMTYgMTM6NTI6MDAgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmMgKHJzNjAwMF9zdGFja19pbmZvKTogVXNlIGlmID09IDAgZm9yIHNpemVzLgoJKG91dHB1dF9lcGlsb2cpOiBVc2UgaWYgIT0gMCBmb3Igb2Zmc2V0LgoJKHJzNjAwMF9mYXRhbF9iYWRfYWRkcmVzcyk6IFByZXBhcmUgZm9yIEludGwuCgkqIHJzNjAwMC5oIChyczYwMDBfZmF0YWxfYmFkX2FkZHJlc3MpOiBEZWNsYXJlLgoJKiByczYwMDAubWQgKG1vdnNmY2MsIG1vdmRmY2MpOiBVc2UgZWxzZSBpZi4KCShlbGZfaGlnaCk6IFVzZSB7bGl1fGxpc30uCgkoZWxmX2xvdyk6IFVzZSB7Y2FsfGxhfS4gIFJlbW92ZSAlYSB0ZW1wbGF0ZSBmcm9tIG9sZCBtbmVtb25pY3MuCgkobW92c2kpOiBVc2UgcnM2MDAwX2ZhdGFsX2JhZF9hZGRyZXNzLgoKU3VuIEF1ZyAxNiAwMTo1MzoyMSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogcmVsb2FkLmMgKGZpbmRfZXF1aXZfcmVnKTogUmVqZWN0IGVxdWl2YWxlbmNlcyBzZXBhcmF0ZWQKCWJ5IGEgdm9sYXRpbGUgaW5zdHJ1Y3Rpb24uCgpTdW4gQXVnIDE2IDAwOjIxOjQ0IDE5OTggIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KCgkqIHJzNjAwMC9saW51eC5oIChDUFBfT1NfREVGQVVMVF9TUEVDKTogRGVmaW5lLgoKU2F0IEF1ZyAxNSAyMDo1MTozNSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKG1vdnNpY2MpOiBGaXggbW9kZSBtaXNtYXRjaC4KClNhdCBBdWcgMTUgMjA6MjI6MzMgMTk5OCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQoKCSogY29uZmlnL2FscGhhL2FscGhhLmggKEFTTV9PVVRQVVRfTUlfVEhVTkspOiBIYW5kbGUgYWdncmVnYXRlZAoJcmV0dXJuIHR5cGUuCgkqIGNvbmZpZy9hbHBoYS93aW4tbnQuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IExpa2V3aXNlLgoKU2F0IEF1ZyAxNSAwODozOTo0OSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAobW92c2lfbG9fc3VtX3BpY19sYWJlbF9yZWcpOiBSZW1vdmUKCXdyaXRlLW9ubHkgbW9kaWZpZXIgZnJvbSBvcGVyYW5kIDEgY29uc3RyYWludC4KClNhdCBBdWcgMTUgMDY6Mjg6MTkgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazEpOiBJZgoJZW1pdHRpbmcgYSBYT1Igb2YgLTEgYXQgdGhlIGVuZCwgZW1pdCBhIE5PVCBpbnN0ZWFkIGZvciBjb21iaW5lJ3MKCXNha2UuCgkoc3BhcmNfZW1pdF9zZXRfY29uc3Q2NCk6IExpa2V3aXNlLCBhbHNvIHdoZW4gY29tcHV0aW5nIHRyYWlsaW5nCgliaXRzIGRvIG5vdCBuZWdhdGUgbG93X2JpdHMgYW5kIG1ha2UgZmFzdF9pbnQgYW4gaW50LgoKRnJpIEF1ZyAxNCAyMTowNzowMyAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBsb29wLmMgKGFkZF9sYWJlbF9ub3Rlcyk6IERvIG5vdCBpZ25vcmUgcmVmZXJlbmNlcyB0byBsYWJlbHMKCWJlZm9yZSBkaXNwYXRjaCB0YWJsZXMuICBNaXJyb3JzIEFwciA4IGNoYW5nZSB0byBtYXJrX2p1bXBfbGFiZWwuCgkqIGdjc2UuYyAoYWRkX2xhYmVsX25vdGVzKTogU2ltaWxhcmx5LgoKCSogcGEuaCAoQVNNX09VVFBVVF9NSV9USFVOSyk6IFN0cmlwIG5hbWUgZW5jb2RpbmcuCgoJKiBtNjhrLm1kIChhZGRkaV9kaWxzaHIzMik6IE9uZSBvZiB0aGUgb3BlcmFuZHMgbXVzdCBiZSBhIHJlZ2lzdGVyLgoJKGFkZGRpX2Rpc2hsMzIpOiBTaW1pbGFybHkuCgpGcmkgQXVnIDE0IDE0OjEyOjU5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGkzODYuaCAoTU9ERVNfVElFQUJMRV9QKTogUmVvcmdhbml6ZSB0byBzaHV0IHVwIHdhcm5pbmdzLgoJKiBhbGlhcy5jIChtZW1yZWZzX2NvbmZsaWN0X3ApOiBBZGQgYnJhY2VzIHRvIHNodXQgdXAgd2FybmluZ3MuCgkqIGNzZS5jIChjc2VfYmFzaWNfYmxvY2spOiBBZGQgcGFyZW5zIHRvIHNodXQgdXAgd2FybmluZ3MuCgpGcmkgQXVnIDE0IDEyOjU4OjIxIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2syLAoJc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9sb25nd2F5LCBjb25zdDY0X2lzXzJpbnNucywKCWNyZWF0ZV9zaW1wbGVfZm9jdXNfYml0cywgc3BhcmNfZW1pdF9zZXRfY29uc3Q2NCk6IEZpeCBtb3JlIGJ1Z3MKCWluIDY0LWJpdCBjb25zdGFudCBmb3JtYXRpb24uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoc25lc2lfemVyb19leHRlbmQgc3BsaXQpOiBHZW5lcmF0ZQoJcnRsIGZvciBhZGR4IG5vdCBzdWJ4LgoJKGRlZmluZV9pbnNuIG1vdmRpX2NvbnN0NjRfc3BlY2lhbCk6IE1ha2UgYXZhaWxhYmxlIGV2ZW4gd2hlbgoJSE9TVF9CSVRTX1BFUl9XSURFX0lOVCBpcyBub3QgNjQuCgkobW92ZGlfbG9fc3VtX3NwNjRfY2ludCwgbW92ZGlfaGlnaF9zcDY0X2NpbnQpOiBSZW1vdmUuCgkobG9zdW1fZGlfbWVkbG93LCBzZXRobSwgc2V0bG8pOiBNYWtlIG9wMiBzeW1ib2xpY19vcGVyYW5kLgoJKGNtcF9zaXFpX3RydW5jX3NldCwgY21wX2RpcWlfdHJ1bmNfc2V0KTogRW5jYXBzdWxhdGUgYm90aAoJaW5zdGFuY2VzIG9mIG9wZXJhbmQgMSBpbnNpZGUgYSBRSSBzdWJyZWcuCgkoeG9yZGkzX3NwNjRfZGJsKTogUmVtb3ZlICclJyBjb25zdHJhaW50IGZvciBvcDEuCgkob25lX2NtcGxkaTJfc3A2NCk6IEZpeCBvdXRwdXQgc3RyaW5nLgoJKG9uZV9jbXBsc2kyX25vdF9saXZlZzApOiBSZXdyaXRlIHRvIHJlbW92ZSB1bm5lZWRlZCBleHRyYQoJYWx0ZXJuYXRpdmUgY2FzZS4KCSh1bm5hbWVkIGFyY2g2NCBhc2hpZnQgREkpOiBUcnVuY2F0ZSBzaGlmdCBjb3VudCBpZiBncmVhdGVyIHRoYW4KCTYzLCBub3QgMzEuCgpGcmkgQXVnIDE0IDIxOjUyOjUzIDE5OTggIEoib3JuIFJlbm5lY2tlICA8YW15bGFhckBjeWdudXMuY28udWs+CgoJKiBleHByLmMgKHN0b3JlX2V4cHIpOiBEb24ndCBvcHRpbWl6ZSBhd2F5IGxvYWQtc3RvcmUgcGFpcgoJd2hlbiBlaXRoZXIgc291cmNlIG9yIGRlc3RpbmF0aW9uIGhhdmUgYSBzaWRlIGVmZmVjdC4KCkZyaSBBdWcgMTQgMTY6NTA6MTAgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBnZW5yZWNvZy5jIChhZGRfdG9fc2VxdWVuY2UpOiBGYXRhbCBlcnJvciBpZiB0aGUgbW9kZXMgb2YgdGhlCglvcGVyYW5kcyBvZiBTRVQgYXJlIGluY29tcGF0aWJsZS4KCgkqIGFscGhhLm1kOiBGaXggbWF4IGFuZCBtaW4gcGF0dGVybnMgc28gbW9kZXMgb2YgU0VUIG9wZXJhbmRzIG1hdGNoLgoKRnJpIEF1ZyAxNCAxMjoyMjo1NSAxOTk4ICBJYW4gTGFuY2UgVGF5bG9yICA8aWFuQGN5Z251cy5jb20+CgoJKiBjb25maWd1cmUuaW46IEF2b2lkIFtbIGJ5IHVzaW5nIHRlc3QgYW5kIGNoYW5nZXF1b3RlLgoJKiBjb25maWd1cmU6IFJlYnVpbGQuCgpGcmkgQXVnIDE0IDAxOjIyOjMxIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogcnRsLmRlZiAoQ09OU1RBTlRfUF9SVFgpOiBGaXggdHlwbyBpbiBzdHJpbmcgbmFtZS4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoc2VxZGlfc3BlY2lhbF90cnVuYywgc25lZGlfc3BlY2lhbF90cnVuYywKCXNlcXNpX3NwZWNpYWxfZXh0ZW5kLCBzbmVzaV9zcGVjaWFsX2V4dGVuZCwgc25lc2lfemVyb19leHRlbmQgYW5kCglzcGxpdCwgc25lZGlfemVyb190cnVuYyBhbmQgc3BsaXQsIHNlcXNpX3plcm9fZXh0ZW5kIGFuZCBzcGxpdCwKCXNlcWRpX3plcm9fdHJ1bmMgYW5kIHNwbGl0LCBwaWNfbG9fc3VtX2RpLCBwaWNfc2V0aGlfZGksCgltb3ZkaV9jY19zcDY0X3RydW5jLCBtb3ZkaV9jY19yZWdfc3A2NF90cnVuYywgYWRkeF9leHRlbmRfc3AzMiBhbmQKCXNwbGl0LCBhZGR4X2V4dGVuZF9zcDY0LCBzdWJ4X2V4dGVuZF9zcDY0LCBzdWJ4X2V4dGVuZCBhbmQgc3BsaXQpOgoJRml4IG1pc21hdGNoaW5nIG1vZGVzIGluIFNFVCBvcGVyYW5kcy4KCShjb25kaXRpb25hbCBtb3ZlIHBhdHRlcm5zKTogRml4IGZvcm1hdHRpbmcuCgkodW5uYW1lZCBzdWJ4IGFyY2g2NCBwYXR0ZXJuKTogUmVtb3ZlIGR1cGxpY2F0ZSBpbnNuLgoKRnJpIEF1ZyAxNCAwMDozNDozNCAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChjb25zdDY0X29wZXJhbmQsIGNvbnN0NjRfaGlnaF9vcGVyYW5kKToKCUdldCBpdCByaWdodCB3aGVuIEhPU1RfQklUU19QRVJfV0lERV9JTlQgaXMgbm90IDY0LgoJKGlucHV0X29wZXJhbmQpOiBGaXh1cCB0ZXN0IGZvciB3aGF0IHdlIGFjY2VwdCBmb3IgY29uc3RhbnQKCWludGVnZXJzLgoJKHNwYXJjX2VtaXRfc2V0X2NvbnN0MzIsIHNwYXJjX2VtaXRfc2V0X3N5bWJvbGljX2NvbnN0NjQpOiBHaXZlCglzZXQgVk9JRG1vZGUuCgkoc2FmZV9jb25zdERJKTogUmVtb3ZlLgoJKHNwYXJjX2VtaXRfc2V0X3NhZmVfSElHSDY0LCBnZW5fc2FmZV9TRVQ2NCwgZ2VuX3NhZmVfT1I2NCwKCWdlbl9zYWZlX1hPUjY0KTogTmV3IGZ1bmN0aW9ucy4KCShzcGFyY19lbWl0X3NldF9jb25zdDY0X3F1aWNrMSwgc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazIsCglzcGFyY19lbWl0X3NldF9jb25zdDY0X2xvbmd3YXksIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjQpOiBVc2UKCXRoZW0uCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5tZCAoZGVmaW5lX2luc24geG9yZGkzX3NwNjRfZGJsKTogT25seSBtYWtlCglhdmFpbGFibGUgd2hlbiBIT1NUX0JJVFNfUEVSX1dJREVfSU5UIGlzIG5vdCA2NC4KCShkZWZpbmVfaW5zbiBtb3ZkaV9zcDY0X2RibCwgbW92ZGlfY29uc3Q2NF9zcGVjaWFsKTogTGlrZXdpc2UgYW5kCgltb3ZlIGJlZm9yZSBtb3ZkaV9pbnNuX3NwNjQgcGF0dGVybi4KCShkZWZpbmVfaW5zbiBtb3ZkaV9sb19zdW1fc3A2NF9kYmwsIG1vdmRpX2hpZ2hfc3A2NF9kYmwpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gc2V0aGlfZGlfbWVkbG93LCBzZXRoNDQsIHNldG00NCwgc2V0aGgpOiBVc2UKCXN5bWJvbGljX29wZXJhbmQgYXMgcHJlZGljYXRlIGZvciBzZWNvbmQgb3BlcmFuZC4KCShESW1vZGUgbWludXMgc3BsaXQgb24gYXJjaDMyLCBuZWdzaTIgZXhwYW5kZXIsIG9uZV9jbXBsc2kyCglleHBhbmRlcik6IEdpdmUgc2V0IFZPSURtb2RlLgoKRnJpIEF1ZyAxNCAwMTo0NTowNiAxOTk4ICBNdW1pdCBLaGFuICA8a2hhbkB4cmF5bGl0aC53aXNjLmVkdT4KCgkqIGkzODYvY3lnd2luMzIgKERFRkFVTFRfUENDX1NUUlVDVF9SRVRVUk4pOiBEZWZpbmUuCgpGcmkgQXVnIDE0IDAxOjQwOjIxIDE5OTggIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAb3plbWFpbC5jb20uYXU+CgoJKiByczYwMDAvbGludXguaCAoTElOS19TUEVDKTogUGFzcyAtRyBhcmdzIHRvIHRoZSBsaW5rZXIuCgpGcmkgQXVnIDE0IDAxOjIzOjIzIDE5OTggIFJpY2hhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogYXJtL25ldGJzZC5oIChUQVJHRVRfREVGQVVMVCk6IERlZmF1bHQgaW5jbHVkZXMgc29mdHdhcmUgZmxvYXRpbmcKCXBvaW50LgoJKENQUF9GTE9BVF9ERUZBVUxUX1NQRUMpOiBSZS1kZWZpbmUgYWNjb3JkaW5nbHkuCgpGcmkgQXVnIDE0IDAxOjE5OjA4IDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGluc3RhbGwudGV4aTogVmFyaW91cyBTQ08gT3BlblNlcnZlciB0d2Vha3MuCgpUaHUgQXVnIDEzIDIwOjE0OjQwIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIHJlbG9hZDEuYyAoZWxpbWluYXRlX3JlZ3NfaW5faW5zbik6IEhhbmRsZSBhbm90aGVyIGNhc2Ugd2hlbgoJZWxpbWluYXRpbmcgdGhlIGZyYW1lIHBvaW50ZXIgdG8gdGhlIGhhcmQgZnJhbWUgcG9pbnRlci4gIEFkZAoJbWlzc2luZwllcC0+dG9fcnR4IGNoZWNrIHRvIG9uZSBleGlzdGluZyBjYXNlLgoKCSogbWlwcy9taXBzLm1kIChtb3ZoaV9pbnRlcm5hbDIrMik6IEZpeCB0eXBvIG1lbTpTSSAtPiBtZW06SEkuCgpUaHUgQXVnIDEzIDE3OjA4OjExIDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIHRyZWUuaDogRGUtY29uZGl0aW9uYWxpemUgaW5pdF9wcmlvcml0eSBjb2RlLgoKCSogbWlwcy5oIChOTV9GTEFHUyk6IENoYW5nZSBmcm9tIC1CcCB0byAtQm4uCgkqIGNvbGxlY3QyLmMgKE5NX0ZMQUdTKTogQ2hhbmdlIGZyb20gLXAgdG8gLW4uCgoJKiBjb25maWd1cmUuaW46IFR1cm4gb24gY29sbGVjdDIgZm9yIG1pcHN0eDM5LWVsZi4KCUhhbmRsZSB1c2VfY29sbGVjdDI9bm8gcHJvcGVybHkuCgoJKiBjLWNvbW1vbi5jOiBEZS1jb25kaXRpb25hbGl6ZSBpbml0X3ByaW9yaXR5IGNvZGUuCgkqIGNvbGxlY3QyLmMgKGV4dHJhY3RfaW5pdF9wcmlvcml0eSwgc29ydF9pZHMpOiBOZXcgZm5zLgoJKG1haW4pOiBDYWxsIHNvcnRfaWRzLgoJTW92ZSBzZXF1ZW5jZV9udW1iZXIgdG8gZmlsZSBzY29wZS4KCgkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIC0tZW5hYmxlLWluaXQtcHJpb3JpdHkuCgkqIGMtY29tbW9uLmMgKGF0dHJzKTogQWRkIEFfSU5JVF9QUklPUklUWS4KCShpbml0X2F0dHJpYnV0ZXMsIGRlY2xfYXR0cmlidXRlcyk6IExpa2V3aXNlLgoJKiB0cmVlLmggKERFRkFVTFRfSU5JVF9QUklPUklUWSwgTUFYX0lOSVRfUFJJT1JJVFkpOiBOZXcgbWFjcm9zLgoJKiB0cmVlLmMgKGdldF9maWxlX2Z1bmN0aW9uX25hbWVfbG9uZyk6IFNwbGl0IG91dC4uLgoJKGdldF9maWxlX2Z1bmN0aW9uX25hbWUpOiAuLi5mcm9tIGhlcmUuCgpUaHUgQXVnIDEzIDE2OjA5OjUzIDE5OTggIE1hcnRpbiB2b24gTG9ld2lzICA8bG9ld2lzQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgoKCSogZXhwci5jIChzYWZlX2Zyb21fcCk6IENoYW5nZSBjb2RlIHRvIEVSUk9SX01BUksgb25seSB3aGVuIG5vdAoJYWNjZXNzaW5nIG5vZGVzLgoKVGh1IEF1ZyAxMyAxNToyNDo0OCAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0b3BsZXYuYyAoZGlzcGxheV9oZWxwKTogQWRkIGJyYWNlcyB0byBzaHV0IHVwIHdhcm5pbmdzLgoJKiB0cmVlLmMgKHNpbXBsZV9jc3RfZXF1YWwpOiBMaWtld2lzZS4KCgkqIGZvbGQtY29uc3QuYyAobm9uX2x2YWx1ZSk6IERvbid0IGRlYWwgd2l0aCBudWxsIHBvaW50ZXIKCWNvbnN0YW50cyBoZXJlLgoJKGZvbGQsIGNhc2UgQ09NUE9VTkRfRVhQUik6IFdyYXAgYSBjb25zdGFudCAwIGluIGEgTk9QX0VYUFIuCgoJKiBjLXR5cGVjay5jIChpbml0aWFsaXplcl9jb25zdGFudF92YWxpZF9wKTogQWxsb3cgY29udmVyc2lvbiBvZiAwCglvZiBhbnkgc2l6ZSB0byBhIHBvaW50ZXIuCgpUaHUgQXVnIDEzIDEyOjUzOjEzIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGkzODYvd2lubnQuYyAoaTM4Nl9wZV9hc21fZmlsZV9lbmQpOiBDaGVjayBUUkVFX1NZTUJPTF9SRUZFUkVOQ0VELgoKV2VkIEF1ZyAxMiAxNzoyNToxOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMzAwLmMgKFJFR19TQVZFX0JZVEVTKTogT25seSByZXNlcnZlIHNwYWNlIGZvciByZWdpc3RlcnMKCXdoaWNoIHdpbGwgYmUgc2F2ZWQuCgkqIG1uMTAzMDAubWQgKHByb2xvZ3VlIGluc24pOiBPbmx5IHNhdmUgcmVnaXN0ZXJzIHdoaWNoIG5lZWQgc2F2aW5nLgoJKGVwaWxvZ3VlIGluc24pOiBTaW1pbGFybHkuCgoJKiBtbjEwMzAwLmMsIG1uMTAzMDAuaCwgbW4xMDMwMC5tZDogUmVtb3ZlICJnbG9iYWwgemVybyByZWdpc3RlciIKCW9wdGltaXphdGlvbnMuCgpXZWQgQXVnIDEyIDEyOjM5OjE2IDE5OTggIEdhdmluIFJvbWlnLUtvY2ggIDxnYXZpbkBjeWdudXMuY29tPgoKCSogbWlwcy9taXBzLmggKEVOQ09ERV9TRUNUSU9OX0lORk8pOiBTZXQgU1lNQk9MX1JFRl9GTEFHIGZvcgoJVkFSX0RFQ0wncyBpbiBncCBhZGRyZXNzYWJsZSBzZWN0aW9ucy4KClR1ZSBBdWcgMTEgMjM6MDI6MzEgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBzcGFyYy5jOiBDaGFuZ2UgcmV0dXJuIDxleHA+IHRvIDxleHA+OyByZXR1cm47IGluIGZ1bmN0aW9ucwoJcmV0dXJuaW5nIHZvaWQuCgkqIHNwYXJjLm1kOiBBZGQgZW1wdHkgc2VtaWNvbG9uIHN0YXRlbWVudCBhZnRlciBmaW5hbCBsYWJlbCBpbgoJbW92ZSBleHBhbmRlcnMuCgpUdWUgQXVnIDExIDIyOjQyOjAxIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChkZWZpbmVfaW5zbiBhZGR4X2V4dGVuZCk6IFJlbmFtZSB0bwoJYWRkeF9leHRlbmRfc3A2NCwgb25seSBhbGxvdyB3aGVuIFRBUkdFVF9BUkNINjQuCgkoZGVmaW5lX2luc24gYWRkeF9leHRlbmRfc3AzMiBhbmQgc3BsaXQpOiBWZXJzaW9uIHRoYXQgd29ya3Mgd2hlbgoJbm90IFRBUkdFVF9BUkNINjQuCgkoZGVmaW5lX2luc24gc3VieF9leHRlbmQpOiBMaWtld2lzZS4KCShkZWZpbmVfc3BsaXQgYWRkZGkzIGFuZCBzdWJkaTMgd2l0aCB6ZXJvIGV4dGVuc2lvbik6IEZpeHVwIGFuZAoJY29ycmVjdCBidWdzIHdoZW4gbm90IFRBUkdFVF9BUkNINjQuCgpUdWUgQXVnIDExIDE2OjA0OjM0IDE5OTggIEpvaG4gQ2FyciAgPGpmY0BtaXQuZWR1PgoKCSogZXhjZXB0LmMgKHNldF9leGNlcHRpb25fbGFuZ19jb2RlLCBzZXRfZXhjZXB0aW9uX3ZlcnNpb25fY29kZSk6CglVc2UgcHJvdG90eXBlLXN0eWxlIGRlZmluaXRpb24gaWYgX19TVERDX18sIHRvIG1hdGNoIGRlY2xhcmF0aW9uCglpbiBleGNlcHQuaC4KCgkqIGdlbmVtaXQuYzogQ2hhbmdlIEZBSUwgYW5kIERPTkUgbWFjcm9zIG5vdCB0byB1c2UgbG9vcHMuCgpUdWUgQXVnIDExIDEyOjI3OjAzIDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGR3YXJmMm91dC5jIChBU01fT1VUUFVUX0RXQVJGX0FERFJfQ09OU1QpOiBVc2UKCUFTTV9PVVRQVVRfRFdBUkYyX0FERFJfQ09OU1QgaWYgZGVmaW5lZC4KCgkqIG1pcHMvbWlwcy5tZCAocmVsb2FkX291dHNpKTogVXNlIE0xNl9SRUdfUCB3aGVuIFRBUkdFVF9NSVBTMTYuCgpUdWUgQXVnIDExIDE4OjEyOjUzIDE5OTggIERhdmUgTG92ZSAgPGQubG92ZUBkbC5hYy51az4KCgkqIFJFQURNRS5nNzc6IFVwZGF0ZSBmcm9tIENyYWlnLgoKVHVlIEF1ZyAxMSAwNDo0NjowMSAxOTk4ICBEYXZpZCBTLiBNaWxsZXIgIDxkYXZlbUBwaWVyZG9sLmNvYmFsdG1pY3JvLmNvbT4KCgkqIGNvbmZpZy9zcGFyYy9zcGFyYy5jIChzcGFyY19lbWl0X3NldF9jb25zdDMyKTogSU5UVkFMIGlzIG9mCgl0eXBlIEhPU1RfV0lERV9JTlQuCgkoc2FmZV9jb25zdERJIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfcXVpY2sxLAoJc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazIsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjRfbG9uZ3dheSwKCWFuYWx5emVfNjRiaXRfY29uc3RhbnQsIGNvbnN0NjRfaXNfMmluc25zLAoJY3JlYXRlX3NpbXBsZV9mb2N1c19iaXRzKTogRml4IHNvbWUgYnVncyB3aGVuIGNvbXBpbGVkIG9uIHJlYWwKCTY0LWJpdCBob3N0cy4KCShmdW5jdGlvbl9hcmdfcmVjb3JkX3ZhbHVlXzMsIGZ1bmN0aW9uX2FyZ19yZWNvcmRfdmFsdWVfMiwKCWZ1bmN0aW9uX2FyZ19yZWNvcmRfdmFsdWUpOiBBZGQgZnVsbHkgcHJvdG90eXBlZCBmb3J3YXJkIGRlY2xzLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGRlZmluZV9pbnNuIGNtcHNpX2luc25fc3AzMik6IFJlbmFtZSBiYWNrCgl0byBjbXBzaV9pbnNuIGFuZCB1c2Ugb24gYm90aCA2NCBhbmQgMzIgYml0IHRhcmdldHMuCgkoZGVmaW5lX2luc24gY21wc2lfaW5zbl9zcDY0KTogUmVtb3ZlLgoJKGRlZmluZV9leHBhbmQgemVyb19leHRlbmRzaWRpMik6IEFsbG93IGZvciAzMi1iaXQgdGFyZ2V0IHRvby4KCShkZWZpbmVfaW5zbiB6ZXJvX2V4dGVuZHNpZGkyX2luc24pOiBSZW5hbWUgdG8KCXplcm9fZXh0ZW5kc2lkaTJfaW5zbl9zcDY0LgoJKGRlZmluZV9pbnNuIHplcm9fZXh0ZW5kc2lkaTJfaW5zbl9zcDMyKTogTmV3IHBhdHRlcm4gYW5kCglhc3NvY2lhdGVkIGZvcmNlZCBzcGxpdCBmb3IgaXQuCgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAoY29uc3Q2NF9vcGVyYW5kLCBjb25zdDY0X2hpZ2hfb3BlcmFuZCk6CglOZXcgcHJlZGljYXRlcy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmg6IERlY2xhcmUgdGhlbS4KCShQUkVESUNBVEVfQ09ERVMpOiBBZGQgdGhlbS4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChtb3ZkaV9sb19zdW1fc3A2NF9kYmwsCgltb3ZkaV9oaWdoX3NwNjRfZGJsLCB4b3JkaTNfc3A2NF9kYmwpOiBVc2UgdGhlbS4KCk1vbiBBdWcgMTAgMjI6NTc6MjQgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQgKGRlZmluZV9pbnNuIGp1bXApOiBPdXRwdXQgYmEscHQgbm90IGIscHQKCWluIHY5IGNhc2UgYXMgdGhlIGxhdHRlciBtYWtlcyB0aGUgU29sYXJpcyBhc3NlbWJsZXIgY3Jhc2guCgpNb24gQXVnIDEwIDIyOjM5OjA5IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlnL3NwYXJjL3NwYXJjLmMgKGlucHV0X29wZXJhbmQpOiBEbyBub3QgYWNjZXB0IGEgTE9fU1VNIE1FTQoJZm9yIFRGbW9kZSB3aGVuICF2OS4gIFdlIHJlcXVpcmUgb2Zmc2V0dGFibGUgbWVtb3J5IGFkZHJlc3Nlcy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLmggKEFMVEVSX0hBUkRfU1VCUkVHKTogSGFuZGxlIFRGbW9kZSB0bwoJREZtb2RlIHJlZ2lzdGVyIG51bWJlciBjb252ZXJzaW9ucy4KCSogY29uZmlnL3NwYXJjL3NwYXJjLm1kIChkZWZpbmVfc3BsaXQgREZtb2RlIG1vdmVzKTogSWYgcmVnaXN0ZXIKCWlzIGEgU1VCUkVHIGRvIGFsdGVyX3N1YnJlZyBvbiBpdCBiZWZvcmUgdXNpbmcuCgkoZGVmaW5lX2V4cGFuZCBtb3Z0Zik6IEZpeHVwIGNvbW1lbnQgYWJvdXQgYWxpZ25tZW50IG9uIHY5LgoJKGRlZmluZV9zcGxpdCBURm1vZGUgbW92ZXMpOiBEb24ndCB1c2UgZ2VuX3toaWdoLGxvd31wYXJ0LCBjcmVhdGUKCWV4cGxpY2l0IFNVQlJFR3MgaW5zdGVhZC4KCk1vbiBBdWcgMTAgMTk6MDI6NTUgMTk5OCAgSm9obiBDYXJyICA8amZjQG1pdC5lZHU+CgoJKiBNYWtlZmlsZS5pbiAobWJjaGFyLm8pOiBEZXBlbmQgb24gbWJjaGFyLmMuCgpNb24gQXVnIDEwIDA0OjI4OjEzIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoJCQkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJUmV3cml0ZSBTcGFyYyBiYWNrZW5kIGZvciBiZXR0ZXIgY29kZSBnZW5lcmF0aW9uIGFuZAoJaW1wcm92ZWQgc3BhcmM2NCBzdXBwb3J0LgoJKiBjb25maWcvc3BhcmMvc3A2NC1lbGYuaDogU2V0IEpVTVBfVEFCTEVTX0lOX1RFWFRfU0VDVElPTiB0bwoJemVyby4KCSogY29uZmlnL3NwYXJjL3N5c3Y0Lmg6IExpa2V3aXNlLgoJKiBjb25maWcvc3BhcmMvc3BhcmMuYyAodjhwbHVzX3JlZ2NtcF9wLCBzcGFyY19vcGVyYW5kLAoJbW92ZV9vcGVyYW5kLCB2OHBsdXNfcmVnY21wX29wLCBlbWl0X21vdmVfc2VxdWVuY2UsCglzaW5nbGVtb3ZlX3N0cmluZywgZG91YmxlbW92ZV9zdHJpbmcsIG1lbV9hbGlnbmVkXzgsCglvdXRwdXRfbW92ZV9kb3VibGUsIG91dHB1dF9tb3ZlX3F1YWQsIG91dHB1dF9mcF9tb3ZlX2RvdWJsZSwKCW1vdmVfcXVhZF9kaXJlY3Rpb24sIG91dHB1dF9mcF9tb3ZlX3F1YWQsIG91dHB1dF9zY2NfaW5zbik6CglSZW1vdmUuCgkoc21hbGxfaW50X29yX2RvdWJsZSk6IE5ldyBwcmVkaWNhdGUuCgkoZ2VuX2NvbXBhcmVfcmVnKTogUmVtb3ZlIFRBUkdFVF9WOFBMVVMgY21wZGlfdjhwbHVzIGVtaXNzaW9uLgoJKGxlZ2l0aW1pemVfcGljX2FkZHJlc3MpOiBFbWl0IG1vdnNpX3toaWdoLGxvX3N1bX1fcGljIGluc3RlYWQgb2YKCW9sZCBwaWNfe3NldGhpLGxvX3N1bX1fc2kgcGF0dGVybnMuCgkobWVtX21pbl9hbGlnbm1lbnQpOiBOZXcgZ2VuZXJpYyBmdW5jdGlvbiB0byByZXBsYWNlCgltZW1fYWxpZ25lZF84LCB3aGljaCB1c2VzIFJFR05PX1BPSU5URVJfQUxJR04gaW5mb3JtYXRpb24gd2hlbgoJYXZhaWxhYmxlIGFuZCBjYW4gdGVzdCBmb3IgYXJiaXRyYXJ5IGFsaWdubWVudHMuICBBbGwgY2FsbGVycwoJY2hhbmdlZC4KCShzYXZlX3JlZ3MsIHJlc3RvcmVfcmVncywgYnVpbGRfYmlnX251bWJlciwKCW91dHB1dF9mdW5jdGlvbl9wcm9sb2d1ZSwgb3V0cHV0X2NicmFuY2gsIG91dHB1dF9yZXR1cm4sCglzcGFyY19mbGF0X3NhdmVfcmVzdG9yZSwgc3BhcmNfZmxhdF9vdXRwdXRfZnVuY3Rpb25fcHJvbG9ndWUsCglzcGFyY19mbGF0X291dHB1dF9mdW5jdGlvbl9lcGlsb2d1ZSk6IFByZXR0aWZ5CglpbnNuIG91dHB1dC4KCShvdXRwdXRfZnVuY3Rpb25fZXBpbG9ndWUpOiBMaWtld2lzZSBhbmQgYWRkIGNvZGUgdG8gb3V0cHV0CglkZWZlcnJlZCBjYXNlIHZlY3RvcnMuCgkob3V0cHV0X3Y5YnJhbmNoKTogTGlrZXdpc2UsIGFkZCBuZXcgYXJnIElOU04gYW5kIHVzZSBpdCB0byB0YWNrCglvbiBicmFuY2ggcHJlZGljdGlvbiBzZXR0aW5ncy4gIEFsbCBjYWxsZXJzIGNoYW5nZWQuCgkocHJpbnRfb3BlcmFuZCk6IExpa2V3aXNlIGFuZCBvdXRwdXQgJWw0NCBmb3IgTE9fU1VNcyB3aGVuCglUQVJHRVRfQ01fTUVETUlELgoJKHNwYXJjX3NwbGl0ZGlfbGVnaXRpbWF0ZSk6IE5ldyBmdW5jdGlvbiB0byBtYWtlIHN1cmUgREltb2RlCglzcGxpdHMgY2FuIGJlIHJ1biBwcm9wZXJseSB3aGVuICFhcmNoNjQuCgkoc3BhcmNfaW5pdGlhbGl6ZV90cmFtcG9saW5lLCBzcGFyYzY0X2luaXRpYWxpemVfdHJhbXBvbGluZSk6CglSZWZvcm1hdCBleGFtcGxlIGNvZGUgaW4gY29tbWVudHMuCgkoc2V0X2V4dGVuZHMpOiBSZW1vdmUgVU5TUEVDL3Y4cGx1c19jbGVhcl9oaWdoIGNhc2UuCgkoc3BhcmNfYWRkcl9kaWZmX2xpc3QsIHNwYXJjX2FkZHJfbGlzdCk6IE5ldyBzdGF0aWNzIHRvIGtlZXAgdHJhY2sKCW9mIGRlZmVycmVkIGNhc2UgdmVjdG9ycyB3ZSBuZWVkIHRvIG91dHB1dC4KCShzcGFyY19kZWZlcl9jYXNlX3ZlY3Rvcik6IFJlY29yZCBhIGNhc2UgdmVjdG9yLgoJKHNwYXJjX291dHB1dF9hZGRyX3ZlYywgc3BhcmNfb3V0cHV0X2FkZHJfZGlmZl92ZWMsCglzcGFyY19vdXRwdXRfZGVmZXJyZWRfY2FzZV92ZWN0b3JzKTogTmV3IGZ1bmN0aW9ucyB0byBvdXRwdXQgdGhlbS4KCShzcGFyY19lbWl0X3NldF9jb25zdDMyKTogTmV3IGZ1bmN0aW9uIHRvIGZvcm0gMzItYml0IGNvbnN0YW50cyBpbgoJcmVnaXN0ZXJzIHdoZW4gdGhhdCByZXF1aXJlcyBtb3JlIHRoYW4gb25lIGluc3RydWN0aW9uLgoJKHNhZmVfY29uc3RESSwgc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9xdWljazEsCglzcGFyY19lbWl0X3NldF9jb25zdDY0X3F1aWNrMiwgc3BhcmNfZW1pdF9zZXRfY29uc3Q2NF9sb25nd2F5LAoJYW5hbHl6ZV82NGJpdF9jb25zdGFudCwgY29uc3Q2NF9pc18yaW5zbnMsCgljcmVhdGVfc2ltcGxlX2ZvY3VzX2JpdHMsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjQpOiBOZXcgZnVuY3Rpb25zCgl3aGljaCBkbyB0aGUgc2FtZSBmb3IgNjQtYml0IGNvbnN0YW50cyB3aGVuIGFyY2g2NC4KCShzcGFyY19lbWl0X3NldF9zeW1ib2xpY19jb25zdDY0KTogTmV3IGZ1bmN0aW9uIHRvIGVtaXQgYWRkcmVzcwoJbG9hZGluZyBmb3IgYWxsIGNvZGUgbW9kZWxzIG9uIHY5LgoJKiBjb25maWcvc3BhcmMvc3BhcmMuaCAoQ09ORElUSU9OQUxfUkVHSVNURVJfVVNBR0UpOiBEbyBub3QgbWFrZQoJJWcxIGZpeGVkIHdoZW4gYXJjaDY0LCB1bmZpeCAlZzAgd2hlbiBUQVJHRVRfTElWRV9HMC4KCShBTFRFUl9IQVJEX1NVQlJFRyk6IEZpeCB0aGlua28sIHJldHVybiBSRUdOTyArIDEgbm90IDEuCgkoU0VDT05EQVJZX0lOUFVUX1JFTE9BRF9DTEFTUywgU0VDT05EQVJZX09VVFBVVF9SRUxPQURfQ0xBU1MpOiBGaXgKCWluYWNjdXJhY2llcyBpbiBjb21tZW50cywgYWRkIHN5bWJvbGljIGFuZCB0ZXh0X3NlZ21lbnQgb3BlcmFuZHMKCXdoZW4gVEFSR0VUX0NNX01FREFOWSBhbmQgVEFSR0VUX0NNX0VNQk1FREFOWSByZXNwZWN0aXZlbHkuICBVc2UKCUdFTkVSQUxfUkVHUyBpbiB0aGVzZSBjYXNlcyBhcyBhIHRlbXAgUkVHIGlzIG5lZWRlZCB0byBsb2FkIHRoZXNlCglhZGRyZXNzZXMgaW50byBhIHJlZ2lzdGVyIHByb3Blcmx5LgoJKEVYVFJBX0NPTlNUUkFJTlQpOiBEb2N1bWVudCBtb3JlIGFjY3VyYXRlbHksIHJlbW92ZSBRIGNhc2UgYXMgaXQKCWlzIG5vIGxvbmdlciB1c2VkLgoJKEdPX0lGX0xFR0lUSU1BVEVfQUREUkVTUyk6IEFsbG93IFRGbW9kZSBmb3IgTE9fU1VNIG9uIHY5IHNpbmNlIGZwCglxdWFkcyBhcmUgZ3VhcmFudGVlZCB0byBoYXZlIDE2LWJ5dGUgYWxpZ25tZW50LgoJKExFR0lUSU1JWkVfQUREUkVTUyk6IEZvciBTWU1CT0xfUkVGLCBDT05TVCwgYW5kIExBQkVMX1JFRiB1c2UKCWNvcHlfdG9fc3VnZ2VzdGVkX3JlZyBpbnN0ZWFkIG9mIGV4cGxpY2l0IExPX1NVTSBhbmQgSElHSC4KCShBU01fT1VUUFVUX0FERFJfVkVDLCBBU01fT1VUUFVUX0FERFJfRElGRl9WRUMpOiBOZXcgbWFjcm9zIGZvcgoJZGVmZXJyZWQgY2FzZSB2ZWN0b3IgaW1wbGVtZW50YXRpb24uCgkoQVNNX09VVFBVVF9BRERSX1ZFQ19FTFQpOiBVc2UgZnB1dGMgdG8gb3V0cHV0IG5ld2xpbmUuCgkoQVNNX09VVFBVVF9BRERSX0RJRkZfRUxUKTogUGFyZW50aGVzaXplIExBQkVMIGluIG1hY3JvIGNhbGxzLgoJR2VuZXJhdGUgImludGVybmFsIGxhYmVsIC0gbGFiZWwiIGluc3RlYWQgb2YgImxhYmVsIC0gMWIiLgoJKFBSSU5UX09QRVJBTkRfQUREUkVTUyk6IEZvciBMT19TVU0gdXNlICVsNDQgb24gVEFSR0VUX0NNX01FRE1JRC4KCShQUkVESUNBVEVfQ09ERVMpOiBSZW1vdmUgc3BhcmNfb3BlcmFuZCwgbW92ZV9vcGVyYW5kLAoJdjhwbHVzX3JlZ2NtcF9vcC4gIEFkZCBzbWFsbF9pbnRfb3JfZG91YmxlLCBpbnB1dF9vcGVyYW5kLCBhbmQKCXplcm9fb3BlcmFuZC4KCShkb3VibGVtb3ZlX3N0cmluZywgb3V0cHV0X2Jsb2NrX21vdmUsIG91dHB1dF9mcF9tb3ZlX2RvdWJsZSwKCW91dHB1dF9mcF9tb3ZlX3F1YWQsIG91dHB1dF9tb3ZlX2RvdWJsZSwgb3V0cHV0X21vdmVfcXVhZCwKCW91dHB1dF9zY2NfaW5zbiwgc2luZ2xlbW92ZV9zdHJpbmcsIG1lbV9hbGlnbmVkXzgsIG1vdmVfb3BlcmFuZCwKCXNwYXJjX29wZXJhbmQsIHY4cGx1c19yZWdjbXBfb3AsIHY4cGx1c19yZWdjbXBfcCk6IFJlbW92ZSBleHRlcm5zLgoJKHNwYXJjX2VtaXRfc2V0X2NvbnN0MzIsIHNwYXJjX2VtaXRfc2V0X2NvbnN0NjQsCglzcGFyY19lbWl0X3NldF9zeW1ib2xpY19jb25zdDY0LCBpbnB1dF9vcGVyYW5kLCB6ZXJvX29wZXJhbmQsCgltZW1fbWluX2FsaWdubWVudCwgc21hbGxfaW50X29yX2RvdWJsZSk6IEFkZCBleHRlcm5zLgoJKiBjb25maWcvc3BhcmMvc3BhcmMubWQ6IERvY3VtZW50IHRoZSBtYW55IHVzZXMgb2YgVU5TUEVDIGFuZAoJVU5TUEVDX1ZPTEFUSUxFIGluIHRoaXMgYmFja2VuZC4KCShkZWZpbmVfZnVuY3Rpb25fdW5pdCBpZXUpOiBSZW5hbWUgdG8gaWV1X3VubmFtZWQuICBBZGQgbW92ZSBhbmQKCXVuYXJ5IHRvIHR5cGVzIHdoaWNoIGV4ZWN1dGUgaW4gaXQuCgkoZGVmaW5lX2Z1bmN0aW9uX3VuaXQgaWV1X3NoaWZ0KTogUmVuYW1lIHRvIGlldTAuCgkoZGVmaW5lX2Z1bmN0aW9uX3VuaXQgaWV1MSk6IE5ldywgZXhlY3V0ZXMgY29tcGFyZSwgY2FsbCwgYW5kCgl1bmNvbmRfYnJhbmNoIHR5cGUgaW5zbnMuCgkoZGVmaW5lX2Z1bmN0aW9uX3VuaXRzIGZvciB0eXBlIGZkaXZzLCBmZGl2ZCwgZnNxcnQpOiBUaGVzZQoJZXhlY3V0ZSBpbiB0aGUgZnB1IG11bHRpcGx5IHVuaXQgbm90IHRoZSBhZGRlciBvbiBVbHRyYVNwYXJjLgoJKGRlZmluZV9leHBhbmQgY21wZGkpOiBEaXNhbGxvdyBUQVJHRVRfVjhQTFVTLgoJKGRlZmluZV9pbnNuIGNtcHNpX2luc24pOiBSZW5hbWUgdG8gY21wc2lfaW5zbl9zcDMyLgoJKGRlZmluZV9pbnNuIGNtcHNpX2luc25fc3A2NCk6IE5ldywgc2FtZSBhcyBzcDMyIHZhcmlhbnQgZXhjZXB0IGl0CglhbGxvd3MgdGhlIGFyaXRoX2RvdWJsZV9vcGVyYW5kIHByZWRpY2F0ZSBhbmQgckhJIGNvbnN0cmFpbnQgd2hlbgoJVEFSR0VUX0FSQ0g2NC4KCShkZWZpbmVfaW5zbiBjbXBkaV9zcDY0LCBjbXBzZl9mcGUsIGNtcGRmX2ZwZSwgY21wdGZfZnBlLAoJY21wc2ZfZnAsIGNtcGRmX2ZwLCBjbXB0Zl9mcCwgc2x0dV9pbnNuLCBuZWdfc2x0dV9pbnNuLAoJbmVnX3NsdHVfbWludXhfeCwgbmVnX3NsdHVfcGx1c194LCBzZ2V1X2luc24sIG5lZ19zZ2V1X2luc24sCglzbHR1X3BsdXNfeCwgc2x0dV9wbHVzX3gsIHNsdHVfcGx1c194X3BsdXNfeSwgeF9taW51c19zbHR1LAoJc2dldV9wbHVzX3gsIHhfbWludXNfc2dldSwgbW92cWlfY2Nfc3A2NCwgbW92aGlfY2Nfc3A2NCwKCW1vdnNpX2NjX3NwNjQsIG1vdmRpX2NjX3NwNjQsIG1vdnNmX2NjX3NwNjQsIG1vdmRmX2NjX3NwNjQsCgltb3Z0Zl9jY19zcDY0LCBtb3ZxaV9jY19yZWdfc3A2NCwgbW92aGlfY2NfcmVnX3NwNjQsCgltb3ZzaV9jY19yZWdfc3A2NCwgbW92ZGlfY2NfcmVnX3NwNjQsIG1vdnNmX2NjX3JlZ19zcDY0LAoJbW92ZGZfY2NfcmVnX3NwNjQsIG1vdnRmX2NjX3JlZ19zcDY0LCB6ZXJvX2V4dGVuZGhpc2kyX2luc24sCgljbXBfc2lxaV90cnVuYywgY21wX3NpcWlfdHJ1bmNfc2V0LCBzaWduX2V4dGVuZGhpc2kyX2luc24sCglzaWduX2V4dGVuZHFpaGkyX2luc24sIHNpZ25fZXh0ZW5kcWlzaTJfaW5zbiwKCXNpZ25fZXh0ZW5kcWlkaTJfaW5zbiwgc2lnbl9leHRlbmRoaWRpMl9pbnNuLAoJZXh0ZW5kc2ZkZjIsIGV4dGVuZHNmdGYyLCBleHRlbmRkZnRmMiwgdHJ1bmNkZnNmMiwgdHJ1bmN0ZnNmMiwKCXRydW5jdGZkZjIsIGZsb2F0c2lzZjIsIGZsb2F0c2lkZjIsIGZsb2F0c2l0ZjIsIGZsb2F0ZGlzZjIsCglmbG9hdGRpZGYyLCBmbG9hdGRpdGYyLCBmaXhfdHJ1bmNzZnNpMiwgZml4X3RydW5jZGZzaTIsCglmaXhfdHJ1bmN0ZnNpMiwgZml4X3RydW5jc2ZkaTIsIGZpeF90cnVuY2RmZGkyLCBmaXhfdHJ1bmN0ZmRpMiwKCWFkZGRpM19zcDY0LCBhZGRzaTMsIGNtcF9jY3hfcGx1cywgY21wX2NjX3BsdXNfc2V0LCBzdWJkaV9zcDY0LAoJc3Vic2kzLCBjbXBfbWludXNfY2N4LCBjbXBfbWludXNfY2N4X3NldCwgbXVsc2kzLCBtdWxkaTMsCgltdWxkaTNfdjhwbHVzLCBjbXBfbXVsX3NldCwgbXVsc2lkaTMsIG11bHNpZGkzX3Y4cGx1cywKCWNvbnN0X211bHNpZGkzX3Y4cGx1cywgbXVsc2lkaTNfc3AzMiwgY29uc3RfbXVsc2lkaTMsCglzbXVsc2kzX2hpZ2hwYXJ0X3Y4cGx1cywgdW5uYW1lZCBzdWJyZWcgbXVsdCwKCWNvbnN0X3NtdWxzaTNfaGlnaHBhcnRfdjhwbHVzLCBzbXVsc2kzX2hpZ2hwYXJ0X3NwMzIsCgljb25zdF9zbXVsc2kzX2hpZ2hwYXJ0LCB1bXVsc2lkaTNfdjhwbHVzLCB1bXVsc2lkaTNfc3AzMiwKCWNvbnN0X3VtdWxzaWRpMywgY29uc3RfdW11bHNpZGkzX3Y4cGx1cywgdW11bHNpM19oaWdocGFydF92OHBsdXMsCgljb25zdF91bXVsc2kzX2hpZ2hwYXJ0X3Y4cGx1cywgdW11bHNpM19oaWdocGFydF9zcDMyLAoJY29uc3RfdW11bHNpM19oaWdocGFydCwgZGl2c2kzLCBkaXZkaTMsIGNtcF9zZGl2X2NjX3NldCwgdWRpdnNpMywKCXVkaXZkaTMsIGNtcF91ZGl2X2NjX3NldCwgc21hY3NpLCBzbWFjZGksIHVtYWNkaSwgYW5kZGkzX3NwNjQsCglhbmRzaTMsIGFuZF9ub3RfZGlfc3A2NCwgYW5kX25vdF9zaSwgaW9yZGkzX3NwNjQsIGlvcnNpMywKCW9yX25vdF9kaV9zcDY0LCBvcl9ub3Rfc2ksIHhvcmRpM19zcDY0LCB4b3JzaTMsIHhvcl9ub3RfZGlfc3A2NCwKCXhvcl9ub3Rfc2ksIGNtcF9jY19hcml0aF9vcCwgY21wX2NjeF9hcml0aF9vcCwKCWNtcF9jY19hcml0aF9vcF9zZXQsIGNtcF9jY3hfYXJpdGhfb3Bfc2V0LCBjbXBfY2N4X3hvcl9ub3QsCgljbXBfY2NfeG9yX25vdF9zZXQsIGNtcF9jY3hfeG9yX25vdF9zZXQsIGNtcF9jY19hcml0aF9vcF9ub3QsCgljbXBfY2N4X2FyaXRoX29wX25vdCwgY21wX2NjX2FyaXRoX29wX25vdF9zZXQsCgljbXBfY2N4X2FyaXRoX29wX25vdF9zZXQsIG5lZ2RpMl9zcDY0LCBjbXBfY2NfbmVnLCBjbXBfY2N4X25lZywKCWNtcF9jY19zZXRfbmVnLCBjbXBfY2N4X3NldF9uZWcsIG9uZV9jbXBsZGkyX3NwNjQsIGNtcF9jY19ub3QsCgljbXBfY2N4X25vdCwgY21wX2NjX3NldF9ub3QsIGNtcF9jY3hfc2V0X25vdCwgYWRkdGYzLCBhZGRkZjMsCglhZGRzZjMsIHN1YnRmMywgc3ViZGYzLCBzdWJzZjMsIG11bHRmMywgbXVsZGYzLCBtdWxzZjMsCgltdWxkZjNfZXh0ZW5kLCBtdWx0ZjNfZXh0ZW5kLCBkaXZ0ZjMsIGRpdmRmMywgZGl2c2YzLCBuZWd0ZjIsCgluZWdkZjIsIG5lZ3NmMiwgYWJzdGYyLCBhYnNkZjIsIGFic3NmMiwgc3FydHRmMiwgc3FydGRmMiwgc3FydHNmMiwKCWFzaGxzaTMsIGFzaGxkaTMsIHVubmFtZWQgREkgYXNoaWZ0LCBjbXBfY2NfYXNoaWZ0XzEsCgljbXBfY2Nfc2V0X2FzaGlmdF8xLCBhc2hyc2kzLCBhc2hyZGkzLCB1bm5hbWVkIERJIGFzaGlmdHJ0LAoJYXNocmRpM192OHBsdXMsIGxzaHJzaTMsIGxzaHJkaTMsIHVubmFtZWQgREkgbHNoaWZ0cnQsCglsc2hyZGkzX3Y4cGx1cywgdGFibGVqdW1wX3NwMzIsIHRhYmxlanVtcF9zcDY0LCBjYWxsX2FkZHJlc3Nfc3AzMiwKCWNhbGxfc3ltYm9saWNfc3AzMiwgY2FsbF9hZGRyZXNzX3NwNjQsIGNhbGxfc3ltYm9saWNfc3A2NCwKCWNhbGxfYWRkcmVzc19zdHJ1Y3RfdmFsdWVfc3AzMiwgY2FsbF9zeW1ib2xpY19zdHJ1Y3RfdmFsdWVfc3AzMiwKCWNhbGxfYWRkcmVzc191bnR5cGVkX3N0cnVjdF92YWx1ZV9zcDMyLAoJY2FsbF9zeW1ib2xpY191bnR5cGVkX3N0cnVjdF92YWx1ZV9zcDMyLCBjYWxsX3ZhbHVlX2FkZHJlc3Nfc3AzMiwKCWNhbGxfdmFsdWVfc3ltYm9saWNfc3AzMiwgY2FsbF92YWx1ZV9hZGRyZXNzX3NwNjQsCgljYWxsX3ZhbHVlX3N5bWJvbGljX3NwNjQsIGJyYW5jaF9zcDMyLCBicmFuY2hfc3A2NCwKCWZsdXNoX3JlZ2lzdGVyX3dpbmRvd3MsIGdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZSwKCWdvdG9faGFuZGxlcl9hbmRfcmVzdG9yZV92OSwgZ290b19oYW5kbGVyX2FuZF9yZXN0b3JlX3Y5X3NwNjQsCglmbHVzaCwgYWxsIGxkZC9zdGQgcGVlcGhvbGVzLCByZXR1cm5fcWksIHJldHVybl9oaSwgcmV0dXJuX3NpLAoJcmV0dXJuX2FkZHNpLCByZXR1cm5fZGksIHJldHVybl9hZGRkaSwgcmV0dXJuX3NmLCBhbGwgY2FsbCtqdW1wCglwZWVwaG9sZXMsIHRyYXAsIHVubmFtZWQgdHJhcCBpbnNucyk6IFByZXR0aWZ5IG91dHB1dCBzdHJpbmdzLgoJKGRlZmluZV9pbnNuIGFuZGRpM19zcDMyLCBhbmRfbm90X2RpX3NwMzIsIGlvcmRpM19zcDMyLAoJb3Jfbm90X2RpX3NwMzIsIHhvcmRpM19zcDMyLCB4b3Jfbm90X2RpX3NwMzIsIG9uZV9jbXBsZGkyKToKCUxpa2V3aXNlIGFuZCBmb3JjZSArIGltcGxlbWVudCBzcGxpdHMgZm9yIGludGVnZXIgY2FzZXMuCgkoZGVmaW5lX2luc24gcmV0dXJuX3NmX25vX2ZwdSk6IExpa2V3aXNlIGFuZCBhbGxvdyB0byBtYXRjaCB3aGVuCgluby1mcHUgYmVjYXVzZSBvZiBvdXIgc3VicmVnIFNGbW9kZSBzcGxpdHMuCgkoZGVmaW5lX2luc24gemVyb19leHRlbmRxaWhpMiwgemVyb19leHRlbmRxaXNpMl9pbnNuLAoJemVyb19leHRlbmRxaWRpMl9pbnNuLCB6ZXJvX2V4dGVuZGhpZGkyX2luc24sCgl6ZXJvX2V4dGVuZHNpZGkyX2luc24sIHNpZ25fZXh0ZW5kc2lkaTJfaW5zbik6IExpa2V3aXNlIGFuZCB1c2UKCWlucHV0X29wZXJhbmQgZm9yIHNlY29uZCBvcGVyYW5kLgoJKGNtcF9taW51c19jYywgY21wX21pbnVzX2NjX3NldCk6IExpa2V3aXNlIGFuZCB1c2UKCXJlZ19vcl8wX29wZXJhbmQgZm9yIG9wZXJhbmQgMiBzbyBuZXcgc3BsaXRzIGNhbiB1c2UgaXQuCgkoY21wX3plcm9fZXh0ZW5kcWlzaTIsIGNtcF96ZXJvX2V4dGVuZHFpc2kyX3NldCwgY21wX2NjX3BsdXMsCgljbXBfY2NfeG9yX25vdCk6IExpa2V3aXNlIGFuZCBkb24ndCBmb3JnZXQgdG8gY2hlY2sgVEFSR0VUX0xJVkVfRzAKCXRvby4KCShjbXBfemVyb19leHRyYWN0LCBjbXBfemVyb19leHRyYWN0X3NwNjQpOiBMaWtld2lzZSBhbmQgYWxsb3cKCUNPTlNUX0RPVUJMRXMgZm9yIG9wZXJhbmQgMi4KCShkZWZpbmVfaW5zbiBtb3ZlX2xhYmVsX2RpKTogTGlrZXdpc2UgYW5kIGxhYmVsIGRpc3RhbmNlCglvcHRpbWl6YXRpb24gYmVjYXVzZSBpdCBubyBsb25nZXIgd29ya3Mgd2l0aCBuZXcgZGVmZXJyZWQgY2FzZQoJdmVjdG9yIHNjaGVtZS4gIFRvIGJlIHJldmlzaXRlZC4KCShkZWZpbmVfaW5zbiB4X21pbnVzX3lfbWludXNfc2x0dSwgeF9taW51c19zbHR1X3BsdXNfeSk6IExpa2V3aXNlCglhbmQgYWxsb3cgcmVnX29yXzBfb3BlcmFuZCBhbmQgSiBjb25zdHJhaW50IGZvciBzZWNvbmQgb3BlcmFuZC4KCShkZWZpbmVfaW5zbiBqdW1wKTogU2V0IGJyYW5jaCBwcmVkaWN0IHRha2VuIG9uIFY5LgoJKGRlZmluZV9pbnNuIHRhYmxlanVtcCk6IEVtaXQgTEFCRUxfUkVGICsgUExVUyBtZW1vcnkgYWRkcmVzcyBmb3IKCW5ldyBkZWZlcnJlZCBjYXNlIHZlY3RvciBzY2hlbWUuCgkoZGVmaW5lX2luc24gcGljX3RhYmxlanVtcF8zMiwgcGljX3RhYmxlanVtcF82NCk6IFJlbW92ZS4KCShkZWZpbmVfaW5zbiBuZWdkaTJfc3AzMik6IEZvcmNlICsgaW1wbGVtZW50IHNwbGl0cy4KCShkZWZpbmVfaW5zbiBuZWdzaTIsIG9uZV9jbXBsc2kyKTogUmVuYW1lIHRvIG5lZ3NpMl9ub3RfbGl2ZWcwIGFuZAoJb25lX2NtcGxzaTJfbm90X2xpdmVnMCByZXNwZWN0aXZlbHksIGFuZCBjcmVhdGUJZXhwYW5kZXIgb2Ygb3JpZ2luYWwKCW5hbWVzIHdoaWNoIGVtaXQgc3BlY2lhbCBydGwgZm9yIFRBUkdFVF9MSVZFX0cwLgoJKGRlZmluZV9pbnNuIGNtcGRpX3Y4cGx1cywgc2NjX3NpLCBzY2NfZGkpOiBSZW1vdmUuCgkoZGVmaW5lX2luc24gc2VxLCBzbmUsIHNsdCwgc2dlLCBzbGUsIHNsdHUsIHNnZXUpOiBEb24ndCBkbwoJZ2VuX2NvbXBhcmVfcmVnLCBGQUlMIGluc3RlYWQuCgkoZGVmaW5lX2luc24gc2d0dSwgc2xldSk6IExpa2V3aXNlIGFuZCBjaGVjayBnZW5fcyooKSByZXR1cm4KCXZhbHVlcyB3aGVuIHRyeWluZyB0byByZXZlcnNlIGNvbmRpdGlvbiBjb2RlcywgaWYgdGhleSBGQUlMIHRoZW4KCWRvIGxpa2V3aXNlLgoJKGRlZmluZV9pbnNuIHNuZXNpX3plcm8sIG5lZ19zbmVzaV96ZXJvLCBzbmVzaV96ZXJvX2V4dGVuZCwKCXNuZWRpX3plcm8sIG5lZ19zbmVkaV96ZXJvLCBzbmVkaV96ZXJvX3RydW5jLCBzZXFzaV96ZXJvLAoJbmVnX3NlcXNpX3plcm8sIHNlcXNpX3plcm9fZXh0ZW5kLCBzZXFkaV96ZXJvLCBuZWdfc2VxZGlfemVybywKCXNlcWRpX3plcm9fdHJ1bmMsIHhfcGx1c19pX25lXzAsIHhfbWludXNfaV9uZV8wLCB4X3BsdXNfaV9lcV8wLAoJeF9taW51c19pX2VxXzApOiBBZGQgbmV3IHNwbGl0cyB0byBwZXJmb3JtIHRoZXNlIG11bHRpLWluc24gY2FzZXMsCglzZXQgb3V0cHV0IHN0cmluZyB0byAjIHRvIGluZGljYXRlIHRoZXkgYXJlIG1hbmRhdG9yeSBzcGxpdHMuCgkoZGVmaW5lX2luc24gcGljX2xvX3N1bV9zaSwgcGljX3NldGhpX3NpLCBwaWNfbG9fc3VtX2RpLAoJcGljX3NldGhpX2RpLCBtb3ZlX3BpY19sYWJlbF9zaSk6IFJlbW92ZS4KCShkZWZpbmVfaW5zbiBtb3ZzaV9sb3dfc3VtLCBtb3ZzaV9oaWdoLCBtb3ZzaV9sb19zdW1fcGljLAoJbW92c2lfaGlnaF9waWMsIG1vdnNpX3BpY19sYWJlbF9yZWcpOiBOZXcgcGF0dGVybnMgdG8gdGFrZSB0aGVpcgoJcGxhY2UuCgkoZGVmaW5lX2V4cGFuZCBtb3ZzaV9waWNfbGFiZWxfcmVmLCBkZWZpbmVfaW5zbgoJbW92c2lfaGlnaF9waWNfbGFiZWxfcmVmLCBtb3ZzaV9sb19zdW1fcGljX2xhYmVsX3JlZik6IE5ldwoJZXhwYW5kZXIgYW5kIGluc25zIHRvIGhhbmRsZSBQSUMgbGFiZWwgcmVmZXJlbmNlcyBhbmQgZGVmZXJyZWQKCWNhc2UgdmVjdG9ycy4KCShkZWZpbmVfaW5zbiBnZXRfcGNfdmlhX3JkcGMpOiBDb21tZW50IG91dCBhcyBpdCBpcyBubyBsb25nZXIKCXVzZWQuCgkoZGVmaW5lX2V4cGFuZCBtb3ZxaSwgbW92aGksIG1vdnNpLCBtb3ZkaSwgbW92c2YsIG1vdmRmLCBtb3Z0Zik6CglSZXdyaXRlIHRvIG5vdCB1c2UgZW1pdF9tb3ZlX3NlcXVlbmNlLCBtYWtlIHVzZSBvZiBuZXcgY29uc3RhbnQKCWZvcm1hdGlvbiBjb2RlLCBhbmQgbmV3IHNwbGl0cyBmb3IgYWxsIG11bHRpLWluc24gY2FzZXMuCgkoZGVmaW5lX2luc24gbW92cWlfaW5zbik6IFJlbW92ZSBzZXRoaSBjYXNlLCBpdCBjYW4gbmV2ZXIgaGFwcGVuLgoJVXNlIHJlZ19vcl96ZXJvX29wZXJhbmQgaW5zdGVhZCBvZiBjb25zdDBfcnR4IGV4cGxpY2l0IHRlc3QsCgl1c2UgaW5wdXRfb3BlcmFuZCBpbnN0ZWFkIG9mIG1vdmVfb3BlcmFuZCBmb3Igc291cmNlLCBhbmQgdXNlCglnZW5lcmFsX29wZXJhbmQgbm93IGZvciBkZXN0LgoJKGRlZmluZV9pbnNuIG1vdmhpX2luc24pOiBTaW1pbGFyIGJ1dCBsZWF2ZSBzZXRoaSBjYXNlLgoJKGRlZmluZV9pbnNuIGxvX3N1bV9xaSwgc3RvcmVfcWksIHN0b3JlX2hpKTogUmVtb3ZlLgoJKGRlZmluZV9pbnNuIHNldGhpX2hpIGxvX3N1bV9oaSk6IFJlbmFtZSB0byBtb3ZoaV9oaWdoIGFuZAoJbW92aGlfbG9fc3VtIHJlc3BlY3RpdmVseSwgcHJldHRpZnkgb3V0cHV0IHN0cmluZy4KCShkZWZpbmVfaW5zbiBtb3ZzaV96ZXJvX2xpdmVnMCk6IE5ldyBwYXR0ZXJuIHRvIHB1dCB6ZXJvIGludG8gYQoJcmVnaXN0ZXIgd2hlbiBuZWVkZWQgb24gVEFSR0VUX0xJVkVfRzAuCgkoZGVmaW5lX2luc24gbW92c2lfaW5zbik6IFVzZSBnZW5lcmFsX29wZXJhbmQgYW5kIGlucHV0X29wZXJhbmQKCWZvciBkZXN0IGFuZCBzcmMgcmVzcGVjdGl2ZWx5LiAgU2ltcGxpZnkgYXBwbGljYWJpbGl0eSB0ZXN0LgoJUHJldHRpZnkgb3V0cHV0IHN0cmluZ3MsIGFuZCBhZGQgY2xyIGFsdGVybmF0aXZlIGZvciBKCgljb25zdHJhaW50LgoJKGRlZmluZV9pbnNuIG1vdmRpX3NwMzJfdjksIG1vdmRpX3NwMzIsIGRlZmluZV9zcGxpdHMgZm9yCglkZXByZWNhdGVkIHN0ZCBhbmQgcmVnLXJlZyBESSBtb3Zlcyk6IFJlbW92ZSBhbmQuLi4KCShkZWZpbmVfaW5zbiBtb3ZkaV9pbnNuX3NwMzIsIG1vdmRpX2luc25fc3A2NCk6IFJlcGxhY2Ugd2l0aCBuZXcKCWltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMgZm9yY2VkIHNwbGl0cyBmb3IgYWxsIG5vbi1zaW5nbGUgaW5zbgoJY2FzZXMuCgkoZGVmaW5lX3NwbGl0IERJIG1vdmUgY2FzZXMgb24gIWFyY2g2NCk6IE5ldyBzcGxpdHMgdG8gaGFuZGxlIGFsbAoJc2l0dWF0aW9ucyBvZiA2NC1iaXQgZG91YmxlIHJlZ2lzdGVyIERJbW9kZSBvbiAzMmJpdCwgYW5kCgl1bmFsaWduZWQgcmVnaXN0ZXJzIGFuZCBtZW1vcnkgYWRkcmVzc2VzIGZvciBhbGwgc3VidGFyZ2V0cy4KCShkZWZpbmVfaW5zbiBtb3ZzZl9jb25zdF9pbnNuLCBtb3ZkZl9jb25zdF9pbnNuLCBzdG9yZV9zZik6CglSZW1vdmUuCgkoZGVmaW5lX2luc24gbW92c2ZfaW5zbiwgbW92c2Zfbm9fZl9pbnNuKTogVXNlIGdlbmVyYWxfb3BlcmFuZCBhbmQKCWlucHV0X29wZXJhbmQgZm9yIGRlc3QgYW5kIHNyYyByZXNwZWN0aXZlbHksIHByZXR0aWZ5IG91dHB1dAoJc3RyaW5ncy4KCShkZWZpbmVfaW5zbiBtb3ZkZl9pbnNuLCBtb3ZkZl9ub19lX2luc24sIHN0b3JlX2RmLAoJbW92dGZfY29uc3RfaW5zbiwgbW92dGZfaW5zbiwgbW92dGZfbm9fZV9pbnNuLCBzdG9yZV90Zik6IFJlbW92ZQoJYW5kLi4uCgkoZGVmaW5lX2luc24gbW92ZGZfaW5zbl9zcDMyLCBtb3ZkZl9ub19lX2luc25fc3AzMiwKCW1vdmRmX2luc25fc3A2NCwgbW92ZGZfbm9fZV9pbnNuX3NwNjQsIG1vdnRmX2luc24sCgltb3Z0Zl9ub19lX2luc25fc3AzMiwgbW92dGZfaW5zbl9ocV9zcDY0LCBtb3Z0Zl9pbnNuX3NwNjQsCgltb3Z0Zl9ub19lX2luc25fc3A2NCk6IFJlcGxhY2Ugd2l0aCBuZXcKCWltcGxlbWVudGF0aW9uIHdoaWNoIHVzZXMgZm9yY2VkIHNwbGl0cyBmb3IgYWxsIG5vbi1zaW5nbGUgaW5zbgoJY2FzZXMuCgkoZGVmaW5lX3NwbGl0IERGIG1vdmUgY2FzZXMpOiBOZXcgc3BsaXRzIGluIHNpbWlsYXIgdmVpbiB0byBESQoJbW92ZSBjb3VudGVycGFydHMuCgkoZGVmaW5lX2luc24gc2V0aGlfZGlfbWVkbG93LCBzZXRoaV9kaV9tZWRpdW1fcGljLAoJc2V0aGlfZGlfZW1ibWVkYW55X2RhdGEsIHNldGhpX2RpX2VtYm1lZGFueV90ZXh0LCBzZXRoaV9kaV9zcDY0LAoJbW92ZGlfc3A2NF9pbnNuKTogUmVtb3ZlIG9sZCB2OSBjb2RlIG1vZGVsIGFuZCBjb25zdGFudCBsb2FkaW5nCglzdXBwb3J0IGluc25zIGFuZC4uCgkoZGVmaW5lX2luc24gcGljX2xvX3N1bV9kaSwgcGljX3NldGhpX2RpLAoJc2V0aGlfZGlfbWVkbG93X2VtYm1lZGFueV9waWMsIHNldGhpX2RpX21lZGxvdywgbG9zdW1fZGlfbWVkbG93LAoJc2V0aDQ0LCBzZXRtNDQsIHNldGw0NCwgc2V0aGgsIHNldGxtLCBzZXRobSwgc2V0bG8sCgllbWJtZWRhbnlfc2V0aGksIGVtYm1lZGFueV9sb3N1bSwgZW1ibWVkYW55X2Jyc3VtLAoJZW1ibWVkYW55X3RleHR1aGksIGVtYm1lZGFueV90ZXh0aGksIGVtYm1lZGFueV90ZXh0dWxvLAoJZW1ibWVkYW55X3RleHRsbywgbW92ZGlfbG9fc3VtX3NwNjRfY2ludCwgbW92ZGlfbG9fc3VtX3NwNjRfZGJsLAoJbW92ZGlfaGlnaF9zcDY0X2NpbnQsIG1vdmRpX2hpZ2hfc3A2NF9kYmwpOiBSZXBsYWNlIHdpdGggbmV3CglzY2hlbWUsIHVzaW5nIHVuc3BlY3MsIHNlY29uZGFyeSByZWxvYWRzLCBhbmQgb25lIHRvIG9uZSBzcGFyYwoJaW5zbiB0byBydGwgaW5zbiBtYXBwaW5nIGZvciBiZXR0ZXIgc2NoZWR1bGluZyBhbmQgY29kZSBnZW4uCgkoZGVmaW5lX2V4cGFuZCByZWxvYWRfaW5kaSwgcmVsb2FkX291dGRpKTogUmVsb2FkIGhlbHBlcnMgZm9yCglNRURBTlkgYW5kIEVNQk1FREFOWSBzeW1ib2wgYWRkcmVzcyBsb2FkaW5nIGNhc2VzIHdoaWNoIHJlcXVpcmUgYQoJdGVtcG9yYXJ5IHJlZ2lzdGVyLgoJKGRlZmluZV9leHBhbmQgbW92c2ljYyk6IFJlbW92ZSB2OHBsdXNfcmVnY21wIGNhc2VzLgoJKGRlZmluZV9pbnNuIG1vdmRpX2NjX3NwNjRfdHJ1bmMsIG1vdmRpX2NjX3JlZ19zcDY0X3RydW5jLAoJY21wX3plcm9fZXh0ZW5kcWlkaTIsIGNtcF96ZXJvX2V4dGVuZHFpZGkyX3NldCwgY21wX3FpZGlfdHJ1bmMsCgljbXBfZGlxaV90cnVuY19zZXQpOiBOZXcgcGF0dGVybnMgdXNlZCBieSBzb21lIG9mIHRoZSBuZXcgc2NjCglzcGxpdHMgb24gYXJjaDY0LgoJKGRlZmluZV9pbnNuIHhvcmRpM19zcDY0X2RibCk6IE5ldyBwYXR0ZXJuIHVzZWQgZm9yIGNvbnN0YW50Cglmb3JtYXRpb24gd2hlbiBjcm9zc2luZyBmcm9tIDMyLWJpdCB0YXJnZXRzLgoJKGRlZmluZV9pbnNuIG1vdnNpX2NjX3JlZ192OHBsdXMsIHY4cGx1c19jbGVhcl9oaWdoLCBhbmQgaGVscGVyCglzcGxpdCk6IFJlbW92ZS4KCShkZWZpbmVfaW5zbiBhZGR4LCBzdWJ4KTogTWFrZSB2aXNpYmxlIGFuZCBwcmV0dGlmeS4KCShkZWZpbmVfaW5zbiBhZGRkaTNfaW5zbl9zcDMyKTogTGlrZXdpc2UgYW5kIGZvcmNlIHNwbGl0LgoJKGRlZmluZV9pbnNuIGFkZHhfZXh0ZW5kLCBzdWJ4X2V4dGVuZCwgdW5uYW1lZCk6IE5ldyBwYXR0ZXJucyBmb3IKCTY0Yml0IHNjYyBzcGxpdCB1c2FnZS4KCShkZWZpbmVfaW5zbiB1bm5hbWVkIHBsdXNESSB6ZXJvX2V4dGVuZCwgdW5uYW1lZCBtaW51c0RJCgl6ZXJvX2V4dGVuZCwgc3ViZGkzKTogRm9yY2UgYW5kIGltcGxlbWVudCBzcGxpdHMuCgoJKiBmaW5hbC5jIChmaW5hbF9zY2FuX2luc24pOiBEb24ndCBvdXRwdXQgbGFiZWxzIGlmIHRhcmdldAoJc3BlY2lmaWVzIEFTTV9PVVRQVVRfQUREUl97RElGRn1fVkVDLiAgRG8gdGhlc2UgbWFjcm8gb3BlcmF0aW9ucwoJaW5zdGVhZC4KCgkqIHJlb3JnLmMgKGRicl9zY2hlZHVsZSk6IFdoZW4gdGFraW5nIG9uIEJSX1BSRUQgbm90ZXMgYXQgdGhlIGVuZCwKCWRvbid0IGZvcmdldCB0byB3YWxrIGluc2lkZSBTRVFVRU5DRVNzIHRvbyBhcyB0aGVzZSBhcmUgd2hhdCB0aGUKCWRlbGF5IHNsb3Qgc2NoZWR1bGVyIHdpbGwgY3JlYXRlLgoKTW9uIEF1ZyAxMCAwMToyMTowMSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxwaGEubWQgKGV4dHhsKzEsKzIpOiBOZXcgcGF0dGVybnMgdG8gd29yayBhcm91bmQKCWNvbWJpbmUgbG9zc2FnZS4KClNhdCBBdWcgIDggMTk6MjA6MjIgMTk5OCAgR2FyeSBUaG9tYXMgIChnZHRAbGludXhwcGMub3JnKQoKCSogcnM2MDAwLmMgKHJzNjAwMF9hbGxvY2F0ZV9zdGFja19zcGFjZSk6IEZpeCB0eXBvIHdoaWNoCgljYXVzZWQgYmFkIGFzc2VtYmx5IGNvZGUgdG8gYmUgZ2VuZXJhdGVkLgoKU2F0IEF1ZyAgOCAxODo1MzoyOCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBuZXRic2QuaDogRml4IHR5cG8uCgpNb24gQXVnICAzIDAwOjA2OjQyIDE5OTggIFJvYmVydCBMaXBlICA8cm9iZXJ0bEBkZ2lpLmNvbT4KCgkqIGNvbmZpZy5zdWI6IEZpeCB0eXBvLgoKU3VuIEF1ZyAgMiAyMjozOTowOCAxOTk4ICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLnNlPgoKCSogaW52b2tlLnRleGkgKEVudmlyb25tZW50IFZhcmlhYmxlcyk6IFR5cG86IENoYW5nZSAiYXNjcGVjdHMiCglpbnRvICJhc3BlY3RzIi4KCShSdW5uaW5nIFByb3RvaXplKTogVHlwbzogQ2hhbmdlICJ0aGVyIiBpbnRvICJvdGhlciIuCgpTdW4gQXVnICAyIDAwOjQyOjUwIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGkzODYvbmV0YnNkLmg6IFVuZG8gcHJldmlvdXMgY2hhbmdlIHRvIERXQVJGMl9VTldJTkRfSU5GTy4KCSogbTY4ay9uZXRic2QuaDogTGlrZXdpc2UuCgkqIG5zMzJrL25ldGJzZC5oOiBMaWtld2lzZS4KCSogc3BhcmMvbmV0YnNkLmg6IExpa2V3aXNlLgoKU2F0IEF1ZyAgMSAxNzo1OTozMCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogZ2luY2x1ZGUvdmEtYWxwaGEuaCAodmFfbGlzdCk6IFVzZSBhIHR5cGVkZWYsIG5vdCBhIGRlZmluZS4KCSogZ2luY2x1ZGUvdmEtY2xpcHBlci5oICh2YV9saXN0KTogTGlrZXdpc2UuCgpGcmkgSnVsIDMxIDIwOjIyOjAyIDE5OTggIE1pY2hhZWwgTWVpc3NuZXIgIDxtZWlzc25lckBjeWdudXMuY29tPgoKCSogcnM2MDAwLmMgKHJzNjAwMF9vdmVycmlkZV9vcHRpb25zKTogSWYgYmlnIGVuZGlhbiBhbmQgLU9zLCB1c2UKCWxvYWQvc3RvcmUgbXVsdGlwbGUgaW5zdHJ1Y3Rpb25zIHVubGVzcyB1c2VyIG92ZXJyaWRlcy4KCkZyaSBKdWwgMzEgMTc6MDg6NTkgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbnMzMmsvbmV0YnNkLmg6IEZpeCB0eXBvLgoKRnJpIEp1bCAzMSAxMDoyMzo1NSAxOTk4ICBEb3VnIEV2YW5zICA8ZGV2YW5zQGNhbnVjay5jeWdudXMuY29tPgoKCSogbTMyci9tMzJyLmggKEFTTV9PVVRQVVRfU09VUkNFX0xJTkUpOiBBbHdheXMgb3V0cHV0IGxpbmUgbnVtYmVyCglsYWJlbHMgd2l0aCAuZGVidWdzeW0gaWYgbm8gcGFyYWxsZWwgaW5zbnMuCgpUaHUgSnVsIDMwIDE5OjE1OjUzIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoZnAgY21wKTogUmVwbGljYXRlIHBhdHRlcm5zIGZvciBBTFBIQV9UUF9JTlNOLgoJKGZjbW92KTogUmVtb3ZlIEFMUEhBX1RQX0lOU04gcGF0dGVybnMgLS0gZmNtb3YgZG9lc24ndCB0cmFwLgoKVGh1IEp1bCAzMCAxOTo1MDoxNSAxOTk4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CgoJKiByczYwMDAveC1haXg0MyAoQVJfRk9SX1RBUkdFVF9GTEFHUyk6IERlbGV0ZS4KCShBUl9GT1JfVEFSR0VUKTogRGVmaW5lLgoKVGh1IEp1bCAzMCAxMjoyOToxMiAxOTk4ICBNYXJrIE1pdGNoZWxsICA8bWFya0BtYXJrbWl0Y2hlbGwuY29tPgoKCSogZHluLXN0cmluZy5oOiBOZXcgZmlsZS4KCSogZHluLXN0cmluZy5jOiBMaWtld2lzZS4KCSogTWFrZWZpbGUuaW4gKE9CSlMpOiBBZGQgZHluLXN0cmluZy5vLgoJKGR3YXJmMm91dC5vKTogQWRkIGR5bi1zdHJpbmcuaCBkZXBlbmRlbmN5LgoJKGR5bi1zdHJpbmcubyk6IExpc3QgZGVwZW5kZW5jaWVzLgoJKiBkd2FyZjJvdXQuYzogSW5jbHVkZSBkeW4tc3RyaW5nLmguCgkoQVNNX05BTUVfVE9fU1RSSU5HKTogVXNlIGR5bl9zdHJpbmdfYXBwZW5kLCByYXRoZXIgdGhhbiBzdHJjcHkuCgkoYWRkcl9jb25zdF90b19zdHJpbmcpOiBUYWtlIGEgZHluX3N0cmluZ190LCBub3QgYSBjaGFyKiBhcyBhCglwcm90b3R5cGUuICBVc2UgZHluX3N0cmluZ19hcHBlbmQgcmF0aGVyIHRoYW4gc3RyY2F0LCB0aHJvdWdob3V0LgoJKGFkZHJfdG9fc3RyaW5nKTogVXNlIGR5bl9zdHJpbmdfdC4KClRodSBKdWwgMzAgMTM6MDg6MDcgMTk5OCAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN5Z251cy5jb20+CgoJRnVuY3Rpb24gZW50cnkvZXhpdCBwcm9maWxpbmcgaW5zdHJ1bWVudGF0aW9uOgoJKiBleHByLmggKHByb2ZpbGVfZnVuY3Rpb25fZW50cnlfbGliZnVuYywKCXByb2ZpbGVfZnVuY3Rpb25fZXhpdF9saWJmdW5jKTogRGVjbGFyZSBuZXcgdmFyaWFibGVzLgoJKiBvcHRhYnMuYzogRGVmaW5lIHRoZW0gaGVyZS4KCShpbml0X29wdGFicyk6IEluaXRpYWxpemUgdGhlbS4KCSogdHJlZS5oIChzdHJ1Y3QgdHJlZV9kZWNsKTogTmV3IGZsYWcKCW5vX2luc3RydW1lbnRfZnVuY3Rpb25fZW50cnlfZXhpdC4KCShERUNMX05PX0lOU1RSVU1FTlRfRlVOQ1RJT05fRU5UUllfRVhJVCk6IE5ldyBhY2Nlc3NvciBtYWNyby4KCSogYy1kZWNsLmMgKGR1cGxpY2F0ZV9kZWNscyk6IE1lcmdlIGl0LgoJKiBjLWNvbW1vbi5jIChlbnVtIGF0dHJzKTogTmV3IHZhbHVlIEFfTk9fSU5TVFJVTUVOVF9GVU5DVElPTi4KCShpbml0X2F0dHJpYnV0ZXMpOiBVc2UgaXQgZm9yICJub19pbnN0cnVtZW50X2Z1bmN0aW9uIi4KCShkZWNsX2F0dHJpYnV0ZXMpOiBIYW5kbGUgaXQsIGZvciBmdW5jdGlvbnMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgoJY29tcGlsZWQuICBTZXQgZGVjbCBmbGFnLgoJKiBmbGFncy5oIChmbGFnX2luc3RydW1lbnRfZnVuY3Rpb25fZW50cnlfZXhpdCk6IERlY2xhcmUgbmV3Cgl2YXJpYWJsZS4KCSogdG9wbGV2LmMgKGZsYWdfaW5zdHJ1bWVudF9mdW5jdGlvbl9lbnRyeV9leGl0KTogRGVmaW5lIGl0IGhlcmUuCgkoZl9vcHRpb25zKTogTmV3IG9wdGlvbiAiaW5zdHJ1bWVudC1mdW5jdGlvbnMiLgoJKiBmdW5jdGlvbi5oIChzdHJ1Y3QgZnVuY3Rpb24pOiBOZXcgZmllbGQgaW5zdHJ1bWVudF9lbnRyeV9leGl0LgoJKiBmdW5jdGlvbi5jIChjdXJyZW50X2Z1bmN0aW9uX2luc3RydW1lbnRfZW50cnlfZXhpdCk6IE5ldwoJdmFyaWFibGUuCgkocHVzaF9mdW5jdGlvbl9jb250ZXh0X3RvLCBwb3BfZnVuY3Rpb25fY29udGV4dF9mcm9tKTogU2F2ZSBhbmQKCXJlc3RvcmUuCgkoZXhwYW5kX2Z1bmN0aW9uX3N0YXJ0KTogU2V0IGN1cnJlbnRfIHZhcmlhYmxlLCBtYXliZSBlbWl0IHJldHVybgoJbGFiZWwgYW5kIGVudHJ5IHByb2ZpbGUgY2FsbC4KCShleHBhbmRfZnVuY3Rpb25fZW5kKTogTWF5YmUgZW1pdCBleGl0IHByb2ZpbGUgY2FsbC4KClRodSBKdWwgMzAgMDA6NTg6MzQgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogaTM4Ni5tZCAobW92cWkpOiBXaGVuIG9wdGltaXppbmcgYSBsb2FkIG9mIChjb25zdF9pbnQgMSkgaW50byBhCglOT05fUUlfUkVHX1AsIHByZXRlbmQgdGhlIHJlZ2lzdGVyIGlzIFNJbW9kZS4KCldlZCBKdWwgMjkgMjM6NDk6MjMgMTk5OCAgVG9kZCBWaWVybGluZyAgPHR2QG5ldGJzZC5vcmc+CgoJKiBjb25maWd1cmUuaW46IFVzZSB4bS1uZXRic2QuaCBhcyB0aGUgTmV0QlNEIHhtIGZpbGUgKG5vdCB4bS1zaWdsaXN0KS4KCUFjY2VwdCBhcm0zMiBhcyBhcm0sIG02OGs0ayBhcyBtNjhrLCBtaXBzbGUgYXMgbWlwcy1kZWMsIGFuZCBhbnkKCW1hbnVmYWN0dXJlciBpZCBmb3IgbnMzMmsuCgkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCgkqIGNvbmZpZy9uZXRic2QuaDogV2hlbiB1c2luZyBBU01fV0VBS0VOX0xBQkVMLCBtYWtlIGl0IGdsb2JhbCB0b28uCgkqIGNvbmZpZy90LW5ldGJzZDogRG9uJ3QgY29tcGlsZSBsaWJnY2MxLXRlc3QgYXMgdGhlIGZucyBhcmUgaW4gbGliYy4KCSogY29uZmlnL2kzODYvbmV0YnNkLmg6IFVuZGVmaW5lIERXQVJGMl9VTldJTkRfSU5GTywgbm90IGRlZmluZSBhcyAwLgoJKiBjb25maWcvbTY4ay9uZXRic2QuaDogU2FtZS4KCSogY29uZmlnL25zMzJrL25ldGJzZC5oOiBTYW1lLgoJKiBjb25maWcvc3BhcmMvbmV0YnNkLmg6IFNhbWUuCgpXZWQgSnVsIDI5IDIyOjM5OjIxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIHVucm9sbC5jICh1bnJvbGxfbG9vcCk6IERvIG5vdCBhYm9ydCBmb3IgYW4gVU5ST0xMX01PRFVMTwoJb3IgVU5ST0xMX0NPTVBMRVRFTFkgbG9vcCB0aGF0IHN0YXJ0cyB3aXRoIGEganVtcCB0byBpdHMKCWV4aXQgY29kZS4KCldlZCBKdWwgMjkgMjI6MTg6MTQgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwL3JzNjAwMC5tZCAoYWJzZGkyIGRlZmluZV9zcGxpdCk6IFN3YXAgb3BlcmFuZHMgb2YgTUlOVVMuCgkqIHJzNjAwMC9yczYwMDAuYyAobWFzazY0X29wZXJhbmQpOiBVc2UgSE9TVF9CSVRTX1BFUl9XSURFX0lOVC4KCShwcmludF9vcGVyYW5kLCBjYXNlICdCJyk6IERvbid0IGZhbGwgdGhyb3VnaC4KCShwcmludF9vcGVyYW5kLCBjYXNlICdTJyk6IENvcnJlY3QgbWFzayBiZWdpbi9lbmQgY29tcHV0YXRpb24uCglVc2UgSE9TVF9CSVRTX1BFUl9XSURFX0lOVC4KCSogcnM2MDAwL3JzNjAwMC5oIChDUFBfUFJFREVGSU5FUyk6IERlZmluZSBfTE9OR19MT05HLgoJKENPTkRJVElPTkFMX1JFR0lTVEVSX1VTQUdFKTogR1BSMTMgZml4ZWQgaWYgVEFSR0VUXzY0QklULgoJKiByczYwMDAvYWl4NDEuaCAoQ1BQX1BSRURFRklORVMpOiBTYW1lLgoJKiByczYwMDAvYWl4NDMuaCAoQ1BQX1BSRURFRklORVMpOiBTYW1lLgoKV2VkIEp1bCAyOSAxMTo0NzoxMCAxOTk4ICBOaWNrIENsaWZ0b24gIDxuaWNrY0BjeWdudXMuY29tPgoKCSogY29uZmlnL2FybS90aHVtYi5tZCAoZXh0ZW5kcWlzaTJfaW5zbik6IFJlbW92ZSBlYXJseWNsb2JiZXIKCWNvbnN0cmFpbnQgZnJvbSBzZWNvbmQgYWx0ZXJuYXRpdmUuCgpUdWUgSnVsIDI4IDIzOjI5OjA0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogRml4IC0td2l0aG91dC8tLWRpc2FibGUgY2FzZXMgZm9yIGxvY2FsLXByZWZpeCwKCWd4eC1pbmNsdWRlLWRpciBhbmQgY2hlY2tpbmcuCgpUdWUgSnVsIDI4IDIyOjAxOjIzIDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogY29uZmlndXJlLmluIChlbmFibGVfaGFpZmEpOiBTZXQgYnkgZGVmYXVsdCBmb3Igc3BhcmM2NCB0b28uCgljb25maWd1cmU6IFJlYnVpbHQuCgpUdWUgSnVsIDI4IDIzOjI5OjA0IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGkzODYvY3lnd2luMzIuaCAoVkFMSURfTUFDSElORV9UWVBFX0FUVFJJQlVURSk6IE5ldyBtYWNyby4KCSogaTM4Ni93aW5udC5jIChhc3NvY2lhdGVkX3R5cGUpOiBOZXcgZm4uCgkoaTM4Nl9wZV92YWxpZF90eXBlX2F0dHJpYnV0ZV9wKTogTmV3IGZuLgoJKGkzODZfcGVfY2hlY2tfdnRhYmxlX2ltcG9ydGV4cG9ydCk6IFJlbW92ZS4KCShpMzg2X3BlX2RsbGV4cG9ydF9wKTogVXNlIGFzc29jaWF0ZWRfdHlwZS4KCShpMzg2X3BlX2RsbGltcG9ydF9wKTogTGlrZXdpc2UuCgoJRnJvbSBBbnRvbmlvIE0uIE8uIE5ldG8gPGFubWVuZGVzQGNydXplaXJvbmV0LmNvbS5icj46CgkqIGkzODYuYyAoaTM4Nl92YWxpZF90eXBlX2F0dHJpYnV0ZV9wKTogQWxzbyBhY2NlcHQKCWF0dHJpYnV0ZXMgZm9yIE1FVEhPRF9UWVBFcy4KClR1ZSBKdWwgMjggMjM6MTc6MzkgMTk5OCAgUGV0ZXIgR2Vyd2luc2tpICA8cGV0ZXJAZ2Vyd2luc2tpLmRlPgoKCSogdHJlZS5jIChidWlsZF9yYW5nZV90eXBlKTogQ29weSBUWVBFX1NJWkVfVU5JVC4KClR1ZSBKdWwgMjggMjI6MzE6MTIgMTk5OCAgQ3JhaWcgQnVybGV5ICA8YnVybGV5QGdudS5vcmc+CgoJKiBnY2MuYzogRml4IGNvbW1lbnRhcnkgZGVzY3JpYmluZyAlZywgJXUsICVVLCBhbmQgJU8uCgoJKiBnY2MuYyAoZG9fc3BlY18xKTogRml4IGhhbmRsaW5nIG9mICVnJU8gYW5kICVVJU8gdG8gcHJldmVudAoJdGhlbSBmcm9tIGdlbmVyYXRpbmcgYSBuZXcgYmFzZSBuYW1lIGZvciBlYWNoIG9jY3VycmVuY2Ugb2YKCWEgc3BlY2lmaWMgc3VmZml4LgoKMTk5OC0wNy0yOCAgVmxhZGltaXIgTi4gTWFrYXJvdiAgPHZtYWthcm92QGN5Z251cy5jb20+CgoJKiBjc2UuYyAoY3NlX2luc24pOiBFbmFibGUgc3Vic3RpdHV0aW9uIGluc2lkZSBsaWJjYWxsIG9ubHkgZm9yIFJFRywKCVNVQlJFRywgTUVNLgoJKiBydGxhbmFsLmMgKHJlcGxhY2VfcnR4KTogUHJvaGliaXQgcmVwbGFjZXMgaW4JQ09OU1RfRE9VQkxFLgoKCSogY3BsdXMtZGVtLmMgKHR5cGVfa2luZF90KTogTmV3IHR5cGUuCgkoZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSk6IEFkZCB0eXBlX2tpbmRfdCBwYXJhbWV0ZXIuICBSZWx5CglvbiB0aGlzIHBhcmFtZXRlciwgcmF0aGVyIHRoYW4gZGVtYW5nbGluZyB0aGUgdHlwZSBhZ2Fpbi4KCShkZW1hbmdsZV9pbnRlZ3JhbF92YWx1ZSk6IFBhc3MgdGtfaW50ZWdyYWwuCgkoZGVtYW5nbGVfdGVtcGxhdGVfOiBQYXNzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGRvX3R5cGUuCgkoZG9fdHlwZSk6IFJldHVybiBhIHR5cGVfa2luZF90LiAgUGFzcyB0a19pbnRlZ3JhbCB0bwoJZGVtYW5nbGVfdGVtcGxhdGVfdmFsdWVfcGFybSBmb3IgYXJyYXkgYm91bmRzLgoJKGRlbWFuZ2xlX2Z1bmRfdHlwZSk6IExpa2V3aXNlLgoKTW9uIEp1bCAyNyAwMDo1NDo0MSAxOTk4ICBKYXNvbiBNZXJyaWxsICA8amFzb25AeW9yaWNrLmN5Z251cy5jb20+CgoJKiB0cmVlLmMgKHNpbXBsZV9jc3RfZXF1YWwsIGNhc2UgQ09OU1RSVUNUT1IpOiBPSyBpZiB0aGUgZWx0cyBhcmUKCWlkZW50aWNhbC4KCk1vbiBKdWwgMjcgMjI6MTg6MzYgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcGEuYyAobW92ZV9vcGVyYW5kKTogQWNjZXB0IENPTlNUQU5UX1BfUlRYLgoKTW9uIEp1bCAyNyAxNzoxODo1MiAxOTk4ICBEYXZlIEJyb2xsZXkgIDxicm9sbGV5QGN5Z251cy5jb20+CgoJKiBzdG9yLWxheW91dC5jIChsYXlvdXRfdHlwZSk6IEhhbmRsZSBhcnJheXMgb2YgYml0cywgZm9yIENoaWxsLgoKCSogZXhwci5jIChnZXRfaW5uZXJfcmVmZXJlbmNlKTogSGFuZGxlIHplcm8tYmFzZWQsIHVuc2lnbmVkLCBhcnJheQoJaW5kZXggY29udmVyc2lvbi4KCk1vbiBKdWwgMjcgMTQ6NTE6MzMgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogbW4xMDMwMC5oIChERUJVR0dFUl9BVVRPX09GRlNFVCk6IERlZmluZS4KCShERUJVR0dFUl9BUkdfT0ZGU0VUKTogTGlrZXdpc2UuCgoJKiBtbjEwMzAwLm1kIChtb3ZzZik6IFJlbW92ZSBsYXN0IGNoYW5nZS4gIE5vdCBuZWVkZWQuCgpNb24gSnVsIDI3IDE0OjIyOjM2IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGMtbGV4LmMgKHl5bGV4KTogRml4IGJvdW5kYXJ5IGNvbmRpdGlvbnMgaW4gY2hhcmFjdGVyIGxpdGVyYWwgYW5kCglzdHJpbmcgbGl0ZXJhbCBsb29wcy4KCk1vbiBKdWwgMjcgMTE6NDM6NTQgMTk5OCAgU3RhbiBDb3ggIDxzY294QGN5Z251cy5jb20+CgoJKiBsb25nbG9uZy5oIChjb3VudF9sZWFkaW5nX3plcm9zKTogU3BhcmNsaXRlIHNjYW4gaW5zdHJ1Y3Rpb24gd2FzCgliZWluZyBpbnZva2VkIGluY29ycmVjdGx5LgoKCSogaTM4Ni5jIChpeDg2X3Byb2xvZ3VlKTogQWRkZWQgU1VCVEFSR0VUX1BST0xPR1VFIGludm9jYXRpb24uCgkqIGkzODYvY3lnd2luMzIuaCAoU1RBUlRGSUxFX1NQRUMsIExJQl9TUEVDLCBTVUJUQVJHRVRfUFJPTE9HVUUpOgoJQWRkIC1wZyBzdXBwb3J0LgoJKiBpMzg2L3dpbjMyLmg6IE5ldyBmaWxlLiAgSHlicmlkIG1pbmd3MzIuaC9jeWd3aW4zMi5oIGNvbmZpZ3VyYXRpb24uCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgaVszNDU2N104Ni0qLXdpbjMyLgoJKiBjb25maWcuc3ViOiBMaWtld2lzZS4KCSogY29uZmlndXJlOiBSZWJ1aWx0LgoKU3VuIEp1bCAyNiAwMToxMToxMiAxOTk4ICBILkouIEx1ICAoaGpsQGdudS5vcmcpCgoJKiBpMzg2LmggKENPTlNUX0RPVUJMRV9PS19GT1JfTEVUVEVSX1ApOiBSZXR1cm4gMCB3aGVuIGVsaW1pbmF0aW5nCgl0aGUgZnJhbWUgcG9pbnRlciBhbmQgY29tcGlsaW5nIFBJQyBjb2RlIGFuZCByZWxvYWQgaGFzIG5vdCBjb21wbGV0ZWQuCgoJKiBpMzg2LmMgKG91dHB1dF90b19yZWcpOiBBZGQgY29kZSB0byBlbXVsYXRlIG5vbi1wb3BwaW5nIERJbW9kZQoJY2FzZS4KClN1biBKdWwgMjYgMDE6MDE6MzIgMTk5OCAgSmVmZnJleSBBIExhdyAgKGxhd0BjeWdudXMuY29tKQoKCSogcmVnbW92ZS5jIChyZWdtb3ZlX29wdGltaXplKTogRml4IHR5cG8gaW5pdGlhbGl6aW5nIHJlZ21vdmVfYmJfaGVhZC4KClNhdCBKdWwgMjUgMjM6Mjk6MjMgMTk5OCAgR2VyYWxkIFBmZWlmZXIgIDxwZmVpZmVyQGRiYWkudHV3aWVuLmFjLmF0PgoKCSogTWFrZWZpbGUuaW4gKGluc3RhbGwtaW5mbyk6IE9ubHkgdHJ5IHRvIHVwZGF0ZSB0aGUgaW5mbwoJZGlyZWN0b3J5IGZpbGUgaWYgaXQgZXhpc3RzIGluIHRoZSBmaXJzdCBwbGFjZS4KCkZyaSBKdWwgMjQgMTg6NTg6MzcgMTk5OCAgS2xhdXMgRXNwZW5sYXViICA8a2VzcGVubGFAc3R1ZGVudC5pbmZvcm1hdGlrLnVuaS11bG0uZGU+CgoJKiByczYwMDAuaCAoQVNNX09VVFBVVF9DT05TVFJVQ1RPUiwgQVNNX09VVFBVVF9ERVNUUlVDVE9SKTogRGVsZXRlLgoKRnJpIEp1bCAyNCAxNDoyMDoyNiAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiBtbjEwMzAwLm1kIChtb3ZxaSwgbW92aGksIG1vdnNpLCBtb3ZzZik6IENvcnJlY3RseSBoYW5kbGUKCUNPTlNUX0RPVUJMRSBzb3VyY2UuCgpGcmkgSnVsIDI0IDExOjE3OjA0IDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBjb25maWcvYXJtL3RodW1iLmMgKHRodW1iX3ByaW50X29wZXJhbmQpOiBEZWNvZGUgJV8gaW4gYXNtCglzdHJpbmdzIGFzIHRoZSBpbnNlcnRpb24gb2YgVVNFUl9MQUJFTF9QUkVGSVguCgkqIGNvbmZpZy9hcm0vdGh1bWIuaCAoUFJJTlRfT1BFUkFORF9QVU5DVF9WQUxJRF9QKTogQWNjZXB0IF8gYXMgYQoJdmFsaWQgY29kZS4KCSogY29uZmlnL2FybS90aHVtYi5tZDogVXNlICVfIGFzIGEgcHJlZml4IHRvIGdjYyBsaWJyYXJ5IGZ1bmN0aW9uCgljYWxscy4KClRodSBKdWwgMjMgMTg6NTM6MjAgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZGJ4b3V0LmMgKGRieG91dF9yYW5nZV90eXBlKTogT25seSBjYWxsIGRieG91dF90eXBlX2luZGV4IGZvcgoJYWxyZWFkeSBkZWZpbmVkIHR5cGUuCgpUaHUgSnVsIDIzIDEzOjQ5OjQxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGV4cHIuYyAoY2hlY2tfbWF4X2ludGVnZXJfY29tcHV0YXRpb25fbW9kZSk6IEFsbG93IGNvbnZlcnNpb25zCglvZiBjb25zdGFudCBpbnRlZ2VycyB0byBNQVhfSU5URUdFUl9DT01QVVRBVElPTl9NT0RFLgoJKGV4cGFuZF9leHByKTogTGlrZXdpc2UuCgpUaHUgSnVsIDIzIDExOjEyOjA2IDE5OTggIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgoKCSogZXhwci5jIChleHBhbmRfZXhwcik6IEV4cGFuZCBSRVRVUk5fRVhQUi4KClRodSBKdWwgMjMgMTE6MDA6MjkgMTk5OCAgSmltIFdpbHNvbiAgPHdpbHNvbkBjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKGR3YXJmMm91dF9maW5pc2gpOiBDYWxsIHN0cmlwYXR0cmlidXRlcyBvbiBURVhUX1NFQ1RJT04uCgpXZWQgSnVsIDIyIDE5OjEwOjAwIDE5OTggIENhdGhlcmluZSBNb29yZSAgPGNsbUBjeWdudXMuY29tPgoKCSogZHdhcmYyb3V0LmMgKG91dHB1dF9hcmFuZ2VzKTogQ2FsbCBzdHJpcGF0dHJpYnV0ZXMKCWZvciBURVhUX1NFQ1RJT04gcmVmZXJlbmNlcy4KCShvdXRwdXRfbGluZV9pbmZvKTogTGlrZXdpc2UuCgpXZWQgSnVsIDIyIDE0OjA4OjU0IDE5OTggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHBpZXJkb2wuY29iYWx0bWljcm8uY29tPgoKCSogcHJvZmlsZS5jIChicmFuY2hfcHJvYik6IENhbGwgYWxsb2NhdGVfcmVnX2luZm8gYWZ0ZXIgb3V0cHV0dGluZwoJcHJvZmlsZSBydGwgaW4gaW5zdHJ1bWVudF9hcmNzLgoKV2VkIEp1bCAyMiAxMjo0Nzo0OSAxOTk4ICBKaW0gV2lsc29uICA8d2lsc29uQGN5Z251cy5jb20+CgoJKiBmaXhpbmMuaXJpeCAobWF0aC5oKTogSW5zdGFsbCB3cmFwcGVyIGluc3RlYWQgb2YgY29weWluZy4KCldlZCBKdWwgMjIgMTI6Mzc6MTQgMTk5OCAgQWxleGFuZHJlIFBldGl0LUJpYW5jbyAgPGFwYmlhbmNvQGN5Z251cy5jb20+CgoJKiB0cmVlLmRlZiAoRVhQUl9XSVRIX0ZJTEVfTE9DQVRJT04pOiBEZWZpbmVkIGFzIGFuICdlJyBleHByZXNzaW9uCglzbyBXRkwgYXJlIGV4cGFuZGVkIGNvcnJlY3RseSB3aGVuIGNvbnRhaW5lZCBpbiBhIENPTVBPVU5EX0VYUFIuCgkqIHRyZWUuaCAoRVhQUl9XRkxfRU1JVF9MSU5FX05PVEUpOiBDaGFuZ2UgbWFjcm8gbm90IHRvIHVzZQoJbGFuZ19mbGFnXzAuIEFkZGVkIGRvY3VtZW50YXRpb24gaW4gdGhlIGZsYWcgdGFibGUuCgpUdWUgSnVsIDIxIDIzOjI4OjM1IDE5OTggIEtsYXVzIEthZW1wZiAgPGtrYWVtcGZAcm1pLmRlPgoKCSogY2NjcC5jIChkb19pbmNsdWRlKTogRml4IHZheCBjIHN0eWxlIGluY2x1ZGUgaGFuZGxpbmcuCgpUdWUgSnVsIDIxIDEzOjI4OjE5IDE5OTggIEphc29uIE1lcnJpbGwgIDxqYXNvbkB5b3JpY2suY3lnbnVzLmNvbT4KCgkqIGNwbHVzLWRlbS5jIChkb190eXBlKTogVXNlIGRlbWFuZ2xlX3RlbXBsYXRlX3ZhbHVlX3Bhcm0gZm9yIGFycmF5cy4KClN1biBKdWwgMTIgMDE6Mjc6MDUgMTk5OCAgSmFzb24gTWVycmlsbCAgPGphc29uQHlvcmljay5jeWdudXMuY29tPgoKCSogZm9sZC1jb25zdC5jIChub25fbHZhbHVlKTogRG9uJ3QgZGVhbCB3aXRoIG51bGwgcG9pbnRlcgoJY29uc3RhbnRzIGhlcmUuCgkoZm9sZCwgY2FzZSBDT01QT1VORF9FWFBSKTogV3JhcCBhIGNvbnN0YW50IDAgaW4gYSBOT1BfRVhQUi4KClR1ZSBKdWwgMjEgMTU6NDk6MzEgMTk5OCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgoKCSogcnM2MDAwLmggKFBSRURJQ0FURV9DT0RFUyk6IEFkZCBDT05TVEFOVF9QX1JUWC4KCSogcnM2MDAwLm1kIChtb3ZzaSwgbW92ZGkpOiBBZGQgQ09OU1RBTlRfUF9SVFguCgkqIHJzNjAwMC5jIChzaG9ydF9jaW50X29wZXJhbmQpOiBBZGQgQ09OU1RBTlRfUF9SVFguCgkodV9zaG9ydF9jaW50X29wZXJhbmQpOiBTYW1lLgoJKHJlZ19vcl9jaW50X29wZXJhbmQpOiBTYW1lLgoJKGxvZ2ljYWxfb3BlcmFuZCk6IFNhbWUuCgkoaW5wdXRfb3BlcmFuZCk6IFNhbWUuCgkocmVnX29yX3Nob3J0X29wZXJhbmQpOiBVc2UgdV9zaG9ydF9jaW50X29wZXJhbmQuCgpUdWUgSnVsIDIxIDA4OjU2OjQyIDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5tZCAoZml4X3RydW5jZGZzaTIsIGZpeF90cnVuY3Nmc2kyKTogUmVtb3ZlIHRoZSBkZWZpbmVfZXhwYW5kcywKCWJ1dCBrZWVwIHRoZSBpbnNucyBhbmQgc3BsaXRzLiAgQWRqdXN0IHNvIHdoZW4gdGhlIHVsdGltYXRlIGRlc3RpbmF0aW9uCglpcyBtZW1vcnksIHVzZSBjdnRxbC4KClR1ZSBKdWwgMjEgMDg6NTU6MDkgMTk5OCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAY3lnbnVzLmNvbT4KCgkqIGZsb3cuYyAocmVnbm9fdW5pbml0aWFsaXplZCk6IEZpeGVkIHJlZ3MgYXJlIG5ldmVyIHVuaW5pdGlhbGl6ZWQuCgpUdWUgSnVsIDIxIDAwOjMxOjAxIDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGdjYy5jIChkb19zcGVjKTogQ2FsbCAiZXJyb3IiIG5vdCAid2FybmluZyIuCgoJKiBjb25maWd1cmUuaW46IEZpeCBtaW5vciBwcm9ibGVtcyB3aXRoIGdhcyBmZWF0dXJlIGRldGVjdGlvbiBjb2RlLgoJKiBjb25maWd1cmU6IFJlYnVpbHQuCgoJKiBnY2MuYyAoZG9fc3BlYyk6IElzc3VlIGEgd2FybmluZyBmb3IgJyVbXScgdXNhZ2UuCgoJKiBVbmRvIHRoaXMgY2hhbmdlLgoJKiBnY2MuYzogRGVsZXRlICVbc3BlY10gc3VwcG9ydC4KCShkb19zcGVjXzEsIGNhc2UgJygnKTogTGlrZXdpc2UuCgkoZG9fc3BlY18xLCBjYXNlICdbJyk6IENhbGwgZXJyb3IuCgpNb24gSnVsIDIwIDIyOjM0OjE3IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBhbHBoYS5oIChDUFBfU1BFQyk6IFRpZHkuICBIb29rIHRvIGNwcF9jcHUgYW5kIGNwcF9zdWJ0YXJnZXQuCgkoQ1BQX1NVQlRBUkdFVF9TUEVDKTogRGVmYXVsdCB0byBlbXB0eSBzdHJpbmcuCgkoQ1BQX0FNXyosIENQUF9JTV8qLCBDUFBfQ1BVXyosIENQUF9DUFVfU1BFQyk6IE5ldy4KCShFWFRSQV9TUEVDUywgU1VCVEFSR0VUX0VYVFJBX1NQRUNTKTogTmV3LgoJKiBhbHBoYS9lbGYuaCAoTERfU1BFQyk6IFVzZSAlKGVsZl9keW5hbWljX2xpbmtlcikuCgkqIGFscGhhL2xpbnV4LWVsZi5oIChTVUJUQVJHRVRfRVhUUkFfU1BFQ1MpOiBOZXcuCgkoTElCX1NQRUMpOiBUaWR5LgoJKiBhbHBoYS9saW51eC5oIChDUFBfUFJFREVGSU5FUyk6IFRpZHkuCgkqIGFscGhhL25ldGJzZC1lbGYuaCAoU1VCVEFSR0VUX0VYVFJBX1NQRUNTKTogTmV3LgoJKiBhbHBoYS9uZXRic2QuaCAoQ1BQX1BSRURFRklORVMpOiBUaWR5LgoJKiBhbHBoYS9vc2YuaCAoQ1BQX1BSRURFRklORVMpOiBSZW1vdmUgYml0cyBzdWJzdW1lZCBieSBDUFBfQ1BVX1NQRUMuCgkqIGFscGhhL3dpbi1udC5oIChDUFBfUFJFREVGSU5FUyk6IExpa2V3aXNlLgoJKiBhbHBoYS92c2YuaCAoQ1BQX1BSRURFRklORVMpOiBMaWtld2lzZS4KCShDUFBfU1VCVEFSR0VUX1NQRUMpOiBOZXcuICBEbyB0aGlzIGluc3RlYWQgb2Ygb3ZlcnJpZGluZyBDUFBfU1BFQy4KCSogYWxwaGEvdnh3b3Jrcy5oOiBMaWtld2lzZS4KCk1vbiBKdWwgMjAgMjI6NTE6NTcgMTk5OCAgS2VuIFJhZWJ1cm4gIDxyYWVidXJuQGN5Z251cy5jb20+CgoJKiBtaXBzLm1kIChyZWxvYWRfb3V0c2kpOiBBZGRlZCBtaXNzaW5nIFJFR05PIGNhbGwuCgkoc211bHNpM19oaWdocGFydCwgdW11bHNpM19oaWdocGFydCk6IFByb3ZpZGUgcHJvdG90eXBlIGZvcgoJZnVuY3Rpb24gcG9pbnRlci4KCShtdWxfYWNjX2RpLCBtdWxfYWNjXzY0Yml0X2RpKTogRG9uJ3QgdXNlIG1hdGNoX29wX2R1cCwgdXNlCglhbm90aGVyIG1hdGNoX29wZXJhdG9yIGFuZCBjb21wYXJlIHRoZSBjb2Rlcy4KCgkqIG1pcHMuaCAoTUFTS19ERUJVR19FLCBNQVNLX0RFQlVHX0kpOiBTZXQgdG8gemVyby4KCgkqIE1JUFMgbXVsdGlwbHkgcGF0dGVybiBmaXhlczoKCSogbWlwcy5oIChlbnVtIHJlZ19jbGFzcywgUkVHX0NMQVNTX05BTUVTLCBSRUdfQ0xBU1NfQ09OVEVOVFMpOgoJQWRkIHVuaW9uIGNsYXNzZXMgZm9yIEhJLCBMTywgb3IgSElMTyBwbHVzIGdlbmVyYWwgcmVnaXN0ZXJzLgoJKEdFTkVSQVRFX01BREQpOiBEZWxldGVkLgoJKiBtaXBzLm1kIChtdWxzaTNfbXVsdDMpOiBEb24ndCBkaXNwYXJhZ2Ugb3V0cHV0LUxPIGFsdGVybmF0aXZlLgoJQWRkIFRBUkdFVF9NQUQgdG8gY29uZGl0aW9uLgoJKG11bHNpMyk6IFRlc3QgSEFWRV9tdWxzaTNfbXVsdDMsIG5vdCBzcGVjaWZpYyBmbGFncy4KCShtdWxfYWNjX3NpKTogRXhwYW5kIEdFTkVSQVRFX01BREQgaGVyZTsgaXQncyB0aGUgb25seSB1c2UuICBVc2UKCSIqZCIgZm9yIGFjY3VtdWxhdG9yLCB0byBnaXZlIHByZWZlcmVuY2UgdG8gTE8gaW5pdGlhbGx5IGJ1dCBub3QKCWR1cmluZyByZWxvYWQuCgpNb24gSnVsIDIwIDE2OjE2OjM4IDE5OTggIERhdmUgQnJvbGxleSAgPGJyb2xsZXlAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbiAoZW5hYmxlX2NfbWJjaGFyKTogTmV3IGNvbmZpZ3VyZSBvcHRpb24uCgkoZXh0cmFfY3BwX29ianMpOiBBbHdheXMgYXZhaWxhYmxlIG5vdy4KCgkqIGNleHAueSAobWJjaGFyLmgpOiAjaW5jbHVkZSBpdC4KCSh5eWxleCk6IEhhbmRsZSBNdWx0aWJ5dGUgY2hhcmFjdGVycyBpbiBjaGFyYWN0ZXIgbGl0ZXJhbHMuCgoJKiBjY2NwLmMgKG1iY2hhci5oKTogI2luY2x1ZGUgaXQuCgkobWFpbik6IFNldCBjaGFyYWN0ZXIgc2V0IGJhc2VkIG9uIExBTkcgZW52aXJvbm1lbnQgdmFyaWFibGUuCgkocmVzY2FuKTogSGFuZGxlIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIGNvbW1lbnRzLgoJKHNraXBfaWZfZ3JvdXApOiBTZWUgYWJvdmUuCgkodmFsaWRhdGVfZWxzZSk6IFNlZSBhYm92ZS4KCShza2lwX3RvX2VuZF9vZl9jb21tZW50KTogU2VlIGFib3ZlLgoJKG1hY2FyZzEpOiBTZWUgYWJvdmUuCgkoZGlzY2FyZF9jb21tZW50cyk6IFNlZSBhYm92ZS4KCShyZXNjYW4pOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gc3RyaW5nIGFuZCBjaGFyYWN0ZXIgbGl0ZXJhbHMuCgkoY29sbGVjdF9leHBhbnNpb24pOiBTZWUgYWJvdmUuCgkoc2tpcF9xdW90ZWRfc3RyaW5nKTogU2VlIGFib3ZlLgoJKG1hY3JvZXhwYW5kKTogU2VlIGFib3ZlLgoJKG1hY2FyZzEpOiBTZWUgYWJvdmUuCgkoZGlzY2FyZF9jb21tZW50cyk6IFNlZSBhYm92ZS4KCShjaGFuZ2VfbmV3bGluZXMpOiBTZWUgYWJvdmUuCgoJKiBjLWxleC5jIChtYmNoYXIuaCk6ICNpbmNsdWRlIGl0LgoJKEdFVF9FTlZJUk9OTUVOVCk6IE5ldyBtYWNyby4KCShpbml0X2xleCk6IFNldCBjaGFyYWN0ZXIgc2V0IGJhc2VkIG9uIExBTkcgZW52aXJvbm1lbnQgdmFyaWFibGUuCgkoeXlsZXgpOiBIYW5kbGUgbXVsdGlieXRlIGNoYXJhY3RlcnMgaW4gY2hhcmFjdGVyIGxpdGVyYWxzLgoJKHl5bGV4KTogSGFuZGxlIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIHN0cmluZyBsaXRlcmFscy4KCgkqIE1ha2VmaWxlLmluIChtYmNoYXIubyk6IE5ldyB0YXJnZXQuCgkoY2NjcCQoZXhlZXh0KSk6IEBleHRyYV9jcHBfb2Jqc0AgaXMgYWx3YXlzIGF2YWlsYWJsZS4KCShjcHBtYWluJChleGVleHQpKTogQGV4dHJhX2NwcF9vYmpzQCBpcyBhbHdheXMgYXZhaWxhYmxlLgoKCSogbWJjaGFyLltjaF06IE5ldyBmaWxlcyBmb3IgbXVsdGlieXRlIGNoYXJhY3RlciBoYW5kbGluZy4KCk1vbiBKdWwgMjAgMDE6MTE6MTEgMTk5OCAgRGF2aWQgUy4gTWlsbGVyICA8ZGF2ZW1AcGllcmRvbC5jb2JhbHRtaWNyby5jb20+CgoJKiBqdW1wLmMgKGp1bXBfb3B0aW1pemUpOiBXaGVuIHNpbXBsaWZ5aW5nIG5vb3AgbW92ZXMgYW5kCglQVVNIX1JPVU5ESU5HLCBmaXggdGhpbmtvIHNvIHdlIHVzZSBzYW1lIGNyaXRlcmlvbiBmb3IgaWRlbnRpZnlpbmcKCXRoZSBQVVNIZXMgdG8gcmV3cml0ZSBpbiBzZWNvbmQgbG9vcCBhcyB3ZSBkaWQgaW4gdGhlIGZpcnN0LgoKU3VuIEp1bCAxOSAwODoyMzo1MyAxOTk4ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CgoJKiBjcGx1cy1kZW0uYyAoZGVtYW5nbGVfbmVzdGVkX2FyZ3MpOiBNYWtlIGZ1bmN0aW9uIGRlZmluaXRpb24KCXN0YXRpYyB0byBtYXRjaCB0aGUgcHJvdG90eXBlLgoKRnJpIEp1bCAxNyAxNDo1ODo0NCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogYWxsb2NhLmM6IFJlc3BlY3QgVVNFX0NfQUxMT0NBLgoJKiBnZW5jaGVjay5jICh4bWFsbG9jKTogSWdub3JlIF9fR05VQ19fIGZvciBkZWZpbml0aW9uLgoJKiBnZW5nZW5ydGwuYyAoeG1hbGxvYyk6IExpa2V3aXNlLgoKRnJpIEp1bCAxNyAxNDoxODoxNCAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogbG9vcC5oIChzdHJ1Y3QgaW5kdWN0aW9uKTogQWRkIG5vX2NvbnN0X2FkZHZhbC4KCSogbG9vcC5jICh0aGVfbW92YWJsZXMsIHJlZ19hZGRyZXNzX2Nvc3QpOiBOZXcgdmFyaWFibGVzLgoJKGluaXRfbG9vcCk6IEluaXQgcmVnX2FkZHJlc3NfY29zdC4KCShsb29wX29wdGltaXplKTogQ2FsbCBlbmRfYWxpYXNfYW5hbHlzaXMuCgkoc2Nhbl9sb29wKTogSW5pdCB0aGVfbW92YWJsZXMuCgkocmVjb3JkX2dpdik6IEluaXQgaW5kdWN0aW9uLT5ub19jb25zdF9hZGR2YWwuCgkoYmFzaWNfaW5kdWN0aW9uX3ZhcikgW1BMVVNdOiBVc2UgcnR4X2VxdWFsX3AgaW5zdGVhZCBvZiA9PS4KCVtSRUddOiBSZWFycmFuZ2UgbG9vcCBzZWFyY2ggdGVzdCB0byBjYXRjaCBtb3JlIGNhc2VzLgoJKGdlbmVyYWxfaW5kdWN0aW9uX3Zhcik6IFJldHVybiBzdWNjZXNzIG5vdCBiZW5lZml0OyB0YWtlIGFuIGV4dHJhCglhcmd1bWVudCBmb3IgdGhhdC4gIENoYW5nZSBhbGwgY2FsbGVycy4KCShzaW1wbGlmeV9naXZfZXhwcikgW1BMVVNdOiBBbHdheXMgY29tYmluZSBpbnZhcmlhbnRzLiAgVXNlIHNnZV9wbHVzLgoJW01VTFRdOiBVc2UgcnR4X2VxdWFsX3AgaW5zdGVhZCBvZiA9PS4gIENvbWJpbmUgc2ltcGxlIGludmFyaWFudHMuCglbZGVmYXVsdF06IFNlYXJjaCB0aGVfbW92YWJsZXMgZm9yIGFkZGl0aW9uYWwgY29tYmluYXRpb25zLgoJKHNnZV9wbHVzX2NvbnN0YW50LCBzZ2VfcGx1cyk6IE5ldyBmdW5jdGlvbnMuCgkoZXhwcmVzc19mcm9tXzEpOiBOZXcgZnVuY3Rpb24uCgkoZXhwcmVzc19mcm9tKTogQWx3YXlzIGRlZmluZS4gIFJld3JpdGUgdXNpbmcgZXhwcmVzc19mcm9tXzEuCgkoY29tYmluZV9naXZzX3ApOiBIYW5kbGUgbW9yZSBjYXNlcy4gIElnbm9yZSBhZGRyZXNzIGNvc3QuCgkoY21wX2NvbWJpbmVfZ2l2c19zdGF0cyk6IE5ldyBmdW5jdGlvbi4KCShjb21iaW5lX2dpdnNfdXNlZF9vbmNlLCBjb21iaW5lX2dpdnNfYmVuZWZpdF9mcm9tKTogTmV3IGZ1bmN0aW9ucy4KCShjb21iaW5lX2dpdnMpOiBSZXdyaXRlIHRvIGRvIGJlc3QtZml0IGNvbWJpbmF0aW9uLgoKCSogZm9sZC1jb25zdC5jIChvcGVyYW5kX2VxdWFsX3ApOiBIYW5kbGUgUlRMX0VYUFIuCgkoZm9sZCk6IERvIGEgY29tcGxldGUgKEEqQykrKEIqQykgYXNzb2NpYXRpb24gY2hlY2suCgpGcmkgSnVsIDE3IDExOjIxOjU1IDE5OTggIEppbSBXaWxzb24gIDx3aWxzb25AY3lnbnVzLmNvbT4KCgkqIGZ1bmN0aW9uLmMgKGZpeHVwX3Zhcl9yZWZzX2luc25zKTogSGFuZGxlIENMT0JCRVIgb2YgYSBDT05DQVQuCgpGcmkgSnVsIDE3IDExOjQ4OjU1IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1uMTAzMDAuYyAoTU9ERVNfVElFQUJMRV9QKTogRml4IHR5cG8uCgpGcmkgSnVsIDE3IDAzOjI2OjEyIDE5OTggIFJpaGNhcmQgRWFybnNoYXcgIChyZWFybnNoYUBhcm0uY29tKQoKCSogdHJlZS5jICh2YWxpZF9tYWNoaW5lX2F0dHJpYnV0ZSk6IE9ubHkgY3JlYXRlIGEgbmV3IHR5cGUgdmFyaWFudCBpZgoJdGhlcmUgaXMgYSBkZWNsIHRvIHVzZSBpdC4KClRodSBKdWwgMTYgMTQ6NDg6MDQgMTk5OCAgTmljayBDbGlmdG9uICA8bmlja2NAY3lnbnVzLmNvbT4KCgkqIGdjYy5jIChkb19zcGVjXzEpOiBDb3BlIHdpdGggJWcvJXUvJVUgb3B0aW9ucyB3aGljaCBkbyBub3QgaGF2ZQoJYSBzdWZmaXguCgpGcmkgSnVsIDE3IDAzOjI0OjQwIDE5OTggIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuc2U+CgoJKiBleHRlbmQudGV4aSAoRXhwbGljaXQgUmVnIFZhcnMpOiBUeXBvOiBjaGFuZ2UgIm1heSBkZWxldGVkIiBpbnRvICJtYXkKCWJlIGRlbGV0ZWQiCgpUaHUgSnVsIDE2IDE0OjQ4OjQ3IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIG1uMTAzMDAuYyAoY291bnRfdHN0X2luc25zKTogTmV3IGFyZyBvcmVnX2NvdW50cC4gIENhbGxlcnMgY2hhbmdlZC4KCVNpbXBsaWZ5IHRlc3RzIGZvciBjbGVhcmluZyBhbiBhZGRyZXNzIHJlZ2lzdGVyLgoJKGV4cGFuZF9wcm9sb2d1ZSk6IENvcnJlc3BvbmRpbmcgY2hhbmdlcy4KCgkqIG1uMTAzMDAubWQgKG1vdlhYIHBhdHRlcm5zKTogTWFrZSBzdXJlIHRoZSBkZXN0aW5hdGlvbiBpcyBhbgoJQUREUkVTU19SRUcgd2hlbiBzdWJzdGl0dXRpbmcgInplcm9fYXJlZyIgZm9yIChjb25zdF9pbnQgMCkuCgkobG9naWNhbCBwYXR0ZXJucyk6IFNwbGl0IGludG8gZXhwYW5kZXJzICsgcGF0dGVybnMuCgkoemVybyBhbmQgc2lnbiBleHRlbnNpb24gcGF0dGVybnMpOiBTaW1pbGFybHkuCgkoc2hpZnQgcGF0dGVybnMpOiBTaW1pbGFybHkuCgpUaHUgSnVsIDE2IDAxOjE3OjQ0IDE5OTggIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQGN5Z251cy5jb20+CgoJKiBsb29wLmMgKGVtaXRfaXZfYWRkX211bHQpOiBTY2FuIHRoZSBlbnRpcmUgaW5zbiBsaXN0IGdlbmVyYXRlZAoJZm9yIHRoZSBzZXF1ZW5jZSwgcmVjb3JkaW5nIGJhc2UgdmFsdWVzLgoKV2VkIEp1bCAxNSAxMDo0OTo1NSAxOTk4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEBjeWdudXMuY29tPgoKCSogaTM4Ni5oIChDUFBfQ1BVX1NQRUMpOiBSZW1vdmUgLUFzeXN0ZW0odW5peCkuCgpUdWUgSnVsIDE0IDE0OjE1OjMwIDE5OTggIE5pY2sgQ2xpZnRvbiAgPG5pY2tjQGN5Z251cy5jb20+CgoJKiBnY2MuYzogUmVtb3ZlIEFOU0ktQyBpc20gZnJvbSAtLWhlbHAgY29kZS4KCgkqIHRvcGxldi5jOiBTdXBwb3J0IC0taGVscCB3aXRoIFVTRV9DUFBMSUIuCgpUdWUgSnVsIDE0IDE0OjQ2OjA4IDE5OTggIEplZmZyZXkgQSBMYXcgIChsYXdAY3lnbnVzLmNvbSkKCgkqIGNvbmZpZ3VyZS5pbjogUmV3b3JrIGdhcyBmZWF0dXJlIGNvZGUgdG8gd29yayB3aXRoIHN5bWxpbmsgYmFzZWQKCXNvdXJjZSB0cmVlcy4KCgkqIGV4dGVuZC50ZXhpOiBDbGFyaWZ5IHNvbWUgaXNzdWVzIHJlbGF0ZWQgdG8gbG9jYWwgdmFyaWFibGVzCglhc3NpZ25lZCB0byBleHBsaWNpdCByZWdpc3RlcnMuCgoJKiBtbjEwMzAwLm1kIChtdWxzaSk6IFR1cm4gaW50byBleHBhbmRlciArIHBhdHRlcm4uCgoJKiBtbjEwMzAwLm1kIChtb3ZzaSwgbW92c2YsIG1vdmRpLCBtb3ZkZik6IFJlbW92ZSAieCIgZnJvbSBJIC0+IGEKCWFsdGVybmF0aXZlLgoKVHVlIEp1bCAxNCAwNzo0MTo1OSAxOTk4ICBSaWNoYXJkIEVhcm5zaGF3ICAocmVhcm5zaGFAYXJtLmNvbSkKCgkqIGFybS90Y29mZi5oIChVU0VSX0xBQkVMX1BSRUZJWCk6IE1ha2UgaXQgZW1wdHkgdG8gbWF0Y2ggY29mZi5oLgoKVHVlIEp1bCAxNCAwMzowMjo0NCAxOTk4ICBKZWZmcmV5IEEgTGF3ICAobGF3QGN5Z251cy5jb20pCgoJKiB2ZXJzaW9uLmM6IEJ1bXAgYWdhaW4gdG8gZGlzdGluZ3Vpc2ggbWFpbmxpbmUgdHJlZSBmcm9tIHRoZQoJZWdjcy0xLjEgYnJhbmNoLgoKU2VlIENoYW5nZUxvZy4wIGZvciBlYXJsaWVyIGNoYW5nZXMuCgpMb2NhbCBWYXJpYWJsZXM6CmFkZC1sb2ctdGltZS1mb3JtYXQ6IGN1cnJlbnQtdGltZS1zdHJpbmcKRW5kOgo=