PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIj4KPGh0bWw+Cgk8aGVhZD4KCQk8dGl0bGU+Qm9vc3Q6IG1lbV9mbi5ocHAgZG9jdW1lbnRhdGlvbjwvdGl0bGU+CgkJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Cgk8L2hlYWQ+Cgk8Ym9keSBiZ2NvbG9yPSJ3aGl0ZSIgc3R5bGU9Ik1BUkdJTi1MRUZUOiA1JTsgTUFSR0lOLVJJR0hUOiA1JSI+CgkJPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgoJCQk8dHI+CgkJCQk8dGQgd2lkdGg9IjI3NyI+PEEgaHJlZj0iLi4vLi4vaW5kZXguaHRtIj4gPGltZyBzcmM9Ii4uLy4uL2Jvb3N0LnBuZyIgYWx0PSJib29zdC5wbmcgKDY4OTcgYnl0ZXMpIiB3aWR0aD0iMjc3IiBoZWlnaHQ9Ijg2IiBib3JkZXI9IjAiPjwvQT4KCQkJCTwvdGQ+CgkJCQk8dGQgYWxpZ249ImNlbnRlciI+CgkJCQkJPGgxPm1lbV9mbi5ocHA8L2gxPgoJCQkJPC90ZD4KCQkJPC90cj4KCQkJPHRyPgoJCQkJPHRkIGNvbHNwYW49IjIiIGhlaWdodD0iNjQiPiZuYnNwOzwvdGQ+CgkJCTwvdHI+CgkJPC90YWJsZT4KCQk8aDI+Q29udGVudHM8L2gyPgoJCTxoMyBzdHlsZT0iTUFSR0lOLUxFRlQ6IDIwcHQiPjxhIGhyZWY9IiNQdXJwb3NlIj5QdXJwb3NlPC9hPjwvaDM+CgkJPGgzIHN0eWxlPSJNQVJHSU4tTEVGVDogMjBwdCI+PGEgaHJlZj0iI0ZBUSI+RnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnM8L2E+PC9oMz4KCQk8aDQgc3R5bGU9Ik1BUkdJTi1MRUZUOiA0MHB0Ij48YSBocmVmPSIjUTEiPkNhbiA8Yj5tZW1fZm48L2I+IGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgCgkJCQlzdGFuZGFyZCA8Yj5zdGQ6Om1lbV9mdW5bX3JlZl08L2I+IGFkYXB0b3JzPzwvYT48L2g0PgoJCTxoNCBzdHlsZT0iTUFSR0lOLUxFRlQ6IDQwcHQiPjxhIGhyZWY9IiNRMiI+U2hvdWxkIEkgcmVwbGFjZSBldmVyeSBvY2N1cmVuY2Ugb2YgPGI+c3RkOjptZW1fZnVuW19yZWZdPC9iPgoJCQkJd2l0aCA8Yj5tZW1fZm48L2I+IGluIG15IGV4aXN0aW5nIGNvZGU/PC9hPjwvaDQ+CgkJPGg0IHN0eWxlPSJNQVJHSU4tTEVGVDogNDBwdCI+PGEgaHJlZj0iI1EzIj5Eb2VzIDxiPm1lbV9mbjwvYj4gd29yayB3aXRoIENPTSBtZXRob2RzPzwvYT48L2g0PgoJCTxoNCBzdHlsZT0iTUFSR0lOLUxFRlQ6IDQwcHQiPjxhIGhyZWY9IiNRNCI+V2h5IGlzbid0IEJPT1NUX01FTV9GTl9FTkFCTEVfU1REQ0FMTCAKCQkJCWRlZmluZWQgYXV0b21hdGljYWxseT88L2E+PC9oND4KCQk8aDMgc3R5bGU9Ik1BUkdJTi1MRUZUOiAyMHB0Ij48YSBocmVmPSIjSW50ZXJmYWNlIj5JbnRlcmZhY2U8L2E+PC9oMz4KCQk8aDQgc3R5bGU9Ik1BUkdJTi1MRUZUOiA0MHB0Ij48YSBocmVmPSIjU3lub3BzaXMiPlN5bm9wc2lzPC9hPjwvaDQ+CgkJPGg0IHN0eWxlPSJNQVJHSU4tTEVGVDogNDBwdCI+PGEgaHJlZj0iI0NvbW1vblJlcXVpcmVtZW50cyI+Q29tbW9uIHJlcXVpcmVtZW50czwvYT48L2g0PgoJCTxoNCBzdHlsZT0iTUFSR0lOLUxFRlQ6IDQwcHQiPjxhIGhyZWY9IiNnZXRfcG9pbnRlciI+Z2V0X3BvaW50ZXI8L2E+PC9oND4KCQk8aDQgc3R5bGU9Ik1BUkdJTi1MRUZUOiA0MHB0Ij48YSBocmVmPSIjbWVtX2ZuIj5tZW1fZm48L2E+PC9oND4KCQk8aDMgc3R5bGU9Ik1BUkdJTi1MRUZUOiAyMHB0Ij48YSBocmVmPSIjSW1wbGVtZW50YXRpb24iPkltcGxlbWVudGF0aW9uPC9hPjwvaDM+CgkJPGg0IHN0eWxlPSJNQVJHSU4tTEVGVDogNDBwdCI+PGEgaHJlZj0iI0ZpbGVzIj5GaWxlczwvYT48L2g0PgoJCTxoNCBzdHlsZT0iTUFSR0lOLUxFRlQ6IDQwcHQiPjxhIGhyZWY9IiNEZXBlbmRlbmNpZXMiPkRlcGVuZGVuY2llczwvYT48L2g0PgoJCTxoNCBzdHlsZT0iTUFSR0lOLUxFRlQ6IDQwcHQiPjxhIGhyZWY9IiNOdW1iZXJPZkFyZ3VtZW50cyI+TnVtYmVyIG9mIEFyZ3VtZW50czwvYT48L2g0PgoJCTxoNCBzdHlsZT0iTUFSR0lOLUxFRlQ6IDQwcHQiPjxhIGhyZWY9IiNzdGRjYWxsIj4iX19zdGRjYWxsIiwgIl9fY2RlY2wiIGFuZCAKCQkJCSJfX2Zhc3RjYWxsIiBTdXBwb3J0PC9hPjwvaDQ+CgkJPGgzIHN0eWxlPSJNQVJHSU4tTEVGVDogMjBwdCI+PGEgaHJlZj0iI0Fja25vd2xlZGdlbWVudHMiPkFja25vd2xlZGdlbWVudHM8L2E+PC9oMz4KCQk8aDI+PGEgbmFtZT0iUHVycG9zZSI+UHVycG9zZTwvYT48L2gyPgoJCTxwPgoJCQk8Yj5ib29zdDo6bWVtX2ZuPC9iPiBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIHRoZSBzdGFuZGFyZCBmdW5jdGlvbnMgPGI+c3RkOjptZW1fZnVuPC9iPgoJCQlhbmQgPGI+c3RkOjptZW1fZnVuX3JlZjwvYj4uIEl0IHN1cHBvcnRzIG1lbWJlciBmdW5jdGlvbiBwb2ludGVycyB3aXRoIG1vcmUgCgkJCXRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhlIHJldHVybmVkIGZ1bmN0aW9uIG9iamVjdCBjYW4gdGFrZSBhIHBvaW50ZXIsIGEgCgkJCXJlZmVyZW5jZSwgb3IgYSBzbWFydCBwb2ludGVyIHRvIGFuIG9iamVjdCBpbnN0YW5jZSBhcyBpdHMgZmlyc3QgYXJndW1lbnQuIDxTVFJPTkc+bWVtX2ZuPC9TVFJPTkc+CgkJCWFsc28gc3VwcG9ydHMgcG9pbnRlcnMgdG8gZGF0YSBtZW1iZXJzIGJ5IHRyZWF0aW5nIHRoZW0gYXMgZnVuY3Rpb25zIHRha2luZyBubyAKCQkJYXJndW1lbnRzIGFuZCByZXR1cm5pbmcgYSAoY29uc3QpIHJlZmVyZW5jZSB0byB0aGUgbWVtYmVyLgoJCTwvcD4KCQk8cD4KCQkJVGhlIHB1cnBvc2Ugb2YgPGI+bWVtX2ZuPC9iPiBpcyB0d29mb2xkLiBGaXJzdCwgaXQgYWxsb3dzIHVzZXJzIHRvIGludm9rZSBhIAoJCQltZW1iZXIgZnVuY3Rpb24gb24gYSBjb250YWluZXIgd2l0aCB0aGUgZmFtaWxpYXIKCQk8L3A+CgkJPHByZT4KICAgIHN0ZDo6Zm9yX2VhY2godi5iZWdpbigpLCB2LmVuZCgpLCBib29zdDo6bWVtX2ZuKCZhbXA7U2hhcGU6OmRyYXcpKTsKPC9wcmU+CgkJPHA+CgkJCXN5bnRheCwgZXZlbiB3aGVuIHRoZSBjb250YWluZXIgc3RvcmVzIHNtYXJ0IHBvaW50ZXJzLgoJCTwvcD4KCQk8cD4KCQkJU2Vjb25kLCBpdCBjYW4gYmUgdXNlZCBhcyBhIGJ1aWxkaW5nIGJsb2NrIGJ5IGxpYnJhcnkgZGV2ZWxvcGVycyB0aGF0IHdhbnQgdG8gCgkJCXRyZWF0IGEgcG9pbnRlciB0byBtZW1iZXIgZnVuY3Rpb24gYXMgYSBmdW5jdGlvbiBvYmplY3QuIEEgbGlicmFyeSBtaWdodCBkZWZpbmUgCgkJCWFuIGVuaGFuY2VkIDxiPmZvcl9lYWNoPC9iPiBhbGdvcml0aG0gd2l0aCBhbiBvdmVybG9hZCBvZiB0aGUgZm9ybToKCQk8L3A+CgkJPHByZT4KdGVtcGxhdGUmbHQ7Y2xhc3MgSXQsIGNsYXNzIFIsIGNsYXNzIFQmZ3Q7IHZvaWQgZm9yX2VhY2goSXQgZmlyc3QsIEl0IGxhc3QsIFIgKFQ6OipwbWYpICgpKQp7CiAgICBzdGQ6OmZvcl9lYWNoKGZpcnN0LCBsYXN0LCBib29zdDo6bWVtX2ZuKHBtZikpOwp9CjwvcHJlPgoJCTxwPgoJCQl0aGF0IHdpbGwgYWxsb3cgdGhlIGNvbnZlbmllbnQgc3ludGF4OgoJCTwvcD4KCQk8cHJlPgogICAgZm9yX2VhY2godi5iZWdpbigpLCB2LmVuZCgpLCAmYW1wO1NoYXBlOjpkcmF3KTsKPC9wcmU+CgkJPHA+CgkJCVdoZW4gZG9jdW1lbnRpbmcgdGhlIGZlYXR1cmUsIHRoZSBsaWJyYXJ5IGF1dGhvciB3aWxsIHNpbXBseSBzdGF0ZToKCQk8L3A+CgkJPGg0IHN0eWxlPSJNQVJHSU4tTEVGVDogMjBwdCI+dGVtcGxhdGUmbHQ7Y2xhc3MgSXQsIGNsYXNzIFIsIGNsYXNzIFQmZ3Q7IHZvaWQgCgkJCWZvcl9lYWNoKEl0IGZpcnN0LCBJdCBsYXN0LCBSIChUOjoqcG1mKSAoKSk7PC9oND4KCQk8cCBzdHlsZT0iTUFSR0lOLUxFRlQ6IDIwcHQiPgoJCQk8Yj5FZmZlY3RzOjwvYj4gZXF1aXZhbGVudCB0byBzdGQ6OmZvcl9lYWNoKGZpcnN0LCBsYXN0LCBib29zdDo6bWVtX2ZuKHBtZikpOwoJCTwvcD4KCQk8cD4KCQkJd2hlcmUgPGI+Ym9vc3Q6Om1lbV9mbjwvYj4gY2FuIGJlIGEgbGluayB0byB0aGlzIHBhZ2UuIFNlZSA8YSBocmVmPSJiaW5kLmh0bWwiPnRoZSAKCQkJCWRvY3VtZW50YXRpb24gb2YgPGI+YmluZDwvYj48L2E+IGZvciBhbiBleGFtcGxlLgoJCTwvcD4KCQk8cD4KCQkJPGI+bWVtX2ZuPC9iPiB0YWtlcyBvbmUgYXJndW1lbnQsIGEgcG9pbnRlciB0byBhIG1lbWJlciwgYW5kIHJldHVybnMgYSBmdW5jdGlvbiAKCQkJb2JqZWN0IHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBzdGFuZGFyZCBvciB1c2VyLWRlZmluZWQgYWxnb3JpdGhtczoKCQk8L3A+CgkJPHByZT4Kc3RydWN0IFgKewogICAgdm9pZCBmKCk7Cn07Cgp2b2lkIGcoc3RkOjp2ZWN0b3ImbHQ7WCZndDsgJmFtcDsgdikKewogICAgc3RkOjpmb3JfZWFjaCh2LmJlZ2luKCksIHYuZW5kKCksIGJvb3N0OjptZW1fZm4oJmFtcDtYOjpmKSk7Cn07Cgp2b2lkIGgoc3RkOjp2ZWN0b3ImbHQ7WCAqJmd0OyBjb25zdCAmYW1wOyB2KQp7CiAgICBzdGQ6OmZvcl9lYWNoKHYuYmVnaW4oKSwgdi5lbmQoKSwgYm9vc3Q6Om1lbV9mbigmYW1wO1g6OmYpKTsKfTsKCnZvaWQgayhzdGQ6OnZlY3RvciZsdDtib29zdDo6c2hhcmVkX3B0ciZsdDtYJmd0OyAmZ3Q7IGNvbnN0ICZhbXA7IHYpCnsKICAgIHN0ZDo6Zm9yX2VhY2godi5iZWdpbigpLCB2LmVuZCgpLCBib29zdDo6bWVtX2ZuKCZhbXA7WDo6ZikpOwp9Owo8L3ByZT4KCQk8cD4KCQkJVGhlIHJldHVybmVkIGZ1bmN0aW9uIG9iamVjdCB0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhlIGlucHV0IG1lbWJlciAKCQkJZnVuY3Rpb24gcGx1cyBhICJmbGV4aWJsZSIgZmlyc3QgYXJndW1lbnQgdGhhdCByZXByZXNlbnRzIHRoZSBvYmplY3QgaW5zdGFuY2UuCgkJPC9wPgoJCTxwPgoJCQlXaGVuIHRoZSBmdW5jdGlvbiBvYmplY3QgaXMgaW52b2tlZCB3aXRoIGEgZmlyc3QgYXJndW1lbnQgPGI+eDwvYj4gdGhhdCBpcyAKCQkJbmVpdGhlciBhIHBvaW50ZXIgbm9yIGEgcmVmZXJlbmNlIHRvIHRoZSBhcHByb3ByaWF0ZSBjbGFzcyAoPGI+WDwvYj4gaW4gdGhlIAoJCQlleGFtcGxlIGFib3ZlKSwgaXQgdXNlcyA8dHQ+Z2V0X3BvaW50ZXIoeCk8L3R0PiB0byBvYnRhaW4gYSBwb2ludGVyIGZyb20gPGI+eDwvYj4uIAoJCQlMaWJyYXJ5IGF1dGhvcnMgY2FuICJyZWdpc3RlciIgdGhlaXIgc21hcnQgcG9pbnRlciBjbGFzc2VzIGJ5IHN1cHBseWluZyBhbiAKCQkJYXBwcm9wcmlhdGUgPGI+Z2V0X3BvaW50ZXI8L2I+IG92ZXJsb2FkLCBhbGxvd2luZyA8Yj5tZW1fZm48L2I+IHRvIHJlY29nbml6ZSAKCQkJYW5kIHN1cHBvcnQgdGhlbS4KCQk8L3A+CgkJPHA+CgkJCVtOb3RlOiA8Yj5nZXRfcG9pbnRlcjwvYj4gaXMgbm90IHJlc3RyaWN0ZWQgdG8gcmV0dXJuIGEgcG9pbnRlci4gQW55IG9iamVjdCAKCQkJdGhhdCBjYW4gYmUgdXNlZCBpbiBhIG1lbWJlciBmdW5jdGlvbiBjYWxsIGV4cHJlc3Npb24gPHR0Pih4LSZndDsqcG1mKSguLi4pPC90dD4KCQkJd2lsbCB3b3JrLl0KCQk8L3A+CgkJPHA+CgkJCVtOb3RlOiB0aGUgbGlicmFyeSB1c2VzIGFuIHVucXVhbGlmaWVkIGNhbGwgdG8gPGI+Z2V0X3BvaW50ZXI8L2I+LiBUaGVyZWZvcmUsIAoJCQlpdCB3aWxsIGZpbmQsIHRocm91Z2ggYXJndW1lbnQtZGVwZW5kZW50IGxvb2t1cCwgPGI+Z2V0X3BvaW50ZXI8L2I+IG92ZXJsb2FkcyAKCQkJdGhhdCBhcmUgZGVmaW5lZCBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXMgdGhlIGNvcnJlc3BvbmRpbmcgc21hcnQgcG9pbnRlciAKCQkJY2xhc3MsIGluIGFkZGl0aW9uIHRvIGFueSA8Yj5ib29zdDo6Z2V0X3BvaW50ZXI8L2I+IG92ZXJsb2Fkcy5dCgkJPC9wPgoJCTxwPgoJCQlBbGwgZnVuY3Rpb24gb2JqZWN0cyByZXR1cm5lZCBieSA8Yj5tZW1fZm48L2I+IGV4cG9zZSBhIDxiPnJlc3VsdF90eXBlPC9iPiB0eXBlZGVmIAoJCQl0aGF0IHJlcHJlc2VudHMgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBtZW1iZXIgZnVuY3Rpb24uIEZvciBkYXRhIG1lbWJlcnMsIDxTVFJPTkc+cmVzdWx0X3R5cGU8L1NUUk9ORz4KCQkJaXMgZGVmaW5lZCBhcyB0aGUgdHlwZSBvZiB0aGUgbWVtYmVyLgoJCTwvcD4KCQk8aDI+PGEgbmFtZT0iRkFRIj5GcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9uczwvYT48L2gyPgoJCTxoMz48YSBuYW1lPSJRMSI+Q2FuIDxiPm1lbV9mbjwvYj4gYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBzdGFuZGFyZCA8Yj5zdGQ6Om1lbV9mdW5bX3JlZl08L2I+CgkJCQlhZGFwdG9ycz88L2E+PC9oMz4KCQk8cD4KCQkJWWVzLiBGb3Igc2ltcGxlIHVzZXMsIDxiPm1lbV9mbjwvYj4gcHJvdmlkZXMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHRoYXQgdGhlIAoJCQlzdGFuZGFyZCBhZGFwdG9ycyBkbyBub3QuIENvbXBsaWNhdGVkIGV4cHJlc3Npb25zIHRoYXQgdXNlIDxiPnN0ZDo6YmluZDFzdDwvYj4sIDxiPnN0ZDo6YmluZDJuZDwvYj4KCQkJb3IgPGEgaHJlZj0iLi4vY29tcG9zZS9pbmRleC5odG0iPjxiPkJvb3N0LkNvbXBvc2U8L2I+PC9hPiBhbG9uZyB3aXRoIHRoZSAKCQkJc3RhbmRhcmQgYWRhcHRvcnMgY2FuIGJlIHJld3JpdHRlbiB1c2luZyA8YSBocmVmPSJiaW5kLmh0bWwiPjxiPmJvb3N0OjpiaW5kPC9iPjwvYT4KCQkJdGhhdCBhdXRvbWF0aWNhbGx5IHRha2VzIGFkdmFudGFnZSBvZiA8Yj5tZW1fZm48L2I+LgoJCTwvcD4KCQk8aDM+PGEgbmFtZT0iUTIiPlNob3VsZCBJIHJlcGxhY2UgZXZlcnkgb2NjdXJlbmNlIG9mIDxiPnN0ZDo6bWVtX2Z1bltfcmVmXTwvYj4gd2l0aCA8Yj5tZW1fZm48L2I+CgkJCQlpbiBteSBleGlzdGluZyBjb2RlPzwvYT48L2gzPgoJCTxwPgoJCQlObywgdW5sZXNzIHlvdSBoYXZlIGdvb2QgcmVhc29ucyB0byBkbyBzby4gPGI+bWVtX2ZuPC9iPiBpcyBub3QgMTAwJSBjb21wYXRpYmxlIAoJCQl3aXRoIHRoZSBzdGFuZGFyZCBhZGFwdG9ycywgYWx0aG91Z2ggaXQgY29tZXMgcHJldHR5IGNsb3NlLiBJbiBwYXJ0aWN1bGFyLCA8Yj5tZW1fZm48L2I+CgkJCWRvZXMgbm90IHJldHVybiBvYmplY3RzIG9mIHR5cGUgPGI+c3RkOjpbY29uc3RfXW1lbV9mdW5bMV1bX3JlZl1fdDwvYj4sIGFzIHRoZSAKCQkJc3RhbmRhcmQgYWRhcHRvcnMgZG8sIGFuZCBpdCBpcyBub3QgcG9zc2libGUgdG8gZnVsbHkgZGVzY3JpYmUgdGhlIHR5cGUgb2YgdGhlIAoJCQlmaXJzdCBhcmd1bWVudCB1c2luZyB0aGUgc3RhbmRhcmQgPGI+YXJndW1lbnRfdHlwZTwvYj4gYW5kIDxiPmZpcnN0X2FyZ3VtZW50X3R5cGU8L2I+CgkJCW5lc3RlZCB0eXBlZGVmcy4gTGlicmFyaWVzIHRoYXQgbmVlZCBhZGFwdGFibGUgZnVuY3Rpb24gb2JqZWN0cyBpbiBvcmRlciB0byAKCQkJZnVuY3Rpb24gbWlnaHQgbm90IGxpa2UgPGI+bWVtX2ZuPC9iPi4KCQk8L3A+CgkJPGgzPjxhIG5hbWU9IlEzIj5Eb2VzIDxiPm1lbV9mbjwvYj4gd29yayB3aXRoIENPTSBtZXRob2RzPzwvYT48L2gzPgoJCTxwPgoJCQlZZXMsIGlmIHlvdSA8YSBocmVmPSIjc3RkY2FsbCI+I2RlZmluZSBCT09TVF9NRU1fRk5fRU5BQkxFX1NURENBTEw8L2E+LgoJCTwvcD4KCQk8aDM+PGEgbmFtZT0iUTQiPldoeSBpc24ndCBCT09TVF9NRU1fRk5fRU5BQkxFX1NURENBTEwgZGVmaW5lZCBhdXRvbWF0aWNhbGx5PzwvYT48L2gzPgoJCTxwPgoJCQlOb24tcG9ydGFibGUgZXh0ZW5zaW9ucywgaW4gZ2VuZXJhbCwgc2hvdWxkIGRlZmF1bHQgdG8gb2ZmIHRvIHByZXZlbnQgdmVuZG9yIAoJCQlsb2NrLWluLiBIYWQgQk9PU1RfTUVNX0ZOX0VOQUJMRV9TVERDQUxMIGJlZW4gZGVmaW5lZCBhdXRvbWF0aWNhbGx5LCB5b3UgY291bGQgCgkJCWhhdmUgYWNjaWRlbnRhbGx5IHRha2VuIGFkdmFudGFnZSBvZiBpdCB3aXRob3V0IHJlYWxpemluZyB0aGF0IHlvdXIgY29kZSBpcywgCgkJCXBlcmhhcHMsIG5vIGxvbmdlciBwb3J0YWJsZS4gSW4gYWRkaXRpb24sIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgZGVmYXVsdCAKCQkJY2FsbGluZyBjb252ZW50aW9uIHRvIGJlIF9fc3RkY2FsbCwgaW4gd2hpY2ggY2FzZSBlbmFibGluZyBfX3N0ZGNhbGwgc3VwcG9ydCAKCQkJd2lsbCByZXN1bHQgaW4gZHVwbGljYXRlIGRlZmluaXRpb25zLgoJCTwvcD4KCQk8aDI+PGEgbmFtZT0iSW50ZXJmYWNlIj5JbnRlcmZhY2U8L2E+PC9oMj4KCQk8aDM+PGEgbmFtZT0iU3lub3BzaXMiPlN5bm9wc2lzPC9hPjwvaDM+CgkJPHByZT4KbmFtZXNwYWNlIGJvb3N0CnsKCnRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IFQgKiA8YSBocmVmPSIjZ2V0X3BvaW50ZXJfMSI+Z2V0X3BvaW50ZXI8L2E+KFQgKiBwKTsKCnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzIFQmZ3Q7IDxpPnVuc3BlY2lmaWVkLTE8L2k+IDxhIGhyZWY9IiNtZW1fZm5fMSI+bWVtX2ZuPC9hPihSIChUOjoqcG1mKSAoKSk7Cgp0ZW1wbGF0ZSZsdDtjbGFzcyBSLCBjbGFzcyBUJmd0OyA8aT51bnNwZWNpZmllZC0yPC9pPiA8YSBocmVmPSIjbWVtX2ZuXzIiPm1lbV9mbjwvYT4oUiAoVDo6KnBtZikgKCkgY29uc3QpOwoKdGVtcGxhdGUmbHQ7Y2xhc3MgUiwgY2xhc3MgVCZndDsgPGk+dW5zcGVjaWZpZWQtMi0xPC9pPiA8YSBocmVmPSIjbWVtX2ZuXzJfMSI+bWVtX2ZuPC9hPihSIFQ6OipwbSk7Cgp0ZW1wbGF0ZSZsdDtjbGFzcyBSLCBjbGFzcyBULCBjbGFzcyBBMSZndDsgPGk+dW5zcGVjaWZpZWQtMzwvaT4gPGEgaHJlZj0iI21lbV9mbl8zIj5tZW1fZm48L2E+KFIgKFQ6OipwbWYpIChBMSkpOwoKdGVtcGxhdGUmbHQ7Y2xhc3MgUiwgY2xhc3MgVCwgY2xhc3MgQTEmZ3Q7IDxpPnVuc3BlY2lmaWVkLTQ8L2k+IDxhIGhyZWY9IiNtZW1fZm5fNCI+bWVtX2ZuPC9hPihSIChUOjoqcG1mKSAoQTEpIGNvbnN0KTsKCnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzIFQsIGNsYXNzIEExLCBjbGFzcyBBMiZndDsgPGk+dW5zcGVjaWZpZWQtNTwvaT4gPGEgaHJlZj0iI21lbV9mbl81Ij5tZW1fZm48L2E+KFIgKFQ6OipwbWYpIChBMSwgQTIpKTsKCnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzIFQsIGNsYXNzIEExLCBjbGFzcyBBMiZndDsgPGk+dW5zcGVjaWZpZWQtNjwvaT4gPGEgaHJlZj0iI21lbV9mbl82Ij5tZW1fZm48L2E+KFIgKFQ6OipwbWYpIChBMSwgQTIpIGNvbnN0KTsKCi8vIGltcGxlbWVudGF0aW9uIGRlZmluZWQgbnVtYmVyIG9mIGFkZGl0aW9uYWwgb3ZlcmxvYWRzIGZvciBtb3JlIGFyZ3VtZW50cwoKfQo8L3ByZT4KCQk8aDM+PGEgbmFtZT0iQ29tbW9uUmVxdWlyZW1lbnRzIj5Db21tb24gcmVxdWlyZW1lbnRzPC9hPjwvaDM+CgkJPHA+CgkJCUFsbCA8dHQ+PGk+dW5zcGVjaWZpZWQtTjwvaT48L3R0PiB0eXBlcyBtZW50aW9uZWQgaW4gdGhlIFN5bm9wc2lzIGFyZSA8Yj5Db3B5Q29uc3RydWN0aWJsZTwvYj4KCQkJYW5kIDxiPkFzc2lnbmFibGU8L2I+LiBUaGVpciBjb3B5IGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRvcnMgZG8gbm90IAoJCQl0aHJvdyBleGNlcHRpb25zLiA8dHQ+PGk+dW5zcGVjaWZpZWQtTjwvaT46OnJlc3VsdF90eXBlPC90dD4gaXMgZGVmaW5lZCBhcyB0aGUgCgkJCXJldHVybiB0eXBlIG9mIHRoZSBtZW1iZXIgZnVuY3Rpb24gcG9pbnRlciBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gPGI+bWVtX2ZuPC9iPgoJCQkoPGI+UjwvYj4gaW4gdGhlIFN5bm9wc2lzLikgPHR0PjxpPnVuc3BlY2lmaWVkLTItMTwvaT46OnJlc3VsdF90eXBlPC90dD4gaXMgCgkJCWRlZmluZWQgYXMgPHR0PlI8L3R0Pi4KCQk8L3A+CgkJPGgzPjxhIG5hbWU9ImdldF9wb2ludGVyIj5nZXRfcG9pbnRlcjwvYT48L2gzPgoJCTxoND48YSBuYW1lPSJnZXRfcG9pbnRlcl8xIj50ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBUICogZ2V0X3BvaW50ZXIoVCAqIHApPC9hPjwvaDQ+CgkJPGJsb2NrcXVvdGU+CgkJCTxwPgoJCQkJPGI+UmV0dXJuczo8L2I+IDx0dD5wPC90dD4uCgkJCTwvcD4KCQkJPHA+CgkJCQk8Yj5UaHJvd3M6PC9iPiBOb3RoaW5nLgoJCQk8L3A+CgkJPC9ibG9ja3F1b3RlPgoJCTxoMz48YSBuYW1lPSJtZW1fZm4iPm1lbV9mbjwvYT48L2gzPgoJCTxoND48YSBuYW1lPSJtZW1fZm5fMSI+dGVtcGxhdGUmbHQ7Y2xhc3MgUiwgY2xhc3MgVCZndDsgPGk+dW5zcGVjaWZpZWQtMTwvaT4gbWVtX2ZuKFIgCgkJCQkoVDo6KnBtZikgKCkpPC9hPjwvaDQ+CgkJPGJsb2NrcXVvdGU+CgkJCTxwPgoJCQkJPGI+UmV0dXJuczo8L2I+IGEgZnVuY3Rpb24gb2JqZWN0IDxpPmY8L2k+IHN1Y2ggdGhhdCB0aGUgZXhwcmVzc2lvbiA8dHQ+PGk+Zih0KTwvaT48L3R0PgoJCQkJaXMgZXF1aXZhbGVudCB0byA8dHQ+KHQuKnBtZikoKTwvdHQ+IHdoZW4gPGk+dDwvaT4gaXMgYW4gbC12YWx1ZSBvZiB0eXBlIDxTVFJPTkc+VCA8L1NUUk9ORz4KCQkJCW9yIGRlcml2ZWQsIDx0dD4oZ2V0X3BvaW50ZXIodCktJmd0OypwbWYpKCk8L3R0PiBvdGhlcndpc2UuCgkJCTwvcD4KCQkJPHA+CgkJCQk8Yj5UaHJvd3M6PC9iPiBOb3RoaW5nLgoJCQk8L3A+CgkJPC9ibG9ja3F1b3RlPgoJCTxoND48YSBuYW1lPSJtZW1fZm5fMiI+dGVtcGxhdGUmbHQ7Y2xhc3MgUiwgY2xhc3MgVCZndDsgPGk+dW5zcGVjaWZpZWQtMjwvaT4gbWVtX2ZuKFIgCgkJCQkoVDo6KnBtZikgKCkgY29uc3QpPC9hPjwvaDQ+CgkJPGJsb2NrcXVvdGU+CgkJCTxwPgoJCQkJPGI+UmV0dXJuczo8L2I+IGEgZnVuY3Rpb24gb2JqZWN0IDxpPmY8L2k+IHN1Y2ggdGhhdCB0aGUgZXhwcmVzc2lvbiA8dHQ+PGk+Zih0KTwvaT48L3R0PgoJCQkJaXMgZXF1aXZhbGVudCB0byA8dHQ+KHQuKnBtZikoKTwvdHQ+IHdoZW4gPGk+dDwvaT4gaXMgb2YgdHlwZSA8U1RST05HPlQ8L1NUUk9ORz4KCQkJCTxFTT5bY29uc3RdPFNUUk9ORz4gPC9TVFJPTkc+PC9FTT5vciBkZXJpdmVkLCA8dHQ+KGdldF9wb2ludGVyKHQpLSZndDsqcG1mKSgpPC90dD4KCQkJCW90aGVyd2lzZS4KCQkJPC9wPgoJCQk8cD4KCQkJCTxiPlRocm93czo8L2I+IE5vdGhpbmcuCgkJCTwvcD4KCQk8L2Jsb2NrcXVvdGU+CgkJPGg0PjxhIG5hbWU9Im1lbV9mbl8yXzEiPnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzIFQmZ3Q7IDxpPnVuc3BlY2lmaWVkLTItMTwvaT4gbWVtX2ZuKFIgCgkJCQlUOjoqcG0pPC9hPjwvaDQ+CgkJPGJsb2NrcXVvdGU+CgkJCTxwPgoJCQkJPGI+UmV0dXJuczo8L2I+IGEgZnVuY3Rpb24gb2JqZWN0IDxpPmY8L2k+IHN1Y2ggdGhhdCB0aGUgZXhwcmVzc2lvbiA8dHQ+PGk+Zih0KTwvaT48L3R0PgoJCQkJaXMgZXF1aXZhbGVudCB0byA8dHQ+dC4qcG08L3R0PiB3aGVuIDxpPnQ8L2k+IGlzIG9mIHR5cGUgPFNUUk9ORz5UPC9TVFJPTkc+IDxFTT5bY29uc3RdPFNUUk9ORz4KCQkJCQk8L1NUUk9ORz48L0VNPm9yIGRlcml2ZWQsIDx0dD5nZXRfcG9pbnRlcih0KS0mZ3Q7KnBtPC90dD4gb3RoZXJ3aXNlLgoJCQk8L3A+CgkJCTxwPgoJCQkJPGI+VGhyb3dzOjwvYj4gTm90aGluZy4KCQkJPC9wPgoJCTwvYmxvY2txdW90ZT4KCQk8aDQ+PGEgbmFtZT0ibWVtX2ZuXzMiPnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzIFQsIGNsYXNzIEExJmd0OyA8aT51bnNwZWNpZmllZC0zPC9pPiBtZW1fZm4oUiAKCQkJCShUOjoqcG1mKSAoQTEpKTwvYT48L2g0PgoJCTxibG9ja3F1b3RlPgoJCQk8cD4KCQkJCTxiPlJldHVybnM6PC9iPiBhIGZ1bmN0aW9uIG9iamVjdCA8aT5mPC9pPiBzdWNoIHRoYXQgdGhlIGV4cHJlc3Npb24gPHR0PjxpPmYodCwgYTEpPC9pPjwvdHQ+CgkJCQlpcyBlcXVpdmFsZW50IHRvIDx0dD4odC4qcG1mKShhMSk8L3R0PiB3aGVuIDxpPnQ8L2k+IGlzIGFuIGwtdmFsdWUgb2YgdHlwZSA8U1RST05HPlQKCQkJCTwvU1RST05HPm9yIGRlcml2ZWQsIDx0dD4oZ2V0X3BvaW50ZXIodCktJmd0OypwbWYpKGExKTwvdHQ+IG90aGVyd2lzZS4KCQkJPC9wPgoJCQk8cD4KCQkJCTxiPlRocm93czo8L2I+IE5vdGhpbmcuCgkJCTwvcD4KCQk8L2Jsb2NrcXVvdGU+CgkJPGg0PjxhIG5hbWU9Im1lbV9mbl80Ij50ZW1wbGF0ZSZsdDtjbGFzcyBSLCBjbGFzcyBULCBjbGFzcyBBMSZndDsgPGk+dW5zcGVjaWZpZWQtNDwvaT4gbWVtX2ZuKFIgCgkJCQkoVDo6KnBtZikgKEExKSBjb25zdCk8L2E+PC9oND4KCQk8YmxvY2txdW90ZT4KCQkJPHA+CgkJCQk8Yj5SZXR1cm5zOjwvYj4gYSBmdW5jdGlvbiBvYmplY3QgPGk+ZjwvaT4gc3VjaCB0aGF0IHRoZSBleHByZXNzaW9uIDx0dD48aT5mKHQsIGExKTwvaT48L3R0PgoJCQkJaXMgZXF1aXZhbGVudCB0byA8dHQ+KHQuKnBtZikoYTEpPC90dD4gd2hlbiA8aT50PC9pPiBpcyBvZiB0eXBlIDxTVFJPTkc+VDwvU1RST05HPgoJCQkJPEVNPltjb25zdF08U1RST05HPiA8L1NUUk9ORz48L0VNPm9yIGRlcml2ZWQsIDx0dD4oZ2V0X3BvaW50ZXIodCktJmd0OypwbWYpKGExKTwvdHQ+CgkJCQlvdGhlcndpc2UuCgkJCTwvcD4KCQkJPHA+CgkJCQk8Yj5UaHJvd3M6PC9iPiBOb3RoaW5nLgoJCQk8L3A+CgkJPC9ibG9ja3F1b3RlPgoJCTxoND48YSBuYW1lPSJtZW1fZm5fNSI+dGVtcGxhdGUmbHQ7Y2xhc3MgUiwgY2xhc3MgVCwgY2xhc3MgQTEsIGNsYXNzIEEyJmd0OyA8aT51bnNwZWNpZmllZC01PC9pPgoJCQkJbWVtX2ZuKFIgKFQ6OipwbWYpIChBMSwgQTIpKTwvYT48L2g0PgoJCTxibG9ja3F1b3RlPgoJCQk8cD4KCQkJCTxiPlJldHVybnM6PC9iPiBhIGZ1bmN0aW9uIG9iamVjdCA8aT5mPC9pPiBzdWNoIHRoYXQgdGhlIGV4cHJlc3Npb24gPHR0PjxpPmYodCwgYTEsIGEyKTwvaT48L3R0PgoJCQkJaXMgZXF1aXZhbGVudCB0byA8dHQ+KHQuKnBtZikoYTEsIGEyKTwvdHQ+IHdoZW4gPGk+dDwvaT4gaXMgYW4gbC12YWx1ZSBvZiB0eXBlIDxTVFJPTkc+CgkJCQkJVDwvU1RST05HPiBvciBkZXJpdmVkLCA8dHQ+KGdldF9wb2ludGVyKHQpLSZndDsqcG1mKShhMSwgYTIpPC90dD4gb3RoZXJ3aXNlLgoJCQk8L3A+CgkJCTxwPgoJCQkJPGI+VGhyb3dzOjwvYj4gTm90aGluZy4KCQkJPC9wPgoJCTwvYmxvY2txdW90ZT4KCQk8aDQ+PGEgbmFtZT0ibWVtX2ZuXzYiPnRlbXBsYXRlJmx0O2NsYXNzIFIsIGNsYXNzIFQsIGNsYXNzIEExLCBjbGFzcyBBMiZndDsgPGk+dW5zcGVjaWZpZWQtNjwvaT4KCQkJCW1lbV9mbihSIChUOjoqcG1mKSAoQTEsIEEyKSBjb25zdCk8L2E+PC9oND4KCQk8YmxvY2txdW90ZT4KCQkJPHA+CgkJCQk8Yj5SZXR1cm5zOjwvYj4gYSBmdW5jdGlvbiBvYmplY3QgPGk+ZjwvaT4gc3VjaCB0aGF0IHRoZSBleHByZXNzaW9uIDx0dD48aT5mKHQsIGExLCBhMik8L2k+PC90dD4KCQkJCWlzIGVxdWl2YWxlbnQgdG8gPHR0Pih0LipwbWYpKGExLCBhMik8L3R0PiB3aGVuIDxpPnQ8L2k+IGlzIG9mIHR5cGUgPFNUUk9ORz5UPC9TVFJPTkc+CgkJCQk8RU0+W2NvbnN0XTwvRU0+IG9yIGRlcml2ZWQsIDx0dD4oZ2V0X3BvaW50ZXIodCktJmd0OypwbWYpKGExLCBhMik8L3R0PiBvdGhlcndpc2UuCgkJCTwvcD4KCQkJPHA+CgkJCQk8Yj5UaHJvd3M6PC9iPiBOb3RoaW5nLgoJCQk8L3A+CgkJPC9ibG9ja3F1b3RlPgoJCTxoMj48YSBuYW1lPSJJbXBsZW1lbnRhdGlvbiI+SW1wbGVtZW50YXRpb248L2E+PC9oMj4KCQk8aDM+PGEgbmFtZT0iRmlsZXMiPkZpbGVzPC9hPjwvaDM+CgkJPHVsPgoJCQk8bGk+CgkJCQk8YSBocmVmPSIuLi8uLi9ib29zdC9tZW1fZm4uaHBwIj5ib29zdC9tZW1fZm4uaHBwPC9hPgoJCQkobWFpbiBoZWFkZXIpCgkJCTxsaT4KCQkJCTxhIGhyZWY9Ii4uLy4uL2Jvb3N0L2JpbmQvbWVtX2ZuX2NjLmhwcCI+Ym9vc3QvYmluZC9tZW1fZm5fY2MuaHBwPC9hPgoJCQkodXNlZCBieSBtZW1fZm4uaHBwLCBkbyBub3QgaW5jbHVkZSBkaXJlY3RseSkKCQkJPGxpPgoJCQkJPGEgaHJlZj0iLi4vLi4vYm9vc3QvYmluZC9tZW1fZm5fdncuaHBwIj5ib29zdC9iaW5kL21lbV9mbl92dy5ocHA8L2E+CgkJCSh1c2VkIGJ5IG1lbV9mbi5ocHAsIGRvIG5vdCBpbmNsdWRlIGRpcmVjdGx5KQoJCQk8bGk+CgkJCQk8YSBocmVmPSIuLi8uLi9ib29zdC9iaW5kL21lbV9mbl90ZW1wbGF0ZS5ocHAiPmJvb3N0L2JpbmQvbWVtX2ZuX3RlbXBsYXRlLmhwcDwvYT4KCQkJKHVzZWQgYnkgbWVtX2ZuLmhwcCwgZG8gbm90IGluY2x1ZGUgZGlyZWN0bHkpCgkJCTxsaT4KCQkJCTxhIGhyZWY9InRlc3QvbWVtX2ZuX3Rlc3QuY3BwIj5saWJzL2JpbmQvdGVzdC9tZW1fZm5fdGVzdC5jcHA8L2E+CgkJCSh0ZXN0KQoJCQk8bGk+CgkJCQk8YSBocmVmPSJ0ZXN0L21lbV9mbl9kZXJpdmVkX3Rlc3QuY3BwIj5saWJzL2JpbmQvdGVzdC9tZW1fZm5fZGVyaXZlZF90ZXN0LmNwcDwvYT4KCQkJKHRlc3Qgd2l0aCBkZXJpdmVkIG9iamVjdHMpCgkJCTxsaT4KCQkJCTxhIGhyZWY9InRlc3QvbWVtX2ZuX2Zhc3RjYWxsX3Rlc3QuY3BwIj5saWJzL2JpbmQvdGVzdC9tZW1fZm5fZmFzdGNhbGxfdGVzdC5jcHA8L2E+CgkJCSh0ZXN0IGZvciBfX2Zhc3RjYWxsKQoJCQk8bGk+CgkJCQk8YSBocmVmPSJ0ZXN0L21lbV9mbl9zdGRjYWxsX3Rlc3QuY3BwIj5saWJzL2JpbmQvdGVzdC9tZW1fZm5fc3RkY2FsbF90ZXN0LmNwcDwvYT4KCQkJKHRlc3QgZm9yIF9fc3RkY2FsbCkKCQkJPGxpPgoJCQkJPGEgaHJlZj0idGVzdC9tZW1fZm5fdm9pZF90ZXN0LmNwcCI+bGlicy9iaW5kL3Rlc3QvbWVtX2ZuX3ZvaWRfdGVzdC5jcHA8L2E+ICh0ZXN0IAoJCQkJZm9yIHZvaWQgcmV0dXJucyk8L2xpPgoJCTwvdWw+CgkJPGgzPjxhIG5hbWU9IkRlcGVuZGVuY2llcyI+RGVwZW5kZW5jaWVzPC9hPjwvaDM+CgkJPHVsPgoJCQk8bGk+CgkJCQk8YSBocmVmPSIuLi9jb25maWcvY29uZmlnLmh0bSI+Qm9vc3QuQ29uZmlnPC9hPjwvbGk+CgkJPC91bD4KCQk8aDM+PGEgbmFtZT0iTnVtYmVyT2ZBcmd1bWVudHMiPk51bWJlciBvZiBBcmd1bWVudHM8L2E+PC9oMz4KCQk8cD4KCQkJVGhpcyBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBtZW1iZXIgZnVuY3Rpb25zIHdpdGggdXAgdG8gZWlnaHQgYXJndW1lbnRzLiBUaGlzIAoJCQlpcyBub3QgYW4gaW5oZXJlbnQgbGltaXRhdGlvbiBvZiB0aGUgZGVzaWduLCBidXQgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgoJCTwvcD4KCQk8aDM+PGEgbmFtZT0ic3RkY2FsbCI+Il9fc3RkY2FsbCIsICJfX2NkZWNsIiBhbmQgIl9fZmFzdGNhbGwiIFN1cHBvcnQ8L2E+PC9oMz4KCQk8cD4KCQkJU29tZSBwbGF0Zm9ybXMgYWxsb3cgc2V2ZXJhbCB0eXBlcyBvZiBtZW1iZXIgZnVuY3Rpb25zIHRoYXQgZGlmZmVyIGJ5IHRoZWlyIDxiPmNhbGxpbmcgCgkJCQljb252ZW50aW9uPC9iPiAodGhlIHJ1bGVzIGJ5IHdoaWNoIHRoZSBmdW5jdGlvbiBpcyBpbnZva2VkOiBob3cgYXJlIAoJCQlhcmd1bWVudHMgcGFzc2VkLCBob3cgaXMgdGhlIHJldHVybiB2YWx1ZSBoYW5kbGVkLCBhbmQgd2hvIGNsZWFucyB1cCB0aGUgc3RhY2sgCgkJCS0gaWYgYW55LikKCQk8L3A+CgkJPHA+CgkJCUZvciBleGFtcGxlLCBXaW5kb3dzIEFQSSBmdW5jdGlvbnMgYW5kIENPTSBpbnRlcmZhY2UgbWVtYmVyIGZ1bmN0aW9ucyB1c2UgYSAKCQkJY2FsbGluZyBjb252ZW50aW9uIGtub3duIGFzIDxiPl9fc3RkY2FsbDwvYj4uIEJvcmxhbmQgVkNMIGNvbXBvbmVudHMgdXNlIDxTVFJPTkc+X19mYXN0Y2FsbDwvU1RST05HPi4gCgkJCVVESywgdGhlIGNvbXBvbmVudCBtb2RlbCBvZiBPcGVuT2ZmaWNlLm9yZywgdXNlcyA8U1RST05HPl9fY2RlY2w8L1NUUk9ORz4uCgkJPC9wPgoJCTxwPgoJCQlUbyB1c2UgPGI+bWVtX2ZuPC9iPiB3aXRoIDxiPl9fc3RkY2FsbDwvYj4gbWVtYmVyIGZ1bmN0aW9ucywgPGI+I2RlZmluZTwvYj4gdGhlIAoJCQltYWNybyA8Yj5CT09TVF9NRU1fRk5fRU5BQkxFX1NURENBTEw8L2I+IGJlZm9yZSBpbmNsdWRpbmcsIGRpcmVjdGx5IG9yIAoJCQlpbmRpcmVjdGx5LCA8Yj4mbHQ7Ym9vc3QvbWVtX2ZuLmhwcCZndDs8L2I+LgoJCTwvcD4KCQk8UD5UbyB1c2UgPEI+bWVtX2ZuPC9CPiB3aXRoIDxCPl9fZmFzdGNhbGw8L0I+IG1lbWJlciBmdW5jdGlvbnMsIDxCPiNkZWZpbmU8L0I+IHRoZSAKCQkJbWFjcm8gPEI+Qk9PU1RfTUVNX0ZOX0VOQUJMRV9GQVNUQ0FMTDwvQj4gYmVmb3JlIGluY2x1ZGluZyA8Qj4mbHQ7Ym9vc3QvbWVtX2ZuLmhwcCZndDs8L0I+LgoJCTwvUD4KCQk8UD5UbyB1c2UgPEI+bWVtX2ZuPC9CPiB3aXRoIDxCPl9fY2RlY2w8L0I+IG1lbWJlciBmdW5jdGlvbnMsIDxCPiNkZWZpbmU8L0I+IHRoZSAKCQkJbWFjcm8gPEI+Qk9PU1RfTUVNX0ZOX0VOQUJMRV9DREVDTDwvQj4gYmVmb3JlIGluY2x1ZGluZyA8Qj4mbHQ7Ym9vc3QvbWVtX2ZuLmhwcCZndDs8L0I+LgoJCTwvUD4KCQk8UD48U1RST05HPkl0IGlzIGJlc3QgdG8gZGVmaW5lIHRoZXNlIG1hY3JvcyBpbiB0aGUgcHJvamVjdCBvcHRpb25zLCB2aWEgLUQgb24gdGhlIAoJCQkJY29tbWFuZCBsaW5lLCBvciBhcyB0aGUgZmlyc3QgbGluZSBpbiB0aGUgdHJhbnNsYXRpb24gdW5pdCAoLmNwcCBmaWxlKSB3aGVyZSAKCQkJCW1lbV9mbiBpcyB1c2VkLjwvU1RST05HPiBOb3QgZm9sbG93aW5nIHRoaXMgcnVsZSBjYW4gbGVhZCB0byBvYnNjdXJlIGVycm9ycyAKCQkJd2hlbiBhIGhlYWRlciBpbmNsdWRlcyBtZW1fZm4uaHBwIGJlZm9yZSB0aGUgbWFjcm8gaGFzIGJlZW4gZGVmaW5lZC48L1A+CgkJPFA+W05vdGU6IHRoaXMgaXMgYSBub24tcG9ydGFibGUgZXh0ZW5zaW9uLiBJdCBpcyBub3QgcGFydCBvZiB0aGUgaW50ZXJmYWNlLl0KCQk8L1A+CgkJPHA+CgkJCVtOb3RlOiBTb21lIGNvbXBpbGVycyBwcm92aWRlIG9ubHkgbWluaW1hbCBzdXBwb3J0IGZvciB0aGUgPGI+X19zdGRjYWxsPC9iPiBrZXl3b3JkLl0KCQk8L3A+CgkJPGgyPjxhIG5hbWU9IkFja25vd2xlZGdlbWVudHMiPkFja25vd2xlZGdlbWVudHM8L2E+PC9oMj4KCQk8cD4KCQkJUmVuZSBKYWdlcidzIGluaXRpYWwgc3VnZ2VzdGlvbiBvZiB1c2luZyB0cmFpdHMgY2xhc3NlcyB0byBtYWtlIDxiPm1lbV9mbjwvYj4gYWRhcHQgCgkJCXRvIHVzZXItZGVmaW5lZCBzbWFydCBwb2ludGVycyBpbnNwaXJlZCB0aGUgPGI+Z2V0X3BvaW50ZXI8L2I+LWJhc2VkIGRlc2lnbi4KCQk8L3A+CgkJPHA+CgkJCU51bWVyb3VzIGltcHJvdmVtZW50cyB3ZXJlIHN1Z2dlc3RlZCBkdXJpbmcgdGhlIGZvcm1hbCByZXZpZXcgcGVyaW9kIGJ5IFJpY2hhcmQgCgkJCUNyb3NzbGV5LCBKZW5zIE1hdXJlciwgRWQgQnJleSwgYW5kIG90aGVycy4gUmV2aWV3IG1hbmFnZXIgd2FzIERhcmluIEFkbGVyLgoJCTwvcD4KCQk8cD4KCQkJU3RldmUgQW5pY2hpbmkgcG9pbnRlZCBvdXQgdGhhdCBDT00gaW50ZXJmYWNlcyB1c2UgPGI+X19zdGRjYWxsPC9iPi4KCQk8L3A+CgkJPHA+CgkJCURhdmUgQWJyYWhhbXMgbW9kaWZpZWQgPGI+YmluZDwvYj4gYW5kIDxiPm1lbV9mbjwvYj4gdG8gc3VwcG9ydCB2b2lkIHJldHVybnMgb24gCgkJCWRlZmljaWVudCBjb21waWxlcnMuCgkJPC9wPgoJCTxwPkRhbmllbCBCb2VsemxlIHBvaW50ZWQgb3V0IHRoYXQgVURLIHVzZXMgPFNUUk9ORz5fX2NkZWNsPC9TVFJPTkc+Ljxicj4KCQkJPGJyPgoJCQk8YnI+CgkJCTxzbWFsbD5Db3B5cmlnaHQgqSAyMDAxLCAyMDAyIGJ5IFBldGVyIERpbW92IGFuZCBNdWx0aSBNZWRpYSBMdGQuIENvcHlyaWdodCAKCQkJCTIwMDMtMjAwNSBQZXRlciBEaW1vdi4gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gCgkJCQkxLjAuIFNlZSBhY2NvbXBhbnlpbmcgZmlsZSA8QSBocmVmPSIuLi8uLi9MSUNFTlNFXzFfMC50eHQiPkxJQ0VOU0VfMV8wLnR4dDwvQT4gb3IgCgkJCQljb3B5IGF0IDxBIGhyZWY9Imh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCI+aHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0PC9BPi48L3NtYWxsPjwvcD4KCTwvYm9keT4KPC9odG1sPgo=