PCEtLQ0KICAgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KICAgIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KICAgIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCiAgICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KICAgICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQogICAgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQogICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KDQotLT4NCjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KPGh0bWw+DQogICA8aGVhZD4NCiAgICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0NCiAgICAgICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj4NCiAgICAgIDxsaW5rIGhyZWY9ImRybC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KICAgICAgPHRpdGxlPg0KICAgICAgICAgVGhyZWFkIE1hbmFnZXIgRGVzY3JpcHRpb24NCiAgICAgIDwvdGl0bGU+DQogICA8L2hlYWQ+DQogICA8Ym9keT4NCiAgICAgIDxwIGNsYXNzPSJ0aXRsZSIgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+DQogICAgICAgICA8YSBuYW1lPSJ0b3AiPjwvYT5UaHJlYWQgTWFuYWdlcg0KICAgICAgPC9wPg0KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+DQogICAgICAgICBDb21wb25lbnQgRGVzY3JpcHRpb24NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJUT0NIZWFkaW5nIj4NCiAgICAgICAgIDxhIGhyZWY9IiNSZXZpc2lvbkhpc3RvcnkiPjEuIFJldmlzaW9uIEhpc3Rvcnk8L2E+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iVE9DSGVhZGluZyI+DQogICAgICAgICA8YSBocmVmPSIjRGlzY2xhaW1lcl9hbmRfTGVnYWxfSW5mb3JtYXRpb24iPjIuIERpc2NsYWltZXINCiAgICAgICAgIGFuZCBMZWdhbCBJbmZvcm1hdGlvbjwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJUT0NIZWFkaW5nIj4NCiAgICAgICAgIDxhIGhyZWY9IiNBYm91dF9UaGlzX0RvY3VtZW50Ij4zLiBBYm91dCB0aGlzIERvY3VtZW50PC9hPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICA8YSBocmVmPSIjUHVycG9zZSI+My4xIFB1cnBvc2U8L2E+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iVE9DIj4NCiAgICAgICAgIDxhIGhyZWY9IiNJbnRlbmRlZF9BdWRpZW5jZSI+My4yIEludGVuZGVkIEF1ZGllbmNlPC9hPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICA8YSBocmVmPSIjRG9jdW1lbnRhdGlvbl9Db252ZW50aW9ucyI+My4zIERvY3VtZW50YXRpb24NCiAgICAgICAgIENvbnZlbnRpb25zPC9hPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICA8YSBocmVmPSIjVXNpbmdfdGhpc19kb2N1bWVudCI+My40IFVzaW5nIHRoaXMgRG9jdW1lbnQ8L2E+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iVE9DSGVhZGluZyI+DQogICAgICAgICA8YSBocmVmPSIjT3ZlcnZpZXciPjQuIE92ZXJ2aWV3PC9hPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICA8YSBocmVmPSIjS2V5X0ZlYXR1cmUiPjQuMSBLZXkgRmVhdHVyZXM8L2E+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iVE9DIj4NCiAgICAgICAgIDxhIGhyZWY9IiNUTV9pbl9WTSI+NC4yIFRocmVhZCBNYW5hZ2VyIGluIFZNPC9hPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICA8YSBocmVmPSIjUG9ydGFiaWxpdHkiPjQuMyBQb3J0YWJpbGl0eTwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJUT0NIZWFkaW5nIj4NCiAgICAgICAgIDxhIGhyZWY9IiNBY2hpdGVjdHVyZSI+NS4gQXJjaGl0ZWN0dXJlPC9hPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICA8YSBocmVmPSIjRXhwb3J0ZWRfSW50ZXJmYWNlcyI+NS4xIEV4cG9ydGVkIGludGVyZmFjZXM8L2E+DQogICAgICA8L3A+DQogICAgICA8YmxvY2txdW90ZT4NCiAgICAgICAgIDxwIGNsYXNzPSJUT0MiPg0KICAgICAgICAgICAgPGEgaHJlZj0iI05hdGl2ZV9MYXllciI+NS4xLjEgTmF0aXZlIEludGVyZmFjZTwvYT4NCiAgICAgICAgIDwvcD4NCiAgICAgICAgIDxwIGNsYXNzPSJUT0MiPg0KICAgICAgICAgICAgPGEgaHJlZj0iI0phdmFfaW50ZXJmYWNlIj41LjEuMiBKYXZhKiBJbnRlcmZhY2U8L2E+DQogICAgICAgICA8L3A+DQogICAgICA8L2Jsb2NrcXVvdGU+DQogICAgICA8cCBjbGFzcz0iVE9DIj4NCiAgICAgICAgIDxhIGhyZWY9IiNEYXRhX1N0cnVjdHVyZXMiPjUuMiBEYXRhIHN0cnVjdHVyZXM8L2E+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iVE9DIj4NCiAgICAgICAgIDxhIGhyZWY9IiNUaHJlYWRfQ29udHJvbF9TdHJ1Y3R1cmUiPjUuMyBUaHJlYWQgY29udHJvbA0KICAgICAgICAgc3RydWN0dXJlczwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxibG9ja3F1b3RlPg0KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICAgICA8YSBocmVmPSIjTmF0aXZlX1N0cnVjdHVyZSI+NS4zLjEgTmF0aXZlIFRocmVhZA0KICAgICAgICAgICAgU3RydWN0dXJlPC9hPg0KICAgICAgICAgPC9wPg0KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICAgICA8YSBocmVmPSIjSmF2YV9TdHJ1Y3R1cmUiPjUuMy4yIEphdmEqIFRocmVhZA0KICAgICAgICAgICAgU3RydWN0dXJlPC9hPg0KICAgICAgICAgPC9wPg0KICAgICAgPC9ibG9ja3F1b3RlPg0KICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICA8YSBocmVmPSIjVGhyZWFkX0dyb3VwIj41LjQgVGhyZWFkIEdyb3VwczwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJUT0MiPg0KICAgICAgICAgPGEgaHJlZj0iI1N5bmNocm9uaXplciI+NS41IFN5bmNocm9uaXplcnM8L2E+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iVE9DIj4NCiAgICAgICAgIDxhIGhyZWY9IiNNb25pdG9ycyI+NS42IE1vbml0b3JzPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGJsb2NrcXVvdGU+DQogICAgICAgICA8cCBjbGFzcz0iVE9DIj4NCiAgICAgICAgICAgIDxhIGhyZWY9IiNNb25pdG9ySW5mbGF0aW9uIj41LjYuMSBJbmZsYXRpb24gVGVjaG5pcXVlPC9hPg0KICAgICAgICAgPC9wPg0KICAgICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICAgICA8YSBocmVmPSIjVGhpbl9tb25pdG9ycyI+NS42LjIgTW9uaXRvciBTdHJ1Y3R1cmU8L2E+DQogICAgICAgICA8L3A+DQogICAgICAgICA8cCBjbGFzcz0iVE9DIj4NCiAgICAgICAgICAgIDxhIGhyZWY9IiNBY3F1aXJlTW9uaXRvciI+NS42LjMgQWNxdWlyaW5nIGEgTW9uaXRvcjwvYT4NCiAgICAgICAgIDwvcD4NCiAgICAgIDwvYmxvY2txdW90ZT4NCiAgICAgIDxwIGNsYXNzPSJUT0NIZWFkaW5nIj4NCiAgICAgICAgIDxhIGhyZWY9IiNVc2FnZV9TY2VuYXJpb3MiPjYuIFVzYWdlIHNjZW5hcmlvczwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJUT0MiPg0KICAgICAgICAgPGEgaHJlZj0iI1RocmVhZF9saWZlY3ljbGUiPjYuMSBKYXZhKiBUaHJlYWQgTGlmZSBDeWNsZTwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJUT0MiPg0KICAgICAgICAgPGEgaHJlZj0iI1RocmVhZF9zdXNwZW5zaW9uIj42LjIgVGhyZWFkIFN1c3BlbnNpb248L2E+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iVE9DIj4NCiAgICAgICAgIDxhIGhyZWY9IiNTdG9wLXRoZS13b3JsZF9TdXNwZW5zaW9uIj42LjMgU3RvcC10aGUtd29ybGQNCiAgICAgICAgIFRocmVhZCBTdXNwZW5zaW9uPC9hPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9IlRPQyI+DQogICAgICAgICA8YSBocmVmPSIjVGhyZWFkX2xvY2tpbmciPjYuNCBUaHJlYWQgTG9ja2luZzwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJUT0MiPg0KICAgICAgICAgPGEgaHJlZj0iI01vbml0b3Jfc2NlbmFyaW9zIj42LjUgTW9uaXRvciBFbnRlciBhbmQgRXhpdDwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJUT0NIZWFkaW5nIj4NCiAgICAgICAgIDxhIGhyZWY9IiNSZWZlcmVuY2VzIj43LiBSZWZlcmVuY2VzPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgxPg0KICAgICAgICAgPGEgbmFtZT0iUmV2aXNpb25IaXN0b3J5Ij48L2E+MS4gUmV2aXNpb24gSGlzdG9yeQ0KICAgICAgPC9oMT4NCiAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+DQogICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlSGVhZGluZyI+DQogICAgICAgICAgICAgICBWZXJzaW9uDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUhlYWRpbmciPg0KICAgICAgICAgICAgICAgVmVyc2lvbiBJbmZvcm1hdGlvbg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVIZWFkaW5nIj4NCiAgICAgICAgICAgICAgIERhdGUNCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgSW5pdGlhbCB2ZXJzaW9uDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgTmFkeWEgTW9yb3pvdmEsIEFuZHJleSBDaGVybnlzaGV2OiBkb2N1bWVudCBjcmVhdGVkLg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEp1bmUgNSwgMjAwNg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgIDwvdHI+DQogICAgICA8L3RhYmxlPg0KICAgICAgPGgxPg0KICAgICAgICAgPGEgbmFtZT0iRGlzY2xhaW1lcl9hbmRfTGVnYWxfSW5mb3JtYXRpb24iPjwvYT4yLiBEaXNjbGFpbWVyDQogICAgICAgICBhbmQgTGVnYWwgSW5mb3JtYXRpb24NCiAgICAgIDwvaDE+DQogICAgICA8cD4NCiAgICAgICAgIENvcHlyaWdodCAyMDA2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBvciBpdHMNCiAgICAgICAgIGxpY2Vuc29ycywgYXMgYXBwbGljYWJsZS4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQogICAgICAgICBMaWNlbnNlKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KICAgICAgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0IDxhDQogICAgICAgICBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiIHRhcmdldD0gDQogICAgICAgICAiX2JsYW5rIj5odHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjA8L2E+Lg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQogICAgICAgICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KICAgICAgICAgQVMgSVMgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELA0KICAgICAgICAgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMNCiAgICAgICAgIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlDQogICAgICAgICBMaWNlbnNlLg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+DQogICAgICAgICA8YSBocmVmPSIjdG9wIj5CYWNrIHRvIFRvcDwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxoMT4NCiAgICAgICAgIDxhIG5hbWU9IkFib3V0X1RoaXNfRG9jdW1lbnQiPjwvYT4zLiBBYm91dCBUaGlzIERvY3VtZW50DQogICAgICA8L2gxPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iUHVycG9zZSI+PC9hPjMuMSBQdXJwb3NlDQogICAgICA8L2gyPg0KICAgICAgPHA+DQogICAgICAgICBUaGlzIGRvY3VtZW50IGludHJvZHVjZXMgdGhlIHRocmVhZCBtYW5hZ2VyIGNvbXBvbmVudA0KICAgICAgICAgZGVsaXZlcmVkIGFzIHBhcnQgb2YgdGhlIERSTCAoRHluYW1pYyBSdW50aW1lIExheWVyKQ0KICAgICAgICAgaW5pdGlhdGl2ZS4gVGhpcyBkb2N1bWVudCBmb2N1c2VzIG9uIHRoZSBzcGVjaWZpY3Mgb2YgdGhlDQogICAgICAgICBjdXJyZW50IGltcGxlbWVudGF0aW9uIHNob3dpbmcgdGhlIHRocmVhZCBtYW5hZ2VyIHJvbGUNCiAgICAgICAgIGluc2lkZSB0aGUgRFJMIHZpcnR1YWwgbWFjaGluZSwgYW5kIHRoZSBpbnRlcm5hbA0KICAgICAgICAgb3JnYW5pemF0aW9uIG9mIHRoZSB0aHJlYWQgbWFuYWdlbWVudCBzdWJzeXN0ZW0uDQogICAgICA8L3A+DQogICAgICA8aDI+DQogICAgICAgICA8YSBuYW1lPSJJbnRlbmRlZF9BdWRpZW5jZSI+PC9hPjMuMiBJbnRlbmRlZCBBdWRpZW5jZQ0KICAgICAgPC9oMj4NCiAgICAgIDxwPg0KICAgICAgICAgVGhlIHRhcmdldCBhdWRpZW5jZSBmb3IgdGhlIGRvY3VtZW50IGluY2x1ZGVzIGEgd2lkZQ0KICAgICAgICAgY29tbXVuaXR5IG9mIGVuZ2luZWVycyBpbnRlcmVzdGVkIGluIGZ1cnRoZXIgd29yayB3aXRoDQogICAgICAgICB0aHJlYWRpbmcgdGVjaG5vbG9naWVzIHRvIGNvbnRyaWJ1dGUgdG8gdGhlaXIgZGV2ZWxvcG1lbnQuDQogICAgICAgICBUaGUgZG9jdW1lbnQgYXNzdW1lcyB0aGF0IHJlYWRlcnMgYXJlIGZhbWlsaWFyIHdpdGggRFJMVk0NCiAgICAgICAgIGFyY2hpdGVjdHVyZSBiYXNpY3MsIHRocmVhZGluZyBtZXRob2RvbG9naWVzIGFuZCBzdHJ1Y3R1cmVzLg0KICAgICAgPC9wPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iRG9jdW1lbnRhdGlvbl9Db252ZW50aW9ucyI+PC9hPjMuMyBEb2N1bWVudGF0aW9uDQogICAgICAgICBDb252ZW50aW9ucw0KICAgICAgPC9oMj4NCiAgICAgIDxwPg0KICAgICAgICAgVGhpcyBkb2N1bWVudCB1c2VzIHRoZSA8YSBocmVmPSJjb252ZW50aW9ucy5odG0iIHRhcmdldD0gDQogICAgICAgICAiX2JsYW5rIj51bmlmaWVkIGNvbnZlbnRpb25zPC9hPiBmb3IgdGhlIERSTCBkb2N1bWVudGF0aW9uDQogICAgICAgICBraXQuDQogICAgICA8L3A+DQogICAgICA8aDI+DQogICAgICAgICA8YSBuYW1lPSJVc2luZ190aGlzX2RvY3VtZW50Ij48L2E+My40IFVzaW5nIHRoaXMgRG9jdW1lbnQNCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIFVzZSB0aGlzIGRvY3VtZW50IHRvIGxlYXJuIGFsbCBhYm91dCBpbXBsZW1lbnRhdGlvbg0KICAgICAgICAgc3BlY2lmaWNzIG9mIHRoZSBjdXJyZW50IHZlcnNpb24uIEl0IGRlc2NyaWJlcyB0aGUgdGhyZWFkDQogICAgICAgICBtYW5hZ2VyIGZ1bmN0aW9uYWxpdHkgaW4gYSB2YXJpZXR5IG9mIGFzcGVjdHMsIGluY2x1ZGluZw0KICAgICAgICAgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhcmNoaXRlY3R1cmUgc3BlY2lmaWNzLCBhbmQgdGhlDQogICAgICAgICBrZXkgdXNhZ2Ugc2NlbmFyaW9zIGludm9sdmluZyB0aGUgdGhyZWFkIG1hbmFnZXIuIFRoZQ0KICAgICAgICAgZG9jdW1lbnQgaGFzIHRoZSBmb2xsb3dpbmcgbWFqb3IgcGFydHM6DQogICAgICA8L3A+DQogICAgICA8dWw+DQogICAgICAgICA8bGk+DQogICAgICAgICAgICA8YSBocmVmPSIjT3ZlcnZpZXciPk92ZXJ2aWV3PC9hPiBnaXZlcyB0aGUgZ2VuZXJhbA0KICAgICAgICAgICAgZGVmaW5pdGlvbiBvZiB0aGUgdGhyZWFkIG1hbmFnZXIgY29tcG9uZW50IGFuZCBpdHMgcm9sZQ0KICAgICAgICAgICAgaW4gdGhlIFZNIGFyY2hpdGVjdHVyZS4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgPGEgaHJlZj0iI0FjaGl0ZWN0dXJlIj5BcmNoaXRlY3R1cmU8L2E+IGRlc2NyaWJlcyB0aGUNCiAgICAgICAgICAgIGludGVybmFsIHN0cnVjdHVyZSBvZiB0aGUgdGhyZWFkIG1hbmFnZXIsIGl0cyBkYXRhDQogICAgICAgICAgICBzdHJ1Y3R1cmVzIGFuZCB0aGUgaW50ZXJmYWNlcyBpdCBleHBvcnRzLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICA8YSBocmVmPSIjVXNhZ2VfU2NlbmFyaW9zIj5Vc2FnZSBzY2VuYXJpb3M8L2E+DQogICAgICAgICAgICBkZW1vbnN0cmF0ZSBtYWpvciB0aHJlYWQtcmVsYXRlZCBvcGVyYXRpb25zLCBzdWNoIGFzIHRoZQ0KICAgICAgICAgICAgdGhyZWFkIGxpZmUgY3ljbGUgYW5kIHRocmVhZCBzdXNwZW5zaW9uLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICA8YSBocmVmPSIjUmVmZXJlbmNlcyI+UmVmZXJlbmNlczwvYT4gYXJlIGxpbmtzIHRvDQogICAgICAgICAgICBtYXRlcmlhbHMgcmVsZXZhbnQgdG8gdGhpcyBkZXNjcmlwdGlvbi4NCiAgICAgICAgIA0KICAgICAgPC91bD4NCiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPg0KICAgICAgICAgPGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+DQogICAgICA8L3A+DQogICAgICA8aDE+DQogICAgICAgICA8YSBuYW1lPSJPdmVydmlldyI+PC9hPjQuIE92ZXJ2aWV3DQogICAgICA8L2gxPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgdGhyZWFkIG1hbmFnZXIgKFRNKSBpcyBhIGxpYnJhcnkgYWltZWQgdG8gcHJvdmlkZQ0KICAgICAgICAgdGhyZWFkaW5nIGNhcGFiaWxpdGllcyBmb3IgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPiB2aXJ0dWFsDQogICAgICAgICBtYWNoaW5lcy4gVGhlIG1haW4gcHVycG9zZSBvZiBUTSBpcyB0byBidWlsZCBhIGJyaWRnZQ0KICAgICAgICAgYmV0d2VlbiB0aGUgUE9TSVgtbGlrZSB0aHJlYWRpbmcgbW9kZWwgWzxhIGhyZWY9DQogICAgICAgICAiI3Bvc2l4X3JlZiI+NTwvYT5dIHByb3ZpZGVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLCBhbmQNCiAgICAgICAgIHRoZSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+LWxpa2UgdGhyZWFkaW5nIG1vZGVsIGltcGxpZWQgYnkNCiAgICAgICAgIHRoZSBKMlNFIHNwZWNpZmljYXRpb24gWzxhIGhyZWY9IiNKMlNFU3BlYyI+MTwvYT5dLg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIEpWTSB0aHJlYWRpbmcgc3Vic3lzdGVtDQogICAgICAgICBjb25zaXN0cyBvZiB0aHJlZSBkaWZmZXJlbnQgbGF5ZXJzOg0KICAgICAgPC9wPg0KICAgICAgPHVsPg0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIDxhIGhyZWY9IiNQb3J0YWJpbGl0eSI+cG9ydGluZyBsYXllcjwvYT4gaW50ZXJhY3RpbmcNCiAgICAgICAgICAgIHdpdGggdGhlIG9wZXJhdGluZyBzeXN0ZW0NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIDxhIGhyZWY9IiNOYXRpdmVfTGF5ZXIiPm5hdGl2ZSBsYXllcjwvYT4gcHJvdmlkaW5nDQogICAgICAgICAgICBiYXNpYyB0aHJlYWRpbmcgZnVuY3Rpb25hbGl0eQ0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBUaGUgPGEgaHJlZj0iI0phdmFfaW50ZXJmYWNlIj5KYXZhKiBsYXllcjwvYT4gaW50ZXJhY3RpbmcNCiAgICAgICAgICAgIHdpdGggdGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gb2JqZWN0cyBvZiB0aGUgdXNlcg0KICAgICAgICAgICAgYXBwbGljYXRpb24NCiAgICAgICAgIA0KICAgICAgPC91bD4NCiAgICAgIDxwPg0KICAgICAgICAgTm90ZSB0aGF0IHRoZSB0aHJlYWQgbWFuYWdlciBjb25zaXN0cyBvZiB0aGUgbmF0aXZlIGFuZA0KICAgICAgICAgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPiBsYXllcnMgb2YgdGhlIHN1YnN5c3RlbSwgd2hlcmVhcyBhcw0KICAgICAgICAgdGhlIHBvcnRpbmcgbGF5ZXIgaXMgZXh0ZXJuYWwuDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIEVhY2ggbGF5ZXIgYWRkcyBjZXJ0YWluIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIHRocmVhZGluZw0KICAgICAgICAgcHJvdmlkZWQgYnkgdGhlIHVuZGVybHlpbmcgbGF5ZXIuIFRoYXQgaXMsIHRoZSBwb3J0aW5nIGxheWVyDQogICAgICAgICBhZGRzIHBvcnRhYmlsaXR5IHRvIHRoZSB0aHJlYWRpbmcgcHJvdmlkZWQgYnkgT1MsIHRoZSBuYXRpdmUNCiAgICAgICAgIGxheWVyIGFkZHMgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPi1zcGVjaWZpYyBlbmhhbmNlbWVudHMgdG8NCiAgICAgICAgIHRoZSBwb3J0aW5nIGxheWVyLCBhbmQgdGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gbGF5ZXIgYWRkcw0KICAgICAgICAgYSBjb25uZWN0aW9uIHRvIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gdGhyZWFkcyBhbmQgb2JqZWN0cw0KICAgICAgICAgdG8gdGhlIG5hdGl2ZSBsYXllciwgYXMgc2hvd24gaW4gRmlndXJlIDEgYmVsb3cuIFRoZXNlDQogICAgICAgICBpbnRlcmZhY2VzIGFyZSBncm91cGVkIGluIGEgc2V0IG9mIGhlYWRlcnMgZGVzY3JpYmVkIGluIHRoZQ0KICAgICAgICAgPGEgaHJlZj0iI0V4cG9ydGVkX0ludGVyZmFjZXMiPkV4cG9ydGVkIEludGVyZmFjZXM8L2E+DQogICAgICAgICBzZWN0aW9uIGJlbG93Lg0KICAgICAgPC9wPg0KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+DQogICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL1RocmVhZGluZ1N5c3RlbS5naWYiIGFsdD0NCiAgICAgICAgICJCYXNpYyBsYXllcnMgaW4gdGhlIHRocmVhZCBtYW5hZ2VyIj4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJzcGVjaWFsIj4NCiAgICAgICAgIEZpZ3VyZSAxOiBUaHJlYWRpbmcgU3Vic3lzdGVtDQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4NCiAgICAgICAgIDxhIGhyZWY9IiN0b3AiPkJhY2sgdG8gVG9wPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iS2V5X0ZlYXR1cmUiPjwvYT40LjEgS2V5IGZlYXR1cmVzDQogICAgICA8L2gyPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgc3VwcGxpZWQgdGhyZWFkIG1hbmFnZXIgaGFzIHRoZSBmb2xsb3dpbmcNCiAgICAgICAgIGNoYXJhY3RlcmlzdGljczoNCiAgICAgIDwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSB0aHJlYWRpbmcgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSBKMlNFDQogICAgICAgICAgICBBUEkgWzxhIGhyZWY9IiNKMlNFU3BlYyI+MTwvYT5dLCBKVk1USSBbPGEgaHJlZj0gDQogICAgICAgICAgICAiI0pWTVRJX3JlZiI+MjwvYT5dIGFuZCBKTkkgWzxhIGhyZWY9IiNKTklfcmVmIj4zPC9hPl0NCiAgICAgICAgICAgIHNwZWNpZmljYXRpb25zDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFBvcnRhYmxlIGltcGxlbWVudGF0aW9uIG1vc3RseSBiYXNlZCBvbiB0aGUgQXBhY2hlDQogICAgICAgICAgICBQb3J0aW5nIExheWVyIFs8YSBocmVmPSIjQVBSX3JlZiI+NDwvYT5dDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIENvbXBsaWFuY2Ugd2l0aCB0aGUgSGFybW9ueaA8Y29kZT5oeXRocmVhZDwvY29kZT4NCiAgICAgICAgICAgIGludGVyZmFjZSBbPGEgaHJlZj0iI2h5dGhyZWFkX3JlZiI+ODwvYT5dDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSBnYXJiYWdlIGNvbGxlY3Rvcg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBNb25pdG9yIG9wdGltaXphdGlvbnMgc3BlY2lmaWMgdG8gdGhlIGp1c3QtaW4tdGltZSAoSklUKQ0KICAgICAgICAgICAgY29tcGlsZXIgc3VwcGxpZWQgd2l0aCBEUkxWTQ0KICAgICAgICAgDQogICAgICA8L3VsPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iVE1faW5fVk0iPjwvYT40LjIgVGhyZWFkIE1hbmFnZXIgaW4gVk0NCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIEZpZ3VyZSAyIGJlbG93IGRlbW9uc3RyYXRlcyB0aGUgaW50ZXJhY3Rpb24gb2YgdGhlIHRocmVhZA0KICAgICAgICAgbWFuYWdlciB3aXRoIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiB0aGUgdmlydHVhbA0KICAgICAgICAgbWFjaGluZToNCiAgICAgIDwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIDxiPlRoZSBWTSBjb3JlPC9iPiB0byBhY2Nlc3MgaW5mb3JtYXRpb24gb24gb2JqZWN0IGxheW91dA0KICAgICAgICAgICAgYW5kIGZvciBiaW5kaW5nIGJldHdlZW6gPGNvZGU+amF2YS5sYW5nLlRocmVhZDwvY29kZT4NCiAgICAgICAgICAgIG9iamVjdHMgYW5kIGFwcHJvcHJpYXRlIG5hdGl2ZSB0aHJlYWRzLiBGb3IgdGhhdCwgdGhlDQogICAgICAgICAgICB0aHJlYWQgbWFuYWdlciBxdWVyaWVzIHRoZQ0KICAgICAgICAgICAgPGNvZGU+dGhyZWFkX2V4dGVybmFscy5oPC9jb2RlPiBpbnRlcmZhY2Ugb2YgdGhlIFZNIGNvcmUuDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIDxiPlRoZSBnYXJiYWdlIGNvbGxlY3RvcjwvYj4gdG8gc2VydmUgdGhyZWFkIG1hbmlwdWxhdGlvbg0KICAgICAgICAgICAgcmVxdWVzdHMgZm9yIHJvb3Qgc2V0IGVudW1lcmF0aW9uIGFuZCBnYXJiYWdlIGNvbGxlY3Rpb24NCiAgICAgICAgICAgIGFjdGl2aXRpZXMuIEdDIHdvcmtzIHdpdGggdGhlIG5hdGl2ZSBsYXllciBvZiB0aGUgdGhyZWFkDQogICAgICAgICAgICBtYW5hZ2VyLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICA8Yj5UaGUgcG9ydGluZyBsYXllcjwvYj4gdG8gaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZw0KICAgICAgICAgICAgc3lzdGVtIGFuZCBlbmFibGUgPGEgaHJlZj0iI1BvcnRhYmlsaXR5Ij5wb3J0YWJpbGl0eTwvYT4NCiAgICAgICAgICAgIGZvciB0aHJlYWRpbmcuIFRoZSBUTSBuYXRpdmUgbGF5ZXIgcXVlcmllcyBmdW5jdGlvbnMgb2YNCiAgICAgICAgICAgIHRoZSBBUFIgaW50ZXJmYWNlcyBhbmQgdGhlIHBvcnRsaWIgaW50ZXJmYWNlcy4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgPGI+VGhlIGp1c3QtaW4tdGltZSBjb21waWxlcjwvYj4gdG8gcHJvdmlkZSBvcHRpbWl6ZWQNCiAgICAgICAgICAgIHRocmVhZGluZyBmdW5jdGlvbnMsIGNhbGxlZCBWTSBoZWxwZXJzLCBmb3IgSklULWNvbXBpbGVkDQogICAgICAgICAgICBjb2RlLiBUaGUgdGhyZWFkIG1hbmFnZXIgZXhwb3J0cyB0aGlzIGZ1bmN0aW9uYWxpdHkgdmlhDQogICAgICAgICAgICB0aGUgPGNvZGU+dGhyZWFkX2hlbHBlcnM8L2NvZGU+IGludGVyZmFjZSBvZiB0aGUgSmF2YTxhDQogICAgICAgICAgICBocmVmPSIjKiI+KjwvYT4gbGF5ZXIuDQogICAgICAgICANCiAgICAgIDwvdWw+DQogICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4NCiAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvdG1faW5fdm0uZ2lmIiBhbHQ9DQogICAgICAgICAiVGhyZWFkIE1hbmFnZXIgYW5kIG90aGVyIFZNIGNvbXBvbmVudHMiPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPg0KICAgICAgICAgRmlndXJlIDI6IFRocmVhZCBNYW5hZ2VyIGluIFZNIEFyY2hpdGVjdHVyZQ0KICAgICAgPC9wPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iUG9ydGFiaWxpdHkiPjwvYT40LjMgUG9ydGFiaWxpdHkNCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSB0aHJlYWQgbWFuYWdlciBjb2RlIGlzIG1vc3RseSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBhbmQNCiAgICAgICAgIHJlbGllcyBvbiB0aGUgdW5kZXJseWluZyBwb3J0aW5nIGxheWVyIHRvIGFkanVzdCB0byBwbGF0Zm9ybQ0KICAgICAgICAgc3BlY2lmaWNzLiBUaGUgY3VycmVudCBUTSBpbXBsZW1lbnRhdGlvbiBpcyB3cml0dGVuIG9uIHRvcA0KICAgICAgICAgb2YgdGhlIEFwYWNoZSBQb3J0aW5nIExheWVyIChBUFIpIHdpdGggY2VydGFpbiBleHRlbnNpb25zDQogICAgICAgICBhZGRlZCB0byBpdC4gVGhlIHBsYXRmb3JtLWRlcGVuZGVudCBUTSBwYXJ0cyBhcmUgdGhlIFZNDQogICAgICAgICBoZWxwZXJzIHBhY2thZ2UsIHdoaWNoIGlzIHRpZWQgdG8gdGhlIHNwZWNpZmljIGFyY2hpdGVjdHVyZSwNCiAgICAgICAgIGFuZCB0aGUgQVBSIGV4dGVuc2lvbnMgcGFja2FnZSwgd2hpY2ggaXMgcGFydGlhbGx5IHRpZWQgd2l0aA0KICAgICAgICAgdGhlIE9TIEFQSS4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgQVBSLWJhc2VkIHBvcnRpbmcgZW5hYmxlcyBjb21waWxhdGlvbiBvZiB0aGUgdGhyZWFkIG1hbmFnZXINCiAgICAgICAgIGNvZGUgb24gZXZlcnkgcGxhdGZvcm0gd2hlcmUgQVBSIGlzIGF2YWlsYWJsZS4gVGhlIGN1cnJlbnQNCiAgICAgICAgIHZlcnNpb24gb2YgdGhlIHRocmVhZCBtYW5hZ2VyIHN1cHBvcnRzIHRoZSBMaW51eDxhIGhyZWY9DQogICAgICAgICAiIyoiPio8L2E+IGFuZCBXaW5kb3dzPGEgaHJlZj0iIyoiPio8L2E+IElBLTMyIHBsYXRmb3Jtcy4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPg0KICAgICAgICAgPGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+DQogICAgICA8L3A+DQogICAgICA8aDE+DQogICAgICAgICA8YSBuYW1lPSJBY2hpdGVjdHVyZSI+PC9hPjUuIEFyY2hpdGVjdHVyZQ0KICAgICAgPC9oMT4NCiAgICAgIDxwPg0KICAgICAgICAgU3Vic2VxdWVudCBzZWN0aW9ucyBkZXNjcmliZSB0aGUgZnVuY3Rpb25hbCBpbnRlcmZhY2VzIHRoYXQNCiAgICAgICAgIHRoZSB0aHJlYWQgbWFuYWdlciBleHBvcnRzIHRvIGludGVyYWN0IHdpdGggb3RoZXIgVk0NCiAgICAgICAgIGNvbXBvbmVudHMgYW5kIGl0cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuDQogICAgICA8L3A+DQogICAgICA8aDI+DQogICAgICAgICA8YSBuYW1lPSJFeHBvcnRlZF9JbnRlcmZhY2VzIj48L2E+NS4xIEV4cG9ydGVkIGludGVyZmFjZXMNCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIEFzIGluZGljYXRlZCBpbiB0aGUgb3ZlcnZpZXcsIHRoZSB0aHJlYWQgbWFuYWdlciBleHBvcnRzIHRoZQ0KICAgICAgICAgbmF0aXZlIGFuZCB0aGUgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPiBpbnRlcmZhY2VzLiBUaGVzZQ0KICAgICAgICAgaW50ZXJmYWNlcyBhcmUgcmVwcmVzZW50ZWQgYXMgZ3JvdXBzIG9mIGZ1bmN0aW9ucyBwcm92aWRpbmcNCiAgICAgICAgIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgdXBvbiBleHRlcm5hbCByZXF1ZXN0cywgYXMgZGVzY3JpYmVkDQogICAgICAgICBpbiB0aGUgc3Vic2VxdWVudCBzZWN0aW9ucy4NCiAgICAgIDwvcD4NCiAgICAgIDxoMz4NCiAgICAgICAgIDxhIG5hbWU9Ik5hdGl2ZV9MYXllciI+PC9hPjUuMS4xIE5hdGl2ZSBJbnRlcmZhY2UNCiAgICAgIDwvaDM+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSBuYXRpdmUgaW50ZXJmYWNlIGlzIGluc3BpcmVkIGJ5IHRoZSBIYXJtb255DQogICAgICAgICA8Y29kZT5oeXRocmVhZDwvY29kZT4gbW9kdWxlLiBUaGlzIGlzIGEgbG93LWxldmVsIGxheWVyIHRoYXQNCiAgICAgICAgIHByb3ZpZGVzIEphdmE8YSBocmVmPSIjKiI+KjwvYT4tbGlrZSB0aHJlYWRpbmcNCiAgICAgICAgIGZ1bmN0aW9uYWxpdHksIHN1Y2ggYXMgaW50ZXJydXB0aW9uIHN1cHBvcnQgZm9yIHdhaXRpbmcNCiAgICAgICAgIG9wZXJhdGlvbnMgKGZvciBleGFtcGxlLKA8Y29kZT53YWl0PC9jb2RlPiygDQogICAgICAgICA8Y29kZT5wYXJrPC9jb2RlPiygPGNvZGU+am9pbjwvY29kZT4gYW5koDxjb2RlPnNsZWVwPC9jb2RlPikNCiAgICAgICAgIGFuZCBoZWxwcyBlc3RhYmxpc2ggY29ycmVjdCBpbnRlcmFjdGlvbiBvZiB0aHJlYWRzIHdpdGggdGhlDQogICAgICAgICBnYXJiYWdlIGNvbGxlY3Rvci4gVGhpcyBsYXllciBkb2VzIG5vdCBkZWFsIHdpdGggSmF2YTxhDQogICAgICAgICBocmVmPSIjKiI+KjwvYT4gb2JqZWN0cy4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgVGhlIG5hdGl2ZSBpbnRlcmZhY2UgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbg0KICAgICAgICAgc2V0czoNCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJjbGFzcyI+DQogICAgICAgICCgPGNvZGU+aHl0aHJlYWQuaDwvY29kZT4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgRnVuY3Rpb25zIG9mIHRoZaA8Y29kZT5oeXRocmVhZDwvY29kZT4gc2V0IFs8YSBocmVmPSANCiAgICAgICAgICIjaHl0aHJlYWRfcmVmIj44PC9hPl0gcmVzcG9uc2libGUgZm9yOg0KICAgICAgPC9wPg0KICAgICAgPHVsPg0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgQmFzaWMgbWFuaXB1bGF0aW9uDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFBhcmtpbmcNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhyZWFkIGxvY2FsIHN0b3JhZ2Ugc3VwcG9ydA0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBSZWFkLXdyaXRlIG11dGV4IHN1cHBvcnQNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgTW9uaXRvcnMgc3VwcG9ydA0KICAgICAgICAgDQogICAgICA8L3VsPg0KICAgICAgPHAgY2xhc3M9ImNsYXNzIj4NCiAgICAgICAgIKA8Y29kZT5oeXRocmVhZF9leHQuaDwvY29kZT4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgU2V0IG9mIGZ1bmN0aW9ucyBleHRlbmRpbmcgdGhloDxjb2RlPmh5dGhyZWFkPC9jb2RlPiBzZXQNCiAgICAgICAgIHJlc3BvbnNpYmxlIGZvcjoNCiAgICAgIDwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFRocmVhZCBtYW5hZ2VyIGluaXRpYWxpemF0aW9uIGFuZCBzaHV0ZG93bg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBUaHJlYWQgZ3JvdXBzIHN1cHBvcnQNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgQ29uZGl0aW9uYWwgdmFyaWFibGUNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgU2FmZSBzdXNwZW5zaW9uIHN1cHBvcnQNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgTGF0Y2gNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhyZWFkIGl0ZXJhdG9yIHN1cHBvcnQNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgQXR0cmlidXRlcyBhY2Nlc3MNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgUXVlcnlpbmcgc3RhdGUgb2YgdGhlIHRocmVhZA0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBTZW1hcGhvcmUNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgTXV0ZXgNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhpbiBtb25pdG9ycyBzdXBwb3J0DQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFF1ZXJ5aW5nIHRoZSB0aHJlYWQgc3RhdGUNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhyZWFkIGF0dHJpYnV0ZXMgYWNjZXNzDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIEludGVycnVwdGlvbiBzdXBwb3J0DQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFRhc2sgbWFuYWdlbWVudCBzdXBwb3J0DQogICAgICAgICANCiAgICAgIDwvdWw+DQogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4NCiAgICAgICAgIDxhIGhyZWY9IiN0b3AiPkJhY2sgdG8gVG9wPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgzPg0KICAgICAgICAgPGEgbmFtZT0iSmF2YV9pbnRlcmZhY2UiPjwvYT41LjEuMiBKYXZhPGEgaHJlZj0iIyoiPio8L2E+DQogICAgICAgICBJbnRlcmZhY2UNCiAgICAgIDwvaDM+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IGludGVyZmFjZSBjb25uZWN0cyB0aGUgdGhyZWFkaW5nDQogICAgICAgICBmdW5jdGlvbmFsaXR5IHByb3ZpZGVkIGJ5IHRoZSBuYXRpdmUgbGF5ZXIgdG8gSmF2YTxhIGhyZWY9DQogICAgICAgICAiIyoiPio8L2E+IHRocmVhZHMgYW5kIG9iamVjdHMuDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSBmdW5jdGlvbnMgb2YgdGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gaW50ZXJmYWNlIHRha2UNCiAgICAgICAgIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gb2JqZWN0cyBhcyBwYXJhbWV0ZXJzIGFuZCBjYW4gYmUNCiAgICAgICAgIGVhc2lseSB1c2VkIHRvIGltcGxlbWVudCBrZXJuZWwgY2xhc3NlcywgSk5JIG9yIEpWTVRJDQogICAgICAgICBmdW5jdGlvbiBzZXRzLiBUaGUgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPiBpbnRlcmZhY2UgY29uc2lzdHMNCiAgICAgICAgIG9mIDMgcGFydHM6DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iY2xhc3MiPg0KICAgICAgICAgoDxjb2RlPmp0aHJlYWQuaDwvY29kZT4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgRnVuY3Rpb25zIHN1cHBvcnRpbmcgPGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4gYW5kDQogICAgICAgICA8Y29kZT5qYXZhLmxhbmcuVGhyZWFkPC9jb2RlPiBBUEkgcmVzcG9uc2libGUgZm9yOg0KICAgICAgPC9wPg0KICAgICAgPHVsPg0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgQmFzaWMgbWFuaXB1bGF0aW9uDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIElkZW50aWZpY2F0aW9uDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFBvaW50ZXIgY29udmVyc2lvbg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBBdHRyaWJ1dGVzIGFjY2Vzcw0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBJbnRlcnJ1cHRpb24NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgTW9uaXRvcnMNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgUGFya2luZw0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBTdXNwZW5zaW9uDQogICAgICAgICANCiAgICAgIDwvdWw+DQogICAgICA8cCBjbGFzcz0iY2xhc3MiPg0KICAgICAgICAgoDxjb2RlPnRpX3RocmVhZC5oPC9jb2RlPg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBGdW5jdGlvbnMgc3VwcG9ydGluZyB2YXJpb3VzIEpWTVRJIGZ1bmN0aW9ucyBhbmQgdGhlDQogICAgICAgICA8Y29kZT5qYXZhLmxhbmcubWFuYWdlbWVudDwvY29kZT4gQVBJIHJlc3BvbnNpYmxlIGZvcjoNCiAgICAgIDwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFN0YXRlIHF1ZXJ5DQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIEluc3RydW1lbnRhdGlvbg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBMb2NhbCBzdG9yYWdlDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIE1vbml0b3IgaW5mbw0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBDUFUgdGltaW5nDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFBlYWsgY291bnQNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgUmF3IG1vbml0b3JzDQogICAgICAgICANCiAgICAgIDwvdWw+DQogICAgICA8cCBjbGFzcz0iY2xhc3MiPg0KICAgICAgICAgoDxjb2RlPnRocmVhZF9oZWxwZXJzLmg8L2NvZGU+DQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIEZ1bmN0aW9ucyBwcm92aWRpbmcgdGhlIHN0dWJzIHRoYXQgaGVscCB0byBvcHRpbWl6ZSB0aGUNCiAgICAgICAgIHBlcmZvcm1hbmNlIGR1ZSB0byB0aWdodGVyIFRNIGFuZCBKSVQgaW50ZWdyYXRpb24uDQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4NCiAgICAgICAgIDxhIGhyZWY9IiNUb3AiPkJhY2sgdG8gVG9wPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iRGF0YV9TdHJ1Y3R1cmVzIj48L2E+NS4yIERhdGEgc3RydWN0dXJlcw0KICAgICAgPC9oMj4NCiAgICAgIDxwPg0KICAgICAgICAgVGhlIHRocmVhZCBtYW5hZ2VyIGRhdGEgc3RydWN0dXJlcyBhcmUgdHlwaWNhbGx5IG5vdA0KICAgICAgICAgZXhwb3NlZDogZXh0ZXJuYWwgVk0gY29tcG9uZW50cyBhY2Nlc3MgdGhlc2Ugc3RydWN0dXJlcyB2aWENCiAgICAgICAgIG9wYXF1ZSBwb2ludGVycyBpbnN0ZWFkLiBUaGUgcG9pbnRlcnMgYXJlIGRlZmluZWQgaW4gdGhlDQogICAgICAgICBwdWJsaWMgaGVhZGVyIGZpbGVzIDxjb2RlPmh5dGhyZWFkLmg8L2NvZGU+LA0KICAgICAgICAgPGNvZGU+aHl0aHJlYWRfZXh0Lmg8L2NvZGU+LCA8Y29kZT5qdGhyZWFkLmg8L2NvZGU+IGFuZA0KICAgICAgICAgPGNvZGU+dGlfdGhyZWFkLmg8L2NvZGU+LiBTdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMgYXJlDQogICAgICAgICBkZXNjcmliZWQgaW4gdGhlIDxjb2RlPnRocmVhZF9wcml2YXRlLmg8L2NvZGU+IGZpbGUuDQogICAgICA8L3A+DQogICAgICA8aDI+DQogICAgICAgICA8YSBuYW1lPSJUaHJlYWRfQ29udHJvbF9TdHJ1Y3R1cmUiPjwvYT41LjMgVGhyZWFkIGNvbnRyb2wNCiAgICAgICAgIHN0cnVjdHVyZXMNCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSB0aHJlYWQgbWFuYWdlciByZXF1aXJlcyBlYWNoIHRocmVhZCB0byBiZQ0KICAgICAgICAgPGVtPnJlZ2lzdGVyZWQ8L2VtPiBiZWZvcmUgdGhyZWFkaW5nIGZ1bmN0aW9ucyBjYW4gYmUNCiAgICAgICAgIGNhbGxlZC4gVGhyZWFkIHJlZ2lzdHJhdGlvbiBpcyBjYWxsZWQgPGVtPmF0dGFjaGluZyBhDQogICAgICAgICB0aHJlYWQ8L2VtPiBhbmQgY2FuIGJlIGRvbmUgYnkgdXNpbmcgb25lIG9mIHRoZSBmb2xsb3dpbmc6DQogICAgICA8L3A+DQogICAgICA8dWw+DQogICAgICAgICA8bGk+DQogICAgICAgICAgICBGdW5jdGlvbiA8Y29kZT5oeXRocmVhZF9hdHRhY2goKTwvY29kZT4gcmVnaXN0ZXJzIHRoZQ0KICAgICAgICAgICAgY3VycmVudCB0aHJlYWQgaW4gdGhlIHRocmVhZCBtYW5hZ2VyLCBzbyB0aGF0IHRocmVhZGluZw0KICAgICAgICAgICAgb3BlcmF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIG92ZXIgdGhpcyB0aHJlYWQgdmlhIHRoZQ0KICAgICAgICAgICAgbmF0aXZlIGxheWVyLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBGdW5jdGlvbiA8Y29kZT5qdGhyZWFkX2F0dGFjaCgpPC9jb2RlPiBhc3NvY2lhdGVzIHRoZQ0KICAgICAgICAgICAgY3VycmVudCB0aHJlYWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUNCiAgICAgICAgICAgIDxjb2RlPmphdmEubGFuZy5UaHJlYWQ8L2NvZGU+IG9iamVjdCwgc28gdGhhdCB0aHJlYWRpbmcNCiAgICAgICAgICAgIG9wZXJhdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBvdmVyIHRoaXMgdGhyZWFkIHZpYSB0aGUNCiAgICAgICAgICAgIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gbGF5ZXIuDQogICAgICAgICANCiAgICAgIDwvdWw+DQogICAgICA8cD4NCiAgICAgICAgIERlcGVuZGluZyBvbiB0aGUgYXR0YWNoaW5nIGZ1bmN0aW9uLCB0aGUgdGhyZWFkIG1hbmFnZXINCiAgICAgICAgIG9wZXJhdGVzIHdpdGggdHdvIHR5cGVzIG9mIHRocmVhZHM6DQogICAgICA8L3A+DQogICAgICA8dWw+DQogICAgICAgICA8bGk+DQogICAgICAgICAgICA8ZW0+TmF0aXZlIHRocmVhZDwvZW0+IGF0dGFjaGVkIHRvIHRoZSBuYXRpdmUgbGF5ZXIgb2YNCiAgICAgICAgICAgIHRoZSB0aHJlYWQgbWFuYWdlcg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICA8ZW0+SmF2YTxhIGhyZWY9IiMqIj4qPC9hPiB0aHJlYWQ8L2VtPiBhdHRhY2hlZCB0byB0aGUNCiAgICAgICAgICAgIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gbGF5ZXIgb2YgdGhlIHRocmVhZCBtYW5hZ2VyIGFuZA0KICAgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGGgPGNvZGU+amF2YS5sYW5nLlRocmVhZDwvY29kZT4gb2JqZWN0DQogICAgICAgICANCiAgICAgIDwvdWw+DQogICAgICA8cD4NCiAgICAgICAgIEVhY2ggdGhyZWFkIHR5cGUgaGFzIGEgc3RydWN0dXJlIGFzc2lnbmVkIHRvIGl0IHRoYXQgaG9sZHMNCiAgICAgICAgIHRocmVhZC1zcGVjaWZpYyBkYXRhLCBhcyBkZXNjcmliZWQgYmVsb3cuDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIE90aGVyIFZNIGNvbXBvbmVudHMgd29yayB3aXRoIG9wYXF1ZSBoYW5kbGVzIHRvIHRob3NlDQogICAgICAgICBzdHJ1Y3R1cmVzIGFuZCBoYXZlIG5vIGluZm9ybWF0aW9uIGFib3V0IHRoZWlyIGNvbnRlbnRzLg0KICAgICAgICAgVGhpcyB3YXksIHRvIHdvcmsgd2l0aCBhIHRocmVhZCwgYSBjb21wb25lbnQgY2FsbHMgb25lIG9mDQogICAgICAgICB0aGUgYXR0YWNoaW5nIGZ1bmN0aW9ucywgcmVjZWl2ZXMgYW4gb3BhcXVlIGhhbmRsZSB0byB0aGUNCiAgICAgICAgIHRocmVhZCBjb250cm9sIHN0cnVjdHVyZSBmb3IgdGhlIHRocmVhZCwgYW5kIHBlcmZvcm1zDQogICAgICAgICB3aGF0ZXZlciBvcGVyYXRpb25zIHdpdGggdGhpcyB0aHJlYWQgdXNpbmcgdGhpcyBvcGFxdWUNCiAgICAgICAgIGhhbmRsZS4NCiAgICAgIDwvcD4NCiAgICAgIDxoMz4NCiAgICAgICAgIDxhIG5hbWU9Ik5hdGl2ZV9TdHJ1Y3R1cmUiPjwvYT41LjMuMSBOYXRpdmUgVGhyZWFkIFN0cnVjdHVyZQ0KICAgICAgPC9oMz4NCiAgICAgIDxwPg0KICAgICAgICAgV2hlbiByZWdpc3RlcmVkIHdpdGggdGhlIHRocmVhZCBtYW5hZ2VyJnJzcXVvO3MgbmF0aXZlDQogICAgICAgICBsYXllciwgZWFjaCB0aHJlYWQgb2J0YWlucyBhIGNvbnRyb2wgc3RydWN0dXJlIHdpdGggYWxsDQogICAgICAgICB0aHJlYWQtc3BlY2lmaWMgZGF0YSByZXF1aXJlZCBmb3Igb3BlcmF0aW9ucyB3aXRoIHRoZQ0KICAgICAgICAgdGhyZWFkLCBzdWNoIGFzIHN0YXRlLCBhdHRyaWJ1dGVzLCByZWZlcmVuY2VzIHRvIE9TLXNwZWNpZmljDQogICAgICAgICB0aHJlYWQgc3RydWN0dXJlcywgYW5kIHN5bmNocm9uaXphdGlvbiBhaWRzLiBUaGUgY29udHJvbA0KICAgICAgICAgc3RydWN0dXJlIGlzIHN1YnNlcXVlbnRseSB1c2VkIGZvciBtaXNjZWxsYW5lb3VzIHRocmVhZGluZw0KICAgICAgICAgb3BlcmF0aW9ucy4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJub3RlIj4NCiAgICAgICAgIE5vdGUNCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJub3RldGV4dCI+DQogICAgICAgICBUaGUgYWN0dWFsIGNvbnRlbnQgb2YgYSB0aHJlYWQgY29udHJvbCBzdHJ1Y3R1cmUgaXMNCiAgICAgICAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIGFuZCBpcyBub3QgZXhwb3NlZCB0byBvdGhlcg0KICAgICAgICAgY29tcG9uZW50cy4goA0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBzaG93cyB0aGUgdGhyZWFkIGNvbnRyb2wgc3RydWN0dXJlIG9mIGENCiAgICAgICAgIG5hdGl2ZSBhdHRhY2hlZCB0aHJlYWQgZGVzY3JpYmVkIGJ5IHRoZSB0eXBlDQogICAgICAgICA8Y29kZT5IeVRocmVhZDwvY29kZT46DQogICAgICA8L3A+DQogICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4NCiAgICAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9ImltYWdlcy9OYXRpdmVVbmF0dGFjaGVkVGhyZWFkLmdpZiIgYWx0PQ0KICAgICAgICAgIlN0cnVjdHVyZSBvZiBhIG5hdGl2ZSB0aHJlYWQgbm90IHJlZ2lzdGVyZWQgaW4gVE0iPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPg0KICAgICAgICAgRmlndXJlIDM6oCBOYXRpdmUgVGhyZWFkDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgdGhlIGRhdGEgZmllbGRzIG1ha2luZyB1cCB0aGUNCiAgICAgICAgIHRocmVhZCBjb250cm9sIHN0cnVjdHVyZSBvZiBhIG5hdGl2ZSB0aHJlYWQ6DQogICAgICA8L3A+DQogICAgICA8dGFibGUgd2lkdGg9IjEwMCUiPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJUYWJsZUhlYWRpbmciPg0KICAgICAgICAgICAgICAgRGF0YSBGaWVsZA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVIZWFkaW5nIj4NCiAgICAgICAgICAgICAgIERlc2NyaXB0aW9uDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxzdHJvbmc+U3VzcGVuc2lvbjwvc3Ryb25nPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+SURBVEE8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnN1c3BlbmRfcmVxdWVzdDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgTnVtYmVyIG9mIHN1c3BlbmQgcmVxdWVzdHMgbWFkZSBmb3IgdGhpcyB0aHJlYWQuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmludDE2oDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+c3VzcGVuZF9kaXNhYmxlX2NvdW50PC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBGbGFnIGluZGljYXRpbmcgdGhhdCB0aGUgdGhyZWFkIGNhbiBzYWZlbHkgYmUNCiAgICAgICAgICAgICAgIHN1c3BlbmRlZC4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+aHlsYXRjaF90oDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+c2FmZV9yZWdpb25fZXZlbnQ8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEV2ZW50IHVzZWQgdG8gbm90aWZ5IGludGVyZXN0ZWQgdGhyZWFkcyB3aGVuIGEgdGhyZWFkDQogICAgICAgICAgICAgICBlbnRlcnMgYSBzYWZlIHJlZ2lvbi4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+aHlzZW1fdKA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnJlc3VtZV9ldmVudDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgRXZlbnQgdXNlZCB0byBub3RpZnkgYSBzdXNwZW5kZWQgdGhyZWFkIHRoYXQgaXQgbmVlZHMNCiAgICAgICAgICAgICAgIHRvIHdha2UgdXAuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmh5dGhyZWFkX2V2ZW50X2NhbGxiYWNrX3Byb2OgPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT5zYWZlcG9pbnRfY2FsbGJhY2s8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGF0IGEgc2FmZSBwb2ludCBvbiByZXN1bWluZyBhDQogICAgICAgICAgICAgICB0aHJlYWQuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxzdHJvbmc+QmFzaWMgbWFuaXB1bGF0aW9uIGZpZWxkczwvc3Ryb25nPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+aHl0aHJlYWRfZ3JvdXBfdKA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmdyb3VwPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBHcm91cCBmb3IgdGhpcyB0aHJlYWQgZXF1YWwgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGhlYWQNCiAgICAgICAgICAgICAgIG9mIHRoZSBsaXN0IG9mIHRocmVhZHMgZm9yIHRoaXMgZ3JvdXAuPGJyPg0KICAgICAgICAgICAgICAgIEdyb3VwcyBhcmUgdXNlZCB0byBxdWlja2x5IGl0ZXJhdGUgb3ZlciBsaXN0cyBvZg0KICAgICAgICAgICAgICAgdGhyZWFkcy4gRXhhbXBsZXM6IEphdmE8YSBocmVmPSIjKiI+KjwvYT4gdGhyZWFkcywgR0MNCiAgICAgICAgICAgICAgIHByaXZhdGUgdGhyZWFkcy4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+aHl0aHJlYWRfdKA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPm5leHQ8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIFBvaW50ZXIgdG8gdGhlIG5leHQgdGhyZWFkIHdpdGhpbiB0aGUgZ3JvdXAuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmh5dGhyZWFkX3SgPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT5wcmV2PC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBsYXN0IHRocmVhZCB3aXRoaW4gdGhlIGdyb3VwLg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgIDwvdHI+DQogICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT5hcHJfdGhyZWFkX3QgKqA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPm9zX2hhbmRsZTwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgSGFuZGxlIHRvIHRoZSBPUyB0aHJlYWQuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnZvaWQgKqA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnByaXZhdGVfZGF0YTwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgUGxhY2Vob2xkZXIgZm9yIGFueSBkYXRhIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzDQogICAgICAgICAgICAgICB0aHJlYWQuIFRoZSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IGxheWVyIHVzZXMgdGhpcw0KICAgICAgICAgICAgICAgZmllbGQgdG8gc3RvcmUgSmF2YS1zcGVjaWZpYyBjb250ZXh0Lg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgIDwvdHI+DQogICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT5Cb29sZWFuoDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+ZXhpdF9yZXF1ZXN0PC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBGbGFnIGluZGljYXRpbmcgdGhhdCBhIHJlcXVlc3QgdG8gZXhpdCBoYXMgYmVlbg0KICAgICAgICAgICAgICAgcmVjZWl2ZWQuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPklEQVRBoDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+ZXhpdF92YWx1ZTwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgRXhpdCB2YWx1ZSBvZiB0aGlzIHRocmVhZC4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPHN0cm9uZz5TeW5jaHJvbml6YXRpb24gc3VwcG9ydDwvc3Ryb25nPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+aHlzZW1fdKA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnBhcmtfZXZlbnQ8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEV2ZW50IGZvciBwYXJraW5nIHRocmVhZHMuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmh5c2VtX3SgPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT5zbGVlcF9ldmVudDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgRXZlbnQgZm9yIHNsZWVwaW5nIHRocmVhZHMuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmh5bGF0Y2hfdKA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmpvaW5fZXZlbnQ8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEV2ZW50IHJlc2VydmVkIGZvciB0aHJlYWRzIHRoYXQgaW52b2tlIGpvaW4uDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmh5Y29uZF90oDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+Y3VycmVudF9jb25kaXRpb248L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEN1cnJlbnQgY29uZGl0aW9uYWwgdmFyaWFibGUgdGhhdCB0aGUgdGhyZWFkIGlzDQogICAgICAgICAgICAgICB3YWl0aW5nIG9uLiBVc2VkIGZvciBpbnRlcnJ1cHRpbmcuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxzdHJvbmc+U3RhdGU8L3N0cm9uZz4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPklEQVRBoDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+c3RhdGU8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIFRocmVhZCBzdGF0ZS4gSG9sZHMgdGhyZWFkIHN0YXRlIGZsYWdzIGFzIGRlZmluZWQgaW4NCiAgICAgICAgICAgICAgIHRoZSBKVk1USSBzcGVjaWZpY2F0aW9uIFs8YSBocmVmPSIjSlZNVElfcmVmIj4yPC9hPl0NCiAgICAgICAgICAgICAgIHBsdXMgYWRkaXRpb25hbCBmbGFncy4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPHN0cm9uZz5BdHRyaWJ1dGVzPC9zdHJvbmc+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgIDwvdHI+DQogICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT5jaGFyICqgPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT5uYW1lPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBOYW1lIG9mIHRoZSB0aHJlYWQsIGNhbiBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPklEQVRBoDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+cHJpb3JpdHk8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEhpbnQgdG8gdGhlIHNjaGVkdWxlciBhYm91dCB0aHJlYWQgcHJpb3JpdHkuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPklEQVRBoDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+ZGFlbW9uPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBDaGVja3Mgd2hldGhlciB0aGlzIHRocmVhZCBpcyBhIGRhZW1vbi4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPHN0cm9uZz5PdGhlcjwvc3Ryb25nPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+SURBVEGgPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT50aHJlYWRfaWQ8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIElEIGZvciB0aGlzIHRocmVhZC4gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRocmVhZHMgaXMNCiAgICAgICAgICAgICAgIGdvdmVybmVkIGJ5IHRoZSBzaXplIG9mIHRoZSBsb2NrIHdvcmQgcmVjb3JkLiBTZWUNCiAgICAgICAgICAgICAgIHNlY3Rpb24gPGEgaHJlZj0iI1RoaW5fbW9uaXRvcnMiPlRoaW4gTW9uaXRvcnM8L2E+IGZvcg0KICAgICAgICAgICAgICAgZGV0YWlscyBvbiB0aGUgbG9jayB3b3JkIHN0cnVjdHVyZS4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+YXByX3Bvb2xfdCAqoDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+cG9vbDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgTWVtb3J5IHBvb2wsIHdoZXJlIHRoaXMgdGhyZWFkIGlzIGFsbG9jYXRlZC4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+YXByX3RocmVhZGF0dHJfdCAqoDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+YXByX2F0dHJzPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBBUFIgdGhyZWFkIGF0dHJpYnV0ZXMuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmh5dGhyZWFkX2VudHJ5cG9pbnRfdKA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnN0YXJ0X3Byb2M8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIFByb2NlZHVyZSB0aGF0IGRlc2NyaWJlcyB0aHJlYWQgYm9keSB0byBiZSBleGVjdXRlZC4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+dm9pZCAqoDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+c3RhcnRfcHJvY19hcmdzPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBBcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSB0aHJlYWQgYm9keS4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+dm9pZCAqoDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+dGhyZWFkX2xvY2FsX3N0b3JhZ2U8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEFycmF5IHJlcHJlc2VudGluZyB0aGUgdGhyZWFkIGxvY2FsIHN0b3JhZ2UuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnZvaWQgKqA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmJpZ19sb2NhbF9zdG9yYWdlPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBFeHRlbnNpb24gdG8gdGhlIHN0YW5kYXJkIGxvY2FsIHN0b3JhZ2Ugc2xvdC4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgPC90YWJsZT4NCiAgICAgIDxwPg0KICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhyZWFkIGNvbnRyb2wgc3RydWN0dXJlcywgc2VlIHRoZQ0KICAgICAgICAgPGNvZGU+dGhyZWFkX3ByaXZhdGUuaDwvY29kZT4gaGVhZGVyIGZpbGUgc3VwcGxpZWQgd2l0aCB0aGUNCiAgICAgICAgIHNvdXJjZSBidW5kbGUuDQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4NCiAgICAgICAgIDxhIGhyZWY9IiNUb3AiPkJhY2sgdG8gVG9wPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgzPg0KICAgICAgICAgPGEgbmFtZT0iSmF2YV9TdHJ1Y3R1cmUiPjwvYT41LjMuMiBKYXZhPGEgaHJlZj0iIyoiPio8L2E+DQogICAgICAgICBUaHJlYWQgU3RydWN0dXJlDQogICAgICA8L2gzPg0KICAgICAgPHA+DQogICAgICAgICBBIHRocmVhZCBjb250cm9sIHN0cnVjdHVyZSBvZiBhIEphdmE8YSBocmVmPSIjKiI+KjwvYT4NCiAgICAgICAgIHRocmVhZCBpcyBkZWZpbmVkIGJ5IHRoZSA8Y29kZT5KVk1USVRocmVhZDwvY29kZT4gdHlwZSBhbmQNCiAgICAgICAgIGhvbGRzIG1vc3RseSBKVk1USSBpbmZvcm1hdGlvbiBzcGVjaWZpYyB0byB0aGF0IHRocmVhZCwgYXMNCiAgICAgICAgIHNob3duIGluIEZpZ3VyZSA0IGJlbG93Lg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPg0KICAgICAgICAgPGltZyBzcmM9ImltYWdlcy9KYXZhQXR0YWNoZWQuZ2lmIiBhbHQ9DQogICAgICAgICAiU3RydWN0dXJlIG9mIHRoZSBKYXZhKiBBdHRhY2hlZCB0aHJlYWQiPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPg0KICAgICAgICAgRmlndXJlIDQ6IEphdmE8YSBocmVmPSIjKiI+KjwvYT4gQXR0YWNoZWQgVGhyZWFkDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSBmb2xsb3dpbmcgdGFibGUgbGlzdHMgdGhlIGRhdGEgZmllbGRzIG1ha2luZyB1cCB0aGUNCiAgICAgICAgIHRocmVhZCBjb250cm9sIHN0cnVjdHVyZSBvZiBhIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gdGhyZWFkOg0KICAgICAgPC9wPg0KICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0iVGFibGVIZWFkaW5nIj4NCiAgICAgICAgICAgICAgIERhdGEgRmllbGQNCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlSGVhZGluZyI+DQogICAgICAgICAgICAgICBEZXNjcmlwdGlvbg0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgIDwvdHI+DQogICAgICAgICA8dHI+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT5KTklFbnYgKqA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmplbnY8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEpOSSBlbnZpcm9ubWVudCB2YXJpYWJsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBKYXZhPGENCiAgICAgICAgICAgICAgIGhyZWY9IiMqIj4qPC9hPiB0aHJlYWQuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmp0aHJlYWSgPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT50aHJlYWRfb2JqZWN0PC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBUaGUgb2JqZWN0IDxjb2RlPmp0aHJlYWQ8L2NvZGU+IGFzc29jaWF0ZWQgd2l0aA0KICAgICAgICAgICAgICAgPGNvZGU+aHl0aHJlYWRfdDwvY29kZT4uDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmh5Y29uZF90oDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+bW9uaXRvcl9jb25kaXRpb248L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIENvbmRpdGlvbmFsIHZhcmlhYmxlIHVzZWQgdG8gd2FpdC9ub3RpZnkgSmF2YTxhIGhyZWY9IA0KICAgICAgICAgICAgICAgIiMqIj4qPC9hPiBtb25pdG9ycy4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+anRocm93YWJsZaA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnN0b3BfZXhjZXB0aW9uPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBFeGNlcHRpb24gdG8gYmUgdGhyb3duIGluIGEgc3RvcHBlZCB0aHJlYWQuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmpsb25noDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+YmxvY2tlZF90aW1lPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBUaW1lIGR1cmF0aW9uIG9mIHRoZSB0aHJlYWQgYmxvY2tlZCBvbiBhIG1vbml0b3IsIGluDQogICAgICAgICAgICAgICBuYW5vc2Vjb25kcy4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+amxvbmegPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICA8Y29kZT53YWl0ZWRfdGltZTwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgVGltZSBkdXJhdGlvbiBvZiB0aGUgdGhyZWFkIHdhaXRpbmcgb24gYSBtb25pdG9yLCBpbg0KICAgICAgICAgICAgICAgbmFub3NlY29uZHMuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPkpWTVRJTG9jYWxTdG9yYWdloDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+anZtdGlfbG9jYWxfc3RvcmFnZTwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgSlZNVEkgbG9jYWwgc3RvcmFnZS4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+am9iamVjdKA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmNvbnRlbmRlZF9tb25pdG9yPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBNb25pdG9yIHRoYXQgdGhpcyB0aHJlYWQgaXMgYmxvY2tlZCBvbi4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+am9iamVjdKA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPndhaXRfbW9uaXRvcjwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgTW9uaXRvciB0aGF0IHRoaXMgdGhyZWFkIGlzIHdhaXRpbmcgb24uDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmpvYmplY3QgKqA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPm93bmVkX21vbml0b3JzPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBNb25pdG9ycyBvd25lZCBieSB0aGlzIHRocmVhZC4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+aW50oDwvY29kZT4gDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+b3duZWRfbW9uaXRvcnNfbm1iPC9jb2RlPiANCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICA8dGQgY2xhc3M9IlRhYmxlQ2VsbCI+DQogICAgICAgICAgICAgICBUaGUgY291bnRlciBmb3IgdGhlIG1vbml0b3JzIG93bmVkIGJ5IHRoZSB0aHJlYWQuDQogICAgICAgICAgICA8L3RkPg0KICAgICAgICAgPC90cj4NCiAgICAgICAgIDx0cj4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPmFwcl9wb29sX3QgKqA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnBvb2w8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIEFQUiBwb29sIGZvciB0aGlzIHN0cnVjdHVyZS4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgICAgPHRyPg0KICAgICAgICAgICAgPHRkIGNsYXNzPSJUYWJsZUNlbGwiPg0KICAgICAgICAgICAgICAgPGNvZGU+am9iamVjdKA8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIDxjb2RlPnRocmVhZF9yZWY8L2NvZGU+IA0KICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgIDx0ZCBjbGFzcz0iVGFibGVDZWxsIj4NCiAgICAgICAgICAgICAgIFdlYWsgcmVmZXJlbmNlIHRvIHRoZSBjb3JyZXNwb25kaW5nDQogICAgICAgICAgICAgICA8Y29kZT5qYXZhLmxhbmcuVGhyZWFkPC9jb2RlPiBpbnN0YW5jZS4NCiAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICA8L3RyPg0KICAgICAgPC90YWJsZT4NCiAgICAgIDxwPg0KICAgICAgICAgRm9yIGRldGFpbHMgb24gdGhyZWFkIGNvbnRyb2wgc3RydWN0dXJlcywgc2VlIHRoZQ0KICAgICAgICAgPGNvZGU+dGhyZWFkX3ByaXZhdGUuaDwvY29kZT4gaGVhZGVyIGZpbGUgc3VwcGxpZWQgd2l0aCB0aGUNCiAgICAgICAgIHNvdXJjZSBidW5kbGUuDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIGEgdGhyZWFkIGF0dGFjaGVkIHRvIGENCiAgICAgICAgIDxjb2RlPmphdmEubGFuZy5UaHJlYWQ8L2NvZGU+IG9iamVjdCBhbmQgZm9yIGEgc3RhbmRhbG9uZQ0KICAgICAgICAgKHVuYXR0YWNoZWQpIHRocmVhZCBhcmUgc2hvd24gaW4gRmlndXJlcyAzIGFuZCA0DQogICAgICAgICByZXNwZWN0aXZlbHkuDQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4NCiAgICAgICAgIDxhIGhyZWY9IiNUb3AiPkJhY2sgdG8gVG9wPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iVGhyZWFkX0dyb3VwIj48L2E+NS40IFRocmVhZCBHcm91cHMNCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSB0aHJlYWQgbWFuYWdlciBlbmFibGVzIGNvLWV4aXN0ZW5jZSBvZiBtdWx0aXBsZSBncm91cHMNCiAgICAgICAgIG9mIHRocmVhZHMsIGZvciBleGFtcGxlLCBncm91cHMgb2YgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPg0KICAgICAgICAgdGhyZWFkcyBhbmQgR0MgdGhyZWFkcyBub3QgdmlzaWJsZSBmb3IgSmF2YTxhIGhyZWY9DQogICAgICAgICAiIyoiPio8L2E+IGFwcGxpY2F0aW9ucy4gRWFjaCB0aHJlYWQgbWFpbnRhaW5lZCBieSB0aGUNCiAgICAgICAgIHRocmVhZCBtYW5hZ2VyIGJlbG9uZ3MgdG8gYSBzcGVjaWZpYyB0aHJlYWQgZ3JvdXAsIGFzIHNob3duDQogICAgICAgICBpbiBGaWd1cmUgNS4NCiAgICAgIDwvcD4NCiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPg0KICAgICAgICAgPGltZyBzcmM9ImltYWdlcy90aHJlYWRfZ3JvdXBzLmdpZiIgYWx0PQ0KICAgICAgICAgIlRocmVhZHMgZGlzdHJpYnV0ZWQgaW50byB0aHJlYWQgZ3JvdXBzLCBmb3IgZXhhbXBsZSBhIGdyb3VwIG9mIEphdmEqIHRocmVhZHMgYW5kIGEgZ3JvdXAgb2YgR0MgdGhyZWFkcyI+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+DQogICAgICAgICBGaWd1cmUgNTogVGhyZWFkIEdyb3Vwcw0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgdGhyZWFkIG1hbmFnZXIgcHJvdmlkZXMgYSBzZXQgb2YgZnVuY3Rpb25zIGZvciBpdGVyYXRpbmcNCiAgICAgICAgIG92ZXIgdGhlIGxpc3Qgb2YgdGhyZWFkcyB3aXRoaW4gYSBzcGVjaWZpYyBncm91cC4gQWxsDQogICAgICAgICB0aHJlYWRzIGFyZSBvcmdhbml6ZWQgaW4gYSBncm91cCBhcnJheSBhbmQgYSBzcGVjaWZpYw0KICAgICAgICAgc3lzdGVtLXdpZGUgbG9jayBpcyB1c2VkIHRvIHByZXZlbnQgY29uY3VycmVudCBtb2RpZmljYXRpb25zDQogICAgICAgICBvZiB0aGUgZ3JvdXBzIGFycmF5IGFuZCB0aGUgdGhyZWFkIGxpc3QgaW5zaWRlIHRoZSBncm91cC4NCiAgICAgICAgIFRoaXMgbG9jayBpcyBhY3F1aXJlZCBpbnRlcm5hbGx5IGR1cmluZyB0aHJlYWQgY3JlYXRpb24sDQogICAgICAgICBkZWxldGlvbiBhbmQgaXRlcmF0aW9uIG92ZXIgdGhlIHRocmVhZCBsaXN0Lg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+DQogICAgICAgICA8YSBocmVmPSIjVG9wIj5CYWNrIHRvIFRvcDwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxoMj4NCiAgICAgICAgIDxhIG5hbWU9IlN5bmNocm9uaXplciI+PC9hPjUuNSBTeW5jaHJvbml6ZXJzDQogICAgICA8L2gyPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgdGhyZWFkIG1hbmFnZXIgc3luY2hyb25pemVycyBhcmUgZnVuY3Rpb25hbCBtb2R1bGVzIHVzZWQNCiAgICAgICAgIGZvciB0aHJlYWQgc3luY2hyb25pemF0aW9uLiBDZXJ0YWluIHN5bmNocm9uaXplcnMgaGF2ZQ0KICAgICAgICAgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGFzc29jaWF0ZWQgd2l0aCB0aGVtLCBvdGhlcnMgY2FuDQogICAgICAgICBvbmx5IGRlbGVnYXRlIGZ1bmN0aW9uIGNhbGxzIHRvIHRoZSBhcHByb3ByaWF0ZQ0KICAgICAgICAgc3luY2hyb25pemVycyBwcm92aWRlZCBieSBBUFIuIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mDQogICAgICAgICBzeW5jaHJvbml6ZXJzIHdpdGhpbiB0aGUgdGhyZWFkIG1hbmFnZXIgaXMgYmFzZWQgb24gdHdvDQogICAgICAgICBmdW5kYW1lbnRhbCBwcmltaXRpdmVzOiB0aGUgY29uZGl0aW9uYWwgdmFyaWFibGUgYW5kIHRoZQ0KICAgICAgICAgbXV0ZXgsIGFzIHNob3duIGluIEZpZ3VyZSA2Lg0KICAgICAgPC9wPg0KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+DQogICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL1N5bmNocm9uaXplcl9tdXRleC5naWYiIGFsdD0NCiAgICAgICAgICJJbXBsZW1lbnRpbmcgdGhlIHRocmVhZCBzeW5jaHJvbml6ZXIgaW4gVE0iIGJvcmRlcj0iMCI+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+DQogICAgICAgICBGaWd1cmUgNjogQ29tcG9uZW50cyBvZiB0aGUgVE0gU3luY2hyb25pemVyoA0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgZWxlbWVudHMgaW4gdGhlIGZpZ3VyZSBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzoNCiAgICAgIDwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFRoZSBBUFIgY29uZGl0aW9uYWwgdmFyaWFibGUgYW5kIEFQUiBtdXRleCBhcmUgYmFzaWMNCiAgICAgICAgICAgIHByaW1pdGl2ZXMgcHJvdmlkZWQgYnkgdGhlIEFwYWNoZSBQb3J0YWJsZSBSdW50aW1lLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBUaGUgVE0gY29uZGl0aW9uYWwgdmFyaWFibGUgYW5kIFRNIG11dGV4IHdyYXAgYXBwcm9wcmlhdGUNCiAgICAgICAgICAgIEFQUiBwcmltaXRpdmVzIGJ5IGFkZGluZyB0aGWgPGNvZGU+d2FpdDwvY29kZT4NCiAgICAgICAgICAgIGludGVycnVwdGlvbiBzdXBwb3J0LiBUaGVzZSBzeW5jaHJvbml6ZXJzIGFsc28gZW5zdXJlDQogICAgICAgICAgICB0aGF0IGEgdGhyZWFkIGVudGVycyB0aGUgc2FmZSBzdXNwZW5zaW9uIG1vZGUgd2hlbiBpdCBpcw0KICAgICAgICAgICAgcHV0IGludG8gYaA8Y29kZT53YWl0PC9jb2RlPiBzdGF0ZSB1c2luZyB0aGUgY29uZGl0aW9uYWwNCiAgICAgICAgICAgIHZhcmlhYmxlIG9yIHdoZW4gdGhlIHRocmVhZCBpcyBibG9ja2VkIHdoaWxlIGFjcXVpcmluZyBhDQogICAgICAgICAgICBtdXRleC4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIDxhIGhyZWY9IiNUaGluX21vbml0b3JzIj50aGluIG1vbml0b3I8L2E+IGlzIGFuDQogICAgICAgICAgICBpbmZsYXRhYmxlIGxvY2sgY291cGxlZCB3aXRoIHRoZSBjb25kaXRpb24gdmFyaWFibGUuIFRoaXMNCiAgICAgICAgICAgIGNvbWJpbmF0aW9uIHNlcnZlcyBhcyBhIGJhc2UgZm9yIGJ1aWxkaW5nIEphdmE8YSBocmVmPQ0KICAgICAgICAgICAgIiMqIj4qPC9hPiBtb25pdG9ycy4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIHNlbWFwaG9yZSBpcyB0aGUgc2FtZSBhcyB0aGUgUE9TSVggc2VtYXBob3JlLCBhbmQNCiAgICAgICAgICAgIGFsc28gZW5hYmxlcyBzcGVjaWZ5aW5nIHRoZSBjb3VudCBsaW1pdC4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gbW9uaXRvciBpcyB0aGUgc2FtZSBhcw0KICAgICAgICAgICAgPGNvZGU+amF2YS5sYW5nLk9iamVjdDwvY29kZT4uDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFRoZSBKVk1USSByYXcgbW9uaXRvciBpcyB0aGUgbW9uaXRvciBkZWZpbmVkIGluIHRoZSBKVk1USQ0KICAgICAgICAgICAgc3BlY2lmaWNhdGlvbi4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIDxjb2RlPnBhcms8L2NvZGU+IGFuZCA8Y29kZT51bnBhcms8L2NvZGU+IGxvY2sNCiAgICAgICAgICAgIHN1cHBvcnQgcHJpbWl0aXZlcyBhcmUgdXNlZCBpbiB0aGUNCiAgICAgICAgICAgIDxjb2RlPmphdmEudXRpbC5jb25jdXJyZW50PC9jb2RlPiBwYWNrYWdlLg0KICAgICAgICAgDQogICAgICA8L3VsPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgYWJvdmUgaGllcmFyY2h5IGlzIG9wdGltaXplZCBmb3IgQVBSIGNvZGUgcmUtdXNlLiBPdGhlcg0KICAgICAgICAgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBUaHJlYWQgTWFuYWdlciBjb21wb25lbnQgYXJlIGFsc28NCiAgICAgICAgIHBvc3NpYmxlIGFuZCBjYW4gdXRpbGl6ZSBhIGRpZmZlcmVudCBzZXQgb2YgQVBSDQogICAgICAgICBzeW5jaHJvbml6ZXJzLg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9Im5vdGUiPg0KICAgICAgICAgTm90ZQ0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9Im5vdGV0ZXh0Ij4NCiAgICAgICAgIFRoZSB0aHJlYWQgbWFuYWdlciBkb2VzIG5vdCBleHBvc2UgdGhlIGludGVybmFsIHN0cnVjdHVyZXMNCiAgICAgICAgIG9mIHN5bmNocm9uaXplcnMgdG8gdGhlIGV4dGVybmFsIGNvbXBvbmVudHMuIEFsbA0KICAgICAgICAgc3luY2hyb25pemVycyBhcmUgcmVmZXJlbmNlZCBieSBtZWFucyBvZiBvcGFxdWUgaGFuZGxlcw0KICAgICAgICAgc2ltaWxhcmx5IHRvIHRocmVhZCBjb250cm9sIHN0cnVjdHVyZXMuDQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4NCiAgICAgICAgIDxhIGhyZWY9IiNUb3AiPkJhY2sgdG8gVG9wPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iTW9uaXRvcnMiPjwvYT41LjYgTW9uaXRvcnMNCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIHRocmVhZCBtYW5hZ2VyIGltcGxlbWVudHMgSmF2YTxhDQogICAgICAgICBocmVmPSIjKiI+KjwvYT4gbW9uaXRvcnMgaW4gYSBzcGVjaWZpYyB3YXkgdG8gYWRkcmVzcyB0aGUNCiAgICAgICAgIGNvbW1vbiBwcm9ibGVtIG9mIHNwYWNlIGNvbXN1bXB0aW9uLiBUaGUgRFJMIHRocmVhZCBtYW5hZ2VyDQogICAgICAgICBwcm92aWRlcyBoYXMgYSBzcGVjaWFsIHR5cGUgb2YgbW9uaXRvciwgPGVtPnRoaW4NCiAgICAgICAgIG1vbml0b3IsPC9lbT4gaG9sZGluZyB0aGUgbG9jayBvcHRpbWl6ZWQgZm9yIHNwYWNlDQogICAgICAgICBjb25zdW1wdGlvbiBhbmQgc2luZ2xlLXRocmVhZGVkIHVzYWdlLg0KICAgICAgPC9wPg0KICAgICAgPGgzPg0KICAgICAgICAgPGEgbmFtZT0iTW9uaXRvckluZmxhdGlvbiI+PC9hPjUuNi4xIEluZmxhdGlvbiB0ZWNobmlxdWUNCiAgICAgIDwvaDM+DQogICAgICA8cD4NCiAgICAgICAgIE1vbml0b3IgaW5mbGF0aW9uIGlzIGltcGxlbWVudGVkIHVzaW5nIGEgdGhpbi1mYXQgbG9jaw0KICAgICAgICAgdGVjaG5pcXVlIFs8YSBocmVmPSIjdGhpbl9sb2NrX3JlZiI+NjwvYT5dLCB3aGljaCB3b3JrcyBhcw0KICAgICAgICAgZm9sbG93czoNCiAgICAgIDwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIEluIHRoZSBhYnNlbmNlIG9mIHRocmVhZCBjb250ZW50aW9uLCBsb2NrIGRhdGEgYXJlIHN0b3JlZA0KICAgICAgICAgICAgaW4gYSBmZXcgYnl0ZXMsIHNvIHRoYXQgdGhlIGxvY2sgY2FuIGJlIGFsbG9jYXRlZA0KICAgICAgICAgICAgZGlyZWN0bHkgd2l0aGluIHRoZSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IG9iamVjdC4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgV2hlbmV2ZXIgY29udGVudGlvbiB0YWtlcyBwbGFjZSwgdGhlIGJ5dGVzIGFsbG9jYXRlZCBmb3INCiAgICAgICAgICAgIGxvY2sgZGF0YSBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZSBmYXQgbG9jaywgd2hpY2ggY2FuIGJlDQogICAgICAgICAgICBjb252ZW50aW9uYWwgbXV0ZXguDQogICAgICAgICANCiAgICAgIDwvdWw+DQogICAgICA8cD4NCiAgICAgICAgIERpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpbiBtb25pdG9ycyBhcmUgZnJlZSB0bw0KICAgICAgICAgY2hvb3NlIGFueSBzcGFjZSBjb21wYWN0aW9uIG9yIG90aGVyIG9wdGltaXphdGlvbiB0ZWNobmlxdWVzDQogICAgICAgICAob3Igbm9uZSBhdCBhbGwpLiBIb3dldmVyLCB0aGUgZ2VuZXJhbCByZWNvbW1lbmRhdGlvbiBpcyB0bw0KICAgICAgICAgdXNlIHRoaW4gbW9uaXRvcnMgd2hlbiBtZW1vcnkgbmVlZHMgdG8gYmUgc2F2ZWQgYW5kIGEgdGhyZWFkDQogICAgICAgICBjb250ZW50aW9uIGlzIG5vdCBleHBlY3RlZCB0byBiZSBoaWdoLiBJdCBpcyBhbHNvDQogICAgICAgICByZWNvbW1lbmRlZCB0aGF0IHRoZSBjb252ZW50aW9uYWwgbXV0ZXggYW5kIGNvbmRpdGlvbmFsDQogICAgICAgICB2YXJpYWJsZXMgYmUgdXNlZCB0byBhY2hpZXZlIHRoZSBiZXR0ZXIgc2NhbGFiaWxpdHkgaW4gY2FzZQ0KICAgICAgICAgb2YgaGlnaCBjb250ZW50aW9uLiBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IG1vbml0b3JzIGluIHRoZQ0KICAgICAgICAgdGhyZWFkIG1hbmFnZXIgYXJlIGJ1aWx0IG9uIHRvcCBvZiB0aGluIG1vbml0b3JzLiBUaGlzDQogICAgICAgICBlbmFibGVzIHRoZSB0aHJlYWQgbWFuYWdlciB0byBhbGxvY2F0ZSB0aGUgbG9jayBzdHJ1Y3R1cmUNCiAgICAgICAgIGZvciB0aGluIG1vbml0b3JzIGRpcmVjdGx5IGluIHRoZSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+DQogICAgICAgICBvYmplY3RzIGFuZCB0aHVzIG1ha2VzIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gbW9uaXRvcnMgc3BhY2UNCiAgICAgICAgIHVzYWdlIG1vcmUgZWZmaWNpZW50Lg0KICAgICAgPC9wPg0KICAgICAgPGgzPg0KICAgICAgICAgPGEgbmFtZT0iVGhpbl9tb25pdG9ycyI+PC9hPjUuNi4yIE1vbml0b3IgU3RydWN0dXJlDQogICAgICA8L2gzPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgdGhpbiBtb25pdG9yIGlzIGEgc3luY2hyb25pemVyIHByaW1pdGl2ZSB0aGF0IGltcGxlbWVudHMNCiAgICAgICAgIHRoZSBsb2NrIGNvbXByZXNzaW9uIHRlY2huaXF1ZSBhbmQgc2VydmVzIGFzIGEgYmFzZSBmb3INCiAgICAgICAgIGJ1aWxkaW5nIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gbW9uaXRvcnMgWzxhIGhyZWY9IA0KICAgICAgICAgIiN0aGluX2xvY2tfcmVmIj42PC9hPl0uIEluIG90aGVyIHdvcmRzLCB0aGUgdGhpbiBtb25pdG9yDQogICAgICAgICByZXNpZGVzIGluIHRoZSBuYXRpdmUgbGF5ZXIgb2YgdGhlIFRNIHN1YnN5c3RlbSBhbmQgaGFzIG5vDQogICAgICAgICBkYXRhIG9uIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gb2JqZWN0cy4gSmF2YTxhIGhyZWY9DQogICAgICAgICAiIyoiPio8L2E+IG1vbml0b3JzIGFyZSB0aWdodGx5IGNvdXBsZWQgd2l0aCBKYXZhPGEgaHJlZj0NCiAgICAgICAgICIjKiI+KjwvYT4gb2JqZWN0cyBhbmQgcmVzaWRlIG9uIHRoZSBoaWdoZXIgSmF2YTxhIGhyZWY9DQogICAgICAgICAiIyoiPio8L2E+IGxldmVsIG9mIHRoZSBUTSBzdWJzeXN0ZW0uDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSBjZW50cmFsIHBvaW50IG9mIHRoZSBzeW5jaHJvbml6ZXIgaXMgdGhlIDxlbT5sb2NrDQogICAgICAgICB3b3JkPC9lbT4sIHdoaWNoIGhvbGRzIHRoZSB0aGluIGxvY2sgdmFsdWUgb3IgYSByZWZlcmVuY2UgdG8NCiAgICAgICAgIHRoZSBmYXQgbG9jayBkZXBlbmRpbmcgb24gdGhlIGNvbnRlbnRpb24uDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIEluIHRoZSBhYnNlbmNlIG9mIGNvbnRlbnRpb24sIHRoZSBsb2NrIHR5cGUgaXMgemVybywgYW5kIHRoZQ0KICAgICAgICAgbG9jayB3b3JkIGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZToNCiAgICAgIDwvcD4NCiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPg0KICAgICAgICAgPGltZyBzcmM9ImltYWdlcy91bmluZmxhdGVkX2xvY2t3b3JkLmdpZiIgYWx0PQ0KICAgICAgICAgInVuaW5mbGF0ZWQgbG9hY2siIGJvcmRlcj0iMCI+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+DQogICAgICAgICBGaWd1cmUgNzogTG9jayBXb3JkIFN0cnVjdHVyZTogQ29udGVudGlvbiBCaXQgaXMgMA0KICAgICAgPC9wPg0KICAgICAgPHVsPg0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgQ29udGVudGlvbiBiaXQgOiAwIGluZGljYXRpbmcgdGhhdCBhYnNlbmNlIG9mIGNvbnRlbnRpb24NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhyZWFkIElEICgxNSBiaXRzKTogdGhlIElEIG9mIHRoZSBvd25pbmcgdGhyZWFkLCBvciAwIGlmDQogICAgICAgICAgICB0aGUgbG9jayBpcyBmcmVlDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFJlY3Vyc2lvbiBjb3VudDogdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBsb2NrIGhhcw0KICAgICAgICAgICAgYmVlbiBhY3F1aXJlZCBieSB0aGUgc2FtZSB0aHJlYWQgbWludXMgMQ0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBSZXNlcnZhdGlvbiBiaXQ6IHRoZSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgbG9jayBpcw0KICAgICAgICAgICAgcmVzZXJ2ZWQgYnkgYSB0aHJlYWQgWzxhIGhyZWY9IiNsb2NrX292ZXJoZWFkX3JlZiI+NzwvYT5dDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFJpZ2h0bW9zdCAxMCBiaXRzIHVudXNlZCBpbiBUTSBhbmQgcmVzZXJ2ZWQgZm9yIHN0b3JpbmcNCiAgICAgICAgICAgIHRoZSBoYXNoIGNvZGVzIG9mIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gb2JqZWN0cw0KICAgICAgICAgDQogICAgICA8L3VsPg0KICAgICAgPHA+DQogICAgICAgICBJbiB0aGUgcHJlc2VuY2Ugb2YgY29udGVudGlvbiwgdGhlIGNvbnRlbnRpb24gYml0IGlzIHNldCB0bw0KICAgICAgICAgMSwgYW5kIGEgdGhpbiBjb21wcmVzc2VkIGxvY2sgYmVjb21lcyBhIGZhdCBpbmZsYXRlZCBsb2NrDQogICAgICAgICB3aXRoIHRoZSBmb2xsb3dpbmcgbGF5b3V0Og0KICAgICAgPC9wPg0KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+DQogICAgICAgICA8aW1nIGFsdD0iaW5mbGF0ZWQgbG9jayIgYm9yZGVyPSIwIiBzcmM9IA0KICAgICAgICAgImltYWdlcy9pbmZsYXRlZF9sb2Nrd29yZC5naWYiPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPg0KICAgICAgICAgRmlndXJlIDg6IExvY2sgV29yZCBTdHJ1Y3R1cmU6IENvbnRlbnRpb24gQml0IGlzIDENCiAgICAgIDwvcD4NCiAgICAgIDx1bD4NCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIENvbnRlbnRpb24gYml0OiAxIGluZGljYXRpbmcgcHJlc2VuY2Ugb2YgY29udGVudGlvbg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBGYXQgTG9jayBJRCAoMjAgYml0cyk6IHRoZSBJRCBvZiB0aGUgY29ycmVzcG9uZGluZyBmYXQNCiAgICAgICAgICAgIGxvY2sNCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgUmVzZXJ2YXRpb24gYml0OiB0aGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGxvY2sgaXMNCiAgICAgICAgICAgIHJlc2VydmVkIGJ5IGEgdGhyZWFkIFs8YSBocmVmPSIjbG9ja19vdmVyaGVhZF9yZWYiPjc8L2E+XQ0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBSaWdodG1vc3QgMTAgYml0cyB1bnVzZWQgaW4gVE0gYW5kIHJlc2VydmVkIGZvciBzdG9yaW5nDQogICAgICAgICAgICB0aGUgaGFzaCBjb2RlcyBvZiBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IG9iamVjdHMNCiAgICAgICAgIA0KICAgICAgPC91bD4NCiAgICAgIDxwPg0KICAgICAgICAgVGhlIHRocmVhZCBtYW5hZ2VyIGhhcyBhIGdsb2JhbCBsb2NrIHRhYmxlIHRvIG1hcCBiZXR3ZWVuDQogICAgICAgICB0aGUgbG9jayBJRCBhbmQgdGhlIGFwcHJvcHJpYXRlIGZhdCBtb25pdG9yLCBhcyBmb2xsb3dzOg0KICAgICAgPC9wPg0KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+DQogICAgICAgICA8aW1nIHNyYz0iaW1hZ2VzL2luZmxhdGVkX3RoaW5fbW9uaXRvci5naWYiIGFsdD0NCiAgICAgICAgICJJbmZsYXRlZCB0aGluIG1vbml0b3IiIGJvcmRlcj0iMCI+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+DQogICAgICAgICBGaWd1cmUgOTogVGhpbiBhbmQgRmF0IE1vbml0b3IgUmVsYXRpb25zaGlwDQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4NCiAgICAgICAgIDxhIGhyZWY9IiNUb3AiPkJhY2sgdG8gVG9wPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgzPg0KICAgICAgICAgPGEgbmFtZT0iQWNxdWlyZU1vbml0b3IiPjwvYT41LjYuMyBBY3F1aXJpbmcgYSBNb25pdG9yDQogICAgICA8L2gzPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgcHJvY2VzcyBvZiBhY3F1aXJpbmcgYSBtb25pdG9yIHdpdGggdGhlIGhlbHAgb2YgdGhlDQogICAgICAgICA8Y29kZT5oeXRocmVhZF90aGluX21vbml0b3JfdHJ5X2VudGVyKCk8L2NvZGU+IGZ1bmN0aW9uIGlzDQogICAgICAgICBzaG93biBvbiB0aGUgZm9sbG93aW5nIGRpYWdyYW06DQogICAgICA8L3A+DQogICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4NCiAgICAgICAgIDxpbWcgc3JjPSJpbWFnZXMvTG9ja19yZXNlcnZhdGlvbi5naWYiIGFsdD0NCiAgICAgICAgICJMb2NrIHJlc2VydmF0aW9uIj4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJzcGVjaWFsIj4NCiAgICAgICAgIEZpZ3VyZSAxMDogQWNxdWlyaW5nIGEgVGhpbiBMb2NrDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIEZpcnN0LCB0aGUgdGhyZWFkIHVzZXMgdGhlIHJlc2VydmF0aW9uIGJpdCB0byBjaGVjayB3aGV0aGVyDQogICAgICAgICB0aGUgcmVxdWlyZWQgbG9jayBpcyBvd25lZCBieSB0aGlzIHRocmVhZC4gSWYgeWVzLCB0aGUNCiAgICAgICAgIHRocmVhZCBpbmNyZWFzZXMgdGhlIHJlY3Vyc2lvbiBjb3VudCBieSAxIGFuZCB0aGUgZnVuY3Rpb24NCiAgICAgICAgIGV4aXRzLiBUaGlzIG1ha2VzIHRoZSBmYXN0IHBhdGggb2YgdGhlIG1vbml0b3IgZW50ZXINCiAgICAgICAgIG9wZXJhdGlvbiBmb3IgYSBzaW5nbGUtdGhyZWFkZWQgYXBwbGljYXRpb24uIFRoZSBmYXN0IHBhdGgNCiAgICAgICAgIGludm9sdmVzIG9ubHkgYSBmZXcgYXNzZW1ibHkgaW5zdHJ1Y3Rpb25zIGFuZCBkb2VzIG5vDQogICAgICAgICBleHBlbnNpdmUgYXRvbWljIGNvbXBhcmUtYW5kLXN3YXAgKENBUykgb3BlcmF0aW9ucy4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgSWYgdGhlIGxvY2sgaXMgbm90IHlldCByZXNlcnZlZCwgdGhlbiBpdCBpcyBjaGVja2VkIGZvcg0KICAgICAgICAgYmVpbmcgb2NjdXBpZWQuIFRoZSBmcmVlIGxvY2sgaXMgc2V0IHRvIGJlIHJlc2VydmVkIGFuZA0KICAgICAgICAgYWNxdWlyZWQgc2ltdWx0YW5lb3VzbHkgd2l0aCBhIHNpbmdsZSBDQVMgb3BlcmF0aW9uLiBJZiB0aGUNCiAgICAgICAgIGxvY2sgYmVjb21lcyBidXN5IHRoZW4sIHRoZSBzeXN0ZW0gY2hlY2tzIHdoZXRoZXIgdGhlIGxvY2sNCiAgICAgICAgIGlzIGZhdC4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgVGhlIGxvY2sgdGFibGUgaG9sZHMgYSBtYXBwaW5nIGJldHdlZW4gdGhlIGZhdCBsb2NrIElEIGFuZA0KICAgICAgICAgdGhlIGFjdHVhbCBtb25pdG9yLiBGYXQgbW9uaXRvcnMgYXJlIGV4dHJhY3RlZCBmcm9tIHRoZSBsb2NrDQogICAgICAgICB0YWJsZSBhbmQgYWNxdWlyZWQuIElmIHRoZSBsb2NrIGlzIG5vdCBmYXQgYW5kIHJlc2VydmVkIGJ5DQogICAgICAgICBhbm90aGVyIHRocmVhZCwgdGhlbiB0aGlzIHRocmVhZCBzdXNwZW5kcyB0aGUgZXhlY3V0aW9uIG9mDQogICAgICAgICB0aGUgbG9jayBvd25lciB0aHJlYWQsIHJlbW92ZXMgdGhlIHJlc2VydmF0aW9uLCBhbmQgcmVzdW1lcw0KICAgICAgICAgdGhlIG93bmVyIHRocmVhZC4gQWZ0ZXIgdGhhdCwgdGhlIGxvY2sgYWNxdWlzaXRpb24gaXMgdHJpZWQNCiAgICAgICAgIGFnYWluLg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+DQogICAgICAgICA8YSBocmVmPSIjVG9wIj5CYWNrIHRvIFRvcDwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxoMT4NCiAgICAgICAgIDxhIG5hbWU9IlVzYWdlX1NjZW5hcmlvcyI+PC9hPjYuIFVzYWdlIHNjZW5hcmlvcw0KICAgICAgPC9oMT4NCiAgICAgIDxwPg0KICAgICAgICAgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHZhcmlvdXMgc2NlbmFyaW9zIG9mIHRocmVhZA0KICAgICAgICAgbWFuaXB1bGF0aW9uLg0KICAgICAgPC9wPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iVGhyZWFkX2xpZmVjeWNsZSI+PC9hPjYuMSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+DQogICAgICAgICB0aHJlYWQgbGlmZSBjeWNsZQ0KICAgICAgPC9oMj4NCiAgICAgIDxwPg0KICAgICAgICAgVGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gdGhyZWFkIGNyZWF0aW9uIHByb2NlZHVyZQ0KICAgICAgICAgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBrZXkgc3RhZ2VzOg0KICAgICAgPC9wPg0KICAgICAgPG9sPg0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgQWZ0ZXIgY3JlYXRpbmcgYSBuZXcgdGhyZWFkLCB0aGUgPGNvZGU+VGhyZWFkKCk8L2NvZGU+DQogICAgICAgICAgICBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgbmV3IG5hdGl2ZSB0aHJlYWQgYW5kIGluaXRpYWxpemVzDQogICAgICAgICAgICA8YSBocmVmPSIjVGhyZWFkX0NvbnRyb2xfU3RydWN0dXJlIj50aHJlYWQgY29udHJvbA0KICAgICAgICAgICAgc3RydWN0dXJlczwvYT4gPGNvZGU+SHlUaHJlYWQ8L2NvZGU+IGFuZA0KICAgICAgICAgICAgPGNvZGU+SlZNVElUaHJlYWQ8L2NvZGU+Lg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBUaGUgdXNlciBhcHBsaWNhdGlvbiB0aGVuIGNhbGxzIHRoZQ0KICAgICAgICAgICAgPGNvZGU+amF2YS5sYW5nLlRocmVhZC5zdGFydCgpPC9jb2RlPiBtZXRob2Qgb2Yga2VybmVsDQogICAgICAgICAgICBjbGFzc2VzIHdpdGhpbiB0aGUgVk0gY29yZSBjb21wb25lbnQuDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFRoZSA8Y29kZT5qYXZhLmxhbmcuVGhyZWFkLnN0YXJ0KCk8L2NvZGU+IG1ldGhvZA0KICAgICAgICAgICAgZGVsZWdhdGVzIHRoZSBjYWxsIHRvIHRoZSA8Y29kZT5qdGhyZWFkX2NyZWF0ZSgpPC9jb2RlPg0KICAgICAgICAgICAgZnVuY3Rpb24gb2YgdGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gbGF5ZXIgaW4gdGhlDQogICAgICAgICAgICB0aHJlYWQgbWFuYWdlciB2aWEgdGhlDQogICAgICAgICAgICA8Y29kZT5qYXZhLmxhbmcuVk1UaHJlYWRNYW5hZ2VyLnN0YXJ0KCk8L2NvZGU+IGZ1bmN0aW9uLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBUaGUgZnVuY3Rpb24gPGNvZGU+anRocmVhZF9jcmVhdGUoKTwvY29kZT4gY2FsbHMNCiAgICAgICAgICAgIDxjb2RlPmp0aHJlYWRfY3JlYXRlX3dpdGhfZnVuY3Rpb24oKTwvY29kZT4uDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFRoZSA8Y29kZT5qdGhyZWFkX2NyZWF0ZV93aXRoX2Z1bmN0aW9uKCk8L2NvZGU+IGZ1bmN0aW9uDQogICAgICAgICAgICBjYWxscyA8Y29kZT5oeXRocmVhZF9jcmVhdGUoKTwvY29kZT4gc3VwcGx5aW5nDQogICAgICAgICAgICA8Y29kZT53cmFwcGVyX3Byb2M8L2NvZGU+IGFzIGEgbmV3IHRocmVhZCBib2R5IHByb2NlZHVyZS4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIDxjb2RlPmh5dGhyZWFkX2NyZWF0ZSgpPC9jb2RlPiBmdW5jdGlvbiBkZWxlZ2F0ZXMgdGhlDQogICAgICAgICAgICBjYWxsIHRvIHRoZSA8Y29kZT5hcHJfdGhyZWFkX2NyZWF0ZSgpPC9jb2RlPiBmdW5jdGlvbiBvZg0KICAgICAgICAgICAgdGhlIEFQUiBwb3J0aW5nIGxheWVyLCB3aGljaCBkb2VzIHRoZSBhY3R1YWwgZm9yayBhbmQNCiAgICAgICAgICAgIGNyZWF0ZXMgYSBuZXcgdGhyZWFkLiBUaGUgPGNvZGU+d3JhcHBlcl9wcm9jPC9jb2RlPg0KICAgICAgICAgICAgYXJndW1lbnQgaXMgc3VwcGxpZWQgYXMgdGhlIHRocmVhZCBib2R5IGF0IHRoaXMgc3RlcC4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIG5ld2x5IGNyZWF0ZWQgdGhyZWFkIGJlZ2lucyB0byBleGVjdXRlDQogICAgICAgICAgICA8Y29kZT50aHJlYWRfc3RhcnRfcHJvYygpPC9jb2RlPiwgd2hpY2gsIGluIGl0cyB0dXJuLA0KICAgICAgICAgICAgcnVucyB0aGUgPGNvZGU+d3JhcHBlcl9wcm9jKCk8L2NvZGU+IGZ1bmN0aW9uLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBUaGUgZnVuY3Rpb24gPGNvZGU+d3JhcHBlcl9wcm9jKCk8L2NvZGU+IHBlcmZvcm1zIHRoZQ0KICAgICAgICAgICAgcmVxdWlyZWQgcmVnaXN0cmF0aW9uIG9mIHRoZSBuZXcgdGhyZWFkIHdpdGggb3RoZXINCiAgICAgICAgICAgIGNvbXBvbmVudHMgYnkgc2VuZGluZyB0aGUgPGNvZGU+dm1fYXR0YWNoPC9jb2RlPiBldmVudCB0bw0KICAgICAgICAgICAgVk0gY29yZSBhbmQgYnkgY2FsbGluZyB0aGUNCiAgICAgICAgICAgIDxjb2RlPmp2bXRpX3NlbmRfdGhyZWFkX3N0YXJ0X2VuZF9ldmVudCgpPC9jb2RlPg0KICAgICAgICAgICAgZnVuY3Rpb24sIHdoaWNoIHNlbmRzIHRoZQ0KICAgICAgICAgICAgPGNvZGU+SlZNVElfRVZFTlRfVEhSRUFEX1NUQVJUPC9jb2RlPiBldmVudC4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIDxjb2RlPndyYXBwZXJfcHJvYygpPC9jb2RlPiBjYWxscyB0aGUNCiAgICAgICAgICAgIDxjb2RlPmphdmEubGFuZy5UaGVhZC5ydW4oKTwvY29kZT4gbWV0aG9kLCB3aGljaCBtYWtlcw0KICAgICAgICAgICAgdGhlIHVzZXItZGVmaW5lZCBib2R5IG9mIHRoZSBuZXcgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPg0KICAgICAgICAgICAgdGhyZWFkLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBBZnRlciA8Y29kZT5UaHJlYWQucnVuKCk8L2NvZGU+IGhhcyBmaW5pc2hlZCwgdGhlIHRocmVhZA0KICAgICAgICAgICAgaXMgdW5yZWdpc3RlcmVkIHdpdGggb3RoZXIgY29tcG9uZW50cyBieSBjYWxsaW5nIHRoZQ0KICAgICAgICAgICAgPGNvZGU+anZtdGlfc2VuZF90aHJlYWRfc3RhcnRfZW5kX2V2ZW50KCk8L2NvZGU+DQogICAgICAgICAgICBmdW5jdGlvbiwgd2hpY2ggc2VuZHMgdGhlDQogICAgICAgICAgICA8Y29kZT5KVk1USV9FVkVOVF9USFJFQURfRU5EPC9jb2RlPiBhbmQgdGhlbiB0aGUNCiAgICAgICAgICAgIDxjb2RlPnZtX2RldGFjaDwvY29kZT4gZXZlbnRzLg0KICAgICAgICAgDQogICAgICA8L29sPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgZm9sbG93aW5nIGZpZ3VyZSBpbGx1c3RyYXRlcyB0aGUgZGV0YWlsZWQgc2VxdWVuY2Ugb2YNCiAgICAgICAgIHRocmVhZCBjcmVhdGlvbiBhbmQgY29tcGxldGlvbjoNCiAgICAgIDwvcD4NCiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPg0KICAgICAgICAgPGltZyBhbHQ9IlRocmVhZCBvcGVyYXRpb24gZnJvbSBjcmVhdGlvbiB0byBmaW5hbGl6YXRpb24iDQogICAgICAgICBib3JkZXI9IjAiIHNyYz0iaW1hZ2VzL1RocmVhZENyZWF0aW9uLmdpZiI+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+DQogICAgICAgICBGaWd1cmUgMTE6IEphdmE8YSBocmVmPSIjKiI+KjwvYT4gVGhyZWFkIExpZmUgQ3ljbGUNCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJub3RlIj4NCiAgICAgICAgIDxhIG5hbWU9IlRNLkVORCI+PC9hPk5vdGUNCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJub3RldGV4dCI+DQogICAgICAgICBUaGUgbmF0aXZlIHRocmVhZCBjb250cm9sIHN0cnVjdHVyZXMgKHN1Y2ggYXMsDQogICAgICAgICA8Y29kZT5IeVRocmVhZDwvY29kZT4gYW5kIDxjb2RlPkpWTVRJVGhyZWFkPC9jb2RlPikgYXJlIG5vdA0KICAgICAgICAgZGUtYWxsb2NhdGVkIG9uY2UgdGhlIG5ldyB0aHJlYWQgYm9keSBpcyBmaW5pc2hlZC4gVGhlDQogICAgICAgICB0aHJlYWQgbWFuYWdlciBjcmVhdGVzIGEgd2VhayByZWZlcmVuY2UgZm9yIGVhY2gNCiAgICAgICAgIDxjb2RlPmphdmEubGFuZy5UaHJlYWQ8L2NvZGU+IG9iamVjdCBzdXBwbHlpbmcgaXRzIGludGVybmFsDQogICAgICAgICByZWZlcmVuY2UgcXVldWUuIFRoZSBnYXJiYWdlIGNvbGxlY3RvciBwbGFjZXMgYSByZWZlcmVuY2UNCiAgICAgICAgIGludG8gdGhhdCBxdWV1ZSB3aGVuIGEgc3BlY2lmaWMNCiAgICAgICAgIDxjb2RlPmphdmEubGFuZy5UaHJlYWQ8L2NvZGU+IG9iamVjdCBpcyBnYXJiYWdlLWNvbGxlY3RlZC4NCiAgICAgICAgIEJlZm9yZSBhbGxvY2F0aW5nIG5hdGl2ZSByZXNvdXJjZXMgZm9yIG5ldyB0aHJlYWRzLCB0aGUNCiAgICAgICAgIHRocmVhZCBtYW5hZ2VyIHNlZWtzIGZvciB0aGUgd2VhayByZWZlcmVuY2VzIGluIHRoZSBxdWV1ZS4NCiAgICAgICAgIEluIGNhc2UgdGhlIHdlYWsgcmVmZXJlbmNlcyBxdWV1ZSBpcyBub3QgZW1wdHksIHRoZSB0aHJlYWQNCiAgICAgICAgIG1hbmFnZXIgZXh0cmFjdHMgdGhlIGZpcnN0IGF2YWlsYWJsZSByZWZlcmVuY2UgYW5kIHJlLXVzZXMNCiAgICAgICAgIGl0cyBuYXRpdmUgcmVzb3VyY2VzIGZvciB0aGUgbmV3bHkgY3JlYXRlZCB0aHJlYWQuDQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4NCiAgICAgICAgIDxhIGhyZWY9IiNUb3AiPkJhY2sgdG8gVG9wPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iVGhyZWFkX3N1c3BlbnNpb24iPjwvYT42LjIgVGhyZWFkIFN1c3BlbnNpb24NCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIE9uZSBvZiB0aGUgaW1wb3J0YW50IGZlYXR1cmVzIHRoYXQgdGhlIG5hdGl2ZSBsYXllciBhZGRzIGZvcg0KICAgICAgICAgQVBSIHRocmVhZGluZyBpcyA8aT5zYWZlIHN1c3BlbnNpb248L2k+LiBUaGlzIG1lY2hhbmlzbQ0KICAgICAgICAgZW5zdXJlcyB0aGF0IHRoZSBzdXNwZW5kZWQgdGhyZWFkIGNhbiBiZSBzYWZlbHkgZXhwbG9yZWQgYnkNCiAgICAgICAgIHRoZSBnYXJiYWdlIGNvbGxlY3RvciBkdXJpbmcgdGhlIGVudW1lcmF0aW9uIG9mIGxpdmUNCiAgICAgICAgIHJlZmVyZW5jZXMuIElmIGEgdGhyZWFkIGhvbGRzIHNvbWUgc3lzdGVtLWNyaXRpY2FsIGxvY2tzLA0KICAgICAgICAgc3VjaCBhcyB0aGUgbG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBuYXRpdmUgaGVhcCBtZW1vcnksDQogICAgICAgICBzYWZlIHN1c3BlbnNpb24gY2FuIGtlZXAgaXQgcnVubmluZyBldmVuIGR1cmluZyB0aGUNCiAgICAgICAgIGVudW1lcmF0aW9uLiBPdGhlcndpc2UsIGRvaW5nIHRoZSBzeXN0ZW0gb3INCiAgICAgICAgICZsZHF1bztoYXJkJnJkcXVvOyBjYWxsIHRvIHN1c3BlbmQgdGhlIHRocmVhZCBtYXkgcmVzdWx0IGluDQogICAgICAgICBkZWFkbG9ja3MgaW4gY2FzZSBzeXN0ZW0gbG9ja3MgYXJlIHJlcXVlc3RlZCBieSBvdGhlciBwYXJ0cw0KICAgICAgICAgb2YgdGhlIFZNLg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgYWxnb3JpdGhtIG9mIHNhZmUgc3VzcGVuc2lvbiBkZXNjcmliZXMgdGhlIHByb3RvY29sIG9mDQogICAgICAgICBjb21tdW5pY2F0aW9uIGJldHdlZW4gdHdvIHRocmVhZHMsIGZvciBleGFtcGxlLCB0aHJlYWQgVDENCiAgICAgICAgIGFuZCB0aHJlYWQgVDIsIHdoZXJlIGlzIFQxIHNhZmVseSBzdXNwZW5kcyB0aHJlYWQgVDIuIFRoZSBUMQ0KICAgICAgICAgdGhyZWFkIGNhbGxzIHRoZSA8Y29kZT5oeXRocmVhZF9zdXNwZW5kKFQyKTwvY29kZT4gZnVuY3Rpb24NCiAgICAgICAgIHRvIHN1c3BlbmQgdGhyZWFkIFQyLiBUaGUgcHJvY2VkdXJlIGdvZXMgaW4gdGhlIGZvbGxvd2luZw0KICAgICAgICAgc3RhZ2VzOg0KICAgICAgPC9wPg0KICAgICAgPG9sPg0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIDxjb2RlPmh5dGhyZWFkX3N1c3BlbmQoVDIpPC9jb2RlPiBmdW5jdGlvbiBpbmNyZW1lbnRzDQogICAgICAgICAgICB0aGUgZmxhZyBmb3IgdGhlIFQyIHRocmVhZCBpbmRpY2F0aW5nIGEgcmVxdWVzdCBmb3INCiAgICAgICAgICAgIHN1c3BlbnNpb24uIERlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aHJlYWQgVDIsDQogICAgICAgICAgICB0aGUgPGNvZGU+aHl0aHJlYWRfc3VzcGVuZChUMik8L2NvZGU+IGZ1bmN0aW9uIGFjdGl2YXRlcw0KICAgICAgICAgICAgb25lIG9mIHRoZSBmb2xsb3dpbmcgbWVjaGFuaXNtczogDQogICAgICAgICAgICA8b2w+DQogICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICBJZiB0aHJlYWQgVDIgaXMgY3VycmVudGx5IHJ1bm5pbmcgaW4gYSBzYWZlIGNvZGUNCiAgICAgICAgICAgICAgICAgIHJlZ2lvbiwgdGhlIDxjb2RlPmh5dGhyZWFkX3N1c3BlbmQoVDIpPC9jb2RlPiBjYWxsDQogICAgICAgICAgICAgICAgICBpbW1lZGlhdGVseSByZXR1cm5zLCBzZWUgRmlndXJlIDEyLg0KICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICBJZiB0aHJlYWQgVDIgaXMgY3VycmVudGx5IGluIGFuIHVuc2FmZSByZWdpb24sIHRoZW4NCiAgICAgICAgICAgICAgICAgIHRoZSA8Y29kZT5oeXRocmVhZF9zdXNwZW5kKCk8L2NvZGU+IGZ1bmN0aW9uIGdldHMNCiAgICAgICAgICAgICAgICAgIGJsb2NrZWQgdW50aWwgdGhyZWFkIFQyIHJlYWNoZXMgdGhlIGJlZ2lubmluZyBvZiBhDQogICAgICAgICAgICAgICAgICBzYWZlIHJlZ2lvbiBvciBhIHNhZmUgcG9pbnQuDQogICAgICAgICAgICAgICANCiAgICAgICAgICAgIDwvb2w+DQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFRocmVhZCBUMiBydW5zIHRvIHRoZSBlbmQgb2YgdGhlIHNhZmUgcmVnaW9uIGFuZCBnZXRzDQogICAgICAgICAgICBibG9ja2VkIHVudGlsIFQxIHJlc3VtZXMgaXQgYnkgY2FsbGluZw0KICAgICAgICAgICAgPGNvZGU+aHl0aHJlYWRfcmVzdW1lKFQyKTwvY29kZT4uDQogICAgICAgICANCiAgICAgIDwvb2w+DQogICAgICA8cD4NCiAgICAgICAgIFRoZSBUMiB0aHJlYWQgdW5kZXJnb2VzIHRoZSBmb2xsb3dpbmc6DQogICAgICA8L3A+DQogICAgICA8b2wgc3RhcnQ9IjEiIHR5cGU9IjEiPg0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhyZWFkIFQyIHBlcmlvZGljYWxseSBjYWxscyB0aGUNCiAgICAgICAgICAgIDxjb2RlPmh5dGhyZWFkX3NhZmVfcG9pbnQoKTwvY29kZT4gZnVuY3Rpb24gdG8gZGVzaWduYXRlDQogICAgICAgICAgICB0aGUgcG9pbnRzIG9mIHNhZmUgc3VzcGVuc2lvbi48YnI+DQogICAgICAgICAgICAgSWYgYSBzdXNwZW5zaW9uIHJlcXVlc3QgaGFzIGJlZW4gc2V0IHByZXZpb3VzbHkgZm9yIFQyLA0KICAgICAgICAgICAgdGhpcyBtZXRob2Qgbm90aWZpZXMgdGhlIFQxIHRocmVhZCBhbmQgdGhlbiB3YWl0cyB1bnRpbA0KICAgICAgICAgICAgVDEgcmVzdW1lcyBpdCBieSBjYWxsaW5nDQogICAgICAgICAgICA8Y29kZT5oeXRocmVhZF9yZXN1bWUoVDIpPC9jb2RlPi6gDQogICAgICAgICANCiAgICAgICAgIDxsaT4NCiAgICAgICAgICAgIFdoZW4gdGhlIFQyIHRocmVhZCBlbnRlcnMgYSBzYWZlIHJlZ2lvbiwgaXQgY2FsbHMgdGhlDQogICAgICAgICAgICA8Y29kZT5oeXRocmVhZF9zdXNwZW5kX2Vuc2FibGUoKTwvY29kZT4gZnVuY3Rpb24sIHdoaWNoDQogICAgICAgICAgICBkZWNyZW1lbnRzIHRoZSA8Y29kZT5zdXNwZW5kX2Rpc2FibGVfY291bnQ8L2NvZGU+IHN0YXRlDQogICAgICAgICAgICBmbGFnLjxicj4NCiAgICAgICAgICAgICBJZiBhIHN1c3BlbnNpb24gcmVxdWVzdCBoYXMgYmVlbiBwcmV2aW91c2x5IHNldCBmb3IgVDIsDQogICAgICAgICAgICBUMSBpcyBub3RpZmllZCBhYm91dCBUMiBoYXZpbmcgcmVhY2hlZCBhIHNhZmUgcmVnaW9uLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBXaGVuIFQyIGxlYXZlcyBhIHNhZmUgcmVnaW9uLCBpdCBjYWxscyB0aGUNCiAgICAgICAgICAgIDxjb2RlPmh5dGhyZWFkX3N1c3BlbmRfZGlzYWJsZSgpPC9jb2RlPiBmdW5jdGlvbi4gVGhpcw0KICAgICAgICAgICAgZnVuY3Rpb24gaW5jcmVtZW50cyB0aGUNCiAgICAgICAgICAgIDxjb2RlPnN1c3BlbmRfZGlzYWJsZV9jb3VudDwvY29kZT4gc3RhdGUgZmxhZy4NCiAgICAgICAgIA0KICAgICAgPC9vbD4NCiAgICAgIDxwPg0KICAgICAgICAgQSB0eXBpY2FsIGV4YW1wbGUgb2YgdGhlIHNhZmUgc3VzcGVuc2lvbiBzY2VuYXJpbyB0YWtlcw0KICAgICAgICAgcGxhY2Ugd2hlbiB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igc3VzcGVuZHMgYSBKYXZhPGEgaHJlZj0NCiAgICAgICAgICIjKiI+KjwvYT4gdGhyZWFkIHRvIGVudW1lcmF0ZSBsaXZlIHJlZmVyZW5jZXMuIEZpZ3VyZSAxMg0KICAgICAgICAgaWxsdXN0cmF0ZXMgdGhlIGNhc2Ugd2hlbiB0aGUgR0MgdXNlcyB0aGUgdGhyZWFkIG1hbmFnZXIgdG8NCiAgICAgICAgIHN1c3BlbmQgdGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gdGhyZWFkIHdoaWxlIGl0IGlzDQogICAgICAgICBydW5uaW5nIGluIHRoZSBzYWZlIGNvZGUgcmVnaW9uLg0KICAgICAgPC9wPg0KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+DQogICAgICAgICA8aW1nIGFsdD0iU2FmZSByZWdpb24gZHVyaW5nIHRocmVhZCBleGVjdXRpb24iIGJvcmRlcj0iMCINCiAgICAgICAgIHNyYz0iaW1hZ2VzL3NhZmVSZWdpb24uZ2lmIj4NCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJzcGVjaWFsIj4NCiAgICAgICAgIEZpZ3VyZSAxMjogU3VzcGVuc2lvbjogU2FmZSBSZWdpb24NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgVG8gdW5kZXJzdGFuZCB0aGUgc2FmZSB0aHJlYWQgc3VzcGVuc2lvbiBhbGdvcml0aG0gYmV0dGVyLA0KICAgICAgICAgdGhpbmsgb2YgZWFjaCB0aHJlYWQgYXMgaGF2aW5nIGEgbG9jayBhc3NvY2lhdGVkIHdpdGggaXQuDQogICAgICAgICBUaHJlYWQgVDIgcmVsZWFzZXMgdGhlIGxvY2sgd2hlbiBpdCBlbnRlcnMgYSBzYWZlIHJlZ2lvbiBhbmQNCiAgICAgICAgIGFjcXVpcmVzIHRoZSBsb2NrIHdoZW4gaXQgbGVhdmVzIHRoZSBzYWZlIHJlZ2lvbi4gVG8gc3VzcGVuZA0KICAgICAgICAgdGhyZWFkIFQyLCBhY3F1aXJlIHRoZSBsb2NrIGFzc29jaWF0ZWQgd2l0aCBpdC4gUmVzdW1pbmcNCiAgICAgICAgIHRocmVhZCBUMiBpcyBlcXVpdmFsZW50IHRvIHJlbGVhc2luZyB0aGUgbG9jayBhc3NvY2lhdGVkDQogICAgICAgICB3aXRoIGl0LiBBIHN0cmFpZ2h0LWZvcndhcmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNhZmUNCiAgICAgICAgIHN1c3BlbnNpb24gYWxnb3JpdGhtIHJlc2VydmVzIGEgc2luZ2xlLXRocmVhZCBvcHRpbWl6ZWQgbG9jaw0KICAgICAgICAgKHRoYXQgaXMsIHRoZSB0aGluIG1vbml0b3IpIGZvciBlYWNoIHRocmVhZCBhbmQgdXNlcyBpdCBmb3INCiAgICAgICAgIHN1c3BlbmRpbmcgYW5kIHJlc3VtaW5nIHRoYXQgdGhyZWFkLg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBBbm90aGVyIHNhZmUgc3VzcGVuc2lvbiBjYXNlIGlzIHdoZW4gYSBHQyB0aHJlYWQgaGl0cyBhDQogICAgICAgICBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IHRocmVhZCB3aGlsZSBpdCBpcyBpbiBhbiB1bnNhZmUNCiAgICAgICAgIHJlZ2lvbiBvZiBjb2RlLCBhcyBzaG93biBpbiBGaWd1cmUgMTMuDQogICAgICA8L3A+DQogICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4NCiAgICAgICAgIDxpbWcgYWx0PSJTYWZlIFBvaW50IGluIFRocmVhZCBFeGVjdXRpb24iIGJvcmRlcj0iMCIgc3JjPSANCiAgICAgICAgICJpbWFnZXMvc2FmZVBvaW50LmdpZiI+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+DQogICAgICAgICBGaWd1cmUgMTM6IFNhZmUgUG9pbnQNCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgQ29uc2lkZXIgdGhlIDxjb2RlPmh5dGhyZWFkX3NhZmVfcG9pbnQoKTwvY29kZT4gb3BlcmF0aW9uIGFzDQogICAgICAgICBhIHdhaXQgb3BlcmF0aW9uIHBlcmZvcm1lZCBvdmVyIHRoZSBtb25pdG9yIGFzc29jaWF0ZWQgd2l0aA0KICAgICAgICAgdGhlIHRocmVhZC4gSW4gdGhpcyBjYXNlLCB0aGUgPGNvZGU+aHl0aHJlYWRfcmVzdW1lKCk8L2NvZGU+DQogICAgICAgICBvcGVyYXRpb24gaXMgZXF1aXZhbGVudCB0byBub3RpZnlpbmcgdGhhdCBtb25pdG9yLg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+DQogICAgICAgICA8YSBocmVmPSIjVG9wIj5CYWNrIHRvIFRvcDwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxoMj4NCiAgICAgICAgIDxhIG5hbWU9IlN0b3AtdGhlLXdvcmxkX1N1c3BlbnNpb24iPjwvYT42LjMgU3RvcC10aGUtd29ybGQNCiAgICAgICAgIFRocmVhZCBTdXNwZW5zaW9uDQogICAgICA8L2gyPg0KICAgICAgPHA+DQogICAgICAgICBUaGUgc3RvcC10aGUtd29ybGQgdGhyZWFkIHN1c3BlbnNpb24gaGFwcGVucyB3aGVuIHRoZQ0KICAgICAgICAgZ2FyYmFnZSBjb2xsZWN0b3IgbmVlZHMgdG8gZW51bWVyYXRlIHRoZSBsaXZlIG9iamVjdA0KICAgICAgICAgcmVmZXJlbmNlcyBmb3IgYWxsIHRocmVhZHMgb2YgYSBnaXZlbiB0aHJlYWQgZ3JvdXAuIEZpZ3VyZQ0KICAgICAgICAgMTQgaWxsdXN0cmF0ZXMgdGhlIGNhc2Ugd2hlbiBvbmx5IGEgR0MgdGhyZWFkIGFuIGluZGVmaW5pdGUNCiAgICAgICAgIG51bWJlciBvZiBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IHRocmVhZHMgYXJlIHJ1bm5pbmcsIHNvDQogICAgICAgICB0aGF0IHRoZSBHQyBuZWVkcyB0byBzdXNwZW5kIGFsbCBKYXZhPGEgaHJlZj0iIyoiPio8L2E+DQogICAgICAgICB0aHJlYWRzLg0KICAgICAgPC9wPg0KICAgICAgPHAgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlciI+DQogICAgICAgICA8aW1nIGFsdD0ic3RvcC10aGUtd29ybGQgc3VzcGVuc2lvbiIgYm9yZGVyPSIwIiBzcmM9IA0KICAgICAgICAgImltYWdlcy9TdXNwZW5kQWxsLmdpZiI+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+DQogICAgICAgICBGaWd1cmUgMTQ6IFN1c3BlbmRpbmcgYSBHcm91cCBvZiBUaHJlYWRzDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIEZpcnN0LCB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IgY2FsbHMgdGhlIHRocmVhZCBtYW5hZ2VyDQogICAgICAgICBpbnRlcmZhY2UgZnVuY3Rpb24gPGNvZGU+aHl0aHJlYWRfc3VzcGVuZF9hbGwoKTwvY29kZT4gdG8NCiAgICAgICAgIHN1c3BlbmQgZXZlcnkgdGhyZWFkIHJ1bm5pbmcgd2l0aGluIHRoZSBnaXZlbiBncm91cCAoaW4gdGhpcw0KICAgICAgICAgc2NlbmFyaW8sIGFsbCBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IHRocmVhZHMpLiBUaGUgdGhyZWFkDQogICAgICAgICBtYW5hZ2VyIHRoZW4gcmV0dXJucyB0aGUgaXRlcmF0b3IgZm9yIHRyYXZlcnNpbmcgdGhlIGxpc3Qgb2YNCiAgICAgICAgIHN1c3BlbmRlZCB0aHJlYWRzLiBHQyB1c2VzIHRoaXMgaXRlcmF0b3IgdG8gYW5hbHl6ZSBlYWNoDQogICAgICAgICBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IHRocmVhZCB3aXRoIHJlc3BlY3QgdG8gbGl2ZQ0KICAgICAgICAgcmVmZXJlbmNlcyBhbmQgdGhlbiBkb2VzIGEgZ2FyYmFnZSBjb2xsZWN0aW9uLiBBZnRlciBpdCBpcw0KICAgICAgICAgY29tcGxldGUsIEdDIGluc3RydWN0cyB0aGUgdGhyZWFkIG1hbmFnZXIgdG8gcmVzdW1lIGFsbA0KICAgICAgICAgc3VzcGVuZGVkIHRocmVhZHMuDQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0iYmFja3RvdG9wIj4NCiAgICAgICAgIDxhIGhyZWY9IiNUb3AiPkJhY2sgdG8gVG9wPC9hPg0KICAgICAgPC9wPg0KICAgICAgPGgyPg0KICAgICAgICAgPGEgbmFtZT0iVGhyZWFkX2xvY2tpbmciPjwvYT42LjQgVGhyZWFkIExvY2tpbmcNCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIExvY2tpbmcgd2l0aCB0aGUgdGhyZWFkIG1hbmFnZXIgY2FuIGJlIGRvbmUgYnkgbWVhbnMgb2YgYQ0KICAgICAgICAgbXV0ZXggb3IgYSB0aGluIG1vbml0b3IuIFRoZSBtdXRleCBpcyBwcmVmZXJhYmxlIGluIGNhc2Ugb2YNCiAgICAgICAgIGhpZ2ggY29udGVudGlvbiwgd2hpbGUgdGhpbiBtb25pdG9ycyBhcmUgYmV0dGVyIG9wdGltaXplZA0KICAgICAgICAgZm9yIHNwYWNlLiBUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIGEgc2NlbmFyaW8gd2hlbiB0aGUgVk0NCiAgICAgICAgIGNvcmUgYXR0ZW1wdHMgdG8gbG9jayBhIHJlc291cmNlIGZyb20gbXVsdGlwbGUgdGhyZWFkcywgVDENCiAgICAgICAgIGFuZCBUMi4gVGhlIG1ham9yIHN0YWdlcyBvZiB0aGUgcHJvY2VzcyBvZiBsb2NraW5nIGFuZA0KICAgICAgICAgdW5sb2NraW5nIGFyZSBzaG93biBpbiBGaWd1cmUgMTUuDQogICAgICA8L3A+DQogICAgICA8cCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyIj4NCiAgICAgICAgIDxpbWcgYWx0PSJsb2NraW5nIGFuZCB1bmxvY2tpbmcgYSBtdXRleCIgYm9yZGVyPSIwIiBzcmM9IA0KICAgICAgICAgImltYWdlcy9sb2NraW5nLmdpZiI+DQogICAgICA8L3A+DQogICAgICA8cCBjbGFzcz0ic3BlY2lhbCI+DQogICAgICAgICBGaWd1cmUgMTU6IExvY2tpbmcgd2l0aCBhIE11dGV4DQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIEluaXRpYWxseSwgdGhlIG11dGV4IGlzIG5vdCBvY2N1cGllZCwgdGhhdCBpcywgdGhlIGxhYmVsDQogICAgICAgICBsb2NrIGlzIHNldCB0byB6ZXJvLiBUaHJlYWQgVDEgY2FsbHMgdGhlDQogICAgICAgICA8Y29kZT5oeW11dGV4X2xvY2soKTwvY29kZT4gZnVuY3Rpb24sIHdoaWNoIGluc3RydWN0cyB0aGUNCiAgICAgICAgIHRocmVhZCBtYW5hZ2VyIHRvIG1hcmsgdGhlIG11dGV4IGFzIGxvY2tlZCBieSBUMS4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgVDIgY2FuIGFsc28gY2FsbCB0aGUgPGNvZGU+aHltdXRleF9sb2NrKCk8L2NvZGU+IGZ1bmN0aW9uDQogICAgICAgICBsYXRlciwgYW5kIGlmIGl0IGhhcHBlbnMgdG8gY2FsbCBvbiBhIGxvY2sgYWxyZWFkeSBvY2N1cGllZCwNCiAgICAgICAgIHRoZW4gVDIgaXMgcGxhY2VkIGludG8gdGhlIGludGVybmFsIHdhaXRpbmcgcXVldWUgYXNzb2NpYXRlZA0KICAgICAgICAgd2l0aCB0aGUgbXV0ZXggYW5kIGdldHMgYmxvY2tlZCB1bnRpbCBUMSB1bmxvY2tzIHRoZSBtdXRleC4NCiAgICAgICAgIFRoZSBUMSB0aHJlYWQgY2FsbHMgPGNvZGU+aHltdXRleF91bmxvY2soKTwvY29kZT4gdG8gcmVsZWFzZQ0KICAgICAgICAgdGhlIG11dGV4LCB3aGljaCBlbmFibGVzIHRoZSBtdXRleCB0byBleHRyYWN0IFQyIGZyb20gdGhlDQogICAgICAgICBxdWV1ZSwgdHJhbnNmZXIgdGhlIGxvY2sgb3duZXJzaGlwIHRvIHRoaXMgdGhyZWFkLCBhbmQgdG8NCiAgICAgICAgIG5vdGlmeSBUMiB0aGF0IGl0IGNhbiB3YWtlIHVwLg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9ImJhY2t0b3RvcCI+DQogICAgICAgICA8YSBocmVmPSIjVG9wIj5CYWNrIHRvIFRvcDwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxoMj4NCiAgICAgICAgIDxhIG5hbWU9Ik1vbml0b3Jfc2NlbmFyaW9zIj48L2E+Ni41IE1vbml0b3IgZW50ZXIgYW5kIGV4aXQNCiAgICAgIDwvaDI+DQogICAgICA8cD4NCiAgICAgICAgIExvY2tpbmcgSmF2YTxhIGhyZWY9IiMqIj4qPC9hPiBtb25pdG9ycyBpbXBsaWVzIGludGVyYWN0aW9uDQogICAgICAgICBiZXR3ZWVuIHRoZSB0aHJlYWQgbWFuYWdlciBhbmQgdGhlIFZNIGNvcmUgc2luY2UgdGhlIHRocmVhZA0KICAgICAgICAgbWFuYWdlciByZXF1aXJlcyB0aGUgbWVtb3J5IGFkZHJlc3Mgd2l0aGluIHRoZSBKYXZhPGEgaHJlZj0gDQogICAgICAgICAiIyoiPio8L2E+IG9iamVjdCB3aGVyZSBpdCBrZWVwcyB0aGUgbG9jayBkYXRhLiBUaGUgcHJvY2Vzcw0KICAgICAgICAgb2YgbG9ja2luZyBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IG1vbml0b3JzIGlzIHNob3duIG9uDQogICAgICAgICBGaWd1cmUgMTYgYmVsb3cuDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIFdoZW4gYSBzeW5jaHJvbml6ZWQgc2VjdGlvbiBvY2N1cnMgaW4gSmF2YTxhIGhyZWY9IiMqIj4qPC9hPg0KICAgICAgICAgY29kZSwgdGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgdGFrZW46DQogICAgICA8L3A+DQogICAgICA8b2wgc3RhcnQ9IjEiIHR5cGU9IjEiPg0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBKSVQgY29tcGlsZXIgY2FsbHMgdGhlDQogICAgICAgICAgICA8Y29kZT5oeXRocmVhZF9tb25pdG9yX2VudGVyKCk8L2NvZGU+IGhlbHBlciBmdW5jdGlvbg0KICAgICAgICAgICAgcHJvdmlkZWQgYnkgdGhlIHRocmVhZCBtYW5hZ2VyLiBUaGUgaGVscGVyIGZ1bmN0aW9uDQogICAgICAgICAgICBwcm92aWRlcyBhIGNodW5rIG9mIGNvZGUgKHN0dWIpIHRoYXQgY2FuIGJlIGluLWxpbmVkIGJ5DQogICAgICAgICAgICB0aGUgSklUIGNvbXBpbGVyIGRpcmVjdGx5IGludG8gdGhlIGdlbmVyYXRlZCBhc3NlbWJseQ0KICAgICAgICAgICAgY29kZS4NCiAgICAgICAgIA0KICAgICAgICAgPGxpPg0KICAgICAgICAgICAgVGhlIDxjb2RlPmh5dGhyZWFkX21vbml0b3JfZW50ZXIoKTwvY29kZT4gaGVscGVyIGNhbGxzDQogICAgICAgICAgICB0aGUgPGNvZGU+dm1fb2JqZWN0X2dldF9sb2Nrd29yZF9hZGRyKCk8L2NvZGU+IGZ1bmN0aW9uDQogICAgICAgICAgICBvZiBWTSBjb3JlIGNvbXBvbmVudCB0byBmaW5kIG91dCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZg0KICAgICAgICAgICAgdGhlIGxvY2sgd29yZCB3aXRoaW4gdGhlIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gb2JqZWN0Lg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBUaGUgaGVscGVyIGNhbGxzIHRoZSA8Y29kZT50aGluX21vbml0b3JfdHJ5X2xvY2soKTwvY29kZT4NCiAgICAgICAgICAgIGZ1bmN0aW9uIGluIG9yZGVyIHRvIGFjcXVpcmUgdGhlIGxvY2sgYXNzb2NpYXRlZCB3aXRoIHRoZQ0KICAgICAgICAgICAgb2JqZWN0Lg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBJbiBjYXNlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLCB0aGUgaGVscGVyIHJldHVybnMuIFRoaXMgaXMNCiAgICAgICAgICAgIHRoZSBmYXN0IHBhdGggdG8gYWNxdWlyaW5nIHRoZSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+DQogICAgICAgICAgICBtb25pdG9yLiBJbiB0aGlzIHNjZW5hcmlvLCB0aGUgaGVscGVyIGRvZXMgbm90IG5lZWQgdG8NCiAgICAgICAgICAgIHN3aXRjaCBiZXR3ZWVuIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gYW5kIG5hdGl2ZSBmcmFtZXMNCiAgICAgICAgICAgIGFuZCB0aGUgPGNvZGU+dGhpbl9tb25pdG9yX3RyeV9lbnRlcigpPC9jb2RlPiBmdW5jdGlvbiBpcw0KICAgICAgICAgICAgY2FsbGVkIGRpcmVjdGx5IGludm9sdmluZyBubyBKYXZhPGEgaHJlZj0iIyoiPio8L2E+DQogICAgICAgICAgICBvYmplY3RzLjxicj4NCiAgICAgICAgICAgICBPdGhlcndpc2UsIHRoZSBoZWxwZXIgY29kZSBlbnRlcnMgYSBzbG93IHBhdGggYnkNCiAgICAgICAgICAgIHN3aXRjaGluZyBiZXR3ZWVuIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gYW5kIG5hdGl2ZSBjb2RlDQogICAgICAgICAgICAoc2VlIHRoZSBhY3Rpb25zIG9mIHB1c2hpbmcgYW4gTTJuRnJhbWUgYW5kIGNyZWF0aW5nIHRoZQ0KICAgICAgICAgICAgbG9jYWwgaGFuZGxlIGluIHRoZSBmaWd1cmUgYmVsb3cpLg0KICAgICAgICAgDQogICAgICAgICA8bGk+DQogICAgICAgICAgICBUaGUgaGVscGVyIGNhbGxzIHRoZSA8Y29kZT5qdGhyZWFkX21vbml0b3JfZW50ZXIoKTwvY29kZT4NCiAgICAgICAgICAgIGZ1bmN0aW9uLCB3aGljaCB3b3JrcyB3aXRoIHRoZSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+DQogICAgICAgICAgICBvYmplY3QgYXMgd2l0aCBKTkkgY29kZS4NCiAgICAgICAgIA0KICAgICAgPC9vbD4NCiAgICAgIDxwIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXIiPg0KICAgICAgICAgPGltZyBhbHQ9InNsb3cgYW5kIGZhc3QgcGF0aHMgdG8gbG9ja2luZyBhIEphdmEqIG1vbml0b3IiDQogICAgICAgICBzcmM9ImltYWdlcy9Nb25pdG9ycy5naWYiPg0KICAgICAgPC9wPg0KICAgICAgPHAgY2xhc3M9InNwZWNpYWwiPg0KICAgICAgICAgRmlndXJlIDE2OiBMb2NraW5nIEphdmE8YSBocmVmPSIjKiI+KjwvYT4gTW9uaXRvcnMNCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPg0KICAgICAgICAgPGEgaHJlZj0iI1RvcCI+QmFjayB0byBUb3A8L2E+DQogICAgICA8L3A+DQogICAgICA8aDE+DQogICAgICAgICA8YSBuYW1lPSJSZWZlcmVuY2VzIj48L2E+Ny4gUmVmZXJlbmNlcw0KICAgICAgPC9oMT4NCiAgICAgIDxwPg0KICAgICAgICAgVGhpcyBzZWN0aW9uIGxpc3RzIHRoZSByZXNvdXJjZXMgdXNlZCBpbiB0aGlzIGRvY3VtZW50IGFuZA0KICAgICAgICAgb3RoZXIgcmVsYXRlZCBkb2N1bWVudHMuDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIFs8YSBuYW1lPSJKMlNFU3BlYyI+PC9hPjFdIEoyU0UgMS41LjAgc3BlY2lmaWNhdGlvbiwgPGENCiAgICAgICAgIGhyZWY9Imh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjUuMC9kb2NzL2FwaS8iIHRhcmdldD0gDQogICAgICAgICAiX2JsYW5rIj5odHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9hcGkvPC9hPg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBbPGEgbmFtZT0iSlZNVElfcmVmIj48L2E+Ml0gSlZNIFRvb2wgSW50ZXJmYWNlDQogICAgICAgICBTcGVjaWZpY2F0aW9uLCA8YSBocmVmPSANCiAgICAgICAgICJodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9ndWlkZS9qdm10aS9qdm10aS5odG1sIg0KICAgICAgICAgdGFyZ2V0PQ0KICAgICAgICAgIl9ibGFuayI+aHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNS4wL2RvY3MvZ3VpZGUvanZtdGkvanZtdGkuaHRtbDwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgWzxhIG5hbWU9IkpOSV9yZWYiPjwvYT4zXSBKYXZhPGEgaHJlZj0iIyoiPio8L2E+IE5hdGl2ZQ0KICAgICAgICAgSW50ZXJmYWNlIFNwZWNpZmljYXRpb24sIDxhIGhyZWY9IA0KICAgICAgICAgImh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjUuMC9kb2NzL2d1aWRlL2puaS9zcGVjL2puaVRPQy5odG1sIg0KICAgICAgICAgIHRhcmdldD0NCiAgICAgICAgICJfYmxhbmsiPmh0dHA6Ly9qYXZhLnN1bi5jb20vajJzZS8xLjUuMC9kb2NzL2d1aWRlL2puaS9zcGVjL2puaVRPQy5odG1sPC9hPg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBbPGEgbmFtZT0iQVBSX3JlZiI+PC9hPjRdIEFwYWNoZSBQb3J0YWJsZSBSdW50aW1lIHByb2plY3QsDQogICAgICAgICA8YSBocmVmPSJodHRwOi8vYXByLmFwYWNoZS5vcmcvIiB0YXJnZXQ9DQogICAgICAgICAiX2JsYW5rIj5odHRwOi8vYXByLmFwYWNoZS5vcmcvPC9hPg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBbPGEgbmFtZT0icG9zaXhfcmVmIj48L2E+NV0gUE9TSVggc3RhbmRhcmQgaW4gdGhyZWFkaW5nLCA8YQ0KICAgICAgICAgaHJlZj0gDQogICAgICAgICAiaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2lkeC90aHJlYWRzLmh0bWwiDQogICAgICAgICAgdGFyZ2V0PQ0KICAgICAgICAgIl9ibGFuayI+aHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA5Njk1Mzk5L2lkeC90aHJlYWRzLmh0bWw8L2E+DQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIFs8YSBuYW1lPSJ0aGluX2xvY2tfcmVmIj48L2E+Nl0gRGF2aWQgRi4gQmFjb24sIFJhdmkgS29udXJ1LA0KICAgICAgICAgQ2hldCBNdXJ0aHksIE1hdXJpY2lvIFNlcnJhbm8sIDxlbT5UaGluIGxvY2tzOiBmZWF0aGVyd2VpZ2h0DQogICAgICAgICBzeW5jaHJvbml6YXRpb24gZm9yIEphdmE8L2VtPiwgPGEgaHJlZj0gDQogICAgICAgICAiaHR0cDovL3BvcnRhbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD0yNzc3MzQiIHRhcmdldD0NCiAgICAgICAgICJfYmxhbmsiPmh0dHA6Ly9wb3J0YWwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9Mjc3NzM0PC9hPg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICBbPGEgbmFtZT0ibG9ja19vdmVyaGVhZF9yZWYiPjwvYT43XSBLaXlva3VuaSBLYXdhY2hpeWEgQWtpcmENCiAgICAgICAgIEtvc2VraSBUYW1peWEgT25vZGVyYSwgPGVtPkxvY2sgUmVzZXJ2YXRpb246IEphdmEgTG9ja3MgQ2FuDQogICAgICAgICBNb3N0bHkgRG8gV2l0aG91dCBBdG9taWMgT3BlcmF0aW9uPC9lbT4sIDxhIGhyZWY9IA0KICAgICAgICAgImh0dHA6Ly9wb3J0YWwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9NTgyNDMzIiB0YXJnZXQ9DQogICAgICAgICAiX2JsYW5rIj5odHRwOi8vcG9ydGFsLmFjbS5vcmcvY2l0YXRpb24uY2ZtP2lkPTU4MjQzMzwvYT4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgWzxhIG5hbWU9Imh5dGhyZWFkX3JlZiI+PC9hPjhdIEh5VGhyZWFkIGRvY3VtZW50YXRpb24sIDxhDQogICAgICAgICBocmVmPSANCiAgICAgICAgICJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvdmlld3ZjL2luY3ViYXRvci9oYXJtb255L2VuaGFuY2VkL2NsYXNzbGliL3RydW5rL2RvYy92bV9kb2MvaHRtbC9ncm91cF9fVGhyZWFkLmh0bWwiDQogICAgICAgICAgdGFyZ2V0PQ0KICAgICAgICAgIl9ibGFuayI+aHR0cDovL3N2bi5hcGFjaGUub3JnL3ZpZXd2Yy9pbmN1YmF0b3IvaGFybW9ueS9lbmhhbmNlZC9jbGFzc2xpYi90cnVuay9kb2Mvdm1fZG9jL2h0bWwvZ3JvdXBfX1RocmVhZC5odG1sPC9hPg0KICAgICAgPC9wPg0KICAgICAgPHA+DQogICAgICAgICCgDQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIKANCiAgICAgIDwvcD4NCiAgICAgIDxwIGNsYXNzPSJiYWNrdG90b3AiPg0KICAgICAgICAgPGEgaHJlZj0iI3RvcCI+QmFjayB0byBUb3A8L2E+DQogICAgICA8L3A+DQogICAgICA8cD4NCiAgICAgICAgIChDKSBDb3B5cmlnaHQgMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAgICAgIDwvcD4NCiAgICAgIDxwPg0KICAgICAgICAgPGEgbmFtZT0iKiI+PC9hPiogT3RoZXIgYnJhbmRzIGFuZCBuYW1lcyBhcmUgdGhlIHByb3BlcnR5IG9mDQogICAgICAgICB0aGVpciByZXNwZWN0aXZlIG93bmVycy4NCiAgICAgIDwvcD4NCiAgIDwvYm9keT4NCjwvaHRtbD4NCg0K