ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ffCB8IHwgfCAgXyBcfCB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoX198IHxffCB8ICBfIDx8IHxfX18KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcX19ffFxfX18vfF98IFxfXF9fX19ffAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5nZWxvZwoKRGFuaWVsIFMgKDIzIEp1bmUgMjAwNykKLSBBcyByZXBvcnRlZCBieSAiVHJvIiBpbiBodHRwOi8vY3VybC5oYXh4LnNlL21haWwvbGliLTIwMDctMDYvMDE2MS5odG1sIGFuZAogIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwNy0wNi8wMjM4Lmh0bWwsIGxpYmN1cmwgZGlkbid0IHByb3Blcmx5IGRvCiAgbm8tYm9keSByZXF1ZXN0cyBvbiBGVFAgZmlsZXMgb24gcmUtdXNlZCBjb25uZWN0aW9ucyBwcm9wZXJseSwgb3IgYXQgbGVhc3QKICBpdCBkaWRuJ3QgcHJvdmlkZSB0aGUgaW5mbyBiYWNrIGluIHRoZSBoZWFkZXIgY2FsbGJhY2sgcHJvcGVybHkgaW4gdGhlCiAgc3Vic2VxdWVudCByZXF1ZXN0cy4KCkRhbmllbCBTICgyMSBKdW5lIDIwMDcpCi0gR2Vycml0IEJydWNoaOR1c2VyIHBvaW50ZWQgb3V0IGEgd2FybmluZyB0aGF0IHRoZSBJbnRlbChSKSBUaHJlYWQgQ2hlY2tlcgogIHRvb2wgcmVwb3J0cyBhbmQgaXQgd2FzIGluZGVlZCBhIGxlZ2l0aW1hdGUgb25lIGFuZCBpdCBpcyBvbmUgZml4ZWQuIEl0IHdhcwogIGEgdXNlIG9mIGEgc2hhcmUgd2l0aG91dCBkb2luZyB0aGUgcHJvcGVyIGxvY2tpbmcgZmlyc3QuCiAgCkRhbmllbCBTICgyMCBKdW5lIDIwMDcpCi0gQWRhbSBQaWdnb3R0IGZpbGVkIGJ1ZyByZXBvcnQgIzE3NDAyNjMKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTc0MDI2MykuIEFkYW0gZGlzY292ZXJlZCB0aGF0IHdoZW4KICBnZXR0aW5nIGEgbGFyZ2UgYW1vdW50IG9mIFVSTHMgd2l0aCBjdXJsLCB0aGV5IHdlcmUgZmV0Y2hlZCBzbG93ZXIgYW5kCiAgc2xvd2VyLi4uIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUgYmVjYXVzZSB0aGUgLS1saWJjdXJsIGRhdGEgY29sbGVjdGluZyB3aGljaAogIHdyb25nbHkgYWx3YXlzIHdhcyBlbmFibGVkLCBidXQgbm8gbG9uZ2VyIGlzLi4uCgpEYW5pZWwgUyAoMTggSnVuZSAyMDA3KQotIFJvYnNvbiBCcmFnYSBBcmF1am8gZmlsZWQgYnVnIHJlcG9ydCAjMTczOTEwMAogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNzM5MTAwKSB0aGF0IG1lbnRpb25lZCB0aGF0IGxpYmN1cmwKICBjb3VsZCBub3QgYWN0dWFsbHkgbGlzdCB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IG9mIGEgZ2l2ZW4gRlRQCiAgc2VydmVyIGlmIHRoZSBsb2dpbiBkaXJlY3RvcnkgaXNuJ3Qgcm9vdC4gSSBmaXhlZCB0aGUgcHJvYmxlbSBhbmQgYWRkZWQKICB0aHJlZSB0ZXN0IGNhc2VzIChvbmUgaXMgZGlzYWJsZWQgZm9yIG5vdyBzaW5jZSBJIGlkZW50aWZpZWQgS05PV05fQlVHUyAjNDQsCiAgd2UgY2Fubm90IHVzZSAtLWZ0cC1tZXRob2Qgbm9jd2QgYW5kIGxpc3QgZnRwIGRpcmVjdG9yaWVzKS4KCkRhbmllbCBTICgxNCBKdW5lIDIwMDcpCi0gU2htdWxpayBSZWdldjoKCiAgSSd2ZSBlbmNvdW50ZXJlZCAoYW5kIGhvcGVmdWxseSBmaXhlZCkgYSBwcm9ibGVtIGludm9sdmluZyBwcm94eSBDT05ORUNUCiAgcmVxdWVzdHMgYW5kIGVhc3kgaGFuZGxlcyBzdGF0ZSBtYW5hZ2VtZW50LiBUaGUgcHJvYmxlbSBpc24ndCBzaW1wbGUgdG8KICByZXByb2R1Y2Ugc2luY2UgaXQgZGVwZW5kcyBvbiBzb2NrZXQgc3RhdGUuIEl0IG9ubHkgbWFuaWZlc3RzIGl0c2VsZiB3aGVuCiAgd29ya2luZyB3aXRoIG5vbi1ibG9ja2luZyBzb2NrZXRzLgoKICBIZXJlIGlzIHRoZSBzY2VuYXJpbzoKCiAgMS4gaW4gbXVsdGlfcnVuc2luZ2xlIHRoZSBlYXN5IGhhbmRsZSBpcyBpbiB0aGUgQ1VSTE1fU1RBVEVfV0FJVENPTk5FQ1QgYW5kCiAgY2FsbHMgQ3VybF9wcm90b2NvbF9jb25uZWN0CgogIDIuIGluIEN1cmxfcHJveHlDT05ORUNULCBsaW5lIDEyNDcsIGlmIHRoZSBzb2NrZXQgaXNuJ3QgcmVhZHkgdGhlIGZ1bmN0aW9uCiAgcmV0dXJucyBhbmQgY29ubi0+Yml0cy50dW5uZWxfY29ubmVjdGluZyBpcyBUUlVFCgogIDMuIHdoZW4gdGhlIGNhbGwgdG8gQ3VybF9wcm90b2NvbF9jb25uZWN0IHJldHVybnMgdGhlIHByb3RvY29sX2Nvbm5lY3QgZmxhZwogIGlzIGZhbHNlIGFuZCB0aGUgZWFzeSBzdGF0ZSBpcyBjaGFuZ2VkIHRvIENVUkxNX1NUQVRFX1BST1RPQ09OTkVDVCB3aGljaAogIGlzbid0IGNvcnJlY3QgaWYgYSBwcm94eSBpcyB1c2VkLiAgUmF0aGVyIENVUkxNX1NUQVRFX1dBSVRQUk9YWUNPTk5FQ1QKICBzaG91bGQgYmUgdXNlZC4KCiAgSSBkaXNjb3ZlcmVkIHRoaXMgd2hpbGUgcGVyZm9ybWluZyBhbiBIVFRQUyByZXF1ZXN0IHRocm91Z2ggYSBwcm94eSAoc3F1aWQpCiAgb24gbXkgbG9jYWwgbmV0d29yay4gVGhlIHByb2JsZW0gY2F1c2VkIG9wZW5zc2wgdG8gZmFpbCBhcyBpdCByZWFkIHRoZSBwcm94eQogIHJlc3BvbnNlIHRvIHRoZSBDT05ORUNUIGNhbGwgKCdIVFRQLzEuMCBFc3RhYmxpc2hlZCcpIHJhdGhlciB0aGFuIHRoZSBTU0wKICBoYW5kc2hha2UgKHRoZSBleGFjdCBvcGVuc3NsIGVycm9yIHdhcyAnd3Jvbmcgc3NsIHZlcnNpb24nIGJ1dCB0aGlzIGlzbid0CiAgdmVyeSBpbXBvcnRhbnQpCgotIERhdmUgVmFzaWxldnNreSBmaWxlZCBidWcgcmVwb3J0ICMxNzM2ODc1CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE3MzY4NzUpIGFsbW9zdCBzaW11bHRhbm91ZXNseSBhcyBEYW4KICBGYW5kcmljaCBtZW50aW9uZWQgYSByZWxhdGVkIGJ1aWxkIHByb2JsZW0gb24gdGhlIGxpYmN1cmwgbWFpbGluZyBsaXN0OgogIGh0dHA6Ly9jdXJsLmhheHguc2UvbWFpbC9saWItMjAwNy0wNi8wMTMxLmh0bWwuIEJvdGggcHJvYmxlbXMgaGFkIHRoZSBzYW1lCiAgcmVhc29uOiB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIFBPTEwqIGRlZmluZXMgYW5kIHRoZSBwb2xsZmQgc3RydWN0IGluIHRoZQogIGxpYmN1cmwgY29kZSB3YXMgZGVwZW5kaW5nIG9uIEhBVkVfUE9MTCBpbnN0ZWFkIG9mIEhBVkVfU1lTX1BPTExfSC4KCkRhbmllbCBTICgxMyBKdW5lIDIwMDcpCi0gVG9tIFJlZ25lciBwcm92aWRlZCBhIHBhdGNoIGFuZCB3b3JrZWQgdG9nZXRoZXIgd2l0aCBKYW1lcyBIb3VzbGV5LCBzbyBub3cKICBDVVJMT1BUX0ZUUF9DUkVBVEVfTUlTU0lOR19ESVJTIHdvcmtzIGZvciBTRlRQIGNvbm5lY3Rpb25zIGFzIHdlbGwgYXMgRlRQCiAgb25lcy4KCi0gUmljaCBSYXVlbnphaG4gZmlsZWQgYnVnIHJlcG9ydCAjMTczMzExOQogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNzMzMTE5KSBhbmQgd2UgY29sbGFib3JhdGVkIG9uIHRoZQogIGZpeC4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgZm9yIDY0Yml0IEhQVVggYnVpbGRzLCBzZXZlcmFsIHNvY2tldC1yZWxhdGVkCiAgZnVuY3Rpb25zIHdvdWxkIHN0aWxsIGFzc3VtZSBpbnQgKDMyIGJpdCkgYXJndW1lbnRzIGFuZCBub3Qgc29ja2xlbl90ICg2NAogIGJpdCkgb25lcy4KCkRhbmllbCBTICgxMiBKdW5lIDIwMDcpCi0gSmFtZXMgSG91c2xleSBicm91Z2h0IGhpcyByZXZhbXBlZCBTU0ggY29kZSB0aGF0IGlzIHN0YXRlLW1hY2hpbmUgZHJpdmVuIHRvCiAgcmVhbGx5IHRha2UgYWR2YW50YWdlIG9mIHRoZSBub3cgdG90YWxseSBub24tYmxvY2tpbmcgbGlic3NoMiAoaW4gQ1ZTKS4KCkRhbiBGICg4IEp1bmUgMjAwNykKLSBJbmNvcnBvcmF0ZWQgRGFuaWVsIEJsYWNrJ3MgdGVzdDcwNiBhbmQgdGVzdDcwNyBTT0NLUyB0ZXN0IGNhc2VzLgoKLSBGaXhlZCBhIGZldyBwcm9ibGVtcyB3aGVuIHN0YXJ0aW5nIHRoZSBTT0NLUyBzZXJ2ZXIuCgotIFJldmVydGVkIHNvbWUgcmVjZW50IGNoYW5nZXMgdG8gcnVudGVzdHMucGwgdGhhdCB3ZXJlbid0IGNvbXBhdGlibGUgd2l0aAogIHBlcmwgNS4wLgoKLSBGaXhlZCB0aGUgdGVzdCBoYXJuZXNzIHNvIHRoYXQgaXQgYWN0dWFsbHkga2lsbHMgdGhlIHNzaCBiZWluZyB1c2VkIGFzCiAgdGhlIFNPQ0tTIHNlcnZlci4KCkRhbmllbCBTICg2IEp1bmUgMjAwNykKLSAtcy8tLXNpbGVudCBjYW4gbm93IGJlIHVzZWQgdG8gdG9nZ2xlIG9mZiB0aGUgc2lsZW5jZSBhZ2FpbiBpZiB1c2VkIGEgc2Vjb25kCiAgdGltZS4KCkRhbmllbCBTICg1IEp1bmUgMjAwNykKLSBBZGRlZCBEYW5pZWwgQmxhY2sncyB3b3JrIHRoYXQgYWRkcyB0aGUgZmlyc3QgZmV3IFNPQ0tTIHRlc3QgY2FzZXMuIEkgYWxzbwogIGZpeGVkIHR3byBtaW5vciBTT0NLUyBwcm9ibGVtcyB0byBtYWtlIHRoZSB0ZXN0IGNhc2VzIHJ1biBmaW5lLgoKRGFuaWVsIFMgKDMxIE1heSAyMDA3KQotIEZlbmcgVHUgbWFkZSAobGliKWN1cmwgc3VwcG9ydCAidXBsb2FkIiByZXN1bWluZyB3b3JrIGZvciBmaWxlOi8vIFVSTHMuCgpEYW5pZWwgUyAoMzAgTWF5IDIwMDcpCi0gSSBtb2RpZmllZCB0aGUgMTAtYXQtYS10aW1lLmMgZXhhbXBsZSB0byB0cmFuc2ZlciA1MDAgZG93bmxvYWRzIGluIHBhcmFsbGVsCiAgd2l0aCBhIGMtYXJlcyBlbmFibGVkIGJ1aWxkIG9ubHkgdG8gZmluZCB0aGF0IGl0IGNyYXNoZWQgbWlzZXJhYmx5LCBhbmQgdGhpcwogIHdhcyBkdWUgdG8gc29tZSBzZWxlY3QoKWlzbXMgbGVmdCBpbiB0aGUgY29kZS4gVGhpcyB3YXMgZHVlIHRvIEFQSQogIHJlc3RyaWN0aW9ucyBpbiBjLWFyZXMgMS4zLngsIGJ1dCB3aXRoIHRoZSB1cGNvbWluZyBjLWFyZXMgMS40LjAgdGhpcyBpcyBubwogIGxvbmdlciB0aGUgY2FzZSBzbyBub3cgbGliY3VybCBydW5zIG11Y2ggYmV0dGVyIHdpdGggYy1hcmVzIGFuZCB0aGUgbXVsdGkKICBpbnRlcmZhY2Ugd2l0aCA+IDEwMjQgZmlsZSBkZXNjcmlwdG9ycyBpbiB1c2UuCgogIEV4dHJhIG5vdGU6IHN0YXJ0aW5nIG5vdyB3ZSByZXF1aXJlIGMtYXJlcyAxLjQuMCBmb3IgYXN5bmNocm9ub3VzIG5hbWUKICByZXNvbHZlcy4KCi0gQWRkZWQgQ1VSTE1PUFRfTUFYQ09OTkVDVFMgd2hpY2ggaXMgYSBjdXJsX211bHRpX3NldG9wdCgpIG9wdGlvbiBmb3Igc2V0dGluZwogIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNvbm5lY3Rpb24gY2FjaGUgbWF4aW11bSBzaXplIG9mIHRoZSBtdWx0aSBoYW5kbGUuCgpEYW5pZWwgUyAoMjcgTWF5IDIwMDcpCi0gV2hlbiB3b3JraW5nIHdpdGggYSBwcm9ibGVtIFN0ZWZhbiBCZWNrZXIgaGFkLCBJIGZvdW5kIGFuIG9mZi1ieS1vbmUgYnVmZmVyCiAgb3ZlcndyaXRlIGluIEN1cmxfc2VsZWN0KCkuIFdoaWxlIGZpeGluZyBpdCwgSSBhbHNvIGltcHJvdmVkIGl0cyBwZXJmb3JtYW5jZQogIHNvbWV3aGF0IGJ5IGNoYW5naW5nIGNhbGxvYyB0byBtYWxsb2MgYW5kIGJyZWFraW5nIG91dCBvZiBhIGxvb3AgZWFybGllcgogICh3aGVuIHBvc3NpYmxlKS4KCkRhbmllbCBTICgyNSBNYXkgMjAwNykKLSBSb2IgQ3JpdHRlbmRlbiBmaXhlZCBidWcgIzE3MDU4MDIKICAoaHR0cDovL2N1cmwuaGF4eC5zZS9idWcvdmlldy5jZ2k/aWQ9MTcwNTgwMiksIHdoaWNoIHdhcyBmaWxlZCBieSBEYW5pZWwKICBCbGFjayBpZGVudGlmeWluZyBzZXZlcmFsIEZUUC1TU0wgdGVzdCBjYXNlcyBmYWlsIHdoZW4gd2UgYnVpbGQgbGliY3VybCB3aXRoCiAgTlNTIGZvciBUTFMvU1NMLiBMaXN0ZWQgYXMgIzQyIGluIEtOT1dOX0JVR1MuCgpEYW5pZWwgUyAoMjQgTWF5IDIwMDcpCi0gU29uZyBNYSBmaWxlZCBidWcgcmVwb3J0ICMxNzI0MDE2CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE3MjQwMTYpIG5vdGljaW5nIHRoYXQgZG93bmxvYWRpbmcKICBnbG9iLXJhbmdlcyBmb3IgVEZUUCB3YXMgYnJva2VuIGluIENWUy4gRml4ZWQgbm93LgogIAotICdteXR4JyBpbiBidWcgcmVwb3J0ICMxNzIzMTk0IChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNzIzMTk0KQogIHBvaW50ZWQgb3V0IHRoYXQgdGhlIHdhcm5mKCkgZnVuY3Rpb24gaW4gdGhlIGN1cmwgdG9vbCBkaWRuJ3QgcHJvcGVybHkgZGVhbAogIHdpdGggdGhlIGNhc2VzIHdoZW4gZXhjZXNzaXZlbHkgbG9uZyB3b3JkcyB3ZXJlIHVzZWQgaW4gdGhlIHN0cmluZyB0byBjaG9wCiAgdXAuCgpEYW5pZWwgUyAoMjIgTWF5IDIwMDcpCi0gQW5kcmUgR3VpYmVydCBkZSBCcnVldCBmaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBmdW5jdGlvbiB0aGF0IHZlcmlmaWVzIHRoZQogIHBlZXIncyBuYW1lIGluIHRoZSBTU0wgY2VydGlmaWNhdGUgd2hlbiBidWlsdCBmb3IgT3BlblNTTC4gVGhlIGxlYWsgaGFwcGVucwogIGZvciBsaWJjdXJscyB3aXRoIENVUkxfRE9FU19DT05WRVJTSU9OUyBlbmFibGVkIHRoYXQgZmFpbCB0byBjb252ZXJ0IHRoZSBDTgogIG5hbWUgZnJvbSBVVEY4LiBIZSBhbHNvIGZpeGVkIGEgbGVhayB3aGVuIFBLQ1MgIzEyIHBhcnNpbmcgZmFpbGVkLgoKRGFuaWVsIFMgKDE4IE1heSAyMDA3KQotIEZlbmcgVHUgcmVwb3J0ZWQgdGhhdCBjdXJsIC13IGRpZCB3cm9uZyBvbiBURlRQIHRyYW5zZmVycyBpbiBidWcgcmVwb3J0CiAgIzE3MTUzOTQgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE3MTUzOTQpLCBhbmQgdGhlCiAgdHJhbnNmZXItcmVsYXRlZCBpbmZvICJ2YXJpYWJsZXMiIHdlcmUgaW5kZWVkIG92ZXJ3cml0dGVuIHdpdGggemVyb2VzCiAgd3JvbmdseSBhbmQgaGF2ZSBub3cgYmVlbiBhZGp1c3RlZC4gVGhlIHVwbG9hZCBzaXplIHN0aWxsIGlzbid0IGFjY3VyYXRlLgoKRGFuaWVsIFMgKDE3IE1heSAyMDA3KQotIEZlbmcgVHUgcG9pbnRlZCBvdXQgYSBkaXZpc2lvbiBieSB6ZXJvIGVycm9yIGluIHRoZSBURlRQIGNvbm5lY3QgdGltZW91dAogIGNvZGUgZm9yIHRpbWVvdXRzIGxlc3MgdGhhbiBmaXZlIHNlY29uZHMsIGFuZCBhbHNvIHByb3ZpZGVkIGEgZml4IGZvciBpdC4KICBCdWcgcmVwb3J0ICMxNzE1MzkyIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNzE1MzkyKQoKRGFuIEYgKDE2IE1heSAyMDA3KQotIEFkZGVkIHN1cHBvcnQgZm9yIGNvbXBpbGluZyB1bmRlciBNaW5peCAzLjEuMyB1c2luZyBBQ0suCgpEYW4gRiAoMTQgTWF5IDIwMDcpCi0gQWRkZWQgU0ZUUCBkaXJlY3RvcnkgbGlzdGluZyB0ZXN0IGNhc2UgNjEzLgoKLSBBZGRlZCBzdXBwb3J0IGZvciBxdW90ZSBjb21tYW5kcyBiZWZvcmUgYSB0cmFuc2ZlciB1c2luZyBTRlRQIGFuZCB0ZXN0CiAgY2FzZSA2MTQuCgotIENoYW5nZWQgdGhlIHBvc3QtcXVvdGUgY29tbWFuZHMgdG8gb2NjdXIgYWZ0ZXIgdGhlIHRyYW5zZmVycmVkIGZpbGUgaXMKICBjbG9zZWQuCgotIEFsbG93IFNGVFAgcXVvdGUgY29tbWFuZHMgY2htb2QsIGNob3duLCBjaGdycCB0byBzZXQgYSB2YWx1ZSBvZiAwLgoKRGFuIEYgKDkgTWF5IDIwMDcpCi0gS3Jpc3RpYW4gR3Vuc3RvbmUgZml4ZWQgYSBwcm9ibGVtIHdoZXJlIG92ZXJ3cml0aW5nIGFuIHVwbG9hZGVkIGZpbGUgd2l0aAogIHNmdHAgZGlkbid0IHRydW5jYXRlIGl0IGZpcnN0LCB3aGljaCB3b3VsZCBjb3JydXB0IHRoZSBmaWxlIGlmIHRoZSBuZXcKICBmaWxlIHdhcyBzaG9ydGVyIHRoYW4gdGhlIG9sZC4KCkRhbiBGICg4IE1heSAyMDA3KQotIEFkZGVkIEZUUFMgdGVzdCBjYXNlcyA0MDYgYW5kIDQwNwoKRGFuaWVsIFMgKDggTWF5IDIwMDcpCi0gQ1VSTEVfRlRQX0NPVUxETlRfU1RPUl9GSUxFIGlzIG5vdyBrbm93biBhcyBDVVJMRV9VUExPQURfRkFJTEVELiBUaGlzIGlzCiAgYmVjYXVzZSBJIGp1c3QgbWFkZSBTQ1AgdXBsb2FkcyByZXR1cm4gdGhpcyB2YWx1ZSBpZiB0aGUgZmlsZSBzaXplIG9mCiAgdGhlIHVwbG9hZCBmaWxlIGlzbid0IGdpdmVuIHdpdGggQ1VSTE9QVF9JTkZJTEVTSVpFKi4gRG9jcyB1cGRhdGVkIHRvCiAgcmVmbGVjdCB0aGlzIG5ld3MsIGFuZCBhIGRlZmluZSBmb3IgdGhlIG9sZCBuYW1lIHdhcyBhZGRlZCB0byB0aGUgcHVibGljCiAgaGVhZGVyIGZpbGUuCgpEYW5pZWwgUyAoNyBNYXkgMjAwNykKLSBKYW1lcyBCdXJzYSBmaXhlZCBhIGJ1ZyBpbiB0aGUgbXVsdGkgaGFuZGxlIGNvZGUgdGhhdCBtYWRlIHRoZSBjb25uZWN0aW9uCiAgY2FjaGUgZ3JvdyBhIGJpdCB0b28gbXVjaCwgYmV5b25kIHRoZSBub3JtYWwgNCAqIGVhc3lfaGFuZGxlcy4KCkRhbmllbCBTICgyIE1heSAyMDA3KQotIEFuZGVycyBHdXN0YWZzc29uIHJlbWFya2VkIHRoYXQgcmVxdWlyaW5nIENVUkxPUFRfSFRUUF9WRVJTSU9OIHNldCB0byAxLjAKICB3aGVuIENVUkxPUFRfSFRUUDIwMEFMSUFTRVMgaXMgdXNlZCB0byBhdm9pZCB0aGUgcHJvYmxlbSBtZW50aW9uZWQgYmVsb3cgaXMKICBub3QgdmVyeSBuaWNlIGlmIHRoZSBjbGllbnQgd2FudHMgdG8gYmUgYWJsZSB0byB1c2UgX2VpdGhlcl8gYSBIVFRQIDEuMQogIHNlcnZlciBvciBvbmUgd2l0aGluIHRoZSBhbGlhc2VzIGxpc3QuLi4gc28gc3RhcnRpbmcgbm93LCBsaWJjdXJsIHdpbGwKICBzaW1wbHkgY29uc2lkZXIgMjAwLWFsaWFzIG1hdGNoZXMgdGhlIHRvIGJlIEhUVFAgMS4wIGNvbXBsaWFudC4KCi0gVG9iaWFzIFJ1bmRzdHL2bSByZXBvcnRlZCBhIHByb2JsZW0gdGhleSBleHBlcmllbmNlZCB3aXRoIHhtbXMyIGFuZCByZWNlbnQKICBsaWJjdXJscywgd2hpY2ggdHVybmVkIG91dCB0byBiZSB0aGUgMjUtbm92LTIwMDYgY2hhbmdlIHdoaWNoIHRyZWF0cyBIVFRQCiAgcmVzcG9uc2VzIHdpdGhvdXQgQ29udGVudC1MZW5ndGggb3IgY2h1bmtlZCBlbmNvZGluZyBhcyB3aXRob3V0IGJvZGllcy4gV2UKICBub3cgYWRkZWQgdGhlIGNvbmRpdGlvbmFsIHRoYXQgdGhlIGFib3ZlIG1lbnRpb25lZCByZXNwb25zZSBpcyBvbmx5IHdpdGhvdXQKICBib2R5IGlmIHRoZSByZXNwb25zZSBpcyBIVFRQIDEuMS4KCi0gSmVmZiBQb2hsbWV5ZXIgaW1wcm92ZWQgdGhlIGhpcGVyZmlmby5jIGV4YW1wbGUgdG8gdXNlIHRoZQogIENVUkxNT1BUX1RJTUVSRlVOQ1RJT04gY2FsbGJhY2sgb3B0aW9uLgoKLSBTZXQgdGhlIHRpbWVvdXQgZm9yIGVhc3kgaGFuZGxlcyB0byBleHBpcmUgcmVhbGx5IHNvb24gYWZ0ZXIgYWRkaXRpb24gb3IKICB3aGVuIENVUkxNX0NBTExfTVVMVElfUEVSRk9STSBpcyByZXR1cm5lZCBmcm9tIGN1cmxfbXVsdGlfc29ja2V0Ki9wZXJmb3JtLAogIHRvIG1ha2UgYXBwbGljYXRpb25zIHVzaW5nIG9ubHkgY3VybF9tdWx0aV9zb2NrZXQoKSB0byBwcm9wZXJseSBmdW5jdGlvbgogIHdoZW4gYWRkaW5nIGVhc3kgaGFuZGxlcyAib24gdGhlIGZseSIuIEJ1ZyByZXBvcnQgYW5kIHRlc3QgYXBwIHByb3ZpZGVkIGJ5CiAgTWljaGFlbCBXYWxsbmVyLgoKRGFuIEYgKDMwIEFwcmlsIDIwMDcpCi0gSW1wcm92ZWQgdGhlIHRlc3QgaGFybmVzcyB0byBhbGxvdyBydW5uaW5nIHRlc3Qgc2VydmVycyBvbiBvdGhlciB0aGFuCiAgdGhlIGRlZmF1bHQgcG9ydCBudW1iZXJzLCBhbGxvd2luZyBtb3JlIHRoYW4gb25lIHRlc3Qgc3VpdGUgdG8gcnVuCiAgc2ltdWx0YW5lb3VzbHkgb24gdGhlIHNhbWUgaG9zdC4KCkRhbmllbCBTICgyOCBBcHJpbCAyMDA3KQotIFBldGVyIE8nR29ybWFuIGZpeGVkIGxpYmN1cmwgdG8gbm90IGluaXQgR251VExTIGFzIGVhcmx5IGFzIHdlIGRpZCBiZWZvcmUsCiAgc2luY2UgaXQgdGhlbiBpbml0cyBsaWJnY3J5cHQgYW5kIGxpYmdjcnlwdCBpcyBiZWluZyBldmlsIGFuZCBFWElUUyB0aGUKICBhcHBsaWNhdGlvbiBpZiBpdCBmYWlscyB0byBnZXQgYSBmaW5lIHJhbmRvbSBzZWVkLiBUaGF0J3MgcmVhbGx5IG5vdCBhIG5pY2UKICB0aGluZyB0byBkbyBieSBhIGxpYnJhcnkuCgotIEZyYW5rIEhlbXBlbCBmaXhlZCBhIGN1cmxfZWFzeV9kdXBoYW5kbGUoKSBjcmFzaCBvbiBhIGhhbmRsZSB0aGF0IGhhZAogIGJlZW4gcmVtb3ZlZCBmcm9tIGEgbXVsdGkgaGFuZGxlLCBhbmQgdGhlbiBmaXhlZCBhbm90aGVyIGZsYXcgdGhhdCBwcmV2ZW50ZWQKICBjdXJsX2Vhc3lfZHVwaGFuZGxlKCkgdG8gd29yayBldmVuIGFmdGVyIHRoZSBmaXJzdCBmaXggLSB0aGUgaGFuZGxlIHdhcwogIHN0aWxsIG1hcmtlZCBhcyB1c2luZyB0aGUgbXVsdGkgaW50ZXJmYWNlLgoKRGFuaWVsIFMgKDI2IEFwcmlsIDIwMDcpCi0gUGV0ZXIgTydHb3JtYW4gZm91bmQgYSBwcm9ibGVtIHdpdGggU0NQIGRvd25sb2FkcyB3aGVuIHRoZSBkb3dubG9hZGVkIGZpbGUKICB3YXMgMTYzODUgYnl0ZXMgKDE2SysxKSBhbmQgaXQgdHVybmVkIG91dCB3ZSBkaWRuJ3QgcHJvcGVybHkgYWx3YXlzICJzdWNrCiAgb3V0IiBhbGwgZGF0YSBmcm9tIGxpYnNzaDIuIFRoZSBlZmZlY3QgYmVpbmcgdGhhdCBsaWJjdXJsIHdvdWxkIGhhbmcgb24gdGhlCiAgc29ja2V0IHdhaXRpbmcgZm9yIGRhdGEgd2hlbiBsaWJzc2gyIGhhZCBpbiBmYWN0IGFscmVhZHkgcmVhZCBpdCBhbGwuLi4KCkRhbiBGICgyNSBBcHJpbCAyMDA3KQotIEFkZGVkIHN1cHBvcnQgaW4gcnVudGVzdHMucGwgZm9yICIhbiIgdGVzdCBudW1iZXJzIHRvIGRpc2FibGUgaW5kaXZpZHVhbAogIHRlc3RzLiAgQ2hhbmdlZCAtdCB0byBvbmx5IGtlZXAgbG9nIGZpbGVzIGFyb3VuZCB3aGVuIC1rIGlzIHNwZWNpZmllZCwKICB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW91ciBhcyB3aXRob3V0IC10LgoKRGFuaWVsIFMgKDI1IEFwcmlsIDIwMDcpCi0gU29uaWEgU3VicmFtYW5pYW4gYnJvdWdodCBvdXIgYXR0ZW50aW9uIHRvIGEgcHJvYmxlbSB0aGF0IGhhcHBlbnMgaWYgeW91IHNldAogIHRoZSBDVVJMT1BUX1JFU1VNRV9GUk9NIG9yIENVUkxPUFRfUkFOR0Ugb3B0aW9ucyBhbmQgYW4gZXhpc3RpbmcgY29ubmVjdGlvbgogIGluIHRoZSBjb25uZWN0aW9uIGNhY2hlIGlzIGNsb3NlZCB0byBtYWtlIHJvb20gZm9yIHRoZSBuZXcgb25lIHdoZW4geW91IGNhbGwKICBjdXJsX2Vhc3lfcGVyZm9ybSgpLiBJdCB3b3VsZCB0aGVuIHdyb25nbHkgZnJlZSByYW5nZS1yZWxhdGVkIGRhdGEgaW4gdGhlCiAgY29ubmVjdGlvbiBjbG9zZSBmdW50aW9uLgoKWWFuZyBUc2UgKDI1IEFwcmlsIDIwMDcpCi0gU3RldmUgTGl0dGxlIGZpeGVkIGNvbXBpbGF0aW9uIG9uIFZNUyA2NC1iaXQgbW9kZQoKRGFuaWVsIFMgKDI0IEFwcmlsIDIwMDcpCi0gUm9iZXJ0IElha29iYXNodmlsaSBtYWRlIHRoZSAnbWFzdGVyX2J1ZmZlcicgZ2V0IGFsbG9jYXRlZCBmaXJzdCBvbmNlIGl0IGlzCiAgY2FuL3dpbGwgYmUgdXNlZCBhcyBpdCB0aGVuIG1ha2VzIHRoZSBjb21tb24gY2FzZXMgc2F2ZSAxNktCIG9mIGRhdGEgZm9yIGVhY2gKICBlYXN5IGhhbmRsZSB0aGF0IGlzbid0IHVzZWQgZm9yIHBpcGVsaW5pbmcuCgpEYW4gRiAoMjMgQXByaWwgMjAwNykKLSBBZGRlZCA8cG9zdGNoZWNrPiBzdXBwb3J0IHRvIHRoZSB0ZXN0IGhhcm5lc3MuCgotIEFkZGVkIHRlc3RzIDYxMC02MTIgdG8gdGVzdCBtb3JlIFNGVFAgcG9zdC1xdW90ZSBjb21tYW5kcy4KCkRhbmllbCBTICgyMiBBcHJpbCAyMDA3KQotIFNvbmcgTWEncyB3YXJuaW5nIGlmIC1yLy0tcmFuZ2UgaXMgZ2l2ZW4gd2l0aCBhICJiYWQiIHJhbmdlLCBhbHNvIG5vdGVkIGluCiAgdGhlIG1hbiBwYWdlIG5vdy4KCi0gRGFuaWVsIEJsYWNrIGZpbGVkIGJ1ZyAjMTcwNTE3NwogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNzA1MTc3KSB3aGVyZSAtLXdpdGhvdXQtc3NsCiAgLS13aXRoLWdudXRsIG91dHB1dHMgYSB3YXJuaW5nIGFib3V0IFNTTCBub3QgYmVpbmcgZW5hYmxlZCBldmVuIHRob3VnaCBHbnVUTFMKICB3YXMgZm91bmQgYW5kIHVzZWQuCgpEYW5pZWwgUyAoMjEgQXByaWwgMjAwNykKLSBEYW5pZWwgQmxhY2sgZmlsZWQgYnVnICMxNzA0Njc1CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE3MDQ2NzUpIGlkZW50aWZ5aW5nIGEgZG91YmxlLWZyZWUKICBwcm9ibGVtIGluIHRoZSBTU0wtZGVhbGluZyBsYXllciwgdGVsbGluZyBHbnVUTFMgdG8gZnJlZSBOVUxMIGNyZWRlbnRpYWxzIG9uCiAgY2xvc2Vkb3duIGFmdGVyIGEgZmFpbHVyZSBhbmQgYSBiYWQgI2lmZGVmIGZvciBOU1Mgd2hlbiBjbG9zaW5nIGRvd24gU1NMLgoKWWFuZyBUc2UgKDIwIEFwcmlsIDIwMDcpCi0gU2F2ZSBvbmUgY2FsbCB0byBjdXJseF90dm5vdygpLCB3aGljaCBjYWxscyBnZXR0aW1lb2ZkYXkoKSwgaW4gZWFjaCBvZgogIEN1cmxfc29ja2V0X3JlYWR5KCksIEN1cmxfcG9sbCgpIGFuZCBDdXJsX3NlbGVjdCgpIHdoZW4gdGhlc2UgYXJlIGNhbGxlZAogIHdpdGggYSB6ZXJvIHRpbWVvdXQgb3IgYSB0aW1lb3V0IHZhbHVlIGluZGljYXRpbmcgYSBibG9ja2luZyBjYWxsIHNob3VsZAogIGJlIHBlcmZvcm1lZC4KCkRhbmllbCBTICgxOCBBcHJpbCAyMDA3KQotIEphbWVzIEhvdXNsZXkgbWFkZSBTRlRQIHVwbG9hZHMgdXNlIGxpYnNzaDIncyBub24tYmxvY2tpbmcgQVBJCgotIFByZXZlbnQgdGhlIGludGVybmFsIHByb2dyZXNzIG1ldGVyIGZyb20gdXBkYXRpbmcgbW9yZSBmcmVxdWVudGx5IHRoYW4gb25jZQogIHBlciBzZWNvbmQuCgpEYW4gRiAoMTcgQXByaWwgMjAwNykKLSBBZGRlZCB0ZXN0IGNhc2VzIDI5NiwgMjk3IGFuZCAyOTggdG8gdGVzdCAtLWZ0cC1tZXRob2QgaGFuZGxpbmcKCkRhbmllbCBTICgxNiBBcHJpbCAyMDA3KQotIFJvYmVydCBJYWtvYmFzaHZpbCBhZGRlZCBjdXJsX211bHRpX3NvY2tldF9hY3Rpb24oKSB0byBsaWJjdXJsLCB3aGljaCBpcyBhCiAgZnVuY3Rpb24gdGhhdCBkZXByZWNhdGVzIHRoZSBjdXJsX211bHRpX3NvY2tldCgpIGZ1bmN0aW9uLiBVc2luZyB0aGUgbmV3CiAgZnVuY3Rpb24gdGhlIGFwcGxpY2F0aW9uIHRlbGwgbGliY3VybCB3aGF0IGFjdGlvbiB0aGF0IHdhcyBmb3VuZCBpbiB0aGUKICBzb2NrZXQgdGhhdCBpdCBwYXNzZXMgaW4uIFRoaXMgZ2l2ZXMgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBib29zdCBhcyBpdAogIGFsbG93cyBsaWJjdXJsIHRvIGF2b2lkIGEgY2FsbCB0byBwb2xsKCkvc2VsZWN0KCkgZm9yIGV2ZXJ5IGNhbGwgdG8KICBjdXJsX211bHRpX3NvY2tldCooKS4KCiAgSSBhZGRlZCBhIGRlZmluZSBpbiB0aGUgcHVibGljIGN1cmwvbXVsdGkuaCBoZWFkZXIgZmlsZSB0aGF0IHdpbGwgbWFrZSB5b3VyCiAgZXhpc3RpbmcgYXBwbGljYXRpb24gYXV0b21hdGljYWxseSB1c2UgY3VybF9tdWx0aV9zb2NrZXRfYWN0aW9uKCkgaW5zdGVhZCBvZgogIGN1cmxfbXVsdGlfc29ja2V0KCkgd2hlbiB5b3UgcmVjb21waWxlLiBCdXQgb2YgY291cnNlIHlvdSdsbCBnZXQgYmV0dGVyCiAgcGVyZm9ybWFuY2UgaWYgeW91IGFkanVzdCB5b3VyIGNvZGUgbWFudWFsbHkgYW5kIGFjdHVhbGx5IHBhc3MgaW4gdGhlCiAgY29ycmVjdCBhY3Rpb24gYml0bWFzayB0byB0aGlzIGZ1bmN0aW9uLgoKRGFuaWVsIFMgKDE0IEFwcmlsIDIwMDcpCi0gSmF5IEF1c3RpbiBhZGRlZCAiREggUEFSQU1FVEVSUyIgdG8gdGhlIHN0dW5uZWwucGVtIGNlcnRpZmljYXRlIGZvciB0aGUgdGVzdAogIHN1aXRlIHRvIG1ha2Ugc3R1bm5lbCBydW4gYmV0dGVyIGluIHNvbWUgKG1vc3Q/KSBlbnZpcm9ubWVudHMuCgpEYW4gRiAoMTMgQXByaWwgMjAwNykKLSBBZGRlZCB0ZXN0IGNhc2VzIDI5NCBhbmQgMjk1IHRvIHRlc3QgLS1mdHAtYWNjb3VudCBoYW5kbGluZwoKLSBJbXByb3ZlZCBoYW5kbGluZyBvZiBvdXQgb2YgbWVtb3J5IGluIGZ0cC4KCllhbmcgVHNlICgxMyBBcHJpbCAyMDA3KQotIEZpeCB0ZXN0IGNhc2UgNTM0IHdoaWNoIHN0YXJ0ZWQgdG8gZmFpbCAyMDA3LTA0LTEzIGR1ZSB0byB0aGUgZXhpc3RhbmNlCiAgb2YgYSBuZXcgaG9zdCBvbiB0aGUgbmV0IHdpdGggdGhlIHNhbWUgc2lsbHkgZG9tYWluIHRoZSB0ZXN0IHdhcyB1c2luZwogIGZvciBhIGhvc3Qgd2hpY2ggd2FzIHN1cHBvc2VkIG5vdCB0byBleGlzdC4KCkRhbmllbCBTICgxMiBBcHJpbCAyMDA3KQotIFNvbmcgTWEgZm91bmQgYSBtZW1vcnkgbGVhayBpbiB0aGUgaWYyaXAgY29kZSBpZiB5b3UgcGFzcyBpbiBhbiBpbnRlcmZhY2UKICBuYW1lIGxvbmdlciB0aGFuIHRoZSBuYW1lIGZpZWxkIG9mIHRoZSBpZnJlcSBzdHJ1Y3QgKHR5cGljYWxseSA2IGJ5dGVzKSwgYXMKICB0aGVuIGl0IHdvdWxkbid0IGNsb3NlIHRoZSB1c2VkIGR1bW15IHNvY2tldC4gQnVnICMxNjk4OTc0CiAgKGh0dHA6Ly9jdXJsLmhheHguc2UvYnVnL3ZpZXcuY2dpP2lkPTE2OTg5NzQpCgpWZXJzaW9uIDcuMTYuMiAoMTEgQXByaWwgMjAwNykKCllhbmcgVHNlICgxMCBBcHJpbCAyMDA3KQotIFJhdmkgUHJhdGFwIHByb3ZpZGVkIHNvbWUgZml4ZXMgZm9yIEhUVFAgcGlwZWxpbmluZwoKLSBjb25maWd1cmUgc2NyaXB0IHdpbGwgaWdub3JlIC0tZW5hYmxlLXNzcGkgb3B0aW9uIGZvciBub24tbmF0aXZlIFdpbmRvd3MuCgpEYW5pZWwgUyAoOSBBcHJpbCAyMDA3KQotIE5pY2sgWml0em1hbm4gZGlkIHNzaC5jIGNsZWFudXBzCgpEYW5pZWwgUyAoMyBBcHJpbCAyMDA3KQotIFJvYiBKb25lcyBmaXhlZCBiZXR0ZXIgI2lmZGVmJ2luZyBmb3IgYSBidW5jaCBvZiAjaW5jbHVkZSBsaW5lcy4KCkRhbmllbCBTICgyIEFwcmlsIDIwMDcpCi0gTmljayBaaXR6bWFubiBtYWRlIHRoZSBDVVJMT1BUX1BPU1RRVU9URSBvcHRpb24gd29yayBmb3IgU0ZUUCBhcyB3ZWxsLiBUaGUKICBhY2NlcHRlZCBjb21tYW5kcyBhcmUgYXMgZm9sbG93czoKCiAgY2hncnAgKGdpZCkgKHBhdGgpCiAgICBDaGFuZ2VzIHRoZSBncm91cCBJRCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgKHBhdGgpIHRvIChnaWQpLiAoZ2lkKQogICAgbXVzdCBiZSBhIG51bWJlci4KCiAgY2htb2QgKHBlcm1zKSAocGF0aCkKICAgIENoYW5nZXMgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBhdCAocGF0aCkgdG8KICAgIChwZXJtcykuIChwZXJtcykgbXVzdCBiZSBhIG51bWJlciBpbiB0aGUgZm9ybWF0IHVzZWQgYnkgdGhlIGNobW9kIFVuaXgKICAgIGNvbW1hbmQuCgogIGNob3duICh1aWQpIChwYXRoKQogICAgQ2hhbmdlcyB0aGUgdXNlciBJRCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgKHBhdGgpIHRvICh1aWQpLiAodWlkKQogICAgbXVzdCBiZSBhIG51bWJlci4KCiAgbG4gKHNvdXJjZSkgKGRlc3QpCiAgICBDcmVhdGVzIGEgc3ltYm9saWMgbGluayBhdCAoZGVzdCkgdGhhdCBwb2ludHMgdG8gdGhlIGZpbGUgbG9jYXRlZCBhdAogICAgKHNvdXJjZSkuCgogIG1rZGlyIChwYXRoKQogICAgQ3JlYXRlcyBhIG5ldyBkaXJlY3RvcnkgYXQgKHBhdGgpLgoKICByZW5hbWUgKHNvdXJjZSkgKGRlc3QpCiAgICBNb3ZlcyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgKHNvdXJjZSkgdG8gKGRlc3QpLgoKICBybSAocGF0aCkKICAgIERlbGV0ZXMgdGhlIGZpbGUgbG9jYXRlZCBhdCAocGF0aCkuCgogIHJtZGlyIChwYXRoKQogICAgRGVsZXRlcyB0aGUgZGlyZWN0b3J5IGxvY2F0ZWQgYXQgKHBhdGgpLiBUaGlzIGNvbW1hbmQgd2lsbCByYWlzZSBhbiBlcnJvcgogICAgaWYgdGhlIGRpcmVjdG9yeSBpcyBub3QgZW1wdHkuCgogIHN5bWxpbmsgKHNvdXJjZSkgKGRlc3QpCiAgICBTYW1lIGFzIGxuLgoKRGFuaWVsIFMgKDEgQXByaWwgMjAwNykKLSBSb2JlcnQgSWFrb2Jhc2h2aWxpIG1hZGUgY3VybF9tdWx0aV9yZW1vdmVfaGFuZGxlKCkgYSBsb3QgZmFzdGVyIHdoZW4gbWFueQogIGVhc3kgaGFuZGxlcyBhcmUgYWRkZWQgdG8gYSBtdWx0aSBoYW5kbGUsIGJ5IGF2b2lkaW5nIHRoZSBsb29waW5nIG92ZXIgYWxsCiAgdGhlIGhhbmRsZXMgdG8gZmluZCB3aGljaCBvbmUgdG8gcmVtb3ZlLgoKLSBNYXR0IEtyYWFpIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBtYWtlcyBjdXJsIGJ1aWxkIG9uIFFOWCA2IGZpbmUgYWdhaW4uCgpEYW5pZWwgUyAoMzEgTWFyY2ggMjAwNykKLSBGaXhlZCBzZXZlcmFsIG1pbm9yIGlzc3VlcyBkZXRlY3RlZCBieSB0aGUgY292ZXJpdHkuY29tIHNjYW5uZXIuCgotICJQaXhlbCIgZml4ZWQgYSBwcm9ibGVtIHRoYXQgYXBwZWFyZWQgd2hlbiB5b3UgdXNlZCAtZiB3aXRoIHVzZXIrcGFzc3dvcmQKICBlbWJlZGRlZCBpbiB0aGUgVVJMLgoKRGFuIEYgKDI5IE1hcmNoIDIwMDcpCi0gRG9uJ3QgdGVhciBkb3duIHRoZSBmdHAgY29ubmVjdGlvbiBpZiB0aGUgbWF4aW11bSBmaWxlc2l6ZSB3YXMgZXhjZWVkZWQKICBhbmQgYWRkZWQgdGVzdHMgMjkwIGFuZCAyOTEgdG8gY2hlY2suCgotIEFkZGVkIGZ0cHMgdXBsb2FkIGFuZCBTU0wgcmVxdWlyZWQgdGVzdHMgNDAxIGFuZCA0MDIuCgotIFNlbmQgYW4gRU9GIG1lc3NhZ2UgYmVmb3JlIGNsb3NpbmcgYW4gU0NQIGNoYW5uZWwsIGFzIHJlY29tbWVuZGVkIGJ5CiAgUkZDNDI1NC4gRW5hYmxlIGxpYnNzaDIgdHJhY2luZyB3aGVuIHNzaCBkZWJ1Z2dpbmcgaXMgdHVybmVkIG9uLgoKWWFuZyBUc2UgKDI3IE1hcmNoIDIwMDcpCi0gSW50ZXJuYWwgZnVuY3Rpb24gQ3VybF9zZWxlY3QoKSByZW5hbWVkIHRvIEN1cmxfc29ja2V0X3JlYWR5KCkKCiAgTmV3IEludGVybmFsIHdyYXBwZXIgZnVuY3Rpb24gQ3VybF9zZWxlY3QoKSBhcm91bmQgc2VsZWN0ICgyKSwgaXQKICB1c2VzIHBvbGwoKSB3aGVuIGEgZmluZSBwb2xsKCkgaXMgYXZhaWxhYmxlLCBzbyBub3cgbGliY3VybCBjYW4gYmUKICBidWlsdCB3aXRob3V0IHNlbGVjdCgpIHN1cHBvcnQgYXQgYWxsIGlmIGEgZmluZSBwb2xsKCkgaXMgYXZhaWxhYmxlLgoKRGFuaWVsIFMgKDI1IE1hcmNoIDIwMDcpCi0gRGFuaWVsIEpvaG5zb24gZml4ZWQgbXVsdGkgY29kZSB0byB0cmF2ZXJzZSB0aGUgZWFzeSBoYW5kbGUgbGlzdCBwcm9wZXJseS4KICBBIGxlZnQtb3ZlciBidWcgZnJvbSB0aGUgRmVicnVhcnkgMjEgZml4LgoKRGFuIEYgKDIzIE1hcmNoIDIwMDcpCi0gQWRkZWQgLS1wdWJrZXkgb3B0aW9uIHRvIGN1cmwgYW5kIG1hZGUgLS1rZXkgYWxzbyB3b3JrIGZvciBTQ1AvU0ZUUCwKICBwbHVzIG1hZGUgLS1wYXNzIHdvcmsgb24gYW4gU1NIIHByaXZhdGUga2V5IGFzIHdlbGwuCgotIENoYW5nZWQgdGhlIHRlc3QgaGFybmVzcyB0byBhdHRlbXB0IHRvIGdyYWNlZnVsbHkgc2h1dCBkb3duIHNlcnZlcnMKICBiZWZvcmUgcmVzb3J0aW5nIHRvIHRoZSBraWxsIC05IGhhbW1lci4KCi0gQWRkZWQgdGVzdCBoYXJuZXNzIGluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgc2NwL3NmdHAgdGVzdHMsIHVzaW5nCiAgT3BlblNTSCBhcyB0aGUgc2VydmVyLgoKLSBGaXhlZCBhIG1lbW9yeSBsZWFrIHdoZW4gc3BlY2lmeWluZyBhIHByb3h5IHdpdGggYSBmaWxlOiBVUkwuCgpZYW5nIFRzZSAoMjAgTWFyY2ggMjAwNykKLSBGaXhlZDogV2hlbiBhIHNpZ25hbCB3YXMgY2F1Z2h0IGF3YWl0aW5nIGZvciBhbiBldmVudCB1c2luZyBDdXJsX3NlbGVjdCgpCiAgb3IgQ3VybF9wb2xsKCkgd2l0aCBhIG5vbi16ZXJvIHRpbWVvdXQgYm90aCBmdW5jdGlvbnMgd291bGQgcmVzdGFydCB0aGUKICBzcGVjaWZpZWQgdGltZW91dC4gVGhpcyBjb3VsZCBldmVuIGxlYWQgdG8gdGhlIGV4dHJlbWUgY2FzZSB0aGF0IGlmIGEKICBzaWduYWwgYXJyaXZlZCB3aXRoIGEgZnJlY3VlbmN5IGxvd2VyIHRvIHRoZSBzcGVjaWZpZWQgdGltZW91dCBuZWl0aGVyCiAgZnVuY3Rpb24gd291bGQgZXZlciBleGl0LgoKICBBZGRlZCBleHBlcmltZW50YWwgc3ltYm9sIGRlZmluaXRpb24gY2hlY2sgQ1VSTF9BQ0tOT1dMRURHRV9FSU5UUiBpbgogIEN1cmxfc2VsZWN0KCkgYW5kIEN1cmxfcG9sbCgpLiBXaGVuIGNvbXBpbGVkIHdpdGggQ1VSTF9BQ0tOT1dMRURHRV9FSU5UUgogIGRlZmluZWQgYm90aCBmdW5jdGlvbnMgd2lsbCByZXR1cm4gYXMgc29vbiBhcyBhIHNpZ25hbCBpcyBjYXVnaHQuIFVzZSBpdAogIGF0IHlvdXIgb3duIHJpc2ssIGFsbCBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGxpYnJhcnkgc2hvdWxkIGJlCiAgcmV2aXNpdGVkIGFuZCBjaGVja2VkIGJlZm9yZSBmdWxseSBzdXBwb3J0aW5nIHRoaXMgZmVhdHVyZS4KCllhbmcgVHNlICgxOSBNYXJjaCAyMDA3KQotIEJyeWFuIEhlbmRlcnNvbiBmaXhlZCB0aGUgcHJvZ3Jlc3MgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gZ2V0IGNhbGxlZCBtb3JlCiAgZnJlcXVlbnRseSBhbGxvd2luZyBzYW1lIGNhbGxpbmcgZnJlY3VlbmN5IGZvciB0aGUgY2xpZW50IHByb2dyZXNzIGNhbGxiYWNrLgogIApEYW4gRiAoMTUgTWFyY2ggMjAwNykKLSBWYXJpb3VzIG1lbW9yeSBsZWFrcyBwbHVnZ2VkIGFuZCBOVUxMIHBvaW50ZXIgZml4ZXMgbWFkZSBpbiB0aGUgc3NoIGNvZGUuCgpEYW5pZWwgKDE1IE1hcmNoIDIwMDcpCi0gTmljayBtYWRlIHRoZSBjdXJsIHRvb2wgYWNjZXB0IGdsb2JiaW5nIHJhbmdlcyB0aGF0IG9ubHkgaXMgb25lIG51bWJlciwgaS5lCiAgeW91IGNhbiBub3cgdXNlIFsxLTFdIHdpdGhvdXQgY3VybCBjb21wbGFpbmluZy4KCkRhbmllbCAoMTAgTWFyY2ggMjAwNykKLSBFeWdlbmUgUnlhYmlua2luOgoKICBUaGUgcHJvYmxlbSBpcyB0aGUgZm9sbG93aW5nOiB3aGVuIHdlJ3JlIGNhbGxpbmcgQ3VybF9kb25lIGFuZCBpdCBkZWNpZGVzIHRvCiAga2VlcCB0aGUgY29ubmVjdGlvbiBvcGVuZWQgKCdsZWZ0IGludGFjdCcpLCB0aGVuIHRoZSBjYWxsZXIgaXMgbm90IG5vdGlmaWVkCiAgdGhhdCB0aGUgY29ubmVjdGlvbiB3YXMgZG9uZSB2aWEgdGhlIE5VTExpZnlpbmcgb2YgdGhlIHBvaW50ZXIsIHNvIHNvbWUgZWFzeQogIGhhbmRsZSBpcyBrZWVwaW5nIHRoZSBwb2ludGVyIHRvIHRoaXMgY29ubmVjdGlvbi4KCiAgTGF0ZXIgQ29ubmVjdGlvbkV4aXN0cyBjYW4gc2VsZWN0IHN1Y2ggY29ubmVjdGlvbiBmb3IgcmV1c2UgZXZlbiBpZiB3ZSdyZQogIG5vdCBwaXBlbGluaW5nOiBwaXBlTGVuIGlzIHplcm8sIHNvIHRoZSAocGlwZUxlbiA+IDAgJiYgIWNhblBpcGVsaW5lKSBpcwogIGZhbHNlIGFuZCB3ZSBjYW4gcmV1c2UgdGhpcyBjb25uZWN0aW9uIGZvciBhbm90aGVyIGVhc3kgaGFuZGxlLiBCdXQgdGh1cyB0aGUKICBjb25uZWN0aW9uIHdpbGwgYmUgc2hhcmVkIGJldHdlZW4gdHdvIGVhc3kgaGFuZGxlcyBpZiB0aGUgaGFuZGxlIHRoYXQgd2FudHMKICB0byB0YWtlIHRoZSBvd25lcnNoaXAgaXMgbm90IHRoZSBzYW1lIGFzIHdhcyBub3Qgbm90aWZpZWQgb2YgdGhlIGNvbm5lY3Rpb24KICB3YXMgZG9uZSBpbiBDdXJsX2RvbmUuIEFuZCB3aGVuIHNvbWUgb2YgdGhlc2UgZWFzeSBoYW5kbGVzIHdpbGwgZ2V0IHRoZWlyCiAgY29ubmVjdGlvbiByZWFsbHkgZnJlZWQgdGhlIGFub3RoZXIgb25lIHdpbGwgc3RpbGwga2VlcCB0aGUgcG9pbnRlci4KCiAgTXkgZml4IHdhcyByYXRoZXIgdHJpdmlhbDogSSBqdXN0IGFkZGVkIHRoZSBOVUxMaWZpY2F0aW9uIHRvIHRoZSAnZWxzZScKICBicmFuY2ggaW4gdGhlIEN1cmxfZG9uZS4gTXkgdGVzdHMgd2l0aCBHaXQgYW5kIEVsZWN0cmljRmVuY2Ugc2hvd2VkIG5vCiAgcHJvYmxlbXMgYm90aCBmb3IgSFRUUCBwdWxsaW5nIGFuZCBjbG9uaW5nLiBSZXBvc2l0b3J5IHNpemUgaXMgYWJvdXQgMjUwIE1iLAogIHNvIGl0IHdhcyBhIGNvbnNpZGVyYWJsZSBhbW91bnQgb2YgQ3VybCdzIHdvcmsuCgpEYW4gRiAoOSBNYXJjaCAyMDA3KQotIFVwZGF0ZWQgdGhlIHRlc3QgaGFybmVzcyB0byBhZGQgYSBuZXcgImNyeXB0byIgZmVhdHVyZSBjaGVjayBhbmQgdXBkYXRlZCB0aGUKICBhcHByb3ByaWF0ZSB0ZXN0IGNhc2UgdG8gdXNlIGl0LiAgRm9yIG5vdywgdGhpcyBpcyB0cmVhdGVkIHRoZSBzYW1lIGFzIHRoZQogICJTU0wiIGZlYXR1cmUgYmVjYXVzZSBjdXJsIGRvZXNuJ3QgbGlzdCBpdCBzZXBhcmF0ZWx5LgoKRGFuaWVsICg5IE1hcmNoIDIwMDcpCi0gUm9iZXJ0IElha29iYXNodmlsaSBmaXhlZCBDVVJMT1BUX0lOVEVSRkFDRSBmb3IgSVB2Ni4KCi0gUm9iZXJ0IEEuIE1vbmF0IGltcHJvdmVkIHRoZSBtYWtldGd6IGFuZCBWQzYvOCBnZW5lcmF0aW5nIHRvIHNldCB0aGUgY29ycmVjdAogIG1hY2hpbmUgdHlwZSB0b28uCgotIEp1c3RpbiBGbGV0Y2hlciBmaXhlZCBhIGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIHRoZSBjdXJsIHRvb2wgd2hlbiB0cnlpbmcgdG8KICB1cGxvYWQgYSBmaWxlIGl0IGNvdWxkbid0IG9wZW4uIEJ1ZyAjMTY3NjU4MQogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNjc2NTgxKQoKRGFuIEYgKDkgTWFyY2ggMjAwNykKLSBVcGRhdGVkIHRoZSB0ZXN0IGhhcm5lc3MgdG8gY2hlY2sgZm9yIHByb3RvY29sIHN1cHBvcnQgYmVmb3JlIHJ1bm5pbmcgZWFjaAogIHRlc3QsIGZpeGluZyBLTk9XTl9CVUdTICMxMS4KCkRhbiBGICg3IE1hcmNoIDIwMDcpCi0gUmVpbnRyb2R1Y2VkIChhZnRlciBhIDMgeWVhciBoaWF0dXMpIGFuIEZUUFMgdGVzdCBjYXNlICg0MDApIGludG8gdGhlIHRlc3QKICBoYXJuZXNzLiAgSXQgaXMgdmVyeSBsaW1pdGVkIGFzIGl0IHN1cHBvcnRzIG9ubHkgZnRwczovLyBVUkxzIHdpdGgKICAtLWZ0cC1zc2wtY29udHJvbCBzcGVjaWZpZWQsIHdoaWNoIGltcGxpY2l0bHkgZW5jcnlwdHMgdGhlIGNvbnRyb2wKICBjaGFubmVsIGJ1dCBub3QgdGhlIGRhdGEgY2hhbm5lbHMuICBUaGF0IGFsbG93cyBzdHVubmVsIHRvIGJlIHVzZWQgd2l0aAogIGFuIHVubW9kaWZpZWQgZnRwIHNlcnZlciBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSB0aGF0IHRoZSB0ZXN0IGh0dHBzCiAgc2VydmVyIGlzIHNldCB1cC4KCkRhbiBGICg3IE1hcmNoIDIwMDcpCi0gSG9ub3VyIC0tZnRwLXNzbC1jb250cm9sIG9uIGZ0cHM6Ly8gVVJMcyB0byBhbGxvdyBlbmNyeXB0ZWQgY29udHJvbCBhbmQKICB1bmVuY3J5cHRlZCBkYXRhIGNvbm5lY3Rpb25zLgoKRGFuIEYgKDYgTWFyY2ggMjAwNykKLSBGaXhlZCBhIGNvdXBsZSBvZiBpbXByb3BlciBwb2ludGVyIHVzZXMgZGV0ZWN0ZWQgYnkgdmFsZ3JpbmQgaW4gdGVzdAogIGNhc2VzIDE4MSAmIDIxNi4KCkRhbmllbCAoMiBNYXJjaCAyMDA3KQotIFJvYmVydCBBLiBNb25hdCBhbmQgU2htdWxpayBSZWdldiBoZWxwZWQgb3V0IHRvIGZpeCB0aGUgbmV3ICovTWFrZWZpbGUudmM4CiAgbWFrZWZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGluIHRoZSBzb3VyY2UgcmVsZWFzZSBhcmNoaXZlcywgZ2VuZXJhdGVkIGZyb20KICB0aGUgTWFrZWZpbGUudmM2IGZpbGVzIGJ5IHRoZSBtYWtldGd6IHNjcmlwdC4gSSBhbHNvIG1vZGlmaWVkIHRoZSByb290CiAgTWFrZWZpbGUgdG8gaGF2ZSBhIFZDIHZhcmlhYmxlIHRoYXQgZGVmYXVsdHMgdG8gdmM2IGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiB0bwogIGFsbG93IGl0IHRvIGJlIHVzZWQgZm9yIHZjOCBhcyB3ZWxsLiBMaWtlIHRoaXM6CgogICAgbm1ha2UgVkM9dmM4IHZjCgpEYW5pZWwgKDI3IEZlYnJ1YXJ5IDIwMDcpCi0gSGFuZyBLaW4gTGF1IGZvdW5kIGFuZCBmaXhlZDogV2hlbiBJIHVzZSBsaWJjdXJsIHRvIGNvbm5lY3QgdG8gYW4gaHR0cHMKICBzZXJ2ZXIgdGhyb3VnaCBhIHByb3h5IGFuZCBoYXZlIHRoZSByZW1vdGUgaHR0cHMgc2VydmVyIHBvcnQgc2V0IHVzaW5nIHRoZQogIENVUkxPUFRfUE9SVCBvcHRpb24sIHByb3RvY29sIGdldHMgcmVzZXQgdG8gaHR0cCBmcm9tIGh0dHBzIGFmdGVyIHRoZSBmaXJzdAogIHJlcXVlc3QuCiAKICBVc2VyIGRlZmluZWQgVVJMIHdhcyBtb2RpZmllZCBpbnRlcm5hbGx5IGJ5IGxpYmN1cmwgYW5kIHN1YnNlcXVlbnQgcmV1c2Ugb2YKICB0aGUgZWFzeSBoYW5kbGUgbWF5IGxlYWQgdG8gY29ubmVjdGlvbiB1c2luZyBhIGRpZmZlcmVudCBwcm90b2NvbCAoaWYgbm90CiAgb3JpZ2luYWxseSBodHRwKS4KIAogIEkgZm91bmQgdGhhdCBsaWJjdXJsIGhhcmRjb2RlZCB0aGUgcHJvdG9jb2wgdG8gImh0dHAiIHdoZW4gaXQgdHJpZXMgdG8KICByZWdlbmVyYXRlIHRoZSBVUkwgaWYgQ1VSTE9QVF9QT1JUIGlzIHNldC4gSSB0cmllZCB0byBmaXggdGhlIHByb2JsZW0gYXMKICBmb2xsb3dzIGFuZCBpdCdzIHdvcmtpbmcgZmluZSBzbyBmYXIKCkRhbmllbCAoMjUgRmVicnVhcnkgMjAwNykKLSBBZGFtIEQuIE1vc3MgbWFkZSB0aGUgSFRUUCBDT05ORUNUIHByb2NlZHVyZSBsZXNzIGJsb2NraW5nIHdoZW4gdXNlZCBmcm9tCiAgdGhlIG11bHRpIGludGVyZmFjZS4gTm90ZSB0aGF0IGl0IHN0aWxsIGRvZXMgYSBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIGluIGEKICBibG9ja2luZyBtYW5uZXIuCgpEYW5pZWwgKDIzIEZlYnJ1YXJ5IDIwMDcpCi0gQWRkZWQgd2FybmluZyBvdXRwdXRzIGlmIHRoZSBjb21tYW5kIGxpbmUgdXNlcyBtb3JlIHRoYW4gb25lIG9mIHRoZSBvcHRpb25zCiAgLXYsIC0tdHJhY2UgYW5kIC0tdHJhY2UtYXNjaWksIHNpbmNlIGl0IGNvdWxkIHJlYWxseSBjb25mdXNlIHRoZSB1c2VyLgogIENsYXJpZmllZCB0aGlzIGZhY3QgaW4gdGhlIG1hbiBwYWdlLgoKRGFuaWVsICgyMSBGZWJydWFyeSAyMDA3KQotIFJhdmkgUHJhdGFwIHByb3ZpZGVkIHdvcmsgb24gbGliY3VybCBtYWtpbmcgcGlwZWxpbmluZyBtb3JlIHJvYnVzdCBhbmQKICBmaXhpbmcgc29tZSBidWdzOgogIG8gRG9uJ3QgbWl4IEdFVCBhbmQgUE9TVCByZXF1ZXN0cyBpbiBhIHBpcGVsaW5lCiAgbyBGaXggdGhlIG9yZGVyIGluIHdoaWNoIHJlcXVlc3RzIGFyZSBkaXNwYXRjaGVkIGZyb20gdGhlIHBpcGVsaW5lCiAgbyBGaXhlZCBzZXZlcmFsIGN1cmwgYnVncyB3aXRoIHBpcGVsaW5pbmcgd2hlbiB0aGUgc2VydmVyIGlzIHJldHVybmluZwogICAgY2h1bmtlZCBlbmNvZGluZzoKICAgICogQWRkZWQgc3RhdGVzIHRvIGNodW5rZWQgcGFyc2luZyBmb3IgZmluYWwgQ1JMRgogICAgKiBSZXdpbmQgYnVmZmVyIGFmdGVyIHBhcnNpbmcgY2h1bmsgd2l0aCBkYXRhIHJlbWFpbmluZwogICAgKiBNb3ZlZCBjaHVua2VkIGhlYWRlciBpbml0aWFsaXppbmcgdG8gYSBzcG90IGp1c3QgYmVmb3JlIHJlY2VpdmluZwogICAgICBoZWFkZXJzCgpEYW5pZWwgKDIwIEZlYnJ1YXJ5IDIwMDcpCi0gTGludXMgTmllbHNlbiBGZWx0emluZyBjaGFuZ2VkIHRoZSBDVVJMT1BUX0ZUUF9TU0xfQ0NDIG9wdGlvbiB0byBoYW5kbGUKICBhY3RpdmUgYW5kIHBhc3NpdmUgQ0NDIHNodXRkb3duIGFuZCBhZGRlZCB0aGUgLS1mdHAtc3NsLWNjYy1tb2RlIGNvbW1hbmQKICBsaW5lIG9wdGlvbi4KCkRhbmllbCAoMTkgRmVicnVhcnkgMjAwNykKLSBJYW4gVHVybmVyIGZpeGVkIHRoZSBsaWJjdXJsLm00IG1hY3JvJ3Mgc3VwcG9ydCBmb3IgLS13aXRoLWxpYmN1cmwuCgotIFNobXVsaWsgUmVnZXYgZm91bmQgYSBtZW1vcnkgbGVhayBpbiByZS11c2VkIEhUVFBTIGNvbm5lY3Rpb25zLCBhdCBsZWFzdAogIHdoZW4gdGhlIG11bHRpIGludGVyZmFjZSB3YXMgdXNlZC4KCi0gUm9ic29uIEJyYWdhIEFyYXVqbyBtYWRlIHBhc3NpdmUgRlRQIHRyYW5zZmVycyB3b3JrIHdpdGggU09DS1MgKGJvdGggNCBhbmQKICA1KS4KCkRhbmllbCAoMTggRmVicnVhcnkgMjAwNykKLSBKZWZmIFBvaGxtZXllciBpZGVudGlmaWVkIHR3byBwcm9ibGVtczogZmlyc3QgYSByYXRoZXIgb2JzY3VyZSBwcm9ibGVtIHdpdGgKICB0aGUgbXVsdGkgaW50ZXJmYWNlIGFuZCBjb25uZWN0aW9uIHJlLXVzZSB0aGF0IGNvdWxkIG1ha2UgYQogIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgpIHJ1aW4gYSBwb2ludGVyIGluIGFub3RoZXIgaGFuZGxlLgoKICBUaGUgc2Vjb25kIHByb2JsZW0gd2FzIGxlc3Mgb2YgYW4gYWN0dWFsIHByb2JsZW0gYnV0IG1vcmUgb2YgbWlub3IgcXVpcms6CiAgdGhlIHJlLXVzaW5nIG9mIGNvbm5lY3Rpb25zIHdhc24ndCBwcm9wZXJseSBjaGVja2luZyBpZiB0aGUgY29ubmVjdGlvbiB3YXMKICBtYXJrZWQgZm9yIGNsb3N1cmUuCgpEYW5pZWwgKDE2IEZlYnJ1YXJ5IDIwMDcpCi0gRHVuY2FuIE1hYy1WaWNhciBQcmV0dCBhbmQgTWljaGFsIE1hcmVrIHJlcG9ydGVkIHByb2JsZW1zIHdpdGggcmVzZXR0aW5nCiAgQ1VSTE9QVF9SQU5HRSBiYWNrIHRvIG5vIHJhbmdlIG9uIGFuIGVhc3kgaGFuZGxlIHdoZW4gdXNpbmcgRlRQLgoKRGFuIEYgKDE0IEZlYnJ1YXJ5IDIwMDcpCi0gRml4ZWQgY3VybC1jb25maWcgLS1saWJzIHNvIGl0IGRvZXNuJ3QgbGlzdCB1bm5lY2Vzc2FyeSBsaWJyYXJpZXMgKGFuZAogIHRoZXJlZm9yZSBpbnRyb2R1Y2UgdW5uZWNlc3NhcnkgZGVwZW5kZW5jaWVzKSB3aGVuIGl0J3Mgbm90IG5lZWRlZC4KICBBbHNvLCBkb24ndCBib3RoZXIgYWRkaW5nIGEgbGlicmFyeSBwYXRoIG9mIC91c3IvbGliCgpEYW5pZWwgKDEzIEZlYnJ1YXJ5IDIwMDcpCi0gVGhlIGRlZmF1bHQgcGFzc3dvcmQgZm9yIGFub255bW91cyBGVFAgY29ubmVjdGlvbnMgaXMgbm93IGNoYW5nZWQgdG8gYmUKICAiZnRwQGV4YW1wbGUuY29tIi4KCi0gUm9iZXJ0IEEuIE1vbmF0IG1hZGUgbGliY3VybCBidWlsZCBmaW5lIHdpdGggVkMyMDA1IC0gaXQgZG9lc24ndCBoYXZlCiAgZ210aW1lX3IoKSBsaWtlIHRoZSBvbGRlciBWQyB2ZXJzaW9ucy4gSGUgYWxzbyBtYWRlIHVzZSBvZiBzb21lIG1hY2hpbmUtCiAgc3BlY2lmaWMgZGVmaW5lcyB0byBkaWZmZXJlbnRpYXRlIHRoZSAiT1MiIGRlZmluZS4KCkRhbmllbCAoMTIgRmVicnVhcnkgMjAwNykKLSBSb2IgQ3JpdHRlbmRlbiBhZGRlZCBzdXBwb3J0IGZvciBOU1MgKE5ldHdvcmsgU2VjdXJpdHkgU2VydmljZSkgZm9yIHRoZQogIFNTTC9UTFMgbGF5ZXIuIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvcHJvamVjdHMvc2VjdXJpdHkvcGtpL25zcy8KCiAgVGhpcyBpcyB0aGUgZm91cnRoIHN1cHBvcnRlZCBsaWJyYXJ5IGZvciBUTFMvU1NMIHRoYXQgbGliY3VybCBzdXBwb3J0cyEKCi0gU2htdWxpayBSZWdldiBmaXhlZCBzbyB0aGF0IHRoZSBmaW5hbCBDUkxGIG9mIEhUVFAgcmVzcG9uc2UgaGVhZGVycyBhcmUgc2VudAogIHRvIHRoZSBkZWJ1ZyBjYWxsYmFjay4KCi0gU2htdWxpayBSZWdldiBhZGRlZCBDVVJMT1BUX0hUVFBfQ09OVEVOVF9ERUNPRElORyBhbmQKICBDVVJMT1BUX0hUVFBfVFJBTlNGRVJfREVDT0RJTkcgdGhhdCBpZiBzZXQgdG8gemVybyB3aWxsIGRpc2FibGUgbGliY3VybCdzCiAgaW50ZXJuYWwgZGVjb2Rpbmcgb2YgY29udGVudCBvciB0cmFuc2ZlciBlbmNvZGVkIGNvbnRlbnQuIFRoaXMgbWF5IGJlCiAgcHJlZmVyYWJsZSBpbiBjYXNlcyB3aGVyZSB5b3UgdXNlIGxpYmN1cmwgZm9yIHByb3h5IHB1cnBvc2VzIG9yIHNpbWlsYXIuIFRoZQogIGNvbW1hbmQgbGluZSB0b29sIGdvdCBhIC0tcmF3IG9wdGlvbiB0byBkaXNhYmxlIGJvdGggYXQgb25jZS4KCi0gcmVsZWFzZSB0YXJiYWxscyBtYWRlIHdpdGggbWFrZXRneiB3aWxsIGZyb20gbm93IG9uIGhhdmUgYSBMSUJDVVJMX1RJTUVTVEFNUAogIGRlZmluZSBzZXQgdG8gaG9sZCB0aGUgZXhhY3QgZGF0ZSBhbmQgdGltZSBvZiB3aGVuIHRoZSB0YXJiYWxsIHdhcyBidWlsdCwgYXMKICBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyB1c2luZyB0aGUgVVRDIHRpbWUgem9uZS4KICAKLSBKZWZmIFBvaGxtZXllciBmaXhlZCBhIGZsYXcgaW4gY3VybF9tdWx0aV9hZGRfaGFuZGxlKCkgd2hlbiBhZGRpbmcgYSBoYW5kbGUKICB0aGF0IGhhcyBhbiBlYXN5IGhhbmRsZSBwcmVzZW50IGluIHRoZSAiY2xvc3VyZSIgbGlzdCBwZW5kaW5nIGNsb3N1cmUuCgpEYW5pZWwgKDYgRmVicnVhcnkgMjAwNykKLSBSZWd1bGFyIGZpbGUgZG93bmxvYWRzIHdpaHQgU0ZUUCBhbmQgU0NQIGFyZSBub3cgZG9uZSB1c2luZyB0aGUgbm9uLWJsb2NraW5nCiAgQVBJIG9mIGxpYnNzaDIsIGlmIHRoZSBsaWJzc2gyIGhlYWRlcnMgc2VlbSB0byBzdXBwb3J0IHRoZW0uIFRoaXMgd2lsbCBtYWtlCiAgU0NQIGFuZCBTRlRQIG11Y2ggbW9yZSByZXNwb25zaXZlIGFuZCBiZXR0ZXIgbGliY3VybCBjaXRpemVucyB3aGVuIHVzZWQgd2l0aAogIHRoZSBtdWx0aSBpbnRlcmZhY2UgZXRjLgoKRGFuaWVsICg1IEZlYnJ1YXJ5IDIwMDcpCi0gTWljaGFlbCBXYWxsbmVyIGFkZGVkIHN1cHBvcnQgZm9yIENVUkxPUFRfVElNRU9VVF9NUyBhbmQKICBDVVJMT1BUX0NPTk5FQ1RUSU1FT1VUX01TIHRoYXQsIGFzIHRoZWlyIG5hbWVzIHN1Z2dlc3QsIGRvIHRoZSB0aW1lb3V0cyB3aXRoCiAgbWlsbGlzZWNvbmQgcmVzb2x1dGlvbi4gVGhlIG9ubHkgcmVzdHJpY3Rpb24gdG8gdGhhdCBpcyB0aGUgYWxhcm0oKQogIChzb21ldGltZXMpIHVzZWQgdG8gYWJvcnQgbmFtZSByZXNvbHZlcyBhcyB0aGF0IHVzZXMgZnVsbCBzZWNvbmRzLiBJIGZpeGVkCiAgdGhlIEZUUCByZXNwb25zZSB0aW1lb3V0IHBhcnQgb2YgdGhlIHBhdGNoLgoKICBJbnRlcm5hbGx5IHdlIG5vdyBjb3VudCBhbmQga2VlcCB0aGUgdGltZW91dHMgaW4gbWlsbGlzZWNvbmRzIGJ1dCBpdCBhbHNvCiAgbWVhbnMgd2UgbXVsdGlwbHkgc2V0IHRpbWVvdXRzIHdpdGggMTAwMC4gVGhlIGVmZmVjdCBvZiB0aGlzIGlzIHRoYXQgbm8KICB0aW1lb3V0IGNhbiBiZSBzZXQgdG8gbW9yZSB0aGFuIDJeMzEgbWlsbGlzZWNvbmRzIChvbiAzMiBiaXQgc3lzdGVtcyksIHdoaWNoCiAgZXF1YWxzIDI0Ljg2IGRheXMuICBXZSBwcm9iYWJseSBjb3VsZG4ndCBiZWZvcmUgZWl0aGVyIHNpbmNlIHRoZSBjb2RlIGRpZAogICoxMDAwIG9uIHRoZSB0aW1lb3V0IHZhbHVlcyBvbiBzZXZlcmFsIHBsYWNlcyBhbHJlYWR5LgoKRGFuaWVsICgzIEZlYnJ1YXJ5IDIwMDcpCi0gWWFuZyBUc2UgZml4ZWQgdGhlIGNvb2tpZSBleHBpcnkgZGF0ZSBpbiBzZXZlcmFsIHRlc3QgY2FzZXMgdGhhdCBzdGFydGVkIHRvCiAgZmFpbCBzaW5jZSB0aGV5IHVzZWQgIjEgZmViIDIwMDciLi4uCgotIE1hbmZyZWQgU2Nod2FyYiByZXBvcnRlZCB0aGF0IHNvY2tzNSBzdXBwb3J0IHdhcyBicm9rZW4gYW5kIGhlbHAgdXMgcGlucG9pbnQKICB0aGUgcHJvYmxlbS4gVGhlIGNvZGUgbm93IHRyaWVzIGhhcmRlciB0byB1c2UgaHR0cHJveHkgYW5kIHByb3h5IHdoZXJlCiAgYXBwcHJvcHJpYXRlLCBhcyBub3QgYWxsIHByb3hpZXMgYXJlIEhUVFAuLi4KClZlcnNpb24gNy4xNi4xICgyOSBKYW51YXJ5IDIwMDcpCgpEYW5pZWwgKDI5IEphbnVhcnkgMjAwNykKLSBNaWNoYWVsIFdhbGxuZXIgcmVwb3J0ZWQgdGhhdCB3aGVuIGRvaW5nIGEgQ09OTkVDVCB3aXRoIGEgY3VzdG9tIFVzZXItQWdlbnQKICBoZWFkZXIsIHlvdSBnb3QgX3R3b18gVXNlci1BZ2VudCBoZWFkZXJzIGluIHRoZSBDT05ORUNUIHJlcXVlc3QuLi4hIEFkZGVkCiAgdGVzdCBjYXNlIDI4NyB0byB2ZXJpZnkgdGhlIGZpeC4KCkRhbmllbCAoMjggSmFudWFyeSAyMDA3KQotIGN1cmxfZWFzeV9yZXNldCgpIG5vdyByZXNldHMgdGhlIENBIGJ1bmRsZSBwYXRoIGNvcnJlY3RseS4KCi0gRGF2aWQgTWNDcmVlZHkgZml4ZWQgdGhlIEN1cmwgY29tbWFuZCBsaW5lIHRvb2wgZm9yIEhUVFAgb24gbm9uLUFTQ0lJCiAgcGxhdGZvcm1zLgoKRGFuaWVsICgyNSBKYW51YXJ5IDIwMDcpCi0gQWRkZWQgdGhlIC0tbGliY3VybCBbZmlsZV0gb3B0aW9uIHRvIGN1cmwuIEFwcGVuZCB0aGlzIG9wdGlvbiB0byBhbnkKICBvcmRpbmFyeSBjdXJsIGNvbW1hbmQgbGluZSwgYW5kIHlvdSB3aWxsIGdldCBhIGxpYmN1cmwtdXNpbmcgc291cmNlIGNvZGUKICB3cml0dGVuIHRvIHRoZSBmaWxlIHRoYXQgZG9lcyB0aGUgZXF1aXZhbGVudCBvcGVyYXRpb24gb2Ygd2hhdCB5b3VyIGNvbW1hbmQKICBsaW5lIG9wZXJhdGlvbiBkb2VzIQoKRGFuIEYgKDI0IEphbnVhcnkgMjAwNykKLSBGaXhlZCBhIGRhbmdsaW5nIHBvaW50ZXIgcHJvYmxlbSB0aGF0IHByZXZlbnRlZCB0aGUgaHR0cF9wcm94eSBlbnZpcm9ubWVudAogIHZhcmlhYmxlIGZyb20gYmVpbmcgcHJvcGVybHkgdXNlZCBpbiBtYW55IGNhc2VzIChhbmQgY2F1c2VkIHRlc3QgY2FzZSA2MwogIHRvIGZhaWwpLgoKRGFuaWVsICgyMyBKYW51YXJ5IDIwMDcpCi0gRGF2aWQgTWNDcmVlZHkgZGlkIE5UTE0gY2hhbmdlcyBtYWlubHkgZm9yIG5vbi1BU0NJSSBwbGF0Zm9ybXM6CgogICMxCiAgVGhlcmUncyBhIGNvbXBpbGF0aW9uIGVycm9yIGluIGh0dHBfbnRsbS5jIGlmIFVTRV9OVExNMlNFU1NJT04gaXMgTk9UCiAgZGVmaW5lZC4gIEkgbm90aWNlZCB0aGlzIHdoaWxlIHRlc3RpbmcgdmFyaW91cyBjb25maWd1cmF0aW9ucy4gIExpbmUgODY3IG9mCiAgdGhlIGN1cnJlbnQgaHR0cF9udGxtLmMgaXMgYSBjbG9zaW5nIGJyYWNrZXQgZm9yIGFuIGlmL2Vsc2UgcGFpciB0aGF0IG9ubHkKICBnZXRzIGNvbXBpbGVkIGluIGlmIFVTRV9OVExNMlNFU1NJT04gaXMgZGVmaW5lZC4gIEJ1dCB0aGlzIGNsb3NpbmcgYnJhY2tldAogIHdhc24ndCBpbiBhbiAjaWZkZWYgc28gdGhlIGNvZGUgZmFpbHMgdG8gY29tcGlsZSB1bmxlc3MgVVNFX05UTE0yU0VTU0lPTiB3YXMKICBkZWZpbmVkLiAgTGluZXMgMTk4IGFuZCAxNDAgb2YgbXkgcGF0Y2ggd3JhcHMgdGhhdCBjbG9zaW5nIGJyYWNrZXQgaW4gYW4KICAjaWZkZWYgVVNFX05UTE0yU0VTU0lPTi4KCiAgIzIKICBJIG5vdGljZWQgc2V2ZXJhbCBwaWNreSBjb21waWxlciB3YXJuaW5ncyB3aGVuIERFQlVHX01FIGlzIGRlZmluZWQuICBJJ3ZlCiAgZml4ZWQgdGhlbSB3aXRoIGNhc3RpbmcuICBCeSB0aGUgd2F5LCBERUJVR19NRSB3YXMgYSBodWdlIGhlbHAgaW4KICB1bmRlcnN0YW5kaW5nIHRoaXMgY29kZS4KCiAgIzMKICBIb3BlZnVsbHkgdGhlIGxhc3Qgbm9uLUFTQ0lJIGNvbnZlcnNpb24gcGF0Y2ggZm9yIGxpYmN1cmwgaW4gYSB3aGlsZS4gIEkKICBjaGFuZ2VkIHRoZSAiTlRMTVNTUCIgbGl0ZXJhbCB0byBoZXggc2luY2UgdGhpcyBzaWduYXR1cmUgbXVzdCBhbHdheXMgYmUgaW4KICBBU0NJSS4KCiAgQ29udmVyc2lvbiBjb2RlIHdhcyBzdHJhdGVnaWNhbGx5IGFkZGVkIHdoZXJlIG5lY2Vzc2FyeS4gIEFuZCB0aGUKICBDdXJsX2Jhc2U2NF9lbmNvZGUgY2FsbHMgd2VyZSBjaGFuZ2VkIHNvIHRoZSBiaW5hcnkgImJsb2JzIiBodHRwX250bG0uYwogIGNyZWF0ZXMgYXJlIE5PVCB0cmFuc2xhdGVkIG9uIG5vbi1BU0NJSSBwbGF0Zm9ybXMuCgpEYW4gRiAoMjIgSmFudWFyeSAyMDA3KQotIENvbnZlcnRlZCAobW9zdCBvZikgdGhlIHRlc3QgZGF0YSBmaWxlcyBpbnRvIGdlbnVpbmUgWE1MLiAgQSBoYW5kZnVsIHN0aWxsCiAgYXJlIG5vdCwgZHVlIG1haW5seSB0byB0aGUgbGFjayBvZiBzdXBwb3J0IGZvciBYTUwgY2hhcmFjdGVyIGVudGl0aWVzCiAgKGUuZy4gJiA9PiAmYW1wOyApLiAgVGhpcyB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIHZhbGlkYXRlIHRlc3QgZmlsZXMgdXNpbmcKICB0b29scyBsaWtlIHhtbGxpbnQsIGFzIHdlbGwgYXMgdG8gZWRpdCBhbmQgdmlldyB0aGVtIHVzaW5nIFhNTCB0b29scy4KCkRhbmllbCAoMTYgSmFudWFyeSAyMDA3KQotIEFybWVsIEFzc2VsaW4gaW1wcm92ZWQgbGliY3VybCB0byBiZWhhdmUgYSBsb3QgYmV0dGVyIHdoZW4gYW4gZWFzeSBoYW5kbGUKICBkb2luZyBhbiBGVFAgdHJhbnNmZXIgaXMgcmVtb3ZlZCBmcm9tIGEgbXVsdGkgaGFuZGxlIGJlZm9yZSBjb21wbGV0aW9uLiBUaGUKICBmaXggYWxzbyBmaXhlZCB0aGUgImFsaXZlIGNvdW50ZXIiIHRvIGJlIGNvcnJlY3Qgb24gInByZW1hdHVyZSByZW1vdmFsIiBmb3IKICBhbGwgcHJvdG9jb2xzLgoKRGFuIEYgKDE2IEphbnVhcnkgMjAwNykKLSBGaXhlZCBhIHNtYWxsIG1lbW9yeSBsZWFrIGluIHRmdHAgdXBsb2FkcyBkaXNjb3ZlcmVkIGJ5IGN1cmwncyBtZW1vcnkgbGVhawogIGRldGVjdG9yLiAgQWxzbyBjaGFuZ2VkIHRmdHAgZG93bmxvYWRzIHRvIFVSTC11bmVzY2FwZSB0aGUgZG93bmxvYWRlZAogIGZpbGUgbmFtZS4KCkRhbmllbCAoMTQgSmFudWFyeSAyMDA3KQotIERhdmlkIE1jQ3JlZWR5IHByb3ZpZGVkIGxpYmN1cmwgY2hhbmdlcyBmb3IgZG9pbmcgSFRUUCBjb21tdW5pY2F0aW9uIG9uCiAgbm9uLUFTQ0lJIHBsYXRmb3Jtcy4gSXQgZG9lcyBhZGQgc29tZSBjb21wbGV4aXR5LCBtb3N0IG5vdGFibHkgd2l0aCBtb3JlCiAgI2lmZGVmcywgYnV0IEkgd2FudCB0byBzZWUgdGhpcyBzdXBwb3J0ZWQgYWRkZWQgYW5kIEkgY2FuJ3Qgc2VlIGhvdyB3ZSBjYW4KICBhZGQgaXQgd2l0aG91dCB0aGUgZXh0cmEgc3R1ZmYgYWRkZWQuCgotIFNldHRpbmcgQ1VSTE9QVF9DT09LSUVMSVNUIHRvICJBTEwiIHdoZW4gbm8gY29va2llcyBhdCBhbGwgd2FzIHByZXNlbnQsCiAgbGliY3VybCB3b3VsZCBjcmFzaCB3aGVuIHRyeWluZyB0byByZWFkIGEgTlVMTCBwb2ludGVyLgoKRGFuaWVsICgxMiBKYW51YXJ5IDIwMDcpCi0gVG9ieSBQZXRlcnNvbiBmb3VuZCBhIG5hc3R5IGJ1ZyB0aGF0IHByZXZlbnRlZCAobGliKWN1cmwgZnJvbSBwcm9wZXJseQogIGRvd25sb2FkaW5nIChtb3N0KSB0aGluZ3MgdGhhdCB3ZXJlIGxhcmdlciB0aGFuIDRHQiBvbiAzMiBiaXQgc3lzdGVtcy4gIE1hdHQKICBXaXRoZXJzcG9vbiBoZWxwZWQgYXMgbmFycm93IGRvd24gdGhlIHByb2JsZW0uCgpEYW5pZWwgKDUgSmFudWFyeSAyMDA3KQotIExpbnVzIE5pZWxzZW4gRmVsdHppbmcgaW50cm9kdWNlZCB0aGUgLS1mdHAtc3NsLWNjYyBjb21tYW5kIGxpbmUgb3B0aW9uIHRvCiAgY3VybCB0aGF0IHVzZXMgdGhlIG5ldyBDVVJMT1BUX0ZUUF9TU0xfQ0NDIG9wdGlvbiBpbiBsaWJjdXJsLiBJZiBlbmFibGVkLCBpdAogIHdpbGwgbWFrZSBsaWJjdXJsIHNodXRkb3duIFNTTC9UTFMgYWZ0ZXIgdGhlIGF1dGhlbnRpY2F0aW9uIGlzIGRvbmUgb24gYQogIEZUUC1TU0wgb3BlcmF0aW9uLgoKRGFuaWVsICg0IEphbnVhcnkgMjAwNykKLSBEYXZpZCBNY0NyZWVkeSBtYWRlIGNoYW5nZXMgdG8gYWxsb3cgYmFzZTY0IGVuY29kaW5nL2RlY29kaW5nIHRvIHdvcmsgb24KICBub24tQVNDSUkgcGxhdGZvcm1zLgoKRGFuaWVsICgzIEphbnVhcnkgMjAwNykKLSBNYXR0IFdpdGhlcnNwb29uIGZpeGVkIHRoZSBmbGF3IHdoaWNoIG1hZGUgbGliY3VybCA3LjE2LjAgYWx3YXlzIHN0b3JlCiAgZG93bmxvYWRlZCBkYXRhIGluIHR3byBidWZmZXJzLCBqdXN0IHRvIGJlIGFibGUgdG8gZGVhbCB3aXRoIGEgc3BlY2lhbCBIVFRQCiAgcGlwZWxpbmluZyBjYXNlLiBUaGF0IGlzIG5vdyBvbmx5IGFjdGl2YXRlZCBmb3IgcGlwZWxpbmVkIHRyYW5zZmVycy4gSW4KICBNYXR0J3MgY2FzZSwgaXQgc2hvd2VkIGFzIGEgY29uc2lkZXJhYmxlIHBlcmZvcm1hbmNlIGRpZmZlcmVuY2UsCgpEYW5pZWwgKDIgSmFudWFyeSAyMDA3KQotIFZpY3RvciBTbmV6aGtvIGhlbHBlZCB1cyBmaXggYnVnIHJlcG9ydCAjMTYwMzcxMgogIChodHRwOi8vY3VybC5oYXh4LnNlL2J1Zy92aWV3LmNnaT9pZD0xNjAzNzEyKSAoa25vd24gYnVnICMzNikgLS1saW1pdC1yYXRlCiAgKENVUkxPUFRfTUFYX1NFTkRfU1BFRURfTEFSR0UgYW5kIENVUkxPUFRfTUFYX1JFQ1ZfU1BFRURfTEFSR0UpIGFyZSBicm9rZW4KICBvbiBXaW5kb3dzIChzaW5jZSA3LjE2LjAsIGJ1dCB0aGF0J3Mgd2hlbiB0aGV5IHdlcmUgaW50cm9kdWNlZCBhcyBwcmV2aW91cwogIHRvIHRoYXQgdGhlIGxpbWl0aW5nIGxvZ2ljIHdhcyBtYWRlIGluIHRoZSBhcHBsaWNhdGlvbiBvbmx5IGFuZCBub3QgaW4gdGhlCiAgbGlicmFyeSkuIEl0IHdhcyBhY3R1YWxseSBhbHNvIGJyb2tlbiBvbiBzZWxlY3QoKS1iYXNlZCBzeXN0ZW1zIChhcyBhcHBvc2VkCiAgdG8gcG9sbCgpKSBidXQgd2UgaGF2ZW4ndCBoYWQgYW55IHN1Y2ggcmVwb3J0cy4gV2Ugbm93IHVzZSBzZWxlY3QoKSwgU2xlZXAoKQogIG9yIGRlbGF5KCkgcHJvcGVybHkgdG8gc2xlZXAgYSB3aGlsZSB3aXRob3V0IHdhaXRpbmcgZm9yIGFueXRoaW5nIGlucHV0IG9yCiAgb3V0cHV0IHdoZW4gdGhlIHJhdGUgbGltaXRpbmcgaXMgYWN0aXZhdGVkIHdpdGggdGhlIGVhc3kgaW50ZXJmYWNlLgoKLSBNb2RpZmllZCBsaWJjdXJsLnBjLmluIHRvIHVzZSBMaWJzLnByaXZhdGUgZm9yIHRoZSBsaWJzIGxpYmN1cmwgaXRzZWxmIG5lZWRzCiAgdG8gZ2V0IGJ1aWx0IHN0YXRpYy4gSXQgaGFzIGJlZW4gbWVudGlvbmVkIGJlZm9yZSBhbmQgd2FzIGFnYWluIGJyb3VnaHQgdG8KICBvdXIgYXR0ZW50aW9uIGJ5IE5hdGhhbmFlbCBOZXJvZGUgd2hvIGZpbGVkIGRlYmlhbiBidWcgcmVwb3J0ICM0MDUyMjYKICAoaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTQwNTIyNikuCgo=