IyBTZXJ2ZXItc2lkZQo8cmVwbHk+CgojIHRoaXMgaXMgcmV0dXJuZWQgZmlyc3Qgc2luY2Ugd2UgZ2V0IG5vIHByb3h5LWF1dGgKPGRhdGExMDAxPgpIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQpQcm94eS1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQoNCkFuZCB5b3Ugc2hvdWxkIGlnbm9yZSB0aGlzIGRhdGEuCjwvZGF0YTEwMDE+CgojIFRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgcmV0dXJuZWQgd2hlbiB0aGUgc2VydmVyIGdldHMgdGhlIHNlY29uZAojIEF1dGhvcml6YXRpb246IE5UTE0gbGluZSBwYXNzZWQtaW4gZnJvbSB0aGUgY2xpZW50CjxkYXRhMTAwMj4KSFRUUC8xLjEgMjAwIFRoaW5ncyBhcmUgZmluZSBpbiBwcm94eSBsYW5kDQpTZXJ2ZXI6IE1pY3Jvc29mdC1JSVMvNS4wDQpDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xDQoNCjwvZGF0YTEwMDI+CgojIHRoaXMgaXMgcmV0dXJuZWQgd2hlbiB3ZSBnZXQgYSBHRVQhCjxkYXRhMj4KSFRUUC8xLjEgMjAwIE9LCkRhdGU6IFRodSwgMDkgTm92IDIwMTAgMTQ6NDk6MDAgR01UCkNvbnRlbnQtTGVuZ3RoOiA3CkNvbm5lY3Rpb246IGNsb3NlCkNvbnRlbnQtVHlwZTogdGV4dC9odG1sCkZ1bm55LWhlYWQ6IHllc3llcwoKZGFuaWVsCjwvZGF0YTI+CgojIHRoZW4gdGhpcyBpcyByZXR1cm5lZCB3aGVuIHdlIGdldCBwcm94/S1hdXRoCjxkYXRhMTAwMD4KSFRUUC8xLjEgMjAwIE9LIHN3c2JvdW5jZQ0KU2VydmVyOiBubwoNCk5pY2UgcHJveHkgYXV0aCBzaXIhCjwvZGF0YTEwMDA+Cgo8ZGF0YWNoZWNrPgpIVFRQLzEuMSA0MDcgQXV0aG9yaXphdGlvbiBSZXF1aXJlZCB0byBwcm94eSBtZSBteSBkZWFyDQpQcm94eS1BdXRoZW50aWNhdGU6IE5UTE0gVGxSTVRWTlRVQUFDQUFBQUFnQUNBREFBQUFBR2dvRUFjNTFBWVZEZ3lOY0FBQUFBQUFBQUFHNEFiZ0F5QUFBQVEwTUNBQVFBUXdCREFBRUFFZ0JGQUV3QVNRQlRBRUVBUWdCRkFGUUFTQUFFQUJnQVl3QmpBQzRBYVFCakFHVUFaQUJsQUhZQUxnQnVBSFVBQXdBc0FHVUFiQUJwQUhNQVlRQmlBR1VBZEFCb0FDNEFZd0JqQUM0QWFRQmpBR1VBWkFCbEFIWUFMZ0J1QUhVQUFBQUFBQT09DQoNCkhUVFAvMS4xIDIwMCBUaGluZ3MgYXJlIGZpbmUgaW4gcHJveHkgbGFuZA0KU2VydmVyOiBNaWNyb3NvZnQtSUlTLzUuMA0KQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMQ0KDQpIVFRQLzEuMSAyMDAgT0sKRGF0ZTogVGh1LCAwOSBOb3YgMjAxMCAxNDo0OTowMCBHTVQKQ29udGVudC1MZW5ndGg6IDcKQ29ubmVjdGlvbjogY2xvc2UKQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKRnVubnktaGVhZDogeWVzeWVzCgpkYW5pZWwKPC9kYXRhY2hlY2s+CjwvcmVwbHk+CgojIENsaWVudC1zaWRlCjxjbGllbnQ+CjxzZXJ2ZXI+Cmh0dHAKPC9zZXJ2ZXI+CiMgTlRMTSByZXF1aXJlcyBTU0wKPGZlYXR1cmVzPgpTU0wKPC9mZWF0dXJlcz4KIDxuYW1lPgpIVFRQIHByb3h5IENPTk5FQ1QgYXV0aCBOVExNIGFuZCB0aGVuIFBPU1QKIDwvbmFtZT4KIDxjb21tYW5kPgpodHRwOi8vdGVzdC5yZW1vdGUuc2VydmVyLmNvbToyMTMvcGF0aC8yMTMwMDAyIC0tcHJveHkgaHR0cDovLyVIT1NUSVA6JUhUVFBQT1JUIC0tcHJveHktdXNlciBzaWxseTpwZXJzb24gLS1wcm94eS1udGxtIC0tcHJveHl0dW5uZWwgLWQgInBvc3RpdCIKPC9jb21tYW5kPgo8L3Rlc3Q+CgojIFZlcmlmeSBkYXRhIGFmdGVyIHRoZSB0ZXN0IGhhcyBiZWVuICJzaG90Igo8dmVyaWZ5Pgo8c3RyaXA+Cl5Vc2VyLUFnZW50OiBjdXJsLy4qCjwvc3RyaXA+Cjxwcm90b2NvbCBub25ld2xpbmU9eWVzPgpDT05ORUNUIHRlc3QucmVtb3RlLnNlcnZlci5jb206MjEzIEhUVFAvMS4wDQpQcm94eS1BdXRob3JpemF0aW9uOiBOVExNIFRsUk1UVk5UVUFBQkFBQUFBZ0lBQUFBQUFBQWdBQUFBQUFBQUFDQUFBQUE9DQoNCkNPTk5FQ1QgdGVzdC5yZW1vdGUuc2VydmVyLmNvbToyMTMgSFRUUC8xLjANClByb3h5LUF1dGhvcml6YXRpb246IE5UTE0gVGxSTVRWTlRVQUFEQUFBQUdBQVlBRVVBQUFBWUFCZ0FYUUFBQUFBQUFBQkFBQUFBQlFBRkFFQUFBQUFBQUFBQVJRQUFBQUFBQUFCMUFBQUFBWUlBQUhOcGJHeDVvQjVDUE1xMEpEdTV0YnhMb3czc0huM2pmb1lERSs3UUpWRTdEQTBHeURFd3ZqMkJ4c0JjdFA5dFQ0Zm5DdEwxDQoNClBPU1QgL3BhdGgvMjEzMDAwMiBIVFRQLzEuMQ0KVXNlci1BZ2VudDogY3VybC83LjEyLjMtQ1ZTIChpNjg2LXBjLWxpbnV4LWdudSkgbGliY3VybC83LjEyLjMtQ1ZTIE9wZW5TU0wvMC45LjZiIHpsaWIvMS4xLjQNCkhvc3Q6IHRlc3QucmVtb3RlLnNlcnZlci5jb206MjEzDQpQcmFnbWE6IG5vLWNhY2hlDQpBY2NlcHQ6ICovKg0KQ29udGVudC1MZW5ndGg6IDYNCkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkDQoNCnBvc3RpdAo8L3Byb3RvY29sPgo8L3ZlcmlmeT4K