ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWxvZwoKVmVyc2lvbiA3LjE2LjQgKDEwIEp1bHkgMjAwNykKCkRhbmllbCBTICgxMCBKdWx5IDIwMDcpCi0gS2VlcyBDb29rIG5vdGlmaWVkIHVzIGFib3V0IGEgc2VjdXJpdHkgZmxhdwogIChodHRwOi8vY3VybC5oYXh4LnNlL2RvY3MvYWR2XzIwMDcwNzEwLmh0bWwpIGluIHdoaWNoIGxpYmN1cmwgZmFpbGVkIHRvCiAgcHJvcGVybHkgcmVqZWN0IHNvbWUgb3V0ZGF0ZWQgb3Igbm90IHlldCB2YWxpZCBzZXJ2ZXIgY2VydGlmaWNhdGVzIHdoZW4KICBidWlsdCB3aXRoIEdudVRMUy4gS2VlcyBhbHNvIHByb3ZpZGVkIHRoZSBwYXRjaC4KCkphbWVzIEggKDUgSnVseSAyMDA3KQotIEdhdnJpZSBQaGlsaXBzb24gcHJvdmlkZWQgYSBwYXRjaCB0aGF0IHdpbGwgdXNlIGEgbW9yZSBzcGVjaWZpYyBlcnJvcgogIG1lc3NhZ2UgZm9yIGFuIHNjcDovLyB1cGxvYWQgZmFpbHVyZS4gIElmIGxpYnNzaDIgaGFzIGhpcyBtYXRjaGluZwogIHBhdGNoLCB0aGVuIHRoZSBlcnJvciBtZXNzYWdlIHJldHVybiBieSB0aGUgc2VydmVyIHdpbGwgYmUgdXNlZCBpbnN0ZWFkCiAgb2YgYSBtb3JlIGdlbmVyaWMgZXJyb3IuCgpEYW5pZWwgUyAoMSBKdWx5IDIwMDcpCi0gVGhvbWFzIEouIE1vb3JlIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIEtlcmJlcm9zNSBzdXBwb3J0IGluCiAgbGliY3VybC4gVGhpcyBhbHNvIG1ha2VzIHRoZSBvcHRpb25zIGNoYW5nZSBuYW1lIHRvIC0ta3JiIChmcm9tIC0ta3JiNCkgYW5kCiAgQ1VSTE9QVF9LUkJMRVZFTCAoZnJvbSBDVVJMT1BUX0tSQjRMRVZFTCkgYnV0IHRoZSBvbGQgbmFtZXMgYXJlIHN0aWxsIAoKLSBTb25nIE1hIGhlbHBlZCBtZSB2ZXJpZnkgYW5kIGV4dGVuZCBhIGZpeCBmb3IgZG9pbmcgRlRQIG92ZXIgYSBTT0NLUzQvNQogIHByb3h5LgoKRGFuaWVsIFMgKDI3IEp1bmUgMjAwNykKLSBKYW1lcyBIb3VzbGV5OiBBZGQgdHdvIG5ldyBvcHRpb25zIGZvciB0aGUgU0ZUUC9TQ1AvRklMRSBwcm90b2NvbHM6CiAgQ1VSTE9QVF9ORVdfRklMRV9QRVJNUyBhbmQgQ1VSTE9QVF9ORVdfRElSRUNUT1JZX1BFUk1TLiBUaGVzZSBjb250cm9sIHRoZQogIHByZW1pc3Npb25zIGZvciBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgY3JlYXRlZCBvbiB0aGUgcmVtb3RlCiAgc2VydmVyLiBDVVJMT1BUX05FV19GSUxFX1BFUk1TIGRlZmF1bHRzIHRvIDA2NDQgYW5kCiAgQ1VSTE9QVF9ORVdfRElSRUNUT1JZX1BFUk1TIGRlZmF1bHRzIHRvIDA3NTUKCi0gSSBjb3JyZWN0ZWQgdGhlIDEwLWF0LWEtdGltZS5jIGV4YW1wbGUgYW5kIGFwcGxpZWQgYSBwYXRjaCBmb3IgaXQgYnkgSmFtZXMKICBCdXJzYS4KCkRhbmllbCBTICgyNiBKdW5lIDIwMDcpCi0gUm9iZXJ0IElha29iYXNodmlsaSByZS1hcnJhbmdlZCB0aGUgaW50ZXJuYWwgaGFzaCBjb2RlIHRvIHdvcmsgd2l0aCBhIGN1c3RvbQogIGhhc2ggZnVuY3Rpb24gZm9yIGRpZmZlcmVudCBoYXNoZXMsIGFuZCBhbHNvIGV4cGFuZGVkIHRoZSBkZWZhdWx0IHNpemUgZm9yCiAgdGhlIHNvY2tldCBoYXNoIHRhYmxlIHVzZWQgaW4gbXVsdGkgaGFuZGxlcyB0byBncmVhdGx5IGVuaGFuY2Ugc3BlZWQgd2hlbgogIHZlcnkgbWFueSBjb25uZWN0aW9ucyBhcmUgYWRkZWQgYW5kIHRoZSBzb2NrZXQgQVBJIGlzIHVzZWQuCgotIEphbWVzIEhvdXNsZXkgbWFkZSB0aGUgQ1VSTE9QVF9GVFBMSVNUT05MWSBtb2RlIHdvcmsgZm9yIFNGVFAgZGlyZWN0b3J5CiAgbGlzdGluZ3MgYXMgd2VsbAoKRGFuaWVsIFMgKDI1IEp1bmUgMjAwNykKLSBBZGp1c3RlZCBob3cgbGliY3VybCB0cmVhdHMgSFRUUCAxLjEgcmVzcG9uc2VzIHdpdGhvdXQgY29udGVudC1sZW50aCBvcgogIGNodW5rZWQgZW5jb2RpbmcgKHRoYXQgYWxzbyBsYWNrcyAiQ29ubmVjdGlvbjogY2xvc2UiKS4gSXQgbm93IHNpbXBseQogIGFzc3VtZXMgdGhhdCB0aGUgY29ubmVjdGlvbiBXSUxMIGJlIGNsb3NlZCB0byBzaWduYWwgdGhlIGVuZCwgYXMgdGhhdCBpcyBob3cKICBSRkMyNjE2IHNlY3Rpb24gNC40IHBvaW50ICM1IHNheXMgd2Ugc2hvdWxkIGJlaGF2ZS4KICAKVmVyc2lvbiA3LjE2LjMgKDI1IEp1bmUgMjAwNykKCkRhbmllbCBTICgyMyBKdW5lIDIwMDcpCi0gQXMgcmVwb3J0ZWQgYnkgIlRybyIgaW4gaHR0cDovL2N1cmwuaGF4eC5zZS9tYWlsL2xpYi0yMDA3LTA2LzAxNjEuaHRtbCBhbmQKICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDctMDYvMDIzOC5odG1sLCBsaWJjdXJsIGRpZG4ndCBwcm9wZXJseSBkbwogIG5vLWJvZHkgcmVxdWVzdHMgb24gRlRQIGZpbGVzIG9uIHJlLXVzZWQgY29ubmVjdGlvbnMgcHJvcGVybHksIG9yIGF0IGxlYXN0CiAgaXQgZGlkbid0IHByb3ZpZGUgdGhlIGluZm8gYmFjayBpbiB0aGUgaGVhZGVyIGNhbGxiYWNrIHByb3Blcmx5IGluIHRoZQogIHN1YnNlcXVlbnQgcmVxdWVzdHMuCgpEYW5pZWwgUyAoMjEgSnVuZSAyMDA3KQotIEdlcnJpdCBCcnVjaGjkdXNlciBwb2ludGVkIG91dCBhIHdhcm5pbmcgdGhhdCB0aGUgSW50ZWwoUikgVGhyZWFkIENoZWNrZXIKICB0b29sIHJlcG9ydHMgYW5kIGl0IHdhcyBpbmRlZWQgYSBsZWdpdGltYXRlIG9uZSBhbmQgaXQgaXMgb25lIGZpeGVkLiBJdCB3YXMKICBhIHVzZSBvZiBhIHNoYXJlIHdpdGhvdXQgZG9pbmcgdGhlIHByb3BlciBsb2NraW5nIGZpcnN0LgogIApEYW5pZWwgUyAoMjAgSnVuZSAyMDA3KQotIEFkYW0gUGlnZ290dCBmaWxlZCBidWcgcmVwb3J0ICMxNzQwMjYzCiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE3NDAyNjMpLiBBZGFtIGRpc2NvdmVyZWQgdGhhdCB3aGVuCiAgZ2V0dGluZyBhIGxhcmdlIGFtb3VudCBvZiBVUkxzIHdpdGggY3VybCwgdGhleSB3ZXJlIGZldGNoZWQgc2xvd2VyIGFuZAogIHNsb3dlci4uLiB3aGljaCB0dXJuZWQgb3V0IHRvIGJlIGJlY2F1c2UgdGhlIC0tbGliY3VybCBkYXRhIGNvbGxlY3Rpbmcgd2hpY2gKICB3cm9uZ2x5IGFsd2F5cyB3YXMgZW5hYmxlZCwgYnV0IG5vIGxvbmdlciBpcy4uLgoKRGFuaWVsIFMgKDE4IEp1bmUgMjAwNykKLSBSb2Jzb24gQnJhZ2EgQXJhdWpvIGZpbGVkIGJ1ZyByZXBvcnQgIzE3MzkxMDAKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTczOTEwMCkgdGhhdCBtZW50aW9uZWQgdGhhdCBsaWJjdXJsCiAgY291bGQgbm90IGFjdHVhbGx5IGxpc3QgdGhlIGNvbnRlbnRzIG9mIHRoZSByb290IGRpcmVjdG9yeSBvZiBhIGdpdmVuIEZUUAogIHNlcnZlciBpZiB0aGUgbG9naW4gZGlyZWN0b3J5IGlzbid0IHJvb3QuIEkgZml4ZWQgdGhlIHByb2JsZW0gYW5kIGFkZGVkCiAgdGhyZWUgdGVzdCBjYXNlcyAob25lIGlzIGRpc2FibGVkIGZvciBub3cgc2luY2UgSSBpZGVudGlmaWVkIEtOT1dOX0JVR1MgIzQ0LAogIHdlIGNhbm5vdCB1c2UgLS1mdHAtbWV0aG9kIG5vY3dkIGFuZCBsaXN0IGZ0cCBkaXJlY3RvcmllcykuCgpEYW5pZWwgUyAoMTQgSnVuZSAyMDA3KQotIFNobXVsaWsgUmVnZXY6CgogIEkndmUgZW5jb3VudGVyZWQgKGFuZCBob3BlZnVsbHkgZml4ZWQpIGEgcHJvYmxlbSBpbnZvbHZpbmcgcHJveHkgQ09OTkVDVAogIHJlcXVlc3RzIGFuZCBlYXN5IGhhbmRsZXMgc3RhdGUgbWFuYWdlbWVudC4gVGhlIHByb2JsZW0gaXNuJ3Qgc2ltcGxlIHRvCiAgcmVwcm9kdWNlIHNpbmNlIGl0IGRlcGVuZHMgb24gc29ja2V0IHN0YXRlLiBJdCBvbmx5IG1hbmlmZXN0cyBpdHNlbGYgd2hlbgogIHdvcmtpbmcgd2l0aCBub24tYmxvY2tpbmcgc29ja2V0cy4KCiAgSGVyZSBpcyB0aGUgc2NlbmFyaW86CgogIDEuIGluIG11bHRpX3J1bnNpbmdsZSB0aGUgZWFzeSBoYW5kbGUgaXMgaW4gdGhlIENVUkxNX1NUQVRFX1dBSVRDT05ORUNUIGFuZAogIGNhbGxzIEN1cmxfcHJvdG9jb2xfY29ubmVjdAoKICAyLiBpbiBDdXJsX3Byb3h5Q09OTkVDVCwgbGluZSAxMjQ3LCBpZiB0aGUgc29ja2V0IGlzbid0IHJlYWR5IHRoZSBmdW5jdGlvbgogIHJldHVybnMgYW5kIGNvbm4tPmJpdHMudHVubmVsX2Nvbm5lY3RpbmcgaXMgVFJVRQoKICAzLiB3aGVuIHRoZSBjYWxsIHRvIEN1cmxfcHJvdG9jb2xfY29ubmVjdCByZXR1cm5zIHRoZSBwcm90b2NvbF9jb25uZWN0IGZsYWcKICBpcyBmYWxzZSBhbmQgdGhlIGVhc3kgc3RhdGUgaXMgY2hhbmdlZCB0byBDVVJMTV9TVEFURV9QUk9UT0NPTk5FQ1Qgd2hpY2gKICBpc24ndCBjb3JyZWN0IGlmIGEgcHJveHkgaXMgdXNlZC4gIFJhdGhlciBDVVJMTV9TVEFURV9XQUlUUFJPWFlDT05ORUNUCiAgc2hvdWxkIGJlIHVzZWQuCgogIEkgZGlzY292ZXJlZCB0aGlzIHdoaWxlIHBlcmZvcm1pbmcgYW4gSFRUUFMgcmVxdWVzdCB0aHJvdWdoIGEgcHJveHkgKHNxdWlkKQogIG9uIG15IGxvY2FsIG5ldHdvcmsuIFRoZSBwcm9ibGVtIGNhdXNlZCBvcGVuc3NsIHRvIGZhaWwgYXMgaXQgcmVhZCB0aGUgcHJveHkKICByZXNwb25zZSB0byB0aGUgQ09OTkVDVCBjYWxsICgnSFRUUC8xLjAgRXN0YWJsaXNoZWQnKSByYXRoZXIgdGhhbiB0aGUgU1NMCiAgaGFuZHNoYWtlICh0aGUgZXhhY3Qgb3BlbnNzbCBlcnJvciB3YXMgJ3dyb25nIHNzbCB2ZXJzaW9uJyBidXQgdGhpcyBpc24ndAogIHZlcnkgaW1wb3J0YW50KQoKLSBEYXZlIFZhc2lsZXZza3kgZmlsZWQgYnVnIHJlcG9ydCAjMTczNjg3NQogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNzM2ODc1KSBhbG1vc3Qgc2ltdWx0YW5vdWVzbHkgYXMgRGFuCiAgRmFuZHJpY2ggbWVudGlvbmVkIGEgcmVsYXRlZCBidWlsZCBwcm9ibGVtIG9uIHRoZSBsaWJjdXJsIG1haWxpbmcgbGlzdDoKICBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDctMDYvMDEzMS5odG1sLiBCb3RoIHByb2JsZW1zIGhhZCB0aGUgc2FtZQogIHJlYXNvbjogdGhlIGRlZmluaXRpb25zIG9mIHRoZSBQT0xMKiBkZWZpbmVzIGFuZCB0aGUgcG9sbGZkIHN0cnVjdCBpbiB0aGUKICBsaWJjdXJsIGNvZGUgd2FzIGRlcGVuZGluZyBvbiBIQVZFX1BPTEwgaW5zdGVhZCBvZiBIQVZFX1NZU19QT0xMX0guCgpEYW5pZWwgUyAoMTMgSnVuZSAyMDA3KQotIFRvbSBSZWduZXIgcHJvdmlkZWQgYSBwYXRjaCBhbmQgd29ya2VkIHRvZ2V0aGVyIHdpdGggSmFtZXMgSG91c2xleSwgc28gbm93CiAgQ1VSTE9QVF9GVFBfQ1JFQVRFX01JU1NJTkdfRElSUyB3b3JrcyBmb3IgU0ZUUCBjb25uZWN0aW9ucyBhcyB3ZWxsIGFzIEZUUAogIG9uZXMuCgotIFJpY2ggUmF1ZW56YWhuIGZpbGVkIGJ1ZyByZXBvcnQgIzE3MzMxMTkKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTczMzExOSkgYW5kIHdlIGNvbGxhYm9yYXRlZCBvbiB0aGUKICBmaXguICBUaGUgcHJvYmxlbSBpcyB0aGF0IGZvciA2NGJpdCBIUFVYIGJ1aWxkcywgc2V2ZXJhbCBzb2NrZXQtcmVsYXRlZAogIGZ1bmN0aW9ucyB3b3VsZCBzdGlsbCBhc3N1bWUgaW50ICgzMiBiaXQpIGFyZ3VtZW50cyBhbmQgbm90IHNvY2tsZW5fdCAoNjQKICBiaXQpIG9uZXMuCgpEYW5pZWwgUyAoMTIgSnVuZSAyMDA3KQotIEphbWVzIEhvdXNsZXkgYnJvdWdodCBoaXMgcmV2YW1wZWQgU1NIIGNvZGUgdGhhdCBpcyBzdGF0ZS1tYWNoaW5lIGRyaXZlbiB0bwogIHJlYWxseSB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbm93IHRvdGFsbHkgbm9uLWJsb2NraW5nIGxpYnNzaDIgKGluIENWUykuCgpEYW4gRiAoOCBKdW5lIDIwMDcpCi0gSW5jb3Jwb3JhdGVkIERhbmllbCBCbGFjaydzIHRlc3Q3MDYgYW5kIHRlc3Q3MDcgU09DS1MgdGVzdCBjYXNlcy4KCi0gRml4ZWQgYSBmZXcgcHJvYmxlbXMgd2hlbiBzdGFydGluZyB0aGUgU09DS1Mgc2VydmVyLgoKLSBSZXZlcnRlZCBzb21lIHJlY2VudCBjaGFuZ2VzIHRvIHJ1bnRlc3RzLnBsIHRoYXQgd2VyZW4ndCBjb21wYXRpYmxlIHdpdGgKICBwZXJsIDUuMC4KCi0gRml4ZWQgdGhlIHRlc3QgaGFybmVzcyBzbyB0aGF0IGl0IGFjdHVhbGx5IGtpbGxzIHRoZSBzc2ggYmVpbmcgdXNlZCBhcwogIHRoZSBTT0NLUyBzZXJ2ZXIuCgpEYW5pZWwgUyAoNiBKdW5lIDIwMDcpCi0gLXMvLS1zaWxlbnQgY2FuIG5vdyBiZSB1c2VkIHRvIHRvZ2dsZSBvZmYgdGhlIHNpbGVuY2UgYWdhaW4gaWYgdXNlZCBhIHNlY29uZAogIHRpbWUuCgpEYW5pZWwgUyAoNSBKdW5lIDIwMDcpCi0gQWRkZWQgRGFuaWVsIEJsYWNrJ3Mgd29yayB0aGF0IGFkZHMgdGhlIGZpcnN0IGZldyBTT0NLUyB0ZXN0IGNhc2VzLiBJIGFsc28KICBmaXhlZCB0d28gbWlub3IgU09DS1MgcHJvYmxlbXMgdG8gbWFrZSB0aGUgdGVzdCBjYXNlcyBydW4gZmluZS4KCkRhbmllbCBTICgzMSBNYXkgMjAwNykKLSBGZW5nIFR1IG1hZGUgKGxpYiljdXJsIHN1cHBvcnQgInVwbG9hZCIgcmVzdW1pbmcgd29yayBmb3IgZmlsZTovLyBVUkxzLgoKRGFuaWVsIFMgKDMwIE1heSAyMDA3KQotIEkgbW9kaWZpZWQgdGhlIDEwLWF0LWEtdGltZS5jIGV4YW1wbGUgdG8gdHJhbnNmZXIgNTAwIGRvd25sb2FkcyBpbiBwYXJhbGxlbAogIHdpdGggYSBjLWFyZXMgZW5hYmxlZCBidWlsZCBvbmx5IHRvIGZpbmQgdGhhdCBpdCBjcmFzaGVkIG1pc2VyYWJseSwgYW5kIHRoaXMKICB3YXMgZHVlIHRvIHNvbWUgc2VsZWN0KClpc21zIGxlZnQgaW4gdGhlIGNvZGUuIFRoaXMgd2FzIGR1ZSB0byBBUEkKICByZXN0cmljdGlvbnMgaW4gYy1hcmVzIDEuMy54LCBidXQgd2l0aCB0aGUgdXBjb21pbmcgYy1hcmVzIDEuNC4wIHRoaXMgaXMgbm8KICBsb25nZXIgdGhlIGNhc2Ugc28gbm93IGxpYmN1cmwgcnVucyBtdWNoIGJldHRlciB3aXRoIGMtYXJlcyBhbmQgdGhlIG11bHRpCiAgaW50ZXJmYWNlIHdpdGggPiAxMDI0IGZpbGUgZGVzY3JpcHRvcnMgaW4gdXNlLgoKICBFeHRyYSBub3RlOiBzdGFydGluZyBub3cgd2UgcmVxdWlyZSBjLWFyZXMgMS40LjAgZm9yIGFzeW5jaHJvbm91cyBuYW1lCiAgcmVzb2x2ZXMuCgotIEFkZGVkIENVUkxNT1BUX01BWENPTk5FQ1RTIHdoaWNoIGlzIGEgY3VybF9tdWx0aV9zZXRvcHQoKSBvcHRpb24gZm9yIHNldHRpbmcKICB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBjb25uZWN0aW9uIGNhY2hlIG1heGltdW0gc2l6ZSBvZiB0aGUgbXVsdGkgaGFuZGxlLgoKRGFuaWVsIFMgKDI3IE1heSAyMDA3KQotIFdoZW4gd29ya2luZyB3aXRoIGEgcHJvYmxlbSBTdGVmYW4gQmVja2VyIGhhZCwgSSBmb3VuZCBhbiBvZmYtYnktb25lIGJ1ZmZlcgogIG92ZXJ3cml0ZSBpbiBDdXJsX3NlbGVjdCgpLiBXaGlsZSBmaXhpbmcgaXQsIEkgYWxzbyBpbXByb3ZlZCBpdHMgcGVyZm9ybWFuY2UKICBzb21ld2hhdCBieSBjaGFuZ2luZyBjYWxsb2MgdG8gbWFsbG9jIGFuZCBicmVha2luZyBvdXQgb2YgYSBsb29wIGVhcmxpZXIKICAod2hlbiBwb3NzaWJsZSkuCgpEYW5pZWwgUyAoMjUgTWF5IDIwMDcpCi0gUm9iIENyaXR0ZW5kZW4gZml4ZWQgYnVnICMxNzA1ODAyCiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE3MDU4MDIpLCB3aGljaCB3YXMgZmlsZWQgYnkgRGFuaWVsCiAgQmxhY2sgaWRlbnRpZnlpbmcgc2V2ZXJhbCBGVFAtU1NMIHRlc3QgY2FzZXMgZmFpbCB3aGVuIHdlIGJ1aWxkIGxpYmN1cmwgd2l0aAogIE5TUyBmb3IgVExTL1NTTC4gTGlzdGVkIGFzICM0MiBpbiBLTk9XTl9CVUdTLgoKRGFuaWVsIFMgKDI0IE1heSAyMDA3KQotIFNvbmcgTWEgZmlsZWQgYnVnIHJlcG9ydCAjMTcyNDAxNgogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNzI0MDE2KSBub3RpY2luZyB0aGF0IGRvd25sb2FkaW5nCiAgZ2xvYi1yYW5nZXMgZm9yIFRGVFAgd2FzIGJyb2tlbiBpbiBDVlMuIEZpeGVkIG5vdy4KICAKLSAnbXl0eCcgaW4gYnVnIHJlcG9ydCAjMTcyMzE5NCAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTcyMzE5NCkKICBwb2ludGVkIG91dCB0aGF0IHRoZSB3YXJuZigpIGZ1bmN0aW9uIGluIHRoZSBjdXJsIHRvb2wgZGlkbid0IHByb3Blcmx5IGRlYWwKICB3aXRoIHRoZSBjYXNlcyB3aGVuIGV4Y2Vzc2l2ZWx5IGxvbmcgd29yZHMgd2VyZSB1c2VkIGluIHRoZSBzdHJpbmcgdG8gY2hvcAogIHVwLgoKRGFuaWVsIFMgKDIyIE1heSAyMDA3KQotIEFuZHJlIEd1aWJlcnQgZGUgQnJ1ZXQgZml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgZnVuY3Rpb24gdGhhdCB2ZXJpZmllcyB0aGUKICBwZWVyJ3MgbmFtZSBpbiB0aGUgU1NMIGNlcnRpZmljYXRlIHdoZW4gYnVpbHQgZm9yIE9wZW5TU0wuIFRoZSBsZWFrIGhhcHBlbnMKICBmb3IgbGliY3VybHMgd2l0aCBDVVJMX0RPRVNfQ09OVkVSU0lPTlMgZW5hYmxlZCB0aGF0IGZhaWwgdG8gY29udmVydCB0aGUgQ04KICBuYW1lIGZyb20gVVRGOC4gSGUgYWxzbyBmaXhlZCBhIGxlYWsgd2hlbiBQS0NTICMxMiBwYXJzaW5nIGZhaWxlZC4KCkRhbmllbCBTICgxOCBNYXkgMjAwNykKLSBGZW5nIFR1IHJlcG9ydGVkIHRoYXQgY3VybCAtdyBkaWQgd3Jvbmcgb24gVEZUUCB0cmFuc2ZlcnMgaW4gYnVnIHJlcG9ydAogICMxNzE1Mzk0IChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNzE1Mzk0KSwgYW5kIHRoZQogIHRyYW5zZmVyLXJlbGF0ZWQgaW5mbyAidmFyaWFibGVzIiB3ZXJlIGluZGVlZCBvdmVyd3JpdHRlbiB3aXRoIHplcm9lcwogIHdyb25nbHkgYW5kIGhhdmUgbm93IGJlZW4gYWRqdXN0ZWQuIFRoZSB1cGxvYWQgc2l6ZSBzdGlsbCBpc24ndCBhY2N1cmF0ZS4KCkRhbmllbCBTICgxNyBNYXkgMjAwNykKLSBGZW5nIFR1IHBvaW50ZWQgb3V0IGEgZGl2aXNpb24gYnkgemVybyBlcnJvciBpbiB0aGUgVEZUUCBjb25uZWN0IHRpbWVvdXQKICBjb2RlIGZvciB0aW1lb3V0cyBsZXNzIHRoYW4gZml2ZSBzZWNvbmRzLCBhbmQgYWxzbyBwcm92aWRlZCBhIGZpeCBmb3IgaXQuCiAgQnVnIHJlcG9ydCAjMTcxNTM5MiAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTcxNTM5MikKCkRhbiBGICgxNiBNYXkgMjAwNykKLSBBZGRlZCBzdXBwb3J0IGZvciBjb21waWxpbmcgdW5kZXIgTWluaXggMy4xLjMgdXNpbmcgQUNLLgoKRGFuIEYgKDE0IE1heSAyMDA3KQotIEFkZGVkIFNGVFAgZGlyZWN0b3J5IGxpc3RpbmcgdGVzdCBjYXNlIDYxMy4KCi0gQWRkZWQgc3VwcG9ydCBmb3IgcXVvdGUgY29tbWFuZHMgYmVmb3JlIGEgdHJhbnNmZXIgdXNpbmcgU0ZUUCBhbmQgdGVzdAogIGNhc2UgNjE0LgoKLSBDaGFuZ2VkIHRoZSBwb3N0LXF1b3RlIGNvbW1hbmRzIHRvIG9jY3VyIGFmdGVyIHRoZSB0cmFuc2ZlcnJlZCBmaWxlIGlzCiAgY2xvc2VkLgoKLSBBbGxvdyBTRlRQIHF1b3RlIGNvbW1hbmRzIGNobW9kLCBjaG93biwgY2hncnAgdG8gc2V0IGEgdmFsdWUgb2YgMC4KCkRhbiBGICg5IE1heSAyMDA3KQotIEtyaXN0aWFuIEd1bnN0b25lIGZpeGVkIGEgcHJvYmxlbSB3aGVyZSBvdmVyd3JpdGluZyBhbiB1cGxvYWRlZCBmaWxlIHdpdGgKICBzZnRwIGRpZG4ndCB0cnVuY2F0ZSBpdCBmaXJzdCwgd2hpY2ggd291bGQgY29ycnVwdCB0aGUgZmlsZSBpZiB0aGUgbmV3CiAgZmlsZSB3YXMgc2hvcnRlciB0aGFuIHRoZSBvbGQuCgpEYW4gRiAoOCBNYXkgMjAwNykKLSBBZGRlZCBGVFBTIHRlc3QgY2FzZXMgNDA2IGFuZCA0MDcKCkRhbmllbCBTICg4IE1heSAyMDA3KQotIENVUkxFX0ZUUF9DT1VMRE5UX1NUT1JfRklMRSBpcyBub3cga25vd24gYXMgQ1VSTEVfVVBMT0FEX0ZBSUxFRC4gVGhpcyBpcwogIGJlY2F1c2UgSSBqdXN0IG1hZGUgU0NQIHVwbG9hZHMgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhlIGZpbGUgc2l6ZSBvZgogIHRoZSB1cGxvYWQgZmlsZSBpc24ndCBnaXZlbiB3aXRoIENVUkxPUFRfSU5GSUxFU0laRSouIERvY3MgdXBkYXRlZCB0bwogIHJlZmxlY3QgdGhpcyBuZXdzLCBhbmQgYSBkZWZpbmUgZm9yIHRoZSBvbGQgbmFtZSB3YXMgYWRkZWQgdG8gdGhlIHB1YmxpYwogIGhlYWRlciBmaWxlLgoKRGFuaWVsIFMgKDcgTWF5IDIwMDcpCi0gSmFtZXMgQnVyc2EgZml4ZWQgYSBidWcgaW4gdGhlIG11bHRpIGhhbmRsZSBjb2RlIHRoYXQgbWFkZSB0aGUgY29ubmVjdGlvbgogIGNhY2hlIGdyb3cgYSBiaXQgdG9vIG11Y2gsIGJleW9uZCB0aGUgbm9ybWFsIDQgKiBlYXN5X2hhbmRsZXMuCgpEYW5pZWwgUyAoMiBNYXkgMjAwNykKLSBBbmRlcnMgR3VzdGFmc3NvbiByZW1hcmtlZCB0aGF0IHJlcXVpcmluZyBDVVJMT1BUX0hUVFBfVkVSU0lPTiBzZXQgdG8gMS4wCiAgd2hlbiBDVVJMT1BUX0hUVFAyMDBBTElBU0VTIGlzIHVzZWQgdG8gYXZvaWQgdGhlIHByb2JsZW0gbWVudGlvbmVkIGJlbG93IGlzCiAgbm90IHZlcnkgbmljZSBpZiB0aGUgY2xpZW50IHdhbnRzIHRvIGJlIGFibGUgdG8gdXNlIF9laXRoZXJfIGEgSFRUUCAxLjEKICBzZXJ2ZXIgb3Igb25lIHdpdGhpbiB0aGUgYWxpYXNlcyBsaXN0Li4uIHNvIHN0YXJ0aW5nIG5vdywgbGliY3VybCB3aWxsCiAgc2ltcGx5IGNvbnNpZGVyIDIwMC1hbGlhcyBtYXRjaGVzIHRoZSB0byBiZSBIVFRQIDEuMCBjb21wbGlhbnQuCgotIFRvYmlhcyBSdW5kc3Ry9m0gcmVwb3J0ZWQgYSBwcm9ibGVtIHRoZXkgZXhwZXJpZW5jZWQgd2l0aCB4bW1zMiBhbmQgcmVjZW50CiAgbGliY3VybHMsIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUgdGhlIDI1LW5vdi0yMDA2IGNoYW5nZSB3aGljaCB0cmVhdHMgSFRUUAogIHJlc3BvbnNlcyB3aXRob3V0IENvbnRlbnQtTGVuZ3RoIG9yIGNodW5rZWQgZW5jb2RpbmcgYXMgd2l0aG91dCBib2RpZXMuIFdlCiAgbm93IGFkZGVkIHRoZSBjb25kaXRpb25hbCB0aGF0IHRoZSBhYm92ZSBtZW50aW9uZWQgcmVzcG9uc2UgaXMgb25seSB3aXRob3V0CiAgYm9keSBpZiB0aGUgcmVzcG9uc2UgaXMgSFRUUCAxLjEuCgotIEplZmYgUG9obG1leWVyIGltcHJvdmVkIHRoZSBoaXBlcmZpZm8uYyBleGFtcGxlIHRvIHVzZSB0aGUKICBDVVJMTU9QVF9USU1FUkZVTkNUSU9OIGNhbGxiYWNrIG9wdGlvbi4KCi0gU2V0IHRoZSB0aW1lb3V0IGZvciBlYXN5IGhhbmRsZXMgdG8gZXhwaXJlIHJlYWxseSBzb29uIGFmdGVyIGFkZGl0aW9uIG9yCiAgd2hlbiBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gaXMgcmV0dXJuZWQgZnJvbSBjdXJsX211bHRpX3NvY2tldCovcGVyZm9ybSwKICB0byBtYWtlIGFwcGxpY2F0aW9ucyB1c2luZyBvbmx5IGN1cmxfbXVsdGlfc29ja2V0KCkgdG8gcHJvcGVybHkgZnVuY3Rpb24KICB3aGVuIGFkZGluZyBlYXN5IGhhbmRsZXMgIm9uIHRoZSBmbHkiLiBCdWcgcmVwb3J0IGFuZCB0ZXN0IGFwcCBwcm92aWRlZCBieQogIE1pY2hhZWwgV2FsbG5lci4KCkRhbiBGICgzMCBBcHJpbCAyMDA3KQotIEltcHJvdmVkIHRoZSB0ZXN0IGhhcm5lc3MgdG8gYWxsb3cgcnVubmluZyB0ZXN0IHNlcnZlcnMgb24gb3RoZXIgdGhhbgogIHRoZSBkZWZhdWx0IHBvcnQgbnVtYmVycywgYWxsb3dpbmcgbW9yZSB0aGFuIG9uZSB0ZXN0IHN1aXRlIHRvIHJ1bgogIHNpbXVsdGFuZW91c2x5IG9uIHRoZSBzYW1lIGhvc3QuCgpEYW5pZWwgUyAoMjggQXByaWwgMjAwNykKLSBQZXRlciBPJ0dvcm1hbiBmaXhlZCBsaWJjdXJsIHRvIG5vdCBpbml0IEdudVRMUyBhcyBlYXJseSBhcyB3ZSBkaWQgYmVmb3JlLAogIHNpbmNlIGl0IHRoZW4gaW5pdHMgbGliZ2NyeXB0IGFuZCBsaWJnY3J5cHQgaXMgYmVpbmcgZXZpbCBhbmQgRVhJVFMgdGhlCiAgYXBwbGljYXRpb24gaWYgaXQgZmFpbHMgdG8gZ2V0IGEgZmluZSByYW5kb20gc2VlZC4gVGhhdCdzIHJlYWxseSBub3QgYSBuaWNlCiAgdGhpbmcgdG8gZG8gYnkgYSBsaWJyYXJ5LgoKLSBGcmFuayBIZW1wZWwgZml4ZWQgYSBjdXJsX2Vhc3lfZHVwaGFuZGxlKCkgY3Jhc2ggb24gYSBoYW5kbGUgdGhhdCBoYWQKICBiZWVuIHJlbW92ZWQgZnJvbSBhIG11bHRpIGhhbmRsZSwgYW5kIHRoZW4gZml4ZWQgYW5vdGhlciBmbGF3IHRoYXQgcHJldmVudGVkCiAgY3VybF9lYXN5X2R1cGhhbmRsZSgpIHRvIHdvcmsgZXZlbiBhZnRlciB0aGUgZmlyc3QgZml4IC0gdGhlIGhhbmRsZSB3YXMKICBzdGlsbCBtYXJrZWQgYXMgdXNpbmcgdGhlIG11bHRpIGludGVyZmFjZS4KCkRhbmllbCBTICgyNiBBcHJpbCAyMDA3KQotIFBldGVyIE8nR29ybWFuIGZvdW5kIGEgcHJvYmxlbSB3aXRoIFNDUCBkb3dubG9hZHMgd2hlbiB0aGUgZG93bmxvYWRlZCBmaWxlCiAgd2FzIDE2Mzg1IGJ5dGVzICgxNksrMSkgYW5kIGl0IHR1cm5lZCBvdXQgd2UgZGlkbid0IHByb3Blcmx5IGFsd2F5cyAic3VjawogIG91dCIgYWxsIGRhdGEgZnJvbSBsaWJzc2gyLiBUaGUgZWZmZWN0IGJlaW5nIHRoYXQgbGliY3VybCB3b3VsZCBoYW5nIG9uIHRoZQogIHNvY2tldCB3YWl0aW5nIGZvciBkYXRhIHdoZW4gbGlic3NoMiBoYWQgaW4gZmFjdCBhbHJlYWR5IHJlYWQgaXQgYWxsLi4uCgpEYW4gRiAoMjUgQXByaWwgMjAwNykKLSBBZGRlZCBzdXBwb3J0IGluIHJ1bnRlc3RzLnBsIGZvciAiIW4iIHRlc3QgbnVtYmVycyB0byBkaXNhYmxlIGluZGl2aWR1YWwKICB0ZXN0cy4gIENoYW5nZWQgLXQgdG8gb25seSBrZWVwIGxvZyBmaWxlcyBhcm91bmQgd2hlbiAtayBpcyBzcGVjaWZpZWQsCiAgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgd2l0aG91dCAtdC4KCkRhbmllbCBTICgyNSBBcHJpbCAyMDA3KQotIFNvbmlhIFN1YnJhbWFuaWFuIGJyb3VnaHQgb3VyIGF0dGVudGlvbiB0byBhIHByb2JsZW0gdGhhdCBoYXBwZW5zIGlmIHlvdSBzZXQKICB0aGUgQ1VSTE9QVF9SRVNVTUVfRlJPTSBvciBDVVJMT1BUX1JBTkdFIG9wdGlvbnMgYW5kIGFuIGV4aXN0aW5nIGNvbm5lY3Rpb24KICBpbiB0aGUgY29ubmVjdGlvbiBjYWNoZSBpcyBjbG9zZWQgdG8gbWFrZSByb29tIGZvciB0aGUgbmV3IG9uZSB3aGVuIHlvdSBjYWxsCiAgY3VybF9lYXN5X3BlcmZvcm0oKS4gSXQgd291bGQgdGhlbiB3cm9uZ2x5IGZyZWUgcmFuZ2UtcmVsYXRlZCBkYXRhIGluIHRoZQogIGNvbm5lY3Rpb24gY2xvc2UgZnVudGlvbi4KCllhbmcgVHNlICgyNSBBcHJpbCAyMDA3KQotIFN0ZXZlIExpdHRsZSBmaXhlZCBjb21waWxhdGlvbiBvbiBWTVMgNjQtYml0IG1vZGUKCkRhbmllbCBTICgyNCBBcHJpbCAyMDA3KQotIFJvYmVydCBJYWtvYmFzaHZpbGkgbWFkZSB0aGUgJ21hc3Rlcl9idWZmZXInIGdldCBhbGxvY2F0ZWQgZmlyc3Qgb25jZSBpdCBpcwogIGNhbi93aWxsIGJlIHVzZWQgYXMgaXQgdGhlbiBtYWtlcyB0aGUgY29tbW9uIGNhc2VzIHNhdmUgMTZLQiBvZiBkYXRhIGZvciBlYWNoCiAgZWFzeSBoYW5kbGUgdGhhdCBpc24ndCB1c2VkIGZvciBwaXBlbGluaW5nLgoKRGFuIEYgKDIzIEFwcmlsIDIwMDcpCi0gQWRkZWQgPHBvc3RjaGVjaz4gc3VwcG9ydCB0byB0aGUgdGVzdCBoYXJuZXNzLgoKLSBBZGRlZCB0ZXN0cyA2MTAtNjEyIHRvIHRlc3QgbW9yZSBTRlRQIHBvc3QtcXVvdGUgY29tbWFuZHMuCgpEYW5pZWwgUyAoMjIgQXByaWwgMjAwNykKLSBTb25nIE1hJ3Mgd2FybmluZyBpZiAtci8tLXJhbmdlIGlzIGdpdmVuIHdpdGggYSAiYmFkIiByYW5nZSwgYWxzbyBub3RlZCBpbgogIHRoZSBtYW4gcGFnZSBub3cuCgotIERhbmllbCBCbGFjayBmaWxlZCBidWcgIzE3MDUxNzcKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTcwNTE3Nykgd2hlcmUgLS13aXRob3V0LXNzbAogIC0td2l0aC1nbnV0bCBvdXRwdXRzIGEgd2FybmluZyBhYm91dCBTU0wgbm90IGJlaW5nIGVuYWJsZWQgZXZlbiB0aG91Z2ggR251VExTCiAgd2FzIGZvdW5kIGFuZCB1c2VkLgoKRGFuaWVsIFMgKDIxIEFwcmlsIDIwMDcpCi0gRGFuaWVsIEJsYWNrIGZpbGVkIGJ1ZyAjMTcwNDY3NQogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNzA0Njc1KSBpZGVudGlmeWluZyBhIGRvdWJsZS1mcmVlCiAgcHJvYmxlbSBpbiB0aGUgU1NMLWRlYWxpbmcgbGF5ZXIsIHRlbGxpbmcgR251VExTIHRvIGZyZWUgTlVMTCBjcmVkZW50aWFscyBvbgogIGNsb3NlZG93biBhZnRlciBhIGZhaWx1cmUgYW5kIGEgYmFkICNpZmRlZiBmb3IgTlNTIHdoZW4gY2xvc2luZyBkb3duIFNTTC4KCllhbmcgVHNlICgyMCBBcHJpbCAyMDA3KQotIFNhdmUgb25lIGNhbGwgdG8gY3VybHhfdHZub3coKSwgd2hpY2ggY2FsbHMgZ2V0dGltZW9mZGF5KCksIGluIGVhY2ggb2YKICBDdXJsX3NvY2tldF9yZWFkeSgpLCBDdXJsX3BvbGwoKSBhbmQgQ3VybF9zZWxlY3QoKSB3aGVuIHRoZXNlIGFyZSBjYWxsZWQKICB3aXRoIGEgemVybyB0aW1lb3V0IG9yIGEgdGltZW91dCB2YWx1ZSBpbmRpY2F0aW5nIGEgYmxvY2tpbmcgY2FsbCBzaG91bGQKICBiZSBwZXJmb3JtZWQuCgpEYW5pZWwgUyAoMTggQXByaWwgMjAwNykKLSBKYW1lcyBIb3VzbGV5IG1hZGUgU0ZUUCB1cGxvYWRzIHVzZSBsaWJzc2gyJ3Mgbm9uLWJsb2NraW5nIEFQSQoKLSBQcmV2ZW50IHRoZSBpbnRlcm5hbCBwcm9ncmVzcyBtZXRlciBmcm9tIHVwZGF0aW5nIG1vcmUgZnJlcXVlbnRseSB0aGFuIG9uY2UKICBwZXIgc2Vjb25kLgoKRGFuIEYgKDE3IEFwcmlsIDIwMDcpCi0gQWRkZWQgdGVzdCBjYXNlcyAyOTYsIDI5NyBhbmQgMjk4IHRvIHRlc3QgLS1mdHAtbWV0aG9kIGhhbmRsaW5nCgpEYW5pZWwgUyAoMTYgQXByaWwgMjAwNykKLSBSb2JlcnQgSWFrb2Jhc2h2aWwgYWRkZWQgY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKCkgdG8gbGliY3VybCwgd2hpY2ggaXMgYQogIGZ1bmN0aW9uIHRoYXQgZGVwcmVjYXRlcyB0aGUgY3VybF9tdWx0aV9zb2NrZXQoKSBmdW5jdGlvbi4gVXNpbmcgdGhlIG5ldwogIGZ1bmN0aW9uIHRoZSBhcHBsaWNhdGlvbiB0ZWxsIGxpYmN1cmwgd2hhdCBhY3Rpb24gdGhhdCB3YXMgZm91bmQgaW4gdGhlCiAgc29ja2V0IHRoYXQgaXQgcGFzc2VzIGluLiBUaGlzIGdpdmVzIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgYm9vc3QgYXMgaXQKICBhbGxvd3MgbGliY3VybCB0byBhdm9pZCBhIGNhbGwgdG8gcG9sbCgpL3NlbGVjdCgpIGZvciBldmVyeSBjYWxsIHRvCiAgY3VybF9tdWx0aV9zb2NrZXQqKCkuCgogIEkgYWRkZWQgYSBkZWZpbmUgaW4gdGhlIHB1YmxpYyBjdXJsL211bHRpLmggaGVhZGVyIGZpbGUgdGhhdCB3aWxsIG1ha2UgeW91cgogIGV4aXN0aW5nIGFwcGxpY2F0aW9uIGF1dG9tYXRpY2FsbHkgdXNlIGN1cmxfbXVsdGlfc29ja2V0X2FjdGlvbigpIGluc3RlYWQgb2YKICBjdXJsX211bHRpX3NvY2tldCgpIHdoZW4geW91IHJlY29tcGlsZS4gQnV0IG9mIGNvdXJzZSB5b3UnbGwgZ2V0IGJldHRlcgogIHBlcmZvcm1hbmNlIGlmIHlvdSBhZGp1c3QgeW91ciBjb2RlIG1hbnVhbGx5IGFuZCBhY3R1YWxseSBwYXNzIGluIHRoZQogIGNvcnJlY3QgYWN0aW9uIGJpdG1hc2sgdG8gdGhpcyBmdW5jdGlvbi4KCkRhbmllbCBTICgxNCBBcHJpbCAyMDA3KQotIEpheSBBdXN0aW4gYWRkZWQgIkRIIFBBUkFNRVRFUlMiIHRvIHRoZSBzdHVubmVsLnBlbSBjZXJ0aWZpY2F0ZSBmb3IgdGhlIHRlc3QKICBzdWl0ZSB0byBtYWtlIHN0dW5uZWwgcnVuIGJldHRlciBpbiBzb21lIChtb3N0PykgZW52aXJvbm1lbnRzLgoKRGFuIEYgKDEzIEFwcmlsIDIwMDcpCi0gQWRkZWQgdGVzdCBjYXNlcyAyOTQgYW5kIDI5NSB0byB0ZXN0IC0tZnRwLWFjY291bnQgaGFuZGxpbmcKCi0gSW1wcm92ZWQgaGFuZGxpbmcgb2Ygb3V0IG9mIG1lbW9yeSBpbiBmdHAuCgpZYW5nIFRzZSAoMTMgQXByaWwgMjAwNykKLSBGaXggdGVzdCBjYXNlIDUzNCB3aGljaCBzdGFydGVkIHRvIGZhaWwgMjAwNy0wNC0xMyBkdWUgdG8gdGhlIGV4aXN0YW5jZQogIG9mIGEgbmV3IGhvc3Qgb24gdGhlIG5ldCB3aXRoIHRoZSBzYW1lIHNpbGx5IGRvbWFpbiB0aGUgdGVzdCB3YXMgdXNpbmcKICBmb3IgYSBob3N0IHdoaWNoIHdhcyBzdXBwb3NlZCBub3QgdG8gZXhpc3QuCgpEYW5pZWwgUyAoMTIgQXByaWwgMjAwNykKLSBTb25nIE1hIGZvdW5kIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGlmMmlwIGNvZGUgaWYgeW91IHBhc3MgaW4gYW4gaW50ZXJmYWNlCiAgbmFtZSBsb25nZXIgdGhhbiB0aGUgbmFtZSBmaWVsZCBvZiB0aGUgaWZyZXEgc3RydWN0ICh0eXBpY2FsbHkgNiBieXRlcyksIGFzCiAgdGhlbiBpdCB3b3VsZG4ndCBjbG9zZSB0aGUgdXNlZCBkdW1teSBzb2NrZXQuIEJ1ZyAjMTY5ODk3NAogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNjk4OTc0KQoKVmVyc2lvbiA3LjE2LjIgKDExIEFwcmlsIDIwMDcpCgpZYW5nIFRzZSAoMTAgQXByaWwgMjAwNykKLSBSYXZpIFByYXRhcCBwcm92aWRlZCBzb21lIGZpeGVzIGZvciBIVFRQIHBpcGVsaW5pbmcKCi0gY29uZmlndXJlIHNjcmlwdCB3aWxsIGlnbm9yZSAtLWVuYWJsZS1zc3BpIG9wdGlvbiBmb3Igbm9uLW5hdGl2ZSBXaW5kb3dzLgoKRGFuaWVsIFMgKDkgQXByaWwgMjAwNykKLSBOaWNrIFppdHptYW5uIGRpZCBzc2guYyBjbGVhbnVwcwoKRGFuaWVsIFMgKDMgQXByaWwgMjAwNykKLSBSb2IgSm9uZXMgZml4ZWQgYmV0dGVyICNpZmRlZidpbmcgZm9yIGEgYnVuY2ggb2YgI2luY2x1ZGUgbGluZXMuCgpEYW5pZWwgUyAoMiBBcHJpbCAyMDA3KQotIE5pY2sgWml0em1hbm4gbWFkZSB0aGUgQ1VSTE9QVF9QT1NUUVVPVEUgb3B0aW9uIHdvcmsgZm9yIFNGVFAgYXMgd2VsbC4gVGhlCiAgYWNjZXB0ZWQgY29tbWFuZHMgYXJlIGFzIGZvbGxvd3M6CgogIGNoZ3JwIChnaWQpIChwYXRoKQogICAgQ2hhbmdlcyB0aGUgZ3JvdXAgSUQgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IChwYXRoKSB0byAoZ2lkKS4gKGdpZCkKICAgIG11c3QgYmUgYSBudW1iZXIuCgogIGNobW9kIChwZXJtcykgKHBhdGgpCiAgICBDaGFuZ2VzIHRoZSBwZXJtaXNzaW9ucyBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgKHBhdGgpIHRvCiAgICAocGVybXMpLiAocGVybXMpIG11c3QgYmUgYSBudW1iZXIgaW4gdGhlIGZvcm1hdCB1c2VkIGJ5IHRoZSBjaG1vZCBVbml4CiAgICBjb21tYW5kLgoKICBjaG93biAodWlkKSAocGF0aCkKICAgIENoYW5nZXMgdGhlIHVzZXIgSUQgb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IChwYXRoKSB0byAodWlkKS4gKHVpZCkKICAgIG11c3QgYmUgYSBudW1iZXIuCgogIGxuIChzb3VyY2UpIChkZXN0KQogICAgQ3JlYXRlcyBhIHN5bWJvbGljIGxpbmsgYXQgKGRlc3QpIHRoYXQgcG9pbnRzIHRvIHRoZSBmaWxlIGxvY2F0ZWQgYXQKICAgIChzb3VyY2UpLgoKICBta2RpciAocGF0aCkKICAgIENyZWF0ZXMgYSBuZXcgZGlyZWN0b3J5IGF0IChwYXRoKS4KCiAgcmVuYW1lIChzb3VyY2UpIChkZXN0KQogICAgTW92ZXMgdGhlIGZpbGUgb3IgZGlyZWN0b3J5IGF0IChzb3VyY2UpIHRvIChkZXN0KS4KCiAgcm0gKHBhdGgpCiAgICBEZWxldGVzIHRoZSBmaWxlIGxvY2F0ZWQgYXQgKHBhdGgpLgoKICBybWRpciAocGF0aCkKICAgIERlbGV0ZXMgdGhlIGRpcmVjdG9yeSBsb2NhdGVkIGF0IChwYXRoKS4gVGhpcyBjb21tYW5kIHdpbGwgcmFpc2UgYW4gZXJyb3IKICAgIGlmIHRoZSBkaXJlY3RvcnkgaXMgbm90IGVtcHR5LgoKICBzeW1saW5rIChzb3VyY2UpIChkZXN0KQogICAgU2FtZSBhcyBsbi4KCkRhbmllbCBTICgxIEFwcmlsIDIwMDcpCi0gUm9iZXJ0IElha29iYXNodmlsaSBtYWRlIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgpIGEgbG90IGZhc3RlciB3aGVuIG1hbnkKICBlYXN5IGhhbmRsZXMgYXJlIGFkZGVkIHRvIGEgbXVsdGkgaGFuZGxlLCBieSBhdm9pZGluZyB0aGUgbG9vcGluZyBvdmVyIGFsbAogIHRoZSBoYW5kbGVzIHRvIGZpbmQgd2hpY2ggb25lIHRvIHJlbW92ZS4KCi0gTWF0dCBLcmFhaSBwcm92aWRlZCBhIHBhdGNoIHRoYXQgbWFrZXMgY3VybCBidWlsZCBvbiBRTlggNiBmaW5lIGFnYWluLgoKRGFuaWVsIFMgKDMxIE1hcmNoIDIwMDcpCi0gRml4ZWQgc2V2ZXJhbCBtaW5vciBpc3N1ZXMgZGV0ZWN0ZWQgYnkgdGhlIGNvdmVyaXR5LmNvbSBzY2FubmVyLgoKLSAiUGl4ZWwiIGZpeGVkIGEgcHJvYmxlbSB0aGF0IGFwcGVhcmVkIHdoZW4geW91IHVzZWQgLWYgd2l0aCB1c2VyK3Bhc3N3b3JkCiAgZW1iZWRkZWQgaW4gdGhlIFVSTC4KCkRhbiBGICgyOSBNYXJjaCAyMDA3KQotIERvbid0IHRlYXIgZG93biB0aGUgZnRwIGNvbm5lY3Rpb24gaWYgdGhlIG1heGltdW0gZmlsZXNpemUgd2FzIGV4Y2VlZGVkCiAgYW5kIGFkZGVkIHRlc3RzIDI5MCBhbmQgMjkxIHRvIGNoZWNrLgoKLSBBZGRlZCBmdHBzIHVwbG9hZCBhbmQgU1NMIHJlcXVpcmVkIHRlc3RzIDQwMSBhbmQgNDAyLgoKLSBTZW5kIGFuIEVPRiBtZXNzYWdlIGJlZm9yZSBjbG9zaW5nIGFuIFNDUCBjaGFubmVsLCBhcyByZWNvbW1lbmRlZCBieQogIFJGQzQyNTQuIEVuYWJsZSBsaWJzc2gyIHRyYWNpbmcgd2hlbiBzc2ggZGVidWdnaW5nIGlzIHR1cm5lZCBvbi4KCllhbmcgVHNlICgyNyBNYXJjaCAyMDA3KQotIEludGVybmFsIGZ1bmN0aW9uIEN1cmxfc2VsZWN0KCkgcmVuYW1lZCB0byBDdXJsX3NvY2tldF9yZWFkeSgpCgogIE5ldyBJbnRlcm5hbCB3cmFwcGVyIGZ1bmN0aW9uIEN1cmxfc2VsZWN0KCkgYXJvdW5kIHNlbGVjdCAoMiksIGl0CiAgdXNlcyBwb2xsKCkgd2hlbiBhIGZpbmUgcG9sbCgpIGlzIGF2YWlsYWJsZSwgc28gbm93IGxpYmN1cmwgY2FuIGJlCiAgYnVpbHQgd2l0aG91dCBzZWxlY3QoKSBzdXBwb3J0IGF0IGFsbCBpZiBhIGZpbmUgcG9sbCgpIGlzIGF2YWlsYWJsZS4KCkRhbmllbCBTICgyNSBNYXJjaCAyMDA3KQotIERhbmllbCBKb2huc29uIGZpeGVkIG11bHRpIGNvZGUgdG8gdHJhdmVyc2UgdGhlIGVhc3kgaGFuZGxlIGxpc3QgcHJvcGVybHkuCiAgQSBsZWZ0LW92ZXIgYnVnIGZyb20gdGhlIEZlYnJ1YXJ5IDIxIGZpeC4KCkRhbiBGICgyMyBNYXJjaCAyMDA3KQotIEFkZGVkIC0tcHVia2V5IG9wdGlvbiB0byBjdXJsIGFuZCBtYWRlIC0ta2V5IGFsc28gd29yayBmb3IgU0NQL1NGVFAsCiAgcGx1cyBtYWRlIC0tcGFzcyB3b3JrIG9uIGFuIFNTSCBwcml2YXRlIGtleSBhcyB3ZWxsLgoKLSBDaGFuZ2VkIHRoZSB0ZXN0IGhhcm5lc3MgdG8gYXR0ZW1wdCB0byBncmFjZWZ1bGx5IHNodXQgZG93biBzZXJ2ZXJzCiAgYmVmb3JlIHJlc29ydGluZyB0byB0aGUga2lsbCAtOSBoYW1tZXIuCgotIEFkZGVkIHRlc3QgaGFybmVzcyBpbmZyYXN0cnVjdHVyZSB0byBzdXBwb3J0IHNjcC9zZnRwIHRlc3RzLCB1c2luZwogIE9wZW5TU0ggYXMgdGhlIHNlcnZlci4KCi0gRml4ZWQgYSBtZW1vcnkgbGVhayB3aGVuIHNwZWNpZnlpbmcgYSBwcm94eSB3aXRoIGEgZmlsZTogVVJMLgoKWWFuZyBUc2UgKDIwIE1hcmNoIDIwMDcpCi0gRml4ZWQ6IFdoZW4gYSBzaWduYWwgd2FzIGNhdWdodCBhd2FpdGluZyBmb3IgYW4gZXZlbnQgdXNpbmcgQ3VybF9zZWxlY3QoKQogIG9yIEN1cmxfcG9sbCgpIHdpdGggYSBub24temVybyB0aW1lb3V0IGJvdGggZnVuY3Rpb25zIHdvdWxkIHJlc3RhcnQgdGhlCiAgc3BlY2lmaWVkIHRpbWVvdXQuIFRoaXMgY291bGQgZXZlbiBsZWFkIHRvIHRoZSBleHRyZW1lIGNhc2UgdGhhdCBpZiBhCiAgc2lnbmFsIGFycml2ZWQgd2l0aCBhIGZyZWN1ZW5jeSBsb3dlciB0byB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgbmVpdGhlcgogIGZ1bmN0aW9uIHdvdWxkIGV2ZXIgZXhpdC4KCiAgQWRkZWQgZXhwZXJpbWVudGFsIHN5bWJvbCBkZWZpbml0aW9uIGNoZWNrIENVUkxfQUNLTk9XTEVER0VfRUlOVFIgaW4KICBDdXJsX3NlbGVjdCgpIGFuZCBDdXJsX3BvbGwoKS4gV2hlbiBjb21waWxlZCB3aXRoIENVUkxfQUNLTk9XTEVER0VfRUlOVFIKICBkZWZpbmVkIGJvdGggZnVuY3Rpb25zIHdpbGwgcmV0dXJuIGFzIHNvb24gYXMgYSBzaWduYWwgaXMgY2F1Z2h0LiBVc2UgaXQKICBhdCB5b3VyIG93biByaXNrLCBhbGwgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBsaWJyYXJ5IHNob3VsZCBiZQogIHJldmlzaXRlZCBhbmQgY2hlY2tlZCBiZWZvcmUgZnVsbHkgc3VwcG9ydGluZyB0aGlzIGZlYXR1cmUuCgpZYW5nIFRzZSAoMTkgTWFyY2ggMjAwNykKLSBCcnlhbiBIZW5kZXJzb24gZml4ZWQgdGhlIHByb2dyZXNzIGZ1bmN0aW9uIHNvIHRoYXQgaXQgY2FuIGdldCBjYWxsZWQgbW9yZQogIGZyZXF1ZW50bHkgYWxsb3dpbmcgc2FtZSBjYWxsaW5nIGZyZWN1ZW5jeSBmb3IgdGhlIGNsaWVudCBwcm9ncmVzcyBjYWxsYmFjay4KICAKRGFuIEYgKDE1IE1hcmNoIDIwMDcpCi0gVmFyaW91cyBtZW1vcnkgbGVha3MgcGx1Z2dlZCBhbmQgTlVMTCBwb2ludGVyIGZpeGVzIG1hZGUgaW4gdGhlIHNzaCBjb2RlLgoKRGFuaWVsICgxNSBNYXJjaCAyMDA3KQotIE5pY2sgbWFkZSB0aGUgY3VybCB0b29sIGFjY2VwdCBnbG9iYmluZyByYW5nZXMgdGhhdCBvbmx5IGlzIG9uZSBudW1iZXIsIGkuZQogIHlvdSBjYW4gbm93IHVzZSBbMS0xXSB3aXRob3V0IGN1cmwgY29tcGxhaW5pbmcuCgpEYW5pZWwgKDEwIE1hcmNoIDIwMDcpCi0gRXlnZW5lIFJ5YWJpbmtpbjoKCiAgVGhlIHByb2JsZW0gaXMgdGhlIGZvbGxvd2luZzogd2hlbiB3ZSdyZSBjYWxsaW5nIEN1cmxfZG9uZSBhbmQgaXQgZGVjaWRlcyB0bwogIGtlZXAgdGhlIGNvbm5lY3Rpb24gb3BlbmVkICgnbGVmdCBpbnRhY3QnKSwgdGhlbiB0aGUgY2FsbGVyIGlzIG5vdCBub3RpZmllZAogIHRoYXQgdGhlIGNvbm5lY3Rpb24gd2FzIGRvbmUgdmlhIHRoZSBOVUxMaWZ5aW5nIG9mIHRoZSBwb2ludGVyLCBzbyBzb21lIGVhc3kKICBoYW5kbGUgaXMga2VlcGluZyB0aGUgcG9pbnRlciB0byB0aGlzIGNvbm5lY3Rpb24uCgogIExhdGVyIENvbm5lY3Rpb25FeGlzdHMgY2FuIHNlbGVjdCBzdWNoIGNvbm5lY3Rpb24gZm9yIHJldXNlIGV2ZW4gaWYgd2UncmUKICBub3QgcGlwZWxpbmluZzogcGlwZUxlbiBpcyB6ZXJvLCBzbyB0aGUgKHBpcGVMZW4gPiAwICYmICFjYW5QaXBlbGluZSkgaXMKICBmYWxzZSBhbmQgd2UgY2FuIHJldXNlIHRoaXMgY29ubmVjdGlvbiBmb3IgYW5vdGhlciBlYXN5IGhhbmRsZS4gQnV0IHRodXMgdGhlCiAgY29ubmVjdGlvbiB3aWxsIGJlIHNoYXJlZCBiZXR3ZWVuIHR3byBlYXN5IGhhbmRsZXMgaWYgdGhlIGhhbmRsZSB0aGF0IHdhbnRzCiAgdG8gdGFrZSB0aGUgb3duZXJzaGlwIGlzIG5vdCB0aGUgc2FtZSBhcyB3YXMgbm90IG5vdGlmaWVkIG9mIHRoZSBjb25uZWN0aW9uCiAgd2FzIGRvbmUgaW4gQ3VybF9kb25lLiBBbmQgd2hlbiBzb21lIG9mIHRoZXNlIGVhc3kgaGFuZGxlcyB3aWxsIGdldCB0aGVpcgogIGNvbm5lY3Rpb24gcmVhbGx5IGZyZWVkIHRoZSBhbm90aGVyIG9uZSB3aWxsIHN0aWxsIGtlZXAgdGhlIHBvaW50ZXIuCgogIE15IGZpeCB3YXMgcmF0aGVyIHRyaXZpYWw6IEkganVzdCBhZGRlZCB0aGUgTlVMTGlmaWNhdGlvbiB0byB0aGUgJ2Vsc2UnCiAgYnJhbmNoIGluIHRoZSBDdXJsX2RvbmUuIE15IHRlc3RzIHdpdGggR2l0IGFuZCBFbGVjdHJpY0ZlbmNlIHNob3dlZCBubwogIHByb2JsZW1zIGJvdGggZm9yIEhUVFAgcHVsbGluZyBhbmQgY2xvbmluZy4gUmVwb3NpdG9yeSBzaXplIGlzIGFib3V0IDI1MCBNYiwKICBzbyBpdCB3YXMgYSBjb25zaWRlcmFibGUgYW1vdW50IG9mIEN1cmwncyB3b3JrLgoKRGFuIEYgKDkgTWFyY2ggMjAwNykKLSBVcGRhdGVkIHRoZSB0ZXN0IGhhcm5lc3MgdG8gYWRkIGEgbmV3ICJjcnlwdG8iIGZlYXR1cmUgY2hlY2sgYW5kIHVwZGF0ZWQgdGhlCiAgYXBwcm9wcmlhdGUgdGVzdCBjYXNlIHRvIHVzZSBpdC4gIEZvciBub3csIHRoaXMgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyB0aGUKICAiU1NMIiBmZWF0dXJlIGJlY2F1c2UgY3VybCBkb2Vzbid0IGxpc3QgaXQgc2VwYXJhdGVseS4KCkRhbmllbCAoOSBNYXJjaCAyMDA3KQotIFJvYmVydCBJYWtvYmFzaHZpbGkgZml4ZWQgQ1VSTE9QVF9JTlRFUkZBQ0UgZm9yIElQdjYuCgotIFJvYmVydCBBLiBNb25hdCBpbXByb3ZlZCB0aGUgbWFrZXRneiBhbmQgVkM2LzggZ2VuZXJhdGluZyB0byBzZXQgdGhlIGNvcnJlY3QKICBtYWNoaW5lIHR5cGUgdG9vLgoKLSBKdXN0aW4gRmxldGNoZXIgZml4ZWQgYSBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiB0aGUgY3VybCB0b29sIHdoZW4gdHJ5aW5nIHRvCiAgdXBsb2FkIGEgZmlsZSBpdCBjb3VsZG4ndCBvcGVuLiBCdWcgIzE2NzY1ODEKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTY3NjU4MSkKCkRhbiBGICg5IE1hcmNoIDIwMDcpCi0gVXBkYXRlZCB0aGUgdGVzdCBoYXJuZXNzIHRvIGNoZWNrIGZvciBwcm90b2NvbCBzdXBwb3J0IGJlZm9yZSBydW5uaW5nIGVhY2gKICB0ZXN0LCBmaXhpbmcgS05PV05fQlVHUyAjMTEuCgpEYW4gRiAoNyBNYXJjaCAyMDA3KQotIFJlaW50cm9kdWNlZCAoYWZ0ZXIgYSAzIHllYXIgaGlhdHVzKSBhbiBGVFBTIHRlc3QgY2FzZSAoNDAwKSBpbnRvIHRoZSB0ZXN0CiAgaGFybmVzcy4gIEl0IGlzIHZlcnkgbGltaXRlZCBhcyBpdCBzdXBwb3J0cyBvbmx5IGZ0cHM6Ly8gVVJMcyB3aXRoCiAgLS1mdHAtc3NsLWNvbnRyb2wgc3BlY2lmaWVkLCB3aGljaCBpbXBsaWNpdGx5IGVuY3J5cHRzIHRoZSBjb250cm9sCiAgY2hhbm5lbCBidXQgbm90IHRoZSBkYXRhIGNoYW5uZWxzLiAgVGhhdCBhbGxvd3Mgc3R1bm5lbCB0byBiZSB1c2VkIHdpdGgKICBhbiB1bm1vZGlmaWVkIGZ0cCBzZXJ2ZXIgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkgdGhhdCB0aGUgdGVzdCBodHRwcwogIHNlcnZlciBpcyBzZXQgdXAuCgpEYW4gRiAoNyBNYXJjaCAyMDA3KQotIEhvbm91ciAtLWZ0cC1zc2wtY29udHJvbCBvbiBmdHBzOi8vIFVSTHMgdG8gYWxsb3cgZW5jcnlwdGVkIGNvbnRyb2wgYW5kCiAgdW5lbmNyeXB0ZWQgZGF0YSBjb25uZWN0aW9ucy4KCkRhbiBGICg2IE1hcmNoIDIwMDcpCi0gRml4ZWQgYSBjb3VwbGUgb2YgaW1wcm9wZXIgcG9pbnRlciB1c2VzIGRldGVjdGVkIGJ5IHZhbGdyaW5kIGluIHRlc3QKICBjYXNlcyAxODEgJiAyMTYuCgpEYW5pZWwgKDIgTWFyY2ggMjAwNykKLSBSb2JlcnQgQS4gTW9uYXQgYW5kIFNobXVsaWsgUmVnZXYgaGVscGVkIG91dCB0byBmaXggdGhlIG5ldyAqL01ha2VmaWxlLnZjOAogIG1ha2VmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgc291cmNlIHJlbGVhc2UgYXJjaGl2ZXMsIGdlbmVyYXRlZCBmcm9tCiAgdGhlIE1ha2VmaWxlLnZjNiBmaWxlcyBieSB0aGUgbWFrZXRneiBzY3JpcHQuIEkgYWxzbyBtb2RpZmllZCB0aGUgcm9vdAogIE1ha2VmaWxlIHRvIGhhdmUgYSBWQyB2YXJpYWJsZSB0aGF0IGRlZmF1bHRzIHRvIHZjNiBidXQgY2FuIGJlIG92ZXJyaWRkZW4gdG8KICBhbGxvdyBpdCB0byBiZSB1c2VkIGZvciB2YzggYXMgd2VsbC4gTGlrZSB0aGlzOgoKICAgIG5tYWtlIFZDPXZjOCB2YwoKRGFuaWVsICgyNyBGZWJydWFyeSAyMDA3KQotIEhhbmcgS2luIExhdSBmb3VuZCBhbmQgZml4ZWQ6IFdoZW4gSSB1c2UgbGliY3VybCB0byBjb25uZWN0IHRvIGFuIGh0dHBzCiAgc2VydmVyIHRocm91Z2ggYSBwcm94eSBhbmQgaGF2ZSB0aGUgcmVtb3RlIGh0dHBzIHNlcnZlciBwb3J0IHNldCB1c2luZyB0aGUKICBDVVJMT1BUX1BPUlQgb3B0aW9uLCBwcm90b2NvbCBnZXRzIHJlc2V0IHRvIGh0dHAgZnJvbSBodHRwcyBhZnRlciB0aGUgZmlyc3QKICByZXF1ZXN0LgogCiAgVXNlciBkZWZpbmVkIFVSTCB3YXMgbW9kaWZpZWQgaW50ZXJuYWxseSBieSBsaWJjdXJsIGFuZCBzdWJzZXF1ZW50IHJldXNlIG9mCiAgdGhlIGVhc3kgaGFuZGxlIG1heSBsZWFkIHRvIGNvbm5lY3Rpb24gdXNpbmcgYSBkaWZmZXJlbnQgcHJvdG9jb2wgKGlmIG5vdAogIG9yaWdpbmFsbHkgaHR0cCkuCiAKICBJIGZvdW5kIHRoYXQgbGliY3VybCBoYXJkY29kZWQgdGhlIHByb3RvY29sIHRvICJodHRwIiB3aGVuIGl0IHRyaWVzIHRvCiAgcmVnZW5lcmF0ZSB0aGUgVVJMIGlmIENVUkxPUFRfUE9SVCBpcyBzZXQuIEkgdHJpZWQgdG8gZml4IHRoZSBwcm9ibGVtIGFzCiAgZm9sbG93cyBhbmQgaXQncyB3b3JraW5nIGZpbmUgc28gZmFyCgpEYW5pZWwgKDI1IEZlYnJ1YXJ5IDIwMDcpCi0gQWRhbSBELiBNb3NzIG1hZGUgdGhlIEhUVFAgQ09OTkVDVCBwcm9jZWR1cmUgbGVzcyBibG9ja2luZyB3aGVuIHVzZWQgZnJvbQogIHRoZSBtdWx0aSBpbnRlcmZhY2UuIE5vdGUgdGhhdCBpdCBzdGlsbCBkb2VzIGEgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBpbiBhCiAgYmxvY2tpbmcgbWFubmVyLgoKRGFuaWVsICgyMyBGZWJydWFyeSAyMDA3KQotIEFkZGVkIHdhcm5pbmcgb3V0cHV0cyBpZiB0aGUgY29tbWFuZCBsaW5lIHVzZXMgbW9yZSB0aGFuIG9uZSBvZiB0aGUgb3B0aW9ucwogIC12LCAtLXRyYWNlIGFuZCAtLXRyYWNlLWFzY2lpLCBzaW5jZSBpdCBjb3VsZCByZWFsbHkgY29uZnVzZSB0aGUgdXNlci4KICBDbGFyaWZpZWQgdGhpcyBmYWN0IGluIHRoZSBtYW4gcGFnZS4KCkRhbmllbCAoMjEgRmVicnVhcnkgMjAwNykKLSBSYXZpIFByYXRhcCBwcm92aWRlZCB3b3JrIG9uIGxpYmN1cmwgbWFraW5nIHBpcGVsaW5pbmcgbW9yZSByb2J1c3QgYW5kCiAgZml4aW5nIHNvbWUgYnVnczoKICBvIERvbid0IG1peCBHRVQgYW5kIFBPU1QgcmVxdWVzdHMgaW4gYSBwaXBlbGluZQogIG8gRml4IHRoZSBvcmRlciBpbiB3aGljaCByZXF1ZXN0cyBhcmUgZGlzcGF0Y2hlZCBmcm9tIHRoZSBwaXBlbGluZQogIG8gRml4ZWQgc2V2ZXJhbCBjdXJsIGJ1Z3Mgd2l0aCBwaXBlbGluaW5nIHdoZW4gdGhlIHNlcnZlciBpcyByZXR1cm5pbmcKICAgIGNodW5rZWQgZW5jb2Rpbmc6CiAgICAqIEFkZGVkIHN0YXRlcyB0byBjaHVua2VkIHBhcnNpbmcgZm9yIGZpbmFsIENSTEYKICAgICogUmV3aW5kIGJ1ZmZlciBhZnRlciBwYXJzaW5nIGNodW5rIHdpdGggZGF0YSByZW1haW5pbmcKICAgICogTW92ZWQgY2h1bmtlZCBoZWFkZXIgaW5pdGlhbGl6aW5nIHRvIGEgc3BvdCBqdXN0IGJlZm9yZSByZWNlaXZpbmcKICAgICAgaGVhZGVycwoKRGFuaWVsICgyMCBGZWJydWFyeSAyMDA3KQotIExpbnVzIE5pZWxzZW4gRmVsdHppbmcgY2hhbmdlZCB0aGUgQ1VSTE9QVF9GVFBfU1NMX0NDQyBvcHRpb24gdG8gaGFuZGxlCiAgYWN0aXZlIGFuZCBwYXNzaXZlIENDQyBzaHV0ZG93biBhbmQgYWRkZWQgdGhlIC0tZnRwLXNzbC1jY2MtbW9kZSBjb21tYW5kCiAgbGluZSBvcHRpb24uCgpEYW5pZWwgKDE5IEZlYnJ1YXJ5IDIwMDcpCi0gSWFuIFR1cm5lciBmaXhlZCB0aGUgbGliY3VybC5tNCBtYWNybydzIHN1cHBvcnQgZm9yIC0td2l0aC1saWJjdXJsLgoKLSBTaG11bGlrIFJlZ2V2IGZvdW5kIGEgbWVtb3J5IGxlYWsgaW4gcmUtdXNlZCBIVFRQUyBjb25uZWN0aW9ucywgYXQgbGVhc3QKICB3aGVuIHRoZSBtdWx0aSBpbnRlcmZhY2Ugd2FzIHVzZWQuCgotIFJvYnNvbiBCcmFnYSBBcmF1am8gbWFkZSBwYXNzaXZlIEZUUCB0cmFuc2ZlcnMgd29yayB3aXRoIFNPQ0tTIChib3RoIDQgYW5kCiAgNSkuCgpEYW5pZWwgKDE4IEZlYnJ1YXJ5IDIwMDcpCi0gSmVmZiBQb2hsbWV5ZXIgaWRlbnRpZmllZCB0d28gcHJvYmxlbXM6IGZpcnN0IGEgcmF0aGVyIG9ic2N1cmUgcHJvYmxlbSB3aXRoCiAgdGhlIG11bHRpIGludGVyZmFjZSBhbmQgY29ubmVjdGlvbiByZS11c2UgdGhhdCBjb3VsZCBtYWtlIGEKICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoKSBydWluIGEgcG9pbnRlciBpbiBhbm90aGVyIGhhbmRsZS4KCiAgVGhlIHNlY29uZCBwcm9ibGVtIHdhcyBsZXNzIG9mIGFuIGFjdHVhbCBwcm9ibGVtIGJ1dCBtb3JlIG9mIG1pbm9yIHF1aXJrOgogIHRoZSByZS11c2luZyBvZiBjb25uZWN0aW9ucyB3YXNuJ3QgcHJvcGVybHkgY2hlY2tpbmcgaWYgdGhlIGNvbm5lY3Rpb24gd2FzCiAgbWFya2VkIGZvciBjbG9zdXJlLgoKRGFuaWVsICgxNiBGZWJydWFyeSAyMDA3KQotIER1bmNhbiBNYWMtVmljYXIgUHJldHQgYW5kIE1pY2hhbCBNYXJlayByZXBvcnRlZCBwcm9ibGVtcyB3aXRoIHJlc2V0dGluZwogIENVUkxPUFRfUkFOR0UgYmFjayB0byBubyByYW5nZSBvbiBhbiBlYXN5IGhhbmRsZSB3aGVuIHVzaW5nIEZUUC4KCkRhbiBGICgxNCBGZWJydWFyeSAyMDA3KQotIEZpeGVkIGN1cmwtY29uZmlnIC0tbGlicyBzbyBpdCBkb2Vzbid0IGxpc3QgdW5uZWNlc3NhcnkgbGlicmFyaWVzIChhbmQKICB0aGVyZWZvcmUgaW50cm9kdWNlIHVubmVjZXNzYXJ5IGRlcGVuZGVuY2llcykgd2hlbiBpdCdzIG5vdCBuZWVkZWQuCiAgQWxzbywgZG9uJ3QgYm90aGVyIGFkZGluZyBhIGxpYnJhcnkgcGF0aCBvZiAvdXNyL2xpYgoKRGFuaWVsICgxMyBGZWJydWFyeSAyMDA3KQotIFRoZSBkZWZhdWx0IHBhc3N3b3JkIGZvciBhbm9ueW1vdXMgRlRQIGNvbm5lY3Rpb25zIGlzIG5vdyBjaGFuZ2VkIHRvIGJlCiAgImZ0cEBleGFtcGxlLmNvbSIuCgotIFJvYmVydCBBLiBNb25hdCBtYWRlIGxpYmN1cmwgYnVpbGQgZmluZSB3aXRoIFZDMjAwNSAtIGl0IGRvZXNuJ3QgaGF2ZQogIGdtdGltZV9yKCkgbGlrZSB0aGUgb2xkZXIgVkMgdmVyc2lvbnMuIEhlIGFsc28gbWFkZSB1c2Ugb2Ygc29tZSBtYWNoaW5lLQogIHNwZWNpZmljIGRlZmluZXMgdG8gZGlmZmVyZW50aWF0ZSB0aGUgIk9TIiBkZWZpbmUuCgpEYW5pZWwgKDEyIEZlYnJ1YXJ5IDIwMDcpCi0gUm9iIENyaXR0ZW5kZW4gYWRkZWQgc3VwcG9ydCBmb3IgTlNTIChOZXR3b3JrIFNlY3VyaXR5IFNlcnZpY2UpIGZvciB0aGUKICBTU0wvVExTIGxheWVyLiBodHRwOi8vd3d3Lm1vemlsbGEub3JnL3Byb2plY3RzL3NlY3VyaXR5L3BraS9uc3MvCgogIFRoaXMgaXMgdGhlIGZvdXJ0aCBzdXBwb3J0ZWQgbGlicmFyeSBmb3IgVExTL1NTTCB0aGF0IGxpYmN1cmwgc3VwcG9ydHMhCgotIFNobXVsaWsgUmVnZXYgZml4ZWQgc28gdGhhdCB0aGUgZmluYWwgQ1JMRiBvZiBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgYXJlIHNlbnQKICB0byB0aGUgZGVidWcgY2FsbGJhY2suCgotIFNobXVsaWsgUmVnZXYgYWRkZWQgQ1VSTE9QVF9IVFRQX0NPTlRFTlRfREVDT0RJTkcgYW5kCiAgQ1VSTE9QVF9IVFRQX1RSQU5TRkVSX0RFQ09ESU5HIHRoYXQgaWYgc2V0IHRvIHplcm8gd2lsbCBkaXNhYmxlIGxpYmN1cmwncwogIGludGVybmFsIGRlY29kaW5nIG9mIGNvbnRlbnQgb3IgdHJhbnNmZXIgZW5jb2RlZCBjb250ZW50LiBUaGlzIG1heSBiZQogIHByZWZlcmFibGUgaW4gY2FzZXMgd2hlcmUgeW91IHVzZSBsaWJjdXJsIGZvciBwcm94eSBwdXJwb3NlcyBvciBzaW1pbGFyLiBUaGUKICBjb21tYW5kIGxpbmUgdG9vbCBnb3QgYSAtLXJhdyBvcHRpb24gdG8gZGlzYWJsZSBib3RoIGF0IG9uY2UuCgotIHJlbGVhc2UgdGFyYmFsbHMgbWFkZSB3aXRoIG1ha2V0Z3ogd2lsbCBmcm9tIG5vdyBvbiBoYXZlIGEgTElCQ1VSTF9USU1FU1RBTVAKICBkZWZpbmUgc2V0IHRvIGhvbGQgdGhlIGV4YWN0IGRhdGUgYW5kIHRpbWUgb2Ygd2hlbiB0aGUgdGFyYmFsbCB3YXMgYnVpbHQsIGFzCiAgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdXNpbmcgdGhlIFVUQyB0aW1lIHpvbmUuCiAgCi0gSmVmZiBQb2hsbWV5ZXIgZml4ZWQgYSBmbGF3IGluIGN1cmxfbXVsdGlfYWRkX2hhbmRsZSgpIHdoZW4gYWRkaW5nIGEgaGFuZGxlCiAgdGhhdCBoYXMgYW4gZWFzeSBoYW5kbGUgcHJlc2VudCBpbiB0aGUgImNsb3N1cmUiIGxpc3QgcGVuZGluZyBjbG9zdXJlLgoKRGFuaWVsICg2IEZlYnJ1YXJ5IDIwMDcpCi0gUmVndWxhciBmaWxlIGRvd25sb2FkcyB3aWh0IFNGVFAgYW5kIFNDUCBhcmUgbm93IGRvbmUgdXNpbmcgdGhlIG5vbi1ibG9ja2luZwogIEFQSSBvZiBsaWJzc2gyLCBpZiB0aGUgbGlic3NoMiBoZWFkZXJzIHNlZW0gdG8gc3VwcG9ydCB0aGVtLiBUaGlzIHdpbGwgbWFrZQogIFNDUCBhbmQgU0ZUUCBtdWNoIG1vcmUgcmVzcG9uc2l2ZSBhbmQgYmV0dGVyIGxpYmN1cmwgY2l0aXplbnMgd2hlbiB1c2VkIHdpdGgKICB0aGUgbXVsdGkgaW50ZXJmYWNlIGV0Yy4KCkRhbmllbCAoNSBGZWJydWFyeSAyMDA3KQotIE1pY2hhZWwgV2FsbG5lciBhZGRlZCBzdXBwb3J0IGZvciBDVVJMT1BUX1RJTUVPVVRfTVMgYW5kCiAgQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NUyB0aGF0LCBhcyB0aGVpciBuYW1lcyBzdWdnZXN0LCBkbyB0aGUgdGltZW91dHMgd2l0aAogIG1pbGxpc2Vjb25kIHJlc29sdXRpb24uIFRoZSBvbmx5IHJlc3RyaWN0aW9uIHRvIHRoYXQgaXMgdGhlIGFsYXJtKCkKICAoc29tZXRpbWVzKSB1c2VkIHRvIGFib3J0IG5hbWUgcmVzb2x2ZXMgYXMgdGhhdCB1c2VzIGZ1bGwgc2Vjb25kcy4gSSBmaXhlZAogIHRoZSBGVFAgcmVzcG9uc2UgdGltZW91dCBwYXJ0IG9mIHRoZSBwYXRjaC4KCiAgSW50ZXJuYWxseSB3ZSBub3cgY291bnQgYW5kIGtlZXAgdGhlIHRpbWVvdXRzIGluIG1pbGxpc2Vjb25kcyBidXQgaXQgYWxzbwogIG1lYW5zIHdlIG11bHRpcGx5IHNldCB0aW1lb3V0cyB3aXRoIDEwMDAuIFRoZSBlZmZlY3Qgb2YgdGhpcyBpcyB0aGF0IG5vCiAgdGltZW91dCBjYW4gYmUgc2V0IHRvIG1vcmUgdGhhbiAyXjMxIG1pbGxpc2Vjb25kcyAob24gMzIgYml0IHN5c3RlbXMpLCB3aGljaAogIGVxdWFscyAyNC44NiBkYXlzLiAgV2UgcHJvYmFibHkgY291bGRuJ3QgYmVmb3JlIGVpdGhlciBzaW5jZSB0aGUgY29kZSBkaWQKICAqMTAwMCBvbiB0aGUgdGltZW91dCB2YWx1ZXMgb24gc2V2ZXJhbCBwbGFjZXMgYWxyZWFkeS4KCkRhbmllbCAoMyBGZWJydWFyeSAyMDA3KQotIFlhbmcgVHNlIGZpeGVkIHRoZSBjb29raWUgZXhwaXJ5IGRhdGUgaW4gc2V2ZXJhbCB0ZXN0IGNhc2VzIHRoYXQgc3RhcnRlZCB0bwogIGZhaWwgc2luY2UgdGhleSB1c2VkICIxIGZlYiAyMDA3Ii4uLgoKLSBNYW5mcmVkIFNjaHdhcmIgcmVwb3J0ZWQgdGhhdCBzb2NrczUgc3VwcG9ydCB3YXMgYnJva2VuIGFuZCBoZWxwIHVzIHBpbnBvaW50CiAgdGhlIHByb2JsZW0uIFRoZSBjb2RlIG5vdyB0cmllcyBoYXJkZXIgdG8gdXNlIGh0dHByb3h5IGFuZCBwcm94eSB3aGVyZQogIGFwcHByb3ByaWF0ZSwgYXMgbm90IGFsbCBwcm94aWVzIGFyZSBIVFRQLi4uCgpWZXJzaW9uIDcuMTYuMSAoMjkgSmFudWFyeSAyMDA3KQoKRGFuaWVsICgyOSBKYW51YXJ5IDIwMDcpCi0gTWljaGFlbCBXYWxsbmVyIHJlcG9ydGVkIHRoYXQgd2hlbiBkb2luZyBhIENPTk5FQ1Qgd2l0aCBhIGN1c3RvbSBVc2VyLUFnZW50CiAgaGVhZGVyLCB5b3UgZ290IF90d29fIFVzZXItQWdlbnQgaGVhZGVycyBpbiB0aGUgQ09OTkVDVCByZXF1ZXN0Li4uISBBZGRlZAogIHRlc3QgY2FzZSAyODcgdG8gdmVyaWZ5IHRoZSBmaXguCgpEYW5pZWwgKDI4IEphbnVhcnkgMjAwNykKLSBjdXJsX2Vhc3lfcmVzZXQoKSBub3cgcmVzZXRzIHRoZSBDQSBidW5kbGUgcGF0aCBjb3JyZWN0bHkuCgotIERhdmlkIE1jQ3JlZWR5IGZpeGVkIHRoZSBDdXJsIGNvbW1hbmQgbGluZSB0b29sIGZvciBIVFRQIG9uIG5vbi1BU0NJSQogIHBsYXRmb3Jtcy4KCkRhbmllbCAoMjUgSmFudWFyeSAyMDA3KQotIEFkZGVkIHRoZSAtLWxpYmN1cmwgW2ZpbGVdIG9wdGlvbiB0byBjdXJsLiBBcHBlbmQgdGhpcyBvcHRpb24gdG8gYW55CiAgb3JkaW5hcnkgY3VybCBjb21tYW5kIGxpbmUsIGFuZCB5b3Ugd2lsbCBnZXQgYSBsaWJjdXJsLXVzaW5nIHNvdXJjZSBjb2RlCiAgd3JpdHRlbiB0byB0aGUgZmlsZSB0aGF0IGRvZXMgdGhlIGVxdWl2YWxlbnQgb3BlcmF0aW9uIG9mIHdoYXQgeW91ciBjb21tYW5kCiAgbGluZSBvcGVyYXRpb24gZG9lcyEKCkRhbiBGICgyNCBKYW51YXJ5IDIwMDcpCi0gRml4ZWQgYSBkYW5nbGluZyBwb2ludGVyIHByb2JsZW0gdGhhdCBwcmV2ZW50ZWQgdGhlIGh0dHBfcHJveHkgZW52aXJvbm1lbnQKICB2YXJpYWJsZSBmcm9tIGJlaW5nIHByb3Blcmx5IHVzZWQgaW4gbWFueSBjYXNlcyAoYW5kIGNhdXNlZCB0ZXN0IGNhc2UgNjMKICB0byBmYWlsKS4KCkRhbmllbCAoMjMgSmFudWFyeSAyMDA3KQotIERhdmlkIE1jQ3JlZWR5IGRpZCBOVExNIGNoYW5nZXMgbWFpbmx5IGZvciBub24tQVNDSUkgcGxhdGZvcm1zOgoKICAjMQogIFRoZXJlJ3MgYSBjb21waWxhdGlvbiBlcnJvciBpbiBodHRwX250bG0uYyBpZiBVU0VfTlRMTTJTRVNTSU9OIGlzIE5PVAogIGRlZmluZWQuICBJIG5vdGljZWQgdGhpcyB3aGlsZSB0ZXN0aW5nIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuICBMaW5lIDg2NyBvZgogIHRoZSBjdXJyZW50IGh0dHBfbnRsbS5jIGlzIGEgY2xvc2luZyBicmFja2V0IGZvciBhbiBpZi9lbHNlIHBhaXIgdGhhdCBvbmx5CiAgZ2V0cyBjb21waWxlZCBpbiBpZiBVU0VfTlRMTTJTRVNTSU9OIGlzIGRlZmluZWQuICBCdXQgdGhpcyBjbG9zaW5nIGJyYWNrZXQKICB3YXNuJ3QgaW4gYW4gI2lmZGVmIHNvIHRoZSBjb2RlIGZhaWxzIHRvIGNvbXBpbGUgdW5sZXNzIFVTRV9OVExNMlNFU1NJT04gd2FzCiAgZGVmaW5lZC4gIExpbmVzIDE5OCBhbmQgMTQwIG9mIG15IHBhdGNoIHdyYXBzIHRoYXQgY2xvc2luZyBicmFja2V0IGluIGFuCiAgI2lmZGVmIFVTRV9OVExNMlNFU1NJT04uCgogICMyCiAgSSBub3RpY2VkIHNldmVyYWwgcGlja3kgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiBERUJVR19NRSBpcyBkZWZpbmVkLiAgSSd2ZQogIGZpeGVkIHRoZW0gd2l0aCBjYXN0aW5nLiAgQnkgdGhlIHdheSwgREVCVUdfTUUgd2FzIGEgaHVnZSBoZWxwIGluCiAgdW5kZXJzdGFuZGluZyB0aGlzIGNvZGUuCgogICMzCiAgSG9wZWZ1bGx5IHRoZSBsYXN0IG5vbi1BU0NJSSBjb252ZXJzaW9uIHBhdGNoIGZvciBsaWJjdXJsIGluIGEgd2hpbGUuICBJCiAgY2hhbmdlZCB0aGUgIk5UTE1TU1AiIGxpdGVyYWwgdG8gaGV4IHNpbmNlIHRoaXMgc2lnbmF0dXJlIG11c3QgYWx3YXlzIGJlIGluCiAgQVNDSUkuCgogIENvbnZlcnNpb24gY29kZSB3YXMgc3RyYXRlZ2ljYWxseSBhZGRlZCB3aGVyZSBuZWNlc3NhcnkuICBBbmQgdGhlCiAgQ3VybF9iYXNlNjRfZW5jb2RlIGNhbGxzIHdlcmUgY2hhbmdlZCBzbyB0aGUgYmluYXJ5ICJibG9icyIgaHR0cF9udGxtLmMKICBjcmVhdGVzIGFyZSBOT1QgdHJhbnNsYXRlZCBvbiBub24tQVNDSUkgcGxhdGZvcm1zLgoKRGFuIEYgKDIyIEphbnVhcnkgMjAwNykKLSBDb252ZXJ0ZWQgKG1vc3Qgb2YpIHRoZSB0ZXN0IGRhdGEgZmlsZXMgaW50byBnZW51aW5lIFhNTC4gIEEgaGFuZGZ1bCBzdGlsbAogIGFyZSBub3QsIGR1ZSBtYWlubHkgdG8gdGhlIGxhY2sgb2Ygc3VwcG9ydCBmb3IgWE1MIGNoYXJhY3RlciBlbnRpdGllcwogIChlLmcuICYgPT4gJmFtcDsgKS4gIFRoaXMgd2lsbCBtYWtlIGl0IGVhc2llciB0byB2YWxpZGF0ZSB0ZXN0IGZpbGVzIHVzaW5nCiAgdG9vbHMgbGlrZSB4bWxsaW50LCBhcyB3ZWxsIGFzIHRvIGVkaXQgYW5kIHZpZXcgdGhlbSB1c2luZyBYTUwgdG9vbHMuCgpEYW5pZWwgKDE2IEphbnVhcnkgMjAwNykKLSBBcm1lbCBBc3NlbGluIGltcHJvdmVkIGxpYmN1cmwgdG8gYmVoYXZlIGEgbG90IGJldHRlciB3aGVuIGFuIGVhc3kgaGFuZGxlCiAgZG9pbmcgYW4gRlRQIHRyYW5zZmVyIGlzIHJlbW92ZWQgZnJvbSBhIG11bHRpIGhhbmRsZSBiZWZvcmUgY29tcGxldGlvbi4gVGhlCiAgZml4IGFsc28gZml4ZWQgdGhlICJhbGl2ZSBjb3VudGVyIiB0byBiZSBjb3JyZWN0IG9uICJwcmVtYXR1cmUgcmVtb3ZhbCIgZm9yCiAgYWxsIHByb3RvY29scy4KCkRhbiBGICgxNiBKYW51YXJ5IDIwMDcpCi0gRml4ZWQgYSBzbWFsbCBtZW1vcnkgbGVhayBpbiB0ZnRwIHVwbG9hZHMgZGlzY292ZXJlZCBieSBjdXJsJ3MgbWVtb3J5IGxlYWsKICBkZXRlY3Rvci4gIEFsc28gY2hhbmdlZCB0ZnRwIGRvd25sb2FkcyB0byBVUkwtdW5lc2NhcGUgdGhlIGRvd25sb2FkZWQKICBmaWxlIG5hbWUuCgpEYW5pZWwgKDE0IEphbnVhcnkgMjAwNykKLSBEYXZpZCBNY0NyZWVkeSBwcm92aWRlZCBsaWJjdXJsIGNoYW5nZXMgZm9yIGRvaW5nIEhUVFAgY29tbXVuaWNhdGlvbiBvbgogIG5vbi1BU0NJSSBwbGF0Zm9ybXMuIEl0IGRvZXMgYWRkIHNvbWUgY29tcGxleGl0eSwgbW9zdCBub3RhYmx5IHdpdGggbW9yZQogICNpZmRlZnMsIGJ1dCBJIHdhbnQgdG8gc2VlIHRoaXMgc3VwcG9ydGVkIGFkZGVkIGFuZCBJIGNhbid0IHNlZSBob3cgd2UgY2FuCiAgYWRkIGl0IHdpdGhvdXQgdGhlIGV4dHJhIHN0dWZmIGFkZGVkLgoKLSBTZXR0aW5nIENVUkxPUFRfQ09PS0lFTElTVCB0byAiQUxMIiB3aGVuIG5vIGNvb2tpZXMgYXQgYWxsIHdhcyBwcmVzZW50LAogIGxpYmN1cmwgd291bGQgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gcmVhZCBhIE5VTEwgcG9pbnRlci4KCkRhbmllbCAoMTIgSmFudWFyeSAyMDA3KQotIFRvYnkgUGV0ZXJzb24gZm91bmQgYSBuYXN0eSBidWcgdGhhdCBwcmV2ZW50ZWQgKGxpYiljdXJsIGZyb20gcHJvcGVybHkKICBkb3dubG9hZGluZyAobW9zdCkgdGhpbmdzIHRoYXQgd2VyZSBsYXJnZXIgdGhhbiA0R0Igb24gMzIgYml0IHN5c3RlbXMuICBNYXR0CiAgV2l0aGVyc3Bvb24gaGVscGVkIGFzIG5hcnJvdyBkb3duIHRoZSBwcm9ibGVtLgoKRGFuaWVsICg1IEphbnVhcnkgMjAwNykKLSBMaW51cyBOaWVsc2VuIEZlbHR6aW5nIGludHJvZHVjZWQgdGhlIC0tZnRwLXNzbC1jY2MgY29tbWFuZCBsaW5lIG9wdGlvbiB0bwogIGN1cmwgdGhhdCB1c2VzIHRoZSBuZXcgQ1VSTE9QVF9GVFBfU1NMX0NDQyBvcHRpb24gaW4gbGliY3VybC4gSWYgZW5hYmxlZCwgaXQKICB3aWxsIG1ha2UgbGliY3VybCBzaHV0ZG93biBTU0wvVExTIGFmdGVyIHRoZSBhdXRoZW50aWNhdGlvbiBpcyBkb25lIG9uIGEKICBGVFAtU1NMIG9wZXJhdGlvbi4KCkRhbmllbCAoNCBKYW51YXJ5IDIwMDcpCi0gRGF2aWQgTWNDcmVlZHkgbWFkZSBjaGFuZ2VzIHRvIGFsbG93IGJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0byB3b3JrIG9uCiAgbm9uLUFTQ0lJIHBsYXRmb3Jtcy4KCkRhbmllbCAoMyBKYW51YXJ5IDIwMDcpCi0gTWF0dCBXaXRoZXJzcG9vbiBmaXhlZCB0aGUgZmxhdyB3aGljaCBtYWRlIGxpYmN1cmwgNy4xNi4wIGFsd2F5cyBzdG9yZQogIGRvd25sb2FkZWQgZGF0YSBpbiB0d28gYnVmZmVycywganVzdCB0byBiZSBhYmxlIHRvIGRlYWwgd2l0aCBhIHNwZWNpYWwgSFRUUAogIHBpcGVsaW5pbmcgY2FzZS4gVGhhdCBpcyBub3cgb25seSBhY3RpdmF0ZWQgZm9yIHBpcGVsaW5lZCB0cmFuc2ZlcnMuIEluCiAgTWF0dCdzIGNhc2UsIGl0IHNob3dlZCBhcyBhIGNvbnNpZGVyYWJsZSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlLAoKRGFuaWVsICgyIEphbnVhcnkgMjAwNykKLSBWaWN0b3IgU25lemhrbyBoZWxwZWQgdXMgZml4IGJ1ZyByZXBvcnQgIzE2MDM3MTIKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTYwMzcxMikgKGtub3duIGJ1ZyAjMzYpIC0tbGltaXQtcmF0ZQogIChDVVJMT1BUX01BWF9TRU5EX1NQRUVEX0xBUkdFIGFuZCBDVVJMT1BUX01BWF9SRUNWX1NQRUVEX0xBUkdFKSBhcmUgYnJva2VuCiAgb24gV2luZG93cyAoc2luY2UgNy4xNi4wLCBidXQgdGhhdCdzIHdoZW4gdGhleSB3ZXJlIGludHJvZHVjZWQgYXMgcHJldmlvdXMKICB0byB0aGF0IHRoZSBsaW1pdGluZyBsb2dpYyB3YXMgbWFkZSBpbiB0aGUgYXBwbGljYXRpb24gb25seSBhbmQgbm90IGluIHRoZQogIGxpYnJhcnkpLiBJdCB3YXMgYWN0dWFsbHkgYWxzbyBicm9rZW4gb24gc2VsZWN0KCktYmFzZWQgc3lzdGVtcyAoYXMgYXBwb3NlZAogIHRvIHBvbGwoKSkgYnV0IHdlIGhhdmVuJ3QgaGFkIGFueSBzdWNoIHJlcG9ydHMuIFdlIG5vdyB1c2Ugc2VsZWN0KCksIFNsZWVwKCkKICBvciBkZWxheSgpIHByb3Blcmx5IHRvIHNsZWVwIGEgd2hpbGUgd2l0aG91dCB3YWl0aW5nIGZvciBhbnl0aGluZyBpbnB1dCBvcgogIG91dHB1dCB3aGVuIHRoZSByYXRlIGxpbWl0aW5nIGlzIGFjdGl2YXRlZCB3aXRoIHRoZSBlYXN5IGludGVyZmFjZS4KCi0gTW9kaWZpZWQgbGliY3VybC5wYy5pbiB0byB1c2UgTGlicy5wcml2YXRlIGZvciB0aGUgbGlicyBsaWJjdXJsIGl0c2VsZiBuZWVkcwogIHRvIGdldCBidWlsdCBzdGF0aWMuIEl0IGhhcyBiZWVuIG1lbnRpb25lZCBiZWZvcmUgYW5kIHdhcyBhZ2FpbiBicm91Z2h0IHRvCiAgb3VyIGF0dGVudGlvbiBieSBOYXRoYW5hZWwgTmVyb2RlIHdobyBmaWxlZCBkZWJpYW4gYnVnIHJlcG9ydCAjNDA1MjI2CiAgKGh0dHA6Ly9idWdzLmRlYmlhbi5vcmcvY2dpLWJpbi9idWdyZXBvcnQuY2dpP2J1Zz00MDUyMjYpLgoK