CiRJZCQKTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgoKCQkJICAgIHB2cnVzYjIgZHJpdmVyCgpCYWNrZ3JvdW5kOgoKICBUaGlzIGRyaXZlciBpcyBpbnRlbmRlZCBmb3IgdGhlICJIYXVwcGF1Z2UgV2luVFYgUFZSIFVTQiAyLjAiLCB3aGljaAogIGlzIGEgVVNCIDIuMCBob3N0ZWQgVFYgVHVuZXIuICBUaGlzIGRyaXZlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MuCiAgSXRzIGhpc3Rvcnkgc3RhcnRlZCB3aXRoIHRoZSByZXZlcnNlLWVuZ2luZWVyaW5nIGVmZm9ydCBieSBCavZybgogIERhbmllbHNzb24gPHB2cnVzYjJAZGF4Lm51PiB3aG9zZSB3ZWIgcGFnZSBjYW4gYmUgZm91bmQgaGVyZToKCiAgICBodHRwOi8vcHZydXNiMi5kYXgubnUvCgogIEZyb20gdGhlcmUgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4gYmVnYW4gYW4gZWZmb3J0IHRvCiAgY3JlYXRlIGEgdmlkZW80bGludXggY29tcGF0aWJsZSBkcml2ZXIuICBJIGJlZ2FuIHdpdGggQXVyZWxpZW4ncwogIGxhc3Qga25vd24gc25hcHNob3QgYW5kIGV2b2x2ZWQgdGhlIGRyaXZlciB0byB0aGUgc3RhdGUgaXQgaXMgaW4KICBoZXJlLgoKICBNb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdDoKCiAgICBodHRwOi8vd3d3LmlzZWx5Lm5ldC9wdnJ1c2IyLmh0bWwKCgogIFRoaXMgZHJpdmVyIGhhcyBhIHN0cm9uZyBzZXBhcmF0aW9uIG9mIGxheWVycy4gIFRoZXkgYXJlIHZlcnkKICByb3VnaGx5OgoKICAxYS4gTG93IGxldmVsIHdpcmUtcHJvdG9jb2wgaW1wbGVtZW50YXRpb24gd2l0aCB0aGUgZGV2aWNlLgoKICAxYi4gSTJDIGFkYXB0b3IgaW1wbGVtZW50YXRpb24gYW5kIGNvcnJlc3BvbmRpbmcgSTJDIGNsaWVudCBkcml2ZXJzCiAgICAgIGltcGxlbWVudGVkIGVsc2V3aGVyZSBpbiBWNEwuCgogIDFjLiBIaWdoIGxldmVsIGhhcmR3YXJlIGRyaXZlciBpbXBsZW1lbnRhdGlvbiB3aGljaCBjb29yZGluYXRlcyBhbGwKICAgICAgYWN0aXZpdGllcyB0aGF0IGVuc3VyZSBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgZGV2aWNlLgoKICAyLiAgQSAiY29udGV4dCIgbGF5ZXIgd2hpY2ggbWFuYWdlcyBpbnN0YW5jaW5nIG9mIGRyaXZlciwgc2V0dXAsCiAgICAgIHRlYXItZG93biwgYXJiaXRyYXRpb24sIGFuZCBpbnRlcmFjdGlvbiB3aXRoIGhpZ2ggbGV2ZWwKICAgICAgaW50ZXJmYWNlcyBhcHByb3ByaWF0ZWx5IGFzIGRldmljZXMgYXJlIGhvdHBsdWdnZWQgaW4gdGhlCiAgICAgIHN5c3RlbS4KCiAgMy4gIEhpZ2ggbGV2ZWwgaW50ZXJmYWNlcyB3aGljaCBnbHVlIHRoZSBkcml2ZXIgdG8gdmFyaW91cyBwdWJsaXNoZWQKICAgICAgTGludXggQVBJcyAoVjRMLCBzeXNmcywgbWF5YmUgRFZCIGluIHRoZSBmdXR1cmUpLgoKICBUaGUgbW9zdCBpbXBvcnRhbnQgc2hlYXJpbmcgbGF5ZXIgaXMgYmV0d2VlbiB0aGUgdG9wIDIgbGF5ZXJzLiAgQQogIGxvdCBvZiB3b3JrIHdlbnQgaW50byB0aGUgZHJpdmVyIHRvIGVuc3VyZSB0aGF0IGFueSBraW5kIG9mCiAgY29uY2VpdmFibGUgQVBJIGNhbiBiZSBsYWlkIG9uIHRvcCBvZiB0aGUgY29yZSBkcml2ZXIuICAoWWVzLCB0aGUKICBkcml2ZXIgaW50ZXJuYWxseSBsZXZlcmFnZXMgVjRMIHRvIGRvIGl0cyB3b3JrIGJ1dCB0aGF0IHJlYWxseSBoYXMKICBub3RoaW5nIHRvIGRvIHdpdGggdGhlIEFQSSBwdWJsaXNoZWQgYnkgdGhlIGRyaXZlciB0byB0aGUgb3V0c2lkZQogIHdvcmxkLikgIFRoZSBhcmNoaXRlY3R1cmUgYWxsb3dzIGZvciBkaWZmZXJlbnQgQVBJcyB0bwogIHNpbXVsdGFuZW91c2x5IGFjY2VzcyB0aGUgZHJpdmVyLiAgSSBoYXZlIGEgc3Ryb25nIHNlbnNlIG9mIGZhaXJuZXNzCiAgYWJvdXQgQVBJcyBhbmQgYWxzbyBmZWVsIHRoYXQgaXQgaXMgYSBnb29kIGRlc2lnbiBwcmluY2lwbGUgdG8ga2VlcAogIGltcGxlbWVudGF0aW9uIGFuZCBpbnRlcmZhY2UgaXNvbGF0ZWQgZnJvbSBlYWNoIG90aGVyLiAgVGh1cyB3aGlsZQogIHJpZ2h0IG5vdyB0aGUgVjRMIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlIGlzIHRoZSBtb3N0IGNvbXBsZXRlLCB0aGUKICBzeXNmcyBoaWdoIGxldmVsIGludGVyZmFjZSB3aWxsIHdvcmsgZXF1YWxseSB3ZWxsIGZvciBzaW1pbGFyCiAgZnVuY3Rpb25zLCBhbmQgdGhlcmUncyBubyByZWFzb24gSSBzZWUgcmlnaHQgbm93IHdoeSBpdCBzaG91bGRuJ3QgYmUKICBwb3NzaWJsZSB0byBwcm9kdWNlIGEgRFZCIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlIHRoYXQgY2FuIHNpdCByaWdodAogIGFsb25nc2lkZSBWNEwuCgogIE5PVEU6IENvbXBsZXRlIGRvY3VtZW50YXRpb24gb24gdGhlIHB2cnVzYjIgZHJpdmVyIGlzIGNvbnRhaW5lZCBpbgogIHRoZSBodG1sIGZpbGVzIHdpdGhpbiB0aGUgZG9jIGRpcmVjdG9yeTsgdGhlc2UgYXJlIGV4YWN0bHkgdGhlIHNhbWUKICBhcyB3aGF0IGlzIG9uIHRoZSB3ZWIgc2l0ZSBhdCB0aGUgdGltZS4gIEJyb3dzZSB0aG9zZSBmaWxlcwogIChlc3BlY2lhbGx5IHRoZSBGQVEpIGJlZm9yZSBhc2tpbmcgcXVlc3Rpb25zLgoKCkJ1aWxkaW5nCgogIFRvIGJ1aWxkIHRoZXNlIG1vZHVsZXMgZXNzZW50aWFsbHkgYW1vdW50cyB0byBqdXN0IHJ1bm5pbmcgIk1ha2UiLAogIGJ1dCB5b3UgbmVlZCB0aGUga2VybmVsIHNvdXJjZSB0cmVlIG5lYXJieSBhbmQgeW91IHdpbGwgbGlrZWx5IGFsc28KICB3YW50IHRvIHNldCBhIGZldyBjb250cm9sbGluZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZmlyc3QgaW4gb3JkZXIKICB0byBsaW5rIHRoaW5ncyB1cCB3aXRoIHRoYXQgc291cmNlIHRyZWUuICBQbGVhc2Ugc2VlIHRoZSBNYWtlZmlsZQogIGhlcmUgZm9yIGNvbW1lbnRzIHRoYXQgZXhwbGFpbiBob3cgdG8gZG8gdGhhdC4KCgpTb3VyY2UgZmlsZSBsaXN0IC8gZnVuY3Rpb25hbCBvdmVydmlldzoKCiAgKE5vdGU6IFRoZSB0ZXJtICJtb2R1bGUiIHVzZWQgYmVsb3cgZ2VuZXJhbGx5IHJlZmVycyB0byBsb29zZWx5CiAgZGVmaW5lZCBmdW5jdGlvbmFsIHVuaXRzIHdpdGhpbiB0aGUgcHZydXNiMiBkcml2ZXIgYW5kIGJlYXJzIG5vCiAgcmVsYXRpb24gdG8gdGhlIExpbnV4IGtlcm5lbCdzIGNvbmNlcHQgb2YgYSBsb2FkYWJsZSBtb2R1bGUuKQoKICBwdnJ1c2IyLWF1ZGlvLltjaF0gLSBUaGlzIGlzIGdsdWUgbG9naWMgdGhhdCByZXNpZGVzIGJldHdlZW4gdGhpcwogICAgZHJpdmVyIGFuZCB0aGUgbXNwMzQwMC5rbyBJMkMgY2xpZW50IGRyaXZlciAod2hpY2ggaXMgZm91bmQKICAgIGVsc2V3aGVyZSBpbiBWNEwpLgoKICBwdnJ1c2IyLWNvbnRleHQuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIGNvbnRleHQgZm9yIGFuCiAgICBpbnN0YW5jZSBvZiB0aGUgZHJpdmVyLiAgRXZlcnl0aGluZyBlbHNlIGV2ZW50dWFsbHkgdGllcyBiYWNrIHRvCiAgICBvciBpcyBvdGhlcndpc2UgaW5zdGFuY2VkIHdpdGhpbiB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGltcGxlbWVudGVkCiAgICBoZXJlLiAgSG90cGx1Z2dpbmcgaXMgdWx0aW1hdGVseSBjb29yZGluYXRlZCBoZXJlLiAgQWxsIGhpZ2ggbGV2ZWwKICAgIGludGVyZmFjZXMgdGllIGludG8gdGhlIGRyaXZlciB0aHJvdWdoIHRoaXMgbW9kdWxlLiAgVGhpcyBtb2R1bGUKICAgIGhlbHBzIGFyYml0cmF0ZSBlYWNoIGludGVyZmFjZSdzIGFjY2VzcyB0byB0aGUgYWN0dWFsIGRyaXZlciBjb3JlLAogICAgYW5kIGlzIGRlc2lnbmVkIHRvIGFsbG93IGNvbmN1cnJlbnQgYWNjZXNzIHRocm91Z2ggbXVsdGlwbGUKICAgIGluc3RhbmNlcyBvZiBtdWx0aXBsZSBpbnRlcmZhY2VzICh0aHVzIHlvdSBjYW4gZm9yIGV4YW1wbGUgY2hhbmdlCiAgICB0aGUgdHVuZXIncyBmcmVxdWVuY3kgdGhyb3VnaCBzeXNmcyB3aGlsZSBzaW11bHRhbmVvdXNseSBzdHJlYW1pbmcKICAgIHZpZGVvIHRocm91Z2ggVjRMIG91dCB0byBhbiBpbnN0YW5jZSBvZiBtcGxheWVyKS4KCiAgcHZydXNiMi1kZWJ1Zy5oIC0gVGhpcyBoZWFkZXIgZGVmaW5lcyBhIHByaW50aygpIHdyYXBwZXIgYW5kIGEgbWFzawogICAgb2YgZGVidWdnaW5nIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIHZhcmlvdXMga2luZHMgb2YgZGVidWcKICAgIG1lc3NhZ2VzIHRoYXQgY2FuIGJlIGVuYWJsZWQgd2l0aGluIHRoZSBkcml2ZXIuCgogIHB2cnVzYjItZGVidWdpZmMuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBjcnVkZSBjb21tYW5kIGxpbmUKICAgIG9yaWVudGVkIGRlYnVnIGludGVyZmFjZSBpbnRvIHRoZSBkcml2ZXIuICBBc2lkZSBmcm9tIGJlaW5nIHBhcnQKICAgIG9mIHRoZSBwcm9jZXNzIGZvciBpbXBsZW1lbnRpbmcgbWFudWFsIGZpcm13YXJlIGV4dHJhY3Rpb24gKHNlZQogICAgdGhlIHB2cnVzYjIgd2ViIHNpdGUgbWVudGlvbmVkIGVhcmxpZXIpLCBwcm9iYWJseSBJJ20gdGhlIG9ubHkgb25lCiAgICB3aG8gaGFzIGV2ZXIgdXNlZCB0aGlzLiAgSXQgaXMgbWFpbmx5IGEgZGVidWdnaW5nIGFpZC4KCiAgcHZydXNiMi1lZXByb20uW2NoXSAtIFRoaXMgaXMgZ2x1ZSBsb2dpYyB0aGF0IHJlc2lkZXMgYmV0d2VlbiB0aGlzCiAgICBkcml2ZXIgdGhlIHR2ZWVwcm9tLmtvIG1vZHVsZSwgd2hpY2ggaXMgaXRzZWxmIGltcGxlbWVudGVkCiAgICBlbHNld2hlcmUgaW4gVjRMLgoKICBwdnJ1c2IyLWVuY29kZXIuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYWxsIHByb3RvY29sIG5lZWRlZCB0bwogICAgaW50ZXJhY3Qgd2l0aCB0aGUgQ29uZXhhbnQgbXBlZzIgZW5jb2RlciBjaGlwIHdpdGhpbiB0aGUgcHZydXNiMgogICAgZGV2aWNlLiAgSXQgaXMgYSBjcnVkZSBlY2hvIG9mIGNvcnJlc3BvbmRpbmcgbG9naWMgaW4gaXZ0diwKICAgIGhvd2V2ZXIgdGhlIGRlc2lnbiBnb2FscyAoc3RyaWN0IGlzb2xhdGlvbikgYW5kIHBoeXNpY2FsIGxheWVyCiAgICAocHJveHkgdGhyb3VnaCBVU0IgaW5zdGVhZCBvZiBQQ0kpIGFyZSBlbm91Z2ggZGlmZmVyZW50IHRoYXQgdGhpcwogICAgaW1wbGVtZW50YXRpb24gaGFkIHRvIGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50LgoKICBwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIC0gVGhpcyBoZWFkZXIgZGVmaW5lcyB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZQogICAgaW4gdGhlIGRyaXZlciB1c2VkIHRvIHRyYWNrIEFMTCBpbnRlcm5hbCBzdGF0ZSByZWxhdGVkIHRvIGNvbnRyb2wKICAgIG9mIHRoZSBoYXJkd2FyZS4gIE5vYm9keSBvdXRzaWRlIG9mIHRoZSBjb3JlIGhhcmR3YXJlLWhhbmRsaW5nCiAgICBtb2R1bGVzIHNob3VsZCBoYXZlIGFueSBidXNpbmVzcyB1c2luZyB0aGlzIGhlYWRlci4gIEFsbCBleHRlcm5hbAogICAgYWNjZXNzIHRvIHRoZSBkcml2ZXIgc2hvdWxkIGJlIHRocm91Z2ggb25lIG9mIHRoZSBoaWdoIGxldmVsCiAgICBpbnRlcmZhY2VzIChlLmcuIFY0TCwgc3lzZnMsIGV0YyksIGFuZCBpbiBmYWN0IGV2ZW4gdGhvc2UgaGlnaAogICAgbGV2ZWwgaW50ZXJmYWNlcyBhcmUgcmVzdHJpY3RlZCB0byB0aGUgQVBJIGRlZmluZWQgaW4KICAgIHB2cnVzYjItaGR3LmggYW5kIE5PVCB0aGlzIGhlYWRlci4KCiAgcHZydXNiMi1oZHcuaCAtIFRoaXMgaGVhZGVyIGRlZmluZXMgdGhlIGZ1bGwgaW50ZXJuYWwgQVBJIGZvcgogICAgY29udHJvbGxpbmcgdGhlIGhhcmR3YXJlLiAgSGlnaCBsZXZlbCBpbnRlcmZhY2VzIChlLmcuIFY0TCwgc3lzZnMpCiAgICB3aWxsIHdvcmsgdGhyb3VnaCBoZXJlLgoKICBwdnJ1c2IyLWhkdy5jIC0gVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBhbGwgdGhlIHZhcmlvdXMgYml0cyBvZiBsb2dpYwogICAgdGhhdCBoYW5kbGUgb3ZlcmFsbCBjb250cm9sIG9mIGEgc3BlY2lmaWMgcHZydXNiMiBkZXZpY2UuCiAgICAoUG9saWN5LCBpbnN0YW50aWF0aW9uLCBhbmQgYXJiaXRyYXRpb24gb2YgcHZydXNiMiBkZXZpY2VzIGZhbGwKICAgIHdpdGhpbiB0aGUganVyaXNkaWN0aW9uIG9mIHB2cnVzYi1jb250ZXh0IG5vdCBoZXJlKS4KCiAgcHZydXNiMi1pMmMtY2hpcHMtKi5jIC0gVGhlc2UgbW9kdWxlcyBpbXBsZW1lbnQgdGhlIGdsdWUgbG9naWMgdG8KICAgIHRpZSB0b2dldGhlciBhbmQgY29uZmlndXJlIHZhcmlvdXMgSTJDIG1vZHVsZXMgYXMgdGhleSBhdHRhY2ggdG8KICAgIHRoZSBJMkMgYnVzLiAgVGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiB0aGlzIGZpbGUuICBUaGUgInY0bDIiCiAgICB2ZXJzaW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4tdHJlZSBhbG9uZ3NpZGUgVjRMLCB3aGVyZSB3ZQogICAgaW1wbGVtZW50IGp1c3QgdGhlIGxvZ2ljIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIGEgcHVyZSBWNEwKICAgIGVudmlyb25tZW50LiAgVGhlICJhbGwiIHZlcnNpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIG9mCiAgICBWNEwsIHdoZXJlIHdlIG1pZ2h0IGVuY291bnRlciBvdGhlciBwb3NzaWJseSAiY2hhbGxlbmdpbmciIG1vZHVsZXMKICAgIGZyb20gaXZ0diBvciBvbGRlciBrZXJuZWwgc25hcHNob3RzIChvciBldmVuIHRoZSBzdXBwb3J0IG1vZHVsZXMKICAgIGluIHRoZSBzdGFuZGFsb25lIHNuYXBzaG90KS4KCiAgcHZydXNiMi1pMmMtY21kLXY0bDEuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgZ2VuZXJpYyBWNEwxCiAgICBjb21wYXRpYmxlIGNvbW1hbmRzIHRvIHRoZSBJMkMgbW9kdWxlcy4gIEl0IGlzIGhlcmUgd2hlcmUgc3RhdGUKICAgIGNoYW5nZXMgaW5zaWRlIHRoZSBwdnJ1c2IyIGRyaXZlciBhcmUgdHJhbnNsYXRlZCBpbnRvIFY0TDEKICAgIGNvbW1hbmRzIHRoYXQgYXJlIGluIHR1cm4gc2VuZCB0byB0aGUgdmFyaW91cyBJMkMgbW9kdWxlcy4KCiAgcHZydXNiMi1pMmMtY21kLXY0bDIuW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgZ2VuZXJpYyBWNEwyCiAgICBjb21wYXRpYmxlIGNvbW1hbmRzIHRvIHRoZSBJMkMgbW9kdWxlcy4gIEl0IGlzIGhlcmUgd2hlcmUgc3RhdGUKICAgIGNoYW5nZXMgaW5zaWRlIHRoZSBwdnJ1c2IyIGRyaXZlciBhcmUgdHJhbnNsYXRlZCBpbnRvIFY0TDIKICAgIGNvbW1hbmRzIHRoYXQgYXJlIGluIHR1cm4gc2VuZCB0byB0aGUgdmFyaW91cyBJMkMgbW9kdWxlcy4KCiAgcHZydXNiMi1pMmMtY29yZS5bY2hdIC0gVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gb2YgYQogICAga2VybmVsLWZyaWVuZGx5IEkyQyBhZGFwdG9yIGRyaXZlciwgdGhyb3VnaCB3aGljaCBvdGhlciBleHRlcm5hbAogICAgSTJDIGNsaWVudCBkcml2ZXJzIChlLmcuIG1zcDM0MDAsIHR1bmVyLCBsaXJjKSBtYXkgY29ubmVjdCBhbmQKICAgIG9wZXJhdGUgY29ycmVzcG9uZGluZyBjaGlwcyB3aXRoaW4gdGhlIHB2cnVzYjIgZGV2aWNlLiAgSXQgaXMKICAgIHRocm91Z2ggaGVyZSB0aGF0IG90aGVyIFY0TCBtb2R1bGVzIGNhbiByZWFjaCBpbnRvIHRoaXMgZHJpdmVyIHRvCiAgICBvcGVyYXRlIHNwZWNpZmljIHBpZWNlcyAoYW5kIHRob3NlIG1vZHVsZXMgYXJlIGluIHR1cm4gZHJpdmVuIGJ5CiAgICBnbHVlIGxvZ2ljIHdoaWNoIGlzIGNvb3JkaW5hdGVkIGJ5IHB2cnVzYjItaGR3LCBkb2xlZCBvdXQgYnkKICAgIHB2cnVzYjItY29udGV4dCwgYW5kIHRoZW4gdWx0aW1hdGVseSBtYWRlIGF2YWlsYWJsZSB0byB1c2VycwogICAgdGhyb3VnaCBvbmUgb2YgdGhlIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlcykuCgogIHB2cnVzYjItaW8uW2NoXSAtIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSB2ZXJ5IGxvdyBsZXZlbCByaW5nIG9mCiAgICB0cmFuc2ZlciBidWZmZXJzLCByZXF1aXJlZCBpbiBvcmRlciB0byBzdHJlYW0gZGF0YSBmcm9tIHRoZQogICAgZGV2aWNlLiAgVGhpcyBtb2R1bGUgaXMgKnZlcnkqIGxvdyBsZXZlbC4gIEl0IG9ubHkgb3BlcmF0ZXMgdGhlCiAgICBidWZmZXJzIGFuZCBtYWtlcyBubyBhdHRlbXB0IHRvIGRlZmluZSBhbnkgcG9saWN5IG9yIG1lY2hhbmlzbSBmb3IKICAgIGhvdyBzdWNoIGJ1ZmZlcnMgbWlnaHQgYmUgdXNlZC4KCiAgcHZydXNiMi1pb3JlYWQuW2NoXSAtIFRoaXMgbW9kdWxlIGxheWVycyBvbiB0b3Agb2YgcHZydXNiMi1pby5bY2hdCiAgICB0byBwcm92aWRlIGEgc3RyZWFtaW5nIEFQSSB1c2FibGUgYnkgYSByZWFkKCkgc3lzdGVtIGNhbGwgc3R5bGUgb2YKICAgIEkvTy4gIFJpZ2h0IG5vdyB0aGlzIGlzIHRoZSBvbmx5IGxheWVyIG9uIHRvcCBvZiBwdnJ1c2IyLWlvLltjaF0sCiAgICBob3dldmVyIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBoZXJlIHdhcyBpbnRlbmRlZCB0byBhbGxvdyBmb3IKICAgIG90aGVyIHN0eWxlcyBvZiBJL08gdG8gYmUgaW1wbGVtZW50ZWQgd2l0aCBhZGRpdG9uYWwgbW9kdWxlcywgbGlrZQogICAgbW1hcCgpJ2VkIGJ1ZmZlcnMgb3Igc29tZXRoaW5nIGV2ZW4gbW9yZSBleG90aWMuCgogIHB2cnVzYjItbWFpbi5jIC0gVGhpcyBpcyB0aGUgdG9wIGxldmVsIG9mIHRoZSBkcml2ZXIuICBNb2R1bGUgbGV2ZWwKICAgIGFuZCBVU0IgY29yZSBlbnRyeSBwb2ludHMgYXJlIGhlcmUuICBUaGlzIGlzIG91ciAibWFpbiIuCgogIHB2cnVzYjItc3lzZnMuW2NoXSAtIFRoaXMgaXMgdGhlIGhpZ2ggbGV2ZWwgaW50ZXJmYWNlIHdoaWNoIHRpZXMgdGhlCiAgICBwdnJ1c2IyIGRyaXZlciBpbnRvIHN5c2ZzLiAgVGhyb3VnaCB0aGlzIGludGVyZmFjZSB5b3UgY2FuIGRvCiAgICBldmVyeXRoaW5nIHdpdGggdGhlIGRyaXZlciBleGNlcHQgYWN0dWFsbHkgc3RyZWFtIGRhdGEuCgogIHB2cnVzYjItdHVuZXIuW2NoXSAtIFRoaXMgaXMgZ2x1ZSBsb2dpYyB0aGF0IHJlc2lkZXMgYmV0d2VlbiB0aGlzCiAgICBkcml2ZXIgYW5kIHRoZSB0dW5lci5rbyBJMkMgY2xpZW50IGRyaXZlciAod2hpY2ggaXMgZm91bmQKICAgIGVsc2V3aGVyZSBpbiBWNEwpLgoKICBwdnJ1c2IyLXV0aWwuaCAtIFRoaXMgaGVhZGVyIGRlZmluZXMgc29tZSBjb21tb24gbWFjcm9zIHVzZWQKICAgIHRocm91Z2hvdXQgdGhlIGRyaXZlci4gIFRoZXNlIG1hY3JvcyBhcmUgbm90IHJlYWxseSBzcGVjaWZpYyB0bwogICAgdGhlIGRyaXZlciwgYnV0IHRoZXkgaGFkIHRvIGdvIHNvbWV3aGVyZS4KCiAgcHZydXNiMi12NGwyLltjaF0gLSBUaGlzIGlzIHRoZSBoaWdoIGxldmVsIGludGVyZmFjZSB3aGljaCB0aWVzIHRoZQogICAgcHZydXNiMiBkcml2ZXIgaW50byB2aWRlbzRsaW51eC4gIEl0IGlzIHRocm91Z2ggaGVyZSB0aGF0IFY0TAogICAgYXBwbGljYXRpb25zIGNhbiBvcGVuIGFuZCBvcGVyYXRlIHRoZSBkcml2ZXIgaW4gdGhlIHVzdWFsIFY0TAogICAgd2F5cy4gIE5vdGUgdGhhdCAqKkFMTCoqIFY0TCBmdW5jdGlvbmFsaXR5IGlzIHB1Ymxpc2hlZCBvbmx5CiAgICB0aHJvdWdoIGhlcmUgYW5kIG5vd2hlcmUgZWxzZS4KCiAgcHZydXNiMi12aWRlby0qLltjaF0gLSBUaGlzIGlzIGdsdWUgbG9naWMgdGhhdCByZXNpZGVzIGJldHdlZW4gdGhpcwogICAgZHJpdmVyIGFuZCB0aGUgc2FhNzExeC5rbyBJMkMgY2xpZW50IGRyaXZlciAod2hpY2ggaXMgZm91bmQKICAgIGVsc2V3aGVyZSBpbiBWNEwpLiAgTm90ZSB0aGF0IHNhYTcxMXgua28gdXNlZCB0byBiZSBrbm93biBhcwogICAgc2FhNzExNS5rbyBpbiBpdnR2LiAgVGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiB0aGlzOyBvbmUgaXMKICAgIHNlbGVjdGVkIGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBzYWE3MTFbNXhdLmtvIHRoYXQgaXMgZm91bmQuCgogIHB2cnVzYjIuaCAtIFRoaXMgaGVhZGVyIGNvbnRhaW5zIGNvbXBpbGUgdGltZSB0dW5hYmxlIHBhcmFtZXRlcnMKICAgIChhbmQgYXQgdGhlIG1vbWVudCB0aGUgZHJpdmVyIGhhcyB2ZXJ5IGxpdHRsZSB0aGF0IG5lZWRzIHRvIGJlCiAgICB0dW5lZCkuCgoKICAtTWlrZSBJc2VseQogIGlzZWx5QHBvYm94LmNvbQoK