Q3VycmVudCBmdW5jdGlvbmFsaXR5IGxldmVsOiBFU1NMIDMuMAoKLSBjcmVhdGUgdmVyc2lvbiBzeXN0ZW0KCkxpbmsgVmFsaWRhdGlvbgogICAgKyBwcm92aWRlIGlucHV0IGNvbmZpZyBmaWxlIGZvciBzZXR0aW5nIGxpbWl0cwoJICAtIGFsc28gY29uc2lkZXIgc3BpdHRpbmcgb3V0IG1lYXN1cmVzIG9mIGNvbXBsZXhpdHkKICAgICsgZW5zdXJlIG5vIHN0YXRpYyByZWZlcmVuY2VzIHRocm93biBhd2F5CiAgICAtIGdlbmVyYXRlIHN0YXRpYyB1c2Ugb2Ygb2JqZWN0IGV2ZW4gaWYgdGhlIG9ubHkgdXNlIGlzIHRvIGFjY2VzcyB0aGUgbGVuZ3RoIG9mIGl0cyBhcnJheQogICAgQ3Jvc3Mtc3RhZ2UgbGlua2luZwogICAgICAtIHR5cGUgY29uc2lzdGVuY3kgY2hlY2sgb2YgdW5pZm9ybSBhbmQgaW5zIDwtPiBvdXRzLCBib3RoIHZhcmlhYmxlcyBhbmQgYmxvY2tzLCBzdGFnZS1zcGVjaWZpYyBhcnJheW5lc3MgbWF0Y2hpbmcKICAgICAgLSBsb2NhdGlvbi9iaW5kaW5nL2luZGV4IGNoZWNrCiAgICAgIC0gbWl4ZWQgZXMvbm9uLWVzIHByb2ZpbGVzCiAgICAgIC0gc3RhdGljYWxseSBjb25zdW1lZCBpbnB1dCBub3QgcHJvZHVjZWQgYnkgcHJldmlvdXMgc3RhZ2UKICAgICAgLSBnaXZlIGVycm9yIGZvciBzaGFyaW5nIGEgcGFja2VkIGJsb2NrCiAgICAgIC0gMS4yOiBtYXRjaGluZyBpbml0aWFsaXplcnMgZm9yIHVuaWZvcm1zCiAgICAgIC0gMS4zOiBvbmx5IHN0YXRpY2FsbHkgdXNlZCBidWlsdC1pbnMgaGF2ZSB0byBiZSByZWRlY2xhcmVkIGFzIGZsYXQKICAgICAgLSAxLjU6IG1hdGNoaW5nIGJldHdlZW4gZ2xfUGVyVmVydGV4IGJsb2NrcyBhbmQgZ2xfUGVyRnJhZ21lbnQgYmxvY2tzCiAgICAgIC0gMS4zOiBkZXByZWNhdGVkIG1peGluZyBmaXhlZCB2ZXJ0ZXgvZnJhZ21lbnQgc3RhZ2Ugd2l0aCBwcm9ncmFtbWFibGUgZnJhZ21lbnQvdmVydGV4IHN0YWdlLgogICAgICAtIDQuMzogY29tcHV0ZSBzaGFkZXIgbm90IGNvbWJpbmVkIHdpdGggYW55IG90aGVyIHN0YWdlcwogICAgICAtIDQuMzogcmVtb3ZlIGNyb3NzLXZlcnNpb24gbGlua2luZyByZXN0cmljdGlvbnMuCiAgICAgIC0gNC4zOiBBbGxvdyBtaXNtYXRjaGVzIGluIGludGVycG9sYXRpb24gYW5kIGF1eGlsaWFyeSBxdWFsaWZpY2F0aW9uIGFjcm9zcyBzdGFnZXMuCgkgIC0gNC40OiBBIHN0YWdlIGNvbnRhaW5zIHR3byBkaWZmZXJlbnQgYmxvY2tzLCBlYWNoIHdpdGggbm8gaW5zdGFuY2UgbmFtZSwgd2hlcmUgdGhlIGJsb2NrcyBjb250YWluIGEgbWVtYmVyIHdpdGggdGhlIHNhbWUgbmFtZS4KICAgIEludHJhLXN0YWdlIGxpbmtpbmcsIHNpbmdsZSBzaGFkZXIKICAgICAgKyByZWN1cnNpb24gZm9yIGZ1bmN0aW9ucwogICAgICAtIGxpbWl0cyBjaGVja2luZzoKICAgICAgICAgICsgYmluZGluZ3MKICAgICAgICAgIC0gbnVtYmVyIG9mIGlucHV0L291dHB1dCBjb21wb25vbmVudHMKICAgICAgICAgIC0gdGVzc2VsbGF0aW9uIGxpbWl0cwogICAgICAgICAgLSB0ZXNzZWxsYXRpb24gcHJpbWl0aXZlIGFycmF5IHNpemluZyBjb25zaXN0ZW5jeQogICAgICAgICAgLSBOb24gRVM6IGdsX1RleENvb3JkIGNhbiBvbmx5IGhhdmUgYSBtYXggYXJyYXkgc2l6ZSBvZiB1cCB0byBnbF9NYXhUZXh0dXJlQ29vcmRzCiAgICAgICAgICAtIC4uLgogICAgICArIGV4YWN0bHkgb25lIG1haW4KICAgICAgKyBFUyAzLjA6IGZyYWdtZW50IG91dHB1dHMgYWxsIGhhdmUgbG9jYXRpb25zLCBpZiBtb3JlIHRoYW4gb25lCiAgICAgIC0gRVMgMy4wOiBsb2NhdGlvbiBhbGlhc2luZy9vdmVybGFwIChleGNlcHQgZGVza3RvcCB2ZXJ0ZXggc2hhZGVyIGlucHV0cykKICAgICAgLSBOb24gRVM6IGJpbmRpbmcgb3ZlcmxhcAogICAgICAtIGxvY2F0aW9uIG92ZXJsYXAKICAgICAgKyBOb24gRVM6IGdlb21ldHJ5IHNoYWRlciBpbnB1dCBhcnJheSBzaXplcyBhbmQgaW5wdXQgbGF5b3V0IHF1YWxpZmllciBkZWNsYXJhdGlvbgogICAgICArIE5vbiBFUzogcmVhZCBvciB3cml0ZSB0byBib3RoIGdsX0NsaXBWZXJ0ZXggYW5kIGdsX0NsaXBEaXN0YW5jZQogICAgICArIE5vbiBFUzogd3JpdGUgdG8gb25seSBvbmUgb2YgZ2xfRnJhZ0NvbG9yLCBnbF9GcmFnRGF0YSwgb3IgdXNlci1kZWNsYXJlZAogICAgICArIDEuNTA6IG1hdGNoIGJldHdlZW4gYWxsIGV4cGxpY2l0IGlucHV0IGFycmF5IHNpemVzIGFuZCBpbnB1dCBwcmltaXRpdmUKICAgICAgKyAxLjUwOiBhdCBsZWFzdCBvbmUgZ2VvbWV0cnkgc2hhZGVyIHNheXMgaW5wdXQgcHJpbWl0aXZlIGFuZCBhdCBsZWFzdCBvbmUgc2F5cyBvdXRwdXQgcHJpbWl0aXZlLi4uCiAgICAgICsgMS41MDogYXQgbGVhc3Qgb25lIGdlb21ldHJ5IHNoYWRlciBzYXlzIG1heF92ZXJ0aWNlcy4uLgogICAgICArIDEuNTA6IG9yaWdpbl91cHBlcl9sZWZ0IGFuZCBwaXhlbF9jZW50ZXJfaW50ZWdlciBoYXZlIHRvIG1hdGNoCiAgICAgIC0gRXZlbiB0aGUgcG90ZW50aWFsIGZvciByZWN1cnNpb24gdGhyb3VnaCBzdWJyb3V0aW5lIHVuaWZvcm1zIGlzIGFuIGVycm9yLgoJICAtIDQuNDogQW4gaW50ZXJmYWNlIGNvbnRhaW5zIHR3byBkaWZmZXJlbnQgYmxvY2tzLCBlYWNoIHdpdGggbm8gaW5zdGFuY2UgbmFtZSwgd2hlcmUgdGhlIGJsb2NrcyBjb250YWluIGEgbWVtYmVyIHdpdGggdGhlIHNhbWUgbmFtZS4KCSAgLSA0LjQ6IGNvbXBvbmVudCBhbGlhc2luZyAoZXhjZXB0IGRlc2t0b3AgdmVydGV4IHNoYWRlciBpbnB1dHMpCiAgICAgIC0gNC40OiBvdmVybGFwcGluZyB0cmFuc2Zvcm0vZmVlZGJhY2sgb2Zmc2V0cywgb2Zmc2V0L3N0cmlkZSBvdmVyZmxvdyBjaGVja3MsIGFuZCBzdHJpZGUgbWF0Y2hpbmcKICAgIEludHJhLXN0YWdlIGxpbmtpbmcsIG11bHRpcGxlIHNoYWRlciAoTm9uLUVTKQogICAgICArIHR5cGUgY29uc2lzdGVuY3kgY2hlY2sgb2YgdW5pZm9ybXMsIGdsb2JhbHMsIGlucywgYW5kIG91dHMKICAgICAgKyB2YWx1ZSBjaGVja2luZyBvZiBnbG9iYWwgY29uc3QgaW5pdGlhbGl6ZXJzCiAgICAgICsgdmFsdWUgY2hlY2tpbmcgb2YgdW5pZm9ybSBpbml0aWFsaXplcnMKICAgICAgKyBsb2NhdGlvbiBtYXRjaAogICAgICAtIGJsb2NrIG1hdGNoaW5nCiAgICAgIC0gY29tcG9uZW50L2JpbmRpbmcvaW5kZXgvb2Zmc2V0IG1hdGNoIGNoZWNrCiAgICAgIC0gY29tcHV0ZSBzaGFkZXIgbGF5b3V0KGxvY2FsX3NpemVfKikgbWF0Y2hpbmcKICAgICAgKyBtaXhlZCBlcy9ub24tZXMgcHJvZmlsZXMgYXJlIGFuIGVycm9yCiAgICAgIC0gbWF0Y2hpbmcgcmVkZWNsYXJhdGlvbnMgb2YgaW50ZXJmYWNlIGJsb2NrcwogICAgICAtIDQuMzogZWFybHlfZnJhZ21lbnRfdGVzdHMgY29udHJhZGljdGlvbnMKICAgICAgLSA0LjM6IGltcGxpY2l0IGFycmF5IHNpemluZyBpcyBjcm9zcyBzaGFkZXIgd2l0aGluIGEgc3RhZ2UKCSAgLSA0LjQ6IElmIGdsX0ZyYWdDb29yZCBpcyByZWRlY2xhcmVkIGluIGFueSBmcmFnbWVudCBzaGFkZXIgaW4gYSBwcm9ncmFtLCBpdCBtdXN0IGJlIHJlZGVjbGFyZWQgaW4gYWxsIHRoZSBmcmFnbWVudCBzaGFkZXJzIGluIHRoYXQgcHJvZ3JhbSB0aGF0IGhhdmUgYSBzdGF0aWMgdXNlIGdsX0ZyYWdDb29yZAoKU2hhZGVyIEZ1bmN0aW9uYWxpdHkgdG8gSW1wbGVtZW50L0ZpbmlzaAogICAgRVNTTCAyLjAgKCN2ZXJzaW9uIDEwMCkKICAgICAgKyBpbXBsZW1lbnQgbm9uLWluZHVjdGl2ZSBsb29wIGxpbWl0YXRpb24gZGV0ZWN0aW9uCiAgICAgICsgaW1wbGVtZW50IG5vbi1pbmR1Y3RpdmUgYXJyYXkgYWNjZXNzZXMgbGltaXRhdGlvbiBkZXRlY3Rpb24KICAgIEVTU0wgMy4wCiAgICAgIC0gImNvbnN0IiBjb21waWxlLXRpbWUgY29uc3RhbnQgcHJvcGFnYXRpb24gaW4gdGhlIGZyb250LWVuZCBoYXMgdG8gYmUgY29tcGxldGUsIGZvciBhbGwgYnVpbHQtaW4gZnVuY3Rpb25zCiAgICBHTFNMIDEuMgogICAgICArIEhhbmRsZSBtdWx0aXBsZSBjb21waWxhdGlvbiB1bml0cyBwZXIgc3RhZ2UKICAgICAgKyBBbGxvdyBpbml0aWFsaXplcnMgb24gdW5pZm9ybSBkZWNsYXJhdGlvbnMKICAgICAgKyBzaWduYXR1cmUgbWF0Y2hpbmcgdGFrZXMgdHlwZSBjb252ZXJzaW9ucyBpbnRvIGFjY291bnQsIGFtYmlndWl0eSBpcyBhbiBlcnJvcgogICAgICAtIGJ1ZzogYWxsb3cgY29uc3RydWN0b3JzIHRvIGNvbnRhaW4gbm9uLWRlcmVmZXJlbmNlZCBhcnJheXM/CiAgICBHTFNMIDEuMwogICAgICArIGZsYXQgcmVkZWNsYXJhdGlvbiBvZiBidWlsdC1pbiB2YXJpYWJsZXMKICAgICAgLSBQcmVwcm9jZXNzb3IgdG9rZW4gcGFzdGluZyAoIyMpLCAjIyBkb2VzIG1hY3JvIGV4cGFuc2lvbiBhZnRlciBwYXN0aW5nIG5vdCBiZWZvcmUKICAgICAgKyBub24tcGVyc3BlY3RpdmUgKGxpbmVhcikgaW50ZXJwb2xhdGlvbiAobm9wZXJzcGVjdGl2ZSkKICAgICAgKyBhZGQgZ2xfQ2xpcERpc3RhbmNlW10gdG8gYm90aCB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMKICAgICAgKyBEZXByZWNhdGVkIGdsX0NsaXBWZXJ0ZXgKICAgICAgKyBkZXByZWNhdGUgYWxtb3N0IGFsbCBidWlsdC1pbiBzdGF0ZQogICAgICArIGZ0cmFuc2Zvcm0oKSBpcyBkZXByZWNhdGVkCiAgICAgICsgRGVwcmVjYXRlZCBidWlsdC1pbiB2ZXJ0ZXggaW5wdXRzIChhdHRyaWJ1dGVzKSBhbmQgc29tZSBvdXRwdXRzICh2YXJ5aW5ncykuCiAgICBHTFNMIDEuNCAoTm9uLUVTKQogICAgICArIHRyYWNrIGFzIHJlbW92ZWQgaW4gdGhpcyByZWxlYXNlLCBidXQgcHJlc2VudCBpbiBvdGhlcnM6CiAgICAgICAgKyBVc2Ugb2YgZ2xfQ2xpcFZlcnRleC4gIFVzZSBnbF9DbGlwRGlzdGFuY2UgaW5zdGVhZC4KICAgICAgICArIEJ1aWx0LWluIHZlcnRleCBzaGFkZXIgaW5wdXRzLgogICAgICAgICsgQnVpbHQtaW4gdW5pZm9ybXMgZXhjZXB0IGZvciBkZXB0aCByYW5nZSBwYXJhbWV0ZXJzCiAgICAgICAgKyBCdWlsdC1pbiBpbnRlcmZhY2UgYmV0d2VlbiB2ZXJ0ZXggYW5kIGZyYWdtZW50OiAgZ2xfVGV4Q29vcmQsIGdsX0ZvZ0ZyYWdDb29yZCwgYW5kIGFsbCB0aGUgY29sb3IgdmFsdWVzLgogICAgICAgICsgQnVpbHQtaW4gdHdvLXNpZGVkIGNvbG9yaW5nLgogICAgICAgICsgRml4ZWQgZnVuY3Rpb25hbGl0eSBmb3IgYSBwcm9ncmFtbWFibGUgc3RhZ2UuIAogICAgICAgICsgZnRyYW5zZm9ybSgpLiAgVXNlIGludmFyaWFudCBvdXRwdXRzIGluc3RlYWQuCiAgICBHTFNMIDEuNSAoTm9uLUVTKQogICAgICAtIERlcHJlY2F0ZWQgZ2xfTWF4VmFyeWluZ0NvbXBvbmVudHMKICAgICAgKyBBZGQgbmV3IG1pbmltdW0gbWF4aW11bXMgZm9yIGdsX01heFZlcnRleE91dHB1dENvbXBvbmVudHMsIGdsX01heEdlb21ldHJ5SW5wdXRDb21wb25lbnRzLCBnbF9NYXhHZW9tZXRyeU91dHB1dENvbXBvbmVudHMsIGFuZCBnbF9NYXhGcmFnbWVudElucHV0Q29tcG9uZW50cywgCiAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGdsX01heFZhcnlpbmdDb21wb25lbnRzLiAgQWxzbywgY29ycmVjdGVkIGdsX01heFZhcnlpbmdDb21wb25lbnRzIHRvIGJlIDYwIGluc3RlYWQgb2YgNjQuCiAgICAgICsgQWRkZWQgZ2xfUHJpbWl0aXZlSUQgYXMgYW4gaW5wdXQgdG8gZnJhZ21lbnQgc2hhZGVycy4KICAgICAgKyBBZGRlZCBnbF9GcmFnQ29vcmQgcXVhbGlmaWVycyBvcmlnaW5fdXBwZXJfbGVmdCwgYW5kIHBpeGVsX2NlbnRlcl9pbnRlZ2VyIHRvIG1vZGlmeSB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IGdsX0ZyYWdDb29yZCAoYW5kIGhhdmUgbm8gYWZmZWN0IG9uIGFueSBvdGhlciBhc3BlY3Qgb2YgdGhlIHBpcGVsaW5lIG9yIGxhbmd1YWdlKS4KICAgICAgICArIGluY2x1ZGluZyByZWRlY2xhcmF0aW9uIG9mIGdsX0ZyYWdDb29yZCB0aGF0IGFkZHMgbm90aGluZwogICAgICAtIEFkZGVkIHN1cHBvcnQgZm9yIG11bHRpLXNhbXBsZSB0ZXh0dXJlcyB0aHJvdWdoIHNhbXBsZXIyRE1TIGFuZCBzYW1wbGVyMkRNU0FycmF5IHN1cHBvcnQgaW4gdGV4ZWxGZXRjaCgpIGFuZCB0ZXh0dXJlU2l6ZSgpLgogICAgICArIEJyb2FkZW5lZCBpbnRlcmZhY2UgYmxvY2tzIGZyb20ganVzdCB1bmlmb3JtcyB0byBpbiBhbmQgb3V0IGludGVyZmFjZXMgYXMgd2VsbC4KICAgICAgKyBCcm9hZGVuIGFycmF5IHVzYWdlIHRvIGluY2x1ZGUgdmVydGV4IHNoYWRlciBpbnB1dHMgKHZlcnRleCBpbikuCiAgICAgICsgQWRkZWQgZ2VvbWV0cnkgc2hhZGVycy4gIFRoaXMgaW5jbHVkZXMgdGFyZ2V0aW5nIGxheWVycyBpbiBGQk8gcmVuZGVyaW5nLgogICAgICArIGdlb21ldHJ5IHNoYWRlciBsYXlvdXRzOiB0aGV5IG11c3QgYmUgZGVjbGFyZWQsIHRlbGxpbmcgdGhlIHN5c3RlbSB0aGUgcHJpbWl0aXZlIGlucHV0IGFuZCBvdXRwdXQgdHlwZXMgYW5kIG1heGltdW0gbnVtYmVyIG9mIHZlcnRpY2VzLgogICAgICArIEFkZGVkIGdlb21ldHJ5IHNoYWRlciBjb25zdGFudHMuCiAgICAgICsgQnJvYWRlbiBzdHJ1Y3R1cmUgdXNhZ2UgdG8gaW5jbHVkZSBnZW9tZXRyeSBpbnB1dHMgYW5kIGdlb21ldHJ5IG91dHB1dHMuCiAgICAgICsgdGV4ZWwgb2Zmc2V0IGxpbWl0IGNoZWNraW5nCiAgICAgICsgMS41MDogZ2VvbWV0cnkgc2hhZGVyczogbWF4X3ZlcnRpY2VzIG11c3QgYmUgY2hlY2tlZCBhZ2FpbnN0IGdsX01heEdlb21ldHJ5T3V0cHV0VmVydGljZXMgKG1heWJlIGF0IGNvbXBpbGUgdGltZSkKICAgIEdMU0wgNC4wCiAgICAgIC0gdGVzc2VsbGF0aW9uIGNvbnRyb2wgc3RhZ2UgYW5kIHRlc3NlbGxhdGlvbiBldmFsdWF0aW9uIHN0YWdlLiBJbmNsdWRlcyBiYXJyaWVyKCkgYnVpbHQtaW4gZm9yIHN5bmNocm9uaXphdGlvbi4KICAgICAgICAtIHBhdGNoIGluLCBwYXRjaCBvdXQKICAgICAgICAtIGlucHV0L291dHB1dCBhcnJheXMKICAgICAgICAgIC0gdW5zaXplZCBhcnJheSBzaXppbmcgdG8gZ2xfTWF4UGF0Y2hWZXJ0aWNlcywgaW5jbHVkaW5nIGdsX2luL2dsX291dAogICAgICAgIC0gYnVpbHQtaW4gdmFyaWFibGVzLCBmdW5jdGlvbnMsIGFuZCBjb25zdGFudHMgdmVyaWZpY2F0aW9uCiAgICAgICAgLSBsYXlvdXQgcXVhbGlmaWVycyBmb3IgcHJpbWl0aXZlIHR5cGVzCiAgICAgIC0gUG9seW1vcnBoaWMgZnVuY3Rpb25zOiBSdW4tdGltZSBzZWxlY3Rpb24gb2Ygd2hhdCBmdW5jdGlvbiBnZXRzIGNhbGxlZCwgdGhyb3VnaCB0aGUgbmV3IGtleXdvcmQgc3Vicm91dGluZS4KICAgICAgLSA2NGJpdCBmbG9hdGluZyBwb2ludCBudW1iZXJzIHdpdGggdGhlIG5ldyB0eXBlIGtleXdvcmQgZG91YmxlLiAgQnVpbHQtaW4gZnVuY3Rpb25zIGV4dGVuZGVkIGZvciBkb3VibGVzLCBhbmQgbmV3IGZ1bmN0aW9uIG1hdGNoaW5nIHJ1bGVzIGFyZSBhZGRlZCB0byBib3RoIGFsbG93IGltcGxpY2l0IGNvbnZlcnNpb25zIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIGFuZCBwcmVzZXJ2ZSBtb3N0IGV4aXN0aW5nIGZ1bmN0aW9uIG1hdGNoaW5nIG9uY2UgZG91YmxlcyBhcmUgaW5jbHVkZWQuIAogICAgICArIE1vcmUgaW1wbGljaXQgY29udmVyc2lvbnMKICAgICAgICAgKyBmbG9hdCB0byBkb3VibGUsIGFuZCBzaW1pbGFybHkgZm9yIGFsbCBmbG9hdGluZy1wb2ludCB2ZWN0b3IgYW5kIG1hdHJpeCB0eXBlcwogICAgICAgICArIGludCB0byB1aW50LCBhbmQgc2ltaWxhcmx5IGZvciBhbGwgaW50ZWdlciB2ZWN0b3IgdHlwZXMKICAgICAgICAgKyBpbnQgdG8gZG91YmxlLCBhbmQgc2ltaWxhcmx5IGZvciBhbGwgdmVjdG9ycyBvZiBpbnRlZ2VycyBhbmQgZG91Ymxlcy4KICAgICAgICAgKyB1aW50IHRvIGRvdWJsZSwgYW5kIHNpbWlsYXJseSBmb3IgYWxsIHZlY3RvcnMgb2YgaW50ZWdlcnMgYW5kIGRvdWJsZXMuCiAgICAgIC0gQ3ViZSBtYXAgYXJyYXkgdGV4dHVyZXMgYW5kIHRleHR1cmUgZnVuY3Rpb25zIHRleHR1cmUoKSwgdGV4dHVyZVNpemUoKSwgdGV4dHVyZUxvZCgpLCBhbmQgdGV4dHVyZUdyYWQoKS4KICAgICAgLSBTYW1wbGVyIGFycmF5cyBjYW4gdGFrZSBhIHZhcmlhYmxlIGluZGV4IG5vdywgYXMgbG9uZyBhcyBpdCdzIHZhbHVlIGlzIHVuaWZvcm0gZm9yIGFsbCB1c2VzLgogICAgICAtIFBlci1zYW1wbGUgc2hhZGluZy4gSW5jbHVkaW5nIHNhbXBsZSBpbnB1dCBtYXNrIGdsX1NhbXBsZU1hc2tJbltdIGFuZCBwZXItc2FtcGxlIGludGVycG9sYXRpb24sIHdpdGggZXhwbGljaXQgaW50ZXJwb2xhdGlvbiBidWlsdC1pbnMgaW50ZXJwb2xhdGVBdENlbnRyb2lkKCksIGludGVycG9sYXRlQXRTYW1wbGUoKSwgYW5kIGludGVycG9sYXRlQXRPZmZzZXQoKS4KICAgICAgLSBOZXcgcHJlY2lzZSBxdWFsaWZpZXIgdG8gZGlzYWxsb3cgb3B0aW1pemF0aW9ucyB0aGF0IHJlLW9yZGVyIG9wZXJhdGlvbnMgb3IgdHJlYXQgZGlmZmVyZW50IGluc3RhbmNlcyBvZiB0aGUgc2FtZSBvcGVyYXRvciB3aXRoIGRpZmZlcmVudCBwcmVjaXNpb24uCiAgICAgIC0gQWRkIGEgZnVzZWQgbXVsdGlwbHkgYW5kIGFkZCBidWlsdC1pbiwgZm1hKCksIGluIHJlbGF0aW9uIHRvIHRoZSBuZXcgcHJlY2lzZSBxdWFsaWZpZXIuIChCZWNhdXNlIJNhICogYiArIGOUIHdpbGwgcmVxdWlyZSB0d28gb3BlcmF0aW9ucyB1bmRlciBuZXcgcnVsZXMgZm9yIHByZWNpc2UuKQogICAgICAtIEFkZGVkIG5ldyBidWlsdC1pbiBmbG9hdGluZy1wb2ludCBmdW5jdGlvbnMgCiAgICAgICAgIC0gZnJleHAoKSBhbmQgbGRleHAoKQogICAgICAgICAtIHBhY2tVbm9ybTJ4MTYoKSwgcGFja1Vub3JtNHg4KCkscGFja1Nub3JtNHg4KCksIGFuZCBwYWNrRG91YmxlMngzMigpCiAgICAgICAgIC0gdW5wYWNrVW5vcm0yeDE2KCksIHVucGFja1Vub3JtNHg4KCksdW5wYWNrU25vcm00eDgoKSwgYW5kIHVucGFja0RvdWJsZTJ4MzIoKQogICAgICAtIEFkZCBuZXcgYnVpbHQtaW4gaW50ZWdlciBmdW5jdGlvbnMKICAgICAgICAgLSB1YWRkQ2FycnkoKSBhbmR1c3ViQm9ycm93KCkKICAgICAgICAgLSB1bXVsRXh0ZW5kZWQoKSBhbmRpbXVsRXh0ZW5kZWQoKQogICAgICAgICAtIGJpdGZpZWxkRXh0cmFjdCgpIGFuZGJpdGZpZWxkSW5zZXJ0KCkKICAgICAgICAgLSBiaXRmaWVsZFJldmVyc2UoKQogICAgICAgICAtIGJpdENvdW50KCksZmluZExTQigpLCBhbmRmaW5kTVNCKCkKICAgICAgLSBOZXcgYnVpbHQtaW4gdG8gcXVlcnkgTE9ELCB0ZXh0dXJlUXVlcnlMb2QoKS4KICAgICAgLSBOZXcgb3ZlcmxvYWRlZCBmdW5jdGlvbiBtYXRjaGluZyBhbGdvcml0aG0sIGhhbmRsaW5nIHNlbGVjdGlvbiBmcm9tIG1hbnkgdmFsaWQgbXVsdGlwbGUgY2hvaWNlcy4KICAgICAgKyBUZXh0dXJlIGdhdGhlciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gZm91ciB0ZXhlbHMgd2l0aCBhIHNpbmdsZSBjYWxsLgogICAgICAgICArIHRleHR1cmVHYXRoZXIoKQogICAgICAgICArIHRleHR1cmVHYXRoZXJPZmZzZXQoKQogICAgICAgICArIHRleHR1cmVHYXRoZXJPZmZzZXRzKCkKICAgICAgKyBBZGQgc3RyZWFtcyBvdXQgZnJvbSBnZW9tZXRyeSBzaGFkZXIuIE91dHB1dCBjYW4gYmUgZGlyZWN0ZWQgdG8gc3RyZWFtcyB0aHJvdWdoCiAgICAgICAgICsgRW1pdFN0cmVhbVZlcnRleCgpIGFuZCBFbmRTdHJlYW1QcmltaXRpdmUoKS4KICAgIEdMU0wgNC4xCiAgICAgIC0gU3VwcG9ydCBmb3IgcGFydGl0aW9uaW5nIHNoYWRlcnMgaW50byBtdWx0aXBsZSBwcm9ncmFtcyB0byBwcm92aWRlIGxpZ2h0LXdlaWdodCBtaXhpbmcgb2YgZGlmZmVyZW50IHNoYWRlciBzdGFnZXMuCiAgICAgICAgICAgIChHTF9BUkJfc2VwYXJhdGVfc2hhZGVyX29iamVjdHMpCiAgICAgICAgLSBsYXlvdXQgcXVhbGlmaWVycwogICAgICAgIC0gcmVkZWNsYXJhdGlvbiBvZiBpbnB1dC9vdXRwdXQgYmxvY2tzCiAgICAgICAgLSAuLi4KICAgICAgLSBBZGQgNjQtYml0IGZsb2F0aW5nLXBvaW50IGF0dHJpYnV0ZXMgZm9yIHZlcnRleCBzaGFkZXIgaW5wdXRzLgogICAgICArIFN1cHBvcnQgdmlld3BvcnQgYXJyYXlzIHNvIHdoZXJlIHRoZSBnZW9tZXRyeSBzaGFkZXIgc2VsZWN0cyB3aGljaCB2aWV3cG9ydCBhcnJheSB3aWxsIHRyYW5zZm9ybSBpdHMgb3V0cHV0LgogICAgR0xTTCA0LjIKICAgICAgKyBNb3ZlIHRoZXNlIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBmZWF0dXJlcyB0byBiZSBvbmx5IGluIHRoZSBjb21wYXRpYmlsaXR5IHByb2ZpbGU6CiAgICAgICAgKyBUaGUga2V5d29yZCBhdHRyaWJ1dGUgZm9yIHZlcnRleCBzaGFkZXIgaW5wdXRzLiAoVXNlIGluIGluc3RlYWQuKQogICAgICAgICsgVGhlIGtleXdvcmQgdmFyeWluZyBmb3IgaW5wdXRzIGFuZCBvdXRwdXRzLiAoVXNlIGluIGFuZCBvdXQgaW5zdGVhZC4pCiAgICAgICAgKyBUaGUgb3JpZ2luYWwgdGV4dHVyaW5nIGJ1aWx0LWluIGZ1bmN0aW9ucy4gKFVzZSB0aGUgbmV3IGZvcm1zIGluc3RlYWQuKQogICAgICAgICsgVGhlIGJ1aWx0LWluIHZhcmlhYmxlcyBnbF9GcmFnQ29sb3IgYW5kIGdsX0ZyYWdEYXRhLiAoVXNlIG91dCBpbnN0ZWFkLikKICAgICAgICArIEJ1aWx0LWluIGNvbnN0YW50cyByZWxhdGVkIHRvIHRoZXNlLgogICAgICArIENoYW5nZSBmcm9tIEFTQ0lJIHRvIFVURi04IGZvciB0aGUgbGFuZ3VhZ2UgY2hhcmFjdGVyIHNldCBhbmQgYWxzbyBhbGxvdyBhbnkgY2hhcmFjdGVycyBpbnNpZGUgY29tbWVudHMgKGV4Y2VwdCB0aGUgYnl0ZSB2YWx1ZSAwKSwgCiAgICAgICAgaW5jbHVkaW5nICdcJy4KICAgICAgKyBBZGQgbGluZS1jb250aW51YXRpb24gdXNpbmcgJ1wnLCBhcyBpbiBDKysuCiAgICAgICsgRVMgY29udmVyZ2VuY2UKICAgICAgICArIENsYXJpZnkgdGhhdCAueHl6d3h5Lnh5IGlzIGlsbGVnYWwsIGFzIGl0IHRlbXBvcmFyaWx5IG1ha2VzIGEgk3ZlYzaULgogICAgICAgICsgQ2xhcmlmeSB0aGF0IHJldHVybiBzdGF0ZW1lbnRzIG9ubHkgYWNjZXB0IHZhbHVlcyAobm8gcmV0dXJuIG9mIGEgdm9pZCBmdW5jdGlvbikuCiAgICAgIC0gQWRkIGltYWdlIHR5cGVzIChHTF9BUkJfc2hhZGVyX2ltYWdlX2xvYWRfc3RvcmUpCiAgICAgICAgKyAzMyBuZXcgdHlwZXMsIGFsbCB3aXRoIJNpbWFnZZQgaW4gdGhlaXIgbmFtZSwgY29ycmVzcG9uZCB0byB0aGUgbm9uLXNoYWRvdyB0ZXh0dXJlIHR5cGVzCiAgICAgICAgKyBhZGRpdGlvbiBvZiBtZW1vcnkgcXVhbGlmaWVyczogY29oZXJlbnQsdm9sYXRpbGUsIHJlc3RyaWN0LCByZWFkb25seSwgYW5kIHdyaXRlb25seQogICAgICAgIC0gY2FuIHJlYWQvd3JpdGUvbW9kaWZ5IGltYWdlcyBmcm9tIGEgc2hhZGVyLCB0aHJvdWdoIG5ldyBidWlsdC1pbiBmdW5jdGlvbnMKICAgICAgICAtIHF1YWxpZmllcnMgY2FuIGFjdCBpbmRlcGVuZGVudGx5IG9uIHRoZSBvcGFxdWUgc2hhZGVyIHZhcmlhYmxlIGFuZCB0aGUgYmFja2luZyBpbWFnZSwgc28gZXh0cmEgcXVhbGlmaWVycyBjYW4gYmUgdXNlZCB0byBzZXBhcmF0ZWx5IHF1YWxpZnkgdGhlc2UKICAgICAgKyBWYXJpYWJsZXMgZGVjbGFyZWQgaW4gaWYgYW5kIGVsc2Ugc3RhdGVtZW50cyBhcmUgc2NvcGVkIG9ubHkgdG8gdGhlIGVuZCBvZiB0aG9zZSBzdGF0ZW1lbnRzLCBlc3BlY2lhbGx5IGZvciBub24tY29tcG91bmQgc3RhdGVtZW50cwogICAgICAgIE5vdGUsIHRoaXMgaXMgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUsIGl0IG1heSBkZXBlbmQgb24gI3ZlcnNpb24uCiAgICAgIC0gQWxsb3cgaW1wbGljaXQgY29udmVyc2lvbnMgb2YgcmV0dXJuIHZhbHVlcyB0byB0aGUgZGVjbGFyZWQgdHlwZSBvZiB0aGUgZnVuY3Rpb24uCiAgICAgICsgVGhlIGNvbnN0IGtleXdvcmQgY2FuIGJlIHVzZWQgdG8gZGVjbGFyZSB2YXJpYWJsZXMgd2l0aGluIGEgZnVuY3Rpb24gYm9keSB3aXRoIGluaXRpYWxpemVyIGV4cHJlc3Npb25zIHRoYXQgYXJlIG5vdCBjb25zdGFudCBleHByZXNzaW9ucy4KICAgICAgKyBRdWFsaWZpZXJzIG9uIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBubyBsb25nZXIgaGF2ZSB0byBmb2xsb3cgYSBzdHJpY3Qgb3JkZXIuIFRoZSBsYXlvdXQgcXVhbGlmaWVyIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLCBhbmQgbXVsdGlwbGUgcGFyYW1ldGVyIHF1YWxpZmllcnMgY2FuIGJlIHVzZWQuCiAgICAgICsgUGFyYW1ldGVyIHF1YWxpZmllcnMgY2FuIGluY2x1ZGUgcHJlY2lzaW9uIGFuZCBtZW1vcnkgcXVhbGlmaWVycy4KICAgICAgLSBBZGQgYSBuZXcgYXRvbWljX3VpbnQgdHlwZSB0byBzdXBwb3J0IGF0b21pYyBjb3VudGVycy4gQWxzbywgYWRkIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW5nIGF0b21pYyBjb3VudGVycy4KICAgICAgICAtIGF0b21pY0NvdW50ZXJJbmNyZW1lbnQsIGF0b21pY0NvdW50ZXJEZWNyZW1lbnQsIGFuZCBhdG9taWNDb3VudGVyCiAgICAgIC0gQWRkIGxheW91dCBxdWFsaWZpZXIgaWRlbnRpZmllcnMgYmluZGluZyBhbmQgb2Zmc2V0IHRvIGJpbmQgdW5pdHMgdG8gc2FtcGxlciBhbmQgaW1hZ2UgdmFyaWFibGUgZGVjbGFyYXRpb25zLCBhdG9taWMgY291bnRlcnMsIGFuZCB1bmlmb3JtIGJsb2Nrcy4KICAgICAgLSBBZGQgYnVpbHQtaW4gZnVuY3Rpb25zIHRvIHBhY2svdW5wYWNrIDE2IGJpdCBmbG9hdGluZy1wb2ludCBudW1iZXJzIChBUkJfc2hhZGluZ19sYW5ndWFnZV9wYWNrMmYpLgogICAgICAgIC0gcGFja0hhbGYyeDE2IGFuZCB1bnBhY2tIYWxmMngxNgogICAgICAgIC0gcGFja1Nub3JtMngxNmFuZCB1bnBhY2tTbm9ybTJ4MTYKICAgICAgLSBBZGQgZ2xfRnJhZ0RlcHRoIGxheW91dCBxdWFsaWZpZXJzIHRvIGNvbW11bmljYXRlIHdoYXQga2luZCBvZiBjaGFuZ2VzIHdpbGwgYmUgbWFkZSB0byBnbF9GcmFnRGVwdGggKEdMX0FNRF9jb25zZXJ2YXRpdmUgZGVwdGgpLgogICAgICArIEFkZCBDLXN0eWxlIGN1cmx5IGJyYWNlIGluaXRpYWxpemVyIGxpc3RzIHN5bnRheCBmb3IgaW5pdGlhbGl6ZXJzLiBGdWxsIGluaXRpYWxpemF0aW9uIG9mIGFnZ3JlZ2F0ZXMgaXMgcmVxdWlyZWQgd2hlbiB0aGVzZSBhcmUgdXNlZC4KICAgICAgLSBBbGxvdyAubGVuZ3RoKCkgdG8gYmUgYXBwbGllZCB0byB2ZWN0b3JzIGFuZCBtYXRyaWNlcywgcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgY29tcG9uZW50cyBvciBjb2x1bW5zLgogICAgICArIENsYXJpZnkgdGhhdCAubGVuZ3RoKCkgcmV0dXJucyBhbiBpbnQgdHlwZSBhbmQgY2FuIGJlIHVzZWQgYXMgYSBjb25zdGFudCBpbnRlZ2VyIGV4cHJlc3Npb24uCiAgICAgICsgQWxsb3cgc3dpenpsZSBvcGVyYXRpb25zIG9uIHNjYWxhcnMuCiAgICAgIC0gUG9zaXRpdmUgc2lnbmVkIGRlY2ltYWwgbGl0ZXJhbHMsIGFzIHdlbGwgYXMgb2N0YWwgYW5kIGhleGFkZWNpbWFsLCBjYW4gc2V0IGFsbCAzMiBiaXRzLiBUaGlzIGluY2x1ZGVzIHNldHRpbmcgdGhlIHNpZ24gYml0IHRvIGNyZWF0ZSBhIG5lZ2F0aXZlIHZhbHVlLgogICAgICAtIE1ha2UgR0xTTCBjb25zaXN0ZW50IHdpdGggdGhlIEFQSSByZWdhcmRpbmcgdXNlciBjbGlwcGluZywgYnkgbm8gbG9uZ2VyIHJlZmVycmluZyB0byBnbF9Qb3NpdGlvbiB3aGVuIGdsX0NsaXBWZXJ0ZXggaXMgbm90IHdyaXR0ZW4uIFJhdGhlciwgdXNlciBjbGlwcGluZyBiZWNvbWVzIHVuZGVmaW5lZC4KICAgICAgLSBDbGFyaWZpZWQgdGhhdCBhIGNvbW1hIHNlcXVlbmNlLW9wZXJhdG9yIGV4cHJlc3Npb24gY2Fubm90IGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbi4gRS5nLiwgkygyLDMplCBpcyBub3QgYWxsb3dlZCwgc2VtYW50aWNhbGx5LCAKICAgICAgICAgICAgYXMgYSB2YWxpZCBjb25zdGFudCBleHByZXNzaW9uIDMsIGV2ZW4gdGhvdWdoIGl0IGlzIGFuIGV4cHJlc3Npb24gdGhhdCB3aWxsIGV2YWx1YXRlIHRvIDMuCiAgICAgICsgVXNlIHZlYzIgaW5zdGVhZCBvZiB2ZWMzIGZvciBjb29yZGluYXRlIGluIHRleHR1cmVHYXRoZXIqKHNhbXBsZXIyRFJlY3QsLi4uKS4KICAgICAgKyBDbGFyaWZ5IHRoYXQgdGV4dHVyZUdhdGhlck9mZnNldCgpIGNhbiB0YWtlIG5vbi1jb25zdGFudHMgZm9yIHRoZSBvZmZzZXRzLgogICAgR0xTTCA0LjMKICAgICAgLSBBZGQgc2hhZGVyIHN0b3JhZ2UgYnVmZmVyIG9iamVjdHMsIGFzIHBlciB0aGUgQVJCX3NoYWRlcl9zdG9yYWdlX2J1ZmZlcl9vYmplY3QgZXh0ZW5zaW9uLiBUaGlzIGluY2x1ZGVzIAogICAgICAgICAgICAtIGFsbG93aW5nIHRoZSBsYXN0IG1lbWJlciBvZiBhIHN0b3JhZ2UgYnVmZmVyIGJsb2NrIHRvIGJlIGFuIGFycmF5IHRoYXQgZG9lcyBub3Qga25vdyBpdHMgc2l6ZSB1bnRpbCByZW5kZXIgdGltZQogICAgICAgICAgICAtIHJlYWQvd3JpdGUgbWVtb3J5IHNoYXJlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbiBhbmQgb3RoZXIgc2hhZGVyIGludm9jYXRpb25zCiAgICAgICAgICAgIC0gYWRkaW5nIHRoZSBzdGQ0MzAgbGF5b3V0IHF1YWxpZmllciBmb3Igc2hhZGVyIHN0b3JhZ2UgYmxvY2tzCiAgICAgIC0gQWxsb3cgLmxlbmd0aCgpIG9uIGFsbCBhcnJheXM7IHJldHVybmluZyBhIGNvbXBpbGUtdGltZSBjb25zdGFudCBvciBub3QsIGRlcGVuZGluZyBvbiBob3cgdGhlIAogICAgICAgIGFycmF5IGlzIHNpemVkLCBhcyBwZXIgdGhlIEFSQl9zaGFkZXJfc3RvcmFnZV9idWZmZXJfb2JqZWN0IGV4dGVuc2lvbi4KICAgICAgLSBCZSBjbGVhciB0aGF0IGltcGxpY2l0IGFycmF5IHNpemluZyBpcyBvbmx5IHdpdGhpbiBhIHN0YWdlLCBub3QgY3Jvc3Mgc3RhZ2UuCiAgICAgIC0gQXJyYXkgY2xhcmlmaWNhdGlvbnM6IAogICAgICAgICAgICAtIEFsbCBhcnJheXMgYXJlIGluaGVyZW50bHkgaG9tb2dlbmVvdXMsIGV4Y2VwdCBmb3IgYXJyYXlzIG9mIHRoZSBuZXcgc2hhZGVyIHN0b3JhZ2UgYnVmZmVyIG9iamVjdHMKICAgICAgICAgICAgLSBBcnJheXMgb2Ygc2hhZGVyIHN0b3JhZ2UgYnVmZmVyIG9iamVjdHMgd2lsbCBiZSBkZXJlZmVyZW5jZWQgd2hlbiB0aGUgLmxlbmd0aCgpIG1ldGhvZCBpcyB1c2VkIG9uIGFuIHVuc2l6ZWQgYXJyYXkgCiAgICAgICAgICAgICAgICBtZW1iZXIsIHNvIHRoYXQgbXVzdCBhIGhhdmUgdmFsaWQgaW5kZXguIAogICAgICAgICAgICAtIEFycmF5cyBvZiBvdGhlciBvYmplY3RzICh1bmlmb3JtIGJsb2NrcykgY29udGFpbmluZyBpbXBsaWNpdGx5IHNpemVkIGFycmF5cyB3aWxsIGhhdmUgdGhlIHNhbWUgaW1wbGljaXQgc2l6ZSBmb3IgYWxsIAogICAgICAgICAgICAgICAgZWxlbWVudHMgb2YgdGhlIGFycmF5LgogICAgICAtIEFycmF5cyBvZiBhcnJheXMgYXJlIG5vdyBzdXBwb3J0ZWQsIGFzIHBlciB0aGUgR0xfQVJCX2FycmF5c19vZl9hcnJheXMgZXh0ZW5zaW9uLgogICAgICAtIENvbXB1dGUgc2hhZGVycyBhcmUgbm93IHN1cHBvcnRlZCwgYXMgcGVyIHRoZSBHTF9BUkJfY29tcHV0ZV9zaGFkZXIgZXh0ZW5zaW9uLgogICAgICAtIEFkZGVkIGltYWdlU2l6ZSgpIGJ1aWx0LWlucyB0byBxdWVyeSB0aGUgZGltZW5zaW9ucyBvZiBhbiBpbWFnZS4KICAgICAgLSBEZWZpbmUgcm9idXN0IG91dC1vZi1ib3VuZHMgYWNjZXNzIGJlaGF2aW9yIHdoZW4gZW5hYmxlZCwgYXMgcGVyIHRoZSBHTF9BUkJfcm9idXN0X2J1ZmZlcl9hY2Nlc3NfYmVoYXZpb3IgZXh0ZW5zaW9uLgogICAgICAtIEFsbCBjaG9pY2Ugb2YgZGVwdGggb3Igc3RlbmNpbCB0ZXh0dXJpbmcsIGZvciBhIHBhY2tlZCBkZXB0aC1zdGVuY2lsIHRleHR1cmUsIGFzIHBlciB0aGUgCiAgICAgICAgR0xfQVJCX3N0ZW5jaWxfdGV4dHVyaW5nIGV4dGVuc2lvbi4KICAgICAgLSBBbGxvdyBleHBsaWNpdCBsb2NhdGlvbnMvaW5kZXhlcyB0byBiZSBhc3NpZ25lZCB0byB1bmlmb3JtIHZhcmlhYmxlcyBhbmQgc3Vicm91dGluZXMsIGFzIHBlciB0aGUgCiAgICAgICAgR0xfQVJCX2V4cGxpY2l0X3VuaWZvcm1fbG9jYXRpb24gZXh0ZW5zaW9uLgogICAgICAtIEFjY2VwdCBFUyBHTFNMIHNoYWRlciAjdmVyc2lvbiBzdGF0ZW1lbnRzLCB3aGljaCB3aWxsIHJlcXVlc3QgRVMgZnVuY3Rpb25hbGl0eSBmb3IgRVMgR0xTTCAKICAgICAgICB2ZXJzaW9ucyAxMDAgYW5kIDMwMCwgYXMgcGVyIHRoZSBHTF9BUkJfRVMzX2NvbXBhdGliaWxpdHkgZXh0ZW5zaW9uLgogICAgICAtIENsYXJpZnkgYW5kIGNvcnJlY3Qgc2NvcGluZyBydWxlcyB0byB3aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGV4cGVjdGVkIGFuZCB3aGF0IHdhcyBpbnRlbmRlZC4gCiAgICAgICAgKEZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIGJvZHkgbmVzdCBpbnNpZGUgZ2xvYmFsIHNwYWNlLiBMb29wIHZhcmlhYmxlcyBhbmQgYm9keSBuZXN0IGluc2lkZSAKICAgICAgICBsb29wIHNjb3BlLikKICAgICAgLSBUaGVyZSBhcmUgbm8gZGlncmFwaHMgKHRyaWdyYXBocyB3ZXJlIGFscmVhZHkgZGlzYWxsb3dlZCkuCiAgICAgIC0gUmVtb3ZlIHRoZSBDUFAgZGlmZmVyZW5jZSB0aGF0IGl0IGlzIGEgY29tcGlsZS10aW1lIGVycm9yIHRvIHVzZSAjaWYgb3IgI2VsaWYgb24gZXhwcmVzc2lvbnMgCiAgICAgICAgY29udGFpbmluZyB1bmRlZmluZWQgbWFjcm8gbmFtZXMuIFRoaXMgcmV2ZXJ0cyBiYWNrIHRvIGZvbGxvd2luZyBleHBlY3RlZCBDUFAgYmVoYXZpb3IuCiAgICAgIC0gU2V0IGJvdGggZ2xfTWF4RnJhZ21lbnRJbWFnZVVuaWZvcm1zYW5kIGdsX01heENvbWJpbmVkSW1hZ2VVbmlmb3JtcyB0byA4LgogICAgICAtIENsYXJpZnkgdGV4dHVyZVNpemUoKSBmb3IgY3ViZSBtYXAgYXJyYXlzLgogICAgICAtIEZvciBsYXlvdXQgcXVhbGlmaWVycywKICAgICAgICAgICAgLSBtYWtlIG5lZ2F0aXZlIG91dHB1dCBsb2NhdGlvbnMgYSBjb21waWxlLXRpbWUgZXJyb3IsIG9uY2UgaW50ZWdlciBleHByZXNzaW9ucyBhcmUgYWxsb3dlZCBpbiBsYXlvdXRzCiAgICAgICAgICAgIC0gbWFrZSBpbmRleGVzIG91dHNpZGUgdGhlIHJhbmdlIFswLDFdIGEgY29tcGlsZS10aW1lIGVycm9yLgogICAgICAtIEFkZCB0ZXh0dXJlUXVlcnlMZXZlbHMoKSBidWlsdC1pbnMgdG8gcXVlcnkgdGhlIG51bWJlciBvZiBtaXBtYXAgbGV2ZWxzLCBhcyBwZXIgdGhlIAogICAgICAgIEdMX0FSQl90ZXh0dXJlX3F1ZXJ5X2xldmVscyBleHRlbnNpb24uCiAgICAgICsgTWFrZSBnbF9MYXllciBhbmQgZ2xfVmlld3BvcnRJbmRleCBhbHNvIGJlIGlucHV0cyB0byB0aGUgZnJhZ21lbnQgc2hhZGVyLCBhcyBwZXIgdGhlIAogICAgICAgIEdMX0FSQl9mcmFnbWVudF9sYXllcl92aWV3cG9ydCBleHRlbnNpb24uCiAgICAgIC0gQWRkIG1vcmUgZXhhbXBsZXMgYW5kIHJ1bGVzIHRvIGJlIG1vcmUgc3BlY2lmaWMgYWJvdXQgdGhlIHJlcXVpcmVkIGJlaGF2aW9yIG9mIHRoZSBwcmVjaXNlIAogICAgICAgIHF1YWxpZmllci4KICAgICAgLSBDbGFyaWZ5IGZyYWdtZW50IG91dHB1dCB2YXJpYWJsZXMgY2Fubm90IGJlIGRvdWJsZSBwcmVjaXNpb24uCiAgICAgIC0gQWxsb3cgdGhlIG5ldyBzaGFyZWQga2V5d29yZCB0byBiZSBpbiBsYXlvdXQtcXVhbGlmaWVyLWlkLCBhbGxvd2luZyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IAogICAgICAgIHdpdGggdGhlIHNoYXJlZCBpZGVudGlmaWVyIHRoYXQgd2FzIHByZXZpb3VzbHkgdXNlZC4KICAgICAgKyBBZGRlZCBvdmVybG9va2VkIHRleHR1cmUgZnVuY3Rpb24gZmxvYXQgdGV4dHVyZU9mZnNldCAoc2FtcGxlcjJEQXJyYXlTaGFkb3cgc2FtcGxlciwgdmVjNCBQLCB2ZWMyIG9mZnNldCBbLCBmbG9hdCBiaWFzXSApLgogICAgICArIEFkZCBtaXNzaW5nIHR5cGUgaW4gZ3JhbW1hciwgQVRPTUlDX1VJTlQsIGFuZCBtaXNzaW5nIHF1YWxpZmllcnMgQ09IRVJFTlQsIFZPTEFUSUxFLCBSRVNUUklDVCwgUkVBRE9OTFksIGFuZCBXUklURU9OTFkuCiAgICAgIC0gZG8gdmVyc2lvbiBjaGVja2luZyBmb3IgdGhlIGFib3ZlCiAgICAgICsgQWRkIG1pc3NpbmcgaW5pdGlhbGl6ZXIgbGlzdHMgdG8gZ3JhbW1hci4KICAgIEdMU0wgNC40CiAgICAgIC0gSW5jb3Jwb3JhdGUgdGhlIEFSQl9lbmhhbmNlZF9sYXlvdXRzIGV4dGVuc2lvbiwgd2hpY2ggYWRkcwogICAgICAgIC0gY29tcGlsZS10aW1lIGNvbnN0YW50IGV4cHJlc3Npb25zIGZvciBsYXlvdXQgcXVhbGlmaWVyIGludGVnZXJzCiAgICAgICAgLSBuZXcgb2Zmc2V0IGFuZCBhbGlnbiBsYXlvdXQgcXVhbGlmaWVycyBmb3IgY29udHJvbCBvdmVyIGJ1ZmZlciBibG9jayBsYXlvdXRzCiAgICAgICAgLSBhZGQgbG9jYXRpb24gbGF5b3V0IHF1YWxpZmllciBmb3IgaW5wdXQgYW5kIG91dHB1dCBibG9ja3MgYW5kIGJsb2NrIG1lbWJlcnMKICAgICAgICAtIG5ldyBjb21wb25lbnRsYXlvdXQgcXVhbGlmaWVyIGZvciBmaW5lci1ncmFpbmVkIGxheW91dCBjb250cm9sIG9mIGlucHV0IGFuZCBvdXRwdXQgdmFyaWFibGVzIGFuZCBibG9ja3MKICAgICAgICAtIG5ldyB4ZmJfYnVmZmVyLCB4ZmJfc3RyaWRlLCBhbmQgeGZiX29mZnNldGxheW91dCBxdWFsaWZpZXJzIHRvIGFsbG93IHRoZSBzaGFkZXIgdG8gY29udHJvbCAKICAgICAgICAgIHRyYW5zZm9ybSBmZWVkYmFjayBidWZmZXJpbmcuCiAgICAgICsgQnVnIDEwNTMwOiBUbyBiZSBjb25zaXN0ZW50IHdpdGggRVMsIGluY2x1ZGUgc2FtcGxlIHR5cGVzIGFzIHZhbGlkIGluIGEgcHJlY2lzaW9uIHN0YXRlbWVudC4gCiAgICAgICAgTm90ZSB0aGUgZGVmYXVsdHMgYXJlIGlycmVsZXZhbnQsIGFzIHByZWNpc2lvbiBxdWFsaWZpZXJzIGFyZSBub3QgcmVxdWlyZWQgb3IgaGF2ZSBhbnkgbWVhbmluZy4KCg==