PGh0bWw+DQoNCjxoZWFkPg0KPHRpdGxlPkNNU0lTIERlYnVnIFN1cHBvcnQ8L3RpdGxlPg0KPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUyIj4NCjxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTWljcm9zb2Z0IEZyb250UGFnZSA2LjAiPg0KPG1ldGEgbmFtZT0iUHJvZ0lkIiBjb250ZW50PSJGcm9udFBhZ2UuRWRpdG9yLkRvY3VtZW50Ij4NCjxzdHlsZT4NCjwhLS0NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCktlaWwgU29mdHdhcmUgQ0hNIFN0eWxlIFNoZWV0DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQpib2R5ICAgICAgICAgeyBjb2xvcjogIzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsgZm9udC1zaXplOiA3NSU7IGZvbnQtZmFtaWx5OiANCiAgICAgICAgICAgICAgIFZlcmRhbmEsIEFyaWFsLCAnU2FucyBTZXJpZicgfQ0KYTpsaW5rICAgICAgIHsgY29sb3I6ICMwMDAwRkY7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIH0NCmE6dmlzaXRlZCAgICB7IGNvbG9yOiAjMDAwMEZGOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZSB9DQphOmFjdGl2ZSAgICAgeyBjb2xvcjogI0ZGMDAwMDsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgfQ0KYTpob3ZlciAgICAgIHsgY29sb3I6ICNGRjAwMDA7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lIH0NCmgxICAgICAgICAgICB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hOyBmb250LXNpemU6IDE4cHQ7IGNvbG9yOiAjMDAwMDgwOyBmb250LXdlaWdodDogYm9sZDsgDQogICAgICAgICAgICAgICB0ZXh0LWFsaWduOiBDZW50ZXI7IG1hcmdpbi1yaWdodDogMyB9DQpoMiAgICAgICAgICAgeyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC1zaXplOiAxNHB0OyBjb2xvcjogIzAwMDA4MDsgZm9udC13ZWlnaHQ6IGJvbGQ7IA0KICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI0NDQ0NDQzsgbWFyZ2luLXRvcDogMjQ7IG1hcmdpbi1ib3R0b206IDM7IA0KICAgICAgICAgICAgICAgcGFkZGluZzogNiB9DQpoMyAgICAgICAgICAgeyBmb250LWZhbWlseTogVmVyZGFuYTsgZm9udC1zaXplOiAxMHB0OyBmb250LXdlaWdodDogYm9sZDsgYmFja2dyb3VuZC1jb2xvcjogDQogICAgICAgICAgICAgICAjQ0NDQ0NDOyBtYXJnaW4tdG9wOiAyNDsgbWFyZ2luLWJvdHRvbTogMzsgcGFkZGluZzogNiB9DQpwcmUgICAgICAgICAgeyBmb250LWZhbWlseTogQ291cmllciBOZXc7IGZvbnQtc2l6ZTogMTBwdDsgYmFja2dyb3VuZC1jb2xvcjogI0NDRkZDQzsgDQogICAgICAgICAgICAgICBtYXJnaW4tbGVmdDogMjQ7IG1hcmdpbi1yaWdodDogMjQgfQ0KdWwgICAgICAgICAgIHsgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmU7IG1hcmdpbi10b3A6IDZwdDsgbWFyZ2luLWJvdHRvbTogMCB9DQpvbCAgICAgICAgICAgeyBtYXJnaW4tdG9wOiA2cHQ7IG1hcmdpbi1ib3R0b206IDAgfQ0KbGkgICAgICAgICAgIHsgY2xlYXI6IGJvdGg7IG1hcmdpbi1ib3R0b206IDZwdCB9DQp0YWJsZSAgICAgICAgeyBmb250LXNpemU6IDEwMCU7IGJvcmRlci13aWR0aDogMDsgcGFkZGluZzogMCB9DQp0aCAgICAgICAgICAgeyBjb2xvcjogI0ZGRkZGRjsgYmFja2dyb3VuZC1jb2xvcjogIzAwMDA4MDsgdGV4dC1hbGlnbjogbGVmdDsgdmVydGljYWwtYWxpZ246IA0KICAgICAgICAgICAgICAgYm90dG9tOyBwYWRkaW5nLXJpZ2h0OiA2cHQgfQ0KdHIgICAgICAgICAgIHsgdGV4dC1hbGlnbjogbGVmdDsgdmVydGljYWwtYWxpZ246IHRvcCB9DQp0ZCAgICAgICAgICAgeyB0ZXh0LWFsaWduOiBsZWZ0OyB2ZXJ0aWNhbC1hbGlnbjogdG9wOyBwYWRkaW5nLXJpZ2h0OiA2cHQgfQ0KLlRvb2xUICAgICAgIHsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjODA4MDgwIH0NCi5UaW55VCAgICAgICB7IGZvbnQtc2l6ZTogOHB0OyB0ZXh0LWFsaWduOiBDZW50ZXIgfQ0KY29kZSAgICAgICAgIHsgY29sb3I6ICMwMDAwMDA7IGJhY2tncm91bmQtY29sb3I6ICNFMEUwRTA7IGZvbnQtZmFtaWx5OiAnQ291cmllciBOZXcnLCBDb3VyaWVyOyANCiAgICAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxMjAlOyBmb250LXN0eWxlOiBub3JtYWwgfQ0KLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KTm90ZXMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCnAubm90ZSAgICAgICB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjbGVhcjogYm90aDsgbWFyZ2luLWJvdHRvbTogM3B0OyBwYWRkaW5nLXRvcDogNnB0IH0NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkV4cGFuZGluZy9Db250cmFjdGluZyBEaXZpc2lvbnMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiNleHBhbmQgICAgICB7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgbWFyZ2luLWJvdHRvbTogM3B0IH0NCmltZy5leHBhbmQgICB7IGJvcmRlci1zdHlsZTogbm9uZTsgYm9yZGVyLXdpZHRoOiBtZWRpdW0gfQ0KZGl2LmV4cGFuZCAgIHsgZGlzcGxheTogbm9uZTsgbWFyZ2luLWxlZnQ6IDlwdDsgbWFyZ2luLXRvcDogMCB9DQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpXaGVyZSBMaXN0IFRhZ3MNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCnAud2ggICAgICAgICB7IGZvbnQtd2VpZ2h0OiBib2xkOyBjbGVhcjogYm90aDsgbWFyZ2luLXRvcDogNnB0OyBtYXJnaW4tYm90dG9tOiAzcHQgfQ0KdGFibGUud2ggICAgIHsgd2lkdGg6IDEwMCUgfQ0KdGQud2hJdGVtICAgIHsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgZm9udC1zdHlsZTogaXRhbGljOyBwYWRkaW5nLXJpZ2h0OiA2cHQ7IHBhZGRpbmctYm90dG9tOiANCiAgICAgICAgICAgICAgIDZwdCB9DQp0ZC53aERlc2MgICAgeyBwYWRkaW5nLWJvdHRvbTogNnB0IH0NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCktlaWwgVGFibGUgVGFncw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KdGFibGUua3QgICAgIHsgYm9yZGVyOiAxcHQgc29saWQgIzAwMDAwMCB9DQp0aC5rdCAgICAgICAgeyB3aGl0ZS1zcGFjZTogbm93cmFwOyBib3JkZXItYm90dG9tOiAxcHQgc29saWQgIzAwMDAwMDsgcGFkZGluZy1sZWZ0OiA2cHQ7IA0KICAgICAgICAgICAgICAgcGFkZGluZy1yaWdodDogNnB0OyBwYWRkaW5nLXRvcDogNHB0OyBwYWRkaW5nLWJvdHRvbTogNHB0IH0NCnRyLmt0ICAgICAgICB7ICB9DQp0ZC5rdCAgICAgICAgeyBjb2xvcjogIzAwMDAwMDsgYmFja2dyb3VuZC1jb2xvcjogI0UwRTBFMDsgYm9yZGVyLXRvcDogMXB0IHNvbGlkICNBMEEwQTA7IA0KICAgICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2cHQ7IHBhZGRpbmctcmlnaHQ6IDZwdDsgcGFkZGluZy10b3A6IDJwdDsgDQogICAgICAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMnB0IH0NCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCi0tPg0KDQo8L3N0eWxlPg0KPC9oZWFkPg0KDQo8Ym9keT4NCg0KPGgxPkNNU0lTIERlYnVnIFN1cHBvcnQ8L2gxPg0KDQo8aHI+DQoNCjxoMj5Db3J0ZXgtTTMgSVRNIERlYnVnIEFjY2VzczwvaDI+DQo8cD4NCiAgVGhlIENvcnRleC1NMyBpbmNvcnBvcmF0ZXMgdGhlIEluc3RydW1lbnRlZCBUcmFjZSBNYWNyb2NlbGwgKElUTSkgdGhhdCBwcm92aWRlcyB0b2dldGhlciB3aXRoIA0KICB0aGUgU2VyaWFsIFZpZXdlciBPdXRwdXQgdHJhY2UgY2FwYWJpbGl0aWVzIGZvciB0aGUgbWljcm9jb250cm9sbGVyIHN5c3RlbS4gVGhlIElUTSBoYXMgDQogIDMyIGNvbW11bmljYXRpb24gY2hhbm5lbHMgd2hpY2ggYXJlIGFibGUgdG8gdHJhbnNtaXQgMzIgLyAxNiAvIDggYml0IHZhbHVlczsgdHdvIElUTSANCiAgY29tbXVuaWNhdGlvbiBjaGFubmVscyBhcmUgdXNlZCBieSBDTVNJUyB0byBvdXRwdXQgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoNCjwvcD4NCjx1bD4NCgk8bGk+SVRNIENoYW5uZWwgMDogdXNlZCBmb3IgcHJpbnRmLXN0eWxlIG91dHB1dCB2aWEgdGhlIGRlYnVnIGludGVyZmFjZS48L2xpPg0KCTxsaT5JVE0gQ2hhbm5lbCAzMTogaXMgcmVzZXJ2ZWQgZm9yIFJUT1Mga2VybmVsIGF3YXJlbmVzcyBkZWJ1Z2dpbmcuPC9saT4NCjwvdWw+DQoNCjxoMj5EZWJ1ZyBJTiAvIE9VVCBmdW5jdGlvbnM8L2gyPg0KPHA+Q01TSVMgcHJvdmlkZXMgZm9sbG93aW5nIGRlYnVnIGZ1bmN0aW9uczo8L3A+DQo8dWw+DQoJPGxpPklUTV9TZW5kQ2hhciAodXNlcyBJVE0gY2hhbm5lbCAwKTwvbGk+DQoJPGxpPklUTV9SZWNlaXZlQ2hhciAodXNlcyBnbG9iYWwgdmFyaWFibGUpPC9saT4NCgk8bGk+SVRNX0NoZWNrQ2hhciAodXNlcyBnbG9iYWwgdmFyaWFibGUpPC9saT4NCjwvdWw+DQoNCjxoMz5JVE1fU2VuZENoYXI8L2gzPg0KPHA+DQogIDxzdHJvbmc+SVRNX1NlbmRDaGFyPC9zdHJvbmc+IGlzIHVzZWQgdG8gdHJhbnNtaXQgYSBjaGFyYWN0ZXIgb3ZlciBJVE0gY2hhbm5lbCAwIGZyb20gDQogIHRoZSBtaWNyb2NvbnRyb2xsZXIgc3lzdGVtIHRvIHRoZSBkZWJ1ZyBzeXN0ZW0uIDxicj4NCiAgT25seSBhIDggYml0IHZhbHVlIGlzIHRyYW5zbWl0dGVkLg0KPC9wPg0KPHByZT4NCnN0YXRpYyBfX0lOTElORSB1aW50MzJfdCBJVE1fU2VuZENoYXIgKHVpbnQzMl90IGNoKQ0Kew0KICAvKiBjaGVjayBpZiBkZWJ1Z2dlciBjb25uZWN0ZWQgYW5kIElUTSBjaGFubmVsIGVuYWJsZWQgZm9yIHRyYWNpbmcgKi8NCiAgaWYgKChDb3JlRGVidWctPkRFTUNSICYgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQSkgICZhbXA7JmFtcDsNCiAgICAgIChJVE0tJmd0O1RDUiAmIElUTV9UQ1JfSVRNRU5BKSAgICAgICAgICAgICAgICAgICZhbXA7JmFtcDsNCiAgICAgIChJVE0tJmd0O1RFUiAmICgxVUwgJmx0OyZsdDsgMCkpICApIA0KICB7DQogICAgd2hpbGUgKElUTS0mZ3Q7UE9SVFswXS51MzIgPT0gMCk7DQogICAgSVRNLSZndDtQT1JUWzBdLnU4ID0gKHVpbnQ4X3QpY2g7DQogIH0gIA0KICByZXR1cm4gKGNoKTsNCn08L3ByZT4NCg0KPGgzPklUTV9SZWNlaXZlQ2hhcjwvaDM+DQo8cD4NCiAgSVRNIGNvbW11bmljYXRpb24gY2hhbm5lbCBpcyBvbmx5IGNhcGFibGUgZm9yIE9VVCBkaXJlY3Rpb24uIEZvciBJTiBkaXJlY3Rpb24NCiAgYSBnbG9iZWwgdmFyaWFibGUgaXMgdXNlZC4gQSBzaW1wbGUgbWVjaGFuc2ltIGRldGVjdHMgaWYgYSBjaGFyYWN0ZXIgaXMgcmVjZWl2ZWQuDQogIFRoZSBwcm9qZWN0IHRvIHRlc3QgbmVlZCB0byBiZSBidWlsZCB3aXRoIGRlYnVnIGluZm9ybWF0aW9uLg0KPC9wPg0KDQo8cD4NCiAgVGhlIGdsb2JhbGUgdmFyaWFibGUgPHN0cm9uZz5JVE1fUnhCdWZmZXI8L3N0cm9uZz4gaXMgdXNlZCB0byB0cmFuc21pdCBhIDggYml0IHZhbHVlIGZyb20gZGVidWcgc3lzdGVtDQogIHRvIG1pY3JvY29udHJvbGxlciBzeXN0ZW0uIDxzdHJvbmc+SVRNX1J4QnVmZmVyPC9zdHJvbmc+IGlzIDMyIGJpdCB3aWRlIHRvIGVuc2h1cmUgYSBwcm9wZXIgaGFuZHNoYWtlLg0KPC9wPg0KPHByZT4NCmV4dGVybiB2b2xhdGlsZSBpbnQgSVRNX1J4QnVmZmVyOyAgICAgICAgICAgICAgICAgICAgLyogdmFyaWFibGUgdG8gcmVjZWl2ZSBjaGFyYWN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KPC9wcmU+DQo8cD4NCiAgQSBkZWRpY2F0ZWQgYml0IHBhdHRlcm4gaXMgdXNlZCB0byBkZXRlcm1pbiBpZiA8c3Ryb25nPklUTV9SeEJ1ZmZlcjwvc3Ryb25nPiBpcyBlbXB0eQ0KICBvciBjb250YWlucyBhIHZhbGlkIHZhbHVlLg0KPC9wPg0KPHByZT4NCiNkZWZpbmUgICAgICAgICAgICAgSVRNX1JYQlVGRkVSX0VNUFRZICAgIDB4NUFBNTVBQTUgLyogdmFsdWUgaWRlbnRpZnlpbmcgSVRNX1J4QnVmZmVyIGlzIHJlYWR5IGZvciBuZXh0IGNoYXJhY3RlciAqLw0KPC9wcmU+DQo8cD4NCiAgPHN0cm9uZz5JVE1fUmVjZWl2ZUNoYXI8L3N0cm9uZz4gaXMgdXNlZCB0byByZWNlaXZlIGEgOCBiaXQgdmFsdWUgZnJvbSB0aGUgZGVidWcgc3lzdGVtLiBUaGUgZnVuY3Rpb24gaXMgbm9uYmxvY2tpbmcuDQogIEl0IHJldHVybnMgdGhlIHJlY2VpdmVkIGNoYXJhY3RlciBvciAnLTEnIGlmIG5vIGNoYXJhY3RlciB3YXMgYXZhaWxhYmxlLg0KPC9wPg0KPHByZT4NCnN0YXRpYyBfX0lOTElORSBpbnQgSVRNX1JlY2VpdmVDaGFyICh2b2lkKSB7DQogIGludCBjaCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlICovDQoNCiAgaWYgKElUTV9SeEJ1ZmZlciAhPSBJVE1fUlhCVUZGRVJfRU1QVFkpIHsNCiAgICBjaCA9IElUTV9SeEJ1ZmZlcjsNCiAgICBJVE1fUnhCdWZmZXIgPSBJVE1fUlhCVUZGRVJfRU1QVFk7ICAgICAgIC8qIHJlYWR5IGZvciBuZXh0IGNoYXJhY3RlciAqLw0KICB9DQogIA0KICByZXR1cm4gKGNoKTsgDQp9DQo8L3ByZT4NCg0KPGgzPklUTV9DaGVja0NoYXI8L2gzPg0KPHA+DQogIDxzdHJvbmc+SVRNX0NoZWNrQ2hhcjwvc3Ryb25nPiBpcyB1c2VkIHRvIGNoZWNrIGlmIGEgY2hhcmFjdGVyIGlzIHJlY2VpdmVkLg0KPC9wPg0KPHByZT4NCnN0YXRpYyBfX0lOTElORSBpbnQgSVRNX0NoZWNrQ2hhciAodm9pZCkgew0KDQogIGlmIChJVE1fUnhCdWZmZXIgPT0gSVRNX1JYQlVGRkVSX0VNUFRZKSB7DQogICAgcmV0dXJuICgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBjaGFyYWN0ZXIgYXZhaWxhYmxlICovDQogIH0gZWxzZSB7DQogICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICBjaGFyYWN0ZXIgYXZhaWxhYmxlICovDQogIH0NCn08L3ByZT4NCg0KDQo8aDI+SVRNIERlYnVnIFN1cHBvcnQgaW4gdVZpc2lvbjwvaDI+DQo8cD4NCiAgdVZpc2lvbiB1c2VzIGluIGEgZGVidWcgc2Vzc2lvbiB0aGUgPHN0cm9uZz5EZWJ1ZyAocHJpbnRmKSBWaWV3ZXI8L3N0cm9uZz4gd2luZG93IHRvIA0KICBkaXNwbGF5IHRoZSBkZWJ1ZyBkYXRhLg0KPC9wPg0KPHA+RGlyZWN0aW9uIG1pY3JvY29udHJvbGxlciBzeXN0ZW0gLSZndDsgdVZpc2lvbjo8L3A+DQo8dWw+DQogIDxsaT4NCiAgICBDaGFyYWN0ZXJzIHJlY2VpdmVkIHZpYSBJVE0gY29tbXVuaWNhdGlvbiBjaGFubmVsIDAgYXJlIHdyaXR0ZW4gaW4gYSBwcmludGYgc3R5bGUNCiAgICB0byA8c3Ryb25nPkRlYnVnIChwcmludGYpIFZpZXdlcjwvc3Ryb25nPiB3aW5kb3cuDQogIDwvbGk+DQo8L3VsPg0KDQo8cD5EaXJlY3Rpb24gdVZpc2lvbiAtJmd0OyBtaWNyb2NvbnRyb2xsZXIgc3lzdGVtOjwvcD4NCjx1bD4NCiAgPGxpPkNoZWNrIGlmIDxzdHJvbmc+SVRNX1J4QnVmZmVyPC9zdHJvbmc+IHZhcmlhYmxlIGlzIGF2YWlsYWJsZSAob25seSBwZXJmb3JtZWQgb25jZSkuPC9saT4NCiAgPGxpPlJlYWQgY2hhcmFjdGVyIGZyb20gPHN0cm9uZz5EZWJ1ZyAocHJpbnRmKSBWaWV3ZXI8L3N0cm9uZz4gd2luZG93LjwvbGk+DQogIDxsaT5JZiA8c3Ryb25nPklUTV9SeEJ1ZmZlcjwvc3Ryb25nPiBlbXB0eSB3cml0ZSBjaGFyYWN0ZXIgdG8gPHN0cm9uZz5JVE1fUnhCdWZmZXI8L3N0cm9uZz4uPC9saT4NCjwvdWw+DQoNCjxwIGNsYXNzPSJOb3RlIj5Ob3RlPC9wPg0KPHVsPg0KICA8bGk+PHA+Q3VycmVudCBzb2x1dGlvbiBkb2VzIG5vdCB1c2UgYSBidWZmZXIgbWFjaGFuaXNtIGZvciB0cmFzbWl0dGluZyB0aGUgY2hhcmFjdGVycy48L3A+DQogIDwvbGk+DQo8L3VsPg0KDQo8aDI+UlRYIEtlcm5lbCBhd2FyZW5lc3MgaW4gdVZpc2lvbjwvaDI+DQo8cD4NCiAgdVZpc2lvbiAvIFJUWCBhcmUgdXNpbmcgYSBzaW1wbGUgYW5kIGVmZmljaWVudCBzb2x1dGlvbiBmb3IgUlRYIEtlcm5lbCBhd2FyZW5lc3MuDQogIE5vIGZvcm1hdCBvdmVyaGVhZCBpcyBuZWNlc3NhcnkuPGJyPg0KICB1VnNpb24gZGVidWdnZXIgZGVjb2RlcyB0aGUgUlRYIGV2ZW50cyB2aWEgdGhlIDMyIC8gMTYgLyA4IGJpdCBJVE0gd3JpdGUgYWNjZXNzDQogIHRvIElUTSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgMzEuDQo8L3A+DQoNCjxwPkZvbGxvd2luZyBSVFggZXZlbnRzIGFyZSB0cmFjZWQ6PC9wPg0KPHVsPg0KICA8bGk+VGFzayBDcmVhdGUgLyBEZWxldGUgZXZlbnQNCiAgICA8b2w+DQogICAgICA8bGk+MzIgYml0IGFjY2Vzcy4gVGFzayBzdGFydCBhZGRyZXNzIGlzIHRyYW5zbWl0dGVkPC9saT4NCiAgICAgIDxsaT4xNiBiaXQgYWNjZXNzLiBUYXNrIElEIGFuZCBDcmVhdGUvRGVsZXRlIGZsYWcgYXJlIHRyYW5zbWl0dGVkPGJyPg0KICAgICAgICAgIEhpZ2ggYnl0ZSBob2xkcyBDcmVhdGUvRGVsZXRlIGZsYWcsIExvdyBieXRlIGhvbGRzIFRBU0sgSUQuDQogICAgICA8L2xpPg0KICAgIDwvb2w+DQogIDwvbGk+DQogIDxsaT5UYXNrIHN3aXRjaCBldmVudA0KICAgIDxvbD4NCiAgICAgIDxsaT44IGJpdCBhY2Nlc3MuIFRhc2sgSUQgb2YgY3VycmVudCB0YXNrIGlzIHRyYW5zbWl0dGVkPC9saT4NCiAgICA8L29sPg0KICA8L2xpPg0KPC91bD4NCg0KPHAgY2xhc3M9Ik5vdGUiPk5vdGU8L3A+DQo8dWw+DQogIDxsaT48cD5PdGhlciBSVE9TIGluZm9ybWF0aW9uIGNvdWxkIGJlIHJldHJpZXZlZCB2aWEgbWVtb3J5IHJlYWQgYWNjZXNzIGluIGEgcG9sbGluZyBtb2RlIG1hbm5lci48L3A+DQogIDwvbGk+DQo8L3VsPg0KDQoNCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIGxhbmc9IkVOLUdCIj4mbmJzcDs8L3NwYW4+PC9wPg0KDQo8aHI+DQoNCjxwIGNsYXNzPSJUaW55VCI+Q29weXJpZ2h0IKkgS0VJTCAtIEFuIEFSTSBDb21wYW55Ljxicj4NCkFsbCByaWdodHMgcmVzZXJ2ZWQuPGJyPg0KVmlzaXQgb3VyIHdlYiBzaXRlIGF0IDxhIGhyZWY9Imh0dHA6Ly93d3cua2VpbC5jb20iPnd3dy5rZWlsLmNvbTwvYT4uDQo8L3A+DQoNCjwvYm9keT4NCg0KPC9odG1sPg==