ClVzaW5nIFNwYW1Bc3Nhc3NpbiBXaXRoIEFuIExEQVAgU2VydmVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpTcGFtQXNzYXNzaW4gY2FuIG5vdyBsb2FkIHVzZXJzJyBzY29yZSBmaWxlcyBmcm9tIGFuIExEQVAgc2VydmVyLiAgVGhlIGNvbmNlcHQKaGVyZSBpcyB0byBoYXZlIGEgd2ViIGFwcGxpY2F0aW9uIChQSFAvcGVybC9BU1AvZXRjLikgdGhhdCB3aWxsIGFsbG93IHVzZXJzIHRvCmJlIGFibGUgdG8gdXBkYXRlIHRoZWlyIGxvY2FsIHByZWZlcmVuY2VzIG9uIGhvdyBTcGFtQXNzYXNzaW4gd2lsbCBmaWx0ZXIgdGhlaXIKZS1tYWlsLiAgVGhlIG1vc3QgY29tbW9uIHVzZSBmb3IgYSBzeXN0ZW0gbGlrZSB0aGlzIHdvdWxkIGJlIGZvciB1c2VycyB0byBiZQphYmxlIHRvIHVwZGF0ZSB0aGUgd2hpdGUgbGlzdCBvZiBhZGRyZXNzZXMgKHdlbGNvbWVsaXN0X2Zyb20sIHByZXZpb3VzbHkgd2hpdGVsaXN0X2Zyb20pIAp3aXRob3V0IHRoZSBuZWVkIGZvciB0aGVtIHRvIHVwZGF0ZSB0aGVpciAkSE9NRS8uc3BhbWFzc2Fzc2luL3VzZXJfcHJlZnMgZmlsZS4gIApJdCBpcyBhbHNvIHF1aXRlIGNvbW1vbiBmb3IgdXNlcnMgbGlzdGVkIGluIC9ldGMvcGFzc3dkIHRvIG5vdCBoYXZlIGEgaG9tZSBkaXJlY3RvcnksCnRoZXJlZm9yZSwgdGhlIG9ubHkgd2F5IHRvIGhhdmUgdGhlaXIgb3duIGxvY2FsIHNldHRpbmdzIHdvdWxkIGJlIHRocm91Z2ggYQpkYXRhYmFzZSBvciBMREFQIHNlcnZlci4KClNwYW1Bc3Nhc3NpbiB3aWxsIGNoZWNrIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBmaWxlIChpZS4gYW55IGZpbGUgbWF0Y2hpbmcKL2V0Yy9tYWlsL3NwYW1hc3Nhc3Npbi8qLmNmKSBmb3IgdGhlIGZvbGxvd2luZyBzZXR0aW5nczoKCiAgdXNlcl9zY29yZXNfZHNuIGxkYXA6Ly9ob3N0OnBvcnQvZGM9YmFzZWRuLGRjPWRlP2F0dHI/c2NvcGU/dWlkPV9fVVNFUk5BTUVfXwogIHVzZXJfc2NvcmVzX2xkYXBfdXNlcm5hbWUJYmluZCBkbgogIHVzZXJfc2NvcmVzX2xkYXBfcGFzc3dvcmQJcGFzc3dvcmQKClRoZSBmaXJzdCBvcHRpb24sIHVzZXJfc2NvcmVzX2RzbiwgZGVzY3JpYmVzIHRoZSBkYXRhIHNvdXJjZSBuYW1lIHRoYXQgd2lsbCBiZQp1c2VkIHRvIGNyZWF0ZSB0aGUgY29ubmVjdGlvbiB0byB5b3VyIExEQVAgc2VydmVyLiBZb3UgaGF2ZSB0byB3cml0ZSB0aGUgRFNOIGFzCmFuIExEQVAgVVJMLCB0aGUgY29tcG9uZW50cyBiZWluZyB0aGUgaG9zdCBhbmQgcG9ydCB0byBjb25uZWN0IHRvLCB0aGUgYmFzZSBETgpmb3IgdGhlIHNlYXJjaCwgdGhlIHNjb3BlIG9mIHRoZSBzZWFyY2ggKGJhc2UsIG9uZSBvciBzdWIpLCB0aGUgc2luZ2xlCmF0dHJpYnV0ZSBiZWluZyB0aGUgbXVsdGl2YWx1ZWQgYXR0cmlidXRlIHVzZWQgdG8gaG9sZCB0aGUgY29uZmlndXJhdGlvbiBkYXRhCihzcGFjZSBzZXBhcmF0ZWQgcGFpcnMgb2Yga2V5IGFuZCB2YWx1ZSwganVzdCBhcyBpbiBhIGZpbGUpIGFuZCBmaW5hbGx5IHRoZQpmaWx0ZXIgYmVpbmcgdGhlIGV4cHJlc3Npb24gdXNlZCB0byBmaWx0ZXIgb3V0IHRoZSB3YW50ZWQgdXNlcm5hbWUuIE5vdGUgdGhhdAp0aGUgZmlsdGVyIGV4cHJlc3Npb24gdXNlcyB0aGUgbGl0ZXJhbCB0ZXh0IF9fVVNFUk5BTUVfXyBhcyBhIHBsYWNlaG9sZGVyIGZvcgp0aGUgdXNlcm5hbWUgKFNwYW1Bc3Nhc3NpbiB3aWxsIHVzZSBhIHMvLy9nIHN0YXRlbWVudCB0byByZXBsYWNlIGl0IHdpdGggdGhlCmFjdHVhbCB1c2VybmFtZSkuCgpFeGFtcGxlczoKCiAgbGRhcDovL2xvY2FsaG9zdDozODkvZGM9a29laG50b3BwLGRjPWRlP3NwYW1hc3Nhc3Npbj9zdWI/dWlkPV9fVVNFUk5BTUVfXwogIGxkYXA6Ly9sb2NhbGhvc3Q6Mzg5L289c3Rvb2dlcz9zcGFtYXNzYXNzaW4/c3ViP3VpZD1fX1VTRVJOQU1FX18KCgpJZiB0aGUgdXNlcl9zY29yZXNfZHNuIG9wdGlvbiBkb2VzIG5vdCBleGlzdCwgU3BhbUFzc2Fzc2luIHdpbGwgbm90IGF0dGVtcHQKdG8gdXNlIGFuIExEQVAgc2VydmVyIGZvciByZXRyaWV2aW5nIHVzZXJzJyBwcmVmZXJlbmNlcy4gTm90ZSB0aGF0IHRoaXMgd2lsbApOT1QgbG9vayBmb3IgdGVzdCBydWxlcywgb25seSBsb2NhbCBzY29yZXMsIHdlbGNvbWVsaXN0X2Zyb20ocykgKHByZXZpb3VzbHkgd2hpdGVsaXN0X2Zyb20pLCAKYW5kIHJlcXVpcmVkX3Njb3JlLgoKUmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLQoKSW4gb3JkZXIgZm9yIFNwYW1Bc3Nhc3NpbiB0byB3b3JrIHdpdGggeW91ciBMREFQIGRhdGFiYXNlLCB5b3UgbXVzdCBoYXZlCnRoZSBwZXJsIE5ldDo6TERBUCBtb2R1bGUgaW5zdGFsbGVkLiBZb3UnbGwgYWxzbyBuZWVkIHRoZSBVUkkgbW9kdWxlLgoKSW4gb3JkZXIgZm9yIHNwYW1kIHRvIHVzZSB0aGUgTERBUCBkcml2ZXIsIHlvdSB3aWxsIGhhdmUgdG8gc3RhcnQgc3BhbWQKd2l0aCB0aGUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzICctLWxkYXAtY29uZmlnIC14Jy4KCkVhY2ggdXNlciB0aGF0IHdhbnRzIHRvIHV0aWxpc2UgdGhlIFNwYW1Bc3Nhc3NpbiBMREFQIGRyaXZlciBtdXN0IGFkZAp0aGUgJ3NwYW1hc3Nhc3NpbicgYXR0cmlidXRlIGluIHRoZWlyIG9iamVjdCAoZWl0aGVyIG1hbnVhbGx5IG9yIHZpYSB0aGUKd2ViIGludGVyZmFjZSBvZiB5b3VyIG1ha2luZy9jaG9pY2UpIGxpa2UgdGhpcyAoc2VlIHRoZSBmaWxlIHNhX3Rlc3QubGRpZgppbiB0aGlzIGRpcmVjdG9yeSBmb3IgYSBmdWxsIGRhdGFiYXNlIGV4YW1wbGUpOgoKICBzcGFtYXNzYXNzaW46IGFkZF9oZWFkZXIgYWxsIEZvbyBMREFQIHJlYWQKCkRhdGFiYXNlIFNjaGVtYQotLS0tLS0tLS0tLS0tLS0KCllvdSBjYW4gdXNlIGFueSBzY2hlbWEgZXh0ZW5zaW9uIHRvIHlvdXIgdXNlciBlbnRyaWVzIHdpdGggU3BhbUFzc2Fzc2luLAphcyBsb25nIGFzIHRoZSBhdHRyaWJ1dGUgaXMgbXVsdGl2YWx1ZWQgYW5kIGNvcnJlY3RseSBuYW1lZCBpbiB5b3VyIExEQVAgdXJsLgpXZSBhcmUgY3VycmVudGx5IHVzaW5nIGEgPGN1c3RvbWVybmFtZT5zcGFtYXNzYXNzaW4gZmllbGQgdGhhdCBpcyBwYXJ0IG9mCm91ciBpbmV0T3JnUGVyc29uIHN1YmNsYXNzLgoKSGVyZSdzIGFuIGV4YW1wbGUgZm9yIG9wZW5sZGFwJ3MgL2V0Yy9vcGVubGRhcC9zY2hlbWEvaW5ldG9yZ3BlcnNvbi5zY2hlbWEgOgoKICAjIFNwYW1Bc3Nhc3NpbgogICMgc2VlIGh0dHA6Ly9TcGFtQXNzYXNzaW4ub3JnLyAuCiAgYXR0cmlidXRldHlwZSAoIDIuMTYuODQwLjEuMTEzNzMwLjMuMS4yMTcKICAgICAgICAgIE5BTUUgJ3NwYW1hc3Nhc3NpbicKICAgICAgICAgIERFU0MgJ1NwYW1Bc3Nhc3NpbiB1c2VyIHByZWZlcmVuY2VzIHNldHRpbmdzJwoJICBFUVVBTElUWSBjYXNlRXhhY3RNYXRjaAoJICBTWU5UQVggMS4zLjYuMS40LjEuMTQ2Ni4xMTUuMTIxLjEuMTUgKQoKKGRvbid0IGZvcmdldCB0byBhZGQgIiQgc3BhbWFzc2Fzc2luIiB0byB0aGUgb2JqZWN0Y2xhc3MgTUFZIGNsYXVzZS4pCgoKVGVzdGluZyBTcGFtQXNzYXNzaW4vTERBUAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUbyB0ZXN0IHlvdXIgTERBUCBzZXR1cCwgYW5kIGRlYnVnIGFueSBwb3NzaWJsZSBwcm9ibGVtcywgeW91IHNob3VsZCBzdGFydApzcGFtZCB3aXRoIHRoZSAtRCBvcHRpb24sIHdoaWNoIHdpbGwga2VlcCBzcGFtZCBpbiB0aGUgZm9yZWdyb3VuZCwgYW5kIHdpbGwKb3V0cHV0IGRlYnVnIG1lc3NhZ2UgdG8gdGhlIHRlcm1pbmFsLiBZb3Ugc2hvdWxkIHRoZW4gdGVzdCBzcGFtZCB3aXRoIGEKbWVzc2FnZSBieSBjYWxsaW5nIHNwYW1jLiAgWW91IGNhbiB1c2UgdGhlIHNhbXBsZS1zcGFtLnR4dCBmaWxlIHdpdGggdGhlCmZvbGxvd2luZyBjb21tYW5kOgoKICBjYXQgc2FtcGxlLXNwYW0udHh0IHwgc3BhbWMKCldhdGNoIHRoZSBkZWJ1ZyBvdXRwdXQgZnJvbSBzcGFtZCBhbmQgbG9vayBmb3IgdGhlIGZvbGxvd2luZyBkZWJ1ZyBsaW5lOgoKICByZXRyaWV2aW5nIExEQVAgcHJlZnMgZm9yIDx1c2VybmFtZT46IDx2YWx1ZT4KCklmIHlvdSBkbyBub3Qgc2VlIHRoZSBhYm92ZSB0ZXh0LCB0aGVuIHRoZSBMREFQIHF1ZXJ5IHdhcyBub3Qgc3VjY2Vzc2Z1bCwgYW5kCnlvdSBzaG91bGQgc2VlIGFueSBlcnJvciBtZXNzYWdlcyByZXBvcnRlZC4gPHVzZXJuYW1lPiBzaG91bGQgYmUgdGhlIHVzZXIKdGhhdCB3YXMgcGFzc2VkIHRvIHNwYW1kIGFuZCBpcyB1c3VhbGx5IHRoZSB1c2VyIGV4ZWN1dGluZyBzcGFtYy4KCklmIHlvdSBuZWVkIHRvIHNldCB1cCBMREFQLCBhIGdvb2QgZ3VpZGUgaXMgaGVyZToKaHR0cDovL3lvbGludXguY29tL1RVVE9SSUFMUy9MaW51eFR1dG9yaWFsTERBUC5odG1sCgpUbyB0ZXN0IExEQVAgc3VwcG9ydCB1c2luZyB0aGUgU3BhbUFzc2Fzc2luIHRlc3Qgc3VpdGUsIHlvdSBuZWVkIHRvCnBlcmZvcm0gYSBsaXR0bGUgYml0IG9mIG1hbnVhbCBjb25maWd1cmF0aW9uIGZpcnN0LiAgU2VlIHRoZSBmaWxlCiJsZGFwL1JFQURNRS50ZXN0aW5nIiBmb3IgZGV0YWlscy4KCgoqKioqKioKTkI6ICBUaGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIEJFVEEsIGFuZCB0aGUgaW50ZXJmYWNlIG9yIG92ZXJhbGwKb3BlcmF0aW9uIG9mIExEQVAgc3VwcG9ydCBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIHdpdGggZnV0dXJlIHJlbGVhc2VzIG9mIFNBLgoqKioqKioKClBsZWFzZSBzZW5kIGFueSBjb21tZW50cyB0byA8a3JpcyBhdCBrb2VobnRvcHAuZGU+IGFuZCBmaWxlIGJ1Z3MgdmlhCjxodHRwOi8vaXNzdWVzLmFwYWNoZS5vcmcvU3BhbUFzc2Fzc2luLz4uCgpLcmlzdGlhbiBL9mhudG9wcAo=