LyoKICogVmVydGV4IHBvc2l0aW9uIGRhdGEgZGVzY3JpYmluZyB0aGUgbGV0dGVyICdvJwogKgogKiAoYykgQ29weXJpZ2h0IDE5OTMsIFNpbGljb24gR3JhcGhpY3MsIEluYy4KICogQ29weXJpZ2h0IKkgMjAxMiBMaW5hcm8gTGltaXRlZAogKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgZ2xtYXJrMiBPcGVuR0wgKEVTKSAyLjAgYmVuY2htYXJrLgogKgogKiBnbG1hcmsyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCiAqIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKICogRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKICogdmVyc2lvbi4KICoKICogZ2xtYXJrMiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUwogKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlCiAqIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKICogZ2xtYXJrMi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICoKICogQXV0aG9yczoKICogIEplc3NlIEJhcmtlcgogKi8KI2luY2x1ZGUgImNoYXJhY3RlcnMuaCIKCnVzaW5nIExpYk1hdHJpeDo6dmVjMjsKCkxldHRlck86OkxldHRlck8oKQp7CiAgICAvLyBWZXJ0ZXggZGF0YS4uLgogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi45NzU2MTAsIDkuNjAzMjU1KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigyLjg3ODA0OSwgOS4zNDI4MjgpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDIuMjkyNjgzLCA5LjEzMTIzMSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMi4wNDg3ODAsIDguNjkxNzYwKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigxLjcwNzMxNywgOC41Mjg5OTMpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDEuNjU4NTM3LCA3LjczMTQzNCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMC44NzgwNDksIDcuMDQ3ODEzKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigxLjM0OTU5NCwgNS41NTAzNTYpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDAuNTY5MTA2LCA1LjAyOTUwMSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS41Mjg0NTUsIDQuNDQzNTQwKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigwLjk5MTg3MCwgMy40MzQzODUpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDEuOTY3NDgwLCAzLjk1NTIzOSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMS43NzIzNTgsIDIuOTk0OTE0KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigyLjQyMjc2NCwgMy44MjUwMjUpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDIuODI5MjY4LCAzLjA5MjU3NCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy4xNTQ0NzIsIDMuOTcxNTE2KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigzLjUxMjE5NSwgMy43MjczNjUpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDMuNzcyMzU4LCA0LjI2NDQ5NikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC4xMzAwODEsIDQuNTI0OTI0KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0LjE2MjYwMSwgNC45OTY5NDgpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDQuNjk5MTg3LCA1LjQwMzg2NikpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNC40NzE1NDUsIDYuNDYxODUyKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig1LjIxOTUxMiwgNy4yNDMxMzMpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDQuNDM5MDI0LCA4LjEwNTc5OSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoNS4yMzU3NzIsIDguNzU2ODY2KSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0LjA2NTA0MSwgOC44NzA4MDQpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDQuOTkxODcwLCA5LjM5MTY1OCkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy44NTM2NTgsIDkuMjI4ODkxKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMig0LjM5MDI0NCwgOS45MTI1MTMpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDMuNDYzNDE1LCA5LjQwNzkzNSkpOwogICAgdmVydGV4RGF0YV8ucHVzaF9iYWNrKHZlYzIoMy42NzQ3OTcsIDkuOTEyNTEzKSk7CiAgICB2ZXJ0ZXhEYXRhXy5wdXNoX2JhY2sodmVjMigyLjgyOTI2OCwgOS4zNDI4MjgpKTsKICAgIHZlcnRleERhdGFfLnB1c2hfYmFjayh2ZWMyKDIuOTU5MzUwLCA5LjYwMzI1NSkpOwoKICAgIC8vIEluZGV4IGRhdGEuLi4KICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMSk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTcpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTgpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMTkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjUpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjYpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjcpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjgpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMjkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzApOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzEpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMzIpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMCk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjaygyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDQpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNik7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDEwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDEyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE0KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE2KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI0KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI2KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI4KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMwKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMyKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI5KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI3KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDI1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIzKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDIxKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE5KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE3KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDE1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDEzKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDExKTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDkpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soNyk7CiAgICBpbmRleERhdGFfLnB1c2hfYmFjayg1KTsKICAgIGluZGV4RGF0YV8ucHVzaF9iYWNrKDMpOwogICAgaW5kZXhEYXRhXy5wdXNoX2JhY2soMSk7CgogICAgLy8gUHJpbWl0aXZlIHN0YXRlIHNvIHRoYXQgdGhlIGRyYXcgY2FsbCBjYW4gaXNzdWUgdGhlIHByaW1pdGl2ZXMgd2Ugd2FudC4KICAgIHVuc2lnbmVkIGludCBjdXJPZmZzZXQoMCk7CiAgICBwcmltVmVjXy5wdXNoX2JhY2soUHJpbWl0aXZlU3RhdGUoR0xfVFJJQU5HTEVfU1RSSVAsIDMzLCBjdXJPZmZzZXQpKTsKICAgIGN1ck9mZnNldCArPSAoMzMgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKICAgIHByaW1WZWNfLnB1c2hfYmFjayhQcmltaXRpdmVTdGF0ZShHTF9MSU5FX1NUUklQLCAzMywgY3VyT2Zmc2V0KSk7Cn0K