VGhpcyBmaWxlIGxpc3RzIHBlb3BsZSB3aG8gaGF2ZSBjb250cmlidXRlZCB0byBsaWJwY2FwOgoKVGhlIGN1cnJlbnQgbWFpbnRhaW5lcnM6CglCaWxsIEZlbm5lcgkJCTxmZW5uZXJAcmVzZWFyY2guYXR0LmNvbT4KCUZ1bHZpbyBSaXNzbwkJCTxyaXNzb0Bwb2xpdG8uaXQ+CglHdXkgSGFycmlzCSAJCTxndXlAYWx1bS5taXQuZWR1PgoJSGFubmVzIEdyZWRsZXIJCQk8aGFubmVzQGp1bmlwZXIubmV0PgoJSnVuLWljaGlybyBpdG9qdW4gSGFnaW5vCTxpdG9qdW5AaWlqbGFiLm5ldD4KCU1pY2hhZWwgUmljaGFyZHNvbgkgCTxtY3JAc2FuZGVsbWFuLm90dGF3YS5vbi5jYT4KCkFkZGl0aW9uYWwgcGVvcGxlIHdobyBoYXZlIGNvbnRyaWJ1dGVkIHBhdGNoZXM6CgoJQWxhbiBCYXdkZW4JCQk8QWxhbkBMQ1MuTUlULkVEVT4KCUFsZXhleSBLdXpuZXRzb3YJCTxrdXpuZXRAbXMyLmluci5hYy5ydT4KCUFsYmVydCBDaGluCQkJPGNoaW5hQHRoZXdyaXR0ZW53b3JkLmNvbT4KCUFuZHJldyBCcm93bgkJCTxhdGF0YXRAYXRhdGRvdC5uZXQ+CglBbnR0aSBLYW50ZWUJCQk8cG9va2FAbmV0YnNkLm9yZz4KCUFya2FkaXVzeiBNaXNraWV3aWN6CQk8bWlzaWVrQHBsZC5vcmcucGw+CglBcm1hbmRvIEwuIENhcm8gSnIuCQk8YWNhcm9AbWFpbC5lZWNpcy51ZGVsLmVkdT4KCUFzc2FyIFdlc3Rlcmx1bmQJIAk8YXNzYXJAc2ljcy5zZT4KCUJyaWFuIEdpbnNiYWNoCQkJPGdpbnNiYWNoQGNyYXkuY29tPgoJQ2hhcmxlcyBNLiBIYW5udW0JCTxteWNyb2Z0QG5ldGJzZC5vcmc+CglDaHJpcyBHLiBEZW1ldHJpb3UJCTxjZ2RAbmV0YnNkLm9yZz4KCUNocmlzIExpZ2h0Zm9vdAkJCTxjd3JsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCUNocmlzIFBlcHBlcgkJCTxwZXBwZXJAbWFpbC5yZXBwZXAuY29tPgoJRGFuaWVsZSBPcmxhbmRpCQkJPGRhbmllbGVAb3JsYW5kaS5jb20+CglEYXJyZW4gUmVlZAkJCTxkYXJyZW5yQHJlZWQud2F0dGxlLmlkLmF1PgoJRGF2aWQgS2FlbGJsaW5nCQkJPGRya0BzZ2kuY29tPgoJRGF2aWQgWW91bmcJCQk8ZHlvdW5nQG9qY3RlY2guY29tPgoJRGVhbiBHYXVkZXQJCQk8ZGVhbkBhcmN0aWMub3JnPgoJRG9uIEVicmlnaHQJCQk8RG9uLkVicmlnaHRAY29tcHV3YXJlLmNvbT4gCglEdWcgU29uZwkJCTxkdWdzb25nQG1vbmtleS5vcmc+CglFcmljIEFuZGVyc29uCQkJPGFuZGVyc2VAaHBsLmhwLmNvbT4KICAgICAgICBFcmlrIGRlIENhc3RybyBMb3BvICAgICAgICAgICAgIDxlcmlrLmRlLmNhc3Ryby5sb3BvQHNlbnNvcnluZXR3b3Jrcy5jb20+CglGbG9yZW50IERyb3VpbgkJCTxGbG9yZW50LkRyb3VpbkBhbGNhdGVsLWx1Y2VudC5mcj4KCUZyYW56IFNjaGFlZmVyCQkJPHNjaGFlZmVyQG1vbmQuYXQ+CglHaWFubHVjYSBWYXJlbm5pCQk8dmFyZW5uaUBuZXRncm91cC1zZXJ2LnBvbGl0by5pdD4KCUdpbGJlcnQgSG95ZWsJCQk8Z2lsX2hveWVrQGhvdG1haWwuY29tPgoJR2lzbGUgVmFuZW0JCQk8Z2l2YUBiZ25ldHQubm8+CglHcmFlbWUgSGV3c29uCQkJPGdoZXdzb25AY2l4LmNvbXB1bGluay5jby51az4KCUdyZWcgU3RhcmsJCQk8Z3NzdGFya0BtaXQuZWR1PgoJR3JlZyBUcm94ZWwJCQk8Z2R0QGlyLmJibi5jb20+CglHdWlsbGF1bWUgUGVsYXQJCQk8ZW5keW1pb25fQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KCUh5dW5nIFNpayBZb29uCQkJPGhzeW5Aa3IuaWJtLmNvbT4KCUlnb3IgS2hyaXN0b3Bob3JvdgkJPGlnb3JAYXRkb3Qub3JnPgoJSmFuLVBoaWxpcCBWZWxkZXJzCQk8anB2QHZlbGRlcnNqZXMubmV0PgoJSmFzb24gUi4gVGhvcnBlCQkJPHRob3JwZWpAbmV0YnNkLm9yZz4KCUphdmllciBBY2hpcmljYQkJCTxhY2hpcmljYUB0dGQubmV0PgoJSmVhbiBUb3VycmlsaGVzCQkJPGp0QGhwbC5ocC5jb20+CglKZWZmZXJzb24gT2dhdGEJCQk8am9nYXRhQG5vZGMubm9hYS5nb3Y+CglKZXNwZXIgUGV0ZXJzb24JCQk8amVzcGVyQGVuZGFjZS5jb20+CglKb2huIEJhbmtpZXIJCQk8amJhbmtpZXJAcmFpbmZpbml0eS5jb20+CglKb24gTGluZGdyZW4JCQk8am9ubEB5dWJ5dWIubmV0PgoJSnVlcmdlbiBTY2hvZW53YWVsZGVyCQk8c2Nob2Vud0BpYnIuY3MudHUtYnMuZGU+CglKdW5nLXVrIEtpbQkJCTxqa2ltQEZyZWVCU0Qub3JnPgoJS2F6dXNoaSBTdWd5bwkJCTxzdWd5b0BwYi5qcC5uZWMuY29tPgoJS2xhdXMgS2xlaW4JCQk8a2xlaW5rQG5ldGJzZC5vcmc+CglLb3J5biBHcmFudAkJCTxrb3J5bkBlbmRhY2UuY29tPgoJS3J6eXN6dG9mIEhhbGFzYQkJPGtoY0BwbS53YXcucGw+CglMb3JlbnpvIENhdmFsbGFybwkJPHN1bGxpdmFuQHNpa3VyZXp6YS5vcmc+CglMb3JpcyBEZWdpb2FubmkJCQk8bG9yaXNAbmV0Z3JvdXAtc2Vydi5wb2xpdG8uaXQ+CglMb3ZlIEj2cm5xdWlzdC3Fc3RyYW5kCQk8bGhhQHN0YWNrZW4ua3RoLnNlPgoJTWFjaWVqIFcuIFJvenlja2kJCTxtYWNyb0BkczIucGcuZ2RhLnBsPgoJTWFyY3VzIEZlbGlwZSBQZXJlaXJhCQk8bWFyY3VzQHRhc2suY29tLmJyPgoJTWFyayBDLiBCcm93bgkJCTxtYnJvd25AaHAuY29tPgoJTWFyayBQaXp6b2xhdG8JCQk8TGlzdC10Y3BkdW1wLXdvcmtlcnNAc3Vic2NyaXB0aW9ucy5waXp6b2xhdG8ubmV0PgoJTWFydGluIEh1c2VtYW5uCQkJPG1hcnRpbkBuZXRic2Qub3JnPgoJTWF0dGhldyBMdWNraWUJCQk8bWpsQGx1Y2tpZS5vcmcubno+CglNYXggTGFpZXIJCQk8bWF4QGxvdmUycGFydHkubmV0PgoJTWlrZSBLZXJzaGF3CQkJPGRyYWdvcm5Aa2lzbWV0d2lyZWxlc3MubmV0PgoJTWlrZSBXaWFjZWsJCQk8bWlrZUBpcm9vdC5uZXQ+CglNb25yb2UgV2lsbGlhbXMJCQk8bW9ucm9lQHBvYm94LmNvbT4KCU5pY29sYXMgRGFkZQkJCTxuZGFkZUBuc2QuZHluZG5zLm9yZz4KCU9jdGF2aWFuIENlcm5hCQkJPHRhdnlAeWxhYnMuY29tPgoJT2xhZiBLaXJjaAkJCTxva2lyQGNhbGRlcmEuZGU+CglPbGxpZSBXaWxkCQkJPGFhd0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CglPbm5vIHZhbiBkZXIgTGluZGVuCQk8b25ub0BzaW1wbGV4Lm5sPgoJUGF0cmljayBNYXJpZQkJCTxteWNyb2Z0QHZpcmdhcmlhLm9yZz4KCVBhdWwgTXVuZHQJCQk8bGV0aGFsQGxpbnV4LXNoLm9yZz4KCVBhdmVsIEthbmtvdnNreQkJCTxrYW5AZGNpdC5jej4KCVBhd2VsIFBva3J5d2thCQkJPHB1YmxpY3BwQGdtYWlsLmNvbT4KCVBldGVyIEZhbGVzCQkJPHBldGVyQGZhbGVzLWxvcmVuei5uZXQ+CglQZXRlciBKZXJlbXkJCQk8cGV0ZXIuamVyZW15QGFsY2F0ZWwuY29tLmF1PgoJUGhpbCBXb29kCQkJPGNwd0BsYW5sLmdvdj4KCVJhZmFsIE1hc3prb3dza2kJCTxyem1AaWNtLmVkdS5wbD4KCQkJCQk8cmNiLWlzaXNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgoJUmljayBKb25lcwkJCTxyYWpAY3VwLmhwLmNvbT4KCVNjb3R0IEJhcnJvbgkJCTxzYjEyNTQ5OUBvaGlvdS5lZHU+CglTY290dCBHaWZmb3JkCQkJPHNnaWZmb3JkQHRpci5jb20+CglTZWJhc3RpYW4gS3JhaG1lcgkJPGtyYWhtZXJAY3MudW5pLXBvdHNkYW0uZGU+CglTaGF1biBDbG93ZXMJCQk8ZGVsaXVzQHByb2dzb2MudXRzLmVkdS5hdT4KCVNvbG9tb24gUGVhY2h5CQkJPHBpenphQHNoYWZ0bmV0Lm9yZz4KCVN0ZWZhbiBIdWRzb24JCQk8aHVkc29uQG1iYXkubmV0PgoJU3RlcGhlbiBEb25uZWxseQkJPHN0ZXBoZW5AZW5kYWNlLmNvbT4KCVRha2FzaGkgWWFtYW1vdG8JCTx5YW10QG13ZC5iaWdsb2JlLm5lLmpwPgogICAgICAgIFRhbmFrYSBTaGluLXlhICAgICAgICAgICAgICAgICAgPHpzdGFuYWthQGFyY2hlci5saXZlZG9vci5jb20+CglUb255IExpCQkJCTx0bGlAcHJvY2tldC5jb20+CglUb3JzdGVuIExhbmRzY2hvZmYJIAk8dG9yc3RlbkBkZWJpYW4ub3JnPgoJVW5zIExpZGVyCQkJPHVuc2xpZGVyQG1pcmFuZGEub3JnPgoJVXdlIEdpcmxpY2gJCQk8VXdlLkdpcmxpY2hAcGhpbG9zeXMuZGU+CglYaWFuamllIFpoYW5nCQkJPHh6aGFuZ0BjdXAuaHAuY29tPgoJWWVuIFllbiBMaW0KCVlvYW5uIFZhbmRvb3JzZWxhZXJlCQk8eW9hbm5AcHJlbHVkZS1pZHMub3JnPgoKVGhlIG9yaWdpbmFsIExCTCBjcmV3OgoJU3RldmUgTWNDYW5uZQoJQ3JhaWcgTGVyZXMKCVZhbiBKYWNvYnNvbgo=