PGh0bWw+DQogIDxoZWFkPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXdpbmRvd3MtMTI1MiI+DQogIDwvaGVhZD4NCiAgPGJvZHk+DQogICAgPHA+TGliUmF3OiBHZW5lcmFsIE5vdGVzIG9uIEFQSTxhIGhyZWY9ImluZGV4Lmh0bWwiPltiYWNrIHRvIEluZGV4XTwvYT48L3A+DQogICAgPGgxPkxpYlJhdzogR2VuZXJhbCBOb3RlcyBvbiBBUEk8L2gxPg0KICAgIDxoMj5Db250ZW50czwvaDI+DQogICAgPG9sPg0KICAgICAgPGxpPjxhIGhyZWY9IiN2ZXJzaW9ucyI+TGliUmF3IGVkaXRpb25zPC9hPjwvbGk+DQogICAgICA8bGk+PGEgaHJlZj0iI2Vycm9ycyI+RXJyb3IgQ29kZSBDb252ZW50aW9ucyBhbmQgRXJyb3IgSGFuZGxpbmc8L2E+PC9saT4NCiAgICAgIDxsaT48YSBocmVmPSIjd2FybmluZ3MiPk5vbnN0YW5kYXJkIFNpdHVhdGlvbnMgVGhhdCBBcmUgTm90IEVycm9yczwvYT48L2xpPg0KICAgICAgPGxpPjxhIGhyZWY9IiNpbyI+SW5wdXQgTGF5ZXIgQWJzdHJhY3Rpb248L2E+PC9saT4NCiAgICAgIDxsaT48YSBocmVmPSJ0aHJlYWRzIj5UaHJlYWQgU2FmZXR5PC9hPjwvbGk+DQogICAgICA8bGk+PGEgaHJlZj0iI0NYWCI+VGhlIFVzZSBvZiBDKys8L2E+PC9saT4NCiAgICAgIDxsaT48YSBocmVmPSIjaW1nZGF0YV9wYXJhbXMiPlBhcmFtZXRlcnMgb2YgdGhlIExpYlJhdzo6aW1nZGF0YS5wYXJhbXMNCiAgICAgICAgICBTdHJ1Y3R1cmUgQWZmZWN0aW5nIHRoZSBCZWhhdmlvciBvZiBvcGVuX2ZpbGUvdW5wYWNrL3VucGFja190aHVtYjwvYT48L2xpPg0KICAgICAgPGxpPjxhIGhyZWY9IiNtZW1vcnkiPk1lbW9yeSBVc2FnZTwvYT4NCiAgICAgICAgPG9sPg0KICAgICAgICAgIDxsaT48YSBocmVmPSIjc3RhY2siPlN0YWNrIFVzYWdlPC9hPjwvbGk+DQogICAgICAgICAgPGxpPjxhIGhyZWY9IiNtZW1tZ3IiPkR5bmFtaWMgTWVtb3J5IE1hbmFnZW1lbnQ8L2E+PC9saT4NCiAgICAgICAgICA8bGk+PGEgaHJlZj0iI21lbXVzZSI+RHluYW1pYyBNZW1vcnkgVXNhZ2U8L2E+DQogICAgICAgICAgICA8b2w+DQogICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjbWVtcmF3Ij5NZW1vcnkgQnVmZmVyIGZvciB0aGUgUkFXIEltYWdlPC9hPjwvbGk+DQogICAgICAgICAgICAgIDxsaT48YSBocmVmPSIjbWVtaW1hZ2UiPk1lbW9yeSBmb3IgdGhlIFBvc3Rwcm9jZXNzZWQgSW1hZ2U8L2E+PC9saT4NCiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNtZW10aHVtYiI+TWVtb3J5IGZvciB0aGUgRGVjb2RlZCBUaHVtYm5haWw8L2E+PC9saT4NCiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNtZW1yYXciPk1lbW9yeSBmb3IgUkFXIFVucGFja2luZzwvYT48L2xpPg0KICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iI21lbXBvc3Rwcm9jZXMiPk1lbW9yeSBmb3IgUG9zdHByb2Nlc3Npbmc8L2E+PC9saT4NCiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNtZW13cml0ZSI+TWVtb3J5IGZvciBGaWxlIFdyaXRpbmc8L2E+PC9saT4NCiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9IiNtZW11bnBhY2siPlVucGFja2luZyBpbnRvIG1lbW9yeSBidWZmZXI8L2E+PC9saT4NCiAgICAgICAgICAgIDwvb2w+DQogICAgICAgICAgPC9saT4NCiAgICAgICAgPC9vbD4NCiAgICAgIDwvbGk+DQogICAgICA8bGk+PGEgaHJlZj0iI2luY29tcGF0Ij5JbmNvbXBhdGliaWxpdGllcyB3aXRoIGRjcmF3PC9hPg0KICAgICAgICA8b2w+DQogICAgICAgICAgPGxpPjxhIGhyZWY9IiNpbmNvbXBhdF9tYXgiPkF1dG9tYXRpYyBtYXhpbXVtIHNlYXJjaC9icmlnaHRuZXNzDQogICAgICAgICAgICAgIGFkanVzdG1lbnQ8L2E+PC9saT4NCiAgICAgICAgICA8bGk+PGEgaHJlZj0iI2luY29tcGF0X2tvZGFrIj5Qcm9jZXNzaW5nIG9mIFRodW1ibmFpbHMgZnJvbSBLb2Rhaw0KICAgICAgICAgICAgICBjYW1lcmFzPC9hPjwvbGk+DQogICAgICAgIDwvb2w+DQogICAgICA8L2xpPg0KICAgIDwvb2w+DQogICAgPHA+PGEgbmFtZT0idmVyc2lvbnMiPjwvYT48L3A+DQogICAgPGgyPkxpYlJhdyBWZXJzaW9uczwvaDI+DQogICAgPHA+U2luY2UgdmVyc2lvbiAwLjksIHRoZXJlIGlzIG9ubHkgb25lIExpYlJhdyB2YXJpYW50cy4gT2xkZXIgdmVyc2lvbnMgaGF2ZQ0KICAgICAgdGhyZWUgc2VwYXJhdGUgZWRpdGlvbnMgKG5vcm1hbCwgLUxpdGUgYW5kIC1Db21tZXJjaWFsIHZlcnNpb25zKS48L3A+DQogICAgPHA+PGEgbmFtZT0iZXJyb3JzIj48L2E+PC9wPg0KICAgIDxoMj5FcnJvciBDb2RlIENvbnZlbnRpb25zIGFuZCBFcnJvciBIYW5kbGluZzwvaDI+DQogICAgPHA+VGhlIGZvbGxvd2luZyBjb252ZW50aW9ucyBjb25jZXJuIHRoZSByZXR1cm5lZCBlcnJvcnM6PC9wPg0KICAgIDxvbD4NCiAgICAgIDxsaT5BbGwgZnVuY3Rpb25zIHRoYXQgY2FuIHJldHVybiBhbiBlcnJvciBjb2RlIGhhdmUgaW50ZWdlciB0eXBlIG9mDQogICAgICAgIHJldHVybiBkYXRhLjwvbGk+DQogICAgICA8bGk+SWYgdGhlcmUgaXMgbm8gZXJyb3IsIHRoZSByZXR1cm4gdmFsdWUgaXMgMCAoTElCUkFXX1NVQ0NFU1MpLjwvbGk+DQogICAgICA8bGk+SWYgYW4gZXJyb3IgaGFzIGhhcHBlbmVkIGluIGEgc3lzdGVtIGNhbGwsIHRoZSByZXR1cm4gdmFsdWUgaXMgZXJybm8NCiAgICAgICAgKGEgcG9zaXRpdmUgbnVtYmVyKSwgd2hpY2ggY2FuIGJlIGFuYWx5emVkIHVzaW5nIHN0cmVycm9yKCkgb3Igc2ltaWxhcg0KICAgICAgICBtZWFucy48L2xpPg0KICAgICAgPGxpPkFsbCBMaWJSYXcncyBvd24gZXJyb3IgY29kZXMgYXJlIG5lZ2F0aXZlOyBlYWNoIG9mIHRoZXNlIGVycm9ycw0KICAgICAgICBiZWxvbmdzIHRvIG9uZSBvZiB0d28gdHlwZXM6DQogICAgICAgIDxkbD4NCiAgICAgICAgICA8ZHQ+PHN0cm9uZz5Ob24tZmF0YWwgZXJyb3JzPC9zdHJvbmc+PC9kdD4NCiAgICAgICAgICA8ZGQ+Tm9uLWZhdGFsIGVycm9ycyBkbyBub3QgZm9yYmlkIGV4ZWN1dGlvbiBvZiBvdGhlciBmdW5jdGlvbnMgaW4gdGhlDQogICAgICAgICAgICBwcm9jZXNzaW5nIHN1Y2Nlc3Npb24gKGUuZy4sIDxhIGhyZWY9IkFQSS1DWFguaHRtbCN1bnBhY2tfdGh1bWIiPnVucGFja190aHVtYigpPC9hPg0KICAgICAgICAgICAgY2FuIGVhc2lseSByZXR1cm4gdGhlIGNvZGUgY29ycmVzcG9uZGluZyB0byAicHJldmlldyBpcyBhYnNlbnQiIGJ1dA0KICAgICAgICAgICAgdGhpcyBkb2VzIG5vdCBwcmV2ZW50IGZ1cnRoZXIgY2FsbCBvZiA8YSBocmVmPSJBUEktQ1hYLmh0bWwjdW5wYWNrIj51bnBhY2soKTwvYT4uPC9kZD4NCiAgICAgICAgICA8ZHQ+PHN0cm9uZz5GYXRhbCBlcnJvcnM8L3N0cm9uZz48L2R0Pg0KICAgICAgICAgIDxkZD5JbiB0aGUgY2FzZSBvZiBmYXRhbCBlcnJvcnMgKG1lbW9yeSBzaG9ydGFnZSwgaW5wdXQgZGF0YSBlcnJvciwNCiAgICAgICAgICAgIGRhdGEgdW5wYWNraW5nIGZhaWx1cmUpLCB0aGUgY3VycmVudCBzdGFnZSBvZiBwcm9jZXNzaW5nIGlzDQogICAgICAgICAgICB0ZXJtaW5hdGVkIGFuZCBhbGwgYWxsb2NhdGVkIHJlc291cmNlcyBhcmUgZnJlZWQuPGJyPg0KICAgICAgICAgICAgSWYgYW4gYXR0ZW1wdCB0byBjb250aW51ZSBwcm9jZXNzaW5nIGlzIG1hZGUsIGFsbCBzdWJzZXF1ZW50IEFQSQ0KICAgICAgICAgICAgY2FsbHMgd2lsbCByZXR1cm4gdGhlIExJQlJBV19PVVRfT0ZfT1JERVJfQ0FMTCBlcnJvci48YnI+DQogICAgICAgICAgICBBdCB0aGUgc2FtZSB0aW1lLCB0aGUgTGliUmF3IGluc3RhbmNlIGluIHdoaWNoIGEgZmF0YWwgZXJyb3IgaGFzDQogICAgICAgICAgICBvY2N1cnJlZCBjYW4gcHJvY2VzcyB0aGUgbmV4dCBSQVcgZmlsZXMgaW4gdGhlIHVzdWFsIHdheSAoYnkgY2FsbGluZw0KICAgICAgICAgICAgPGEgaHJlZj0iQVBJLUNYWC5odG1sI29wZW5fZmlsZSI+b3Blbl9maWxlKCk8L2E+IChvciBvdGhlciBpbnB1dA0KICAgICAgICAgICAgbWV0aG9kcyksIHRoZW4gPGEgaHJlZj0iQVBJLUNYWC5odG1sI3VucGFjayI+dW5wYWNrKCk8L2E+LCBldGMuKS48L2RkPg0KICAgICAgICA8L2RsPg0KICAgICAgPC9saT4NCiAgICAgIDxsaT5UaGUgbWFjcm8gTElCUkFXX0ZBVEFMX0VSUk9SKGVycm9yIGNvZGUpIGNoZWNrcyBpZiBhbiBlcnJvciBpcyBmYXRhbA0KICAgICAgICBvciBub3QuPC9saT4NCiAgICAgIDxsaT5UaGUgZXJyb3IgY29kZXMgYXJlIDxhIGhyZWY9IkFQSS1kYXRhc3RydWN0Lmh0bWwjZXJyb3JzIj5saXN0ZWQgYW5kDQogICAgICAgICAgZGVjaXBoZXJlZCBoZXJlPC9hPi48L2xpPg0KICAgIDwvb2w+DQogICAgPHA+PGEgbmFtZT0id2FybmluZ3MiPjwvYT48L3A+DQogICAgPGgyPk5vbnN0YW5kYXJkIFNpdHVhdGlvbnMgVGhhdCBBcmUgTm90IEVycm9yczwvaDI+DQogICAgPHA+SWYgdGhlIHByb2dyYW0gaGFzIGVuY291bnRlcmVkIGEgbm9uc3RhbmRhcmQgc2l0dWF0aW9uIHRoYXQgZG9lcyBub3QNCiAgICAgIHByZXZlbnQgcmV0cmlldmFsIG9mIHNvbWUgZGF0YSBmcm9tIGEgZmlsZSwgaXQgc2VuZHMgYSBzaWduYWwgYnkgc2V0dGluZw0KICAgICAgdGhlIGNvcnJlc3BvbmRpbmcgYml0IGluIDxhIGhyZWY9IkFQSS1kYXRhc3RydWN0Lmh0bWwjbGlicmF3X2RhdGFfdCI+aW1nZGF0YS5wcm9jZXNzX3dhcm5pbmdzPC9hPi4NCiAgICAgIFRoZSBwb3NzaWJsZSB0eXBlcyBvZiB3YXJuaW5ncyBhcmUgPGEgaHJlZj0iQVBJLWRhdGFzdHJ1Y3QuaHRtbCN3YXJuaW5ncyI+bGlzdGVkDQogICAgICAgIGFuZCBkZWNpcGhlcmVkIGhlcmU8L2E+LjwvcD4NCiAgICA8cD48YSBuYW1lPSJpbyI+PC9hPjwvcD4NCiAgICA8aDI+SW5wdXQgTGF5ZXIgQWJzdHJhY3Rpb248L2gyPg0KICAgIDxwPkxpYlJhdyB1c2VzIG9iamVjdHMgZGVyaXZlZCBmcm9tIDxhIGhyZWY9IkFQSS1DWFguaHRtbCNkYXRhc3RyZWFtIj5MaWJSYXdfYWJzdHJhY3RfZGF0YXN0cmVhbTwvYT4NCiAgICAgIGZvciBkYXRhIGlucHV0LiBTZW1hbnRpY3Mgb2YgdGhlc2Ugb2JqZWN0cyBpcyBzaW1pbGFyIHRvICdmaWxlIHdpdGgNCiAgICAgIGFyYml0cmFyeSBzZWVrJyBvYmplY3Q6IGJvdGggcmVhZCBhbmQgc2VlayBvcGVyYXRpb25zIGFyZSB1c2VkLjwvcD4NCiAgICA8cD5Tb21lIFJBVyBmb3JtYXRzIHJlcXVpcmVzIHRlbXBvcmFyeSBzd2l0Y2ggdG8gYW5vdGhlciBkYXRhIHN0cmVhbSBjcmVhdGVkDQogICAgICBvbiB0b3Agb24gbWVtb3J5IGJ1ZmZlciBmb3IgbWV0YWRhdGEgcmVhZC4gTWV0aG9kcyBmb3IgZG9pbmcgc28gYXJlDQogICAgICBpbXBsZW1lbnRlZCBpbiBiYXNlIGNsYXNzIDxhIGhyZWY9IkFQSS1DWFguaHRtbCNkYXRhc3RyZWFtIj5MaWJSYXdfYWJzdHJhY3RfZGF0YXN0cmVhbTwvYT4NCiAgICAgIGJ5IGludGVybmFsIGRhdGEgZmllbGQgPHN0cm9uZz5zdWJzdHJlYW08L3N0cm9uZz4uIExvb2sgaW50byBzb3VyY2UgY29kZQ0KICAgICAgb2YgPGEgaHJlZj0iQVBJLUNYWC5odG1sI2ZpbGVfZGF0YXN0cmVhbSI+TGliUmF3X2ZpbGVfZGF0YXN0cmVhbTwvYT4NCiAgICAgIGNsYXNzIGluIDxzdHJvbmc+bGlicmF3L2xpYnJhd19kYXRhc3RyZWFtLmg8L3N0cm9uZz4gZmlsZSBmb3IgbW9yZQ0KICAgICAgZGV0YWlscy4gPGJyPg0KICAgICAgV2hlbiBpbXBsZW1lbnRpbmcgb3duIGRhdGFzdHJlYW0gY2xhc3NlcywgeW91IG5lZWQgdG8gdGFrZSA8c3Ryb25nPnN1YnN0cmVhbTwvc3Ryb25nPg0KICAgICAgaW50byBhY2NvdW50IGFuZCBwYXNzIGNvbnRyb2wgdG8gbWV0aG9kcyBvZiB0aGlzIGZpZWxkIGlmIGl0IGlzIGFjdGl2ZQ0KICAgICAgKG5vdCBOVUxMKS48L3A+DQogICAgPHA+SWYgZGF0YXN0cmVhbSBpbXBsZW1lbnRhdGlvbiBrbm93cyBuYW1lIG9mIGlucHV0IGZpbGUsIGl0IHNob3VsZCBwcm92aWRlDQogICAgICBmbmFtZSgpIGNhbGwuIFRoaXMgbmFtZSB3aWxsIGJlIHVzZWQgaW4gPGEgaHJlZj0iQVBJLUNYWC5odG1sI2NhbGxiYWNrcyI+ZXJyb3INCiAgICAgICAgY2FsbGJhY2tzPC9hPiBhbmQgaW4gZ3Vlc3NpbmcgbmFtZSBvZiBKUEVHIGZpbGUgd2l0aCBtZXRhZGF0YSAoZm9yIFJBVw0KICAgICAgZmlsZXMgd2l0aCBleHRlcm5hbCBtZXRhZGF0YSkuPC9wPg0KICAgIDxwPkZvciBleHRlcm5hbCBtZXRhZGF0YSBzdXBwb3J0IGlucHV0IGNsYXNzIHNob3VsZCBpbXBsZW1lbnQgPHN0cm9uZz5zdWJmaWxlX29wZW4oKS9zdWJmaWxlX2Nsb3NlKCk8L3N0cm9uZz4NCiAgICAgIG1ldGhvZHMuIOLu5+Lw4Pjg/vIg6u7kIO746OHq6C4gPGJyPg0KICAgICAgU2FtcGxlIG9mIHRoZXNlIG1ldGhvZHMgaW1wbGVtZW50YXRpb24gbWF5IGJlIGZvdW5kIGluIDxhIGhyZWY9IkFQSS1DWFguaHRtbCNmaWxlX2RhdGFzdHJlYW0iPkxpYlJhd19maWxlX2RhdGFzdHJlYW08L2E+DQogICAgICBjbGFzcyAobG9vayBpbnRvIDxzdHJvbmc+bGlicmF3L2xpYnJhd19kYXRhc3RyZWFtLmg8L3N0cm9uZz4gZmlsZSBmb3INCiAgICAgIGRldGFpbHMpLjwvcD4NCiAgICA8cD48YSBuYW1lPSJ0aHJlYWRzIj48L2E+PC9wPg0KICAgIDxoMj5UaHJlYWQgc2FmZXR5PC9oMj4NCiAgICA8cD5UaHJlYWQgc2FmZXR5IGlzIGVuc3VyZWQgaWYgYSBMaWJSYXcgb2JqZWN0IGlzIGNyZWF0ZWQgYW5kIHVzZWQgd2l0aGluDQogICAgICBvbmUgdGhyZWFkLiBBdCB0aGUgc2FtZSB0aW1lLCB0aGUgbnVtYmVyIG9mIHRocmVhZHMgKGVhY2ggd2l0aCBpdHMgb3duDQogICAgICBMaWJSYXcgb2JqZWN0KSBpcyBub3QgbGltaXRlZCBpbiBhbnkgd2F5IChleGNlcHQgYnkgbWVtb3J5IHJlcXVpcmVtZW50cykuPC9wPg0KICAgIDxwPklmIGEgTGliUmF3IG9iamVjdCBpcyBjcmVhdGVkIGluIG9uZSBleGVjdXRpb24gdGhyZWFkIGFuZCB1c2VkIGluDQogICAgICBhbm90aGVyLCBleHRlcm5hbCBzeW5jaHJvbml6YXRpb24gaXMgbmVjZXNzYXJ5LjwvcD4NCiAgICA8cD5UaGVyZSBpcyB0d28gbGlicmFyaWVzIHVuZGVyIFVuaXggZW52aXJvbm1lbnQgKExpbnV4L0ZyZWVCU0QvTWFjT1MpOg0KICAgICAgbGlicmF3X3IuYSAodGhyZWFkLXNhZmUpIGFuZCBsaWJyYXcuYSAoc2luZ2xlLXRocmVhZGVkLCBzbGlnaHRseSBmYXN0ZXIpLjwvcD4NCiAgICA8cD5UaHJlYWQtc2FmZSBsaWJyYXJ5IHZlcnNpb24gc3RvcmVzIGludGVybWVkaWF0ZSB1bnBhY2tlciBkYXRhIGludG8gTGliUmF3DQogICAgICBjbGFzcyBkYXRhLiBTbywgc2V2ZXJhbCBjb3BpZXMgb2YgTGliUmF3LCB3b3JraW5nIGluIHBhcmFsbGVsLCBpcw0KICAgICAgcG9zc2libGUuPC9wPg0KICAgIDxwPk5vdCB0aHJlYWQtc2FmZSBsaWJyYXJ5IHVzZXMgZ2xvYmFsIHZhcmlhYmxlIGZvciBpbnRlcm1lZGlhdGUgZGF0YSBzdG9yZQ0KICAgICAgd2hpY2ggaXMgZmFzdGVyIGJ1dCBub3QgcmVlbnRlcmFudC4gVGhpcyBub24tdGhyZWFkLXNhZmUgbGlicmFyeSBzdGlsbCBtYXkNCiAgICAgIGJlIHVzZWQgaW4gbXVsdGktdGhyZWFkZWQgYXBwcywgYnV0IG9ubHkgaWYgZXhhY3RseSBvbmUgTGliUmF3IGNsYXNzIGNvcHkNCiAgICAgIGV4aXN0cyBpbiBwcm9ncmFtLjwvcD4NCiAgICA8cD5XaW5kb3dzIHZlcnNpb24gaXMgc2ltaWxhciB0byBtdWx0aS10aHJlYWRlZCBVbml4IG9uZS48L3A+DQogICAgPHA+PGEgbmFtZT0iQ1hYIj48L2E+PC9wPg0KICAgIDxoMj5UaGUgVXNlIG9mIEMrKzwvaDI+DQogICAgPHA+RXhjZXB0aW9uIHNpdHVhdGlvbnMgd2l0aGluIExpYlJhdyBhcmUgaGFuZGxlZCB1c2luZyB0aGUgQysrIGV4Y2VwdGlvbg0KICAgICAgbWVjaGFuaXNtLiBBbGwgZXhjZXB0aW9ucyBhcmUgY2F1Z2h0IGluc2lkZSB0aGUgbGlicmFyeSBmdW5jdGlvbnMgYW5kDQogICAgICBzaG91bGQgbm90IHBlbmV0cmF0ZSBvdXRzaWRlLjwvcD4NCiAgICA8cD5NZW1vcnkgaXMgYWxsb2NhdGVkL2ZyZWVkIHVzaW5nIGZ1bmN0aW9ucyBtYWxsb2MoY2FsbG9jKS9mcmVlIHJhdGhlciB0aGFuDQogICAgICBuZXcvZGVsZXRlLjwvcD4NCiAgICA8cD5JZiBDIEFQSSBpcyB1c2VkLCByZWZlcmVuY2VzIHRvIEMrKyBjYWxscyBuZXcvZGVsZXRlIHN0aWxsIHJlbWFpbiwgYW5kIHNvDQogICAgICBsaW5raW5nIHdpdGggbGlic3RkYysrKFVuaXgpLy4uLi4oV2luZG93cykgaXMgbmVjZXNzYXJ5LjwvcD4NCiAgICA8cD48YSBuYW1lPSJpbWdkYXRhX3BhcmFtcyI+PC9hPjwvcD4NCiAgICA8aDI+UGFyYW1ldGVycyBvZiB0aGUgTGliUmF3OjppbWdkYXRhLnBhcmFtcyBTdHJ1Y3R1cmUgQWZmZWN0aW5nIHRoZQ0KICAgICAgQmVoYXZpb3Igb2Ygb3Blbl9maWxlL3VucGFjay91bnBhY2tfdGh1bWI8L2gyPg0KICAgIDxwPk1vc3QgZGF0YSBmaWVsZHMgb2Ygc3RydWN0dXJlIExpYlJhdzo6aW1nZGF0YS5wYXJhbXMgYWZmZWN0IG9ubHkgPGEgaHJlZj0iQVBJLUNYWC5odG1sI2RjcmF3ZW11Ij5kYXRhDQogICAgICAgIHBvc3Rwcm9jZXNzaW5nPC9hPiwgYnV0IHRoZXJlIGFyZSBzb21lIGV4Y2VwdGlvbnMsIHdoaWNoIGhhdmUgYmVlbg0KICAgICAgaW5oZXJpdGVkIGJ5IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgTGliUmF3IGZyb20vIGRjcmF3IHNvdXJjZSB0ZXh0cyAodGhlc2UNCiAgICAgIGRlcGVuZGVuY2VzIHdpbGwgYmUgZ3JhZHVhbGx5IHJlbW92ZWQpLjwvcD4NCiAgICA8ZGw+DQogICAgICA8ZHQ+PHN0cm9uZz5pbWdkYXRhLnBhcmFtcy51c2VfY2FtZXJhX21hdHJpeCBhbmQNCiAgICAgICAgICBpbWdkYXRhLnBhcmFtcy51c2VfY2FtZXJhX3diPC9zdHJvbmc+PC9kdD4NCiAgICAgIDxkZD5UaGVzZSBmaWVsZHMgYWZmZWN0IGxvYWRpbmcgb2YgUkFXIGRhdGEgZm9yIGNhbWVyYXMgd2l0aCBhIGNvbG9yDQogICAgICAgIG1hdHJpeC48YnI+DQogICAgICAgIDxzdHJvbmc+QXR0ZW50aW9uITwvc3Ryb25nPiBJZiBwYXJhbWV0ZXIgPHN0cm9uZz5pbWdkYXRhLnBhcmFtcy51c2VfY2FtZXJhX21hdHJpeDwvc3Ryb25nPg0KICAgICAgICBpcyBub3Qgc2V0IGJ5IHRoZSB1c2VyLCBpdCBpcyBjb3BpZWQgZnJvbSA8c3Ryb25nPmltZ2RhdGEucGFyYW1zLnVzZV9jYW1lcmFfd2I8L3N0cm9uZz4NCiAgICAgICAgYXQgdGhlIHN0YWdlIG9mIGZpbGUgb3BlbmluZy48L2RkPg0KICAgICAgPGR0PjxzdHJvbmc+aW1nZGF0YS5wYXJhbXMudXNlcl9mbGlwPC9zdHJvbmc+PC9kdD4NCiAgICAgIDxkZD5JZiB0aGlzIHBhcmFtZXRlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVybywgYXNzaWdubWVudCA8Y29kZT5pbWdkYXRhLnNpemVzLmZsaXANCiAgICAgICAgICA9IGltZ2RhdGEucGFyYW1zLnVzZXJfZmxpcDwvY29kZT4gaXMgcGVyZm9ybWVkIGF0IHRoZSA8YSBocmVmPSJBUEktQ1hYLmh0bWwjb3Blbl9maWxlIj5vcGVuX2ZpbGUoKTwvYT4NCiAgICAgICAgc3RhZ2UuPC9kZD4NCiAgICAgIDxkdD48c3Ryb25nPmltZ2RhdGEucGFyYW1zLnNob3Rfc2VsZWN0PC9zdHJvbmc+PC9kdD4NCiAgICAgIDxkZD5UaGlzIHBhcmFtZXRlciBtYWtlcyBpdCBwb3NzaWJsZSB0byBzZWxlY3QgdGhlIG51bWJlciBvZiB0aGUgZXh0cmFjdGVkDQogICAgICAgIGltYWdlIGZvciBkYXRhIGZvcm1hdHMgaW4gd2hpY2ggc3RvcmFnZSBvZiBzZXZlcmFsIFJBVyBpbWFnZXMgaW4gb25lDQogICAgICAgIGRhdGEgZmlsZSBpcyBwb3NzaWJsZS48L2RkPg0KICAgICAgPGR0PjxzdHJvbmc+aW1nZGF0YS5wYXJhbXMuaGFsZl9zaXplPC9zdHJvbmc+PC9kdD4NCiAgICAgIDxkZD5BZmZlY3RzIFJBVyBkYXRhIGxvYWRpbmcgZm9yIFBoYXNlIE9uZSBhbmQgU2luYXIgYmFja3MuIEFsc28sIGl0IHRoaXMNCiAgICAgICAgcGFyYW1ldGVyIGlzIHNldCB0aGVuIGltYWdlIGJpdG1hcCB3aWxsIGJlIHJlZHVjZWQgYnkgaGFsZiBpbiBlYWNoDQogICAgICAgIGRpbWVuc2lvbi4gSW4gbGF0ZXIgY2FzZSwgYWxsIDQgY29tcG9uZW50cyBvZiBiaXRtYXAgd2lsbCBiZSBmaWxsZWQNCiAgICAgICAgZHVyaW5nIGRhdGEgZXh0cmFjdGlvbiBwaGFzZS48L2RkPg0KICAgICAgPGR0PjxzdHJvbmc+aW1nZGF0YS5wYXJhbXMudGhyZXNob2xkLCBpbWdkYXRhLnBhcmFtcy5hYmVyPC9zdHJvbmc+PC9kdD4NCiAgICAgIDxkZD5JZiB0aGVzZSBwYXJhbWV0ZXJzIHVzZWQsIHRoZW4gaGFsZi1zaXplZCBiaXRtYXAgd2lsbCBiZSB1c2VkIGZvciBkYXRhDQogICAgICAgIHVucGFja2luZy4gU2VlIGFib3ZlIGZvciBkZXRhaWxzLjwvZGQ+DQogICAgICA8ZHQ+PHN0cm9uZz5pbWdkYXRhLnBhcmFtcy51c2VfY2FtZXJhX3diPC9zdHJvbmc+PC9kdD4NCiAgICAgIDxkZD5BZmZlY3RzIGxvYWRpbmcgb2Ygd2hpdGUgYmFsYW5jZSBtYXRyaXggZm9yIExlYWYgYmFja3MuPC9kZD4NCiAgICA8L2RsPg0KICAgIDxwPjxhIG5hbWU9Im1lbW9yeSI+PC9hPjwvcD4NCiAgICA8aDI+TWVtb3J5IFVzYWdlPC9oMj4NCiAgICA8cD48YSBuYW1lPSJzdGFjayI+PC9hPjwvcD4NCiAgICA8aDM+U3RhY2sgVXNhZ2U8L2gzPg0KICAgIDxwPkFuIGluc3RhbmNlIG9mIHRoZSBMaWJSYXcgY2xhc3MgaGFzIGl0cyBvd24gc2l6ZSBhYm91dCA8c3Ryb25nPjgwMCBLYjwvc3Ryb25nPjsNCiAgICAgIGlmIGNvbnN0cnVjdGlvbnMgbGlrZSA8Y29kZT5MaWJSYXcgaW1hZ2VQcm9jZXNzb3I7PC9jb2RlPiBhcmUgdXNlZCwgdGhpcw0KICAgICAgbWVtb3J5IGlzIHN0YWNrLWFsbG9jYXRlZC48L3A+DQogICAgPHA+TWV0aG9kcyBvZiBjbGFzcyBMaWJSYXcgKGFuZCBDIEFQSSBjYWxscykgbWF5IGFsbG9jYXRlIHVwIHRvIDEzMC0xNDAgS2INCiAgICAgIG9mIGRhdGEgb24gdGhlIHN0YWNrICh0byBwbGFjZSBhdXRvIHZhcmlhYmxlcykgZHVyaW5nIHRoZWlyIHdvcmsuPC9wPg0KICAgIDxwPlRodXMsIHRoZSB3b3JrIG9mIG9uZSBMaWJSYXcgaW5zdGFuY2UgbWF5IHJlcXVpcmUgYWJvdXQgPHN0cm9uZz4xTUI8L3N0cm9uZz4NCiAgICAgIG9mIHN0YWNrIG1lbW9yeS4gVGhpcyBpcyBub3QgYSBwcm9ibGVtIGZvciBtb3N0IGNvbnRlbXBvcmFyeQ0KICAgICAgYXJjaGl0ZWN0dXJlcy4gSG93ZXZlciwgd2hlbiB3b3JraW5nIGluIGEgbXVsdGl0aHJlYWRlZCBlbnZpcm9ubWVudCwgb25lDQogICAgICBzaG91bGQgbm90IGZvcmdldCB0byBhbGxvY2F0ZSBhIHN1ZmZpY2llbnQgYW1vdW50IG9mIG1lbW9yeSBmb3IgdGhlIHRocmVhZA0KICAgICAgc3RhY2suPC9wPg0KICAgIDxwPkluIHRoZSBjYXNlIG9mIGR5bmFtaWMgYWxsb2NhdGlvbiAoPGNvZGU+TGliUmF3ICppUHJvY2Vzc29yID0gbmV3IExpYlJhdzs8L2NvZGU+KSwNCiAgICAgIHRoZSByZXF1aXJlbWVudHMgdG8gc3RhY2sgbWVtb3J5IHdpbGwgZGVjcmVhc2UgYnkgfjgwMCBLYiwgd2hpY2ggaXMgdGhlDQogICAgICBzaXplIG9mIGEgY2xhc3MgaW5zdGFuY2UpLiBJZiA8YSBocmVmPSJBUEktQy5odG1sIj5DIEFQSTwvYT4gaXMgdXNlZCwgdGhlDQogICAgICBMaWJSYXcgaW5zdGFuY2UgaXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5LjwvcD4NCiAgICA8cD48YSBuYW1lPSJtZW1tZ3IiPjwvYT48L3A+DQogICAgPGgzPkR5bmFtaWMgTWVtb3J5IE1hbmFnZW1lbnQ8L2gzPg0KICAgIDxwPkxpYlJhdyBrZWVwcyByZWNvcmQgb2YgYWxsIGFsbG9jYXRlZCBkeW5hbWljIG1lbW9yeSBibG9ja3M7IGluIHRoZSBjYXNlDQogICAgICBvZiBhbiBleGNlcHRpb25hbCBzaXR1YXRpb24gKGZhdGFsIGVycm9yKSwgdGhleSBhcmUgYWxsIGZyZWVkLiBUaGUgY29kZQ0KICAgICAgZm9yIGtlZXBpbmcgdGhpcyByZWNvcmQgaXMgZmFpcmx5IHByaW1pdGl2ZSBhbmQgbm90IGRlc2lnbmVkIHRvIGNvbnNpZGVyDQogICAgICBhbGxvY2F0aW9uIG9mIG1hbnkgYmxvY2tzIChpbiB0aGUgbm9ybWFsIHNpdHVhdGlvbiwgYWxsb2NhdGlvbiB0YWtlcyBwbGFjZQ0KICAgICAgZnJvbSAyIHRvIDYgdGltZXMgZHVyaW5nIGZpbGUgcHJvY2Vzc2luZyk7IHRoaXMgZmFjdCBzaG91bGQgYmUgdGFrZW4gaW50bw0KICAgICAgYWNjb3VudCBieSBkZXZlbG9wZXJzIHRyeWluZyB0byBhZGQgbmV3IG1ldGhvZHMgdG8gTGliUmF3LjwvcD4NCiAgICA8cD48YSBuYW1lPSJtZW11c2UiPjwvYT48L3A+DQogICAgPGgzPkR5bmFtaWMgTWVtb3J5IFVzYWdlPC9oMz4NCiAgICA8cD5MaWJSYXcgdXNlcyBkeW5hbWljIG1lbW9yeTwvcD4NCiAgICA8dWw+DQogICAgICA8bGk+Zm9yIHRoZSBkZWNvZGVkIGltYWdlOzwvbGk+DQogICAgICA8bGk+Zm9yIHRoZSBkZWNvZGVkIHRodW1ibmFpbDs8L2xpPg0KICAgICAgPGxpPmZvciB0aGUgcG9zdHByb2Nlc3NlZCBpbWFnZTs8L2xpPg0KICAgICAgPGxpPmZvciB0aGUgSUNDIHByb2ZpbGUgcmV0cmlldmVkIGZyb20gdGhlIFJBVyBmaWxlIChpZiBhdmFpbGFibGUpOzwvbGk+DQogICAgICA8bGk+Zm9yIHRlbXBvcmFyeSBkYXRhIGF0IHRoZSBzdGFnZSBvZiBSQVcgZmlsZSB1bnBhY2tpbmc7PC9saT4NCiAgICAgIDxsaT5mb3IgdGVtcG9yYXJ5IGRhdGEgYXQgdGhlIHN0YWdlIG9mIHBvc3Rwcm9jZXNzaW5nIGFuZCByZXN1bHQgb3V0cHV0OzwvbGk+DQogICAgICA8bGk+Zm9yIHJlYWRpbmcgb2YgdGhlIFJBVyBzb3VyY2UgZmlsZSAob25seSB1bmRlciBXaW4zMikuPC9saT4NCiAgICA8L3VsPg0KICAgIDxwPjxhIG5hbWU9Im1lbXJhdyI+PC9hPjwvcD4NCiAgICA8aDQ+TWVtb3J5IGJ1ZmZlciBmb3IgdGhlIFJBVyBpbWFnZTwvaDQ+DQogICAgPHA+RGVjb2RlZCBSQVcgZGF0YSBhcmUgc3RvcmVkOjwvcD4NCiAgICA8dWw+DQogICAgICA8bGk+b25lIDE2LWJpdCB2YWx1ZSBwZXIgcGl4ZWwgZm9yICJiYXllciIgaW1hZ2VzLiBUaGUgbWFza2VkIHBpeGVscw0KICAgICAgICAoYmxhY2sgb3IgZGFyayBvciBtYXNrZWQgZnJhbWUpIGFyZSBzdG9yZWQgd2l0aCBpbWFnZSBkYXRhLjwvbGk+DQogICAgICA8bGk+RnJlZSBvciBmb3VyIDE2LWJpdCB2YWx1ZXMgZm9yIGZ1bGwtY29sb3IgaW1hZ2VzIChGb3Zlb24sIExpbmVhciBETkcsDQogICAgICAgIENhbm9uIHNSQVcgZXRjLikuPC9saT4NCiAgICAgIDxsaT5vbmUsdGhyZWUsIG9yIGZvdXIgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlcyBwZXIgcGl4ZWwgZm9yDQogICAgICAgIGZsb2F0aW5nLXBvaW50IGRhdGEuPC9saT4NCiAgICA8L3VsPg0KICAgIDxwPlRoZSBidWZmZXIgZm9yIFJBVyBkYXRhIGlzIGFsbG9jYXRlZCBieSA8YSBocmVmPSJBUEktQ1hYLmh0bWwjdW5wYWNrIj51bnBhY2soKTwvYT4NCiAgICAgIGNhbGwgYW5kIGZyZWVkIHVwb24gY2FsbGluZyA8YSBocmVmPSJBUEktQ1hYLmh0bWwjcmVjeWNsZSI+cmVjeWNsZSgpPC9hPi48L3A+DQogICAgPHA+PGEgbmFtZT0ibWVtaW1hZ2UiPjwvYT48L3A+DQogICAgPGg0Pk1lbW9yeSBmb3IgdGhlIFBvc3Rwcm9jZXNzZWQgSW1hZ2U8L2g0Pg0KICAgIDxwPk9uIHBvc3Rwcm9jZXNzaW5nIHN0YWdlIGVhY2ggcGl4ZWwgY29udGFpbnMgZm91ciAxNi1iaXQgdmFsdWVzLCBvbmUgZm9yDQogICAgICBlYWNoIHBvc3NpYmxlIGNvbG9yIGNoYW5uZWwgKHNvbWUgc2Vuc29ycyBhcmUgYWN0dWFsbHkgNC1jb2xvcikuPC9wPg0KICAgIDxwPlRoZSBidWZmZXIgZm9yIHRoZSBkZWNvZGVkIGltYWdlIGlzIGFsbG9jYXRlZCB1cG9uIGNhbGxpbmcgPGEgaHJlZj0iQVBJLUNYWC5odG1sI3JhdzJpbWFnZSI+cmF3MmltYWdlKCk8L2E+DQogICAgICBvciA8YSBocmVmPSJBUEktQ1hYLmh0bWwjZGNyYXdfcHJvY2VzcyI+ZGNyYXdfcHJvY2VzcygpPC9hPjwvcD4NCiAgICA8cD5UaGUgYnVmZmVyIGZyZWVkIHVwb24gY2FsbGluZyA8YSBocmVmPSJBUEktQ1hYLmh0bWwjcmVjeWNsZSI+cmVjeWNsZSgpPC9hPg0KICAgICAgb3IgPGEgaHJlZj0iQVBJLUNYWC5odG1sI2ZyZWVfaW1hZ2UiPmZyZWVfaW1hZ2UoKTwvYT4gY2FsbHMuPC9wPg0KICAgIDxwPjxhIG5hbWU9Im1lbXRodW1iIj48L2E+PC9wPg0KICAgIDxoND5NZW1vcnkgZm9yIHRoZSBEZWNvZGVkIFRodW1ibmFpbDwvaDQ+DQogICAgPHA+TWVtb3J5IGZvciB0aGUgdGh1bWJtYWlsIGlzIGFsbG9jYXRlZCB1cG9uIGNhbGxpbmcgPGEgaHJlZj0iQVBJLUNYWC5odG1sI3VucGFja190aHVtYiI+dW5wYWNrX3RodW1iKCk8L2E+DQogICAgICBhbmQgZnJlZWQgdXBvbiBjYWxsaW5nIDxhIGhyZWY9IkFQSS1DWFguaHRtbCNyZWN5Y2xlIj5yZWN5Y2xlKCk8L2E+LiBUaGUNCiAgICAgIHNpemUgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgaXMgcHJlY2lzZWx5IGFkanVzdGVkIHRvIHRoZSB0aHVtYm5haWwgc2l6ZSwNCiAgICAgIGkuZS4sIHVwIHRvIHNldmVyYWwgTWIuPC9wPg0KICAgIDxwPjxhIG5hbWU9Im1lbXByb2ZpbGUiPjwvYT48L3A+DQogICAgPHA+PGEgbmFtZT0ibWVtcmF3Ij48L2E+PC9wPg0KICAgIDxoND5NZW1vcnkgZm9yIFJBVyBVbnBhY2tpbmc8L2g0Pg0KICAgIDxwPk1lbW9yeSBmb3IgdGVtcG9yYXJ5IGJ1ZmZlciBuZWVkZWQgZHVyaW5nIFJBVyBkYXRhIHVucGFja2luZyBtYXkgYmUNCiAgICAgIGFsbG9jYXRlZCBkdXJpbmcgdGhlIHdvcmsgb2YgPGEgaHJlZj0iQVBJLUNYWC5odG1sI3VucGFjayI+dW5wYWNrKCk8L2E+DQogICAgICBhbmQgZnJlZWQgYmVmb3JlIGNvbXBsZXRpb24gb2YgdGhpcyBmdW5jdGlvbi4gVGhlIHNpemVzIG9mIHRoZSBhbGxvY2F0ZWQNCiAgICAgIGJ1ZmZlcnMgYXJlIHNtYWxsLCB1cCB0byB0ZW5zIG9mIEtiLjwvcD4NCiAgICA8cD48YSBuYW1lPSJtZW1wb3N0cHJvY2VzIj48L2E+PC9wPg0KICAgIDxoND5NZW1vcnkgZm9yIFBvc3Rwcm9jZXNzaW5nPC9oND4NCiAgICA8cD5EdXJpbmcgaW1hZ2UgcG9zdHByb2Nlc3NpbmcgKGluaGVyaXRlZCBmcm9tIGRjcmF3KSwgbWVtb3J5IGZvciB0aGUNCiAgICAgIGhpc3RvZ3JhbSAoMTI4IEtiKSBpcyBhbGxvY2F0ZWQuIFRoaXMgbWVtb3J5IGlzIGFsbG9jYXRlZCB1cG9uIGNhbGxpbmcgPGENDQogICAgICAgIGhyZWY9IkFQSS1DWFguaHRtbCNkY3Jhd19wcm9jZXNzIj5kY3Jhd19wcm9jZXNzKCk8L2E+IGFuZCBmcmVlZCB1cG9uDQogICAgICBjYWxsaW5nIDxhIGhyZWY9IkFQSS1DWFguaHRtbCNyZWN5Y2xlIj5yZWN5Y2xlKCk8L2E+LjwvcD4NCiAgICA8cD5JbiBhZGRpdGlvbiwgZHVyaW5nIHRoZSB3b3JrIG9mIDxhIGhyZWY9IkFQSS1DWFguaHRtbCNkY3Jhd19wcm9jZXNzIj5kY3Jhd19wcm9jZXNzKCk8L2E+DQogICAgICBhbmQgZHVyaW5nIHRoZSB1c2FnZSBvZiBzb21lIGF2YWlsYWJsZSBwb3NzaWJpbGl0aWVzLCBsaWtlPC9wPg0KICAgIDx1bD4NCiAgICAgIDxsaT5yb3RhdGlvbiBvZiBpbWFnZXMgZnJvbSBGVUpJIGNhbWVyYXM7PC9saT4NCiAgICAgIDxsaT5jb3JyZWN0aW9uIG9mIGNocm9tYXRpYyBhYmVycmF0aW9uczs8L2xpPg0KICAgICAgPGxpPmltYWdlIHNpemUgY2hhbmdlcyAoaW5jbHVkaW5nIGNvcnJlY3Rpb24gb2Ygbm9uLXNxdWFyZSBwaXhlbHMpOzwvbGk+DQogICAgICA8bGk+aGlnaGxpZ2h0IHJlY292ZXJ5OzwvbGk+DQogICAgPC91bD4NCiAgICA8cD5hIHRlbXBvcmFyeSBidWZmZXIgd2l0aCB0aGUgc2l6ZSBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0YW50IGltYWdlDQogICAgICAoNi04IGJ5dGVzIHBlciBwaXhlbCBmb3IgdmFyaW91cyBwcm9jZXNzaW5nIHN0YWdlcykgd2lsbCBiZSBhbGxvY2F0ZWQuIEFzDQogICAgICBzb29uIGFzIHRoZSBpbnRlcm1lZGlhdGUgc3Vic3RhZ2Ugb2YgcHJvY2Vzc2luZyBpcyBjb21wbGV0ZWQsIHRoZSBidWZmZXINCiAgICAgIHdpdGggdGhlIHByZXZpb3VzIGNvcHkgb2YgdGhlIGltYWdlIHdpbGwgYmUgZnJlZWQuPGJyPg0KICAgICAgSWYgcG9zdHByb2Nlc3NpbmcgaXMgbm90IHVzZWQsIHRoZW4gdGVtcG9yYXJ5IGJ1ZmZlcnMgYXJlIG5vdCBhbGxvY2F0ZWQuPC9wPg0KICAgIDxwPjxhIG5hbWU9Im1lbXdyaXRlIj48L2E+PC9wPg0KICAgIDxoND5NZW1vcnkgZm9yIEZpbGUgV3JpdGluZzwvaDQ+DQogICAgPHA+VXBvbiBjYWxsaW5nIDxhIGhyZWY9IkFQSS1DWFguaHRtbCNkY3Jhd19wcG1fdGlmZl93cml0ZXIiPmRjcmF3X3BwbV90aWZmX3dyaXRlcigpPC9hPiwNCiAgICAgIG1lbW9yeSBmb3IgYSBzaW5nbGUgcm93IG9mIHRoZSBvdXRwdXQgaW1hZ2UgaXMgYWxsb2NhdGVkLiBUaGUgYWxsb2NhdGVkDQogICAgICBtZW1vcnkgaXMgZnJlZWQgYmVmb3JlIHRoZSBlbmQgb2YgdGhpcyBjYWxsLjwvcD4NCiAgICA8cD48YSBuYW1lPSJtZW11bnBhY2siPjwvYT48L3A+DQogICAgPGg0PlVucGFja2luZyBpbnRvIG1lbW9yeSBidWZmZXI8L2g0Pg0KICAgIDxwPkZ1bmN0aW9ucyA8YSBocmVmPSJBUEktQ1hYLmh0bWwjZGNyYXdfbWFrZV9tZW1faW1hZ2UiPmRjcmF3X21ha2VfbWVtX2ltYWdlKCk8L2E+DQogICAgICA8YSBocmVmPSJBUEktQ1hYLmh0bWwjZGNyYXdfbWFrZV9tZW1fdGh1bWIiPmRjcmF3X21ha2VfbWVtX3RodW1iKCk8L2E+DQogICAgICAoYW5kIGNvbXBsZW1lbnRhcnkgY2FsbHMgaW4gQy1BUEkpIGFsbG9jYXRlcyBtZW1vcnkgZm9yIGVudGlyZSBvdXRwdXQNCiAgICAgIGRhdGFzZXRzIChmdWxsIFJHQiBiaXRtYXAgYW5kIHRodW1ibmFpbCwgcmVzcGVjdGl2ZWx5KS5UbyBmcmVlIGFsbG9jYXRlZA0KICAgICAgbWVtb3J5IHVzZSA8YSBocmVmPSJBUEktQ1hYLmh0bWwjZGNyYXdfY2xlYXJfbWVtIj5kY3Jhd19jbGVhcl9tZW0oKTwvYT4NCiAgICAgIGZ1bmN0aW9uLjwvcD4NCiAgICA8cD48YSBuYW1lPSJpbmNvbXBhdCI+PC9hPjwvcD4NCiAgICA8aDI+SW5jb21wYXRpYmlsaXRpZXMgd2l0aCBkY3JhdzwvaDI+DQogICAgPHA+PGEgbmFtZT0iaW5jb21wYXRfbWF4Ij48L2E+PC9wPg0KICAgIDxoMz5BdXRvbWF0aWMgbWF4aW11bSBzZWFyY2gvYnJpZ2h0bmVzcyBhZGp1c3RtZW50PC9oMz4NCiAgICA8cD5NYW55IGNhbWVyYSBmb3JtYXRzIHJlYWxseSB1c2UgbGVzcyBkYXRhIHJhbmdlLCB0aGFuIHBvc3NpYmxlIGJ5IGZvcm1hdA0KICAgICAgbmF0dXJlIChiaXQgY291bnQpLiBJZiBkYXRhIG1heGltdW0gZXN0aW1hdGVkIGluY29ycmVjdGx5ICh0b28gbG93KSB0aGlzDQogICAgICBtYXkgcmVzdWxzIGluIGNvbG9yZWQgaGlnaGxpZ2h0cyAoJ3BpbmsgY2xvdWRzJykgYmVjYXVzZSBvZiBkYXRhIGN1dCBhdA0KICAgICAgd3JvbmcgbGV2ZWwuPC9wPg0KICAgIDxwPlRvIHByZXZlbnQgdGhpcywgTGliUmF3IHVzZXMgcmVhbCBkYXRhIG1heGltdW0gZnJvbSBjdXJyZW50IGZpbGUgaWYgdGhpcw0KICAgICAgbWF4aW11bSBpcyBsYXJnZXIgdGhhbiBmb3JtYXQgbWF4aW11bSBtdWx0aXBsaWVkIGJ5DQogICAgICBpbWRhdGEucGFyYW1zLmFkanVzdF9tYXhpbXVtX3RociB2YWx1ZSAoZGVmYXVsdCBpcyAwLjc1KS48L3A+DQogICAgPHA+VG8gdHVybiBvZmYgdGhpcyBmZWF0dXJlIChhbmQgcmVwZWF0IGRjcmF3LmMgcGluayBjbG91ZHMpIHNldA0KICAgICAgaW1kYXRhLnBhcmFtcy5hZGp1c3RfbWF4aW11bV90aHIgdG8gMC4wPC9wPg0KICAgIDxwPjxhIG5hbWU9ImluY29tcGF0X2tvZGFrIj48L2E+PC9wPg0KICAgIDxoMz5Qcm9jZXNzaW5nIG9mIFRodW1ibmFpbHMgZnJvbSBLb2RhayBjYW1lcmFzPC9oMz4NCiAgICA8cD5JbiBzb21lIEtvZGFrIGNhbWVyYXMsIHRoZSBwcmV2aWV3ICh0aHVtYm5haWwpIGlzIHN0b3JlZCBpbiB0aGUgZm9ybSBvZg0KICAgICAgdW5jb3JyZWN0ZWQgaW1hZ2UuIER1cmluZyBpdHMgZXh0cmFjdGlvbiB1c2luZyA8c3Ryb25nPmRjcmF3IC1lPC9zdHJvbmc+LA0KICAgICAgdGhlIHdoaXRlIGJhbGFuY2UsIGNvbG9yIGNvbnZlcnNpb24sIGFuZCBvdGhlciBzZXR0aW5ncyBhcmUgdGhlIHNhbWUgYXMNCiAgICAgIHRob3NlIHVzZWQgZm9yIGV4dHJhY3Rpb24gb2YgdGhlIG1haW4gUkFXIGRhdGEgKGluY2x1ZGluZyBkZWZlY3QgcmVtb3ZhbA0KICAgICAgYW5kIGRhcmsgZnJhbWUgc3VidHJhY3Rpb24sIHdoaWNoIGlzIGVycm9uZW91cywgc2luY2UgdGhlIGltYWdlIHNpemUgaXMNCiAgICAgIGRpZmZlcmVudCkuIDxicj4NCiAgICAgIEluIExpYlJhdzo6dW5wYWNrX3RodW1iKCkgY2FsbHMsIHRoZSB3aGl0ZSBiYWxhbmNlIHRha2VuIGZyb20gdGhlIGNhbWVyYQ0KICAgICAgKCJhcyBzaG90IikgaXMgdXNlZCBhbmQgbm8gc2V0dGluZ3MgZnJvbSBpbWdkYXRhLnBhcmFtcyBhcmUgY29uc2lkZXJlZC48L3A+DQogICAgPHA+Rm9yIGFsbCBvdGhlciBjYW1lcmFzLCB0aHVtYm5haWxzIGFyZSBleHRyYWN0ZWQgImFzIGlzLCIgd2l0aG91dCBhbnkNCiAgICAgIGNvbG9yIGNvbnZlcnNpb25zLCBib3RoIGluIGRjcmF3IGFuZCBpbiBMaWJSYXcuPC9wPg0KICAgIDxwPjxhIGhyZWY9ImluZGV4Lmh0bWwiPltiYWNrIHRvIEluZGV4XTwvYT48L3A+DQogIDwvYm9keT4NCjwvaHRtbD4NCg==